@authhero/multi-tenancy 14.25.0 → 14.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/multi-tenancy.cjs +1 -1
- package/dist/multi-tenancy.mjs +390 -128
- package/dist/types/hooks/provisioning.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/init.d.ts.map +1 -1
- package/dist/types/operations/enqueue.d.ts +17 -0
- package/dist/types/operations/enqueue.d.ts.map +1 -0
- package/dist/types/operations/index.d.ts +9 -0
- package/dist/types/operations/index.d.ts.map +1 -0
- package/dist/types/operations/inline-executor.d.ts +40 -0
- package/dist/types/operations/inline-executor.d.ts.map +1 -0
- package/dist/types/operations/instance-id.d.ts +6 -0
- package/dist/types/operations/instance-id.d.ts.map +1 -0
- package/dist/types/operations/record-provision.d.ts +20 -0
- package/dist/types/operations/record-provision.d.ts.map +1 -0
- package/dist/types/operations/recorder.d.ts +29 -0
- package/dist/types/operations/recorder.d.ts.map +1 -0
- package/dist/types/operations/types.d.ts +59 -0
- package/dist/types/operations/types.d.ts.map +1 -0
- package/dist/types/rollout/index.d.ts +1 -1
- package/dist/types/rollout/index.d.ts.map +1 -1
- package/dist/types/rollout/payload.d.ts +38 -4
- package/dist/types/rollout/payload.d.ts.map +1 -1
- package/dist/types/types.d.ts +17 -1
- package/dist/types/types.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provisioning.d.ts","sourceRoot":"","sources":["../../../src/hooks/provisioning.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EAElB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"provisioning.d.ts","sourceRoot":"","sources":["../../../src/hooks/provisioning.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EAElB,MAAM,UAAU,CAAC;AAGlB;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,kBAAkB,GACzB,iBAAiB,CA2FnB"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -4,7 +4,8 @@ export * from "./types";
|
|
|
4
4
|
export { initMultiTenant } from "./init";
|
|
5
5
|
export type { MultiTenantConfig, MultiTenantResult, ControlPlaneConfig, } from "./init";
|
|
6
6
|
export { createDirectRolloutAdapter, projectControlPlaneDefaults, buildControlPlaneDefaultsPayload, applyControlPlaneDefaultsPayload, } from "./rollout";
|
|
7
|
-
export type { ControlPlaneRolloutAdapter, DefaultsProjectionConfig, DefaultsProjectionEntities, DefaultsProjectionResult, EntityProjectionOutcome, ProjectableDefaults, ControlPlaneDefaultsPayload, ControlPlaneDefaultsApplyResult, DefaultsPayloadEntities, } from "./rollout";
|
|
7
|
+
export type { ControlPlaneRolloutAdapter, DefaultsProjectionConfig, DefaultsProjectionEntities, DefaultsProjectionResult, EntityProjectionOutcome, ProjectableDefaults, ControlPlaneDefaultsPayload, ControlPlaneDefaultsApplyResult, ControlPlaneTenantSeed, DefaultsPayloadEntities, } from "./rollout";
|
|
8
|
+
export * from "./operations";
|
|
8
9
|
export { createSyncHooks } from "./hooks/sync";
|
|
9
10
|
export type { EntitySyncConfig, SyncHooksResult } from "./hooks/sync";
|
|
10
11
|
export { createTenantsOpenAPIRouter } from "./routes";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAajB,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,QAAQ,CAAC;AAKhB,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,gCAAgC,EAChC,gCAAgC,GACjC,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,+BAA+B,EAC/B,uBAAuB,GACxB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAajB,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,QAAQ,CAAC;AAKhB,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,gCAAgC,EAChC,gCAAgC,GACjC,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,EACnB,2BAA2B,EAC3B,+BAA+B,EAC/B,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,WAAW,CAAC;AAMnB,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAEtD,OAAO,EACL,4BAA4B,EAC5B,6BAA6B,EAC7B,kCAAkC,EAClC,yBAAyB,EACzB,wBAAwB,EACxB,6BAA6B,EAC7B,4BAA4B,EAC5B,mBAAmB,EACnB,mCAAmC,EACnC,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEhF,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AACpD,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,kBAAkB,GACzB,iBAAiB,CAgBnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB;cAE/C,oBAAoB;eACnB,qBAAqB;0CASnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB;;;;;;;kBAnD9C,oBAAoB;mBACnB,qBAAqB;;;IAwDhC;;;;;;;OAOG;6BAES,OAAO,UAAU,EAAE,YAAY,qBACtB;QAAE,oBAAoB,CAAC,EAAE,MAAM,CAAA;KAAE;EAOzD"}
|
package/dist/types/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,cAAc,EAEd,YAAY,EAGb,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,cAAc,EAEd,YAAY,EAGb,MAAM,UAAU,CAAC;AAWlB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGzD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,cAAc,EACd,aAAa,GAAG,yBAAyB,CAC1C;IACC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAElC;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,mBAAmB,CAAC,EAAE,oBAAoB,CAAC;IAE3C;;;;OAIG;IACH,IAAI,CAAC,EACD;QACE,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,GACD,KAAK,CAAC;IAEV;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE9B;;;OAGG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAEnC;;;OAGG;IACH,uBAAuB,CAAC,EAAE,cAAc,CAAC,yBAAyB,CAAC,CAAC;IAEpE;;;OAGG;IACH,WAAW,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;IAE5C;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE5C;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CAC3D;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,GAAG,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;IACpC,kCAAkC;IAClC,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CA+N5E"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TenantOperation } from "authhero";
|
|
2
|
+
import { EnqueueTenantOperationParams, TenantOperationExecutor, TenantOperationStores } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* Persist a new operation row and stamp its deterministic engine instance
|
|
5
|
+
* id. Shared by the executor enqueue path and the inline recording wrapper
|
|
6
|
+
* (`runRecordedTenantOperation`) so the row-first setup can't drift.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createOperationRow(stores: TenantOperationStores, params: EnqueueTenantOperationParams, engine: TenantOperationExecutor["engine"]): Promise<TenantOperation>;
|
|
9
|
+
/**
|
|
10
|
+
* Row-first enqueue: persist the operation as `pending`, write the
|
|
11
|
+
* deterministic engine instance id, then hand it to the executor. If
|
|
12
|
+
* `start` throws, the row is marked failed (unless the executor already
|
|
13
|
+
* finalized it) and the error is rethrown so callers keep their existing
|
|
14
|
+
* failure semantics.
|
|
15
|
+
*/
|
|
16
|
+
export declare function enqueueTenantOperation(stores: TenantOperationStores, executor: TenantOperationExecutor, params: EnqueueTenantOperationParams): Promise<TenantOperation>;
|
|
17
|
+
//# sourceMappingURL=enqueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enqueue.d.ts","sourceRoot":"","sources":["../../../src/operations/enqueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAIjB;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,qBAAqB,EAC7B,MAAM,EAAE,4BAA4B,EACpC,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,GACxC,OAAO,CAAC,eAAe,CAAC,CAyB1B;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,qBAAqB,EAC7B,QAAQ,EAAE,uBAAuB,EACjC,MAAM,EAAE,4BAA4B,GACnC,OAAO,CAAC,eAAe,CAAC,CAgC1B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type { StepConfig, StepRunner, StepReporter, TenantOperationStores, TenantOperationExecutor, EnqueueTenantOperationParams, } from "./types";
|
|
2
|
+
export { buildEngineInstanceId } from "./instance-id";
|
|
3
|
+
export { createOperationRecorder, errorToMessage, isTerminalStatus, } from "./recorder";
|
|
4
|
+
export type { OperationRecorder } from "./recorder";
|
|
5
|
+
export { createInlineExecutor, inlineStepRunner } from "./inline-executor";
|
|
6
|
+
export type { InlineExecutorConfig, TenantOperationDefinitions, TenantOperationStep, TenantOperationStepContext, } from "./inline-executor";
|
|
7
|
+
export { enqueueTenantOperation } from "./enqueue";
|
|
8
|
+
export { runRecordedTenantOperation } from "./record-provision";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/operations/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,YAAY,EACV,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { TenantOperation, TenantOperationKind } from "authhero";
|
|
2
|
+
import { StepRunner, TenantOperationExecutor, TenantOperationStores } from "./types";
|
|
3
|
+
export interface TenantOperationStepContext {
|
|
4
|
+
operation: TenantOperation;
|
|
5
|
+
step: StepRunner;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* A named, idempotent unit of work. The resolved value (when a plain
|
|
9
|
+
* object) is stored as the succeeded-event detail.
|
|
10
|
+
*/
|
|
11
|
+
export interface TenantOperationStep {
|
|
12
|
+
name: string;
|
|
13
|
+
run(ctx: TenantOperationStepContext): Promise<Record<string, unknown> | void>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Maps an operation kind to its ordered steps. Factories receive the
|
|
17
|
+
* operation row so steps can read the target tenant / versions — but they
|
|
18
|
+
* must resolve all heavy dependencies from their own closure, never from
|
|
19
|
+
* serialized state.
|
|
20
|
+
*/
|
|
21
|
+
export type TenantOperationDefinitions = Partial<Record<TenantOperationKind, (operation: TenantOperation) => TenantOperationStep[]>>;
|
|
22
|
+
/**
|
|
23
|
+
* Trivial StepRunner: no retries, no durability — runs the function
|
|
24
|
+
* immediately. Used by the inline executor so operation definitions are
|
|
25
|
+
* written against the same `StepRunner` seam the Workflows engine
|
|
26
|
+
* satisfies in phase 2.
|
|
27
|
+
*/
|
|
28
|
+
export declare const inlineStepRunner: StepRunner;
|
|
29
|
+
export interface InlineExecutorConfig {
|
|
30
|
+
stores: TenantOperationStores;
|
|
31
|
+
definitions: TenantOperationDefinitions;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Runs operations synchronously in the calling process, writing the same
|
|
35
|
+
* operation/event rows the durable executor writes. Used by tests and
|
|
36
|
+
* deployments without Cloudflare Workflows; `enqueueTenantOperation`
|
|
37
|
+
* resolves only after the run reaches a terminal status.
|
|
38
|
+
*/
|
|
39
|
+
export declare function createInlineExecutor(config: InlineExecutorConfig): TenantOperationExecutor;
|
|
40
|
+
//# sourceMappingURL=inline-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-executor.d.ts","sourceRoot":"","sources":["../../../src/operations/inline-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EACL,UAAU,EACV,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAGjB,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,eAAe,CAAC;IAC3B,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,GAAG,EAAE,0BAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;CAC/E;AAED;;;;;GAKG;AACH,MAAM,MAAM,0BAA0B,GAAG,OAAO,CAC9C,MAAM,CACJ,mBAAmB,EACnB,CAAC,SAAS,EAAE,eAAe,KAAK,mBAAmB,EAAE,CACtD,CACF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,UAe9B,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,WAAW,EAAE,0BAA0B,CAAC;CACzC;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,oBAAoB,GAC3B,uBAAuB,CAiDzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-id.d.ts","sourceRoot":"","sources":["../../../src/operations/instance-id.ts"],"names":[],"mappings":"AAiBA,wBAAgB,qBAAqB,CAAC,SAAS,EAAE;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,EAAE,EAAE,MAAM,CAAC;CACZ,GAAG,MAAM,CAcT"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { DataAdapters } from "authhero";
|
|
2
|
+
import { EnqueueTenantOperationParams, StepReporter } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* Wraps an existing inline lifecycle flow (today: the provisioning hook)
|
|
5
|
+
* so it is recorded as a tenant operation with step events — with NO
|
|
6
|
+
* behavior change:
|
|
7
|
+
*
|
|
8
|
+
* - When the operations adapters are absent, `fn` runs exactly as before.
|
|
9
|
+
* - Recording writes are best-effort (warn-only): a broken control-plane
|
|
10
|
+
* log must never block or fail a provision. This mirrors the existing
|
|
11
|
+
* markFailed philosophy in the WFP tenant hook.
|
|
12
|
+
* - `fn`'s error is always rethrown, preserving the caller's rollback
|
|
13
|
+
* semantics.
|
|
14
|
+
*
|
|
15
|
+
* `fn` receives a StepReporter it may call at step boundaries; if it never
|
|
16
|
+
* does (e.g. a custom onProvision that ignores the parameter), a single
|
|
17
|
+
* coarse step named after the operation kind is recorded instead.
|
|
18
|
+
*/
|
|
19
|
+
export declare function runRecordedTenantOperation(adapters: DataAdapters, params: EnqueueTenantOperationParams, fn: (report: StepReporter | undefined) => Promise<void>): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=record-provision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-provision.d.ts","sourceRoot":"","sources":["../../../src/operations/record-provision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EACL,4BAA4B,EAC5B,YAAY,EAEb,MAAM,SAAS,CAAC;AAcjB;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,4BAA4B,EACpC,EAAE,EAAE,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,GACtD,OAAO,CAAC,IAAI,CAAC,CAmEf"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { TenantOperation } from "authhero";
|
|
2
|
+
import { TenantOperationStores } from "./types";
|
|
3
|
+
export declare function errorToMessage(error: unknown): string;
|
|
4
|
+
/**
|
|
5
|
+
* Write-back helpers for the operation log, callable with just stores and
|
|
6
|
+
* an operation id. All writes are idempotent (safe under workflow-step
|
|
7
|
+
* replay): status transitions rewrite the same values, and duplicate
|
|
8
|
+
* events are harmless in an append-only step history.
|
|
9
|
+
*
|
|
10
|
+
* These helpers throw on write failure — in the executor path the log IS
|
|
11
|
+
* the deliverable. Callers that must never let recording break the actual
|
|
12
|
+
* work (the provisioning recording wrapper) catch and warn instead.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createOperationRecorder(stores: TenantOperationStores): {
|
|
15
|
+
markRunning(operationId: string, currentStep?: string): Promise<void>;
|
|
16
|
+
setCurrentStep(operationId: string, step: string): Promise<void>;
|
|
17
|
+
appendEvent(operationId: string, event: {
|
|
18
|
+
step: string;
|
|
19
|
+
outcome: "started" | "succeeded" | "failed" | "retried" | "skipped" | "reconciled";
|
|
20
|
+
detail?: Record<string, unknown>;
|
|
21
|
+
attempt?: number;
|
|
22
|
+
}): Promise<void>;
|
|
23
|
+
markSucceeded(operationId: string): Promise<void>;
|
|
24
|
+
markFailed(operationId: string, error: unknown): Promise<void>;
|
|
25
|
+
};
|
|
26
|
+
export type OperationRecorder = ReturnType<typeof createOperationRecorder>;
|
|
27
|
+
/** True when the operation can no longer transition (reconciler guard). */
|
|
28
|
+
export declare function isTerminalStatus(status: TenantOperation["status"]): boolean;
|
|
29
|
+
//# sourceMappingURL=recorder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../../../src/operations/recorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAIhD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAcrD;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,qBAAqB;6BAIlC,MAAM,gBAAgB,MAAM;gCAOzB,MAAM,QAAQ,MAAM;6BAKvC,MAAM,SACZ;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EACH,SAAS,GACT,WAAW,GACX,QAAQ,GACR,SAAS,GACT,SAAS,GACT,YAAY,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;+BAW8B,MAAM;4BAQT,MAAM,SAAS,OAAO;EAQvD;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE3E,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,OAAO,CAI3E"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { TenantOperation, TenantOperationEventsAdapter, TenantOperationKind, TenantOperationsAdapter } from "authhero";
|
|
2
|
+
/**
|
|
3
|
+
* Structural subset of Cloudflare Workflows' `WorkflowStepConfig`, kept
|
|
4
|
+
* platform-agnostic so operation orchestration can run against any engine.
|
|
5
|
+
*/
|
|
6
|
+
export interface StepConfig {
|
|
7
|
+
retries?: {
|
|
8
|
+
limit: number;
|
|
9
|
+
delay: string | number;
|
|
10
|
+
backoff?: "constant" | "linear" | "exponential";
|
|
11
|
+
};
|
|
12
|
+
timeout?: string | number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Structural subset of Cloudflare Workflows' `WorkflowStep`. The inline
|
|
16
|
+
* executor runs steps through a trivial implementation; the Workflows
|
|
17
|
+
* executor passes the engine's own `step` object, which satisfies this
|
|
18
|
+
* type structurally.
|
|
19
|
+
*/
|
|
20
|
+
export interface StepRunner {
|
|
21
|
+
do<T>(name: string, fn: () => Promise<T>): Promise<T>;
|
|
22
|
+
do<T>(name: string, config: StepConfig, fn: () => Promise<T>): Promise<T>;
|
|
23
|
+
}
|
|
24
|
+
/** The control-plane stores every operation write goes through. */
|
|
25
|
+
export interface TenantOperationStores {
|
|
26
|
+
tenantOperations: TenantOperationsAdapter;
|
|
27
|
+
tenantOperationEvents: TenantOperationEventsAdapter;
|
|
28
|
+
}
|
|
29
|
+
export interface EnqueueTenantOperationParams {
|
|
30
|
+
kind: TenantOperationKind;
|
|
31
|
+
/** Target tenant; null for fleet-level operations. */
|
|
32
|
+
tenant_id: string | null;
|
|
33
|
+
rollout_id?: string;
|
|
34
|
+
initiated_by?: string;
|
|
35
|
+
target_worker_version?: string;
|
|
36
|
+
target_database_version?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Executes an already-persisted operation row. Row-first contract: the
|
|
40
|
+
* caller (`enqueueTenantOperation`) creates the row and writes the
|
|
41
|
+
* deterministic `engine_instance_id` before calling `start`, so a crashed
|
|
42
|
+
* enqueue can never leave an untracked engine instance.
|
|
43
|
+
*
|
|
44
|
+
* - Inline executor: `start` runs the steps to a terminal status before
|
|
45
|
+
* resolving.
|
|
46
|
+
* - Cloudflare Workflows executor (phase 2): `start` returns as soon as
|
|
47
|
+
* the instance is created; the workflow owns all further writes.
|
|
48
|
+
*/
|
|
49
|
+
export interface TenantOperationExecutor {
|
|
50
|
+
readonly engine: "inline" | "cloudflare-workflows";
|
|
51
|
+
start(operation: TenantOperation): Promise<void>;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Step-boundary callback threaded through provisioning hooks so the
|
|
55
|
+
* existing inline provision flow can report coarse step outcomes without
|
|
56
|
+
* depending on this package (implementations accept it structurally).
|
|
57
|
+
*/
|
|
58
|
+
export type StepReporter = (step: string, outcome: "started" | "succeeded" | "failed", detail?: Record<string, unknown>) => Promise<void>;
|
|
59
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/operations/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,4BAA4B,EAC5B,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;QACvB,OAAO,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,aAAa,CAAC;KACjD,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtD,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC3E;AAED,mEAAmE;AACnE,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,uBAAuB,CAAC;IAC1C,qBAAqB,EAAE,4BAA4B,CAAC;CACrD;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,mBAAmB,CAAC;IAC1B,sDAAsD;IACtD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,sBAAsB,CAAC;IACnD,KAAK,CAAC,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,EAC3C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DefaultsProjectionConfig, DefaultsProjectionResult } from "./defaults-projection";
|
|
2
2
|
export type { DefaultsProjectionConfig, DefaultsProjectionEntities, DefaultsProjectionResult, EntityProjectionOutcome, ProjectableDefaults, } from "./defaults-projection";
|
|
3
3
|
export { projectControlPlaneDefaults } from "./defaults-projection";
|
|
4
|
-
export type { ControlPlaneDefaultsPayload, ControlPlaneDefaultsApplyResult, DefaultsPayloadEntities, } from "./payload";
|
|
4
|
+
export type { ControlPlaneDefaultsPayload, ControlPlaneDefaultsApplyResult, ControlPlaneTenantSeed, DefaultsPayloadEntities, } from "./payload";
|
|
5
5
|
export { buildControlPlaneDefaultsPayload, applyControlPlaneDefaultsPayload, } from "./payload";
|
|
6
6
|
/**
|
|
7
7
|
* A control plane rollout applies the control plane's state to one or more
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rollout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EAEzB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEpE,YAAY,EACV,2BAA2B,EAC3B,+BAA+B,EAC/B,uBAAuB,GACxB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,gCAAgC,EAChC,gCAAgC,GACjC,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;GAUG;AACH,MAAM,WAAW,0BAA0B;IACzC,0EAA0E;IAC1E,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAExE;;;OAGG;IACH,qBAAqB,CACnB,eAAe,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,wBAAwB,GAC/B,0BAA0B,CAa5B"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rollout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EAEzB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAEpE,YAAY,EACV,2BAA2B,EAC3B,+BAA+B,EAC/B,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,gCAAgC,EAChC,gCAAgC,GACjC,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;GAUG;AACH,MAAM,WAAW,0BAA0B;IACzC,0EAA0E;IAC1E,YAAY,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAExE;;;OAGG;IACH,qBAAqB,CACnB,eAAe,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,wBAAwB,GAC/B,0BAA0B,CAa5B"}
|
|
@@ -2,12 +2,39 @@ import { DataAdapters, SigningKey } from "authhero";
|
|
|
2
2
|
import { DefaultsProjectionEntities, DefaultsProjectionResult, EntityProjectionOutcome, ProjectableDefaults } from "./defaults-projection";
|
|
3
3
|
/**
|
|
4
4
|
* Entity flags for the wire payload — the six default entities plus signing
|
|
5
|
-
* keys, which only flow through the payload (build + apply),
|
|
6
|
-
* in-process `projectControlPlaneDefaults`.
|
|
5
|
+
* keys and tenant rows, which only flow through the payload (build + apply),
|
|
6
|
+
* never through the in-process `projectControlPlaneDefaults`.
|
|
7
7
|
*/
|
|
8
8
|
export type DefaultsPayloadEntities = DefaultsProjectionEntities & {
|
|
9
9
|
signingKeys?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Seed the FK-target `tenants` rows into the tenant DB before writing the
|
|
12
|
+
* keyed defaults. Defaults to `true`. See {@link ControlPlaneTenantSeed}.
|
|
13
|
+
*/
|
|
14
|
+
tenants?: boolean;
|
|
10
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* A minimal `tenants` row the payload carries so the tenant DB has the foreign
|
|
18
|
+
* key targets every other write depends on. D1 enforces the
|
|
19
|
+
* `tenant_id -> tenants(id)` FK, so a freshly provisioned tenant DB (which only
|
|
20
|
+
* has the empty `tenants` table the migrations create) rejects every
|
|
21
|
+
* tenant-scoped insert until these rows exist:
|
|
22
|
+
*
|
|
23
|
+
* 1. the **control-plane tenant id** — the projected defaults
|
|
24
|
+
* (connections / resource servers / hooks / …) are keyed under it; and
|
|
25
|
+
* 2. the **target tenant's own id** — the tenant's own users / connections /
|
|
26
|
+
* sessions reference it.
|
|
27
|
+
*
|
|
28
|
+
* Deliberately minimal (`id` + `friendly_name`): the FK only needs the row to
|
|
29
|
+
* exist, `friendly_name` is the only required create field, and keeping it
|
|
30
|
+
* minimal avoids shipping control-plane tenant settings/secrets into a tenant
|
|
31
|
+
* DB. Rows are create-if-missing on apply, so a re-sync never clobbers a row a
|
|
32
|
+
* tenant has since edited.
|
|
33
|
+
*/
|
|
34
|
+
export interface ControlPlaneTenantSeed {
|
|
35
|
+
id: string;
|
|
36
|
+
friendly_name: string;
|
|
37
|
+
}
|
|
11
38
|
/**
|
|
12
39
|
* Wire shape pushed from a control plane to a tenant database. Transport-
|
|
13
40
|
* agnostic: a Cloudflare dispatch push, an HTTP POST, or an in-process call all
|
|
@@ -23,10 +50,17 @@ export interface ControlPlaneDefaultsPayload extends ProjectableDefaults {
|
|
|
23
50
|
* verify tokens the control plane signed (e.g. forwarded admin tokens).
|
|
24
51
|
*/
|
|
25
52
|
signingKeys: SigningKey[];
|
|
53
|
+
/**
|
|
54
|
+
* FK-target `tenants` rows upserted into the tenant DB *before* any keyed
|
|
55
|
+
* default, so the `tenant_id -> tenants(id)` FK resolves. See
|
|
56
|
+
* {@link ControlPlaneTenantSeed}.
|
|
57
|
+
*/
|
|
58
|
+
tenants: ControlPlaneTenantSeed[];
|
|
26
59
|
}
|
|
27
|
-
/** Result of applying a payload — the projection result plus the key
|
|
60
|
+
/** Result of applying a payload — the projection result plus the key/tenant outcomes. */
|
|
28
61
|
export interface ControlPlaneDefaultsApplyResult extends DefaultsProjectionResult {
|
|
29
62
|
signingKeys: EntityProjectionOutcome;
|
|
63
|
+
tenants: EntityProjectionOutcome;
|
|
30
64
|
}
|
|
31
65
|
/**
|
|
32
66
|
* Reads the control plane's defaults + public signing keys off a control-plane
|
|
@@ -37,7 +71,7 @@ export interface ControlPlaneDefaultsApplyResult extends DefaultsProjectionResul
|
|
|
37
71
|
* (`-_exists_:tenant_id`) so the public-key query has a single source of truth;
|
|
38
72
|
* this layer only strips `pkcs7`.
|
|
39
73
|
*/
|
|
40
|
-
export declare function buildControlPlaneDefaultsPayload(controlPlaneAdapters: DataAdapters, controlPlaneTenantId: string, entities?: DefaultsPayloadEntities): Promise<ControlPlaneDefaultsPayload>;
|
|
74
|
+
export declare function buildControlPlaneDefaultsPayload(controlPlaneAdapters: DataAdapters, controlPlaneTenantId: string, entities?: DefaultsPayloadEntities, targetTenantId?: string): Promise<ControlPlaneDefaultsPayload>;
|
|
41
75
|
/**
|
|
42
76
|
* Applies a control-plane defaults payload to a tenant's own adapter, writing
|
|
43
77
|
* the rows under `controlPlaneTenantId` so the runtime fallback resolves them
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../src/rollout/payload.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,UAAU,EAKX,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,EAQpB,MAAM,uBAAuB,CAAC;AAE/B;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,0BAA0B,GAAG;IACjE,WAAW,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../src/rollout/payload.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,UAAU,EAKX,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,EAQpB,MAAM,uBAAuB,CAAC;AAE/B;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,0BAA0B,GAAG;IACjE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACtE;;;;;OAKG;IACH,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B;;;;OAIG;IACH,OAAO,EAAE,sBAAsB,EAAE,CAAC;CACnC;AAED,yFAAyF;AACzF,MAAM,WAAW,+BAAgC,SAAQ,wBAAwB;IAC/E,WAAW,EAAE,uBAAuB,CAAC;IACrC,OAAO,EAAE,uBAAuB,CAAC;CAClC;AAkBD;;;;;;;;GAQG;AACH,wBAAsB,gCAAgC,CACpD,oBAAoB,EAAE,YAAY,EAClC,oBAAoB,EAAE,MAAM,EAC5B,QAAQ,GAAE,uBAA4B,EACtC,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,2BAA2B,CAAC,CAqCtC;AA0FD;;;;;;;;;;;GAWG;AACH,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,2BAA2B,EACpC,cAAc,EAAE,YAAY,EAC5B,oBAAoB,EAAE,MAAM,EAC5B,OAAO,GAAE;IACP,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CAC/B,GACL,OAAO,CAAC,+BAA+B,CAAC,CAoD1C"}
|
package/dist/types/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CreateTenantParams, DataAdapters, Tenant } from "authhero";
|
|
2
2
|
import { Context } from "hono";
|
|
3
|
+
import type { StepReporter } from "./operations/types";
|
|
3
4
|
/**
|
|
4
5
|
* Bindings type from authhero core - simplified version for this package
|
|
5
6
|
*/
|
|
@@ -114,6 +115,11 @@ export interface DatabaseIsolationConfig {
|
|
|
114
115
|
*
|
|
115
116
|
* @param tenantId - The ID of the newly created tenant
|
|
116
117
|
*
|
|
118
|
+
* When the control plane carries the tenant-operations adapters, the
|
|
119
|
+
* hook receives an optional `StepReporter` — call it at step boundaries
|
|
120
|
+
* to surface per-step events in the operation history (issue #1026).
|
|
121
|
+
* Implementations may ignore it; a single coarse step is recorded then.
|
|
122
|
+
*
|
|
117
123
|
* @example
|
|
118
124
|
* ```typescript
|
|
119
125
|
* onProvision: async (tenantId) => {
|
|
@@ -123,7 +129,17 @@ export interface DatabaseIsolationConfig {
|
|
|
123
129
|
* }
|
|
124
130
|
* ```
|
|
125
131
|
*/
|
|
126
|
-
onProvision?: (tenantId: string) => Promise<void>;
|
|
132
|
+
onProvision?: (tenantId: string, report?: StepReporter) => Promise<void>;
|
|
133
|
+
/**
|
|
134
|
+
* Whether `afterCreate` wraps `onProvision` in
|
|
135
|
+
* `runRecordedTenantOperation` (default true). Set to `false` when the
|
|
136
|
+
* hook manages its own operation rows — e.g.
|
|
137
|
+
* `createWfpWorkflowProvisioningHook`, whose durable workflow creates
|
|
138
|
+
* and finalizes the operation itself; the wrapper would otherwise write
|
|
139
|
+
* a second, immediately-"succeeded" row for a run that is still in
|
|
140
|
+
* flight on the engine.
|
|
141
|
+
*/
|
|
142
|
+
recordProvisionOperations?: boolean;
|
|
127
143
|
/**
|
|
128
144
|
* Called when a tenant is being deleted to cleanup its database.
|
|
129
145
|
* Use this to delete the database, backup data, etc.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"type": "git",
|
|
12
12
|
"url": "https://github.com/markusahlstrand/authhero"
|
|
13
13
|
},
|
|
14
|
-
"version": "14.
|
|
14
|
+
"version": "14.26.0",
|
|
15
15
|
"description": "Multi-tenancy support for AuthHero with organization-based access control and per-tenant database isolation",
|
|
16
16
|
"files": [
|
|
17
17
|
"dist"
|
|
@@ -36,9 +36,9 @@
|
|
|
36
36
|
"typescript": "^5.6.0",
|
|
37
37
|
"vite": "^8.0.14",
|
|
38
38
|
"vitest": "^4.1.7",
|
|
39
|
-
"@authhero/
|
|
40
|
-
"authhero": "
|
|
41
|
-
"
|
|
39
|
+
"@authhero/adapter-interfaces": "3.6.0",
|
|
40
|
+
"@authhero/kysely-adapter": "11.13.0",
|
|
41
|
+
"authhero": "8.15.0"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"zod": "^4.4.3"
|