@dani-builder/strapi-plugin-builder 0.7.0 → 0.8.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/dist/server/src/config/builder.d.ts.map +1 -1
- package/dist/server/src/config/builder.js +7 -1
- package/dist/server/src/config/builder.js.map +1 -1
- package/dist/server/src/config/index.d.ts +2 -11
- package/dist/server/src/config/index.d.ts.map +1 -1
- package/dist/server/src/config/index.js +10 -1
- package/dist/server/src/config/index.js.map +1 -1
- package/dist/server/src/mcp/index.d.ts.map +1 -1
- package/dist/server/src/mcp/index.js +11 -5
- package/dist/server/src/mcp/index.js.map +1 -1
- package/dist/server/src/preview/handler.d.ts +39 -0
- package/dist/server/src/preview/handler.d.ts.map +1 -0
- package/dist/server/src/preview/handler.js +76 -0
- package/dist/server/src/preview/handler.js.map +1 -0
- package/dist/server/src/preview/index.d.ts +4 -0
- package/dist/server/src/preview/index.d.ts.map +1 -0
- package/dist/server/src/preview/index.js +8 -0
- package/dist/server/src/preview/index.js.map +1 -0
- package/dist/server/src/preview-token.d.ts +5 -0
- package/dist/server/src/preview-token.d.ts.map +1 -0
- package/dist/server/src/preview-token.js +55 -0
- package/dist/server/src/preview-token.js.map +1 -0
- package/dist/server/src/preview.d.ts +3 -8
- package/dist/server/src/preview.d.ts.map +1 -1
- package/dist/server/src/preview.js +22 -57
- package/dist/server/src/preview.js.map +1 -1
- package/package.json +9 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../../server/src/config/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAE5E,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,OAAO,CAAC,EAAE,oBAAoB,GAAG,KAAK,CAAC;CACxC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE;QACN,qBAAqB,EAAE;YACrB,WAAW,EAAE,OAAO,CAAC;YACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACrC,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAClC,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACpE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CACpD;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,EAAE,GAAG,EAAE,EAAE,mBAAmB,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../../server/src/config/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAE5E,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3C,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,OAAO,CAAC,EAAE,oBAAoB,GAAG,KAAK,CAAC;CACxC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE;QACN,qBAAqB,EAAE;YACrB,WAAW,EAAE,OAAO,CAAC;YACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACrC,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAClC,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACpE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;CACpD;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,EAAE,GAAG,EAAE,EAAE,mBAAmB,GAAG,WAAW,CAsCvE;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,mBAAmB,EAC5B,aAAa,CAAC,EAAE,oBAAoB,GACnC,mBAAmB,CAKrB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,GAAG,GACJ,EAAE,mBAAmB,GAAG,uBAAuB,CAoC/C"}
|
|
@@ -8,6 +8,7 @@ function builderUpload({ env }) {
|
|
|
8
8
|
const bucket = env('AWS_BUCKET');
|
|
9
9
|
if (!bucket)
|
|
10
10
|
return {};
|
|
11
|
+
const acl = env('AWS_ACL', 'public-read');
|
|
11
12
|
return {
|
|
12
13
|
provider: 'aws-s3',
|
|
13
14
|
providerOptions: {
|
|
@@ -24,7 +25,12 @@ function builderUpload({ env }) {
|
|
|
24
25
|
region: env('AWS_REGION', undefined),
|
|
25
26
|
endpoint,
|
|
26
27
|
forcePathStyle: env.bool('AWS_FORCE_PATH_STYLE', Boolean(endpoint)),
|
|
27
|
-
params: {
|
|
28
|
+
params: {
|
|
29
|
+
Bucket: bucket,
|
|
30
|
+
// An own undefined ACL requires @strapi/provider-upload-aws-s3 >=5.36.0.
|
|
31
|
+
// In 5.0–5.35, getOr fills undefined ACL values with public-read.
|
|
32
|
+
ACL: acl === 'none' ? undefined : acl,
|
|
33
|
+
},
|
|
28
34
|
},
|
|
29
35
|
},
|
|
30
36
|
actionOptions: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../server/src/config/builder.ts"],"names":[],"mappings":";;AAkCA,
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../server/src/config/builder.ts"],"names":[],"mappings":";;AAkCA,sCAsCC;AAED,wCAQC;AAED,gDAsCC;AAxFD,SAAgB,aAAa,CAAC,EAAE,GAAG,EAAuB;IACxD,MAAM,QAAQ,GAAG,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;IAEjC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAE1C,OAAO;QACL,QAAQ,EAAE,QAAQ;QAClB,eAAe,EAAE;YACf,OAAO,EAAE,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC;YACtC,SAAS,EAAE;gBACT,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAAC,mBAAmB,CAAC;oBACtD,CAAC,CAAC;wBACE,WAAW,EAAE;4BACX,WAAW,EAAE,GAAG,CAAC,mBAAmB,CAAC;4BACrC,eAAe,EAAE,GAAG,CAAC,mBAAmB,CAAC;yBAC1C;qBACF;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,MAAM,EAAE,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC;gBACpC,QAAQ;gBACR,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACnE,MAAM,EAAE;oBACN,MAAM,EAAE,MAAM;oBACd,yEAAyE;oBACzE,kEAAkE;oBAClE,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;iBACtC;aACF;SACF;QACD,aAAa,EAAE;YACb,MAAM,EAAE,EAAE;YACV,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,EAAE;SACX;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAC5B,OAA4B,EAC5B,aAAoC;IAEpC,OAAO;QACL,OAAO,EAAE,IAAI;QACb,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAAC,EACjC,GAAG,GACiB;IACpB,MAAM,UAAU,GAAG;QACjB,GAAG,CAAC,aAAa,CAAC;QAClB,GAAG,CAAC,cAAc,CAAC;QACnB,GAAG,CAAC,iBAAiB,CAAC;KACvB;SACE,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAClD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,IAAI,CAAC;YACH,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC;iBAClE,IAAI,CAAC;QACV,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,MAAM,EAAE;YACN,qBAAqB,EAAE;gBACrB,WAAW,EAAE,IAAI;gBACjB,UAAU,EAAE;oBACV,aAAa,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;oBACnC,SAAS,EAAE;wBACT,QAAQ;wBACR,OAAO;wBACP,OAAO;wBACP,yBAAyB;wBACzB,GAAG,UAAU;qBACd;oBACD,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;oBACxD,uBAAuB,EAAE,IAAI;iBAC9B;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,15 +1,6 @@
|
|
|
1
1
|
import type { BlockPopulate } from '../types';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
slug?: string | null;
|
|
5
|
-
locale?: string;
|
|
6
|
-
[key: string]: unknown;
|
|
7
|
-
}
|
|
8
|
-
export interface BuilderPreviewConfig {
|
|
9
|
-
siteUrl: string;
|
|
10
|
-
secretEnv: string;
|
|
11
|
-
resolvePath?: (uid: string, document: BuilderPreviewDocument) => string | null;
|
|
12
|
-
}
|
|
2
|
+
import type { BuilderPreviewConfig } from '../preview/handler';
|
|
3
|
+
export type { BuilderPreviewConfig, BuilderPreviewDocument, } from '../preview/handler';
|
|
13
4
|
export interface BuilderConfig {
|
|
14
5
|
preview?: BuilderPreviewConfig | false;
|
|
15
6
|
blocks: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/config/index.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/config/index.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AA2B5B,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,oBAAoB,GAAG,KAAK,CAAC;IACvC,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACrC,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;IACF,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;CACpE;AAgED,QAAA,MAAM,MAAM;eACC,aAAa;qBAUP,OAAO,GAAG,IAAI;CAyIhC,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -122,7 +122,7 @@ const config = {
|
|
|
122
122
|
rejectUnknownKeys(value, ['blocks', 'components', 'preview'], 'config');
|
|
123
123
|
if (value.preview !== undefined && value.preview !== false) {
|
|
124
124
|
requireObject(value.preview, 'config.preview');
|
|
125
|
-
rejectUnknownKeys(value.preview, ['siteUrl', 'secretEnv', 'resolvePath'], 'config.preview');
|
|
125
|
+
rejectUnknownKeys(value.preview, ['siteUrl', 'secretEnv', 'resolvePath', 'uids'], 'config.preview');
|
|
126
126
|
if (typeof value.preview.siteUrl !== 'string')
|
|
127
127
|
throw new Error('[builder] preview.siteUrl is required');
|
|
128
128
|
const url = new URL(value.preview.siteUrl);
|
|
@@ -136,9 +136,18 @@ const config = {
|
|
|
136
136
|
if (typeof value.preview.secretEnv !== 'string' ||
|
|
137
137
|
!/^[A-Z][A-Z0-9_]*$/.test(value.preview.secretEnv))
|
|
138
138
|
throw new Error('[builder] preview.secretEnv must name an environment variable');
|
|
139
|
+
if (value.preview.uids !== undefined &&
|
|
140
|
+
(!Array.isArray(value.preview.uids) ||
|
|
141
|
+
!value.preview.uids.every((uid) => typeof uid === 'string' &&
|
|
142
|
+
/^(api|plugin)::[a-z0-9][a-z0-9-]*\.[a-z0-9][a-z0-9-]*$/.test(uid))))
|
|
143
|
+
throw new Error('[builder] preview.uids must contain content-type UIDs');
|
|
139
144
|
if (value.preview.resolvePath !== undefined &&
|
|
140
145
|
typeof value.preview.resolvePath !== 'function')
|
|
141
146
|
throw new Error('[builder] preview.resolvePath must be a function');
|
|
147
|
+
if (Array.isArray(value.preview.uids) &&
|
|
148
|
+
value.preview.uids.length > 0 &&
|
|
149
|
+
typeof value.preview.resolvePath !== 'function')
|
|
150
|
+
throw new Error('[builder] preview.resolvePath is required when preview.uids is non-empty');
|
|
142
151
|
}
|
|
143
152
|
requireObject(value.blocks, 'config.blocks');
|
|
144
153
|
rejectUnknownKeys(value.blocks, ['extra', 'includeInGlobal'], 'config.blocks');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/src/config/index.ts"],"names":[],"mappings":";;;;;AAAA,2FAA6D;AAC7D,qFAAwD;AACxD,6EAAgD;AAChD,6EAAgD;AAChD,uFAA0D;AAC1D,+EAAkD;AAClD,2FAA8D;AAC9D,+FAAiE;AACjE,2FAA6D;AAC7D,qFAAwD;AACxD,mFAAsD;AACtD,iFAAoD;AACpD,+EAAkD;AAClD,+FAAkE;AAClE,qFAAwD;AACxD,uFAA0D;AAC1D,yGAA2E;AAC3E,2FAA6D;AAC7D,+FAAiE;AACjE,qGAAuE;AACvE,+FAAiE;AACjE,mGAAqE;AACrE,iFAAoD;AACpD,+EAAkD;AAClD,yFAA2D;AAC3D,uGAAyE;AACzE,+FAAiE;AACjE,6EAAgD;AAChD,yGAA2E;AAC3E,6FAA+D;AAC/D,yFAA2D;AAC3D,6FAA+D;AAC/D,uGAAyE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/src/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,IAAI,EAAY,MAAM,gBAAgB,CAAC;AA8EzD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAuN5D;AAED,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -151,27 +151,33 @@ function registerBuilderMcp(strapi) {
|
|
|
151
151
|
strapi.ai.mcp.registerTool(strapi_1.ai.mcp.defineTool({
|
|
152
152
|
name: 'get_preview_url',
|
|
153
153
|
title: 'Get Builder preview URL',
|
|
154
|
-
description: 'Returns a signed URL valid for five minutes for a saved
|
|
154
|
+
description: 'Returns a signed URL valid for five minutes for a saved draft of an allowed preview content type.',
|
|
155
155
|
telemetry: { source: 'builder', name: 'get_preview_url' },
|
|
156
156
|
auth: {
|
|
157
157
|
policies: [
|
|
158
158
|
{ action: READ_ACTION, subject: PAGE_UID },
|
|
159
|
-
|
|
159
|
+
...(0, preview_1.getPreviewUids)(strapi)
|
|
160
|
+
.slice(1)
|
|
161
|
+
.map((subject) => ({ action: READ_ACTION, subject })),
|
|
160
162
|
],
|
|
161
163
|
},
|
|
162
164
|
resolveInputSchema: () => utils_1.z
|
|
163
165
|
.object({
|
|
164
|
-
uid: utils_1.z.enum(preview_1.
|
|
166
|
+
uid: utils_1.z.enum((0, preview_1.getPreviewUids)(strapi)),
|
|
165
167
|
documentId: utils_1.z.string().min(1),
|
|
166
168
|
locale: utils_1.z.string().min(1).optional(),
|
|
167
169
|
})
|
|
168
170
|
.strict(),
|
|
169
171
|
resolveOutputSchema: outputSchema,
|
|
170
172
|
createHandler: (runtime, context) => async ({ args }) => {
|
|
173
|
+
if (!(0, preview_1.getPreviewUids)(runtime).includes(args.uid))
|
|
174
|
+
throw new utils_1.errors.ForbiddenError();
|
|
171
175
|
const permissions = getPermissionChecker(runtime, context.userAbility, args.uid);
|
|
172
176
|
if (permissions.cannot(READ_ACTION))
|
|
173
177
|
throw new utils_1.errors.ForbiddenError();
|
|
174
|
-
const document = await runtime
|
|
178
|
+
const document = await runtime
|
|
179
|
+
.documents(args.uid)
|
|
180
|
+
.findOne({
|
|
175
181
|
documentId: args.documentId,
|
|
176
182
|
locale: args.locale,
|
|
177
183
|
status: 'draft',
|
|
@@ -180,7 +186,7 @@ function registerBuilderMcp(strapi) {
|
|
|
180
186
|
throw new utils_1.errors.NotFoundError('Document not found');
|
|
181
187
|
if (permissions.cannot(READ_ACTION, document))
|
|
182
188
|
throw new utils_1.errors.ForbiddenError();
|
|
183
|
-
const url =
|
|
189
|
+
const url = (0, preview_1.signPreviewDocument)(runtime, args.uid, document);
|
|
184
190
|
if (!url)
|
|
185
191
|
throw new utils_1.errors.ValidationError('Preview unavailable');
|
|
186
192
|
return ok({ url });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/src/mcp/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/src/mcp/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
interface PreviewStrapi {
|
|
2
|
+
config: {
|
|
3
|
+
get(key: string): unknown;
|
|
4
|
+
};
|
|
5
|
+
documents(uid: `${'api' | 'plugin'}::${string}.${string}`): {
|
|
6
|
+
findOne(options: {
|
|
7
|
+
documentId: string;
|
|
8
|
+
locale?: string;
|
|
9
|
+
status: 'draft' | 'published';
|
|
10
|
+
}): Promise<unknown>;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export interface BuilderPreviewDocument {
|
|
14
|
+
documentId: string;
|
|
15
|
+
slug?: string | null;
|
|
16
|
+
locale?: string;
|
|
17
|
+
[key: string]: unknown;
|
|
18
|
+
}
|
|
19
|
+
export interface BuilderPreviewConfig {
|
|
20
|
+
siteUrl: string;
|
|
21
|
+
secretEnv: string;
|
|
22
|
+
/** Additional content-type UIDs; Page and Article remain enabled. */
|
|
23
|
+
uids?: string[];
|
|
24
|
+
resolvePath?: (uid: string, document: BuilderPreviewDocument) => string | null;
|
|
25
|
+
}
|
|
26
|
+
export declare const PREVIEW_UIDS: readonly ["plugin::builder.page", "plugin::builder.article"];
|
|
27
|
+
export interface BuilderPreviewOptions {
|
|
28
|
+
documentId: string;
|
|
29
|
+
locale?: string;
|
|
30
|
+
status?: string;
|
|
31
|
+
}
|
|
32
|
+
export type BuilderPreviewHandler = (uid: string, options: BuilderPreviewOptions) => string | null | Promise<string | null>;
|
|
33
|
+
export declare function getPreviewUids(strapi: PreviewStrapi): string[];
|
|
34
|
+
export declare function getPreviewUrl(strapi: PreviewStrapi, uid: string, { documentId, locale, status }: BuilderPreviewOptions): Promise<string | null>;
|
|
35
|
+
/** Sign the exact document already authorized by the caller. */
|
|
36
|
+
export declare function signPreviewDocument(strapi: PreviewStrapi, uid: string, document: BuilderPreviewDocument, status?: string): string | null;
|
|
37
|
+
export declare function createBuilderPreviewHandler(strapi: PreviewStrapi, fallback?: BuilderPreviewHandler): BuilderPreviewHandler;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../../server/src/preview/handler.ts"],"names":[],"mappings":"AAGA,UAAU,aAAa;IACrB,MAAM,EAAE;QAAE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IACtC,SAAS,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,QAAQ,KAAK,MAAM,IAAI,MAAM,EAAE,GAAG;QAC1D,OAAO,CAAC,OAAO,EAAE;YACf,UAAU,EAAE,MAAM,CAAC;YACnB,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,MAAM,EAAE,OAAO,GAAG,WAAW,CAAC;SAC/B,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,CACZ,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,sBAAsB,KAC7B,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,eAAO,MAAM,YAAY,8DAGf,CAAC;AAEX,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,qBAAqB,GAAG,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,qBAAqB,KAC3B,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAE5C,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CAS9D;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,MAAM,EACX,EAAE,UAAU,EAAE,MAAM,EAAE,MAAgB,EAAE,EAAE,qBAAqB,GAC9D,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBxB;AAED,gEAAgE;AAChE,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,sBAAsB,EAChC,MAAM,GAAE,MAAgB,GACvB,MAAM,GAAG,IAAI,CAkCf;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,aAAa,EACrB,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,qBAAqB,CAKvB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PREVIEW_UIDS = void 0;
|
|
4
|
+
exports.getPreviewUids = getPreviewUids;
|
|
5
|
+
exports.getPreviewUrl = getPreviewUrl;
|
|
6
|
+
exports.signPreviewDocument = signPreviewDocument;
|
|
7
|
+
exports.createBuilderPreviewHandler = createBuilderPreviewHandler;
|
|
8
|
+
const node_crypto_1 = require("node:crypto");
|
|
9
|
+
const preview_token_1 = require("../preview-token");
|
|
10
|
+
exports.PREVIEW_UIDS = [
|
|
11
|
+
'plugin::builder.page',
|
|
12
|
+
'plugin::builder.article',
|
|
13
|
+
];
|
|
14
|
+
function getPreviewUids(strapi) {
|
|
15
|
+
const config = strapi.config.get('plugin::builder').preview;
|
|
16
|
+
return [
|
|
17
|
+
...new Set([...exports.PREVIEW_UIDS, ...(config ? (config.uids ?? []) : [])]),
|
|
18
|
+
];
|
|
19
|
+
}
|
|
20
|
+
async function getPreviewUrl(strapi, uid, { documentId, locale, status = 'draft' }) {
|
|
21
|
+
const config = strapi.config.get('plugin::builder').preview;
|
|
22
|
+
if (!config || !getPreviewUids(strapi).includes(uid))
|
|
23
|
+
return null;
|
|
24
|
+
if (status !== 'draft' && status !== 'published')
|
|
25
|
+
return null;
|
|
26
|
+
if (!process.env[config.secretEnv])
|
|
27
|
+
return null;
|
|
28
|
+
const document = (await strapi
|
|
29
|
+
.documents(uid)
|
|
30
|
+
.findOne({
|
|
31
|
+
documentId,
|
|
32
|
+
locale,
|
|
33
|
+
status,
|
|
34
|
+
}));
|
|
35
|
+
return document ? signPreviewDocument(strapi, uid, document, status) : null;
|
|
36
|
+
}
|
|
37
|
+
/** Sign the exact document already authorized by the caller. */
|
|
38
|
+
function signPreviewDocument(strapi, uid, document, status = 'draft') {
|
|
39
|
+
const config = strapi.config.get('plugin::builder').preview;
|
|
40
|
+
if (!config || !getPreviewUids(strapi).includes(uid))
|
|
41
|
+
return null;
|
|
42
|
+
if (status !== 'draft' && status !== 'published')
|
|
43
|
+
return null;
|
|
44
|
+
const secret = process.env[config.secretEnv];
|
|
45
|
+
if (!secret)
|
|
46
|
+
return null;
|
|
47
|
+
const isDefault = exports.PREVIEW_UIDS.some((defaultUid) => defaultUid === uid);
|
|
48
|
+
const path = config.resolvePath
|
|
49
|
+
? config.resolvePath(uid, document)
|
|
50
|
+
: isDefault && document.slug
|
|
51
|
+
? `${uid === 'plugin::builder.article' ? '/articles' : ''}/${encodeURIComponent(document.slug)}`
|
|
52
|
+
: null;
|
|
53
|
+
if (typeof path !== 'string' || !(0, preview_token_1.isSafePreviewPath)(path))
|
|
54
|
+
return null;
|
|
55
|
+
const payload = Buffer.from(JSON.stringify({
|
|
56
|
+
path,
|
|
57
|
+
status,
|
|
58
|
+
exp: Math.floor(Date.now() / 1000) + preview_token_1.PREVIEW_TTL_SECONDS,
|
|
59
|
+
})).toString('base64url');
|
|
60
|
+
const signature = (0, node_crypto_1.createHmac)('sha256', secret)
|
|
61
|
+
.update(payload)
|
|
62
|
+
.digest('base64url');
|
|
63
|
+
const url = new URL('/api/preview', config.siteUrl);
|
|
64
|
+
url.search = new URLSearchParams({
|
|
65
|
+
token: `${payload}.${signature}`,
|
|
66
|
+
path,
|
|
67
|
+
status,
|
|
68
|
+
}).toString();
|
|
69
|
+
return url.toString();
|
|
70
|
+
}
|
|
71
|
+
function createBuilderPreviewHandler(strapi, fallback) {
|
|
72
|
+
return (uid, options) => getPreviewUids(strapi).includes(uid)
|
|
73
|
+
? getPreviewUrl(strapi, uid, options)
|
|
74
|
+
: (fallback?.(uid, options) ?? null);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../../server/src/preview/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/preview/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.verifyPreviewToken = exports.createBuilderPreviewHandler = void 0;
|
|
4
|
+
var handler_1 = require("./handler");
|
|
5
|
+
Object.defineProperty(exports, "createBuilderPreviewHandler", { enumerable: true, get: function () { return handler_1.createBuilderPreviewHandler; } });
|
|
6
|
+
var preview_token_1 = require("../preview-token");
|
|
7
|
+
Object.defineProperty(exports, "verifyPreviewToken", { enumerable: true, get: function () { return preview_token_1.verifyPreviewToken; } });
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/src/preview/index.ts"],"names":[],"mappings":";;;AAAA,qCAAwD;AAA/C,sHAAA,2BAA2B,OAAA;AAEpC,kDAAsD;AAA7C,mHAAA,kBAAkB,OAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const PREVIEW_TTL_SECONDS = 300;
|
|
2
|
+
export declare function isSafePreviewPath(path: string): boolean;
|
|
3
|
+
/** Verify the server-only shared key and bind both redirect and draft status. */
|
|
4
|
+
export declare function verifyPreviewToken(token: string | null, path: string | null, status: string | null, secret?: string | undefined, now?: number): boolean;
|
|
5
|
+
//# sourceMappingURL=preview-token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-token.d.ts","sourceRoot":"","sources":["../../../server/src/preview-token.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQvD;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,MAAM,qBAA6B,EACnC,GAAG,SAAa,GACf,OAAO,CA6CT"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PREVIEW_TTL_SECONDS = void 0;
|
|
4
|
+
exports.isSafePreviewPath = isSafePreviewPath;
|
|
5
|
+
exports.verifyPreviewToken = verifyPreviewToken;
|
|
6
|
+
const node_crypto_1 = require("node:crypto");
|
|
7
|
+
exports.PREVIEW_TTL_SECONDS = 300;
|
|
8
|
+
function isSafePreviewPath(path) {
|
|
9
|
+
return (path.startsWith('/') &&
|
|
10
|
+
!path.startsWith('//') &&
|
|
11
|
+
!/[\\#]/.test(path) &&
|
|
12
|
+
!Array.from(path).some((character) => character.charCodeAt(0) <= 32) &&
|
|
13
|
+
!/%(?:2f|5c|0[0-9a-f]|1[0-9a-f]|20)/i.test(path));
|
|
14
|
+
}
|
|
15
|
+
/** Verify the server-only shared key and bind both redirect and draft status. */
|
|
16
|
+
function verifyPreviewToken(token, path, status, secret = process.env.PREVIEW_SECRET, now = Date.now()) {
|
|
17
|
+
if (!secret ||
|
|
18
|
+
!token ||
|
|
19
|
+
!path ||
|
|
20
|
+
!['draft', 'published'].includes(status ?? ''))
|
|
21
|
+
return false;
|
|
22
|
+
if (!isSafePreviewPath(path))
|
|
23
|
+
return false;
|
|
24
|
+
const parts = token.split('.');
|
|
25
|
+
const payload = parts[0];
|
|
26
|
+
const signature = parts[1];
|
|
27
|
+
if (parts.length !== 2 ||
|
|
28
|
+
!payload ||
|
|
29
|
+
!signature ||
|
|
30
|
+
!/^[A-Za-z0-9_-]+$/.test(payload) ||
|
|
31
|
+
!/^[A-Za-z0-9_-]{43}$/.test(signature))
|
|
32
|
+
return false;
|
|
33
|
+
const expected = (0, node_crypto_1.createHmac)('sha256', secret).update(payload).digest();
|
|
34
|
+
const provided = Buffer.from(signature, 'base64url');
|
|
35
|
+
if (provided.length !== expected.length ||
|
|
36
|
+
!(0, node_crypto_1.timingSafeEqual)(provided, expected))
|
|
37
|
+
return false;
|
|
38
|
+
try {
|
|
39
|
+
const claims = JSON.parse(Buffer.from(payload, 'base64url').toString('utf8'));
|
|
40
|
+
if (typeof claims !== 'object' || claims === null)
|
|
41
|
+
return false;
|
|
42
|
+
const value = claims;
|
|
43
|
+
const seconds = Math.floor(now / 1000);
|
|
44
|
+
return (value.path === path &&
|
|
45
|
+
value.status === status &&
|
|
46
|
+
typeof value.exp === 'number' &&
|
|
47
|
+
Number.isInteger(value.exp) &&
|
|
48
|
+
value.exp > seconds &&
|
|
49
|
+
value.exp <= seconds + exports.PREVIEW_TTL_SECONDS);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=preview-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-token.js","sourceRoot":"","sources":["../../../server/src/preview-token.ts"],"names":[],"mappings":";;;AAIA,8CAQC;AAGD,gDAmDC;AAlED,6CAA0D;AAE7C,QAAA,mBAAmB,GAAG,GAAG,CAAC;AAEvC,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,OAAO,CACL,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACpB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACtB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpE,CAAC,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,CACjD,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,SAAgB,kBAAkB,CAChC,KAAoB,EACpB,IAAmB,EACnB,MAAqB,EACrB,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EACnC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAEhB,IACE,CAAC,MAAM;QACP,CAAC,KAAK;QACN,CAAC,IAAI;QACL,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;QAE9C,OAAO,KAAK,CAAC;IACf,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IACE,KAAK,CAAC,MAAM,KAAK,CAAC;QAClB,CAAC,OAAO;QACR,CAAC,SAAS;QACV,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;QACjC,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC;QAEtC,OAAO,KAAK,CAAC;IACf,MAAM,QAAQ,GAAG,IAAA,wBAAU,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;IACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACrD,IACE,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;QACnC,CAAC,IAAA,6BAAe,EAAC,QAAQ,EAAE,QAAQ,CAAC;QAEpC,OAAO,KAAK,CAAC;IACf,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAChC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CACnD,CAAC;QACF,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAChE,MAAM,KAAK,GAAG,MAAiC,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QACvC,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,IAAI;YACnB,KAAK,CAAC,MAAM,KAAK,MAAM;YACvB,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ;YAC7B,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;YAC3B,KAAK,CAAC,GAAG,GAAG,OAAO;YACnB,KAAK,CAAC,GAAG,IAAI,OAAO,GAAG,2BAAmB,CAC3C,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import type { Core } from '@strapi/strapi';
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export declare function getPreviewUrl(strapi: Core.Strapi, uid: string, { documentId, locale, status, }: {
|
|
6
|
-
documentId: string;
|
|
7
|
-
locale?: string;
|
|
8
|
-
status?: string;
|
|
9
|
-
}): Promise<string | null>;
|
|
2
|
+
export { createBuilderPreviewHandler, getPreviewUids, getPreviewUrl, signPreviewDocument, PREVIEW_UIDS, } from './preview/handler';
|
|
3
|
+
export type { BuilderPreviewHandler, BuilderPreviewOptions, } from './preview/handler';
|
|
4
|
+
export { isSafePreviewPath, PREVIEW_TTL_SECONDS, verifyPreviewToken, } from './preview-token';
|
|
10
5
|
export declare function registerBuilderPreview(strapi: Core.Strapi): void;
|
|
11
6
|
//# sourceMappingURL=preview.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../server/src/preview.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../server/src/preview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAK3C,OAAO,EACL,2BAA2B,EAC3B,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CA6BhE"}
|
|
@@ -1,73 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.isSafePreviewPath = isSafePreviewPath;
|
|
5
|
-
exports.getPreviewUrl = getPreviewUrl;
|
|
3
|
+
exports.verifyPreviewToken = exports.PREVIEW_TTL_SECONDS = exports.isSafePreviewPath = exports.PREVIEW_UIDS = exports.signPreviewDocument = exports.getPreviewUrl = exports.getPreviewUids = exports.createBuilderPreviewHandler = void 0;
|
|
6
4
|
exports.registerBuilderPreview = registerBuilderPreview;
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
exports.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
function
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
!/%(?:2f|5c|0[0-9a-f]|1[0-9a-f]|20)/i.test(path));
|
|
19
|
-
}
|
|
20
|
-
async function getPreviewUrl(strapi, uid, { documentId, locale, status = 'draft', }) {
|
|
21
|
-
const config = strapi.config.get('plugin::builder')
|
|
22
|
-
.preview;
|
|
23
|
-
if (!config || !exports.PREVIEW_UIDS.includes(uid))
|
|
24
|
-
return null;
|
|
25
|
-
if (status !== 'draft' && status !== 'published')
|
|
26
|
-
return null;
|
|
27
|
-
const secret = process.env[config.secretEnv];
|
|
28
|
-
if (!secret)
|
|
29
|
-
return null;
|
|
30
|
-
const document = (await strapi
|
|
31
|
-
.documents(uid)
|
|
32
|
-
.findOne({ documentId, locale, status }));
|
|
33
|
-
if (!document)
|
|
34
|
-
return null;
|
|
35
|
-
const path = config.resolvePath
|
|
36
|
-
? config.resolvePath(uid, document)
|
|
37
|
-
: document.slug
|
|
38
|
-
? `${uid === 'plugin::builder.article' ? '/articles' : ''}/${encodeURIComponent(document.slug)}`
|
|
39
|
-
: null;
|
|
40
|
-
if (!path || !isSafePreviewPath(path))
|
|
41
|
-
return null;
|
|
42
|
-
const payload = Buffer.from(JSON.stringify({
|
|
43
|
-
path,
|
|
44
|
-
status,
|
|
45
|
-
exp: Math.floor(Date.now() / 1000) + exports.PREVIEW_TTL_SECONDS,
|
|
46
|
-
})).toString('base64url');
|
|
47
|
-
const signature = (0, node_crypto_1.createHmac)('sha256', secret)
|
|
48
|
-
.update(payload)
|
|
49
|
-
.digest('base64url');
|
|
50
|
-
const url = new URL('/api/preview', config.siteUrl);
|
|
51
|
-
url.search = new URLSearchParams({
|
|
52
|
-
token: `${payload}.${signature}`,
|
|
53
|
-
path,
|
|
54
|
-
status,
|
|
55
|
-
}).toString();
|
|
56
|
-
return url.toString();
|
|
57
|
-
}
|
|
5
|
+
const handler_1 = require("./preview/handler");
|
|
6
|
+
var handler_2 = require("./preview/handler");
|
|
7
|
+
Object.defineProperty(exports, "createBuilderPreviewHandler", { enumerable: true, get: function () { return handler_2.createBuilderPreviewHandler; } });
|
|
8
|
+
Object.defineProperty(exports, "getPreviewUids", { enumerable: true, get: function () { return handler_2.getPreviewUids; } });
|
|
9
|
+
Object.defineProperty(exports, "getPreviewUrl", { enumerable: true, get: function () { return handler_2.getPreviewUrl; } });
|
|
10
|
+
Object.defineProperty(exports, "signPreviewDocument", { enumerable: true, get: function () { return handler_2.signPreviewDocument; } });
|
|
11
|
+
Object.defineProperty(exports, "PREVIEW_UIDS", { enumerable: true, get: function () { return handler_2.PREVIEW_UIDS; } });
|
|
12
|
+
var preview_token_1 = require("./preview-token");
|
|
13
|
+
Object.defineProperty(exports, "isSafePreviewPath", { enumerable: true, get: function () { return preview_token_1.isSafePreviewPath; } });
|
|
14
|
+
Object.defineProperty(exports, "PREVIEW_TTL_SECONDS", { enumerable: true, get: function () { return preview_token_1.PREVIEW_TTL_SECONDS; } });
|
|
15
|
+
Object.defineProperty(exports, "verifyPreviewToken", { enumerable: true, get: function () { return preview_token_1.verifyPreviewToken; } });
|
|
58
16
|
function registerBuilderPreview(strapi) {
|
|
59
17
|
const config = strapi.config.get('plugin::builder')
|
|
60
18
|
.preview;
|
|
61
19
|
if (!config)
|
|
62
20
|
return;
|
|
21
|
+
const existing = strapi.config.get('admin.preview');
|
|
63
22
|
strapi.config.set('admin.preview', {
|
|
23
|
+
...existing,
|
|
64
24
|
enabled: true,
|
|
65
25
|
config: {
|
|
66
|
-
|
|
67
|
-
|
|
26
|
+
...existing?.config,
|
|
27
|
+
allowedOrigins: [
|
|
28
|
+
...new Set([
|
|
29
|
+
...(existing?.config?.allowedOrigins ?? []),
|
|
30
|
+
new URL(config.siteUrl).origin,
|
|
31
|
+
]),
|
|
32
|
+
],
|
|
33
|
+
handler: (0, handler_1.createBuilderPreviewHandler)(strapi, existing?.config?.handler),
|
|
68
34
|
},
|
|
69
35
|
});
|
|
70
|
-
// Content Manager may register before Builder; apply its CSP setup now too.
|
|
71
36
|
strapi.plugin('content-manager').service('preview-config').register();
|
|
72
37
|
}
|
|
73
38
|
//# sourceMappingURL=preview.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../server/src/preview.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../server/src/preview.ts"],"names":[],"mappings":";;;AAsBA,wDA6BC;AAjDD,+CAAgE;AAGhE,6CAM2B;AALzB,sHAAA,2BAA2B,OAAA;AAC3B,yGAAA,cAAc,OAAA;AACd,wGAAA,aAAa,OAAA;AACb,8GAAA,mBAAmB,OAAA;AACnB,uGAAA,YAAY,OAAA;AAMd,iDAIyB;AAHvB,kHAAA,iBAAiB,OAAA;AACjB,oHAAA,mBAAmB,OAAA;AACnB,mHAAA,kBAAkB,OAAA;AAGpB,SAAgB,sBAAsB,CAAC,MAAmB;IACxD,MAAM,MAAM,GAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAmB;SACnE,OAAO,CAAC;IACX,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CASrC,CAAC;IACd,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE;QACjC,GAAG,QAAQ;QACX,OAAO,EAAE,IAAI;QACb,MAAM,EAAE;YACN,GAAG,QAAQ,EAAE,MAAM;YACnB,cAAc,EAAE;gBACd,GAAG,IAAI,GAAG,CAAC;oBACT,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,IAAI,EAAE,CAAC;oBAC3C,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM;iBAC/B,CAAC;aACH;YACD,OAAO,EAAE,IAAA,qCAA2B,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;SACxE;KACF,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC;AACxE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dani-builder/strapi-plugin-builder",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Daniworks Builder — reusable CMS components, content types, and smart API for Strapi v5",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"strapi": {
|
|
@@ -24,6 +24,11 @@
|
|
|
24
24
|
"./types": {
|
|
25
25
|
"types": "./dist/server/src/types/index.d.ts",
|
|
26
26
|
"default": "./dist/server/src/types/index.js"
|
|
27
|
+
},
|
|
28
|
+
"./preview": {
|
|
29
|
+
"types": "./dist/server/src/preview/index.d.ts",
|
|
30
|
+
"require": "./dist/server/src/preview/index.js",
|
|
31
|
+
"default": "./dist/server/src/preview/index.js"
|
|
27
32
|
}
|
|
28
33
|
},
|
|
29
34
|
"typesVersions": {
|
|
@@ -36,6 +41,9 @@
|
|
|
36
41
|
],
|
|
37
42
|
"types": [
|
|
38
43
|
"dist/server/src/types/index.d.ts"
|
|
44
|
+
],
|
|
45
|
+
"preview": [
|
|
46
|
+
"dist/server/src/preview/index.d.ts"
|
|
39
47
|
]
|
|
40
48
|
}
|
|
41
49
|
},
|