@pantheon-systems/p1-next-sdk 0.1.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 (69) hide show
  1. package/dist/P1AuthShell.d.ts +5 -0
  2. package/dist/P1AuthShell.d.ts.map +1 -0
  3. package/dist/P1AuthShell.js +83 -0
  4. package/dist/P1AuthShell.js.map +1 -0
  5. package/dist/P1NextRouterProvider.d.ts +5 -0
  6. package/dist/P1NextRouterProvider.d.ts.map +1 -0
  7. package/dist/P1NextRouterProvider.js +18 -0
  8. package/dist/P1NextRouterProvider.js.map +1 -0
  9. package/dist/auth-handler.d.ts +15 -0
  10. package/dist/auth-handler.d.ts.map +1 -0
  11. package/dist/auth-handler.js +17 -0
  12. package/dist/auth-handler.js.map +1 -0
  13. package/dist/handler-actions.d.ts +15 -0
  14. package/dist/handler-actions.d.ts.map +1 -0
  15. package/dist/handler-actions.js +15 -0
  16. package/dist/handler-actions.js.map +1 -0
  17. package/dist/handler.d.ts +56 -0
  18. package/dist/handler.d.ts.map +1 -0
  19. package/dist/handler.js +85 -0
  20. package/dist/handler.js.map +1 -0
  21. package/dist/index.d.ts +3 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +3 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/pages-handler.d.ts +40 -0
  26. package/dist/pages-handler.d.ts.map +1 -0
  27. package/dist/pages-handler.js +93 -0
  28. package/dist/pages-handler.js.map +1 -0
  29. package/dist/routes/broker.d.ts +4 -0
  30. package/dist/routes/broker.d.ts.map +1 -0
  31. package/dist/routes/broker.js +56 -0
  32. package/dist/routes/broker.js.map +1 -0
  33. package/dist/routes/datasource-context.d.ts +12 -0
  34. package/dist/routes/datasource-context.d.ts.map +1 -0
  35. package/dist/routes/datasource-context.js +29 -0
  36. package/dist/routes/datasource-context.js.map +1 -0
  37. package/dist/routes/editor-context.d.ts +16 -0
  38. package/dist/routes/editor-context.d.ts.map +1 -0
  39. package/dist/routes/editor-context.js +25 -0
  40. package/dist/routes/editor-context.js.map +1 -0
  41. package/dist/routes/page-data.d.ts +8 -0
  42. package/dist/routes/page-data.d.ts.map +1 -0
  43. package/dist/routes/page-data.js +17 -0
  44. package/dist/routes/page-data.js.map +1 -0
  45. package/dist/routes/preview-meta.d.ts +10 -0
  46. package/dist/routes/preview-meta.d.ts.map +1 -0
  47. package/dist/routes/preview-meta.js +24 -0
  48. package/dist/routes/preview-meta.js.map +1 -0
  49. package/dist/routes/publish.d.ts +8 -0
  50. package/dist/routes/publish.d.ts.map +1 -0
  51. package/dist/routes/publish.js +20 -0
  52. package/dist/routes/publish.js.map +1 -0
  53. package/dist/routes/remote-datasources-api.d.ts +30 -0
  54. package/dist/routes/remote-datasources-api.d.ts.map +1 -0
  55. package/dist/routes/remote-datasources-api.js +81 -0
  56. package/dist/routes/remote-datasources-api.js.map +1 -0
  57. package/dist/routes/resolve-preview.d.ts +9 -0
  58. package/dist/routes/resolve-preview.d.ts.map +1 -0
  59. package/dist/routes/resolve-preview.js +17 -0
  60. package/dist/routes/resolve-preview.js.map +1 -0
  61. package/dist/routes/structure.d.ts +18 -0
  62. package/dist/routes/structure.d.ts.map +1 -0
  63. package/dist/routes/structure.js +45 -0
  64. package/dist/routes/structure.js.map +1 -0
  65. package/dist/server.d.ts +4 -0
  66. package/dist/server.d.ts.map +1 -0
  67. package/dist/server.js +4 -0
  68. package/dist/server.js.map +1 -0
  69. package/package.json +52 -0
@@ -0,0 +1,5 @@
1
+ import type { ReactNode } from "react";
2
+ export declare function P1AuthShell({ children }: {
3
+ children: ReactNode;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=P1AuthShell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"P1AuthShell.d.ts","sourceRoot":"","sources":["../src/P1AuthShell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAqIvC,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAgBhE"}
@@ -0,0 +1,83 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { createNextConfig, P1AuthProvider, useP1Auth } from "@pantheon-systems/puck-css";
4
+ import { AuthGate } from "@pantheon-systems/puck-css/auth-gate";
5
+ let p1Config = null;
6
+ let p1ConfigError = null;
7
+ try {
8
+ p1Config = createNextConfig();
9
+ }
10
+ catch (e) {
11
+ p1ConfigError = e instanceof Error ? e.message : String(e);
12
+ }
13
+ function UserBar() {
14
+ const { user, logout } = useP1Auth();
15
+ if (!user)
16
+ return null;
17
+ return (_jsxs("div", { style: {
18
+ display: "flex",
19
+ alignItems: "center",
20
+ justifyContent: "flex-end",
21
+ gap: 12,
22
+ padding: "6px 16px",
23
+ background: "#1b1b1b",
24
+ color: "#e0e0e0",
25
+ fontSize: 13,
26
+ fontFamily: "system-ui, sans-serif",
27
+ borderBottom: "1px solid #333",
28
+ }, children: [user.picture ? (_jsx("img", { src: user.picture, alt: "", referrerPolicy: "no-referrer", style: { width: 24, height: 24, borderRadius: "50%" } })) : (_jsx("div", { style: {
29
+ width: 24,
30
+ height: 24,
31
+ borderRadius: "50%",
32
+ background: "#555",
33
+ display: "flex",
34
+ alignItems: "center",
35
+ justifyContent: "center",
36
+ fontSize: 12,
37
+ color: "#fff",
38
+ }, children: (user.name || user.email || "?").charAt(0).toUpperCase() })), _jsx("span", { style: { opacity: 0.9 }, children: user.name || user.email || "User" }), _jsx("button", { onClick: logout, style: {
39
+ background: "transparent",
40
+ color: "#888",
41
+ border: "1px solid #555",
42
+ borderRadius: 4,
43
+ padding: "2px 10px",
44
+ fontSize: 12,
45
+ cursor: "pointer",
46
+ marginLeft: 4,
47
+ }, children: "Log out" })] }));
48
+ }
49
+ function ConfigError({ message }) {
50
+ return (_jsx("div", { style: {
51
+ display: "flex",
52
+ alignItems: "center",
53
+ justifyContent: "center",
54
+ minHeight: "100vh",
55
+ fontFamily: "system-ui, -apple-system, sans-serif",
56
+ background: "#f5f5f5",
57
+ }, children: _jsxs("div", { style: {
58
+ background: "white",
59
+ borderRadius: 12,
60
+ boxShadow: "0 4px 24px rgba(0,0,0,0.1)",
61
+ padding: 40,
62
+ maxWidth: 480,
63
+ width: "100%",
64
+ textAlign: "center",
65
+ }, children: [_jsx("div", { style: { fontSize: 40, marginBottom: 16 }, children: "\u26A0" }), _jsx("h1", { style: { fontSize: 22, fontWeight: 600, margin: "0 0 12px", color: "#1a1a1a" }, children: "Configuration Required" }), _jsx("p", { style: { fontSize: 14, color: "#666", marginBottom: 24, lineHeight: 1.6 }, children: "The editor cannot start because required environment variables are missing." }), _jsx("div", { style: {
66
+ background: "#fff0f0",
67
+ border: "1px solid #fecaca",
68
+ borderRadius: 8,
69
+ padding: "12px 16px",
70
+ fontSize: 13,
71
+ color: "#991b1b",
72
+ fontFamily: "ui-monospace, monospace",
73
+ textAlign: "left",
74
+ marginBottom: 24,
75
+ }, children: message }), _jsxs("p", { style: { fontSize: 13, color: "#888", lineHeight: 1.5 }, children: ["Set ", _jsx("code", { style: { background: "#f0f0f0", padding: "2px 6px", borderRadius: 4 }, children: "NEXT_PUBLIC_CSS_BASE_URL" }), " and", " ", _jsx("code", { style: { background: "#f0f0f0", padding: "2px 6px", borderRadius: 4 }, children: "NEXT_PUBLIC_CSS_SITE_ID" }), " in your", " ", _jsx("code", { style: { background: "#f0f0f0", padding: "2px 6px", borderRadius: 4 }, children: ".env" }), " file."] })] }) }));
76
+ }
77
+ export function P1AuthShell({ children }) {
78
+ if (!p1Config) {
79
+ return _jsx(ConfigError, { message: p1ConfigError ?? "CSS configuration is missing." });
80
+ }
81
+ return (_jsx(P1AuthProvider, { authMode: p1Config.authMode, p1BaseUrl: p1Config.baseUrl, children: _jsxs(AuthGate, { children: [_jsx(UserBar, {}), children] }) }));
82
+ }
83
+ //# sourceMappingURL=P1AuthShell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"P1AuthShell.js","sourceRoot":"","sources":["../src/P1AuthShell.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type ReactNode } from "react";
2
+ export declare function P1NextRouterProvider({ children }: {
3
+ children: ReactNode;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=P1NextRouterProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"P1NextRouterProvider.d.ts","sourceRoot":"","sources":["../src/P1NextRouterProvider.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGhD,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAqBzE"}
@@ -0,0 +1,18 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useRouter, usePathname, useSearchParams } from "next/navigation";
4
+ import { useMemo } from "react";
5
+ import { P1RouterContext } from "@pantheon-systems/puck-css";
6
+ export function P1NextRouterProvider({ children }) {
7
+ const nextRouter = useRouter();
8
+ const pathname = usePathname();
9
+ const searchParams = useSearchParams();
10
+ const router = useMemo(() => ({
11
+ refresh: () => nextRouter.refresh(),
12
+ replace: (url, options) => nextRouter.replace(url, options),
13
+ pathname,
14
+ searchParams,
15
+ }), [nextRouter, pathname, searchParams]);
16
+ return (_jsx(P1RouterContext.Provider, { value: router, children: children }));
17
+ }
18
+ //# sourceMappingURL=P1NextRouterProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"P1NextRouterProvider.js","sourceRoot":"","sources":["../src/P1NextRouterProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAkB,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,eAAe,EAAiB,MAAM,4BAA4B,CAAC;AAE5E,MAAM,UAAU,oBAAoB,CAAC,EAAE,QAAQ,EAA2B;IACxE,MAAM,UAAU,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IAEvC,MAAM,MAAM,GAAa,OAAO,CAC9B,GAAG,EAAE,CAAC,CAAC;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE;QACnC,OAAO,EAAE,CAAC,GAAW,EAAE,OAA8B,EAAE,EAAE,CACvD,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC;QAClC,QAAQ;QACR,YAAY;KACb,CAAC,EACF,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAC,CACrC,CAAC;IAEF,OAAO,CACL,KAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,YACpC,QAAQ,GACgB,CAC5B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { NextResponse } from "next/server";
2
+ export interface P1AuthHandlerConfig {
3
+ p1ApiKey?: string;
4
+ p1BaseUrl?: string;
5
+ redirectUrl?: string;
6
+ prompt?: string;
7
+ }
8
+ export declare function createP1AuthHandler(opts: P1AuthHandlerConfig): {
9
+ POST: (request: Request, { params }: {
10
+ params: Promise<{
11
+ action?: string[];
12
+ }>;
13
+ }) => Promise<NextResponse<any>>;
14
+ };
15
+ //# sourceMappingURL=auth-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-handler.d.ts","sourceRoot":"","sources":["../src/auth-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB;oBAEhD,OAAO,cACJ;QAAE,MAAM,EAAE,OAAO,CAAC;YAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE;EAgBzD"}
@@ -0,0 +1,17 @@
1
+ import { NextResponse } from "next/server";
2
+ import { postBrokerLogin, postBrokerRedeem } from "./routes/broker";
3
+ export function createP1AuthHandler(opts) {
4
+ async function POST(request, { params }) {
5
+ const { action = [] } = await params;
6
+ const route = action[0];
7
+ if (route === "login") {
8
+ return postBrokerLogin(request, opts.p1ApiKey, opts.p1BaseUrl, opts.redirectUrl, opts.prompt);
9
+ }
10
+ if (route === "redeem") {
11
+ return postBrokerRedeem(request, opts.p1ApiKey, opts.p1BaseUrl);
12
+ }
13
+ return NextResponse.json({ error: "not_found" }, { status: 404 });
14
+ }
15
+ return { POST };
16
+ }
17
+ //# sourceMappingURL=auth-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-handler.js","sourceRoot":"","sources":["../src/auth-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AASpE,MAAM,UAAU,mBAAmB,CAAC,IAAyB;IAC3D,KAAK,UAAU,IAAI,CACjB,OAAgB,EAChB,EAAE,MAAM,EAA8C;QAEtD,MAAM,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAExB,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACtB,OAAO,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,OAAO,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,CAAC;AAClB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Barrel re-export for handler actions.
3
+ * Each domain lives in its own route module under `./routes/`.
4
+ */
5
+ export { normalizePath } from "@pantheon-systems/puck-css/server";
6
+ export { getPageData } from "./routes/page-data";
7
+ export { getEditorContext } from "./routes/editor-context";
8
+ export { getDatasourceContext } from "./routes/datasource-context";
9
+ export { getRemoteDatasources, postRemoteDatasources, deleteRemoteDatasources } from "./routes/remote-datasources-api";
10
+ export { postPublish } from "./routes/publish";
11
+ export { postResolvePreview } from "./routes/resolve-preview";
12
+ export { postPreviewMeta } from "./routes/preview-meta";
13
+ export { postStructure, deleteStructurePage } from "./routes/structure";
14
+ export { postBrokerLogin, postBrokerRedeem } from "./routes/broker";
15
+ //# sourceMappingURL=handler-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler-actions.d.ts","sourceRoot":"","sources":["../src/handler-actions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AACvH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Barrel re-export for handler actions.
3
+ * Each domain lives in its own route module under `./routes/`.
4
+ */
5
+ export { normalizePath } from "@pantheon-systems/puck-css/server";
6
+ export { getPageData } from "./routes/page-data";
7
+ export { getEditorContext } from "./routes/editor-context";
8
+ export { getDatasourceContext } from "./routes/datasource-context";
9
+ export { getRemoteDatasources, postRemoteDatasources, deleteRemoteDatasources } from "./routes/remote-datasources-api";
10
+ export { postPublish } from "./routes/publish";
11
+ export { postResolvePreview } from "./routes/resolve-preview";
12
+ export { postPreviewMeta } from "./routes/preview-meta";
13
+ export { postStructure, deleteStructurePage } from "./routes/structure";
14
+ export { postBrokerLogin, postBrokerRedeem } from "./routes/broker";
15
+ //# sourceMappingURL=handler-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler-actions.js","sourceRoot":"","sources":["../src/handler-actions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AACvH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * P1 Next SDK handler — NextAuth-style catch-all for `/p1/api/[...p1]`.
3
+ *
4
+ * Usage in your Next.js app:
5
+ *
6
+ * // app/p1/api/[...p1]/route.ts
7
+ * import { createP1Handler } from "@pantheon-systems/p1-next-sdk";
8
+ * import config from "../../../../puck.config";
9
+ * const handler = createP1Handler({ config });
10
+ * export const { GET, POST, DELETE } = handler;
11
+ */
12
+ import type { Config } from "@puckeditor/core";
13
+ import { NextResponse } from "next/server";
14
+ import type { RemoteDatasourceFetcher, RemoteDatasourceDefinition } from "@pantheon-systems/puck-css/server";
15
+ import { type P1DataConfig } from "@pantheon-systems/puck-css/server";
16
+ export type P1HandlerConfig = P1DataConfig & {
17
+ config: Config;
18
+ builtinFetchers?: RemoteDatasourceFetcher[];
19
+ builtinDatasourceRegistry?: RemoteDatasourceDefinition[];
20
+ };
21
+ export declare function createP1Handler(opts: P1HandlerConfig): {
22
+ GET: (request: Request, { params }: {
23
+ params: Promise<{
24
+ p1?: string[];
25
+ }>;
26
+ }) => Promise<NextResponse<{
27
+ error: string;
28
+ }> | NextResponse<{
29
+ data: import("@puckeditor/core").Data;
30
+ }> | NextResponse<{
31
+ remoteDatasourceContext: {};
32
+ routes: import("@pantheon-systems/puck-css").RouteRow[];
33
+ routeTemplateKeys: string[];
34
+ savedPreviewParams: Record<string, string>;
35
+ remoteDatasourceRegistry: RemoteDatasourceDefinition[];
36
+ }> | NextResponse<{
37
+ id: string;
38
+ data: {};
39
+ }> | NextResponse<{
40
+ ok: boolean;
41
+ path: string;
42
+ global: import("@pantheon-systems/puck-css/server").HttpJsonRemoteDatasourceDefinition[];
43
+ page: import("@pantheon-systems/puck-css/server").HttpJsonRemoteDatasourceDefinition[];
44
+ }>>;
45
+ POST: (request: Request, { params }: {
46
+ params: Promise<{
47
+ p1?: string[];
48
+ }>;
49
+ }) => Promise<NextResponse<unknown>>;
50
+ DELETE: (request: Request, { params }: {
51
+ params: Promise<{
52
+ p1?: string[];
53
+ }>;
54
+ }) => Promise<NextResponse<unknown>>;
55
+ };
56
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC7G,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAwBzF,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAC5C,yBAAyB,CAAC,EAAE,0BAA0B,EAAE,CAAC;CAC1D,CAAC;AAeF,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe;mBAIxC,OAAO,cACJ;QAAE,MAAM,EAAE,OAAO,CAAC;YAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE;;;;;;;;;;;;;;;;;;;oBAsBzC,OAAO,cACJ;QAAE,MAAM,EAAE,OAAO,CAAC;YAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE;sBAiBzC,OAAO,cACJ;QAAE,MAAM,EAAE,OAAO,CAAC;YAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAA;KAAE;EAcrD"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * P1 Next SDK handler — NextAuth-style catch-all for `/p1/api/[...p1]`.
3
+ *
4
+ * Usage in your Next.js app:
5
+ *
6
+ * // app/p1/api/[...p1]/route.ts
7
+ * import { createP1Handler } from "@pantheon-systems/p1-next-sdk";
8
+ * import config from "../../../../puck.config";
9
+ * const handler = createP1Handler({ config });
10
+ * export const { GET, POST, DELETE } = handler;
11
+ */
12
+ import { NextResponse } from "next/server";
13
+ import { ensureInitialized } from "@pantheon-systems/puck-css/server";
14
+ import { runWithAuthToken } from "@pantheon-systems/puck-css/server";
15
+ import { getPageData, getRemoteDatasources, getEditorContext, getDatasourceContext, postPublish, postResolvePreview, postPreviewMeta, postRemoteDatasources, postStructure, deleteRemoteDatasources, deleteStructurePage, } from "./handler-actions";
16
+ /** Extract the sub-path segments from the catch-all `p1` param under `/p1/api/`. */
17
+ function parseP1Segments(p1) {
18
+ if (p1.length === 0)
19
+ return { action: "", rest: [] };
20
+ const [first, ...rest] = p1;
21
+ return { action: first, rest };
22
+ }
23
+ function extractBearerToken(request) {
24
+ const header = request.headers.get("authorization");
25
+ if (!header)
26
+ return undefined;
27
+ const match = header.match(/^Bearer\s+(.+)$/i);
28
+ return match?.[1];
29
+ }
30
+ function withAuth(request, fn) {
31
+ const token = extractBearerToken(request);
32
+ if (token)
33
+ return runWithAuthToken(token, fn);
34
+ return NextResponse.json({ error: "unauthorized" }, { status: 401 });
35
+ }
36
+ export function createP1Handler(opts) {
37
+ const initPromise = ensureInitialized(opts);
38
+ async function GET(request, { params }) {
39
+ await initPromise;
40
+ const { p1 = [] } = await params;
41
+ const { action } = parseP1Segments(p1);
42
+ if (action === "page-data")
43
+ return getPageData(request);
44
+ if (action === "datasources")
45
+ return getRemoteDatasources(request);
46
+ if (action === "editor-context")
47
+ return getEditorContext(request, {
48
+ builtinFetchers: opts.builtinFetchers,
49
+ builtinDatasourceRegistry: opts.builtinDatasourceRegistry,
50
+ });
51
+ if (action === "datasource-context")
52
+ return getDatasourceContext(request, {
53
+ builtinFetchers: opts.builtinFetchers,
54
+ });
55
+ return NextResponse.json({ error: "not_found" }, { status: 404 });
56
+ }
57
+ async function POST(request, { params }) {
58
+ await initPromise;
59
+ const { p1 = [] } = await params;
60
+ const { action, rest } = parseP1Segments(p1);
61
+ if (action === "publish")
62
+ return withAuth(request, () => postPublish(request));
63
+ if (action === "resolve-preview")
64
+ return postResolvePreview(request);
65
+ if (action === "preview-meta")
66
+ return postPreviewMeta(request);
67
+ if (action === "datasources")
68
+ return withAuth(request, () => postRemoteDatasources(request));
69
+ if (action === "structure" && (rest[0] === "page" || rest[0] === "template" || rest[0] === "override"))
70
+ return withAuth(request, () => postStructure(request, rest[0]));
71
+ return NextResponse.json({ error: "not_found" }, { status: 404 });
72
+ }
73
+ async function DELETE(request, { params }) {
74
+ await initPromise;
75
+ const { p1 = [] } = await params;
76
+ const { action, rest } = parseP1Segments(p1);
77
+ if (action === "datasources")
78
+ return withAuth(request, () => deleteRemoteDatasources(request));
79
+ if (action === "structure" && rest[0] === "page")
80
+ return withAuth(request, () => deleteStructurePage(request));
81
+ return NextResponse.json({ error: "not_found" }, { status: 404 });
82
+ }
83
+ return { GET, POST, DELETE };
84
+ }
85
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { P1NextRouterProvider } from "./P1NextRouterProvider";
2
+ export { P1AuthShell } from "./P1AuthShell";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { P1NextRouterProvider } from "./P1NextRouterProvider";
2
+ export { P1AuthShell } from "./P1AuthShell";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * P1 Next SDK page handler — provides page components for `/p1/[...p1]`.
3
+ *
4
+ * Usage:
5
+ * // app/p1/[...p1]/page.tsx
6
+ * import { createP1Pages } from "@pantheon-systems/p1-next-sdk";
7
+ * import config from "../../../puck.config";
8
+ * const pages = createP1Pages({ config });
9
+ * export default pages.Page;
10
+ * export const generateMetadata = pages.generateMetadata;
11
+ * export const dynamic = "force-dynamic";
12
+ */
13
+ import "@puckeditor/core/puck.css";
14
+ import type { Config, Data } from "@puckeditor/core";
15
+ import type { Metadata } from "next";
16
+ import { type P1DataConfig } from "@pantheon-systems/puck-css/server";
17
+ export type P1PagesConfig = P1DataConfig & {
18
+ config: Config;
19
+ /** React component to render the editor. Receives only the page path; handles its own data loading and auth via P1App. */
20
+ EditorClient: React.ComponentType<{
21
+ path: string;
22
+ }>;
23
+ /** React component to render published pages. Provided by the consuming app's client wrapper. */
24
+ RenderClient: React.ComponentType<{
25
+ data: Data;
26
+ }>;
27
+ };
28
+ export declare function createP1Pages(opts: P1PagesConfig): {
29
+ Page: ({ params, }: {
30
+ params: Promise<{
31
+ p1?: string[];
32
+ }>;
33
+ }) => Promise<import("react/jsx-runtime").JSX.Element>;
34
+ generateMetadata: ({ params, }: {
35
+ params: Promise<{
36
+ p1?: string[];
37
+ }>;
38
+ }) => Promise<Metadata>;
39
+ };
40
+ //# sourceMappingURL=pages-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages-handler.d.ts","sourceRoot":"","sources":["../src/pages-handler.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAErC,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,mCAAmC,CAAC;AAI3C,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,0HAA0H;IAC1H,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC;QAChC,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,iGAAiG;IACjG,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC;QAChC,IAAI,EAAE,IAAI,CAAC;KACZ,CAAC,CAAC;CACJ,CAAC;AAsBF,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa;wBAwB5C;QACD,MAAM,EAAE,OAAO,CAAC;YAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAC;KACpC;oCApBE;QACD,MAAM,EAAE,OAAO,CAAC;YAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAC;KACpC,KAAG,OAAO,CAAC,QAAQ,CAAC;EA+GtB"}
@@ -0,0 +1,93 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * P1 Next SDK page handler — provides page components for `/p1/[...p1]`.
4
+ *
5
+ * Usage:
6
+ * // app/p1/[...p1]/page.tsx
7
+ * import { createP1Pages } from "@pantheon-systems/p1-next-sdk";
8
+ * import config from "../../../puck.config";
9
+ * const pages = createP1Pages({ config });
10
+ * export default pages.Page;
11
+ * export const generateMetadata = pages.generateMetadata;
12
+ * export const dynamic = "force-dynamic";
13
+ */
14
+ import "@puckeditor/core/puck.css";
15
+ import { listRoutes, pagePathFromCatchAllSegments, ensureInitialized, } from "@pantheon-systems/puck-css/server";
16
+ import { P1NextRouterProvider } from "./P1NextRouterProvider.js";
17
+ import { P1AuthShell } from "./P1AuthShell.js";
18
+ function parsePath(path) {
19
+ if (path.length === 0)
20
+ return { mode: "dashboard", pagePath: "/" };
21
+ const command = path[0];
22
+ // /p1/api/... is handled by the route handler, not the page
23
+ if (command === "api")
24
+ return { mode: "api", pagePath: "/" };
25
+ // /p1/structure
26
+ if (command === "structure")
27
+ return { mode: "structure", pagePath: "/" };
28
+ // /p1/edit/... -> editor for the path
29
+ if (command === "edit") {
30
+ const rest = path.slice(1);
31
+ return { mode: "editor", pagePath: pagePathFromCatchAllSegments(rest) };
32
+ }
33
+ // /p1/... (anything else) -> editor for that path
34
+ return { mode: "editor", pagePath: pagePathFromCatchAllSegments(path) };
35
+ }
36
+ export function createP1Pages(opts) {
37
+ const { EditorClient } = opts;
38
+ const initPromise = ensureInitialized(opts);
39
+ async function generateMetadata({ params, }) {
40
+ await initPromise;
41
+ const { p1 = [] } = await params;
42
+ const { mode, pagePath } = parsePath(p1);
43
+ if (mode === "dashboard") {
44
+ return { title: "P1 Dashboard" };
45
+ }
46
+ if (mode === "structure") {
47
+ return { title: "Site Structure" };
48
+ }
49
+ return { title: "P1 Editor: " + pagePath };
50
+ }
51
+ async function Page({ params, }) {
52
+ await initPromise;
53
+ const { p1 = [] } = await params;
54
+ const { mode, pagePath } = parsePath(p1);
55
+ // Dashboard
56
+ if (mode === "dashboard") {
57
+ let routes = [];
58
+ try {
59
+ routes = await listRoutes();
60
+ }
61
+ catch {
62
+ // Backend timeout or API error — show empty state
63
+ }
64
+ return (_jsx(P1AuthShell, { children: _jsxs("div", { style: {
65
+ fontFamily: "system-ui, sans-serif",
66
+ padding: "24px 32px",
67
+ maxWidth: 960,
68
+ }, children: [_jsx("h1", { style: { fontSize: 22, fontWeight: 600, margin: "0 0 16px" }, children: "P1 Dashboard" }), _jsx("p", { style: { color: "#555", marginBottom: 24 }, children: "Manage your site pages and templates." }), _jsx("div", { style: { display: "flex", gap: 12, marginBottom: 24 }, children: _jsx("a", { href: "/p1/structure", style: {
69
+ padding: "8px 16px",
70
+ background: "#2563eb",
71
+ color: "#fff",
72
+ borderRadius: 6,
73
+ textDecoration: "none",
74
+ fontSize: 14,
75
+ }, children: "Site Structure" }) }), routes.length > 0 ? (_jsx("ul", { style: { listStyle: "none", padding: 0 }, children: routes.map((r) => (_jsxs("li", { style: { marginBottom: 8 }, children: [_jsx("a", { href: `/p1${r.path === "/" ? "" : r.path}`, style: {
76
+ fontFamily: "ui-monospace, monospace",
77
+ fontSize: 14,
78
+ }, children: r.path }), _jsx("span", { style: { color: "#888", fontSize: 13, marginLeft: 8 }, children: r.kind })] }, r.path))) })) : (_jsx("p", { style: { color: "#666" }, children: "No pages yet. Use Site Structure to create one." }))] }) }));
79
+ }
80
+ // Structure page
81
+ if (mode === "structure") {
82
+ const { StructurePage } = await import("@pantheon-systems/puck-css/server");
83
+ return (_jsx(P1AuthShell, { children: _jsx(P1NextRouterProvider, { children: _jsx(StructurePage, {}) }) }));
84
+ }
85
+ // Editor — P1App handles auth and data loading client-side
86
+ if (mode === "editor") {
87
+ return _jsx(EditorClient, { path: pagePath });
88
+ }
89
+ return _jsx("div", { children: "Not found" });
90
+ }
91
+ return { Page, generateMetadata };
92
+ }
93
+ //# sourceMappingURL=pages-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages-handler.js","sourceRoot":"","sources":["../src/pages-handler.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { NextResponse } from "next/server";
2
+ export declare function postBrokerLogin(request: Request, apiKey: string | undefined, baseUrl: string | undefined, redirectUrl?: string, prompt?: string): Promise<NextResponse<any>>;
3
+ export declare function postBrokerRedeem(request: Request, apiKey: string | undefined, baseUrl: string | undefined): Promise<NextResponse<any>>;
4
+ //# sourceMappingURL=broker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../src/routes/broker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,WAAW,CAAC,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,8BAmChB;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,MAAM,GAAG,SAAS,8BA0C5B"}
@@ -0,0 +1,56 @@
1
+ import { NextResponse } from "next/server";
2
+ export async function postBrokerLogin(request, apiKey, baseUrl, redirectUrl, prompt) {
3
+ if (!apiKey || !baseUrl) {
4
+ return NextResponse.json({ error: "Server configuration error" }, { status: 500 });
5
+ }
6
+ const headers = {
7
+ "Authorization": `Bearer ${apiKey}`,
8
+ };
9
+ const fetchInit = {
10
+ method: "POST",
11
+ headers,
12
+ };
13
+ const requestUrl = new URL(request.url);
14
+ const basePath = requestUrl.pathname.replace(/\/auth\/.*$/, '') || '/';
15
+ const effectiveRedirectUrl = redirectUrl ?? requestUrl.origin + basePath;
16
+ headers["Content-Type"] = "application/json";
17
+ fetchInit.body = JSON.stringify({
18
+ redirectUrl: effectiveRedirectUrl,
19
+ ...(prompt !== undefined ? { prompt } : {}),
20
+ });
21
+ const response = await fetch(`${baseUrl}/broker/login`, fetchInit);
22
+ const body = await response.json().catch(() => ({ error: "Unknown error" }));
23
+ if (!response.ok) {
24
+ return NextResponse.json(body, { status: response.status });
25
+ }
26
+ return NextResponse.json(body);
27
+ }
28
+ export async function postBrokerRedeem(request, apiKey, baseUrl) {
29
+ if (!apiKey || !baseUrl) {
30
+ return NextResponse.json({ error: "Server configuration error" }, { status: 500 });
31
+ }
32
+ let parsed;
33
+ try {
34
+ parsed = await request.json();
35
+ }
36
+ catch {
37
+ return NextResponse.json({ error: "Invalid JSON body" }, { status: 400 });
38
+ }
39
+ if (!parsed.transactionId) {
40
+ return NextResponse.json({ error: "Missing transactionId" }, { status: 400 });
41
+ }
42
+ const response = await fetch(`${baseUrl}/broker/redeem`, {
43
+ method: "POST",
44
+ headers: {
45
+ "Content-Type": "application/json",
46
+ "Authorization": `Bearer ${apiKey}`,
47
+ },
48
+ body: JSON.stringify({ transactionId: parsed.transactionId }),
49
+ });
50
+ const body = await response.json().catch(() => ({ error: "Unknown error" }));
51
+ if (!response.ok) {
52
+ return NextResponse.json(body, { status: response.status });
53
+ }
54
+ return NextResponse.json(body);
55
+ }
56
+ //# sourceMappingURL=broker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker.js","sourceRoot":"","sources":["../../src/routes/broker.ts"],"names":[],"mappings":"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"}