@se-studio/contentful-cms 3.15.6 → 3.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/HOSTED.md +18 -0
- package/dist/commands/host-pack-publish.d.ts +23 -0
- package/dist/commands/host-pack-publish.d.ts.map +1 -0
- package/dist/commands/host-pack-publish.js +84 -0
- package/dist/commands/host-pack-publish.js.map +1 -0
- package/dist/commands/host.d.ts.map +1 -1
- package/dist/commands/host.js +2 -0
- package/dist/commands/host.js.map +1 -1
- package/dist/config/hosted.d.ts +14 -0
- package/dist/config/hosted.d.ts.map +1 -1
- package/dist/config/hosted.js +54 -0
- package/dist/config/hosted.js.map +1 -1
- package/dist/contentful/cma-user-agent.d.ts +1 -1
- package/dist/editor-pack/generate.d.ts +2 -0
- package/dist/editor-pack/generate.d.ts.map +1 -1
- package/dist/editor-pack/generate.js +1 -0
- package/dist/editor-pack/generate.js.map +1 -1
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/hosted/index.d.ts +4 -2
- package/dist/hosted/index.d.ts.map +1 -1
- package/dist/hosted/index.js +4 -2
- package/dist/hosted/index.js.map +1 -1
- package/dist/hosted/next/context.d.ts +6 -1
- package/dist/hosted/next/context.d.ts.map +1 -1
- package/dist/hosted/next/context.js +18 -2
- package/dist/hosted/next/context.js.map +1 -1
- package/dist/hosted/next/editor-pack-path.d.ts +4 -0
- package/dist/hosted/next/editor-pack-path.d.ts.map +1 -1
- package/dist/hosted/next/editor-pack-path.js +16 -0
- package/dist/hosted/next/editor-pack-path.js.map +1 -1
- package/dist/hosted/next/routes/customer-index.d.ts.map +1 -1
- package/dist/hosted/next/routes/customer-index.js +20 -3
- package/dist/hosted/next/routes/customer-index.js.map +1 -1
- package/dist/hosted/next/routes/customer-resource.d.ts +1 -1
- package/dist/hosted/next/routes/customer-resource.d.ts.map +1 -1
- package/dist/hosted/next/routes/customer-resource.js +13 -3
- package/dist/hosted/next/routes/customer-resource.js.map +1 -1
- package/dist/hosted/next/routes/health.d.ts.map +1 -1
- package/dist/hosted/next/routes/health.js +77 -15
- package/dist/hosted/next/routes/health.js.map +1 -1
- package/dist/hosted/next/routes/link-contentful.js +1 -1
- package/dist/hosted/next/routes/link-contentful.js.map +1 -1
- package/dist/hosted/next/routes/mcp.d.ts +6 -1
- package/dist/hosted/next/routes/mcp.d.ts.map +1 -1
- package/dist/hosted/next/routes/mcp.js +50 -22
- package/dist/hosted/next/routes/mcp.js.map +1 -1
- package/dist/hosted/next/routes/oauth-authorization-server.d.ts +1 -1
- package/dist/hosted/next/routes/oauth-authorization-server.d.ts.map +1 -1
- package/dist/hosted/next/routes/oauth-authorization-server.js +2 -2
- package/dist/hosted/next/routes/oauth-authorization-server.js.map +1 -1
- package/dist/hosted/next/routes/oauth-authorize.js +1 -1
- package/dist/hosted/next/routes/oauth-authorize.js.map +1 -1
- package/dist/hosted/next/routes/oauth-protected-resource-path.d.ts +1 -1
- package/dist/hosted/next/routes/oauth-protected-resource-path.d.ts.map +1 -1
- package/dist/hosted/next/routes/oauth-protected-resource-path.js +2 -2
- package/dist/hosted/next/routes/oauth-protected-resource-path.js.map +1 -1
- package/dist/hosted/next/routes/oauth-protected-resource.d.ts +1 -1
- package/dist/hosted/next/routes/oauth-protected-resource.d.ts.map +1 -1
- package/dist/hosted/next/routes/oauth-protected-resource.js +2 -2
- package/dist/hosted/next/routes/oauth-protected-resource.js.map +1 -1
- package/dist/hosted/next/routes/oauth-register.js +1 -1
- package/dist/hosted/next/routes/oauth-register.js.map +1 -1
- package/dist/hosted/next/routes/oauth-token.js +1 -1
- package/dist/hosted/next/routes/oauth-token.js.map +1 -1
- package/dist/hosted/oauth/auth.d.ts +1 -1
- package/dist/hosted/oauth/auth.d.ts.map +1 -1
- package/dist/hosted/oauth/auth.js +3 -3
- package/dist/hosted/oauth/auth.js.map +1 -1
- package/dist/hosted/oauth/config.d.ts +14 -4
- package/dist/hosted/oauth/config.d.ts.map +1 -1
- package/dist/hosted/oauth/config.js +44 -8
- package/dist/hosted/oauth/config.js.map +1 -1
- package/dist/hosted/oauth/handlers.d.ts +5 -3
- package/dist/hosted/oauth/handlers.d.ts.map +1 -1
- package/dist/hosted/oauth/handlers.js +15 -10
- package/dist/hosted/oauth/handlers.js.map +1 -1
- package/dist/hosted/pack-fetch.d.ts +29 -0
- package/dist/hosted/pack-fetch.d.ts.map +1 -0
- package/dist/hosted/pack-fetch.js +180 -0
- package/dist/hosted/pack-fetch.js.map +1 -0
- package/dist/hosted/tenant-registry.d.ts +68 -0
- package/dist/hosted/tenant-registry.d.ts.map +1 -0
- package/dist/hosted/tenant-registry.js +167 -0
- package/dist/hosted/tenant-registry.js.map +1 -0
- package/docs/editor-tasks/publish-handoff.md +10 -0
- package/package.json +1 -1
- package/skills/core/SKILL.md +11 -0
|
@@ -2,7 +2,7 @@ import { handleOAuthRegisterPost } from '../../index.js';
|
|
|
2
2
|
import { corsPreflight, withCors } from '../../oauth/cors.js';
|
|
3
3
|
import { createOAuthHandlerContext } from '../context.js';
|
|
4
4
|
export async function POST(request) {
|
|
5
|
-
return withCors(await handleOAuthRegisterPost(request, createOAuthHandlerContext()));
|
|
5
|
+
return withCors(await handleOAuthRegisterPost(request, createOAuthHandlerContext(request)));
|
|
6
6
|
}
|
|
7
7
|
export async function OPTIONS() {
|
|
8
8
|
return corsPreflight();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-register.js","sourceRoot":"","sources":["../../../../src/hosted/next/routes/oauth-register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAgB;IACzC,OAAO,QAAQ,CAAC,MAAM,uBAAuB,CAAC,OAAO,EAAE,yBAAyB,
|
|
1
|
+
{"version":3,"file":"oauth-register.js","sourceRoot":"","sources":["../../../../src/hosted/next/routes/oauth-register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAgB;IACzC,OAAO,QAAQ,CAAC,MAAM,uBAAuB,CAAC,OAAO,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,OAAO,aAAa,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { handleOAuthTokenPost } from '../../index.js';
|
|
|
2
2
|
import { corsPreflight, withCors } from '../../oauth/cors.js';
|
|
3
3
|
import { createOAuthHandlerContext } from '../context.js';
|
|
4
4
|
export async function POST(request) {
|
|
5
|
-
return withCors(await handleOAuthTokenPost(request, createOAuthHandlerContext()));
|
|
5
|
+
return withCors(await handleOAuthTokenPost(request, createOAuthHandlerContext(request)));
|
|
6
6
|
}
|
|
7
7
|
export async function OPTIONS() {
|
|
8
8
|
return corsPreflight();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-token.js","sourceRoot":"","sources":["../../../../src/hosted/next/routes/oauth-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAgB;IACzC,OAAO,QAAQ,CAAC,MAAM,oBAAoB,CAAC,OAAO,EAAE,yBAAyB,
|
|
1
|
+
{"version":3,"file":"oauth-token.js","sourceRoot":"","sources":["../../../../src/hosted/next/routes/oauth-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAgB;IACzC,OAAO,QAAQ,CAAC,MAAM,oBAAoB,CAAC,OAAO,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,OAAO,aAAa,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -5,7 +5,7 @@ export declare class McpUnauthorizedError extends Error {
|
|
|
5
5
|
constructor(reason: McpAuthFailureReason);
|
|
6
6
|
}
|
|
7
7
|
export declare function isMcpUnauthorizedError(error: unknown): error is McpUnauthorizedError;
|
|
8
|
-
export declare function unauthorizedMcpResponse(reason?: McpAuthFailureReason): Response;
|
|
8
|
+
export declare function unauthorizedMcpResponse(reason?: McpAuthFailureReason, request?: Request): Response;
|
|
9
9
|
export declare function resolveContentfulTokenFromRequest(request: Request, store: OAuthStore,
|
|
10
10
|
/** Host Contentful space — same isolation as session keys (deployment.spaceId). */
|
|
11
11
|
spaceId?: string): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/hosted/oauth/auth.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,oBAAoB,GAC5B,gBAAgB,GAChB,iBAAiB,GACjB,0BAA0B,GAC1B,0BAA0B,CAAC;AAE/B,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IAEtC,YAAY,MAAM,EAAE,oBAAoB,EAIvC;CACF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAEpF;AAQD,wBAAgB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/hosted/oauth/auth.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,oBAAoB,GAC5B,gBAAgB,GAChB,iBAAiB,GACjB,0BAA0B,GAC1B,0BAA0B,CAAC;AAE/B,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IAEtC,YAAY,MAAM,EAAE,oBAAoB,EAIvC;CACF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAEpF;AAQD,wBAAgB,uBAAuB,CACrC,MAAM,GAAE,oBAAuC,EAC/C,OAAO,CAAC,EAAE,OAAO,GAChB,QAAQ,CAaV;AAED,wBAAsB,iCAAiC,CACrD,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,UAAU;AACjB,mFAAmF;AACnF,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC,CAmBnD"}
|
|
@@ -17,8 +17,8 @@ const INVALID_TOKEN_DESCRIPTIONS = {
|
|
|
17
17
|
missing_contentful_token: 'Contentful session expired. Reconnect and sign in with Contentful.',
|
|
18
18
|
invalid_contentful_token: 'Contentful session expired. Reconnect and sign in with Contentful.',
|
|
19
19
|
};
|
|
20
|
-
export function unauthorizedMcpResponse(reason = 'missing_bearer') {
|
|
21
|
-
const metadataUrl = getProtectedResourceMetadataUrl();
|
|
20
|
+
export function unauthorizedMcpResponse(reason = 'missing_bearer', request) {
|
|
21
|
+
const metadataUrl = getProtectedResourceMetadataUrl(request);
|
|
22
22
|
const description = INVALID_TOKEN_DESCRIPTIONS[reason];
|
|
23
23
|
const www = description
|
|
24
24
|
? `Bearer error="invalid_token", error_description="${description}", resource_metadata="${metadataUrl}"`
|
|
@@ -40,7 +40,7 @@ spaceId) {
|
|
|
40
40
|
}
|
|
41
41
|
let sub;
|
|
42
42
|
try {
|
|
43
|
-
({ sub } = await verifyMcpAccessToken(bearer, getMcpResourceUrl()));
|
|
43
|
+
({ sub } = await verifyMcpAccessToken(bearer, getMcpResourceUrl(request)));
|
|
44
44
|
}
|
|
45
45
|
catch {
|
|
46
46
|
throw new McpUnauthorizedError('invalid_mcp_jwt');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/hosted/oauth/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAShD,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,MAAM,CAAuB;IAEtC,YAAY,MAA4B;QACtC,KAAK,CAAC,cAAc,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,KAAK,YAAY,oBAAoB,CAAC;AAC/C,CAAC;AAED,MAAM,0BAA0B,GAAkD;IAChF,eAAe,EAAE,yCAAyC;IAC1D,wBAAwB,EAAE,oEAAoE;IAC9F,wBAAwB,EAAE,oEAAoE;CAC/F,CAAC;AAEF,MAAM,UAAU,uBAAuB,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/hosted/oauth/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAShD,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,MAAM,CAAuB;IAEtC,YAAY,MAA4B;QACtC,KAAK,CAAC,cAAc,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,KAAK,YAAY,oBAAoB,CAAC;AAC/C,CAAC;AAED,MAAM,0BAA0B,GAAkD;IAChF,eAAe,EAAE,yCAAyC;IAC1D,wBAAwB,EAAE,oEAAoE;IAC9F,wBAAwB,EAAE,oEAAoE;CAC/F,CAAC;AAEF,MAAM,UAAU,uBAAuB,CACrC,MAAM,GAAyB,gBAAgB,EAC/C,OAAiB;IAEjB,MAAM,WAAW,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,WAAW;QACrB,CAAC,CAAC,oDAAoD,WAAW,yBAAyB,WAAW,GAAG;QACxG,CAAC,CAAC,6BAA6B,WAAW,GAAG,CAAC;IAChD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,EAAE;QACrE,MAAM,EAAE,GAAG;QACX,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,kBAAkB,EAAE,GAAG;SACxB;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,OAAgB,EAChB,KAAiB;AACjB,mFAAmF;AACnF,OAAgB;IAEhB,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACrE,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,oBAAoB,CAAC,0BAA0B,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -1,9 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public origin from `CMS_EDIT_PUBLIC_ORIGIN` (single-tenant / env fallback).
|
|
3
|
+
* Prefer {@link resolvePublicOrigin} when a Request is available.
|
|
4
|
+
*/
|
|
1
5
|
export declare function getPublicOrigin(): string;
|
|
2
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Per-request public origin for OAuth, MCP resource URL, and staged upload.
|
|
8
|
+
* Multi-tenant: registry `publicOrigin` for the request Host (or override).
|
|
9
|
+
* Single-tenant: `CMS_EDIT_PUBLIC_ORIGIN`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function resolvePublicOrigin(request?: Request): string;
|
|
12
|
+
export declare function getMcpResourceUrl(request?: Request): string;
|
|
3
13
|
/** RFC 9728 path suffix for the MCP resource (`/.well-known/oauth-protected-resource/api/mcp`). */
|
|
4
14
|
export declare function isMcpProtectedResourcePath(segments: readonly string[]): boolean;
|
|
5
15
|
export declare function getContentfulOAuthClientId(): string;
|
|
6
|
-
export declare function getContentfulOAuthRedirectUri(): string;
|
|
7
|
-
export declare function getContentfulAuthorizeUrl(authRequestId: string): string;
|
|
8
|
-
export declare function getProtectedResourceMetadataUrl(): string;
|
|
16
|
+
export declare function getContentfulOAuthRedirectUri(request?: Request): string;
|
|
17
|
+
export declare function getContentfulAuthorizeUrl(authRequestId: string, requestOrOrigin?: Request | string): string;
|
|
18
|
+
export declare function getProtectedResourceMetadataUrl(request?: Request): string;
|
|
9
19
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/hosted/oauth/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/hosted/oauth/config.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAuB7D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAE3D;AAED,mGAAmG;AACnG,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAE/E;AAED,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAED,wBAAgB,6BAA6B,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAEvE;AAED,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,MAAM,EACrB,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,GACjC,MAAM,CAaR;AAED,wBAAgB,+BAA+B,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAEzE"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isMultiTenantHostedMode, loadTenantRegistryFromEnv, resolveRequestHostname, } from '../tenant-registry.js';
|
|
1
2
|
function requireEnv(name) {
|
|
2
3
|
const value = process.env[name]?.trim();
|
|
3
4
|
if (!value) {
|
|
@@ -5,11 +6,43 @@ function requireEnv(name) {
|
|
|
5
6
|
}
|
|
6
7
|
return value;
|
|
7
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Public origin from `CMS_EDIT_PUBLIC_ORIGIN` (single-tenant / env fallback).
|
|
11
|
+
* Prefer {@link resolvePublicOrigin} when a Request is available.
|
|
12
|
+
*/
|
|
8
13
|
export function getPublicOrigin() {
|
|
9
14
|
return requireEnv('CMS_EDIT_PUBLIC_ORIGIN').replace(/\/$/, '');
|
|
10
15
|
}
|
|
11
|
-
|
|
12
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Per-request public origin for OAuth, MCP resource URL, and staged upload.
|
|
18
|
+
* Multi-tenant: registry `publicOrigin` for the request Host (or override).
|
|
19
|
+
* Single-tenant: `CMS_EDIT_PUBLIC_ORIGIN`.
|
|
20
|
+
*/
|
|
21
|
+
export function resolvePublicOrigin(request) {
|
|
22
|
+
if (!request || !isMultiTenantHostedMode()) {
|
|
23
|
+
return getPublicOrigin();
|
|
24
|
+
}
|
|
25
|
+
const registry = loadTenantRegistryFromEnv();
|
|
26
|
+
const hostname = resolveRequestHostname(request);
|
|
27
|
+
if (registry && hostname) {
|
|
28
|
+
const tenant = registry.tenants.find((t) => t.hostname === hostname);
|
|
29
|
+
if (tenant) {
|
|
30
|
+
return tenant.publicOrigin;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const url = new URL(request.url);
|
|
35
|
+
if (hostname) {
|
|
36
|
+
return `${url.protocol}//${hostname}`.replace(/\/$/, '');
|
|
37
|
+
}
|
|
38
|
+
return url.origin.replace(/\/$/, '');
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return getPublicOrigin();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function getMcpResourceUrl(request) {
|
|
45
|
+
return `${resolvePublicOrigin(request)}/api/mcp`;
|
|
13
46
|
}
|
|
14
47
|
/** RFC 9728 path suffix for the MCP resource (`/.well-known/oauth-protected-resource/api/mcp`). */
|
|
15
48
|
export function isMcpProtectedResourcePath(segments) {
|
|
@@ -18,20 +51,23 @@ export function isMcpProtectedResourcePath(segments) {
|
|
|
18
51
|
export function getContentfulOAuthClientId() {
|
|
19
52
|
return requireEnv('CONTENTFUL_OAUTH_CLIENT_ID');
|
|
20
53
|
}
|
|
21
|
-
export function getContentfulOAuthRedirectUri() {
|
|
22
|
-
return `${
|
|
54
|
+
export function getContentfulOAuthRedirectUri(request) {
|
|
55
|
+
return `${resolvePublicOrigin(request)}/oauth/contentful-callback`;
|
|
23
56
|
}
|
|
24
|
-
export function getContentfulAuthorizeUrl(authRequestId) {
|
|
57
|
+
export function getContentfulAuthorizeUrl(authRequestId, requestOrOrigin) {
|
|
58
|
+
const redirectUri = typeof requestOrOrigin === 'string'
|
|
59
|
+
? `${requestOrOrigin.replace(/\/$/, '')}/oauth/contentful-callback`
|
|
60
|
+
: getContentfulOAuthRedirectUri(requestOrOrigin);
|
|
25
61
|
const params = new URLSearchParams({
|
|
26
62
|
response_type: 'token',
|
|
27
63
|
client_id: getContentfulOAuthClientId(),
|
|
28
|
-
redirect_uri:
|
|
64
|
+
redirect_uri: redirectUri,
|
|
29
65
|
scope: 'content_management_manage',
|
|
30
66
|
state: authRequestId,
|
|
31
67
|
});
|
|
32
68
|
return `https://be.contentful.com/oauth/authorize?${params.toString()}`;
|
|
33
69
|
}
|
|
34
|
-
export function getProtectedResourceMetadataUrl() {
|
|
35
|
-
return `${
|
|
70
|
+
export function getProtectedResourceMetadataUrl(request) {
|
|
71
|
+
return `${resolvePublicOrigin(request)}/.well-known/oauth-protected-resource`;
|
|
36
72
|
}
|
|
37
73
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/hosted/oauth/config.ts"],"names":[],"mappings":"AAAA,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,UAAU,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/hosted/oauth/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,15 +3,17 @@ import { type OAuthStore } from './store.js';
|
|
|
3
3
|
export interface OAuthHandlerContext {
|
|
4
4
|
store: OAuthStore;
|
|
5
5
|
deployment: HostedDeploymentConfig;
|
|
6
|
+
/** Request-scoped public origin (Host / registry in multi-tenant mode). */
|
|
7
|
+
publicOrigin: string;
|
|
6
8
|
displayName?: string;
|
|
7
9
|
}
|
|
8
10
|
export declare function handleOAuthAuthorizeGet(request: Request, ctx: OAuthHandlerContext): Promise<Response>;
|
|
9
11
|
export declare function handleOAuthRegisterPost(request: Request, ctx: OAuthHandlerContext): Promise<Response>;
|
|
10
12
|
export declare function handleOAuthTokenPost(request: Request, ctx: OAuthHandlerContext): Promise<Response>;
|
|
11
13
|
export declare function handleLinkContentfulPost(request: Request, ctx: OAuthHandlerContext): Promise<Response>;
|
|
12
|
-
export declare function handleOAuthAuthorizationServerMetadataGet(): Response;
|
|
13
|
-
export declare function handleOAuthProtectedResourceMetadataGet(): Response;
|
|
14
|
-
export declare function handleOAuthHealthCheck(): Promise<{
|
|
14
|
+
export declare function handleOAuthAuthorizationServerMetadataGet(request?: Request): Response;
|
|
15
|
+
export declare function handleOAuthProtectedResourceMetadataGet(request?: Request): Response;
|
|
16
|
+
export declare function handleOAuthHealthCheck(request?: Request): Promise<{
|
|
15
17
|
ok: boolean;
|
|
16
18
|
detail: string;
|
|
17
19
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../src/hosted/oauth/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAA4B,MAAM,wBAAwB,CAAC;AAmB/F,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,sBAAsB,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAmDD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,QAAQ,CAAC,CA0EnB;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,QAAQ,CAAC,CA4BnB;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,QAAQ,CAAC,CAgGnB;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,QAAQ,CAAC,CAiDnB;AAED,wBAAgB,yCAAyC,
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../src/hosted/oauth/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAA4B,MAAM,wBAAwB,CAAC;AAmB/F,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,sBAAsB,CAAC;IACnC,2EAA2E;IAC3E,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAmDD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,QAAQ,CAAC,CA0EnB;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,QAAQ,CAAC,CA4BnB;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,QAAQ,CAAC,CAgGnB;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,QAAQ,CAAC,CAiDnB;AAED,wBAAgB,yCAAyC,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,CAcrF;AAED,wBAAgB,uCAAuC,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,CAQnF;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB1C"}
|
|
@@ -2,7 +2,7 @@ import { validatePatForDeployment } from '../../config/hosted.js';
|
|
|
2
2
|
import { flushTelemetry, recordOAuthTelemetryFailure, recordOAuthTelemetrySuccess, } from '../../telemetry/index.js';
|
|
3
3
|
import { CIMD_CLIENT_TTL_SECONDS, fetchClientIdMetadata, isCimdClientId, metadataAllowsRedirect, } from './cimd.js';
|
|
4
4
|
import { completeAuthorizationCodeGrant, issueAuthorizationRedirect } from './complete.js';
|
|
5
|
-
import { getContentfulAuthorizeUrl,
|
|
5
|
+
import { getContentfulAuthorizeUrl, getPublicOrigin, resolvePublicOrigin } from './config.js';
|
|
6
6
|
import { oauthLogAuthFailure, oauthLogVerbose, patValidationFailureReason } from './log.js';
|
|
7
7
|
import { noteOauthRedirect } from './redirect-hosts.js';
|
|
8
8
|
import { normalizeLoopbackRedirectUri, redirectUriMatchesRegistered } from './redirect-uri.js';
|
|
@@ -102,7 +102,7 @@ export async function handleOAuthAuthorizeGet(request, ctx) {
|
|
|
102
102
|
resource,
|
|
103
103
|
scope: granted.scope,
|
|
104
104
|
});
|
|
105
|
-
const contentfulAuthorizeUrl = getContentfulAuthorizeUrl(authRequestId);
|
|
105
|
+
const contentfulAuthorizeUrl = getContentfulAuthorizeUrl(authRequestId, ctx.publicOrigin);
|
|
106
106
|
return Response.redirect(contentfulAuthorizeUrl, 302);
|
|
107
107
|
}
|
|
108
108
|
export async function handleOAuthRegisterPost(request, ctx) {
|
|
@@ -248,7 +248,7 @@ export async function handleLinkContentfulPost(request, ctx) {
|
|
|
248
248
|
spaceId: ctx.deployment.spaceId,
|
|
249
249
|
projectKey: ctx.deployment.projectKey,
|
|
250
250
|
});
|
|
251
|
-
const origin =
|
|
251
|
+
const origin = ctx.publicOrigin;
|
|
252
252
|
const resumeUrl = new URL(`${origin}/oauth/authorize`);
|
|
253
253
|
resumeUrl.searchParams.set('resume', authRequestId);
|
|
254
254
|
resumeUrl.searchParams.set('sub', user.userId);
|
|
@@ -267,8 +267,8 @@ export async function handleLinkContentfulPost(request, ctx) {
|
|
|
267
267
|
return Response.json({ error: message }, { status: 401 });
|
|
268
268
|
}
|
|
269
269
|
}
|
|
270
|
-
export function handleOAuthAuthorizationServerMetadataGet() {
|
|
271
|
-
const origin =
|
|
270
|
+
export function handleOAuthAuthorizationServerMetadataGet(request) {
|
|
271
|
+
const origin = resolvePublicOrigin(request);
|
|
272
272
|
return Response.json({
|
|
273
273
|
issuer: origin,
|
|
274
274
|
authorization_endpoint: `${origin}/oauth/authorize`,
|
|
@@ -282,18 +282,23 @@ export function handleOAuthAuthorizationServerMetadataGet() {
|
|
|
282
282
|
client_id_metadata_document_supported: true,
|
|
283
283
|
});
|
|
284
284
|
}
|
|
285
|
-
export function handleOAuthProtectedResourceMetadataGet() {
|
|
286
|
-
const origin =
|
|
285
|
+
export function handleOAuthProtectedResourceMetadataGet(request) {
|
|
286
|
+
const origin = resolvePublicOrigin(request);
|
|
287
287
|
return Response.json({
|
|
288
|
-
resource:
|
|
288
|
+
resource: `${origin}/api/mcp`,
|
|
289
289
|
authorization_servers: [origin],
|
|
290
290
|
scopes_supported: [...CMS_EDIT_OAUTH_SCOPES],
|
|
291
291
|
bearer_methods_supported: ['header'],
|
|
292
292
|
});
|
|
293
293
|
}
|
|
294
|
-
export async function handleOAuthHealthCheck() {
|
|
294
|
+
export async function handleOAuthHealthCheck(request) {
|
|
295
295
|
try {
|
|
296
|
-
|
|
296
|
+
if (request) {
|
|
297
|
+
resolvePublicOrigin(request);
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
getPublicOrigin();
|
|
301
|
+
}
|
|
297
302
|
if (!process.env['MCP_OAUTH_JWT_SECRET']?.trim()) {
|
|
298
303
|
return { ok: false, detail: 'Missing MCP_OAUTH_JWT_SECRET' };
|
|
299
304
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../../src/hosted/oauth/handlers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../../src/hosted/oauth/handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { EditorPackManifest } from '../editor-pack/generate.js';
|
|
2
|
+
import type { TenantRegistryEntry } from './tenant-registry.js';
|
|
3
|
+
export declare class PackFetchError extends Error {
|
|
4
|
+
constructor(message: string);
|
|
5
|
+
}
|
|
6
|
+
export declare class PackSpaceMismatchError extends Error {
|
|
7
|
+
readonly expectedSpaceId: string;
|
|
8
|
+
readonly packSpaceId: string | undefined;
|
|
9
|
+
readonly projectKey: string;
|
|
10
|
+
constructor(expectedSpaceId: string, packSpaceId: string | undefined, projectKey: string);
|
|
11
|
+
}
|
|
12
|
+
export interface ResolvedEditorPack {
|
|
13
|
+
packPath: string;
|
|
14
|
+
packTag: string;
|
|
15
|
+
packRepo: string;
|
|
16
|
+
packAssetName: string;
|
|
17
|
+
source: 'github-release' | 'local';
|
|
18
|
+
manifest: EditorPackManifest | null;
|
|
19
|
+
}
|
|
20
|
+
export declare function assertPackMatchesTenant(tenant: TenantRegistryEntry, manifest: EditorPackManifest | null): void;
|
|
21
|
+
/**
|
|
22
|
+
* Fetch (or reuse cache) a tenant's editor-pack from a GitHub Release asset.
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveEditorPackForTenant(tenant: TenantRegistryEntry, options?: {
|
|
25
|
+
forceRefresh?: boolean;
|
|
26
|
+
}): Promise<ResolvedEditorPack>;
|
|
27
|
+
/** Read cached source metadata if present (health reporting). */
|
|
28
|
+
export declare function readCachedPackSource(packPath: string): Record<string, unknown> | null;
|
|
29
|
+
//# sourceMappingURL=pack-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack-fetch.d.ts","sourceRoot":"","sources":["../../src/hosted/pack-fetch.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAIhE,qBAAa,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAE7C,QAAQ,CAAC,eAAe,EAAE,MAAM;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM;IAH7B,YACW,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,UAAU,EAAE,MAAM,EAO5B;CACF;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC;IACnC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACrC;AA2BD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,EAAE,kBAAkB,GAAG,IAAI,GAClC,IAAI,CAkBN;AAwED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,mBAAmB,EAC3B,OAAO,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACnC,OAAO,CAAC,kBAAkB,CAAC,CA6E7B;AAED,iEAAiE;AACjE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAQrF"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { cpSync, createWriteStream, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync, } from 'node:fs';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { pipeline } from 'node:stream/promises';
|
|
6
|
+
import { promisify } from 'node:util';
|
|
7
|
+
import { loadEditorPackManifest } from '../editor-pack/load.js';
|
|
8
|
+
const execFileAsync = promisify(execFile);
|
|
9
|
+
export class PackFetchError extends Error {
|
|
10
|
+
constructor(message) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = 'PackFetchError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class PackSpaceMismatchError extends Error {
|
|
16
|
+
expectedSpaceId;
|
|
17
|
+
packSpaceId;
|
|
18
|
+
projectKey;
|
|
19
|
+
constructor(expectedSpaceId, packSpaceId, projectKey) {
|
|
20
|
+
super(`Editor pack space mismatch for ${projectKey}: registry spaceId=${expectedSpaceId}, ` +
|
|
21
|
+
`pack spaceId=${packSpaceId ?? '(missing)'}. Refusing to serve pack.`);
|
|
22
|
+
this.expectedSpaceId = expectedSpaceId;
|
|
23
|
+
this.packSpaceId = packSpaceId;
|
|
24
|
+
this.projectKey = projectKey;
|
|
25
|
+
this.name = 'PackSpaceMismatchError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function packCacheRoot() {
|
|
29
|
+
return (process.env['CMS_EDIT_PACK_CACHE_DIR']?.trim() || path.join(tmpdir(), 'cms-edit-pack-cache'));
|
|
30
|
+
}
|
|
31
|
+
function githubToken() {
|
|
32
|
+
return (process.env['CMS_EDIT_PACK_GITHUB_TOKEN']?.trim() ||
|
|
33
|
+
process.env['GITHUB_TOKEN']?.trim() ||
|
|
34
|
+
undefined);
|
|
35
|
+
}
|
|
36
|
+
export function assertPackMatchesTenant(tenant, manifest) {
|
|
37
|
+
if (!manifest) {
|
|
38
|
+
throw new PackFetchError(`Editor pack manifest missing for tenant ${tenant.projectKey}`);
|
|
39
|
+
}
|
|
40
|
+
if (manifest.projectKey && manifest.projectKey !== tenant.projectKey) {
|
|
41
|
+
throw new PackFetchError(`Editor pack projectKey mismatch for hostname ${tenant.hostname}: ` +
|
|
42
|
+
`registry=${tenant.projectKey}, pack=${manifest.projectKey}`);
|
|
43
|
+
}
|
|
44
|
+
const packSpaceId = manifest.spaceId?.trim();
|
|
45
|
+
if (packSpaceId && packSpaceId !== tenant.spaceId) {
|
|
46
|
+
throw new PackSpaceMismatchError(tenant.spaceId, packSpaceId, tenant.projectKey);
|
|
47
|
+
}
|
|
48
|
+
// Release-fetched packs must declare spaceId so Host routing cannot serve the wrong space.
|
|
49
|
+
if (!packSpaceId) {
|
|
50
|
+
throw new PackSpaceMismatchError(tenant.spaceId, undefined, tenant.projectKey);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async function fetchGitHubRelease(repo, tag) {
|
|
54
|
+
const token = githubToken();
|
|
55
|
+
const headers = {
|
|
56
|
+
Accept: 'application/vnd.github+json',
|
|
57
|
+
'User-Agent': 'se-studio-cms-edit-pack-fetch',
|
|
58
|
+
'X-GitHub-Api-Version': '2022-11-28',
|
|
59
|
+
};
|
|
60
|
+
if (token) {
|
|
61
|
+
headers.Authorization = `Bearer ${token}`;
|
|
62
|
+
}
|
|
63
|
+
const res = await fetch(`https://api.github.com/repos/${repo}/releases/tags/${encodeURIComponent(tag)}`, { headers });
|
|
64
|
+
if (!res.ok) {
|
|
65
|
+
throw new PackFetchError(`GitHub release ${repo}@${tag} failed: ${res.status} ${res.statusText}`);
|
|
66
|
+
}
|
|
67
|
+
return (await res.json());
|
|
68
|
+
}
|
|
69
|
+
async function downloadAsset(asset, destFile) {
|
|
70
|
+
const token = githubToken();
|
|
71
|
+
const headers = {
|
|
72
|
+
Accept: 'application/octet-stream',
|
|
73
|
+
'User-Agent': 'se-studio-cms-edit-pack-fetch',
|
|
74
|
+
'X-GitHub-Api-Version': '2022-11-28',
|
|
75
|
+
};
|
|
76
|
+
if (token) {
|
|
77
|
+
headers.Authorization = `Bearer ${token}`;
|
|
78
|
+
}
|
|
79
|
+
const res = await fetch(asset.url, { headers, redirect: 'follow' });
|
|
80
|
+
if (!res.ok || !res.body) {
|
|
81
|
+
throw new PackFetchError(`Failed to download release asset ${asset.name}: ${res.status} ${res.statusText}`);
|
|
82
|
+
}
|
|
83
|
+
mkdirSync(path.dirname(destFile), { recursive: true });
|
|
84
|
+
const file = createWriteStream(destFile);
|
|
85
|
+
await pipeline(res.body, file);
|
|
86
|
+
}
|
|
87
|
+
async function extractPackArchive(archivePath, destDir) {
|
|
88
|
+
mkdirSync(destDir, { recursive: true });
|
|
89
|
+
if (archivePath.endsWith('.tar.gz') || archivePath.endsWith('.tgz')) {
|
|
90
|
+
await execFileAsync('tar', ['-xzf', archivePath, '-C', destDir]);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (archivePath.endsWith('.tar')) {
|
|
94
|
+
await execFileAsync('tar', ['-xf', archivePath, '-C', destDir]);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
throw new PackFetchError(`Unsupported pack archive type: ${archivePath}`);
|
|
98
|
+
}
|
|
99
|
+
function resolveExtractedPackRoot(extractDir) {
|
|
100
|
+
if (existsSync(path.join(extractDir, 'manifest.json'))) {
|
|
101
|
+
return extractDir;
|
|
102
|
+
}
|
|
103
|
+
const nested = path.join(extractDir, 'editor-pack');
|
|
104
|
+
if (existsSync(path.join(nested, 'manifest.json'))) {
|
|
105
|
+
return nested;
|
|
106
|
+
}
|
|
107
|
+
throw new PackFetchError(`No manifest.json in extracted pack at ${extractDir}`);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Fetch (or reuse cache) a tenant's editor-pack from a GitHub Release asset.
|
|
111
|
+
*/
|
|
112
|
+
export async function resolveEditorPackForTenant(tenant, options) {
|
|
113
|
+
const assetName = tenant.packAssetName ?? 'editor-pack.tar.gz';
|
|
114
|
+
const cacheDir = path.join(packCacheRoot(), tenant.projectKey, tenant.packTag.replace(/[^\w.-]+/g, '_'));
|
|
115
|
+
const packDir = path.join(cacheDir, 'pack');
|
|
116
|
+
const markerPath = path.join(cacheDir, 'source.json');
|
|
117
|
+
if (!options?.forceRefresh && existsSync(path.join(packDir, 'manifest.json'))) {
|
|
118
|
+
const manifest = loadEditorPackManifest(packDir);
|
|
119
|
+
assertPackMatchesTenant(tenant, manifest);
|
|
120
|
+
return {
|
|
121
|
+
packPath: packDir,
|
|
122
|
+
packTag: tenant.packTag,
|
|
123
|
+
packRepo: tenant.packRepo,
|
|
124
|
+
packAssetName: assetName,
|
|
125
|
+
source: 'github-release',
|
|
126
|
+
manifest,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
if (options?.forceRefresh && existsSync(cacheDir)) {
|
|
130
|
+
rmSync(cacheDir, { recursive: true, force: true });
|
|
131
|
+
}
|
|
132
|
+
mkdirSync(cacheDir, { recursive: true });
|
|
133
|
+
const release = await fetchGitHubRelease(tenant.packRepo, tenant.packTag);
|
|
134
|
+
const asset = release.assets.find((a) => a.name === assetName);
|
|
135
|
+
if (!asset) {
|
|
136
|
+
throw new PackFetchError(`Release ${tenant.packRepo}@${tenant.packTag} has no asset named ${assetName}`);
|
|
137
|
+
}
|
|
138
|
+
const archivePath = path.join(cacheDir, assetName);
|
|
139
|
+
await downloadAsset(asset, archivePath);
|
|
140
|
+
const extractDir = path.join(cacheDir, 'extract');
|
|
141
|
+
if (existsSync(extractDir)) {
|
|
142
|
+
rmSync(extractDir, { recursive: true, force: true });
|
|
143
|
+
}
|
|
144
|
+
await extractPackArchive(archivePath, extractDir);
|
|
145
|
+
const extractedRoot = resolveExtractedPackRoot(extractDir);
|
|
146
|
+
if (existsSync(packDir)) {
|
|
147
|
+
rmSync(packDir, { recursive: true, force: true });
|
|
148
|
+
}
|
|
149
|
+
mkdirSync(packDir, { recursive: true });
|
|
150
|
+
cpSync(extractedRoot, packDir, { recursive: true });
|
|
151
|
+
const manifest = loadEditorPackManifest(packDir);
|
|
152
|
+
assertPackMatchesTenant(tenant, manifest);
|
|
153
|
+
writeFileSync(markerPath, `${JSON.stringify({
|
|
154
|
+
packRepo: tenant.packRepo,
|
|
155
|
+
packTag: tenant.packTag,
|
|
156
|
+
packAssetName: assetName,
|
|
157
|
+
fetchedAt: new Date().toISOString(),
|
|
158
|
+
}, null, 2)}\n`);
|
|
159
|
+
return {
|
|
160
|
+
packPath: packDir,
|
|
161
|
+
packTag: tenant.packTag,
|
|
162
|
+
packRepo: tenant.packRepo,
|
|
163
|
+
packAssetName: assetName,
|
|
164
|
+
source: 'github-release',
|
|
165
|
+
manifest,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/** Read cached source metadata if present (health reporting). */
|
|
169
|
+
export function readCachedPackSource(packPath) {
|
|
170
|
+
const markerPath = path.join(path.dirname(packPath), 'source.json');
|
|
171
|
+
if (!existsSync(markerPath))
|
|
172
|
+
return null;
|
|
173
|
+
try {
|
|
174
|
+
return JSON.parse(readFileSync(markerPath, 'utf8'));
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=pack-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack-fetch.js","sourceRoot":"","sources":["../../src/hosted/pack-fetch.ts"],"names":[],"mappings":"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"}
|