@payload-onpage/plugin 0.2.1 → 0.3.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.
Files changed (51) hide show
  1. package/dist/access.d.ts +7 -4
  2. package/dist/access.d.ts.map +1 -1
  3. package/dist/access.js +23 -20
  4. package/dist/access.js.map +1 -1
  5. package/dist/admin/OnPageAdminControls.d.ts +3 -2
  6. package/dist/admin/OnPageAdminControls.d.ts.map +1 -1
  7. package/dist/admin/OnPageAdminControls.js +12 -8
  8. package/dist/admin/OnPageAdminControls.js.map +1 -1
  9. package/dist/endpoints.d.ts +22 -6
  10. package/dist/endpoints.d.ts.map +1 -1
  11. package/dist/endpoints.js +87 -80
  12. package/dist/endpoints.js.map +1 -1
  13. package/dist/hooks.d.ts +11 -5
  14. package/dist/hooks.d.ts.map +1 -1
  15. package/dist/hooks.js +2 -2
  16. package/dist/hooks.js.map +1 -1
  17. package/dist/http.d.ts +18 -4
  18. package/dist/http.d.ts.map +1 -1
  19. package/dist/http.js +30 -16
  20. package/dist/http.js.map +1 -1
  21. package/dist/index.d.ts +2 -2
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +61 -50
  24. package/dist/index.js.map +1 -1
  25. package/dist/options.d.ts +22 -11
  26. package/dist/options.d.ts.map +1 -1
  27. package/dist/options.js +11 -3
  28. package/dist/options.js.map +1 -1
  29. package/dist/paths.d.ts +2 -2
  30. package/dist/paths.d.ts.map +1 -1
  31. package/dist/paths.js +11 -24
  32. package/dist/paths.js.map +1 -1
  33. package/dist/schema.d.ts +6 -4
  34. package/dist/schema.d.ts.map +1 -1
  35. package/dist/schema.js +115 -62
  36. package/dist/schema.js.map +1 -1
  37. package/dist/translations.d.ts +12 -1
  38. package/dist/translations.d.ts.map +1 -1
  39. package/dist/translations.js +10 -9
  40. package/dist/translations.js.map +1 -1
  41. package/package.json +2 -2
  42. package/src/access.ts +26 -19
  43. package/src/admin/OnPageAdminControls.tsx +16 -16
  44. package/src/endpoints.ts +105 -98
  45. package/src/hooks.ts +14 -5
  46. package/src/http.ts +51 -15
  47. package/src/index.ts +77 -64
  48. package/src/options.ts +29 -17
  49. package/src/paths.ts +14 -27
  50. package/src/schema.ts +137 -79
  51. package/src/translations.ts +17 -11
package/dist/access.d.ts CHANGED
@@ -10,11 +10,14 @@ import type { OnPageOptions } from './options.ts';
10
10
  /** Signed in as an admin user (or allowed by the `access` option). */
11
11
  export declare function canUseOnPage(req: PayloadRequest, options: OnPageOptions): Promise<boolean>;
12
12
  /** Payload's sanitized permissions for one document (or the collection, without an id). */
13
- export declare function documentPermissions(req: PayloadRequest, ref: DocRef | {
14
- kind: 'collection';
13
+ export declare function documentPermissions(req: PayloadRequest, ref: {
14
+ kind: DocRef['kind'];
15
15
  slug: string;
16
- id?: undefined;
16
+ id?: string | number | undefined;
17
17
  }): Promise<SanitizedCollectionPermission | SanitizedGlobalPermission | null>;
18
- /** May this user edit this document on the page? */
18
+ /**
19
+ * May this user edit this document on the page? With an id, Payload evaluates a
20
+ * row-level rule (a `where`) against that document itself, so its answer is final.
21
+ */
19
22
  export declare function canEditDocument(req: PayloadRequest, ref: DocRef, options: OnPageOptions): Promise<boolean>;
20
23
  //# sourceMappingURL=access.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../src/access.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,6BAA6B,EAClC,KAAK,yBAAyB,EAC/B,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD,sEAAsE;AACtE,wBAAsB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAIhG;AAED,2FAA2F;AAC3F,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,SAAS,CAAA;CAAE,GACjE,OAAO,CAAC,6BAA6B,GAAG,yBAAyB,GAAG,IAAI,CAAC,CAY3E;AAED,oDAAoD;AACpD,wBAAsB,eAAe,CACnC,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,OAAO,CAAC,CAkBlB"}
1
+ {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../src/access.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,6BAA6B,EAClC,KAAK,yBAAyB,EAC/B,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEjD,sEAAsE;AACtE,wBAAsB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAIhG;AAED,2FAA2F;AAC3F,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,GAC5E,OAAO,CAAC,6BAA6B,GAAG,yBAAyB,GAAG,IAAI,CAAC,CAqB3E;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,OAAO,CAAC,CAYlB"}
package/dist/access.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { docAccessOperation, docAccessOperationGlobal, } from 'payload';
2
+ import { entityConfig } from "./http.js";
2
3
  /** Signed in as an admin user (or allowed by the `access` option). */
3
4
  export async function canUseOnPage(req, options) {
4
5
  if (!req.user)
@@ -11,19 +12,31 @@ export async function canUseOnPage(req, options) {
11
12
  export async function documentPermissions(req, ref) {
12
13
  try {
13
14
  if (ref.kind === 'global') {
14
- const globalConfig = req.payload.globals.config.find((g) => g.slug === ref.slug);
15
+ const globalConfig = entityConfig(req, 'global', ref.slug);
15
16
  return globalConfig ? await docAccessOperationGlobal({ globalConfig, req }) : null;
16
17
  }
17
18
  const collection = req.payload.collections[ref.slug];
18
19
  if (!collection)
19
20
  return null;
20
- return await docAccessOperation({ collection, id: ref.id, req });
21
+ return await docAccessOperation({
22
+ collection,
23
+ ...(ref.id !== undefined ? { id: ref.id } : {}),
24
+ req,
25
+ });
21
26
  }
22
- catch {
27
+ catch (err) {
28
+ // An access function that throws denies, as in Payload, but shouldn't fail silently.
29
+ req.payload.logger.error({
30
+ err,
31
+ msg: `payload-onpage: access check failed for ${ref.kind} "${ref.slug}"`,
32
+ });
23
33
  return null;
24
34
  }
25
35
  }
26
- /** May this user edit this document on the page? */
36
+ /**
37
+ * May this user edit this document on the page? With an id, Payload evaluates a
38
+ * row-level rule (a `where`) against that document itself, so its answer is final.
39
+ */
27
40
  export async function canEditDocument(req, ref, options) {
28
41
  if (!req.user)
29
42
  return false;
@@ -31,21 +44,11 @@ export async function canEditDocument(req, ref, options) {
31
44
  return Boolean(await options.access({ req, ref }));
32
45
  if (!(await canUseOnPage(req, options)))
33
46
  return false;
34
- const perms = await documentPermissions(req, ref);
35
- const update = perms?.update;
36
- if (update === true)
37
- return true;
38
- if (!update?.permission)
39
- return false;
40
- // A row-level rule comes back as a query: check that this document matches it.
41
- if (!update.where || ref.kind !== 'collection')
42
- return !update.where;
43
- const { totalDocs } = await req.payload.count({
44
- collection: ref.slug,
45
- where: { and: [{ id: { equals: ref.id } }, update.where] },
46
- overrideAccess: true,
47
- req,
48
- });
49
- return totalDocs > 0;
47
+ const update = (await documentPermissions(req, ref))?.update;
48
+ return (update === true ||
49
+ (typeof update === 'object' &&
50
+ update !== null &&
51
+ 'permission' in update &&
52
+ update.permission === true));
50
53
  }
51
54
  //# sourceMappingURL=access.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"access.js","sourceRoot":"","sources":["../src/access.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GAIzB,MAAM,SAAS,CAAA;AAGhB,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAmB,EAAE,OAAsB;IAC5E,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IAC3B,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IACjE,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAA;AAC9D,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAmB,EACnB,GAAkE;IAElE,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAA;YAChF,OAAO,YAAY,CAAC,CAAC,CAAC,MAAM,wBAAwB,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACpF,CAAC;QACD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACpD,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAA;QAC5B,OAAO,MAAM,kBAAkB,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,oDAAoD;AACpD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAmB,EACnB,GAAW,EACX,OAAsB;IAEtB,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IAC3B,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IACtE,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IACrD,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACjD,MAAM,MAAM,GAAG,KAAK,EAAE,MACwD,CAAA;IAC9E,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAChC,IAAI,CAAC,MAAM,EAAE,UAAU;QAAE,OAAO,KAAK,CAAA;IACrC,+EAA+E;IAC/E,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAA;IACpE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;QAC5C,UAAU,EAAE,GAAG,CAAC,IAAa;QAC7B,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAW;QACnE,cAAc,EAAE,IAAI;QACpB,GAAG;KACJ,CAAC,CAAA;IACF,OAAO,SAAS,GAAG,CAAC,CAAA;AACtB,CAAC"}
1
+ {"version":3,"file":"access.js","sourceRoot":"","sources":["../src/access.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GAIzB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAGxC,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAmB,EAAE,OAAsB;IAC5E,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IAC3B,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IACjE,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAA;AAC9D,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAmB,EACnB,GAA6E;IAE7E,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;YAC1D,OAAO,YAAY,CAAC,CAAC,CAAC,MAAM,wBAAwB,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACpF,CAAC;QACD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACpD,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAA;QAC5B,OAAO,MAAM,kBAAkB,CAAC;YAC9B,UAAU;YACV,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,GAAG;SACJ,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,qFAAqF;QACrF,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YACvB,GAAG;YACH,GAAG,EAAE,2CAA2C,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG;SACzE,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAmB,EACnB,GAAW,EACX,OAAsB;IAEtB,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IAC3B,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IACtE,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAAE,OAAO,KAAK,CAAA;IACrD,MAAM,MAAM,GAAY,CAAC,MAAM,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAA;IACrE,OAAO,CACL,MAAM,KAAK,IAAI;QACf,CAAC,OAAO,MAAM,KAAK,QAAQ;YACzB,MAAM,KAAK,IAAI;YACf,YAAY,IAAI,MAAM;YACtB,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,CAC9B,CAAA;AACH,CAAC"}
@@ -1,8 +1,9 @@
1
+ import { type DocRef } from '@payload-onpage/core';
1
2
  export interface OnPageAdminControlsProps {
2
- kind: 'collection' | 'global';
3
+ kind: DocRef['kind'];
3
4
  slug: string;
4
5
  /** Plugin endpoint prefix (`routePrefix`). */
5
- prefix: string;
6
+ prefix: `/${string}`;
6
7
  }
7
8
  export declare function OnPageAdminControls({ kind, slug, prefix }: OnPageAdminControlsProps): import("react").JSX.Element | null;
8
9
  export default OnPageAdminControls;
@@ -1 +1 @@
1
- {"version":3,"file":"OnPageAdminControls.d.ts","sourceRoot":"","sources":["../../src/admin/OnPageAdminControls.tsx"],"names":[],"mappings":"AAmBA,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,YAAY,GAAG,QAAQ,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAA;CACf;AAgBD,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,wBAAwB,sCAwDnF;AAED,eAAe,mBAAmB,CAAA"}
1
+ {"version":3,"file":"OnPageAdminControls.d.ts","sourceRoot":"","sources":["../../src/admin/OnPageAdminControls.tsx"],"names":[],"mappings":"AAgBA,OAAO,EAAqB,KAAK,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAKrE,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,MAAM,EAAE,IAAI,MAAM,EAAE,CAAA;CACrB;AAgBD,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,wBAAwB,sCAsDnF;AAED,eAAe,mBAAmB,CAAA"}
@@ -7,6 +7,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
7
  */
8
8
  import { payloadRest } from '@payload-onpage/core/payload';
9
9
  import { Button, toast, useConfig, useDocumentInfo, useLocale, useTranslation, } from '@payloadcms/ui';
10
+ import { errorText, ROUTES } from '@payload-onpage/core';
11
+ import { formatAdminURL } from 'payload/shared';
10
12
  import { useMemo, useState } from 'react';
11
13
  /**
12
14
  * Same-origin POST (the endpoint refuses cross-site requests) opened in a new tab.
@@ -25,14 +27,16 @@ export function OnPageAdminControls({ kind, slug, prefix }) {
25
27
  const { id, hasSavePermission } = useDocumentInfo();
26
28
  const { config } = useConfig();
27
29
  const locale = useLocale();
28
- const { t: translate } = useTranslation();
29
- const t = (key, vars) => translate(key, vars);
30
+ const { t } = useTranslation();
30
31
  const [busy, setBusy] = useState(false);
31
- const apiBase = `${config.serverURL ?? ''}${config.routes.api}`;
32
+ // Built like Payload's own API URLs: routes.api, serverURL, Next's basePath.
33
+ const apiBase = formatAdminURL({ apiRoute: config.routes.api, serverURL: config.serverURL });
32
34
  const dataSource = useMemo(() => payloadRest({ apiBase, prefix }), [apiBase, prefix]);
33
- if ((kind === 'collection' && !id) || hasSavePermission === false)
35
+ if (hasSavePermission === false)
36
+ return null;
37
+ const ref = kind === 'global' ? { kind, slug } : id != null ? { kind, slug, id } : null;
38
+ if (!ref)
34
39
  return null;
35
- const ref = kind === 'global' ? { kind, slug } : { kind, slug, id: id };
36
40
  const params = new URLSearchParams({ kind, slug, mode: 'edit' });
37
41
  if (kind === 'collection')
38
42
  params.set('id', String(id));
@@ -43,17 +47,17 @@ export function OnPageAdminControls({ kind, slug, prefix }) {
43
47
  try {
44
48
  const link = await dataSource.createPreviewLink(ref, { locale: locale?.code });
45
49
  await navigator.clipboard.writeText(link.url);
46
- toast.success(`Preview link copied — valid until ${new Date(link.expiresAt).toLocaleString()}`);
50
+ toast.success(t('onpage:linkCopied', { date: new Date(link.expiresAt).toLocaleString() }));
47
51
  }
48
52
  catch (e) {
49
- toast.error(t('onpage:linkFailed', { message: e.message }));
53
+ toast.error(t('onpage:linkFailed', { message: errorText(e) }));
50
54
  }
51
55
  finally {
52
56
  setBusy(false);
53
57
  }
54
58
  };
55
59
  const style = { whiteSpace: 'nowrap', flexShrink: 0 };
56
- return (_jsxs("div", { style: { display: 'flex', gap: 6 }, "data-testid": "onpage-admin-controls", children: [_jsx(Button, { buttonStyle: "secondary", size: "medium", onClick: () => postInNewTab(`${apiBase}${prefix}/enter?${params}`), extraButtonProps: { style, 'data-testid': 'onpage-edit-on-page' }, children: t('onpage:editOnPage') }), _jsx(Button, { buttonStyle: "subtle", size: "medium", onClick: () => void copyLink(), disabled: busy, tooltip: t('onpage:copyPreviewLinkHint'), extraButtonProps: { style, 'data-testid': 'onpage-copy-preview-link' }, children: t('onpage:copyPreviewLink') })] }));
60
+ return (_jsxs("div", { style: { display: 'flex', gap: 6 }, "data-testid": "onpage-admin-controls", children: [_jsx(Button, { buttonStyle: "secondary", size: "medium", onClick: () => postInNewTab(`${apiBase}${prefix}${ROUTES.enter}?${params}`), extraButtonProps: { style, 'data-testid': 'onpage-edit-on-page' }, children: t('onpage:editOnPage') }), _jsx(Button, { buttonStyle: "subtle", size: "medium", onClick: () => void copyLink(), disabled: busy, tooltip: t('onpage:copyPreviewLinkHint'), extraButtonProps: { style, 'data-testid': 'onpage-copy-preview-link' }, children: t('onpage:copyPreviewLink') })] }));
57
61
  }
58
62
  export default OnPageAdminControls;
59
63
  //# sourceMappingURL=OnPageAdminControls.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OnPageAdminControls.js","sourceRoot":"","sources":["../../src/admin/OnPageAdminControls.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OnPageAdminControls.js","sourceRoot":"","sources":["../../src/admin/OnPageAdminControls.tsx"],"names":[],"mappings":"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"}
@@ -1,11 +1,27 @@
1
- import type { Endpoint, PayloadRequest } from 'payload';
1
+ /**
2
+ * The plugin's endpoints, under `${api}${routePrefix}` (default /api/onpage):
3
+ *
4
+ * GET /schema/:kind/:slug editable field schema for the signed-in editor (JSON)
5
+ * POST /enter start editing or previewing a document's page
6
+ * POST /mode switch the current page between editing and previewing
7
+ * POST /exit leave edit/preview mode
8
+ * POST /preview-link create a sealed, expiring read-only link (JSON)
9
+ * GET /preview?token= open a preview link
10
+ *
11
+ * JSON endpoints throw Payload's errors, so responses, logging, CORS and
12
+ * translations match Payload's own. The form/new-tab endpoints answer in plain
13
+ * text or redirect. State-changing endpoints are same-origin POSTs (CSRF-safe),
14
+ * and every authorization decision goes through ./access (Payload's access rules).
15
+ */
16
+ import { type DocRef, type SessionAdapter } from '@payload-onpage/core';
17
+ import { type Endpoint } from 'payload';
2
18
  import type { Entry, OnPageOptions } from './options.ts';
3
19
  export interface EndpointContext {
4
- options: OnPageOptions;
5
- prefix: string;
6
- apiRoute: string;
7
- entry: (kind: string, slug: string) => Entry | undefined;
20
+ options: OnPageOptions & {
21
+ session: SessionAdapter;
22
+ };
23
+ prefix: `/${string}`;
24
+ entry: (kind: DocRef['kind'], slug: string) => Entry | undefined;
8
25
  }
9
- export declare const secretOf: (req: PayloadRequest, options: OnPageOptions) => string;
10
26
  export declare function createEndpoints(ctx: EndpointContext): Endpoint[];
11
27
  //# sourceMappingURL=endpoints.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"endpoints.d.ts","sourceRoot":"","sources":["../src/endpoints.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAoB,QAAQ,EAAgB,cAAc,EAAE,MAAM,SAAS,CAAA;AAavF,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAKxD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,KAAK,GAAG,SAAS,CAAA;CACzD;AAID,eAAO,MAAM,QAAQ,GAAI,KAAK,cAAc,EAAE,SAAS,aAAa,KAAG,MAC1B,CAAA;AAc7C,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,QAAQ,EAAE,CAyMhE"}
1
+ {"version":3,"file":"endpoints.d.ts","sourceRoot":"","sources":["../src/endpoints.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAUL,KAAK,MAAM,EAGX,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAKL,KAAK,QAAQ,EAGd,MAAM,SAAS,CAAA;AAchB,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAKxD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,GAAG;QAAE,OAAO,EAAE,cAAc,CAAA;KAAE,CAAA;IACpD,MAAM,EAAE,IAAI,MAAM,EAAE,CAAA;IACpB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,KAAK,GAAG,SAAS,CAAA;CACjE;AAiBD,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,QAAQ,EAAE,CAqMhE"}
package/dist/endpoints.js CHANGED
@@ -1,49 +1,50 @@
1
1
  /**
2
2
  * The plugin's endpoints, under `${api}${routePrefix}` (default /api/onpage):
3
3
  *
4
- * GET /schema/:kind/:slug editable field schema for the signed-in editor
4
+ * GET /schema/:kind/:slug editable field schema for the signed-in editor (JSON)
5
5
  * POST /enter start editing or previewing a document's page
6
6
  * POST /mode switch the current page between editing and previewing
7
7
  * POST /exit leave edit/preview mode
8
8
  * POST /preview-link create a sealed, expiring read-only link (JSON)
9
9
  * GET /preview?token= open a preview link
10
10
  *
11
- * State-changing endpoints are same-origin POSTs (CSRF-safe). Every
12
- * authorization decision goes through ./access (Payload's own access rules).
11
+ * JSON endpoints throw Payload's errors, so responses, logging, CORS and
12
+ * translations match Payload's own. The form/new-tab endpoints answer in plain
13
+ * text or redirect. State-changing endpoints are same-origin POSTs (CSRF-safe),
14
+ * and every authorization decision goes through ./access (Payload's access rules).
13
15
  */
14
- import { parseRefKey, pathnameOf, refKey, safePath, samePath, SEAL_PURPOSE, seal, } from '@payload-onpage/core';
15
- import { hasAutosaveEnabled, hasDraftsEnabled, getAutosaveInterval } from 'payload/shared';
16
+ import { isOnPageMode, parseRefKey, pathnameOf, refKey, ROUTES, safePath, samePath, SEAL_PURPOSE, seal, } from '@payload-onpage/core';
17
+ import { addDataAndFileToRequest, APIError, Forbidden, NotFound, } from 'payload';
18
+ import { getAutosaveInterval, hasAutosaveEnabled, hasDraftsEnabled, toWords } from 'payload/shared';
16
19
  import { canEditDocument, canUseOnPage, documentPermissions } from "./access.js";
17
- import { isSecure, json, originOf, queryOf, readRef, redirectTo, rejectCrossSite, text, } from "./http.js";
20
+ import { apiURL, entityConfig, isSecure, json, readRef, redirectTo, rejectCrossSite, text, withIdType, } from "./http.js";
18
21
  import { resolvePath } from "./paths.js";
19
- import { relationTargets, serializeFields } from "./schema.js";
22
+ import { label, relationTargets, serializeFields } from "./schema.js";
20
23
  import { createPreviewToken, verifyPreviewToken } from "./tokens.js";
21
24
  const DAY = 24 * 3600;
22
- export const secretOf = (req, options) => options.secret ?? req.payload.config.secret;
25
+ const secretOf = (req, options) => options.secret ?? req.payload.config.secret;
23
26
  /** Name of the auth cookie an editor's mode is bound to. */
24
27
  const authCookieOf = (req, options) => options.authCookie ?? `${req.payload.config.cookiePrefix || 'payload'}-token`;
25
- function requireSession(options) {
26
- if (!options.session)
27
- throw new Error('payload-onpage: pass `session` (e.g. nextSession()) to use the enter, mode, exit and preview endpoints');
28
- return options.session;
29
- }
28
+ /** A locale value from a body, if it's one Payload knows. */
29
+ const knownLocale = (req, value) => typeof value === 'string' && req.payload.config.localization
30
+ ? req.payload.config.localization.localeCodes.find((c) => c === value)
31
+ : undefined;
30
32
  export function createEndpoints(ctx) {
31
- const { options, prefix, apiRoute } = ctx;
33
+ const { options, prefix } = ctx;
34
+ const { session } = options;
32
35
  const schema = {
33
- path: `${prefix}/schema/:kind/:slug`,
36
+ path: `${prefix}${ROUTES.schema}/:kind/:slug`,
34
37
  method: 'get',
35
38
  handler: async (req) => {
36
39
  const kind = req.routeParams?.kind === 'global' ? 'global' : 'collection';
37
40
  const slug = typeof req.routeParams?.slug === 'string' ? req.routeParams.slug : '';
38
41
  const entry = ctx.entry(kind, slug);
39
- const cfg = kind === 'global'
40
- ? req.payload.globals.config.find((g) => g.slug === slug)
41
- : req.payload.collections[slug]?.config;
42
+ const cfg = entityConfig(req, kind, slug);
42
43
  if (!entry || !cfg)
43
- return json({ error: 'Not enabled for on-page editing' }, 404);
44
+ throw new NotFound(req.t);
44
45
  if (!(await canUseOnPage(req, options)))
45
- return json({ error: 'Forbidden' }, 403);
46
- const perms = await documentPermissions(req, kind === 'global' ? { kind, slug } : { kind, slug });
46
+ throw new Forbidden(req.t);
47
+ const perms = await documentPermissions(req, { kind, slug });
47
48
  const pending = [];
48
49
  const all = serializeFields(cfg.fields, {
49
50
  i18n: req.i18n,
@@ -52,60 +53,55 @@ export function createEndpoints(ctx) {
52
53
  defaults: { req, pending },
53
54
  });
54
55
  await Promise.all(pending);
55
- const fields = entry.options.fields
56
- ? all.filter((f) => entry.options.fields.includes(f.name))
57
- : all;
56
+ const only = entry.options.fields;
57
+ const fields = only ? all.filter((f) => only.includes(f.name)) : all;
58
+ const i18n = { i18n: req.i18n };
58
59
  const relations = {};
59
60
  for (const target of relationTargets(fields)) {
60
- const c = req.payload.collections[target]?.config;
61
- if (!c)
62
- continue;
63
- relations[target] = {
64
- titleField: c.admin?.useAsTitle ?? 'id',
65
- label: typeof c.labels?.singular === 'string' ? c.labels.singular : target,
66
- };
61
+ const c = entityConfig(req, 'collection', target);
62
+ if (c)
63
+ relations[target] = {
64
+ titleField: c.admin?.useAsTitle ?? 'id',
65
+ label: label(c.labels?.singular, toWords(target), i18n),
66
+ };
67
67
  }
68
+ const labels = 'labels' in cfg
69
+ ? {
70
+ singular: label(cfg.labels?.singular, toWords(slug), i18n),
71
+ plural: label(cfg.labels?.plural, toWords(slug), i18n),
72
+ }
73
+ : {
74
+ singular: label(cfg.label, toWords(slug), i18n),
75
+ plural: label(cfg.label, toWords(slug), i18n),
76
+ };
77
+ const useAsTitle = 'labels' in cfg ? cfg.admin?.useAsTitle : undefined;
68
78
  const localization = req.payload.config.localization;
69
- const labelOf = (v) => (typeof v === 'string' ? v : slug);
70
79
  const body = {
71
80
  kind,
72
81
  slug,
73
- labels: kind === 'global'
74
- ? {
75
- singular: labelOf(cfg.label),
76
- plural: labelOf(cfg.label),
77
- }
78
- : {
79
- singular: labelOf(cfg.labels?.singular),
80
- plural: labelOf(cfg.labels?.plural),
81
- },
82
+ labels,
82
83
  editable: fields.map((f) => f.name),
83
84
  fields,
84
85
  drafts: hasDraftsEnabled(cfg),
85
86
  ...(hasAutosaveEnabled(cfg) ? { autosaveInterval: getAutosaveInterval(cfg) } : {}),
86
- ...(kind === 'collection' && cfg.admin?.useAsTitle
87
- ? { useAsTitle: cfg.admin.useAsTitle }
88
- : {}),
87
+ ...(useAsTitle ? { useAsTitle } : {}),
89
88
  ...(Object.keys(relations).length ? { relations } : {}),
90
89
  ...(localization
91
- ? {
92
- defaultLocale: localization.defaultLocale,
93
- locales: localization.locales.map((l) => (typeof l === 'string' ? l : l.code)),
94
- }
90
+ ? { defaultLocale: localization.defaultLocale, locales: localization.localeCodes }
95
91
  : {}),
96
92
  };
97
93
  return json(body);
98
94
  },
99
95
  };
100
96
  const enter = {
101
- path: `${prefix}/enter`,
97
+ path: `${prefix}${ROUTES.enter}`,
102
98
  method: 'post',
103
99
  handler: async (req) => {
104
100
  const refused = rejectCrossSite(req);
105
101
  if (refused)
106
102
  return refused;
107
- const q = queryOf(req);
108
- const ref = readRef({ kind: q.get('kind'), slug: q.get('slug'), id: q.get('id') });
103
+ const q = req.searchParams;
104
+ const ref = readRef(req, { kind: q.get('kind'), slug: q.get('slug'), id: q.get('id') });
109
105
  const entry = ref && ctx.entry(ref.kind, ref.slug);
110
106
  if (!ref || !entry)
111
107
  return text('Unknown document', 400);
@@ -113,12 +109,12 @@ export function createEndpoints(ctx) {
113
109
  return text('Sign in to the admin first', 401);
114
110
  if (!(await canEditDocument(req, ref, options)))
115
111
  return text('You cannot edit this document', 403);
116
- const locale = q.get('locale') ?? undefined;
112
+ const locale = req.locale && req.locale !== 'all' ? req.locale : undefined;
117
113
  const path = safePath(q.get('path')) ?? (await resolvePath(req, ref, entry, locale));
118
114
  if (!path)
119
115
  return text('This document has no page to open', 404);
120
- const mode = q.get('mode') === 'view' ? 'view' : 'edit';
121
- await requireSession(options).enable(mode, {
116
+ const mode = q.get('mode');
117
+ await session.enable(isOnPageMode(mode) ? mode : 'edit', {
122
118
  secure: isSecure(req),
123
119
  bindTo: authCookieOf(req, options),
124
120
  });
@@ -126,16 +122,19 @@ export function createEndpoints(ctx) {
126
122
  },
127
123
  };
128
124
  const mode = {
129
- path: `${prefix}/mode`,
125
+ path: `${prefix}${ROUTES.mode}`,
130
126
  method: 'post',
131
127
  handler: async (req) => {
132
128
  const refused = rejectCrossSite(req);
133
129
  if (refused)
134
130
  return refused;
131
+ if (!req.user)
132
+ return text('Sign in to the admin first', 401);
135
133
  if (!(await canUseOnPage(req, options)))
136
- return text('Sign in as an editor first', 401);
137
- const q = queryOf(req);
138
- await requireSession(options).enable(q.get('mode') === 'view' ? 'view' : 'edit', {
134
+ return text('You cannot use on-page editing', 403);
135
+ const q = req.searchParams;
136
+ const next = q.get('mode');
137
+ await session.enable(isOnPageMode(next) ? next : 'edit', {
139
138
  secure: isSecure(req),
140
139
  bindTo: authCookieOf(req, options),
141
140
  });
@@ -143,59 +142,60 @@ export function createEndpoints(ctx) {
143
142
  },
144
143
  };
145
144
  const exit = {
146
- path: `${prefix}/exit`,
145
+ path: `${prefix}${ROUTES.exit}`,
147
146
  method: 'post',
148
147
  handler: async (req) => {
149
148
  const refused = rejectCrossSite(req);
150
149
  if (refused)
151
150
  return refused;
152
- await requireSession(options).disable();
153
- return redirectTo(req, queryOf(req).get('path'));
151
+ await session.disable();
152
+ return redirectTo(req, req.searchParams.get('path'));
154
153
  },
155
154
  };
156
155
  const previewLink = {
157
- path: `${prefix}/preview-link`,
156
+ path: `${prefix}${ROUTES.previewLink}`,
158
157
  method: 'post',
159
158
  handler: async (req) => {
160
159
  const refused = rejectCrossSite(req);
161
160
  if (refused)
162
161
  return refused;
163
162
  if (!req.headers.get('content-type')?.includes('application/json'))
164
- return json({ error: 'Expected JSON' }, 415);
165
- const body = ((await req.json?.().catch(() => null)) ?? {});
166
- const ref = readRef(body);
163
+ throw new APIError('Expected a JSON body', 415);
164
+ await addDataAndFileToRequest(req); // parses JSON, or throws a 400
165
+ const body = req.data ?? {};
166
+ const ref = readRef(req, body);
167
167
  const entry = ref && ctx.entry(ref.kind, ref.slug);
168
168
  if (!ref || !entry)
169
- return json({ error: 'Unknown document' }, 400);
169
+ throw new APIError('Unknown document', 400);
170
170
  if (!(await canEditDocument(req, ref, options)))
171
- return json({ error: 'Forbidden' }, 403);
172
- const locale = typeof body.locale === 'string' ? body.locale : undefined;
171
+ throw new Forbidden(req.t);
172
+ const locale = knownLocale(req, body.locale);
173
173
  // The path is always derived on the server: a link opens this document's page and nothing else.
174
174
  const path = await resolvePath(req, ref, entry, locale);
175
175
  if (!path)
176
- return json({ error: 'This document has no page' }, 404);
177
- const ttl = options.previewLinkTTL ?? DAY;
178
- const { token, payload } = await createPreviewToken({ ref: refKey(ref), path, locale }, secretOf(req, options), ttl);
176
+ throw new APIError('This document has no page', 404);
177
+ const { token, payload } = await createPreviewToken({ ref: refKey(ref), path, ...(locale ? { locale } : {}) }, secretOf(req, options), options.previewLinkTTL ?? DAY);
179
178
  return json({
180
- url: `${originOf(req)}${apiRoute}${prefix}/preview?token=${encodeURIComponent(token)}`,
179
+ url: `${apiURL(req, `${prefix}${ROUTES.preview}`)}?token=${encodeURIComponent(token)}`,
181
180
  expiresAt: new Date(payload.exp * 1000).toISOString(),
182
181
  id: payload.jti,
183
182
  });
184
183
  },
185
184
  };
186
185
  const preview = {
187
- path: `${prefix}/preview`,
186
+ path: `${prefix}${ROUTES.preview}`,
188
187
  method: 'get',
189
188
  handler: async (req) => {
190
189
  const invalid = () => text('This preview link is invalid or has expired.', 403);
191
190
  const secret = secretOf(req, options);
192
- const token = await verifyPreviewToken(queryOf(req).get('token') ?? '', secret);
193
- const ref = token && parseRefKey(token.ref);
191
+ const token = await verifyPreviewToken(req.searchParams.get('token') ?? '', secret);
192
+ const parsed = token && parseRefKey(token.ref);
193
+ const ref = parsed && withIdType(req, parsed);
194
194
  const entry = ref && ctx.entry(ref.kind, ref.slug);
195
195
  if (!token || !ref || !entry)
196
196
  return invalid();
197
197
  // Still the document's page? (It may have been deleted, or its slug changed.)
198
- const current = await resolvePath(req, ref, entry, token.locale);
198
+ const current = await resolvePath(req, ref, entry, knownLocale(req, token.locale));
199
199
  if (!current || !samePath(current, token.path))
200
200
  return invalid();
201
201
  if (options.validatePreviewLink &&
@@ -208,12 +208,19 @@ export function createEndpoints(ctx) {
208
208
  }))) {
209
209
  return invalid();
210
210
  }
211
- const expiresAt = new Date(token.exp * 1000);
212
- await requireSession(options).enableLink({
211
+ await session.enableLink({
213
212
  secure: isSecure(req),
214
213
  path: pathnameOf(token.path),
215
- expiresAt,
216
- seal: (draftSecret) => seal({ path: pathnameOf(token.path), ref: token.ref, exp: token.exp, draft: draftSecret }, secret, SEAL_PURPOSE.previewCookie),
214
+ expiresAt: new Date(token.exp * 1000),
215
+ seal: (draftSecret) => {
216
+ const grant = {
217
+ path: pathnameOf(token.path),
218
+ ref: token.ref,
219
+ exp: token.exp,
220
+ draft: draftSecret,
221
+ };
222
+ return seal(grant, secret, SEAL_PURPOSE.previewCookie);
223
+ },
217
224
  });
218
225
  return redirectTo(req, token.path, 307);
219
226
  },
@@ -1 +1 @@
1
- {"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../src/endpoints.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../src/endpoints.ts"],"names":[],"mappings":"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"}