@gigadrive/network-config 3.4.7 → 3.4.9

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.
@@ -0,0 +1,27 @@
1
+ interface ResponseCacheEntry {
2
+ cacheControl?: unknown;
3
+ value?: {
4
+ kind?: unknown;
5
+ html?: unknown;
6
+ postponed?: unknown;
7
+ headers?: unknown;
8
+ status?: unknown;
9
+ } | null;
10
+ }
11
+ /**
12
+ * Persists the atomic shell/postponed pair emitted by Next's PPR response cache.
13
+ *
14
+ * @param cacheKey - The response-cache URL or pathname associated with the PPR entry.
15
+ * @param cacheEntry - The Next response-cache entry emitted by `onCacheEntryV2`.
16
+ * @returns A promise that settles after the entry is written, or immediately for unsupported entries.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * await persistPprCacheEntry('/products/one', {
21
+ * value: { kind: 'APP_PAGE', html: '<html>shell</html>', postponed: 'opaque-state' },
22
+ * });
23
+ * ```
24
+ */
25
+ declare const persistPprCacheEntry: (cacheKey: string, cacheEntry: ResponseCacheEntry) => Promise<void>;
26
+
27
+ export { persistPprCacheEntry };
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/nextjs-ppr-runtime.ts
21
+ var nextjs_ppr_runtime_exports = {};
22
+ __export(nextjs_ppr_runtime_exports, {
23
+ persistPprCacheEntry: () => persistPprCacheEntry
24
+ });
25
+ module.exports = __toCommonJS(nextjs_ppr_runtime_exports);
26
+
27
+ // src/nextjs-runtime-cache-client.ts
28
+ var cachedToken;
29
+ var apiBaseUrl = () => (process.env.GIGADRIVE_API_URL ?? "https://api.gigadrive.network").replace(/\/$/, "");
30
+ var encodeBinary = (value, seen = /* @__PURE__ */ new WeakSet()) => {
31
+ if (value instanceof Uint8Array) {
32
+ return { __gigadriveType: "bytes", value: Buffer.from(value).toString("base64") };
33
+ }
34
+ if (value instanceof ArrayBuffer) {
35
+ return { __gigadriveType: "bytes", value: Buffer.from(value).toString("base64") };
36
+ }
37
+ if (Array.isArray(value)) return value.map((item) => encodeBinary(item, seen));
38
+ if (typeof value !== "object" || value === null) return value;
39
+ if (seen.has(value)) throw new Error("Next.js cache entry contains a circular value");
40
+ seen.add(value);
41
+ const result = {};
42
+ for (const [key, item] of Object.entries(value)) result[key] = encodeBinary(item, seen);
43
+ seen.delete(value);
44
+ return result;
45
+ };
46
+ var getAccessToken = async () => {
47
+ if (cachedToken && cachedToken.expiresAt > Date.now() + 3e4) return cachedToken.value;
48
+ const clientId = process.env.GIGADRIVE_CLIENT_ID;
49
+ const clientSecret = process.env.GIGADRIVE_CLIENT_SECRET;
50
+ if (!clientId || !clientSecret) throw new Error("Gigadrive workload credentials are unavailable");
51
+ const response = await fetch(`${apiBaseUrl()}/oauth2/token`, {
52
+ method: "POST",
53
+ headers: {
54
+ authorization: `Basic ${Buffer.from(`${clientId}:${clientSecret}`).toString("base64")}`,
55
+ "content-type": "application/x-www-form-urlencoded"
56
+ },
57
+ body: "grant_type=client_credentials"
58
+ });
59
+ if (!response.ok) throw new Error(`Gigadrive workload authentication failed with status ${response.status}`);
60
+ const token = await response.json();
61
+ if (!token.access_token) throw new Error("Gigadrive workload authentication returned no access token");
62
+ cachedToken = {
63
+ value: token.access_token,
64
+ expiresAt: Date.now() + Math.max(60, token.expires_in ?? 300) * 1e3
65
+ };
66
+ return token.access_token;
67
+ };
68
+ var request = async (pathname, init, attempt = 0) => {
69
+ const token = await getAccessToken();
70
+ try {
71
+ const response = await fetch(`${apiBaseUrl()}${pathname}`, {
72
+ ...init,
73
+ headers: {
74
+ authorization: `Bearer ${token}`,
75
+ "content-type": "application/json",
76
+ "x-gigadrive-deployment-id": process.env.GIGADRIVE_DEPLOYMENT_ID ?? process.env.NEBULA_DEPLOYMENT_ID ?? "",
77
+ "x-gigadrive-build-id": process.env.NEXT_BUILD_ID ?? "",
78
+ ...init.headers
79
+ }
80
+ });
81
+ if (response.status === 401 && attempt === 0) {
82
+ cachedToken = void 0;
83
+ return request(pathname, init, attempt + 1);
84
+ }
85
+ if (response.status >= 500 && attempt < 2) return request(pathname, init, attempt + 1);
86
+ return response;
87
+ } catch (error) {
88
+ if (attempt < 2) return request(pathname, init, attempt + 1);
89
+ throw error;
90
+ }
91
+ };
92
+ var cachePath = (kind, key) => `/internal/runtime-cache/v1/entries/${encodeURIComponent(kind)}/${encodeURIComponent(key)}`;
93
+ var writeRuntimeCache = async (kind, key, value, tags = []) => {
94
+ const response = await request(cachePath(kind, key), {
95
+ method: "PUT",
96
+ body: JSON.stringify({ value: encodeBinary(value), tags })
97
+ });
98
+ if (!response.ok) throw new Error(`Gigadrive runtime cache write failed with status ${response.status}`);
99
+ };
100
+
101
+ // src/nextjs-ppr-runtime.ts
102
+ var normalizeHeaders = (value) => {
103
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return {};
104
+ const headers = {};
105
+ for (const [name, item] of Object.entries(value)) {
106
+ if (typeof item === "string" || typeof item === "number") headers[name] = String(item);
107
+ else if (Array.isArray(item) && item.every((entry) => typeof entry === "string" || typeof entry === "number")) {
108
+ headers[name] = item.map(String);
109
+ }
110
+ }
111
+ return headers;
112
+ };
113
+ var normalizeCacheKey = (value) => {
114
+ try {
115
+ const url = new URL(value, "https://gigadrive.invalid");
116
+ return `${url.pathname || "/"}${url.search}`;
117
+ } catch {
118
+ return value.startsWith("/") ? value : `/${value}`;
119
+ }
120
+ };
121
+ var readShell = (value) => {
122
+ if (typeof value === "string") return value;
123
+ if (typeof value !== "object" || value === null) return null;
124
+ const toUnchunkedString = value.toUnchunkedString;
125
+ return typeof toUnchunkedString === "function" ? String(toUnchunkedString.call(value)) : null;
126
+ };
127
+ var persistPprCacheEntry = async (cacheKey, cacheEntry) => {
128
+ if (cacheEntry.value?.kind !== "APP_PAGE") return;
129
+ const shell = readShell(cacheEntry.value.html);
130
+ if (shell === null) return;
131
+ const headers = normalizeHeaders(cacheEntry.value.headers);
132
+ const tags = (headers["x-next-cache-tags"] ?? []).toString().split(",").map((tag) => tag.trim()).filter(Boolean);
133
+ const value = {
134
+ shell,
135
+ ...typeof cacheEntry.value.postponed === "string" ? { postponedState: cacheEntry.value.postponed } : {},
136
+ headers,
137
+ ...typeof cacheEntry.value.status === "number" ? { status: cacheEntry.value.status } : {},
138
+ ...cacheEntry.cacheControl === void 0 ? {} : { cacheControl: cacheEntry.cacheControl }
139
+ };
140
+ await writeRuntimeCache("incremental", `ppr:${normalizeCacheKey(cacheKey)}`, value, tags);
141
+ };
142
+ // Annotate the CommonJS export names for ESM import in node:
143
+ 0 && (module.exports = {
144
+ persistPprCacheEntry
145
+ });
146
+ //# sourceMappingURL=nextjs-ppr-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/nextjs-ppr-runtime.ts","../src/nextjs-runtime-cache-client.ts"],"sourcesContent":["import { writeRuntimeCache } from './nextjs-runtime-cache-client';\n\ninterface ResponseCacheEntry {\n cacheControl?: unknown;\n value?: {\n kind?: unknown;\n html?: unknown;\n postponed?: unknown;\n headers?: unknown;\n status?: unknown;\n } | null;\n}\n\ninterface PersistedPprCacheEntry {\n shell: string;\n postponedState?: string;\n headers: Record<string, string | string[]>;\n status?: number;\n cacheControl?: unknown;\n}\n\nconst normalizeHeaders = (value: unknown): Record<string, string | string[]> => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return {};\n const headers: Record<string, string | string[]> = {};\n for (const [name, item] of Object.entries(value)) {\n if (typeof item === 'string' || typeof item === 'number') headers[name] = String(item);\n else if (Array.isArray(item) && item.every((entry) => typeof entry === 'string' || typeof entry === 'number')) {\n headers[name] = item.map(String);\n }\n }\n return headers;\n};\n\nconst normalizeCacheKey = (value: string): string => {\n try {\n const url = new URL(value, 'https://gigadrive.invalid');\n return `${url.pathname || '/'}${url.search}`;\n } catch {\n return value.startsWith('/') ? value : `/${value}`;\n }\n};\n\nconst readShell = (value: unknown): string | null => {\n if (typeof value === 'string') return value;\n if (typeof value !== 'object' || value === null) return null;\n const toUnchunkedString = (value as { toUnchunkedString?: unknown }).toUnchunkedString;\n return typeof toUnchunkedString === 'function' ? String(toUnchunkedString.call(value)) : null;\n};\n\n/**\n * Persists the atomic shell/postponed pair emitted by Next's PPR response cache.\n *\n * @param cacheKey - The response-cache URL or pathname associated with the PPR entry.\n * @param cacheEntry - The Next response-cache entry emitted by `onCacheEntryV2`.\n * @returns A promise that settles after the entry is written, or immediately for unsupported entries.\n *\n * @example\n * ```ts\n * await persistPprCacheEntry('/products/one', {\n * value: { kind: 'APP_PAGE', html: '<html>shell</html>', postponed: 'opaque-state' },\n * });\n * ```\n */\nexport const persistPprCacheEntry = async (cacheKey: string, cacheEntry: ResponseCacheEntry): Promise<void> => {\n if (cacheEntry.value?.kind !== 'APP_PAGE') return;\n const shell = readShell(cacheEntry.value.html);\n if (shell === null) return;\n\n const headers = normalizeHeaders(cacheEntry.value.headers);\n const tags = (headers['x-next-cache-tags'] ?? [])\n .toString()\n .split(',')\n .map((tag) => tag.trim())\n .filter(Boolean);\n const value: PersistedPprCacheEntry = {\n shell,\n ...(typeof cacheEntry.value.postponed === 'string' ? { postponedState: cacheEntry.value.postponed } : {}),\n headers,\n ...(typeof cacheEntry.value.status === 'number' ? { status: cacheEntry.value.status } : {}),\n ...(cacheEntry.cacheControl === undefined ? {} : { cacheControl: cacheEntry.cacheControl }),\n };\n\n await writeRuntimeCache('incremental', `ppr:${normalizeCacheKey(cacheKey)}`, value, tags);\n};\n","interface RuntimeCacheEnvelope {\n value: unknown;\n}\n\ninterface AccessTokenResponse {\n access_token: string;\n expires_in?: number;\n}\n\nexport interface RuntimeCacheTagState {\n stale: number;\n expired: number;\n}\n\nlet cachedToken: { value: string; expiresAt: number } | undefined;\n\nconst apiBaseUrl = (): string => (process.env.GIGADRIVE_API_URL ?? 'https://api.gigadrive.network').replace(/\\/$/, '');\n\nconst encodeBinary = (value: unknown, seen = new WeakSet<object>()): unknown => {\n if (value instanceof Uint8Array) {\n return { __gigadriveType: 'bytes', value: Buffer.from(value).toString('base64') };\n }\n if (value instanceof ArrayBuffer) {\n return { __gigadriveType: 'bytes', value: Buffer.from(value).toString('base64') };\n }\n if (Array.isArray(value)) return value.map((item) => encodeBinary(item, seen));\n if (typeof value !== 'object' || value === null) return value;\n if (seen.has(value)) throw new Error('Next.js cache entry contains a circular value');\n seen.add(value);\n const result: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) result[key] = encodeBinary(item, seen);\n seen.delete(value);\n return result;\n};\n\nconst decodeBinary = (value: unknown): unknown => {\n if (Array.isArray(value)) return value.map(decodeBinary);\n if (typeof value !== 'object' || value === null) return value;\n const record = value as Record<string, unknown>;\n if (record.__gigadriveType === 'bytes' && typeof record.value === 'string')\n return Buffer.from(record.value, 'base64');\n return Object.fromEntries(Object.entries(record).map(([key, item]) => [key, decodeBinary(item)]));\n};\n\nconst getAccessToken = async (): Promise<string> => {\n if (cachedToken && cachedToken.expiresAt > Date.now() + 30_000) return cachedToken.value;\n const clientId = process.env.GIGADRIVE_CLIENT_ID;\n const clientSecret = process.env.GIGADRIVE_CLIENT_SECRET;\n if (!clientId || !clientSecret) throw new Error('Gigadrive workload credentials are unavailable');\n\n const response = await fetch(`${apiBaseUrl()}/oauth2/token`, {\n method: 'POST',\n headers: {\n authorization: `Basic ${Buffer.from(`${clientId}:${clientSecret}`).toString('base64')}`,\n 'content-type': 'application/x-www-form-urlencoded',\n },\n body: 'grant_type=client_credentials',\n });\n if (!response.ok) throw new Error(`Gigadrive workload authentication failed with status ${response.status}`);\n const token = (await response.json()) as AccessTokenResponse;\n if (!token.access_token) throw new Error('Gigadrive workload authentication returned no access token');\n cachedToken = {\n value: token.access_token,\n expiresAt: Date.now() + Math.max(60, token.expires_in ?? 300) * 1000,\n };\n return token.access_token;\n};\n\nconst request = async (pathname: string, init: RequestInit, attempt = 0): Promise<Response> => {\n const token = await getAccessToken();\n try {\n const response = await fetch(`${apiBaseUrl()}${pathname}`, {\n ...init,\n headers: {\n authorization: `Bearer ${token}`,\n 'content-type': 'application/json',\n 'x-gigadrive-deployment-id': process.env.GIGADRIVE_DEPLOYMENT_ID ?? process.env.NEBULA_DEPLOYMENT_ID ?? '',\n 'x-gigadrive-build-id': process.env.NEXT_BUILD_ID ?? '',\n ...init.headers,\n },\n });\n if (response.status === 401 && attempt === 0) {\n cachedToken = undefined;\n return request(pathname, init, attempt + 1);\n }\n if (response.status >= 500 && attempt < 2) return request(pathname, init, attempt + 1);\n return response;\n } catch (error) {\n if (attempt < 2) return request(pathname, init, attempt + 1);\n throw error;\n }\n};\n\nconst cachePath = (kind: string, key: string): string =>\n `/internal/runtime-cache/v1/entries/${encodeURIComponent(kind)}/${encodeURIComponent(key)}`;\n\nexport const readRuntimeCache = async (kind: string, key: string): Promise<unknown | undefined> => {\n try {\n const response = await request(cachePath(kind, key), { method: 'GET' });\n if (response.status === 404) return undefined;\n if (!response.ok) return undefined;\n const envelope = (await response.json()) as RuntimeCacheEnvelope;\n return decodeBinary(envelope.value);\n } catch {\n return undefined;\n }\n};\n\nexport const writeRuntimeCache = async (\n kind: string,\n key: string,\n value: unknown,\n tags: readonly string[] = []\n): Promise<void> => {\n const response = await request(cachePath(kind, key), {\n method: 'PUT',\n body: JSON.stringify({ value: encodeBinary(value), tags }),\n });\n if (!response.ok) throw new Error(`Gigadrive runtime cache write failed with status ${response.status}`);\n};\n\nexport const revalidateRuntimeCacheTags = async (\n kind: string,\n tags: readonly string[],\n durations?: { expire?: number }\n): Promise<void> => {\n const response = await request('/internal/runtime-cache/v1/tags/revalidate', {\n method: 'POST',\n body: JSON.stringify({ kind, tags, durations }),\n });\n if (!response.ok) throw new Error(`Gigadrive runtime cache revalidation failed with status ${response.status}`);\n};\n\nexport const getRuntimeCacheTagExpiration = async (kind: string, tags: readonly string[]): Promise<number> => {\n try {\n const response = await request('/internal/runtime-cache/v1/tags/expiration', {\n method: 'POST',\n body: JSON.stringify({ kind, tags }),\n });\n if (!response.ok) return 0;\n const value = (await response.json()) as { expiration?: unknown };\n return typeof value.expiration === 'number' ? value.expiration : 0;\n } catch {\n return 0;\n }\n};\n\nexport const getRuntimeCacheTagState = async (kind: string, tags: readonly string[]): Promise<RuntimeCacheTagState> => {\n try {\n const response = await request('/internal/runtime-cache/v1/tags/state', {\n method: 'POST',\n body: JSON.stringify({ kind, tags }),\n });\n if (!response.ok) return { stale: 0, expired: 0 };\n const value = (await response.json()) as { stale?: unknown; expired?: unknown };\n return {\n stale: typeof value.stale === 'number' ? value.stale : 0,\n expired: typeof value.expired === 'number' ? value.expired : 0,\n };\n } catch {\n return { stale: 0, expired: 0 };\n }\n};\n\nexport const resetRuntimeCacheClientForTests = (): void => {\n cachedToken = undefined;\n};\n"],"mappings":"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","names":[]}
@@ -0,0 +1,119 @@
1
+ // src/nextjs-runtime-cache-client.ts
2
+ var cachedToken;
3
+ var apiBaseUrl = () => (process.env.GIGADRIVE_API_URL ?? "https://api.gigadrive.network").replace(/\/$/, "");
4
+ var encodeBinary = (value, seen = /* @__PURE__ */ new WeakSet()) => {
5
+ if (value instanceof Uint8Array) {
6
+ return { __gigadriveType: "bytes", value: Buffer.from(value).toString("base64") };
7
+ }
8
+ if (value instanceof ArrayBuffer) {
9
+ return { __gigadriveType: "bytes", value: Buffer.from(value).toString("base64") };
10
+ }
11
+ if (Array.isArray(value)) return value.map((item) => encodeBinary(item, seen));
12
+ if (typeof value !== "object" || value === null) return value;
13
+ if (seen.has(value)) throw new Error("Next.js cache entry contains a circular value");
14
+ seen.add(value);
15
+ const result = {};
16
+ for (const [key, item] of Object.entries(value)) result[key] = encodeBinary(item, seen);
17
+ seen.delete(value);
18
+ return result;
19
+ };
20
+ var getAccessToken = async () => {
21
+ if (cachedToken && cachedToken.expiresAt > Date.now() + 3e4) return cachedToken.value;
22
+ const clientId = process.env.GIGADRIVE_CLIENT_ID;
23
+ const clientSecret = process.env.GIGADRIVE_CLIENT_SECRET;
24
+ if (!clientId || !clientSecret) throw new Error("Gigadrive workload credentials are unavailable");
25
+ const response = await fetch(`${apiBaseUrl()}/oauth2/token`, {
26
+ method: "POST",
27
+ headers: {
28
+ authorization: `Basic ${Buffer.from(`${clientId}:${clientSecret}`).toString("base64")}`,
29
+ "content-type": "application/x-www-form-urlencoded"
30
+ },
31
+ body: "grant_type=client_credentials"
32
+ });
33
+ if (!response.ok) throw new Error(`Gigadrive workload authentication failed with status ${response.status}`);
34
+ const token = await response.json();
35
+ if (!token.access_token) throw new Error("Gigadrive workload authentication returned no access token");
36
+ cachedToken = {
37
+ value: token.access_token,
38
+ expiresAt: Date.now() + Math.max(60, token.expires_in ?? 300) * 1e3
39
+ };
40
+ return token.access_token;
41
+ };
42
+ var request = async (pathname, init, attempt = 0) => {
43
+ const token = await getAccessToken();
44
+ try {
45
+ const response = await fetch(`${apiBaseUrl()}${pathname}`, {
46
+ ...init,
47
+ headers: {
48
+ authorization: `Bearer ${token}`,
49
+ "content-type": "application/json",
50
+ "x-gigadrive-deployment-id": process.env.GIGADRIVE_DEPLOYMENT_ID ?? process.env.NEBULA_DEPLOYMENT_ID ?? "",
51
+ "x-gigadrive-build-id": process.env.NEXT_BUILD_ID ?? "",
52
+ ...init.headers
53
+ }
54
+ });
55
+ if (response.status === 401 && attempt === 0) {
56
+ cachedToken = void 0;
57
+ return request(pathname, init, attempt + 1);
58
+ }
59
+ if (response.status >= 500 && attempt < 2) return request(pathname, init, attempt + 1);
60
+ return response;
61
+ } catch (error) {
62
+ if (attempt < 2) return request(pathname, init, attempt + 1);
63
+ throw error;
64
+ }
65
+ };
66
+ var cachePath = (kind, key) => `/internal/runtime-cache/v1/entries/${encodeURIComponent(kind)}/${encodeURIComponent(key)}`;
67
+ var writeRuntimeCache = async (kind, key, value, tags = []) => {
68
+ const response = await request(cachePath(kind, key), {
69
+ method: "PUT",
70
+ body: JSON.stringify({ value: encodeBinary(value), tags })
71
+ });
72
+ if (!response.ok) throw new Error(`Gigadrive runtime cache write failed with status ${response.status}`);
73
+ };
74
+
75
+ // src/nextjs-ppr-runtime.ts
76
+ var normalizeHeaders = (value) => {
77
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return {};
78
+ const headers = {};
79
+ for (const [name, item] of Object.entries(value)) {
80
+ if (typeof item === "string" || typeof item === "number") headers[name] = String(item);
81
+ else if (Array.isArray(item) && item.every((entry) => typeof entry === "string" || typeof entry === "number")) {
82
+ headers[name] = item.map(String);
83
+ }
84
+ }
85
+ return headers;
86
+ };
87
+ var normalizeCacheKey = (value) => {
88
+ try {
89
+ const url = new URL(value, "https://gigadrive.invalid");
90
+ return `${url.pathname || "/"}${url.search}`;
91
+ } catch {
92
+ return value.startsWith("/") ? value : `/${value}`;
93
+ }
94
+ };
95
+ var readShell = (value) => {
96
+ if (typeof value === "string") return value;
97
+ if (typeof value !== "object" || value === null) return null;
98
+ const toUnchunkedString = value.toUnchunkedString;
99
+ return typeof toUnchunkedString === "function" ? String(toUnchunkedString.call(value)) : null;
100
+ };
101
+ var persistPprCacheEntry = async (cacheKey, cacheEntry) => {
102
+ if (cacheEntry.value?.kind !== "APP_PAGE") return;
103
+ const shell = readShell(cacheEntry.value.html);
104
+ if (shell === null) return;
105
+ const headers = normalizeHeaders(cacheEntry.value.headers);
106
+ const tags = (headers["x-next-cache-tags"] ?? []).toString().split(",").map((tag) => tag.trim()).filter(Boolean);
107
+ const value = {
108
+ shell,
109
+ ...typeof cacheEntry.value.postponed === "string" ? { postponedState: cacheEntry.value.postponed } : {},
110
+ headers,
111
+ ...typeof cacheEntry.value.status === "number" ? { status: cacheEntry.value.status } : {},
112
+ ...cacheEntry.cacheControl === void 0 ? {} : { cacheControl: cacheEntry.cacheControl }
113
+ };
114
+ await writeRuntimeCache("incremental", `ppr:${normalizeCacheKey(cacheKey)}`, value, tags);
115
+ };
116
+ export {
117
+ persistPprCacheEntry
118
+ };
119
+ //# sourceMappingURL=nextjs-ppr-runtime.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/nextjs-runtime-cache-client.ts","../src/nextjs-ppr-runtime.ts"],"sourcesContent":["interface RuntimeCacheEnvelope {\n value: unknown;\n}\n\ninterface AccessTokenResponse {\n access_token: string;\n expires_in?: number;\n}\n\nexport interface RuntimeCacheTagState {\n stale: number;\n expired: number;\n}\n\nlet cachedToken: { value: string; expiresAt: number } | undefined;\n\nconst apiBaseUrl = (): string => (process.env.GIGADRIVE_API_URL ?? 'https://api.gigadrive.network').replace(/\\/$/, '');\n\nconst encodeBinary = (value: unknown, seen = new WeakSet<object>()): unknown => {\n if (value instanceof Uint8Array) {\n return { __gigadriveType: 'bytes', value: Buffer.from(value).toString('base64') };\n }\n if (value instanceof ArrayBuffer) {\n return { __gigadriveType: 'bytes', value: Buffer.from(value).toString('base64') };\n }\n if (Array.isArray(value)) return value.map((item) => encodeBinary(item, seen));\n if (typeof value !== 'object' || value === null) return value;\n if (seen.has(value)) throw new Error('Next.js cache entry contains a circular value');\n seen.add(value);\n const result: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) result[key] = encodeBinary(item, seen);\n seen.delete(value);\n return result;\n};\n\nconst decodeBinary = (value: unknown): unknown => {\n if (Array.isArray(value)) return value.map(decodeBinary);\n if (typeof value !== 'object' || value === null) return value;\n const record = value as Record<string, unknown>;\n if (record.__gigadriveType === 'bytes' && typeof record.value === 'string')\n return Buffer.from(record.value, 'base64');\n return Object.fromEntries(Object.entries(record).map(([key, item]) => [key, decodeBinary(item)]));\n};\n\nconst getAccessToken = async (): Promise<string> => {\n if (cachedToken && cachedToken.expiresAt > Date.now() + 30_000) return cachedToken.value;\n const clientId = process.env.GIGADRIVE_CLIENT_ID;\n const clientSecret = process.env.GIGADRIVE_CLIENT_SECRET;\n if (!clientId || !clientSecret) throw new Error('Gigadrive workload credentials are unavailable');\n\n const response = await fetch(`${apiBaseUrl()}/oauth2/token`, {\n method: 'POST',\n headers: {\n authorization: `Basic ${Buffer.from(`${clientId}:${clientSecret}`).toString('base64')}`,\n 'content-type': 'application/x-www-form-urlencoded',\n },\n body: 'grant_type=client_credentials',\n });\n if (!response.ok) throw new Error(`Gigadrive workload authentication failed with status ${response.status}`);\n const token = (await response.json()) as AccessTokenResponse;\n if (!token.access_token) throw new Error('Gigadrive workload authentication returned no access token');\n cachedToken = {\n value: token.access_token,\n expiresAt: Date.now() + Math.max(60, token.expires_in ?? 300) * 1000,\n };\n return token.access_token;\n};\n\nconst request = async (pathname: string, init: RequestInit, attempt = 0): Promise<Response> => {\n const token = await getAccessToken();\n try {\n const response = await fetch(`${apiBaseUrl()}${pathname}`, {\n ...init,\n headers: {\n authorization: `Bearer ${token}`,\n 'content-type': 'application/json',\n 'x-gigadrive-deployment-id': process.env.GIGADRIVE_DEPLOYMENT_ID ?? process.env.NEBULA_DEPLOYMENT_ID ?? '',\n 'x-gigadrive-build-id': process.env.NEXT_BUILD_ID ?? '',\n ...init.headers,\n },\n });\n if (response.status === 401 && attempt === 0) {\n cachedToken = undefined;\n return request(pathname, init, attempt + 1);\n }\n if (response.status >= 500 && attempt < 2) return request(pathname, init, attempt + 1);\n return response;\n } catch (error) {\n if (attempt < 2) return request(pathname, init, attempt + 1);\n throw error;\n }\n};\n\nconst cachePath = (kind: string, key: string): string =>\n `/internal/runtime-cache/v1/entries/${encodeURIComponent(kind)}/${encodeURIComponent(key)}`;\n\nexport const readRuntimeCache = async (kind: string, key: string): Promise<unknown | undefined> => {\n try {\n const response = await request(cachePath(kind, key), { method: 'GET' });\n if (response.status === 404) return undefined;\n if (!response.ok) return undefined;\n const envelope = (await response.json()) as RuntimeCacheEnvelope;\n return decodeBinary(envelope.value);\n } catch {\n return undefined;\n }\n};\n\nexport const writeRuntimeCache = async (\n kind: string,\n key: string,\n value: unknown,\n tags: readonly string[] = []\n): Promise<void> => {\n const response = await request(cachePath(kind, key), {\n method: 'PUT',\n body: JSON.stringify({ value: encodeBinary(value), tags }),\n });\n if (!response.ok) throw new Error(`Gigadrive runtime cache write failed with status ${response.status}`);\n};\n\nexport const revalidateRuntimeCacheTags = async (\n kind: string,\n tags: readonly string[],\n durations?: { expire?: number }\n): Promise<void> => {\n const response = await request('/internal/runtime-cache/v1/tags/revalidate', {\n method: 'POST',\n body: JSON.stringify({ kind, tags, durations }),\n });\n if (!response.ok) throw new Error(`Gigadrive runtime cache revalidation failed with status ${response.status}`);\n};\n\nexport const getRuntimeCacheTagExpiration = async (kind: string, tags: readonly string[]): Promise<number> => {\n try {\n const response = await request('/internal/runtime-cache/v1/tags/expiration', {\n method: 'POST',\n body: JSON.stringify({ kind, tags }),\n });\n if (!response.ok) return 0;\n const value = (await response.json()) as { expiration?: unknown };\n return typeof value.expiration === 'number' ? value.expiration : 0;\n } catch {\n return 0;\n }\n};\n\nexport const getRuntimeCacheTagState = async (kind: string, tags: readonly string[]): Promise<RuntimeCacheTagState> => {\n try {\n const response = await request('/internal/runtime-cache/v1/tags/state', {\n method: 'POST',\n body: JSON.stringify({ kind, tags }),\n });\n if (!response.ok) return { stale: 0, expired: 0 };\n const value = (await response.json()) as { stale?: unknown; expired?: unknown };\n return {\n stale: typeof value.stale === 'number' ? value.stale : 0,\n expired: typeof value.expired === 'number' ? value.expired : 0,\n };\n } catch {\n return { stale: 0, expired: 0 };\n }\n};\n\nexport const resetRuntimeCacheClientForTests = (): void => {\n cachedToken = undefined;\n};\n","import { writeRuntimeCache } from './nextjs-runtime-cache-client';\n\ninterface ResponseCacheEntry {\n cacheControl?: unknown;\n value?: {\n kind?: unknown;\n html?: unknown;\n postponed?: unknown;\n headers?: unknown;\n status?: unknown;\n } | null;\n}\n\ninterface PersistedPprCacheEntry {\n shell: string;\n postponedState?: string;\n headers: Record<string, string | string[]>;\n status?: number;\n cacheControl?: unknown;\n}\n\nconst normalizeHeaders = (value: unknown): Record<string, string | string[]> => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return {};\n const headers: Record<string, string | string[]> = {};\n for (const [name, item] of Object.entries(value)) {\n if (typeof item === 'string' || typeof item === 'number') headers[name] = String(item);\n else if (Array.isArray(item) && item.every((entry) => typeof entry === 'string' || typeof entry === 'number')) {\n headers[name] = item.map(String);\n }\n }\n return headers;\n};\n\nconst normalizeCacheKey = (value: string): string => {\n try {\n const url = new URL(value, 'https://gigadrive.invalid');\n return `${url.pathname || '/'}${url.search}`;\n } catch {\n return value.startsWith('/') ? value : `/${value}`;\n }\n};\n\nconst readShell = (value: unknown): string | null => {\n if (typeof value === 'string') return value;\n if (typeof value !== 'object' || value === null) return null;\n const toUnchunkedString = (value as { toUnchunkedString?: unknown }).toUnchunkedString;\n return typeof toUnchunkedString === 'function' ? String(toUnchunkedString.call(value)) : null;\n};\n\n/**\n * Persists the atomic shell/postponed pair emitted by Next's PPR response cache.\n *\n * @param cacheKey - The response-cache URL or pathname associated with the PPR entry.\n * @param cacheEntry - The Next response-cache entry emitted by `onCacheEntryV2`.\n * @returns A promise that settles after the entry is written, or immediately for unsupported entries.\n *\n * @example\n * ```ts\n * await persistPprCacheEntry('/products/one', {\n * value: { kind: 'APP_PAGE', html: '<html>shell</html>', postponed: 'opaque-state' },\n * });\n * ```\n */\nexport const persistPprCacheEntry = async (cacheKey: string, cacheEntry: ResponseCacheEntry): Promise<void> => {\n if (cacheEntry.value?.kind !== 'APP_PAGE') return;\n const shell = readShell(cacheEntry.value.html);\n if (shell === null) return;\n\n const headers = normalizeHeaders(cacheEntry.value.headers);\n const tags = (headers['x-next-cache-tags'] ?? [])\n .toString()\n .split(',')\n .map((tag) => tag.trim())\n .filter(Boolean);\n const value: PersistedPprCacheEntry = {\n shell,\n ...(typeof cacheEntry.value.postponed === 'string' ? { postponedState: cacheEntry.value.postponed } : {}),\n headers,\n ...(typeof cacheEntry.value.status === 'number' ? { status: cacheEntry.value.status } : {}),\n ...(cacheEntry.cacheControl === undefined ? {} : { cacheControl: cacheEntry.cacheControl }),\n };\n\n await writeRuntimeCache('incremental', `ppr:${normalizeCacheKey(cacheKey)}`, value, tags);\n};\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gigadrive/network-config",
3
- "version": "3.4.7",
3
+ "version": "3.4.9",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/Gigadrive/sdk.git",
@@ -33,6 +33,11 @@
33
33
  "types": "./dist/nextjs-image-loader.d.ts",
34
34
  "require": "./dist/nextjs-image-loader.js",
35
35
  "import": "./dist/nextjs-image-loader.mjs"
36
+ },
37
+ "./nextjs-ppr-runtime": {
38
+ "types": "./dist/nextjs-ppr-runtime.d.ts",
39
+ "require": "./dist/nextjs-ppr-runtime.js",
40
+ "import": "./dist/nextjs-ppr-runtime.mjs"
36
41
  }
37
42
  },
38
43
  "main": "dist/index.js",