@ketvietlab/ketjs 0.1.2 → 0.1.5
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/LICENSE +1 -1
- package/README.md +8 -2
- package/dist/agent/capabilities.d.ts +1 -3
- package/dist/agent/capabilities.d.ts.map +1 -1
- package/dist/agent/capabilities.js +10 -1
- package/dist/agent/capabilities.js.map +1 -1
- package/dist/agent/permissions.d.ts +43 -1
- package/dist/agent/permissions.d.ts.map +1 -1
- package/dist/agent/permissions.js +50 -2
- package/dist/agent/permissions.js.map +1 -1
- package/dist/cli.js +246 -97
- package/dist/cli.js.map +1 -1
- package/dist/codegen/dts.d.ts.map +1 -1
- package/dist/codegen/dts.js +1 -0
- package/dist/codegen/dts.js.map +1 -1
- package/dist/data/changeset.d.ts +12 -0
- package/dist/data/changeset.d.ts.map +1 -1
- package/dist/data/changeset.js +73 -17
- package/dist/data/changeset.js.map +1 -1
- package/dist/data/expr.d.ts +25 -1
- package/dist/data/expr.d.ts.map +1 -1
- package/dist/data/expr.js +47 -6
- package/dist/data/expr.js.map +1 -1
- package/dist/data/fleet.d.ts +41 -1
- package/dist/data/fleet.d.ts.map +1 -1
- package/dist/data/fleet.js +100 -11
- package/dist/data/fleet.js.map +1 -1
- package/dist/data/migrate.d.ts +20 -0
- package/dist/data/migrate.d.ts.map +1 -1
- package/dist/data/migrate.js +86 -3
- package/dist/data/migrate.js.map +1 -1
- package/dist/data/physical.d.ts +5 -0
- package/dist/data/physical.d.ts.map +1 -0
- package/dist/data/physical.js +196 -0
- package/dist/data/physical.js.map +1 -0
- package/dist/data/pool.d.ts +2 -1
- package/dist/data/pool.d.ts.map +1 -1
- package/dist/data/pool.js +159 -31
- package/dist/data/pool.js.map +1 -1
- package/dist/data/query.d.ts +10 -1
- package/dist/data/query.d.ts.map +1 -1
- package/dist/data/query.js +136 -27
- package/dist/data/query.js.map +1 -1
- package/dist/data/sqlite.d.ts.map +1 -1
- package/dist/data/sqlite.js +350 -52
- package/dist/data/sqlite.js.map +1 -1
- package/dist/data/time.d.ts +13 -0
- package/dist/data/time.d.ts.map +1 -1
- package/dist/data/time.js +61 -17
- package/dist/data/time.js.map +1 -1
- package/dist/index.d.ts +45 -24
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -18
- package/dist/index.js.map +1 -1
- package/dist/kernel/audit.d.ts +27 -0
- package/dist/kernel/audit.d.ts.map +1 -0
- package/dist/kernel/audit.js +67 -0
- package/dist/kernel/audit.js.map +1 -0
- package/dist/kernel/classification.d.ts +26 -0
- package/dist/kernel/classification.d.ts.map +1 -0
- package/dist/kernel/classification.js +73 -0
- package/dist/kernel/classification.js.map +1 -0
- package/dist/kernel/compose.d.ts +6 -2
- package/dist/kernel/compose.d.ts.map +1 -1
- package/dist/kernel/compose.js +269 -15
- package/dist/kernel/compose.js.map +1 -1
- package/dist/kernel/define.d.ts +2 -3
- package/dist/kernel/define.d.ts.map +1 -1
- package/dist/kernel/define.js +22 -12
- package/dist/kernel/define.js.map +1 -1
- package/dist/kernel/diff.d.ts.map +1 -1
- package/dist/kernel/diff.js +28 -4
- package/dist/kernel/diff.js.map +1 -1
- package/dist/kernel/graph.js +1 -1
- package/dist/kernel/graph.js.map +1 -1
- package/dist/kernel/i18n.d.ts +10 -1
- package/dist/kernel/i18n.d.ts.map +1 -1
- package/dist/kernel/i18n.js +34 -1
- package/dist/kernel/i18n.js.map +1 -1
- package/dist/kernel/layout.d.ts +97 -0
- package/dist/kernel/layout.d.ts.map +1 -1
- package/dist/kernel/layout.js +294 -12
- package/dist/kernel/layout.js.map +1 -1
- package/dist/kernel/menu.d.ts +33 -2
- package/dist/kernel/menu.d.ts.map +1 -1
- package/dist/kernel/menu.js +99 -7
- package/dist/kernel/menu.js.map +1 -1
- package/dist/kernel/modules.d.ts +3 -3
- package/dist/kernel/modules.d.ts.map +1 -1
- package/dist/kernel/modules.js +21 -21
- package/dist/kernel/modules.js.map +1 -1
- package/dist/kernel/permissions.d.ts +10 -0
- package/dist/kernel/permissions.d.ts.map +1 -0
- package/dist/kernel/permissions.js +365 -0
- package/dist/kernel/permissions.js.map +1 -0
- package/dist/kernel/schedule.d.ts +23 -0
- package/dist/kernel/schedule.d.ts.map +1 -0
- package/dist/kernel/schedule.js +83 -0
- package/dist/kernel/schedule.js.map +1 -0
- package/dist/kernel/types.d.ts.map +1 -1
- package/dist/kernel/types.js +5 -4
- package/dist/kernel/types.js.map +1 -1
- package/dist/kernel/workspace.d.ts +92 -14
- package/dist/kernel/workspace.d.ts.map +1 -1
- package/dist/kernel/workspace.js +128 -49
- package/dist/kernel/workspace.js.map +1 -1
- package/dist/pdf/assets/Inter-Bold.ttf +0 -0
- package/dist/pdf/assets/Inter-Regular.ttf +0 -0
- package/dist/pdf/assets/Inter-SemiBold.ttf +0 -0
- package/dist/pdf/assets/LICENSE.txt +92 -0
- package/dist/pdf/font.d.ts +10 -0
- package/dist/pdf/font.d.ts.map +1 -0
- package/dist/pdf/font.js +83 -0
- package/dist/pdf/font.js.map +1 -0
- package/dist/pdf/image.d.ts +8 -0
- package/dist/pdf/image.d.ts.map +1 -0
- package/dist/pdf/image.js +94 -0
- package/dist/pdf/image.js.map +1 -0
- package/dist/pdf/index.d.ts +15 -0
- package/dist/pdf/index.d.ts.map +1 -0
- package/dist/pdf/index.js +17 -0
- package/dist/pdf/index.js.map +1 -0
- package/dist/pdf/markup.d.ts +19 -0
- package/dist/pdf/markup.d.ts.map +1 -0
- package/dist/pdf/markup.js +146 -0
- package/dist/pdf/markup.js.map +1 -0
- package/dist/pdf/render.d.ts +14 -0
- package/dist/pdf/render.d.ts.map +1 -0
- package/dist/pdf/render.js +387 -0
- package/dist/pdf/render.js.map +1 -0
- package/dist/scaffold/index.js +6 -6
- package/dist/scaffold/index.js.map +1 -1
- package/dist/scaffold/templates/{app.test.ts.tmpl → deployment.test.ts.tmpl} +3 -3
- package/dist/scaffold/templates/ket.workspace.ts.tmpl +4 -6
- package/dist/scaffold/templates/module.ts.tmpl +1 -4
- package/dist/server/assets.d.ts +23 -0
- package/dist/server/assets.d.ts.map +1 -0
- package/dist/server/assets.js +97 -0
- package/dist/server/assets.js.map +1 -0
- package/dist/server/boot.d.ts +174 -38
- package/dist/server/boot.d.ts.map +1 -1
- package/dist/server/boot.js +399 -140
- package/dist/server/boot.js.map +1 -1
- package/dist/server/config.d.ts +30 -10
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +73 -17
- package/dist/server/config.js.map +1 -1
- package/dist/server/ctx.d.ts +10 -0
- package/dist/server/ctx.d.ts.map +1 -1
- package/dist/server/ctx.js +284 -48
- package/dist/server/ctx.js.map +1 -1
- package/dist/server/development.d.ts +10 -0
- package/dist/server/development.d.ts.map +1 -0
- package/dist/server/development.js +15 -0
- package/dist/server/development.js.map +1 -0
- package/dist/server/fn.d.ts +22 -3
- package/dist/server/fn.d.ts.map +1 -1
- package/dist/server/fn.js +116 -32
- package/dist/server/fn.js.map +1 -1
- package/dist/server/form.d.ts +33 -0
- package/dist/server/form.d.ts.map +1 -0
- package/dist/server/form.js +47 -0
- package/dist/server/form.js.map +1 -0
- package/dist/server/http.d.ts +82 -3
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +373 -37
- package/dist/server/http.js.map +1 -1
- package/dist/server/idem.d.ts +3 -2
- package/dist/server/idem.d.ts.map +1 -1
- package/dist/server/idem.js +12 -4
- package/dist/server/idem.js.map +1 -1
- package/dist/server/jobs.js +1 -1
- package/dist/server/jobs.js.map +1 -1
- package/dist/server/log/combinators.d.ts +42 -0
- package/dist/server/log/combinators.d.ts.map +1 -0
- package/dist/server/log/combinators.js +270 -0
- package/dist/server/log/combinators.js.map +1 -0
- package/dist/server/log/console.d.ts +12 -0
- package/dist/server/log/console.d.ts.map +1 -0
- package/dist/server/log/console.js +96 -0
- package/dist/server/log/console.js.map +1 -0
- package/dist/server/log/file.d.ts +11 -0
- package/dist/server/log/file.d.ts.map +1 -0
- package/dist/server/log/file.js +61 -0
- package/dist/server/log/file.js.map +1 -0
- package/dist/server/log/index.d.ts +23 -0
- package/dist/server/log/index.d.ts.map +1 -0
- package/dist/server/log/index.js +45 -0
- package/dist/server/log/index.js.map +1 -0
- package/dist/server/log/logger.d.ts +53 -0
- package/dist/server/log/logger.d.ts.map +1 -0
- package/dist/server/log/logger.js +94 -0
- package/dist/server/log/logger.js.map +1 -0
- package/dist/server/log/memory.d.ts +11 -0
- package/dist/server/log/memory.d.ts.map +1 -0
- package/dist/server/log/memory.js +25 -0
- package/dist/server/log/memory.js.map +1 -0
- package/dist/server/log/types.d.ts +112 -0
- package/dist/server/log/types.d.ts.map +1 -0
- package/dist/server/log/types.js +58 -0
- package/dist/server/log/types.js.map +1 -0
- package/dist/server/policy.d.ts +29 -0
- package/dist/server/policy.d.ts.map +1 -0
- package/dist/server/policy.js +29 -0
- package/dist/server/policy.js.map +1 -0
- package/dist/server/queue.d.ts +1 -1
- package/dist/server/queue.d.ts.map +1 -1
- package/dist/server/queue.js.map +1 -1
- package/dist/server/ratelimit.d.ts +48 -0
- package/dist/server/ratelimit.d.ts.map +1 -0
- package/dist/server/ratelimit.js +102 -0
- package/dist/server/ratelimit.js.map +1 -0
- package/dist/server/respond.d.ts.map +1 -1
- package/dist/server/respond.js +16 -1
- package/dist/server/respond.js.map +1 -1
- package/dist/server/runtime.d.ts +18 -3
- package/dist/server/runtime.d.ts.map +1 -1
- package/dist/server/runtime.js +32 -2
- package/dist/server/runtime.js.map +1 -1
- package/dist/server/schedule.d.ts +18 -0
- package/dist/server/schedule.d.ts.map +1 -0
- package/dist/server/schedule.js +70 -0
- package/dist/server/schedule.js.map +1 -0
- package/dist/server/sequence.d.ts +42 -0
- package/dist/server/sequence.d.ts.map +1 -0
- package/dist/server/sequence.js +97 -0
- package/dist/server/sequence.js.map +1 -0
- package/dist/server/session.d.ts +21 -0
- package/dist/server/session.d.ts.map +1 -1
- package/dist/server/session.js +84 -10
- package/dist/server/session.js.map +1 -1
- package/dist/server/sessionstore.d.ts +3 -1
- package/dist/server/sessionstore.d.ts.map +1 -1
- package/dist/server/sessionstore.js +7 -3
- package/dist/server/sessionstore.js.map +1 -1
- package/dist/server/storage/index.d.ts +1 -1
- package/dist/server/storage/index.d.ts.map +1 -1
- package/dist/server/storage/index.js +61 -1
- package/dist/server/storage/index.js.map +1 -1
- package/dist/server/storage/types.d.ts +8 -0
- package/dist/server/storage/types.d.ts.map +1 -1
- package/dist/server/storage/types.js +58 -0
- package/dist/server/storage/types.js.map +1 -1
- package/dist/server/stream.d.ts +8 -2
- package/dist/server/stream.d.ts.map +1 -1
- package/dist/server/stream.js +44 -4
- package/dist/server/stream.js.map +1 -1
- package/dist/server/streamstore.d.ts +10 -0
- package/dist/server/streamstore.d.ts.map +1 -1
- package/dist/server/streamstore.js +72 -6
- package/dist/server/streamstore.js.map +1 -1
- package/dist/server/tenants.d.ts +20 -18
- package/dist/server/tenants.d.ts.map +1 -1
- package/dist/server/tenants.js +133 -84
- package/dist/server/tenants.js.map +1 -1
- package/dist/server/transport/types.js +2 -2
- package/dist/server/transport/types.js.map +1 -1
- package/dist/server/worker.d.ts +19 -3
- package/dist/server/worker.d.ts.map +1 -1
- package/dist/server/worker.js +168 -21
- package/dist/server/worker.js.map +1 -1
- package/dist/testing.d.ts +26 -10
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +41 -14
- package/dist/testing.js.map +1 -1
- package/dist/theme/contracts.d.ts +14 -1
- package/dist/theme/contracts.d.ts.map +1 -1
- package/dist/theme/contracts.js +35 -6
- package/dist/theme/contracts.js.map +1 -1
- package/dist/theme/index.d.ts +1 -1
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +1 -1
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/joint-runtime.d.ts +33 -0
- package/dist/theme/joint-runtime.d.ts.map +1 -0
- package/dist/theme/joint-runtime.js +121 -0
- package/dist/theme/joint-runtime.js.map +1 -0
- package/dist/theme/joints.d.ts.map +1 -1
- package/dist/theme/joints.js +15 -97
- package/dist/theme/joints.js.map +1 -1
- package/dist/theme/ktl/compile.d.ts +4 -0
- package/dist/theme/ktl/compile.d.ts.map +1 -1
- package/dist/theme/ktl/compile.js +54 -1
- package/dist/theme/ktl/compile.js.map +1 -1
- package/dist/theme/ktl/parser.d.ts +4 -0
- package/dist/theme/ktl/parser.d.ts.map +1 -1
- package/dist/theme/ktl/parser.js +8 -0
- package/dist/theme/ktl/parser.js.map +1 -1
- package/dist/theme/render.d.ts +8 -0
- package/dist/theme/render.d.ts.map +1 -1
- package/dist/theme/render.js +88 -118
- package/dist/theme/render.js.map +1 -1
- package/dist/theme/tokens.d.ts +18 -0
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +33 -0
- package/dist/theme/tokens.js.map +1 -1
- package/dist/theme/viewmodel.d.ts +24 -0
- package/dist/theme/viewmodel.d.ts.map +1 -1
- package/dist/theme/viewmodel.js +75 -6
- package/dist/theme/viewmodel.js.map +1 -1
- package/dist/types.d.ts +320 -56
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -2
- package/dist/kernel/apps.d.ts +0 -43
- package/dist/kernel/apps.d.ts.map +0 -1
- package/dist/kernel/apps.js +0 -234
- package/dist/kernel/apps.js.map +0 -1
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
// Document numbers.
|
|
2
|
+
//
|
|
3
|
+
// Every ERP needs them and every module was writing its own: a counter row, a
|
|
4
|
+
// read, a compare-and-set, a retry loop. Written twice already, correctly both
|
|
5
|
+
// times but not identically — one of the two retries thirty-two times with no
|
|
6
|
+
// backoff, which spins hottest exactly when the counter is contended. That is the
|
|
7
|
+
// shape of a primitive that should exist once.
|
|
8
|
+
//
|
|
9
|
+
// The framework returns a number and never a string. How a number becomes
|
|
10
|
+
// "S00001" or "POS/00042" is the domain's, and a framework that decided it would
|
|
11
|
+
// be deciding an invoice format for a tax authority it has never heard of.
|
|
12
|
+
import { KetError } from '../kernel/errors.js';
|
|
13
|
+
const DDL = `
|
|
14
|
+
CREATE TABLE IF NOT EXISTS ket_sequence (
|
|
15
|
+
id TEXT PRIMARY KEY,
|
|
16
|
+
next INTEGER NOT NULL
|
|
17
|
+
)`;
|
|
18
|
+
const prepared = new WeakSet();
|
|
19
|
+
async function prepare(adapter) {
|
|
20
|
+
if (prepared.has(adapter))
|
|
21
|
+
return;
|
|
22
|
+
await adapter.run(DDL, []);
|
|
23
|
+
prepared.add(adapter);
|
|
24
|
+
}
|
|
25
|
+
const NAME = /^[a-z][a-z0-9_]*(?:\.[a-z][a-z0-9_]*)*$/;
|
|
26
|
+
export const sequenceKey = (name, scope, shared) => shared ? `-\n${name}` : `${scope.company ?? '-'}\n${name}`;
|
|
27
|
+
/**
|
|
28
|
+
* Take the next number in a named sequence.
|
|
29
|
+
*
|
|
30
|
+
* The read and the compare-and-set are retried with jittered backoff, because
|
|
31
|
+
* every document of one kind funnels through one row: a bulk import is a stampede
|
|
32
|
+
* by design, and losing the race there is normal rather than exceptional. What must
|
|
33
|
+
* not happen is giving up while the row is live, which would turn a perfectly good
|
|
34
|
+
* order into a spurious failure.
|
|
35
|
+
*
|
|
36
|
+
* Whether the numbers are gapless is decided by the caller, not here. Taken inside
|
|
37
|
+
* the transaction that writes the document, a rollback takes the number back with
|
|
38
|
+
* it. Taken outside, a later failure leaves a gap, and no counter can know that
|
|
39
|
+
* happened.
|
|
40
|
+
*/
|
|
41
|
+
export async function nextSequenceNumber(adapter, name, o) {
|
|
42
|
+
if (!NAME.test(name)) {
|
|
43
|
+
throw new KetError({
|
|
44
|
+
code: 'E_SEQUENCE_NAME',
|
|
45
|
+
message: `"${name}" is not a sequence name`,
|
|
46
|
+
hint: 'use a qualified lowercase identifier, for example "sale.order"',
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
const start = Math.max(1, Math.floor(o.start ?? 1));
|
|
50
|
+
const id = sequenceKey(name, o.scope, o.shared === true);
|
|
51
|
+
await prepare(adapter);
|
|
52
|
+
const pg = adapter.name === 'postgres';
|
|
53
|
+
const p = (n) => (pg ? `$${n}` : '?');
|
|
54
|
+
const random = o.random ?? Math.random;
|
|
55
|
+
const read = async () => {
|
|
56
|
+
const rows = await adapter.all(`SELECT next FROM ket_sequence WHERE id = ${p(1)}`, [id]);
|
|
57
|
+
return rows[0] === undefined ? null : Number(rows[0].next);
|
|
58
|
+
};
|
|
59
|
+
// A preview must not consume a number: the real command that follows would then
|
|
60
|
+
// skip one, and the caller would have been shown a number nobody ever used.
|
|
61
|
+
if (o.dryRun)
|
|
62
|
+
return (await read()) ?? start;
|
|
63
|
+
for (let attempt = 0; attempt < 64; attempt += 1) {
|
|
64
|
+
const current = await read();
|
|
65
|
+
if (current === null) {
|
|
66
|
+
const inserted = await adapter.run(`INSERT INTO ket_sequence (id, next) VALUES (${p(1)}, ${p(2)}) ON CONFLICT DO NOTHING`, [id, start + 1]);
|
|
67
|
+
if (inserted.changes > 0)
|
|
68
|
+
return start;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const moved = await adapter.run(`UPDATE ket_sequence SET next = ${p(1)} WHERE id = ${p(2)} AND next = ${p(3)}`, [current + 1, id, current]);
|
|
72
|
+
if (moved.changes > 0)
|
|
73
|
+
return current;
|
|
74
|
+
// Spread the herd instead of letting it collide again at full speed.
|
|
75
|
+
if (attempt >= 2) {
|
|
76
|
+
const ceiling = Math.min(100, 2 ** (attempt - 2));
|
|
77
|
+
await new Promise((resolve) => setTimeout(resolve, ceiling * (0.5 + random())));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
throw new KetError({
|
|
81
|
+
code: 'E_SEQUENCE_CONTENDED',
|
|
82
|
+
message: `sequence "${name}" did not settle after 64 concurrent updates`,
|
|
83
|
+
hint: 'one row is carrying more concurrent allocation than it can; split the sequence',
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/** What a sequence stands at, without taking a number. */
|
|
87
|
+
export async function peekSequenceNumber(adapter, name, o) {
|
|
88
|
+
await prepare(adapter);
|
|
89
|
+
const pg = adapter.name === 'postgres';
|
|
90
|
+
const rows = await adapter.all(`SELECT next FROM ket_sequence WHERE id = ${pg ? '$1' : '?'}`, [
|
|
91
|
+
sequenceKey(name, o.scope, o.shared === true),
|
|
92
|
+
]);
|
|
93
|
+
return rows[0] === undefined
|
|
94
|
+
? Math.max(1, Math.floor(o.start ?? 1))
|
|
95
|
+
: Number(rows[0].next);
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=sequence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sequence.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/server/sequence.ts"],"names":[],"mappings":"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"}
|
package/dist/server/session.d.ts
CHANGED
|
@@ -4,12 +4,16 @@ import type { IncomingMessage } from 'node:http';
|
|
|
4
4
|
export declare const SESSION_COOKIE = "ket_session";
|
|
5
5
|
export type SessionOptions = {
|
|
6
6
|
store?: SessionStore;
|
|
7
|
+
/** Bind records to one tenant when several tenants share the same store. */
|
|
8
|
+
tenant?: string;
|
|
7
9
|
/**
|
|
8
10
|
* Signing key. It MUST be the same on every pod: a cookie signed by one and
|
|
9
11
|
* rejected by another is a login that works only until the load balancer sends
|
|
10
12
|
* you elsewhere. Absent, one is generated and the fact is said out loud.
|
|
11
13
|
*/
|
|
12
14
|
secret?: string;
|
|
15
|
+
/** The supplied secret was generated for this process and must still be reported as ephemeral. */
|
|
16
|
+
ephemeralSecret?: boolean;
|
|
13
17
|
/** How long an idle session lives. Refreshed while it is being used. */
|
|
14
18
|
idleTtlMs?: number;
|
|
15
19
|
/** How long any session may live, however active. Not refreshable. */
|
|
@@ -24,6 +28,8 @@ export type SessionOptions = {
|
|
|
24
28
|
export declare function parseCookies(header: string | undefined): Record<string, string>;
|
|
25
29
|
export type Sessions = {
|
|
26
30
|
readonly store: SessionStore;
|
|
31
|
+
/** Present when records in this session manager are bound to one tenant. */
|
|
32
|
+
readonly tenant?: string;
|
|
27
33
|
/** True when the secret was generated rather than configured — see the banner. */
|
|
28
34
|
readonly ephemeralSecret: boolean;
|
|
29
35
|
start(o: {
|
|
@@ -49,6 +55,21 @@ export type Sessions = {
|
|
|
49
55
|
scopeOf(record: SessionRecord | null): Scope | null;
|
|
50
56
|
sweep(): Promise<number>;
|
|
51
57
|
};
|
|
58
|
+
export type SessionScopePolicy = {
|
|
59
|
+
/** Reject a record issued for a different tenant when session storage is shared. */
|
|
60
|
+
tenant?: string;
|
|
61
|
+
/** Scope used when there is no accepted session record. */
|
|
62
|
+
anonymous?: Scope | null;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Turn session data into a detached request scope.
|
|
66
|
+
*
|
|
67
|
+
* This stays adapter-free so a pooled tenant facade can keep the policy while the
|
|
68
|
+
* manager and its adapter are evicted. Arrays are copied on both paths: callers
|
|
69
|
+
* may narrow a request scope without mutating the stored record or deployment's
|
|
70
|
+
* anonymous policy.
|
|
71
|
+
*/
|
|
72
|
+
export declare function scopeForSession(record: SessionRecord | null, policy?: SessionScopePolicy): Scope | null;
|
|
52
73
|
export declare function createSessions(o?: SessionOptions): Promise<Sessions>;
|
|
53
74
|
export { memorySessionStore, dbSessionStore } from './sessionstore.ts';
|
|
54
75
|
export type { SessionContext, SessionStore, SessionRecord } from './sessionstore.ts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/server/session.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACpF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAEhD,eAAO,MAAM,cAAc,gBAAgB,CAAA;AAE3C,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kFAAkF;IAClF,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,sFAAsF;IACtF,SAAS,CAAC,EAAE,KAAK,GAAG,IAAI,CAAA;IACxB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB,CAAA;AAoBD,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ/E;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;IAC5B,kFAAkF;IAClF,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IACjC,KAAK,CAAC,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE,MAAM,EAAE,CAAA;QACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAA;KACzB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtD,qEAAqE;IACrE,EAAE,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IACvD,GAAG,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9D,sEAAsE;IACtE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IACrF,0CAA0C;IAC1C,WAAW,IAAI,MAAM,CAAA;IACrB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAA;IACnD,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;CACzB,CAAA;AAED,wBAAsB,cAAc,CAAC,CAAC,GAAE,cAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/server/session.ts"],"names":[],"mappings":"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"}
|
package/dist/server/session.js
CHANGED
|
@@ -35,11 +35,87 @@ export function parseCookies(header) {
|
|
|
35
35
|
}
|
|
36
36
|
return out;
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Turn session data into a detached request scope.
|
|
40
|
+
*
|
|
41
|
+
* This stays adapter-free so a pooled tenant facade can keep the policy while the
|
|
42
|
+
* manager and its adapter are evicted. Arrays are copied on both paths: callers
|
|
43
|
+
* may narrow a request scope without mutating the stored record or deployment's
|
|
44
|
+
* anonymous policy.
|
|
45
|
+
*/
|
|
46
|
+
export function scopeForSession(record, policy = {}) {
|
|
47
|
+
const accepted = record !== null && (policy.tenant === undefined || (record.tenant ?? null) === policy.tenant);
|
|
48
|
+
const scope = accepted
|
|
49
|
+
? {
|
|
50
|
+
company: record.company,
|
|
51
|
+
companies: record.companies,
|
|
52
|
+
branch: record.branch,
|
|
53
|
+
branches: record.branches,
|
|
54
|
+
}
|
|
55
|
+
: (policy.anonymous ?? null);
|
|
56
|
+
if (!scope)
|
|
57
|
+
return null;
|
|
58
|
+
return {
|
|
59
|
+
company: scope.company,
|
|
60
|
+
...(scope.companies === undefined
|
|
61
|
+
? {}
|
|
62
|
+
: { companies: scope.companies === null ? null : [...scope.companies] }),
|
|
63
|
+
...(scope.branch === undefined ? {} : { branch: scope.branch }),
|
|
64
|
+
...(scope.branches === undefined
|
|
65
|
+
? {}
|
|
66
|
+
: { branches: scope.branches === null ? null : [...scope.branches] }),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
38
69
|
export async function createSessions(o = {}) {
|
|
39
70
|
const now = o.now ?? (() => Date.now());
|
|
40
|
-
const
|
|
71
|
+
const backingStore = o.store ?? memorySessionStore({ now });
|
|
72
|
+
const belongs = (record) => record !== null && (record.tenant ?? null) === o.tenant;
|
|
73
|
+
// A shared store is still exposed through Sessions.store for administrative
|
|
74
|
+
// flows. Scope the store itself, not only cookie reads, so logout/reconciliation
|
|
75
|
+
// in one tenant cannot revoke or mutate another tenant's record.
|
|
76
|
+
const store = o.tenant === undefined
|
|
77
|
+
? backingStore
|
|
78
|
+
: {
|
|
79
|
+
name: backingStore.name,
|
|
80
|
+
init: () => backingStore.init(),
|
|
81
|
+
create: (record) => backingStore.create({ ...record, tenant: o.tenant }),
|
|
82
|
+
async read(id) {
|
|
83
|
+
const record = await backingStore.read(id);
|
|
84
|
+
return belongs(record) ? record : null;
|
|
85
|
+
},
|
|
86
|
+
async touch(id, expiresAt) {
|
|
87
|
+
if (!belongs(await backingStore.read(id)))
|
|
88
|
+
return null;
|
|
89
|
+
return backingStore.touch(id, expiresAt);
|
|
90
|
+
},
|
|
91
|
+
async updateContext(id, expectedRevision, context) {
|
|
92
|
+
if (!belongs(await backingStore.read(id)))
|
|
93
|
+
return null;
|
|
94
|
+
return backingStore.updateContext(id, expectedRevision, context);
|
|
95
|
+
},
|
|
96
|
+
async destroy(id) {
|
|
97
|
+
if (belongs(await backingStore.read(id)))
|
|
98
|
+
await backingStore.destroy(id);
|
|
99
|
+
},
|
|
100
|
+
async listUser(userId) {
|
|
101
|
+
return (await backingStore.listUser(userId)).filter(belongs);
|
|
102
|
+
},
|
|
103
|
+
async destroyUser(userId) {
|
|
104
|
+
const records = (await backingStore.listUser(userId)).filter(belongs);
|
|
105
|
+
for (const record of records)
|
|
106
|
+
await backingStore.destroy(record.id);
|
|
107
|
+
return records.length;
|
|
108
|
+
},
|
|
109
|
+
async destroyUserExcept(userId, keepId) {
|
|
110
|
+
const records = (await backingStore.listUser(userId)).filter((record) => belongs(record) && record.id !== keepId);
|
|
111
|
+
for (const record of records)
|
|
112
|
+
await backingStore.destroy(record.id);
|
|
113
|
+
return records.length;
|
|
114
|
+
},
|
|
115
|
+
sweep: (at) => backingStore.sweep(at),
|
|
116
|
+
};
|
|
41
117
|
await store.init();
|
|
42
|
-
const ephemeralSecret = !o.secret;
|
|
118
|
+
const ephemeralSecret = o.ephemeralSecret ?? !o.secret;
|
|
43
119
|
const secret = o.secret ?? randomBytes(32).toString('base64url');
|
|
44
120
|
const idleTtl = o.idleTtlMs ?? DEFAULTS.idleTtlMs;
|
|
45
121
|
const absoluteTtl = o.absoluteTtlMs ?? DEFAULTS.absoluteTtlMs;
|
|
@@ -59,6 +135,7 @@ export async function createSessions(o = {}) {
|
|
|
59
135
|
};
|
|
60
136
|
return {
|
|
61
137
|
store,
|
|
138
|
+
...(o.tenant === undefined ? {} : { tenant: o.tenant }),
|
|
62
139
|
ephemeralSecret,
|
|
63
140
|
async start({ userId, companies, company, branch, branches, securityVersion }) {
|
|
64
141
|
if (!companies.length) {
|
|
@@ -88,6 +165,7 @@ export async function createSessions(o = {}) {
|
|
|
88
165
|
const at = now();
|
|
89
166
|
const record = {
|
|
90
167
|
id: randomBytes(32).toString('base64url'),
|
|
168
|
+
tenant: o.tenant ?? null,
|
|
91
169
|
userId,
|
|
92
170
|
companies: [...companies],
|
|
93
171
|
company: active,
|
|
@@ -154,14 +232,10 @@ export async function createSessions(o = {}) {
|
|
|
154
232
|
return cookie('', 0);
|
|
155
233
|
},
|
|
156
234
|
scopeOf(record) {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
companies: record.companies,
|
|
162
|
-
branch: record.branch,
|
|
163
|
-
branches: record.branches,
|
|
164
|
-
};
|
|
235
|
+
return scopeForSession(record, {
|
|
236
|
+
...(o.tenant === undefined ? {} : { tenant: o.tenant }),
|
|
237
|
+
...(o.anonymous === undefined ? {} : { anonymous: o.anonymous }),
|
|
238
|
+
});
|
|
165
239
|
},
|
|
166
240
|
sweep() {
|
|
167
241
|
return store.sweep(now());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/server/session.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,kFAAkF;AAClF,iFAAiF;AACjF,4EAA4E;AAC5E,sCAAsC;AAEtC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAKtD,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/server/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,8 @@ import type { Adapter } from '../types.ts';
|
|
|
2
2
|
/** What a session carries. Everything a request needs to know who it is. */
|
|
3
3
|
export type SessionRecord = {
|
|
4
4
|
id: string;
|
|
5
|
+
/** Tenant binding for a shared session store. Null/absent means unbound. */
|
|
6
|
+
tenant?: string | null;
|
|
5
7
|
userId: string;
|
|
6
8
|
/** Companies this session may read — becomes scope.companies (D32). */
|
|
7
9
|
companies: string[];
|
|
@@ -42,7 +44,7 @@ export declare function memorySessionStore(o?: {
|
|
|
42
44
|
now?: () => number;
|
|
43
45
|
}): SessionStore;
|
|
44
46
|
/**
|
|
45
|
-
* One row per session, in whatever database the
|
|
47
|
+
* One row per session, in whatever database the deployment already has.
|
|
46
48
|
*
|
|
47
49
|
* This is the store that makes several pods work at all, and it needs no extra
|
|
48
50
|
* infrastructure to do it — which is the point. Reach for Redis when the read
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionstore.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/server/sessionstore.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,4EAA4E;AAC5E,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,uEAAuE;IACvE,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACzB,sEAAsE;IACtE,eAAe,EAAE,MAAM,CAAA;IACvB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5C,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAC/C,qFAAqF;IACrF,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAC5D,oFAAoF;IACpF,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAC3G,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IAClD,kFAAkF;IAClF,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC5C,8EAA8E;IAC9E,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAClE,qDAAqD;IACrD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,IAAI,CAC/B,aAAa,EACb,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,iBAAiB,CACpE,CAAA;AAID,wBAAgB,kBAAkB,CAAC,CAAC,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAAO,GAAG,YAAY,CA4E/E;
|
|
1
|
+
{"version":3,"file":"sessionstore.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/server/sessionstore.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,4EAA4E;AAC5E,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,uEAAuE;IACvE,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,2EAA2E;IAC3E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACzB,sEAAsE;IACtE,eAAe,EAAE,MAAM,CAAA;IACvB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5C,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAC/C,qFAAqF;IACrF,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAC5D,oFAAoF;IACpF,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IAC3G,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;IAClD,kFAAkF;IAClF,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC5C,8EAA8E;IAC9E,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAClE,qDAAqD;IACrD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,IAAI,CAC/B,aAAa,EACb,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,iBAAiB,CACpE,CAAA;AAID,wBAAgB,kBAAkB,CAAC,CAAC,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAAO,GAAG,YAAY,CA4E/E;AAoBD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAAO,GAAG,YAAY,CA4I7F"}
|
|
@@ -94,6 +94,7 @@ export function memorySessionStore(o = {}) {
|
|
|
94
94
|
const DDL = `
|
|
95
95
|
CREATE TABLE IF NOT EXISTS ket_session (
|
|
96
96
|
id TEXT PRIMARY KEY,
|
|
97
|
+
tenant TEXT,
|
|
97
98
|
user_id TEXT NOT NULL,
|
|
98
99
|
companies TEXT NOT NULL,
|
|
99
100
|
company TEXT,
|
|
@@ -108,7 +109,7 @@ CREATE INDEX IF NOT EXISTS ket_session_user ON ket_session (user_id);
|
|
|
108
109
|
CREATE INDEX IF NOT EXISTS ket_session_expiry ON ket_session (expires_at);
|
|
109
110
|
`;
|
|
110
111
|
/**
|
|
111
|
-
* One row per session, in whatever database the
|
|
112
|
+
* One row per session, in whatever database the deployment already has.
|
|
112
113
|
*
|
|
113
114
|
* This is the store that makes several pods work at all, and it needs no extra
|
|
114
115
|
* infrastructure to do it — which is the point. Reach for Redis when the read
|
|
@@ -122,6 +123,7 @@ export function dbSessionStore(adapter, o = {}) {
|
|
|
122
123
|
const p = (n) => (pg ? `$${n}` : '?');
|
|
123
124
|
const decode = (row) => ({
|
|
124
125
|
id: String(row.id),
|
|
126
|
+
tenant: row.tenant === null || row.tenant === undefined ? null : String(row.tenant),
|
|
125
127
|
userId: String(row.user_id),
|
|
126
128
|
companies: JSON.parse(String(row.companies)),
|
|
127
129
|
company: row.company === null || row.company === undefined ? null : String(row.company),
|
|
@@ -140,6 +142,7 @@ export function dbSessionStore(adapter, o = {}) {
|
|
|
140
142
|
await adapter.exec(DDL);
|
|
141
143
|
const columns = (await adapter.introspect()).ket_session ?? {};
|
|
142
144
|
for (const [name, sql] of [
|
|
145
|
+
['tenant', 'TEXT'],
|
|
143
146
|
['branch', 'TEXT'],
|
|
144
147
|
['security_version', 'INTEGER NOT NULL DEFAULT 0'],
|
|
145
148
|
['revision', 'INTEGER NOT NULL DEFAULT 0'],
|
|
@@ -151,9 +154,10 @@ export function dbSessionStore(adapter, o = {}) {
|
|
|
151
154
|
},
|
|
152
155
|
async create(r) {
|
|
153
156
|
await adapter.run(`INSERT INTO ket_session
|
|
154
|
-
(id, user_id, companies, company, branch, branches, security_version, revision, created_at, expires_at)
|
|
155
|
-
VALUES (${p(1)}, ${p(2)}, ${p(3)}, ${p(4)}, ${p(5)}, ${p(6)}, ${p(7)}, ${p(8)}, ${p(9)}, ${p(10)})`, [
|
|
157
|
+
(id, tenant, user_id, companies, company, branch, branches, security_version, revision, created_at, expires_at)
|
|
158
|
+
VALUES (${p(1)}, ${p(2)}, ${p(3)}, ${p(4)}, ${p(5)}, ${p(6)}, ${p(7)}, ${p(8)}, ${p(9)}, ${p(10)}, ${p(11)})`, [
|
|
156
159
|
r.id,
|
|
160
|
+
r.tenant ?? null,
|
|
157
161
|
r.userId,
|
|
158
162
|
JSON.stringify(r.companies),
|
|
159
163
|
r.company,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionstore.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/server/sessionstore.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,+EAA+E;AAC/E,kFAAkF;AAClF,sCAAsC;AACtC,EAAE;AACF,iFAAiF;AACjF,gFAAgF;AAChF,iFAAiF;AACjF,kCAAkC;
|
|
1
|
+
{"version":3,"file":"sessionstore.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/server/sessionstore.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import type { Storage } from './types.ts';
|
|
|
3
3
|
export declare function storageFromConfig(config: RuntimeConfig): Storage;
|
|
4
4
|
export { localStorage } from './local.ts';
|
|
5
5
|
export { s3Storage } from './s3.ts';
|
|
6
|
-
export { namespacedStorage, effectStorage } from './types.ts';
|
|
6
|
+
export { namespacedStorage, effectStorage, withPublicStorage } from './types.ts';
|
|
7
7
|
export type { Storage, Stored, OpenStorage, StorageEffect } from './types.ts';
|
|
8
8
|
export type { S3StorageOptions } from './s3.ts';
|
|
9
9
|
export { signRequest, presignUrl, sha256 } from './sigv4.ts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/server/storage/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/server/storage/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAGzC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CA0DhE;AAyBD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAChF,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC7E,YAAY,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC5D,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -1,7 +1,67 @@
|
|
|
1
|
+
import { resolve, sep } from 'node:path';
|
|
1
2
|
import { KetError } from '../../kernel/errors.js';
|
|
2
3
|
import { localStorage } from './local.js';
|
|
3
4
|
import { s3Storage } from './s3.js';
|
|
5
|
+
import { withPublicStorage } from './types.js';
|
|
4
6
|
export function storageFromConfig(config) {
|
|
7
|
+
const privateStorage = privateFromConfig(config);
|
|
8
|
+
const publicConfig = config.publicStorage;
|
|
9
|
+
if (!publicConfig)
|
|
10
|
+
return privateStorage;
|
|
11
|
+
let publicStorage;
|
|
12
|
+
if (publicConfig.kind === 'local') {
|
|
13
|
+
if (!publicConfig.dir)
|
|
14
|
+
throw new KetError({
|
|
15
|
+
code: 'E_STORAGE_CONFIG',
|
|
16
|
+
message: 'public storage is missing KET_STORAGE_PUBLIC_DIR',
|
|
17
|
+
});
|
|
18
|
+
if (config.storageKind === 'local') {
|
|
19
|
+
const a = resolve(config.storageDir);
|
|
20
|
+
const b = resolve(publicConfig.dir);
|
|
21
|
+
const beneath = (parent, child) => child.startsWith(parent.endsWith(sep) ? parent : parent + sep);
|
|
22
|
+
if (a === b || beneath(a, b) || beneath(b, a))
|
|
23
|
+
throw new KetError({
|
|
24
|
+
code: 'E_STORAGE_CONFIG',
|
|
25
|
+
message: 'private and public storage directories must not overlap',
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
publicStorage = localStorage({ dir: publicConfig.dir });
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
const endpoint = publicConfig.endpoint ?? config.s3Endpoint;
|
|
32
|
+
const missing = [
|
|
33
|
+
['KET_S3_PUBLIC_ENDPOINT', endpoint],
|
|
34
|
+
['KET_S3_PUBLIC_BUCKET', publicConfig.bucket],
|
|
35
|
+
['KET_S3_PUBLIC_KEY', publicConfig.accessKeyId],
|
|
36
|
+
['KET_S3_PUBLIC_SECRET', publicConfig.secretAccessKey],
|
|
37
|
+
].filter(([, value]) => !value);
|
|
38
|
+
if (missing.length)
|
|
39
|
+
throw new KetError({
|
|
40
|
+
code: 'E_STORAGE_CONFIG',
|
|
41
|
+
message: `public S3 storage is missing ${missing.map(([name]) => name).join(', ')}`,
|
|
42
|
+
});
|
|
43
|
+
// The S3 adapter replaces the URL path when addressing objects, so paths,
|
|
44
|
+
// fragments and query strings cannot make two buckets distinct.
|
|
45
|
+
const endpointId = (value) => new URL(value).origin;
|
|
46
|
+
if (config.storageKind === 's3' &&
|
|
47
|
+
publicConfig.bucket === config.s3Bucket &&
|
|
48
|
+
endpointId(endpoint) === endpointId(config.s3Endpoint))
|
|
49
|
+
throw new KetError({
|
|
50
|
+
code: 'E_STORAGE_CONFIG',
|
|
51
|
+
message: 'private and public S3 buckets must be distinct',
|
|
52
|
+
});
|
|
53
|
+
publicStorage = s3Storage({
|
|
54
|
+
endpoint: endpoint,
|
|
55
|
+
bucket: publicConfig.bucket,
|
|
56
|
+
accessKeyId: publicConfig.accessKeyId,
|
|
57
|
+
secretAccessKey: publicConfig.secretAccessKey,
|
|
58
|
+
region: publicConfig.region ?? config.s3Region,
|
|
59
|
+
pathStyle: publicConfig.pathStyle ?? config.s3PathStyle,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return withPublicStorage(privateStorage, publicStorage, { baseUrl: publicConfig.baseUrl });
|
|
63
|
+
}
|
|
64
|
+
function privateFromConfig(config) {
|
|
5
65
|
if (config.storageKind === 'local')
|
|
6
66
|
return localStorage({ dir: config.storageDir });
|
|
7
67
|
const missing = [
|
|
@@ -26,6 +86,6 @@ export function storageFromConfig(config) {
|
|
|
26
86
|
}
|
|
27
87
|
export { localStorage } from './local.js';
|
|
28
88
|
export { s3Storage } from './s3.js';
|
|
29
|
-
export { namespacedStorage, effectStorage } from './types.js';
|
|
89
|
+
export { namespacedStorage, effectStorage, withPublicStorage } from './types.js';
|
|
30
90
|
export { signRequest, presignUrl, sha256 } from './sigv4.js';
|
|
31
91
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/ketjs/src/server/storage/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/ketjs/src/server/storage/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,10 @@ export type Stored = {
|
|
|
7
7
|
};
|
|
8
8
|
export type Storage = {
|
|
9
9
|
name: string;
|
|
10
|
+
/** Optional publication backend. Root operations always remain private/default. */
|
|
11
|
+
public?: Storage;
|
|
12
|
+
/** Only a deliberately public backend may expose an unsigned delivery URL. */
|
|
13
|
+
publicUrl?: (key: string) => string;
|
|
10
14
|
put(key: string, body: AsyncIterable<Uint8Array>, options: {
|
|
11
15
|
type: string;
|
|
12
16
|
size?: number;
|
|
@@ -34,4 +38,8 @@ export type StorageEffect = 'storage:read' | 'storage:write' | 'storage:remove';
|
|
|
34
38
|
export declare function effectStorage(storage: Storage, effects: readonly string[], operation: string): Storage;
|
|
35
39
|
export declare const storageKey: (key: string) => string;
|
|
36
40
|
export declare function namespacedStorage(storage: Storage, namespace: string): Storage;
|
|
41
|
+
/** Compose two backends without changing existing private-only callers. */
|
|
42
|
+
export declare function withPublicStorage(privateStorage: Storage, publicStorage: Storage, options?: {
|
|
43
|
+
baseUrl?: string | null;
|
|
44
|
+
}): Storage;
|
|
37
45
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/server/storage/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,MAAM,GAAG;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC5G,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IACnF,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACzC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,IAAI,CACF,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3C,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC7C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAC/E,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,OAAO,cAAc,EAAE,aAAa,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;AAEtG,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,eAAe,GAAG,gBAAgB,CAAA;AAE/E,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/server/storage/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,MAAM,GAAG;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACnC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC5G,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IACnF,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACzC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,IAAI,CACF,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3C,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC7C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAC/E,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,OAAO,cAAc,EAAE,aAAa,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;AAEtG,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,eAAe,GAAG,gBAAgB,CAAA;AAE/E,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CA6CtG;AAED,eAAO,MAAM,UAAU,QAAS,MAAM,KAAG,MAYxC,CAAA;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CA+B9E;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAC/B,cAAc,EAAE,OAAO,EACvB,aAAa,EAAE,OAAO,EACtB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GACxC,OAAO,CA+CT"}
|