@everystack/server 0.2.7 → 0.2.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.
- package/package.json +12 -2
- package/src/plugin.ts +5 -1
- package/src/ssr.ts +6 -10
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@everystack/server",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.9",
|
|
4
4
|
"description": "Server runtime primitives for Lambda — event adapters, routing, SSR, image processing",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"publishConfig": {
|
|
@@ -59,17 +59,25 @@
|
|
|
59
59
|
"lint": "tsc --noEmit"
|
|
60
60
|
},
|
|
61
61
|
"peerDependencies": {
|
|
62
|
+
"@aws-sdk/client-cloudfront-keyvaluestore": ">=3.1053.0",
|
|
62
63
|
"@aws-sdk/client-s3": "3.1053.0",
|
|
63
64
|
"@aws-sdk/s3-request-presigner": "3.1053.0",
|
|
65
|
+
"@aws-sdk/signature-v4a": ">=3.1048.0",
|
|
64
66
|
"@everystack/auth": ">=0.1.0",
|
|
65
67
|
"@everystack/cli": ">=0.1.0",
|
|
66
68
|
"drizzle-orm": "0.41.0",
|
|
67
|
-
"postgres": "3.4.9",
|
|
68
69
|
"heic-decode": "2.1.0",
|
|
70
|
+
"postgres": "3.4.9",
|
|
69
71
|
"sharp": "0.34.5",
|
|
70
72
|
"sst": "4.13.1"
|
|
71
73
|
},
|
|
72
74
|
"peerDependenciesMeta": {
|
|
75
|
+
"@aws-sdk/client-cloudfront-keyvaluestore": {
|
|
76
|
+
"optional": true
|
|
77
|
+
},
|
|
78
|
+
"@aws-sdk/signature-v4a": {
|
|
79
|
+
"optional": true
|
|
80
|
+
},
|
|
73
81
|
"sst": {
|
|
74
82
|
"optional": true
|
|
75
83
|
},
|
|
@@ -93,6 +101,8 @@
|
|
|
93
101
|
}
|
|
94
102
|
},
|
|
95
103
|
"devDependencies": {
|
|
104
|
+
"@aws-sdk/client-cloudfront-keyvaluestore": "3.1053.0",
|
|
105
|
+
"@aws-sdk/signature-v4a": "3.1063.0",
|
|
96
106
|
"@everystack/auth": "workspace:*",
|
|
97
107
|
"@everystack/cli": "workspace:*",
|
|
98
108
|
"@types/aws-lambda": "8.10.161",
|
package/src/plugin.ts
CHANGED
|
@@ -34,7 +34,11 @@ export interface PluginContext {
|
|
|
34
34
|
/** Runtime environment */
|
|
35
35
|
environment: string;
|
|
36
36
|
/** Publish a background job */
|
|
37
|
-
publishJob: (type: string, payload: unknown) => Promise<string>;
|
|
37
|
+
publishJob: (type: string, payload: unknown, options?: { schedulable?: boolean; runAt?: Date }) => Promise<string>;
|
|
38
|
+
/** Cancel a scheduled job */
|
|
39
|
+
cancelJob?: (jobId: string) => Promise<void>;
|
|
40
|
+
/** Reschedule a pending job */
|
|
41
|
+
rescheduleJob?: (jobId: string, options: { runAt: Date }) => Promise<void>;
|
|
38
42
|
/** Extensible — apps add whatever their plugins need */
|
|
39
43
|
[key: string]: unknown;
|
|
40
44
|
}
|
package/src/ssr.ts
CHANGED
|
@@ -95,12 +95,11 @@ const HYDRATE_SCRIPT = '<script>globalThis.__EXPO_ROUTER_HYDRATE__=true;</script
|
|
|
95
95
|
* (e.g., JSON-LD injection, status code override from meta tags).
|
|
96
96
|
*
|
|
97
97
|
* @param innerHandler - The expo-server request handler
|
|
98
|
-
* @param bundleKey - Bundle identifier, set as X-Bundle-Key header
|
|
99
98
|
* @param options - SSR processing options
|
|
99
|
+
* @param metadata - Release metadata (createdAt used for X-Server-Debug header)
|
|
100
100
|
*/
|
|
101
101
|
export function wrapSsrHandler(
|
|
102
102
|
innerHandler: (request: Request) => Promise<Response>,
|
|
103
|
-
bundleKey: string,
|
|
104
103
|
options?: Pick<WebHandlerOptions, 'stripQueryParams' | 'injectHydrateFlag' | 'postProcessHtml'>,
|
|
105
104
|
metadata?: ReleaseMetadata,
|
|
106
105
|
): (request: Request) => Promise<Response> {
|
|
@@ -128,12 +127,9 @@ export function wrapSsrHandler(
|
|
|
128
127
|
// Delegate to inner handler
|
|
129
128
|
const response = await innerHandler(cleanRequest);
|
|
130
129
|
|
|
131
|
-
// Set
|
|
130
|
+
// Set debug fingerprint — release timestamp identifies the serving bundle
|
|
132
131
|
const headers = new Headers(response.headers);
|
|
133
|
-
headers.set('X-
|
|
134
|
-
if (metadata?.updateId) headers.set('X-Update-Id', metadata.updateId);
|
|
135
|
-
if (metadata?.runtimeVersion) headers.set('X-Runtime-Version', metadata.runtimeVersion);
|
|
136
|
-
if (metadata?.createdAt) headers.set('X-Release-Created', metadata.createdAt);
|
|
132
|
+
if (metadata?.createdAt) headers.set('X-Server-Debug', metadata.createdAt);
|
|
137
133
|
|
|
138
134
|
// Non-HTML responses pass through untouched
|
|
139
135
|
const ct = headers.get('content-type') || '';
|
|
@@ -286,7 +282,7 @@ export async function getWebHandler(
|
|
|
286
282
|
// If cached and within TTL, return existing handler (no DB/S3 check)
|
|
287
283
|
if (cached && (now - cached.checkedAt) < TTL_MS) {
|
|
288
284
|
const rawHandler = async (req: Request) => cached.run(cached.handler, req);
|
|
289
|
-
return wrapSsrHandler(rawHandler,
|
|
285
|
+
return wrapSsrHandler(rawHandler, options, cached.metadata);
|
|
290
286
|
}
|
|
291
287
|
|
|
292
288
|
// TTL expired or no cache — resolve bundle key and metadata
|
|
@@ -309,7 +305,7 @@ export async function getWebHandler(
|
|
|
309
305
|
if (cached && cached.bundleKey === bundleKey && cached.etag === meta.etag) {
|
|
310
306
|
cached.checkedAt = now;
|
|
311
307
|
const rawHandler = async (req: Request) => cached.run(cached.handler, req);
|
|
312
|
-
return wrapSsrHandler(rawHandler,
|
|
308
|
+
return wrapSsrHandler(rawHandler, options, cached.metadata);
|
|
313
309
|
}
|
|
314
310
|
|
|
315
311
|
// New or updated release — download and extract server bundle archive
|
|
@@ -342,7 +338,7 @@ export async function getWebHandler(
|
|
|
342
338
|
cachedHandlers.set(channel, entry);
|
|
343
339
|
|
|
344
340
|
const rawHandler = async (req: Request) => entry.run(entry.handler, req);
|
|
345
|
-
return wrapSsrHandler(rawHandler,
|
|
341
|
+
return wrapSsrHandler(rawHandler, options, metadata);
|
|
346
342
|
}
|
|
347
343
|
|
|
348
344
|
/**
|