@hozu/runtime-server 0.17.1 → 0.17.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/session.d.ts +19 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +51 -17
- package/dist/session.js.map +1 -1
- package/package.json +6 -6
package/dist/index.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ export { matcher, patternOf } from './routing.ts';
|
|
|
25
25
|
export { parseSearch } from './search.ts';
|
|
26
26
|
export type { CspSources } from './security.ts';
|
|
27
27
|
export type { MemorySessionsOptions, SessionStore } from './session.ts';
|
|
28
|
-
export { memorySessions } from './session.ts';
|
|
28
|
+
export { type KvSessionsOptions, kvSessions, memorySessions, type SessionKV } from './session.ts';
|
|
29
29
|
export type { StaticFile } from './static.ts';
|
|
30
30
|
export { publicAssets, staticFiles } from './static.ts';
|
|
31
31
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACxD,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC5C,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC1E,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpD,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC7F,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACtE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACpF,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,YAAY,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC/C,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACxD,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC5C,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC1E,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpD,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC7F,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACtE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACpF,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,YAAY,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC/C,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACvE,OAAO,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAA;AACjG,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -14,6 +14,6 @@ export { inlineScriptHashes, pathOf, renderPage, renderToString } from './render
|
|
|
14
14
|
export { RenderModuleError } from './rendered.js';
|
|
15
15
|
export { matcher, patternOf } from './routing.js';
|
|
16
16
|
export { parseSearch } from './search.js';
|
|
17
|
-
export { memorySessions } from './session.js';
|
|
17
|
+
export { kvSessions, memorySessions } from './session.js';
|
|
18
18
|
export { publicAssets, staticFiles } from './static.js';
|
|
19
19
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAE1E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAEtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAGzC,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAE1E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAEtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAGzC,OAAO,EAA0B,UAAU,EAAE,cAAc,EAAkB,MAAM,cAAc,CAAA;AAEjG,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/session.d.ts
CHANGED
|
@@ -10,7 +10,25 @@ export interface MemorySessionsOptions {
|
|
|
10
10
|
secure?: boolean;
|
|
11
11
|
now?: () => number;
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
/** The key-value interface `kvSessions` stores sessions in; Cloudflare KV has this shape. */
|
|
14
|
+
export interface SessionKV {
|
|
15
|
+
get(key: string): Promise<string | null>;
|
|
16
|
+
put(key: string, value: string, options: {
|
|
17
|
+
expirationTtl: number;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
delete(key: string): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
export interface KvSessionsOptions extends Omit<MemorySessionsOptions, 'secret' | 'now'> {
|
|
22
|
+
secret: string;
|
|
23
|
+
prefix?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function memorySessions({ name, secret, maxAge, secure, now, }?: MemorySessionsOptions): SessionStore;
|
|
26
|
+
/**
|
|
27
|
+
* Sessions in a shared key-value store, for several instances or an edge runtime (ADR 0059 I): the cookie holds an
|
|
28
|
+
* opaque signed id, the value lives in `kv` under `prefix + id` and is deleted on sign-out, as with memorySessions.
|
|
29
|
+
* Cloudflare KV keeps a value at least 60 seconds, so a shorter `maxAge` ends with the cookie, not the stored value.
|
|
30
|
+
*/
|
|
31
|
+
export declare function kvSessions(kv: SessionKV, { name, secret, maxAge, secure, prefix }: KvSessionsOptions): SessionStore;
|
|
14
32
|
export declare function signedCookie({ name, secret, maxAge, secure, }: {
|
|
15
33
|
name: string;
|
|
16
34
|
secret: string;
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACxC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzD,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACvC;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAuCD,wBAAgB,cAAc,CAAC,EAC7B,IAAY,EACZ,MAAM,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACxC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACzD,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACvC;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAuCD,6FAA6F;AAC7F,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClF,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,qBAAqB,EAAE,QAAQ,GAAG,KAAK,CAAC;IACtF,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AA4DD,wBAAgB,cAAc,CAAC,EAC7B,IAAY,EACZ,MAAM,EACN,MAA0B,EAC1B,MAAa,EACb,GAAc,GACf,GAAE,qBAA0B,GAAG,YAAY,CAM3C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,SAAS,EACb,EAAE,IAAY,EAAE,MAAM,EAAE,MAA0B,EAAE,MAAa,EAAE,MAAmB,EAAE,EAAE,iBAAiB,GAC1G,YAAY,CAQd;AAED,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,MAAM,EACN,MAAM,EACN,MAAa,GACd,EAAE;IACD,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;IAIS,IAAI,UAAU,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IASxC,KAAK,QAAQ,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;EAM/C"}
|
package/dist/session.js
CHANGED
|
@@ -20,42 +20,35 @@ function signer(secret) {
|
|
|
20
20
|
},
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
|
-
|
|
24
|
-
const secret = given ?? random(32);
|
|
23
|
+
function storedSessions(kv, { name, secret, maxAge, secure, prefix }, label) {
|
|
25
24
|
if (secret.length < 32)
|
|
26
|
-
throw new Error(
|
|
25
|
+
throw new Error(`${label} secret must be at least 32 characters`);
|
|
27
26
|
const attributes = `; Path=/; HttpOnly; SameSite=Lax${secure ? '; Secure' : ''}`;
|
|
28
27
|
const { sign, verify } = signer(secret);
|
|
29
|
-
const sessions = new Map();
|
|
30
28
|
const idOf = async (request) => {
|
|
31
29
|
const [id, signature] = cookieValue(request, name)?.split('.') ?? [];
|
|
32
30
|
return id && signature && (await verify(id, signature)) ? id : null;
|
|
33
31
|
};
|
|
34
32
|
const create = async (value) => {
|
|
35
|
-
const at = now();
|
|
36
|
-
if (sessions.size > 1000)
|
|
37
|
-
for (const [k, s] of sessions)
|
|
38
|
-
if (s.expires <= at)
|
|
39
|
-
sessions.delete(k);
|
|
40
33
|
const id = random(18);
|
|
41
|
-
|
|
34
|
+
await kv.put(`${prefix}${id}`, JSON.stringify(value), { expirationTtl: maxAge });
|
|
42
35
|
return `${name}=${id}.${await sign(id)}`;
|
|
43
36
|
};
|
|
44
37
|
return {
|
|
45
38
|
async read(request) {
|
|
46
39
|
const id = await idOf(request);
|
|
47
|
-
const
|
|
48
|
-
|
|
40
|
+
const json = id ? await kv.get(`${prefix}${id}`) : null;
|
|
41
|
+
try {
|
|
42
|
+
return json === null ? null : JSON.parse(json);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
49
45
|
return null;
|
|
50
|
-
|
|
51
|
-
return JSON.parse(s.json);
|
|
52
|
-
sessions.delete(id);
|
|
53
|
-
return null;
|
|
46
|
+
}
|
|
54
47
|
},
|
|
55
48
|
async write(value, request) {
|
|
56
49
|
const old = request ? await idOf(request) : null;
|
|
57
50
|
if (old)
|
|
58
|
-
|
|
51
|
+
await kv.delete(`${prefix}${old}`);
|
|
59
52
|
if (value === null)
|
|
60
53
|
return `${name}=${attributes}; Max-Age=0`;
|
|
61
54
|
return `${await create(value)}${attributes}; Max-Age=${maxAge}`;
|
|
@@ -63,6 +56,47 @@ export function memorySessions({ name = 'sid', secret: given, maxAge = 60 * 60 *
|
|
|
63
56
|
issue: create,
|
|
64
57
|
};
|
|
65
58
|
}
|
|
59
|
+
function memoryKV(now) {
|
|
60
|
+
const sessions = new Map();
|
|
61
|
+
return {
|
|
62
|
+
async get(key) {
|
|
63
|
+
const s = sessions.get(key);
|
|
64
|
+
if (!s)
|
|
65
|
+
return null;
|
|
66
|
+
if (s.expires > now())
|
|
67
|
+
return s.json;
|
|
68
|
+
sessions.delete(key);
|
|
69
|
+
return null;
|
|
70
|
+
},
|
|
71
|
+
async put(key, json, { expirationTtl }) {
|
|
72
|
+
const at = now();
|
|
73
|
+
if (sessions.size > 1000)
|
|
74
|
+
for (const [k, s] of sessions)
|
|
75
|
+
if (s.expires <= at)
|
|
76
|
+
sessions.delete(k);
|
|
77
|
+
sessions.set(key, { json, expires: at + expirationTtl * 1000 });
|
|
78
|
+
},
|
|
79
|
+
async delete(key) {
|
|
80
|
+
sessions.delete(key);
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export function memorySessions({ name = 'sid', secret, maxAge = 60 * 60 * 24 * 30, secure = true, now = Date.now, } = {}) {
|
|
85
|
+
return storedSessions(memoryKV(now), { name, secret: secret ?? random(32), maxAge, secure, prefix: '' }, 'memorySessions');
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Sessions in a shared key-value store, for several instances or an edge runtime (ADR 0059 I): the cookie holds an
|
|
89
|
+
* opaque signed id, the value lives in `kv` under `prefix + id` and is deleted on sign-out, as with memorySessions.
|
|
90
|
+
* Cloudflare KV keeps a value at least 60 seconds, so a shorter `maxAge` ends with the cookie, not the stored value.
|
|
91
|
+
*/
|
|
92
|
+
export function kvSessions(kv, { name = 'sid', secret, maxAge = 60 * 60 * 24 * 30, secure = true, prefix = 'session:' }) {
|
|
93
|
+
const store = {
|
|
94
|
+
get: (key) => kv.get(key),
|
|
95
|
+
put: (key, value, { expirationTtl }) => kv.put(key, value, { expirationTtl: Math.max(60, expirationTtl) }),
|
|
96
|
+
delete: (key) => kv.delete(key),
|
|
97
|
+
};
|
|
98
|
+
return storedSessions(store, { name, secret, maxAge, secure, prefix }, 'kvSessions');
|
|
99
|
+
}
|
|
66
100
|
export function signedCookie({ name, secret, maxAge, secure = true, }) {
|
|
67
101
|
const attributes = `; Path=/; HttpOnly; SameSite=Lax${secure ? '; Secure' : ''}`;
|
|
68
102
|
const { sign, verify } = signer(secret);
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;AAEjC,MAAM,SAAS,GAAG,CAAC,KAAiB,EAAE,EAAE,CACtC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC;KAChC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;KACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;KACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AAEvB,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE,CACrC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AAE3F,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAE1F,MAAM,WAAW,GAAG,CAAC,OAAgB,EAAE,IAAY,EAAE,EAAE,CACrD,IAAI,MAAM,CAAC,cAAc,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAEzF,SAAS,MAAM,CAAC,MAAc;IAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CACjC,KAAK,EACL,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EACtB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EACjC,KAAK,EACL,CAAC,MAAM,EAAE,QAAQ,CAAC,CACnB,CAAA;IACD,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE,CAC3B,SAAS,CAAC,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9F,MAAM,EAAE,KAAK,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAE;YAChD,IAAI,CAAC;gBACH,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,aAAa,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;YACtG,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;AAEjC,MAAM,SAAS,GAAG,CAAC,KAAiB,EAAE,EAAE,CACtC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC;KAChC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;KACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;KACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AAEvB,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE,CACrC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AAE3F,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAE1F,MAAM,WAAW,GAAG,CAAC,OAAgB,EAAE,IAAY,EAAE,EAAE,CACrD,IAAI,MAAM,CAAC,cAAc,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAEzF,SAAS,MAAM,CAAC,MAAc;IAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CACjC,KAAK,EACL,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EACtB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EACjC,KAAK,EACL,CAAC,MAAM,EAAE,QAAQ,CAAC,CACnB,CAAA;IACD,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE,CAC3B,SAAS,CAAC,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9F,MAAM,EAAE,KAAK,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAE;YAChD,IAAI,CAAC;gBACH,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,aAAa,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;YACtG,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAcD,SAAS,cAAc,CACrB,EAAa,EACb,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAA+B,EACrE,KAAa;IAEb,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,wCAAwC,CAAC,CAAA;IACzF,MAAM,UAAU,GAAG,mCAAmC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;IAChF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IACvC,MAAM,IAAI,GAAG,KAAK,EAAE,OAAgB,EAAE,EAAE;QACtC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QACpE,OAAO,EAAE,IAAI,SAAS,IAAI,CAAC,MAAM,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IACrE,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,KAAK,EAAE,KAAc,EAAE,EAAE;QACtC,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;QACrB,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAA;QAChF,OAAO,GAAG,IAAI,IAAI,EAAE,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC,EAAE,CAAA;IAC1C,CAAC,CAAA;IACD,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,OAAO;YAChB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAA;YAC9B,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YACvD,IAAI,CAAC;gBACH,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAChD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO;YACxB,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YAChD,IAAI,GAAG;gBAAE,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,GAAG,EAAE,CAAC,CAAA;YAC3C,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,GAAG,IAAI,IAAI,UAAU,aAAa,CAAA;YAC7D,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,aAAa,MAAM,EAAE,CAAA;QACjE,CAAC;QACD,KAAK,EAAE,MAAM;KACd,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,GAAiB;IACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6C,CAAA;IACrE,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,GAAG;YACX,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC3B,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAA;YACnB,IAAI,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE;gBAAE,OAAO,CAAC,CAAC,IAAI,CAAA;YACpC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACpB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE;YACpC,MAAM,EAAE,GAAG,GAAG,EAAE,CAAA;YAChB,IAAI,QAAQ,CAAC,IAAI,GAAG,IAAI;gBAAE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ;oBAAE,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE;wBAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YAChG,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,aAAa,GAAG,IAAI,EAAE,CAAC,CAAA;QACjE,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,GAAG;YACd,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAC7B,IAAI,GAAG,KAAK,EACZ,MAAM,EACN,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAC1B,MAAM,GAAG,IAAI,EACb,GAAG,GAAG,IAAI,CAAC,GAAG,GACf,GAA0B,EAAE;IAC3B,OAAO,cAAc,CACnB,QAAQ,CAAC,GAAG,CAAC,EACb,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAClE,gBAAgB,CACjB,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,EAAa,EACb,EAAE,IAAI,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,GAAG,UAAU,EAAqB;IAE3G,MAAM,KAAK,GAAc;QACvB,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;QACzB,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CACrC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,EAAE,CAAC;QACpE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;KAChC,CAAA;IACD,OAAO,cAAc,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,CAAA;AACtF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAC3B,IAAI,EACJ,MAAM,EACN,MAAM,EACN,MAAM,GAAG,IAAI,GAMd;IACC,MAAM,UAAU,GAAG,mCAAmC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;IAChF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IACvC,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,OAAgB;YACzB,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;YACzE,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAA;YAC9E,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YACrE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,KAAc;YACxB,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,GAAG,IAAI,IAAI,UAAU,aAAa,CAAA;YAC7D,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAChE,OAAO,GAAG,IAAI,IAAI,OAAO,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,UAAU,aAAa,MAAM,EAAE,CAAA;QACpF,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hozu/runtime-server",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.2",
|
|
4
4
|
"description": "Hozu server runtime: generated render functions, in-order streaming SSR and a web-standard handler",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"hozu",
|
|
@@ -40,11 +40,11 @@
|
|
|
40
40
|
"access": "public"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@hozu/compiler": "0.17.
|
|
44
|
-
"@hozu/core": "0.17.
|
|
45
|
-
"@hozu/
|
|
46
|
-
"@hozu/
|
|
47
|
-
"@hozu/
|
|
43
|
+
"@hozu/compiler": "0.17.2",
|
|
44
|
+
"@hozu/core": "0.17.2",
|
|
45
|
+
"@hozu/machine": "0.17.2",
|
|
46
|
+
"@hozu/runtime-client": "0.17.2",
|
|
47
|
+
"@hozu/data": "0.17.2"
|
|
48
48
|
},
|
|
49
49
|
"sideEffects": false
|
|
50
50
|
}
|