Skip to content

Commit 66ae75b

Browse files
authored
Merge pull request #87 from vercel/vteo/update-partner-api-to-transfer
added schemas
2 parents 25ea73d + af0c141 commit 66ae75b

File tree

2 files changed

+66
-0
lines changed
  • app/v1/installations/[installationId]/transfers/to-marketplace
  • lib/vercel

2 files changed

+66
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { installIntegration } from "@/lib/partner";
2+
import { readRequestBodyWithSchema } from "@/lib/utils";
3+
import { withAuth } from "@/lib/vercel/auth";
4+
import { TransferInstallationToMarketplaceRequestSchema } from "@/lib/vercel/schemas";
5+
6+
export const POST = withAuth(async (claims, request) => {
7+
const requestBody = await readRequestBodyWithSchema(
8+
request,
9+
TransferInstallationToMarketplaceRequestSchema
10+
);
11+
12+
if (!requestBody.success) {
13+
return new Response(null, { status: 400 });
14+
}
15+
16+
await installIntegration(claims.installation_id, {
17+
type: "marketplace",
18+
...requestBody.data,
19+
});
20+
21+
return Response.json({});
22+
});

lib/vercel/schemas.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -702,3 +702,47 @@ export type RequestTransferToMarketplaceResponse = z.infer<
702702
export const requestTransferToMarketplaceResponseSchema = z.object({
703703
continueUrl: z.string().url(),
704704
});
705+
706+
export type TransferInstallationToMarketplaceRequest = z.infer<
707+
typeof TransferInstallationToMarketplaceRequestSchema
708+
>;
709+
710+
export const TransferInstallationToMarketplaceRequestSchema = z.object({
711+
transferId: z
712+
.string()
713+
.describe('Provided in the "request-transfer-to-marketplace".'),
714+
billingPlanId: z
715+
.string()
716+
.optional()
717+
.describe(
718+
'Transfer billing plan, if one was provided in the "request-transfer-to-marketplace".'
719+
),
720+
metadata: metadataSchema
721+
.optional()
722+
.describe(
723+
'Installation-level metadata, if one was provided in the "request-transfer-to-marketplace".'
724+
),
725+
scopes: z
726+
.array(z.string().min(1))
727+
.describe("Scopes for the new installation post transfer."),
728+
acceptedPolicies: z.record(datetimeSchema),
729+
credentials: z.object({
730+
access_token: z.string().min(1),
731+
token_type: z.string().min(1),
732+
}),
733+
account: z
734+
.object({
735+
name: z.string().optional(),
736+
url: z.string().url(),
737+
contact: z
738+
.object({
739+
email: z.string().email(),
740+
name: z.string().optional(),
741+
})
742+
.nullable()
743+
.optional(),
744+
})
745+
.describe(
746+
"The account information for this installation. Use Get Account Info API to re-fetch this data post transfer."
747+
),
748+
});

0 commit comments

Comments
 (0)