Skip to content

Commit f965686

Browse files
committed
fix(winget): align API with official REST Source spec v1.9.0
- Fix search SQL performance by creating missing indexes on tags_map and commands_map - Fix nested Inclusions/Filters structure in search request types - Fix Publisher field population (prefer non-empty across versions) - Fix DefaultLocale type in packageManifests (string, not object) - Add UnsupportedQueryParameters, RequiredQueryParameters, Authentication to information - Align defineRouteMeta tags with spec (Packages, Versions, Locale, Installers, etc.) - Fix packages/[id] response schema to match PackageSingleResponse - Export all functions in winget.ts - Remove unnecessary await on synchronous getVersionManifests calls
1 parent 76916e5 commit f965686

12 files changed

Lines changed: 129 additions & 98 deletions

File tree

server/routes/api/winget/information.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { defineHandler } from "nitro/h3";
33

44
defineRouteMeta({
55
openAPI: {
6-
tags: ["WinGet API"],
6+
tags: ["Server", "Get"],
77
summary: "Get server information",
88
description: "Returns server information including supported API versions and capabilities",
99
responses: {
@@ -50,6 +50,9 @@ export default defineHandler(() => {
5050
ServerSupportedVersions: ["1.4.0", "1.9.0"],
5151
RequiredPackageMatchFields: ["PackageIdentifier"],
5252
UnsupportedPackageMatchFields: ["Market", "HasInstallerType"],
53+
UnsupportedQueryParameters: ["FetchAllManifests"],
54+
RequiredQueryParameters: [],
55+
Authentication: null,
5356
},
5457
};
5558
});

server/routes/api/winget/manifestSearch.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { defineRouteMeta } from "nitro";
22
import { defineHandler, getQuery, readBody } from "nitro/h3";
33

4-
import type { MatchType, ManifestSearchRequest, ManifestSearchResult } from "../../../utils/winget";
4+
import type { ManifestSearchRequest, ManifestSearchResult, MatchType } from "../../../utils/winget";
55
import { getIndexDb, searchPackages } from "../../../utils/winget";
66

77
defineRouteMeta({
88
openAPI: {
9-
tags: ["WinGet API"],
9+
tags: ["Package Manifests"],
1010
summary: "Search WinGet packages",
1111
description: "Search for WinGet packages by keyword with various match types",
1212
parameters: [
@@ -104,8 +104,8 @@ defineRouteMeta({
104104
* "MaximumResults": 10,
105105
* "FetchAllManifests": false,
106106
* "Query": { "KeyWord": "Adobe", "MatchType": "CaseInsensitive" },
107-
* "Inclusions": [{ "KeyWord": "Microsoft", "PackageMatchField": "PackageName", "MatchType": "CaseInsensitive" }],
108-
* "Filters": [{ "KeyWord": "preview", "PackageMatchField": "Tag", "MatchType": "CaseInsensitive" }]
107+
* "Inclusions": [{ "PackageMatchField": "PackageName", "RequestMatch": { "KeyWord": "Microsoft", "MatchType": "CaseInsensitive" } }],
108+
* "Filters": [{ "PackageMatchField": "Tag", "RequestMatch": { "KeyWord": "preview", "MatchType": "CaseInsensitive" } }]
109109
* }
110110
*/
111111
export default defineHandler(async (event) => {

server/routes/api/winget/packageManifests/[id].ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212

1313
defineRouteMeta({
1414
openAPI: {
15-
tags: ["WinGet API"],
15+
tags: ["Package Manifests", "Get"],
1616
summary: "Get package manifest",
1717
description: "Retrieve a full package manifest with all versions, locales, and installers",
1818
parameters: [
@@ -51,10 +51,11 @@ defineRouteMeta({
5151

5252
interface VersionManifest {
5353
PackageVersion: string;
54-
DefaultLocale?: Record<string, any>;
54+
DefaultLocale?: string;
5555
Channel?: string | null;
5656
Locales?: Record<string, any>[];
5757
Installers?: Record<string, any>[];
58+
Manifest?: Record<string, any>;
5859
}
5960

6061
/**
@@ -99,7 +100,7 @@ export default defineHandler(async (event: H3Event) => {
99100

100101
await Promise.allSettled(
101102
sortedVersions.map(async (version) => {
102-
const manifestFiles = await getVersionManifests(packageId, version);
103+
const manifestFiles = getVersionManifests(packageId, version);
103104
if (manifestFiles.length === 0) return;
104105

105106
const versionEntry: VersionManifest = { PackageVersion: version };
@@ -111,8 +112,9 @@ export default defineHandler(async (event: H3Event) => {
111112

112113
if (filename === `${packageId}.yaml`) {
113114
// Version manifest
114-
versionEntry.DefaultLocale = parsed;
115+
versionEntry.DefaultLocale = parsed.DefaultLocale;
115116
versionEntry.Channel = parsed.Channel;
117+
versionEntry.Manifest = parsed;
116118
} else if (filename.match(/\.installer\.yaml$/)) {
117119
// Installer manifest
118120
versionEntry.Installers = parsed.Installers;

server/routes/api/winget/packages.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { buildPackageIndex } from "../../../utils/winget";
66

77
defineRouteMeta({
88
openAPI: {
9-
tags: ["WinGet API"],
9+
tags: ["Packages", "Get"],
1010
summary: "Get all WinGet packages",
1111
description: "Retrieve a paginated list of all WinGet packages with their versions",
1212
parameters: [

server/routes/api/winget/packages/[id].ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { buildPackageIndex, createWinGetError } from "../../../../utils/winget";
66

77
defineRouteMeta({
88
openAPI: {
9-
tags: ["WinGet API"],
9+
tags: ["Packages", "Get"],
1010
summary: "Get specific WinGet package",
1111
description: "Retrieve details of a specific WinGet package by its identifier",
1212
parameters: [
@@ -28,9 +28,15 @@ defineRouteMeta({
2828
schema: {
2929
type: "object",
3030
properties: {
31-
PackageIdentifier: { type: "string" },
32-
Versions: { type: "array", items: { type: "string" } },
31+
Data: {
32+
type: "object",
33+
properties: {
34+
PackageIdentifier: { type: "string" },
35+
},
36+
required: ["PackageIdentifier"],
37+
},
3338
},
39+
required: ["Data"],
3440
},
3541
},
3642
},

server/routes/api/winget/packages/[id]/versions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212

1313
defineRouteMeta({
1414
openAPI: {
15-
tags: ["WinGet API"],
15+
tags: ["Versions", "Get"],
1616
summary: "Get all versions of a WinGet package",
1717
description: "Retrieve all available versions for a specific WinGet package",
1818
parameters: [

server/routes/api/winget/packages/[id]/versions/[version].ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111

1212
defineRouteMeta({
1313
openAPI: {
14-
tags: ["WinGet API"],
14+
tags: ["Versions", "Get"],
1515
summary: "Get specific version of a WinGet package",
1616
description: "Retrieve version metadata for a specific package version",
1717
parameters: [
@@ -76,7 +76,7 @@ export default defineHandler(async (event) => {
7676
}
7777

7878
// Get all manifest files for this version
79-
const manifestFiles = await getVersionManifests(packageId, version);
79+
const manifestFiles = getVersionManifests(packageId, version);
8080

8181
if (manifestFiles.length === 0) {
8282
return createWinGetError(event, 404, `Version ${version} of package '${packageId}' not found`);

server/routes/api/winget/packages/[id]/versions/[version]/installers.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111

1212
defineRouteMeta({
1313
openAPI: {
14-
tags: ["WinGet API"],
14+
tags: ["Installers", "Get"],
1515
summary: "Get all installers for a package version",
1616
description: "Retrieve all available installers for a specific package version",
1717
parameters: [
@@ -82,7 +82,7 @@ export default defineHandler(async (event) => {
8282
}
8383

8484
// Get all manifest files for this version
85-
const manifestFiles = await getVersionManifests(packageId, version);
85+
const manifestFiles = getVersionManifests(packageId, version);
8686

8787
if (manifestFiles.length === 0) {
8888
return createWinGetError(event, 404, `Version ${version} of package '${packageId}' not found`);

server/routes/api/winget/packages/[id]/versions/[version]/installers/[installer].ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414

1515
defineRouteMeta({
1616
openAPI: {
17-
tags: ["WinGet API"],
17+
tags: ["Installers", "Get"],
1818
summary: "Get specific installer for a package version",
1919
description: "Retrieve detailed installer information for a specific package version",
2020
parameters: [
@@ -93,7 +93,7 @@ export default defineHandler(async (event) => {
9393
}
9494

9595
// Get all manifest files for this version
96-
const manifestFiles = await getVersionManifests(packageId, version);
96+
const manifestFiles = getVersionManifests(packageId, version);
9797

9898
if (manifestFiles.length === 0) {
9999
return createWinGetError(event, 404, `Version ${version} of package '${packageId}' not found`);

server/routes/api/winget/packages/[id]/versions/[version]/locales.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111

1212
defineRouteMeta({
1313
openAPI: {
14-
tags: ["WinGet API"],
14+
tags: ["Locale", "Get"],
1515
summary: "Get all locales for a package version",
1616
description: "Retrieve all available locales for a specific package version",
1717
parameters: [
@@ -82,7 +82,7 @@ export default defineHandler(async (event) => {
8282
}
8383

8484
// Get all manifest files for this version
85-
const manifestFiles = await getVersionManifests(packageId, version);
85+
const manifestFiles = getVersionManifests(packageId, version);
8686

8787
if (manifestFiles.length === 0) {
8888
return createWinGetError(event, 404, `Version ${version} of package '${packageId}' not found`);

0 commit comments

Comments
 (0)