@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
package/dist/server/tenants.js
CHANGED
|
@@ -1,38 +1,56 @@
|
|
|
1
|
-
// One deployment, many databases.
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
// all: the code ships with the deployment, the decision about what is switched on
|
|
5
|
-
// lives in each database. `ket_app` per database is `ir_module_module` per
|
|
6
|
-
// database, and D7 makes it cheaper here — every schema exists everywhere, so
|
|
7
|
-
// enabling a module for a tenant is one UPDATE rather than a migration. Measured:
|
|
8
|
-
// 400 empty tables cost 17 MB, and adding a column across all of them 43 ms.
|
|
9
|
-
//
|
|
10
|
-
// What this file exists to prevent is subtler than a missing feature. Until now
|
|
11
|
-
// `bootApp` opened one adapter and built one AppRegistry at boot, so `live()` —
|
|
12
|
-
// the restricted manifest — was computed once. Serving two tenants through that
|
|
13
|
-
// would not crash; it would show tenant B the module set of tenant A. Wrong
|
|
14
|
-
// answers are worse than errors, so the registry is per datastore and the manifest
|
|
15
|
-
// is resolved per request.
|
|
16
|
-
import { createAppRegistry, restrictManifest } from '../kernel/apps.js';
|
|
1
|
+
// One deployment, many databases. A DeploymentSpec is immutable: every tenant
|
|
2
|
+
// receives the same composed manifest and schema. Tenant resolution chooses data,
|
|
3
|
+
// never a second module lifecycle.
|
|
17
4
|
import { KetError } from '../kernel/errors.js';
|
|
5
|
+
import { scopeForSession } from './session.js';
|
|
6
|
+
const sessionFacadePolicy = (sessions) => ({
|
|
7
|
+
storeName: sessions.store.name,
|
|
8
|
+
...(sessions.tenant === undefined ? {} : { tenant: sessions.tenant }),
|
|
9
|
+
ephemeralSecret: sessions.ephemeralSecret,
|
|
10
|
+
clearCookie: sessions.clearCookie(),
|
|
11
|
+
anonymous: scopeForSession(null, { anonymous: sessions.scopeOf(null) }),
|
|
12
|
+
});
|
|
13
|
+
const scopePolicyKey = (scope) => JSON.stringify(scope);
|
|
14
|
+
const assertSessionFacadePolicy = (key, expected, sessions) => {
|
|
15
|
+
const actual = sessionFacadePolicy(sessions);
|
|
16
|
+
const changed = [
|
|
17
|
+
...(actual.storeName === expected.storeName ? [] : ['store.name']),
|
|
18
|
+
...(actual.tenant === expected.tenant ? [] : ['tenant']),
|
|
19
|
+
...(actual.ephemeralSecret === expected.ephemeralSecret ? [] : ['ephemeralSecret']),
|
|
20
|
+
...(actual.clearCookie === expected.clearCookie ? [] : ['clearCookie']),
|
|
21
|
+
...(scopePolicyKey(actual.anonymous) === scopePolicyKey(expected.anonymous) ? [] : ['anonymous']),
|
|
22
|
+
];
|
|
23
|
+
if (!changed.length)
|
|
24
|
+
return;
|
|
25
|
+
throw new KetError({
|
|
26
|
+
code: 'E_SESSION_POLICY_DRIFT',
|
|
27
|
+
message: `session policy for tenant "${key}" changed after its adapter was replaced`,
|
|
28
|
+
hint: `sessions(adapter, key) must keep adapter-independent policy stable; changed: ${changed.join(', ')}`,
|
|
29
|
+
});
|
|
30
|
+
};
|
|
18
31
|
export function createTenants(o) {
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
// Adapter-owned work must not keep a closed pool entry alive. WeakMap has the
|
|
33
|
+
// ephemeron semantics needed here even though the promise itself closes over
|
|
34
|
+
// the adapter while preparation is running.
|
|
35
|
+
const prepared = new WeakMap();
|
|
36
|
+
const prepare = (key, adapter) => {
|
|
37
|
+
const cached = prepared.get(adapter);
|
|
38
|
+
if (cached)
|
|
39
|
+
return cached;
|
|
40
|
+
// A key may be evicted and later reopened as a different adapter. Preparation
|
|
41
|
+
// belongs to that concrete connection/datastore instance, not to the key for
|
|
42
|
+
// the lifetime of the process (notably for SQLite :memory: databases).
|
|
43
|
+
const promise = Promise.resolve().then(async () => {
|
|
44
|
+
await o.prepare?.(key, adapter);
|
|
45
|
+
});
|
|
46
|
+
prepared.set(adapter, promise);
|
|
47
|
+
void promise.catch(() => {
|
|
48
|
+
// A failed migration/init is retryable. Do not let an older rejected promise
|
|
49
|
+
// delete a newer attempt on the same adapter.
|
|
50
|
+
if (prepared.get(adapter) === promise)
|
|
51
|
+
prepared.delete(adapter);
|
|
52
|
+
});
|
|
53
|
+
return promise;
|
|
36
54
|
};
|
|
37
55
|
const keyOf = (url, req) => {
|
|
38
56
|
const key = o.spec.resolve(url, req);
|
|
@@ -46,54 +64,98 @@ export function createTenants(o) {
|
|
|
46
64
|
return key;
|
|
47
65
|
};
|
|
48
66
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* The restricted manifest is worth caching for the same reason the theme is,
|
|
53
|
-
* and it always was: 0.015 ms a call against KetSuite's manifest, which is
|
|
54
|
-
* nothing until it is every request, and 0.0003 ms once kept. A deployment with
|
|
55
|
-
* one database benefits most, because its installed set almost never changes.
|
|
67
|
+
* Theme and joint runtimes are keyed by tenant (and locale for joints). Module
|
|
68
|
+
* composition is immutable for the lifetime of this deployment process.
|
|
56
69
|
*/
|
|
57
|
-
const lives = new Map();
|
|
58
70
|
const themes = new Map();
|
|
59
71
|
const jointsBy = new Map();
|
|
60
|
-
const
|
|
72
|
+
const sessionManagers = new WeakMap();
|
|
73
|
+
const sessionFacades = new Map();
|
|
74
|
+
const managerFor = (key, adapter) => {
|
|
75
|
+
const cached = sessionManagers.get(adapter);
|
|
76
|
+
if (cached)
|
|
77
|
+
return cached;
|
|
78
|
+
const value = o.sessions(adapter, key);
|
|
79
|
+
sessionManagers.set(adapter, value);
|
|
80
|
+
void value.catch(() => {
|
|
81
|
+
if (sessionManagers.get(adapter) === value)
|
|
82
|
+
sessionManagers.delete(adapter);
|
|
83
|
+
});
|
|
84
|
+
return value;
|
|
85
|
+
};
|
|
61
86
|
const sessionsFor = (key, adapter) => {
|
|
62
87
|
if (!o.sessions)
|
|
63
88
|
return null;
|
|
64
|
-
|
|
65
|
-
if (
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
89
|
+
const cached = sessionFacades.get(key);
|
|
90
|
+
if (cached)
|
|
91
|
+
return cached;
|
|
92
|
+
let made;
|
|
93
|
+
made = managerFor(key, adapter)
|
|
94
|
+
.then((seed) => {
|
|
95
|
+
// Snapshot only adapter-free values. In particular, do not close over the
|
|
96
|
+
// first Sessions/SessionStore: it owns the adapter that eviction just closed.
|
|
97
|
+
const policy = sessionFacadePolicy(seed);
|
|
98
|
+
const withManager = (body) => o.pool.with(key, async (current) => {
|
|
99
|
+
await prepare(key, current);
|
|
100
|
+
const sessions = await managerFor(key, current);
|
|
101
|
+
assertSessionFacadePolicy(key, policy, sessions);
|
|
102
|
+
return body(sessions);
|
|
103
|
+
});
|
|
104
|
+
return {
|
|
105
|
+
...(policy.tenant === undefined ? {} : { tenant: policy.tenant }),
|
|
106
|
+
store: {
|
|
107
|
+
name: policy.storeName,
|
|
108
|
+
init: () => withManager((sessions) => sessions.store.init()),
|
|
109
|
+
create: (record) => withManager((sessions) => sessions.store.create(record)),
|
|
110
|
+
read: (id) => withManager((sessions) => sessions.store.read(id)),
|
|
111
|
+
touch: (id, expiresAt) => withManager((sessions) => sessions.store.touch(id, expiresAt)),
|
|
112
|
+
updateContext: (id, expectedRevision, context) => withManager((sessions) => sessions.store.updateContext(id, expectedRevision, context)),
|
|
113
|
+
destroy: (id) => withManager((sessions) => sessions.store.destroy(id)),
|
|
114
|
+
listUser: (userId) => withManager((sessions) => sessions.store.listUser(userId)),
|
|
115
|
+
destroyUser: (userId) => withManager((sessions) => sessions.store.destroyUser(userId)),
|
|
116
|
+
destroyUserExcept: (userId, keepId) => withManager((sessions) => sessions.store.destroyUserExcept(userId, keepId)),
|
|
117
|
+
sweep: (at) => withManager((sessions) => sessions.store.sweep(at)),
|
|
118
|
+
},
|
|
119
|
+
ephemeralSecret: policy.ephemeralSecret,
|
|
120
|
+
start: (options) => withManager((sessions) => sessions.start(options)),
|
|
121
|
+
of: (req) => withManager((sessions) => sessions.of(req)),
|
|
122
|
+
end: (req) => withManager((sessions) => sessions.end(req)),
|
|
123
|
+
endUser: (userId) => withManager((sessions) => sessions.endUser(userId)),
|
|
124
|
+
endUserExcept: (userId, keepId) => withManager((sessions) => sessions.endUserExcept(userId, keepId)),
|
|
125
|
+
update: (record, context) => withManager((sessions) => sessions.update(record, context)),
|
|
126
|
+
clearCookie: () => policy.clearCookie,
|
|
127
|
+
scopeOf: (record) => scopeForSession(record, {
|
|
128
|
+
...(policy.tenant === undefined ? {} : { tenant: policy.tenant }),
|
|
129
|
+
anonymous: policy.anonymous,
|
|
130
|
+
}),
|
|
131
|
+
sweep: () => withManager((sessions) => sessions.sweep()),
|
|
132
|
+
};
|
|
133
|
+
})
|
|
134
|
+
.catch((error) => {
|
|
135
|
+
if (sessionFacades.get(key) === made)
|
|
136
|
+
sessionFacades.delete(key);
|
|
137
|
+
throw error;
|
|
138
|
+
});
|
|
139
|
+
sessionFacades.set(key, made);
|
|
140
|
+
return made;
|
|
70
141
|
};
|
|
71
|
-
const themeFor = (key
|
|
142
|
+
const themeFor = (key) => {
|
|
72
143
|
if (!o.theme)
|
|
73
144
|
return null;
|
|
74
|
-
|
|
75
|
-
let t = themes.get(stamp);
|
|
145
|
+
let t = themes.get(key);
|
|
76
146
|
if (!t) {
|
|
77
|
-
t = o.theme(
|
|
78
|
-
themes.set(
|
|
147
|
+
t = o.theme(o.manifest);
|
|
148
|
+
themes.set(key, t);
|
|
79
149
|
}
|
|
80
150
|
return t;
|
|
81
151
|
};
|
|
82
152
|
const withTenant = (key, fn) => o.pool.with(key, async (adapter) => {
|
|
83
|
-
|
|
84
|
-
// Resolved per request. The whole reason this file exists: computing it once
|
|
85
|
-
// would show one tenant the module set of another.
|
|
86
|
-
const stamp = `${key}::${[...(await apps.enabled())].sort().join(',')}`;
|
|
87
|
-
let live = lives.get(stamp);
|
|
88
|
-
if (!live) {
|
|
89
|
-
live = restrictManifest(o.manifest, await apps.enabled());
|
|
90
|
-
lives.set(stamp, live);
|
|
91
|
-
}
|
|
153
|
+
await prepare(key, adapter);
|
|
92
154
|
const jointsFor = (locale) => {
|
|
93
|
-
const k = `${
|
|
155
|
+
const k = `${key}::${locale}`;
|
|
94
156
|
let made = jointsBy.get(k);
|
|
95
157
|
if (!made) {
|
|
96
|
-
made = o.joints(
|
|
158
|
+
made = o.joints(o.manifest, locale);
|
|
97
159
|
jointsBy.set(k, made);
|
|
98
160
|
}
|
|
99
161
|
return made;
|
|
@@ -101,9 +163,8 @@ export function createTenants(o) {
|
|
|
101
163
|
return fn({
|
|
102
164
|
key,
|
|
103
165
|
adapter,
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
theme: themeFor(key, live),
|
|
166
|
+
live: o.manifest,
|
|
167
|
+
theme: themeFor(key),
|
|
107
168
|
joints: jointsFor,
|
|
108
169
|
sessions: await (sessionsFor(key, adapter) ?? Promise.resolve(null)),
|
|
109
170
|
});
|
|
@@ -126,26 +187,15 @@ export function createTenants(o) {
|
|
|
126
187
|
* adapter comes from.
|
|
127
188
|
*/
|
|
128
189
|
export function singleTenant(o) {
|
|
129
|
-
|
|
130
|
-
const themes = new Map();
|
|
190
|
+
let theme;
|
|
131
191
|
const jointsBy = new Map();
|
|
132
192
|
const run = async (key, fn) => {
|
|
133
|
-
|
|
134
|
-
let live = lives.get(stamp);
|
|
135
|
-
if (!live) {
|
|
136
|
-
live = restrictManifest(o.manifest, await o.apps.enabled());
|
|
137
|
-
lives.set(stamp, live);
|
|
138
|
-
}
|
|
139
|
-
let theme = null;
|
|
140
|
-
if (o.theme) {
|
|
141
|
-
theme = themes.get(stamp) ?? o.theme(live);
|
|
142
|
-
themes.set(stamp, theme);
|
|
143
|
-
}
|
|
193
|
+
theme ??= o.theme?.(o.manifest) ?? null;
|
|
144
194
|
const jointsFor = (locale) => {
|
|
145
|
-
const k =
|
|
195
|
+
const k = locale;
|
|
146
196
|
let made = jointsBy.get(k);
|
|
147
197
|
if (!made) {
|
|
148
|
-
made = o.joints(
|
|
198
|
+
made = o.joints(o.manifest, locale);
|
|
149
199
|
jointsBy.set(k, made);
|
|
150
200
|
}
|
|
151
201
|
return made;
|
|
@@ -153,8 +203,7 @@ export function singleTenant(o) {
|
|
|
153
203
|
return fn({
|
|
154
204
|
key,
|
|
155
205
|
adapter: o.adapter,
|
|
156
|
-
|
|
157
|
-
live,
|
|
206
|
+
live: o.manifest,
|
|
158
207
|
theme,
|
|
159
208
|
joints: jointsFor,
|
|
160
209
|
sessions: o.sessions ?? null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenants.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/server/tenants.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"tenants.js","sourceRoot":"","sources":["../../../../../../packages/ketjs/src/server/tenants.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,kFAAkF;AAClF,mCAAmC;AAEnC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAI9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAqF9C,MAAM,mBAAmB,GAAG,CAAC,QAAkB,EAAuB,EAAE,CAAC,CAAC;IACxE,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI;IAC9B,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IACrE,eAAe,EAAE,QAAQ,CAAC,eAAe;IACzC,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE;IACnC,SAAS,EAAE,eAAe,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;CACxE,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,CAAC,KAAmB,EAAU,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAE7E,MAAM,yBAAyB,GAAG,CAAC,GAAW,EAAE,QAA6B,EAAE,QAAkB,EAAQ,EAAE;IACzG,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAC5C,MAAM,OAAO,GAAG;QACd,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAClE,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACxD,GAAG,CAAC,MAAM,CAAC,eAAe,KAAK,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACnF,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QACvE,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;KAClG,CAAA;IACD,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAM;IAC3B,MAAM,IAAI,QAAQ,CAAC;QACjB,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EAAE,8BAA8B,GAAG,0CAA0C;QACpF,IAAI,EAAE,gFAAgF,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;KAC3G,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,UAAU,aAAa,CAAC,CAkB7B;IACC,8EAA8E;IAC9E,6EAA6E;IAC7E,4CAA4C;IAC5C,MAAM,QAAQ,GAAG,IAAI,OAAO,EAA0B,CAAA;IACtD,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,OAAgB,EAAiB,EAAE;QAC/D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACpC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAA;QAEzB,8EAA8E;QAC9E,6EAA6E;QAC7E,uEAAuE;QACvE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAChD,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;QACF,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC9B,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;YACtB,6EAA6E;YAC7E,8CAA8C;YAC9C,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,OAAO;gBAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACjE,CAAC,CAAC,CAAA;QACF,OAAO,OAAO,CAAA;IAChB,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,CAAC,GAAQ,EAAE,GAAoB,EAAU,EAAE;QACvD,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACpC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,QAAQ,CAAC;gBACjB,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,iBAAiB,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE;gBACxD,IAAI,EAAE,0EAA0E;aACjF,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,CAAA;IAED;;;OAGG;IACH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAA;IAC9C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC1C,MAAM,eAAe,GAAG,IAAI,OAAO,EAA8B,CAAA;IACjE,MAAM,cAAc,GAAG,IAAI,GAAG,EAA6B,CAAA;IAC3D,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,OAAgB,EAAqB,EAAE;QACtE,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC3C,IAAI,MAAM;YAAE,OAAO,MAAM,CAAA;QACzB,MAAM,KAAK,GAAI,CAAC,CAAC,QAA2C,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QAC1E,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACnC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;YACpB,IAAI,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK;gBAAE,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC7E,CAAC,CAAC,CAAA;QACF,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;IACD,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,OAAgB,EAA4B,EAAE;QAC9E,IAAI,CAAC,CAAC,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAA;QAC5B,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAA;QAEzB,IAAI,IAAwB,CAAA;QAC5B,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;aAC5B,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACb,0EAA0E;YAC1E,8EAA8E;YAC9E,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,WAAW,GAAG,CAAI,IAAwC,EAAc,EAAE,CAC9E,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACjC,MAAM,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;gBAC3B,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;gBAC/C,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;gBAChD,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAA;YACvB,CAAC,CAAC,CAAA;YACJ,OAAO;gBACL,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;gBACjE,KAAK,EAAE;oBACL,IAAI,EAAE,MAAM,CAAC,SAAS;oBACtB,IAAI,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC5D,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC5E,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAChE,KAAK,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;oBACxF,aAAa,EAAE,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAC/C,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAC;oBACxF,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBACtE,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBAChF,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;oBACtF,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CACpC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;oBAC7E,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;iBACnE;gBACD,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACtE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBACxD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC1D,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACxE,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAChC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACnE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACxF,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW;gBACrC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAClB,eAAe,CAAC,MAAM,EAAE;oBACtB,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;oBACjE,SAAS,EAAE,MAAM,CAAC,SAAS;iBAC5B,CAAC;gBACJ,KAAK,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;aACzD,CAAA;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI;gBAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAChE,MAAM,KAAK,CAAA;QACb,CAAC,CAAC,CAAA;QACJ,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC7B,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IACD,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAuB,EAAE;QACpD,IAAI,CAAC,CAAC,CAAC,KAAK;YAAE,OAAO,IAAI,CAAA;QACzB,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACvB,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;YACvB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACpB,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,CAAI,GAAW,EAAE,EAA6B,EAAc,EAAE,CAC/E,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACjC,MAAM,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAC3B,MAAM,SAAS,GAAG,CAAC,MAAc,EAAU,EAAE;YAC3C,MAAM,CAAC,GAAG,GAAG,GAAG,KAAK,MAAM,EAAE,CAAA;YAC7B,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;gBACnC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;YACvB,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC,CAAA;QACD,OAAO,EAAE,CAAC;YACR,GAAG;YACH,OAAO;YACP,IAAI,EAAE,CAAC,CAAC,QAAQ;YAChB,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC;YACpB,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACrE,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,OAAO;QACL,KAAK;QACL,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;QAC5D,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;QACzB,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;KAC5B,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,CAM5B;IACC,IAAI,KAAsC,CAAA;IAC1C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC1C,MAAM,GAAG,GAAG,KAAK,EAAK,GAAW,EAAE,EAA6B,EAAc,EAAE;QAC9E,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAA;QACvC,MAAM,SAAS,GAAG,CAAC,MAAc,EAAU,EAAE;YAC3C,MAAM,CAAC,GAAG,MAAM,CAAA;YAChB,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;gBACnC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;YACvB,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC,CAAA;QACD,OAAO,EAAE,CAAC;YACR,GAAG;YACH,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,IAAI,EAAE,CAAC,CAAC,QAAQ;YAChB,KAAK;YACL,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI;SAC7B,CAAC,CAAA;IACJ,CAAC,CAAA;IACD,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE;QACf,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,GAAG;QACT,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;QAC1C,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QACtB,KAAK,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;KACtB,CAAA;AACH,CAAC"}
|
|
@@ -70,8 +70,8 @@ export function unavailableTransport() {
|
|
|
70
70
|
async send() {
|
|
71
71
|
throw new KetError({
|
|
72
72
|
code: 'E_TRANSPORT_UNAVAILABLE',
|
|
73
|
-
message: 'no outbound transport is configured for this
|
|
74
|
-
hint: 'provide serve.openTransport in the
|
|
73
|
+
message: 'no outbound transport is configured for this deployment',
|
|
74
|
+
hint: 'provide serve.openTransport in the deployment declaration',
|
|
75
75
|
});
|
|
76
76
|
},
|
|
77
77
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../packages/ketjs/src/server/transport/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../packages/ketjs/src/server/transport/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAuCjD,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,KAAa,EAAQ,EAAE;IACvD,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC9C,MAAM,IAAI,QAAQ,CAAC;YACjB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,GAAG,KAAK,qBAAqB;YACtC,IAAI,EAAE,uDAAuD;SAC9D,CAAC,CAAA;AACN,CAAC,CAAA;AAED,gFAAgF;AAChF,MAAM,UAAU,uBAAuB,CAAC,OAAwB;IAC9D,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QACzC,MAAM,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC,CAAA;IACpG,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE;QAC9E,MAAM,IAAI,QAAQ,CAAC;YACjB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,mDAAmD;SAC7D,CAAC,CAAA;IACJ,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,GAAG;QACrC,MAAM,IAAI,QAAQ,CAAC;YACjB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,gDAAgD;SAC1D,CAAC,CAAA;IACJ,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IACnD,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;QACzE,MAAM,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC,CAAA;IAC3G,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IAErC,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAA;IACzF,IAAI,CAAC,UAAU,CAAC,MAAM;QACpB,MAAM,IAAI,QAAQ,CAAC;YACjB,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,+CAA+C;SACzD,CAAC,CAAA;IACJ,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC9F,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QACrD,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE;YAClF,MAAM,IAAI,QAAQ,CAAC;gBACjB,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,oBAAoB,KAAK,WAAW;aAC9C,CAAC,CAAA;QACJ,SAAS,CAAC,WAAW,KAAK,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;QAChD,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS;YAAE,SAAS,CAAC,gBAAgB,KAAK,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;IACtF,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAClE,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;QAC9B,SAAS,CAAC,UAAU,IAAI,EAAE,EAAE,KAAK,CAAC,CAAA;IACpC,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,eAAe,CAC7B,SAA4B,EAC5B,OAA0B,EAC1B,SAAiB;IAEjB,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,IAAI,CAAC,OAAO,EAAE,OAAO;YACnB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBACrC,MAAM,IAAI,QAAQ,CAAC;oBACjB,IAAI,EAAE,uBAAuB;oBAC7B,OAAO,EAAE,IAAI,SAAS,oDAAoD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG;oBACzG,IAAI,EAAE,yFAAyF;iBAChG,CAAC,CAAA;YACJ,uBAAuB,CAAC,OAAO,CAAC,CAAA;YAChC,OAAO,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACzC,CAAC;KACF,CAAA;AACH,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,KAAK,CAAC,IAAI;YACR,MAAM,IAAI,QAAQ,CAAC;gBACjB,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,yDAAyD;gBAClE,IAAI,EAAE,2DAA2D;aAClE,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/dist/server/worker.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { OpenLog } from './log/index.ts';
|
|
2
|
+
import type { DeploymentSpec } from '../kernel/workspace.ts';
|
|
2
3
|
import type { Manifest } from '../types.ts';
|
|
3
4
|
export type WorkerLog = {
|
|
4
5
|
event: 'started' | 'completed' | 'retrying' | 'discarded' | 'cancelled' | 'handler_ignored_abort';
|
|
@@ -10,24 +11,39 @@ export type WorkerLog = {
|
|
|
10
11
|
attempt: number;
|
|
11
12
|
durationMs?: number;
|
|
12
13
|
error?: string;
|
|
14
|
+
/**
|
|
15
|
+
* The failure's stable code when it had one.
|
|
16
|
+
*
|
|
17
|
+
* Reducing a KetError to its message threw away the one part worth counting: a
|
|
18
|
+
* record saying "E_UNEXPECTED" for a failure the system named and expected is a
|
|
19
|
+
* record nobody can group or alert on.
|
|
20
|
+
*/
|
|
21
|
+
errorCode?: string;
|
|
13
22
|
};
|
|
14
23
|
export type BootedWorker = {
|
|
15
24
|
workerId: string;
|
|
16
25
|
manifest: Manifest;
|
|
17
26
|
/** Claim one fair pass without starting a permanent loop. */
|
|
18
27
|
runOnce(): Promise<number>;
|
|
28
|
+
/**
|
|
29
|
+
* Move every due schedule forward once, and enqueue what moved. Returns how many
|
|
30
|
+
* jobs were enqueued. `start()` does this on a timer; a test does it deliberately.
|
|
31
|
+
*/
|
|
32
|
+
sweepSchedules(): Promise<number>;
|
|
19
33
|
/** Keep claiming until no due work and all claimed jobs have settled. */
|
|
20
34
|
drain(): Promise<number>;
|
|
21
35
|
/** Start adaptive polling. Idempotent. */
|
|
22
36
|
start(): void;
|
|
23
37
|
close(): Promise<void>;
|
|
24
38
|
};
|
|
25
|
-
export declare function bootWorker(spec:
|
|
39
|
+
export declare function bootWorker(spec: DeploymentSpec, options?: {
|
|
26
40
|
env?: Record<string, string | undefined>;
|
|
27
41
|
workerId?: string;
|
|
28
42
|
now?: () => Date;
|
|
29
43
|
random?: () => number;
|
|
30
44
|
log?: (entry: WorkerLog) => void;
|
|
45
|
+
/** Redirect this worker's operational records, without editing the spec. */
|
|
46
|
+
openLog?: OpenLog;
|
|
31
47
|
}): Promise<BootedWorker>;
|
|
32
|
-
export declare function serveWorker(spec:
|
|
48
|
+
export declare function serveWorker(spec: DeploymentSpec, options?: Parameters<typeof bootWorker>[1]): Promise<BootedWorker>;
|
|
33
49
|
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/server/worker.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../../../packages/ketjs/src/server/worker.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAI7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,KAAK,EAAuB,QAAQ,EAAE,MAAM,aAAa,CAAA;AAGhE,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,uBAAuB,CAAA;IACjG,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,QAAQ,CAAA;IAClB,6DAA6D;IAC7D,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1B;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IACjC,yEAAyE;IACzE,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IACxB,0CAA0C;IAC1C,KAAK,IAAI,IAAI,CAAA;IACb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB,CAAA;AAiED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAA;IACrB,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;IAChC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAA;CACb,GACL,OAAO,CAAC,YAAY,CAAC,CAggBvB;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAM,GAC7C,OAAO,CAAC,YAAY,CAAC,CAMvB"}
|