Skip to content

Commit 1a265fc

Browse files
committed
Add Version Detail api endpoint to thunderstore-api
1 parent e6fba84 commit 1a265fc

File tree

5 files changed

+70
-1
lines changed

5 files changed

+70
-1
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { ApiEndpointProps } from "../index";
2+
import { apiFetch } from "../apiFetch";
3+
import { PackageVersionDetailsRequestParams } from "../schemas/requestSchemas";
4+
import {
5+
PackageVersionDetailsResponseData,
6+
packageVersionDetailsResponseDataSchema,
7+
} from "../schemas/responseSchemas";
8+
9+
export async function fetchPackageVersionDetails(
10+
props: ApiEndpointProps<PackageVersionDetailsRequestParams, object, object>
11+
): Promise<PackageVersionDetailsResponseData> {
12+
const { config, params } = props;
13+
const path = `api/cyberstorm/package/${params.namespace_id}/${params.package_name}/v/${params.package_version}/`;
14+
15+
return await apiFetch({
16+
args: {
17+
config: config,
18+
path: path,
19+
},
20+
requestSchema: undefined,
21+
queryParamsSchema: undefined,
22+
responseSchema: packageVersionDetailsResponseDataSchema,
23+
});
24+
}

packages/thunderstore-api/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export * from "./get/packageListingDetails";
3434
export * from "./get/packageReadme";
3535
export * from "./get/packageSubmission";
3636
export * from "./get/packageVersions";
37+
export * from "./get/packageVersionDetails";
3738
export * from "./get/packageWiki";
3839
export * from "./get/ratedPackages";
3940
export * from "./get/teamDetails";

packages/thunderstore-api/src/schemas/objectSchemas.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ export const packageListingSchema = z.object({
135135

136136
export type PackageListing = z.infer<typeof packageListingSchema>;
137137

138-
const packageTeamSchema = z.object({
138+
export const packageTeamSchema = z.object({
139139
name: z.string().min(1),
140140
members: teamMemberSchema.array(),
141141
});

packages/thunderstore-api/src/schemas/requestSchemas.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,17 @@ export type PackageListingDetailsRequestParams = z.infer<
167167
typeof packageListingDetailsRequestParamsSchema
168168
>;
169169

170+
// PackageVersionDetailsRequest
171+
export const packageVersionDetailsRequestParamsSchema = z.object({
172+
namespace_id: z.string(),
173+
package_name: z.string(),
174+
package_version: z.string(),
175+
});
176+
177+
export type PackageVersionDetailsRequestParams = z.infer<
178+
typeof packageVersionDetailsRequestParamsSchema
179+
>;
180+
170181
// PackageReadmeRequest
171182
export const packageReadmeRequestParamsSchema = z.object({
172183
namespace_id: z.string(),

packages/thunderstore-api/src/schemas/responseSchemas.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
markdownRenderSchema,
1818
packageWikiPageSchema,
1919
packagePermissionsSchema,
20+
packageTeamSchema,
2021
} from "../schemas/objectSchemas";
2122
import { paginatedResults } from "../schemas/objectSchemas";
2223

@@ -108,6 +109,38 @@ export type PackageListingDetailsResponseData = z.infer<
108109
typeof packageListingDetailsResponseDataSchema
109110
>;
110111

112+
// PackageVersionDetailsResponse
113+
export const packageVersionDetailsResponseDataSchema = z.object({
114+
description: z.string(),
115+
download_count: z.number().int(),
116+
icon_url: z.string().nullable(),
117+
name: z.string().min(1),
118+
namespace: z.string().min(1),
119+
size: z.number().int(),
120+
datetime_created: z.string().datetime(),
121+
dependencies: z.array(
122+
z.object({
123+
description: z.string(),
124+
icon_url: z.string().nullable(),
125+
is_active: z.boolean(),
126+
name: z.string().min(1),
127+
namespace: z.string().min(1),
128+
version_number: z.string().min(1),
129+
is_removed: z.boolean(),
130+
is_unavailable: z.boolean(),
131+
})
132+
),
133+
dependency_count: z.number().int(),
134+
download_url: z.string(),
135+
full_version_name: z.string().min(1),
136+
team: packageTeamSchema,
137+
website_url: z.string().nullable(),
138+
});
139+
140+
export type PackageVersionDetailsResponseData = z.infer<
141+
typeof packageVersionDetailsResponseDataSchema
142+
>;
143+
111144
// PackagePermissionsResponse
112145
export const packagePermissionsResponseDataSchema = packagePermissionsSchema;
113146

0 commit comments

Comments
 (0)