@ketvietlab/ketjs 0.1.2 → 0.1.3
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 +16 -0
- package/dist/data/expr.d.ts.map +1 -1
- package/dist/data/expr.js +33 -5
- 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 +43 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -16
- 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 +157 -38
- package/dist/server/boot.d.ts.map +1 -1
- package/dist/server/boot.js +360 -138
- 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 +266 -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 +55 -3
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +306 -22
- 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/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 +6 -0
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +6 -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 +304 -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
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"}
|
|
@@ -12,6 +12,15 @@ export function effectStorage(storage, effects, operation) {
|
|
|
12
12
|
};
|
|
13
13
|
return {
|
|
14
14
|
name: storage.name,
|
|
15
|
+
...(storage.public ? { public: effectStorage(storage.public, effects, operation) } : {}),
|
|
16
|
+
...(storage.publicUrl
|
|
17
|
+
? {
|
|
18
|
+
publicUrl(key) {
|
|
19
|
+
need('storage:read');
|
|
20
|
+
return storage.publicUrl(key);
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
: {}),
|
|
15
24
|
put(key, body, options) {
|
|
16
25
|
need('storage:write');
|
|
17
26
|
return storage.put(key, body, options);
|
|
@@ -56,6 +65,8 @@ export function namespacedStorage(storage, namespace) {
|
|
|
56
65
|
const strip = (key) => key.slice(prefix.length);
|
|
57
66
|
return {
|
|
58
67
|
name: `${storage.name}:${safe}`,
|
|
68
|
+
...(storage.public ? { public: namespacedStorage(storage.public, namespace) } : {}),
|
|
69
|
+
...(storage.publicUrl ? { publicUrl: (key) => storage.publicUrl(keyOf(key)) } : {}),
|
|
59
70
|
put: (key, body, options) => storage.put(keyOf(key), body, options).then((meta) => ({ ...meta, key })),
|
|
60
71
|
async get(key) {
|
|
61
72
|
const found = await storage.get(keyOf(key));
|
|
@@ -79,4 +90,51 @@ export function namespacedStorage(storage, namespace) {
|
|
|
79
90
|
signedUrl: (key, options) => storage.signedUrl(keyOf(key), options),
|
|
80
91
|
};
|
|
81
92
|
}
|
|
93
|
+
/** Compose two backends without changing existing private-only callers. */
|
|
94
|
+
export function withPublicStorage(privateStorage, publicStorage, options = {}) {
|
|
95
|
+
if (privateStorage === publicStorage ||
|
|
96
|
+
privateStorage.public ||
|
|
97
|
+
publicStorage.public ||
|
|
98
|
+
privateStorage.publicUrl)
|
|
99
|
+
throw new KetError({
|
|
100
|
+
code: 'E_STORAGE_CONFIG',
|
|
101
|
+
message: 'private and public storage must be distinct leaf backends',
|
|
102
|
+
});
|
|
103
|
+
let base;
|
|
104
|
+
if (options.baseUrl != null) {
|
|
105
|
+
try {
|
|
106
|
+
base = new URL(options.baseUrl);
|
|
107
|
+
if (!['http:', 'https:'].includes(base.protocol) ||
|
|
108
|
+
base.username ||
|
|
109
|
+
base.password ||
|
|
110
|
+
base.search ||
|
|
111
|
+
base.hash)
|
|
112
|
+
throw new Error('unsafe URL');
|
|
113
|
+
if (!base.pathname.endsWith('/'))
|
|
114
|
+
base.pathname += '/';
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
throw new KetError({
|
|
118
|
+
code: 'E_STORAGE_CONFIG',
|
|
119
|
+
message: 'public storage URL must be HTTP(S) without credentials, query or fragment',
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const delegate = (storage) => ({
|
|
124
|
+
name: storage.name,
|
|
125
|
+
put: (key, body, o) => storage.put(key, body, o),
|
|
126
|
+
get: (key) => storage.get(key),
|
|
127
|
+
head: (key) => storage.head(key),
|
|
128
|
+
remove: (key) => storage.remove(key),
|
|
129
|
+
list: (prefix, o) => storage.list(prefix, o),
|
|
130
|
+
signedUrl: (key, o) => storage.signedUrl(key, o),
|
|
131
|
+
...(storage.publicUrl ? { publicUrl: (key) => storage.publicUrl(key) } : {}),
|
|
132
|
+
});
|
|
133
|
+
const published = delegate(publicStorage);
|
|
134
|
+
if (base) {
|
|
135
|
+
const prefix = base.href;
|
|
136
|
+
published.publicUrl = (key) => prefix + storageKey(key).split('/').map(encodeURIComponent).join('/');
|
|
137
|
+
}
|
|
138
|
+
return { ...delegate(privateStorage), public: published };
|
|
139
|
+
}
|
|
82
140
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../packages/ketjs/src/server/storage/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../packages/ketjs/src/server/storage/types.ts"],"names":[],"mappings":"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"}
|
package/dist/server/tenants.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { AdapterPool } from '../data/pool.ts';
|
|
2
|
-
import type { AppRegistry } from '../kernel/apps.ts';
|
|
3
2
|
import type { Adapter, Manifest } from '../types.ts';
|
|
4
3
|
import type { ThemeRuntime } from '../theme/render.ts';
|
|
5
4
|
import type { Sessions } from './session.ts';
|
|
@@ -13,8 +12,16 @@ export type TenantSpec = {
|
|
|
13
12
|
* tenant is how one customer's request quietly reads another's data.
|
|
14
13
|
*/
|
|
15
14
|
resolve: (url: URL, req: IncomingMessage) => string | null;
|
|
16
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Create a fresh adapter for one tenant. The pool owns open/close; do not hand
|
|
17
|
+
* back an adapter object that a prior pool entry already closed.
|
|
18
|
+
*/
|
|
17
19
|
open: (key: string, config: RuntimeConfig) => Adapter | Promise<Adapter>;
|
|
20
|
+
/**
|
|
21
|
+
* Check that a tenant datastore already exists without creating or opening it.
|
|
22
|
+
* Required by read-only fleet inspection commands such as `ket schema verify`.
|
|
23
|
+
*/
|
|
24
|
+
exists?: (key: string, config: RuntimeConfig) => boolean | Promise<boolean>;
|
|
18
25
|
/**
|
|
19
26
|
* Every tenant this deployment serves. Needed to migrate the fleet, and to fail
|
|
20
27
|
* at boot rather than at 3am if one of them cannot be opened.
|
|
@@ -24,19 +31,18 @@ export type TenantSpec = {
|
|
|
24
31
|
max?: number;
|
|
25
32
|
idleMs?: number;
|
|
26
33
|
};
|
|
27
|
-
/** What a request resolves to: its database
|
|
34
|
+
/** What a request resolves to: its database and the deployment manifest. */
|
|
28
35
|
export type Tenant = {
|
|
29
36
|
key: string;
|
|
30
37
|
adapter: Adapter;
|
|
31
|
-
apps: AppRegistry;
|
|
32
38
|
live: Manifest;
|
|
33
|
-
/** Compiled against
|
|
39
|
+
/** Compiled against the deployment manifest and cached per tenant. */
|
|
34
40
|
theme: ThemeRuntime | null;
|
|
35
41
|
/**
|
|
36
42
|
* Extension points for one locale.
|
|
37
43
|
*
|
|
38
44
|
* KTL binds its `_` filter when it compiles, so a runtime is per language as
|
|
39
|
-
* well as per
|
|
45
|
+
* well as per tenant — one bound to the deployment default made every
|
|
40
46
|
* fill answer in that language while the page around it answered in the
|
|
41
47
|
* reader's, which is what a sidebar entry in the wrong language looks like.
|
|
42
48
|
*/
|
|
@@ -44,11 +50,11 @@ export type Tenant = {
|
|
|
44
50
|
/**
|
|
45
51
|
* Whose logins these are.
|
|
46
52
|
*
|
|
47
|
-
* Per tenant when the tenant is known before the cookie is read —
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
53
|
+
* Per tenant when the tenant is known before the cookie is read — for example
|
|
54
|
+
* from a subdomain, a trusted gateway assertion, or an explicit path/header.
|
|
55
|
+
* Deployments whose tenants share one domain may supply a shared identity store,
|
|
56
|
+
* but each record remains tenant-bound; a session is never allowed to select a
|
|
57
|
+
* different datastore by itself.
|
|
52
58
|
*/
|
|
53
59
|
sessions: Sessions | null;
|
|
54
60
|
};
|
|
@@ -71,23 +77,20 @@ export declare function createTenants(o: {
|
|
|
71
77
|
spec: TenantSpec;
|
|
72
78
|
pool: AdapterPool;
|
|
73
79
|
manifest: Manifest;
|
|
74
|
-
autoInstall: boolean;
|
|
75
80
|
/**
|
|
76
81
|
* Run once per datastore, before anything reads it — this is where the schema
|
|
77
82
|
* arrives. A tenant database nobody migrated is a tenant with no tables, and
|
|
78
83
|
* every query against it fails in a way that looks like a bug in the query.
|
|
79
84
|
*/
|
|
80
85
|
prepare?: (key: string, adapter: Adapter) => Promise<void>;
|
|
81
|
-
/** Run once, after the registry exists: the bootstrap set for a new tenant. */
|
|
82
|
-
onFirstTouch?: (key: string, apps: AppRegistry, adapter: Adapter) => Promise<void>;
|
|
83
86
|
/**
|
|
84
|
-
* Compiles the theme for one tenant
|
|
87
|
+
* Compiles the theme for one tenant. Cached, because compiling
|
|
85
88
|
* every template on every request would be the most expensive thing here.
|
|
86
89
|
*/
|
|
87
90
|
theme?: (live: Manifest) => ThemeRuntime;
|
|
88
91
|
joints: (live: Manifest, locale: string) => Joints;
|
|
89
|
-
/** Built
|
|
90
|
-
sessions?: (adapter: Adapter) => Promise<Sessions>;
|
|
92
|
+
/** Built against the current adapter; the returned facade reacquires a lease per operation. */
|
|
93
|
+
sessions?: (adapter: Adapter, key: string) => Promise<Sessions>;
|
|
91
94
|
}): Tenants;
|
|
92
95
|
/**
|
|
93
96
|
* One datastore, expressed as the same interface.
|
|
@@ -99,7 +102,6 @@ export declare function createTenants(o: {
|
|
|
99
102
|
*/
|
|
100
103
|
export declare function singleTenant(o: {
|
|
101
104
|
adapter: Adapter;
|
|
102
|
-
apps: AppRegistry;
|
|
103
105
|
manifest: Manifest;
|
|
104
106
|
theme?: (live: Manifest) => ThemeRuntime;
|
|
105
107
|
joints: (live: Manifest, locale: string) => Joints;
|