@classytic/arc 2.32.0 → 2.33.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/README.md +1 -1
- package/bin/arc.js +58 -17
- package/dist/{BaseController-Dk34dxhI.mjs → BaseController-CaQC5EXX.mjs} +293 -33
- package/dist/{EventTransport-2uVV34WU.d.mts → EventTransport-BEVP50ka.d.mts} +16 -0
- package/dist/{EventTransport-BV10D0oG.mjs → EventTransport-tq4CEB-q.mjs} +39 -2
- package/dist/{HookSystem-vimw5D7Z.mjs → HookSystem-DqXkMXkB.mjs} +2 -2
- package/dist/{ResourceRegistry-BVr7PgA0.mjs → ResourceRegistry-DoALUlOO.mjs} +3 -2
- package/dist/{actionPermissions-Dti7ebyv.mjs → actionPermissions-CUeCmpUd.mjs} +1 -1
- package/dist/audit/index.d.mts +2 -2
- package/dist/audit/index.mjs +2 -2
- package/dist/auth/audit.mjs +1 -1
- package/dist/auth/index.d.mts +2 -2
- package/dist/auth/index.mjs +39 -7
- package/dist/auth/redis-session.mjs +1 -1
- package/dist/{authorizationDecision-__T3EJDA.mjs → authorizationDecision-B3mP_QTy.mjs} +2 -2
- package/dist/{types-B7XeLEgK.d.mts → base-Csjc2oF-.d.mts} +74 -74
- package/dist/{buildHandler-Dn7rzUJo.mjs → buildHandler-DLE9xX-V.mjs} +4 -4
- package/dist/cache/index.mjs +4 -4
- package/dist/{caching-DFJqHyFs.mjs → caching-BcGmvnHh.mjs} +2 -2
- package/dist/cleanup/index.d.mts +17 -5
- package/dist/cleanup/index.mjs +240 -7
- package/dist/cli/commands/describe.d.mts +1 -1
- package/dist/cli/commands/describe.mjs +3 -3
- package/dist/cli/commands/docs.mjs +3 -3
- package/dist/cli/commands/doctor.mjs +1 -1
- package/dist/cli/commands/generate.mjs +2 -2
- package/dist/cli/commands/init.mjs +2 -2
- package/dist/cli/commands/introspect.mjs +2 -2
- package/dist/cli/index.mjs +3 -3
- package/dist/{constants-J99LGTJI.mjs → constants-BxCoxmiN.mjs} +1 -1
- package/dist/context/index.mjs +3 -3
- package/dist/core/index.d.mts +2 -2
- package/dist/core/index.mjs +7 -7
- package/dist/{core-BwwmNSp7.mjs → core-dxhcHhUD.mjs} +3 -3
- package/dist/{createActionRouter-DkJZWo0m.mjs → createActionRouter-DVpoA0do.mjs} +8 -8
- package/dist/{createAggregationRouter-B1exOVD8.mjs → createAggregationRouter-B_B48JZ-.mjs} +7 -7
- package/dist/{createApp-Bv0m-Q6_.mjs → createApp-CLGegqiG.mjs} +128 -24
- package/dist/{defineAggregation-gX4No1gt.mjs → defineAggregation-Nv-DwfOf.mjs} +1 -1
- package/dist/{defineResource-XFPPUu2c.mjs → defineResource-DR9vsUYy.mjs} +297 -23
- package/dist/discovery/index.mjs +1 -1
- package/dist/docs/index.d.mts +1 -1
- package/dist/docs/index.mjs +3 -3
- package/dist/{elevation-DNXXxgjl.mjs → elevation-B0tlY8y1.mjs} +4 -4
- package/dist/encryption/index.mjs +3 -3
- package/dist/{errorHandler-B2AZUJUj.mjs → errorHandler-C7xBqHsI.mjs} +42 -5
- package/dist/{errorHandler-CpYUJmPA.d.mts → errorHandler-DI5AN2b5.d.mts} +14 -3
- package/dist/{errors-Bh1KK5ps.mjs → errors-Cd_yy7aW.mjs} +1 -1
- package/dist/{eventPlugin-GF5nnBIq.d.mts → eventPlugin-DSNEZWfV.d.mts} +29 -1
- package/dist/{eventPlugin-Dk_TyXeE.mjs → eventPlugin-Dar8qRaj.mjs} +65 -9
- package/dist/events/index.d.mts +5 -351
- package/dist/events/index.mjs +5 -780
- package/dist/events/transports/redis-stream-entry.d.mts +1 -1
- package/dist/events/transports/redis-stream-entry.mjs +1 -1
- package/dist/events/transports/redis.d.mts +1 -1
- package/dist/events/transports/redis.mjs +1 -1
- package/dist/factory/index.d.mts +20 -5
- package/dist/factory/index.mjs +7 -7
- package/dist/{fastify-augmentation-BppG5bMT.d.mts → fastify-augmentation-DVsTAy6X.d.mts} +3 -3
- package/dist/{fields-DEi65pGj.mjs → fields-CojeUkS4.mjs} +1 -1
- package/dist/{generate-CRSG0jTv.mjs → generate-DiB0nHPR.mjs} +2 -2
- package/dist/{headers-BXjQYbeC.mjs → headers-CveNO9gR.mjs} +2 -2
- package/dist/{health-5XnTa2uo.mjs → health-CasG2A28.mjs} +1 -1
- package/dist/hooks/index.d.mts +1 -1
- package/dist/hooks/index.mjs +2 -2
- package/dist/idempotency/index.d.mts +45 -1
- package/dist/idempotency/index.mjs +91 -9
- package/dist/idempotency/redis.mjs +1 -1
- package/dist/{index-zq6VrjaB.d.mts → index-B-DvUzsr.d.mts} +12 -2
- package/dist/{index-CpzxqePp.d.mts → index-BcR2bFZQ.d.mts} +707 -373
- package/dist/{index-DXlHwvuE.d.mts → index-Brin0ODU.d.mts} +4 -4
- package/dist/{index-ZWhLTp_s.d.mts → index-C5NnMEKF.d.mts} +1 -1
- package/dist/{index-C-481Zf2.d.mts → index-ugr1tQlW.d.mts} +17 -1
- package/dist/index.d.mts +6 -6
- package/dist/index.mjs +11 -11
- package/dist/{init-BbfP8aky.mjs → init-mdJ-v4Xp.mjs} +18 -12
- package/dist/integrations/event-gateway.d.mts +1 -1
- package/dist/integrations/event-gateway.mjs +2 -2
- package/dist/integrations/index.d.mts +2 -2
- package/dist/integrations/index.mjs +1 -1
- package/dist/integrations/jobs/index.d.mts +1 -1
- package/dist/integrations/jobs/index.mjs +99 -97
- package/dist/integrations/mcp/index.d.mts +12 -3
- package/dist/integrations/mcp/index.mjs +2 -2
- package/dist/integrations/mcp/testing.d.mts +1 -1
- package/dist/integrations/mcp/testing.mjs +2 -2
- package/dist/integrations/streamline.mjs +3 -3
- package/dist/integrations/webhooks.d.mts +124 -1
- package/dist/integrations/webhooks.mjs +180 -2
- package/dist/integrations/websocket-pushref-redis.mjs +1 -1
- package/dist/integrations/websocket-redis.mjs +1 -1
- package/dist/integrations/websocket.mjs +1 -1
- package/dist/{interface-BP4IJCBO.mjs → interface-DznJrm9R.mjs} +1 -1
- package/dist/{jsonBody-DDSR2HFl.mjs → jsonBody-CfGH-GxO.mjs} +2 -2
- package/dist/{keys-B-HBTGXl.mjs → keys-WeKvY1dE.mjs} +1 -1
- package/dist/{loadResources-DisEAmkm.mjs → loadResources-Bj-aSsXi.mjs} +2 -2
- package/dist/{loadResourcesFromEntry-D1MJp13f.mjs → loadResourcesFromEntry-DwaxNcE2.mjs} +2 -2
- package/dist/logger/index.mjs +1 -1
- package/dist/{mcpPlugin-CpfVpKHE.mjs → mcpPlugin-aJg5TqHi.mjs} +60 -21
- package/dist/{memory-DsuWnj4T.mjs → memory-qYSB7rMQ.mjs} +2 -2
- package/dist/{metrics-DdQL8syd.mjs → metrics-D7uchLjN.mjs} +2 -2
- package/dist/middleware/index.d.mts +1 -1
- package/dist/middleware/index.mjs +3 -3
- package/dist/migrations/index.mjs +2 -2
- package/dist/{module-Br81am6m.mjs → module-CwKsgZXp.mjs} +1 -1
- package/dist/{multipartBody-BnkBLN7v.mjs → multipartBody-4w-S3-PU.mjs} +1 -1
- package/dist/{openapi-DIRzvxC0.mjs → openapi-BN5cQaO2.mjs} +6 -6
- package/dist/outbox-admin/index.d.mts +2 -2
- package/dist/outbox-admin/index.mjs +4 -4
- package/dist/outbox-module-CXB79bvt.mjs +839 -0
- package/dist/outbox-module-D-VFq37T.d.mts +368 -0
- package/dist/permissions/index.d.mts +2 -2
- package/dist/permissions/index.mjs +5 -5
- package/dist/{permissions-Dl_m0NCe.mjs → permissions-BAfwgBxc.mjs} +25 -6
- package/dist/{pipe-ELHCP3zj.mjs → pipe-BzzoEhHj.mjs} +2 -2
- package/dist/pipeline/index.d.mts +1 -1
- package/dist/pipeline/index.mjs +2 -2
- package/dist/{pipeline-CPA-jx0M.mjs → pipeline-q69DZzgG.mjs} +6 -6
- package/dist/plugins/index.d.mts +6 -6
- package/dist/plugins/index.mjs +16 -16
- package/dist/plugins/response-cache.mjs +2 -2
- package/dist/plugins/tracing-entry.mjs +2 -2
- package/dist/{pluralize-C2ZkKbsn.mjs → pluralize-B7xf8qZF.mjs} +1 -1
- package/dist/{preloadResources-CDs87fTw.mjs → preloadResources-BkyqeTDz.mjs} +1 -1
- package/dist/{preloadResources-T1hmlTEZ.d.mts → preloadResources-g07ldtzh.d.mts} +30 -7
- package/dist/presets/filesUpload.d.mts +2 -2
- package/dist/presets/filesUpload.mjs +5 -5
- package/dist/presets/index.d.mts +2 -2
- package/dist/presets/index.mjs +2 -2
- package/dist/presets/multiTenant.d.mts +1 -1
- package/dist/presets/multiTenant.mjs +3 -3
- package/dist/presets/search.d.mts +2 -2
- package/dist/presets/search.mjs +2 -2
- package/dist/{presets-Dntd_pUO.mjs → presets-D-h0uWtP.mjs} +4 -4
- package/dist/projection-BKM0Ui-s.mjs +42 -0
- package/dist/{queryCachePlugin-Dhps-Ldt.mjs → queryCachePlugin-DhsZ0ZIc.mjs} +49 -7
- package/dist/{rateLimit-C7mmAGs3.mjs → rateLimit-D4-ASwsI.mjs} +2 -2
- package/dist/{rateLimitKey-CccEFBfk.mjs → rateLimitKey-XngqVNEV.mjs} +1 -1
- package/dist/{realtime-DVvVZZFz.mjs → realtime-CTkv3O59.mjs} +9 -9
- package/dist/{redis-stream-qN6A-RFv.d.mts → redis-stream-mwLWlfHG.d.mts} +1 -1
- package/dist/{registerRoute-B_QrjYZS.mjs → registerRoute-DNnd3vkz.mjs} +4 -4
- package/dist/registry/index.d.mts +3 -3
- package/dist/registry/index.mjs +3 -3
- package/dist/{registry-DqUmzA9W.mjs → registry-CLxCR5LF.mjs} +2 -2
- package/dist/{renewingLease-BpP9wwj7.mjs → renewingLease-BnWtbA2U.mjs} +1 -1
- package/dist/{replyHelpers-DS-P0b32.mjs → replyHelpers-BSBVCwL3.mjs} +2 -2
- package/dist/{repositoryFilter-DotlxG3L.mjs → repositoryFilter-DKny7PDn.mjs} +1 -1
- package/dist/{requestContext-B6vQF-sy.mjs → requestContext-uYE35JxI.mjs} +1 -1
- package/dist/{rolldown-runtime-BhflRrBs.mjs → rolldown-runtime-DNg-KNCk.mjs} +1 -1
- package/dist/runtimeCapabilities-Dm88DaTW.mjs +49 -0
- package/dist/{schedules-C2Q3uv2d.mjs → schedules-CAcZgia0.mjs} +3 -3
- package/dist/{schemaConverter-Crjvczi_.mjs → schemaConverter-XH1RZRyu.mjs} +1 -1
- package/dist/{schemaIR-CnyKK_1j.mjs → schemaIR-CDvclAew.mjs} +2 -2
- package/dist/schemas/index.mjs +1 -1
- package/dist/scim/index.mjs +2 -2
- package/dist/scope/index.mjs +5 -5
- package/dist/{scope-afz_Ieek.mjs → scope-BaWcqBvr.mjs} +4 -4
- package/dist/{simpleEqualityMatcher-C4KiMWUa.mjs → simpleEqualityMatcher-Se8VrsaP.mjs} +1 -1
- package/dist/{sse-B9P4Y-UI.mjs → sse-Cf0jUHsh.mjs} +5 -5
- package/dist/{sseStream-B3zb_d1h.mjs → sseStream-Bvpi-UXQ.mjs} +2 -2
- package/dist/{store-helpers-DmEMHlPQ.mjs → store-helpers-B88p99Z2.mjs} +1 -1
- package/dist/{streaming-DPZdQmDz.mjs → streaming-DsT1B5zJ.mjs} +1 -1
- package/dist/{subscribe-helpers-sp5xTDVA.mjs → subscribe-helpers-CLIOHsOK.mjs} +2 -2
- package/dist/sync/changelog.mjs +1 -1
- package/dist/testing/cleanupStoreContract.d.mts +1 -1
- package/dist/testing/cleanupStoreContract.mjs +3 -1
- package/dist/testing/index.d.mts +24 -12
- package/dist/testing/index.mjs +24 -12
- package/dist/testing/outboxStoreContract.mjs +1 -1
- package/dist/testing/storageContract.mjs +1 -1
- package/dist/{transactionContext-BvLKvOIL.mjs → transactionContext-BYtWnwAS.mjs} +1 -1
- package/dist/{typeGuards-B_5-hKjJ.mjs → typeGuards-jjKJDN13.mjs} +1 -1
- package/dist/types/index.d.mts +3 -3
- package/dist/types/index.mjs +1 -1
- package/dist/types/storage.mjs +1 -1
- package/dist/{types-CT5vu6M0.d.mts → types-BcTumAz_.d.mts} +41 -7
- package/dist/{types-CwcUQ610.d.mts → types-BfC83KsP.d.mts} +15 -1
- package/dist/{types-DXYX7dIR.mjs → types-CoqIRrkY.mjs} +4 -4
- package/dist/{types-C4QE8qnm.d.mts → types-DVLddu2q.d.mts} +144 -1
- package/dist/usage/index.d.mts +1 -1
- package/dist/usage/index.mjs +0 -0
- package/dist/{userHelpers-BNsOXzOd.mjs → userHelpers-CWF5pbZD.mjs} +1 -1
- package/dist/utils/index.d.mts +57 -5
- package/dist/utils/index.mjs +12 -11
- package/dist/{utils-BtOha_Sp.mjs → utils-h1V_sT-t.mjs} +38 -7
- package/dist/{validate-PMCPR9El.mjs → validate-CdQlz52F.mjs} +2 -2
- package/dist/{versioning-D_rhHfZm.d.mts → versioning-DEs-_hFi.d.mts} +1 -1
- package/dist/{versioning-CKv2jz_U.mjs → versioning-rZbyLVD-.mjs} +3 -3
- package/package.json +17 -16
- package/skills/arc/SKILL.md +96 -4
- package/skills/arc/references/api-reference.md +19 -0
- package/skills/arc/references/production.md +2 -2
- package/dist/projection-CjHhM5W1.mjs +0 -18
|
@@ -4,6 +4,21 @@ import { DeadLetteredEvent, DomainEvent, DomainEvent as DomainEvent$1, EventHand
|
|
|
4
4
|
interface MemoryEventTransportOptions {
|
|
5
5
|
/** Logger for error/warning messages (default: console) */
|
|
6
6
|
logger?: EventLogger;
|
|
7
|
+
/**
|
|
8
|
+
* What a THROWING subscriber does to `publish()`.
|
|
9
|
+
*
|
|
10
|
+
* - `'log'` (default) — logged, `publish()` still resolves. The
|
|
11
|
+
* fire-and-forget bus contract: one broken analytics subscriber must not
|
|
12
|
+
* fail a publisher's request.
|
|
13
|
+
* - `'throw'` — REJECTS with an `AggregateError` after running every
|
|
14
|
+
* handler. Required for at-least-once PROCESSING: with this transport
|
|
15
|
+
* `publish()` IS the handling, so a swallowed error reads to an outbox
|
|
16
|
+
* relay as delivery and the row is acknowledged, never retried.
|
|
17
|
+
*
|
|
18
|
+
* Retry redelivers to ALL matching handlers (no per-handler cursor), so
|
|
19
|
+
* handlers must be idempotent. Every handler runs before the rejection.
|
|
20
|
+
*/
|
|
21
|
+
onHandlerError?: "log" | "throw";
|
|
7
22
|
}
|
|
8
23
|
/**
|
|
9
24
|
* In-memory event transport (default).
|
|
@@ -16,6 +31,7 @@ declare class MemoryEventTransport implements EventTransport {
|
|
|
16
31
|
readonly name = "memory";
|
|
17
32
|
private handlers;
|
|
18
33
|
private logger;
|
|
34
|
+
private onHandlerError;
|
|
19
35
|
constructor(options?: MemoryEventTransportOptions);
|
|
20
36
|
publish(event: DomainEvent): Promise<void>;
|
|
21
37
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
1
|
+
/*! @classytic/arc v2.34.0 | MIT | https://classytic.com */
|
|
2
2
|
import { createEvent, matchEventPattern } from "@classytic/primitives/events";
|
|
3
3
|
//#region src/events/EventTransport.ts
|
|
4
4
|
/**
|
|
@@ -45,6 +45,29 @@ import { createEvent, matchEventPattern } from "@classytic/primitives/events";
|
|
|
45
45
|
* public `events/index.ts` barrel stays clean.
|
|
46
46
|
*/
|
|
47
47
|
/**
|
|
48
|
+
* Decorator key holding the RAW `EventTransport` an app registered.
|
|
49
|
+
*
|
|
50
|
+
* `fastify.events` is a request-facing FACADE — different signature
|
|
51
|
+
* (`publish(type, payload, meta?)`) and fail-open by design — so machinery
|
|
52
|
+
* that must observe publish failure (the outbox relay) resolves the transport
|
|
53
|
+
* through this key instead. `Symbol.for` so it still matches across two arc
|
|
54
|
+
* copies in one dependency graph; deliberately NOT on the public
|
|
55
|
+
* `EventsDecorator` surface.
|
|
56
|
+
*/
|
|
57
|
+
const ARC_EVENT_TRANSPORT = Symbol.for("arc.eventTransport");
|
|
58
|
+
/**
|
|
59
|
+
* Read the raw transport an app registered, or `undefined` when the events
|
|
60
|
+
* plugin was never registered (or predates this key).
|
|
61
|
+
*
|
|
62
|
+
* Callers decide what absence means: the outbox treats it as "no transport",
|
|
63
|
+
* which is a boot-time error rather than a silent no-op relay.
|
|
64
|
+
*/
|
|
65
|
+
function resolveEventTransport(fastify) {
|
|
66
|
+
if (typeof fastify !== "object" || fastify === null) return void 0;
|
|
67
|
+
const found = Reflect.get(fastify, ARC_EVENT_TRANSPORT);
|
|
68
|
+
return typeof found === "object" && found !== null ? found : void 0;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
48
71
|
* In-memory event transport (default).
|
|
49
72
|
*
|
|
50
73
|
* Events are delivered synchronously within the process. Not suitable for
|
|
@@ -55,17 +78,31 @@ var MemoryEventTransport = class {
|
|
|
55
78
|
name = "memory";
|
|
56
79
|
handlers = /* @__PURE__ */ new Map();
|
|
57
80
|
logger;
|
|
81
|
+
onHandlerError;
|
|
58
82
|
constructor(options) {
|
|
59
83
|
this.logger = options?.logger ?? console;
|
|
84
|
+
this.onHandlerError = options?.onHandlerError ?? "log";
|
|
60
85
|
}
|
|
61
86
|
async publish(event) {
|
|
62
87
|
const allHandlers = /* @__PURE__ */ new Set();
|
|
63
88
|
for (const [pattern, handlers] of this.handlers) if (matchEventPattern(pattern, event.type)) for (const h of handlers) allHandlers.add(h);
|
|
89
|
+
const failures = [];
|
|
64
90
|
for (const handler of allHandlers) try {
|
|
65
91
|
await handler(event);
|
|
66
92
|
} catch (err) {
|
|
67
93
|
this.logger.error(`[EventTransport] Handler error for ${event.type}:`, err);
|
|
94
|
+
failures.push(err);
|
|
68
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Rejecting is what lets an OUTBOX see the failure. With this transport,
|
|
98
|
+
* `publish()` IS the handling — synchronous and in-process — so resolving
|
|
99
|
+
* after a handler threw tells the relay the event was delivered, and the
|
|
100
|
+
* row is acknowledged and never retried. Measured: handler throws once,
|
|
101
|
+
* `relayBatch()` reports `relayed: 1, publishFailed: 0`, and the next tick
|
|
102
|
+
* finds nothing. A broker-backed transport has no such ambiguity — publish
|
|
103
|
+
* means "durably handed off" and redelivery is the consumer group's job.
|
|
104
|
+
*/
|
|
105
|
+
if (failures.length > 0 && this.onHandlerError === "throw") throw new AggregateError(failures, `[EventTransport] ${failures.length} handler(s) failed for ${event.type}`);
|
|
69
106
|
}
|
|
70
107
|
/**
|
|
71
108
|
* Reference `publishMany` implementation — delegates to `publish()` in order.
|
|
@@ -101,4 +138,4 @@ var MemoryEventTransport = class {
|
|
|
101
138
|
}
|
|
102
139
|
};
|
|
103
140
|
//#endregion
|
|
104
|
-
export {
|
|
141
|
+
export { resolveEventTransport as i, MemoryEventTransport as n, createEvent as r, ARC_EVENT_TRANSPORT as t };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import { t as buildRequestScopeProjection } from "./projection-
|
|
1
|
+
/*! @classytic/arc v2.34.0 | MIT | https://classytic.com */
|
|
2
|
+
import { t as buildRequestScopeProjection } from "./projection-BKM0Ui-s.mjs";
|
|
3
3
|
//#region src/hooks/HookSystem.ts
|
|
4
4
|
/**
|
|
5
5
|
* Hook System
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import "./constants-
|
|
1
|
+
/*! @classytic/arc v2.34.0 | MIT | https://classytic.com */
|
|
2
|
+
import "./constants-BxCoxmiN.mjs";
|
|
3
3
|
//#region src/registry/ResourceRegistry.ts
|
|
4
4
|
/**
|
|
5
5
|
* Resource Registry
|
|
@@ -60,6 +60,7 @@ var ResourceRegistry = class {
|
|
|
60
60
|
summary: r.summary,
|
|
61
61
|
description: r.description,
|
|
62
62
|
permissions: r.permissions,
|
|
63
|
+
capability: r.capability,
|
|
63
64
|
raw: r.rawHandler !== void 0,
|
|
64
65
|
schema: r.schema
|
|
65
66
|
})),
|
package/dist/audit/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
|
-
import "../
|
|
3
|
-
import
|
|
2
|
+
import { d as UserBase } from "../base-Csjc2oF-.mjs";
|
|
3
|
+
import "../index-BcR2bFZQ.mjs";
|
|
4
4
|
import { FastifyPluginAsync } from "fastify";
|
|
5
5
|
import { RepositoryLike } from "@classytic/repo-core/adapter";
|
|
6
6
|
//#region src/audit/stores/interface.d.ts
|
package/dist/audit/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import { t as transactionContext } from "../transactionContext-
|
|
1
|
+
/*! @classytic/arc v2.34.0 | MIT | https://classytic.com */
|
|
2
|
+
import { t as transactionContext } from "../transactionContext-BYtWnwAS.mjs";
|
|
3
3
|
import { and, anyOf, eq, gte, lt, lte } from "@classytic/repo-core/filter";
|
|
4
4
|
import fp from "fastify-plugin";
|
|
5
5
|
//#region src/audit/repository-audit-adapter.ts
|
package/dist/auth/audit.mjs
CHANGED
package/dist/auth/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { l as PermissionCheck } from "../base-Csjc2oF-.mjs";
|
|
3
|
+
import { Ft as AuthPluginOptions, Pt as AuthHelpers } from "../index-BcR2bFZQ.mjs";
|
|
4
4
|
import { t as ExternalOpenApiPaths } from "../externalPaths-CmGOxOtD.mjs";
|
|
5
5
|
import { a as SessionManagerOptions, c as createSessionManager, i as SessionData, n as MemorySessionStoreOptions, o as SessionManagerResult, r as SessionCookieOptions, s as SessionStore, t as MemorySessionStore } from "../sessionManager-qimlKV0P.mjs";
|
|
6
6
|
import { FastifyPluginAsync, FastifyReply as FastifyReply$1, FastifyRequest } from "fastify";
|
package/dist/auth/index.mjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import { d as createDomainError, l as UnauthorizedError, p as isArcError, t as ArcError } from "../errors-
|
|
3
|
-
import { n as requireSingleHeaderValue } from "../headers-
|
|
4
|
-
import { n as getUserRoles, r as normalizeRoles } from "../userHelpers-
|
|
5
|
-
import { o as toJsonSchema } from "../schemaConverter-
|
|
6
|
-
import { E as requireOrgRole, T as requireOrgMembership, k as requireTeamMembership } from "../permissions-
|
|
1
|
+
/*! @classytic/arc v2.34.0 | MIT | https://classytic.com */
|
|
2
|
+
import { d as createDomainError, l as UnauthorizedError, p as isArcError, t as ArcError } from "../errors-Cd_yy7aW.mjs";
|
|
3
|
+
import { n as requireSingleHeaderValue } from "../headers-CveNO9gR.mjs";
|
|
4
|
+
import { n as getUserRoles, r as normalizeRoles } from "../userHelpers-CWF5pbZD.mjs";
|
|
5
|
+
import { o as toJsonSchema } from "../schemaConverter-XH1RZRyu.mjs";
|
|
6
|
+
import { E as requireOrgRole, T as requireOrgMembership, k as requireTeamMembership } from "../permissions-BAfwgBxc.mjs";
|
|
7
|
+
import { isProductionEnv } from "@classytic/primitives/environment";
|
|
7
8
|
import { createHmac, randomUUID, timingSafeEqual } from "node:crypto";
|
|
8
9
|
import fp from "fastify-plugin";
|
|
9
10
|
//#region src/auth/authPlugin.ts
|
|
@@ -861,6 +862,25 @@ function createBetterAuthAdapter(options) {
|
|
|
861
862
|
if (openapiOpt === false) extractedOpenApi = void 0;
|
|
862
863
|
else if (typeof openapiOpt === "object") extractedOpenApi = openapiOpt;
|
|
863
864
|
const betterAuthPlugin = async (fastify) => {
|
|
865
|
+
/**
|
|
866
|
+
* `orgContext` without the `organization()` plugin is a SILENT
|
|
867
|
+
* misconfiguration, so it fails at boot instead.
|
|
868
|
+
*
|
|
869
|
+
* Arc resolves org membership through `auth.api.getActiveMember` /
|
|
870
|
+
* `getActiveMemberRole`. Absent the plugin those methods do not exist,
|
|
871
|
+
* every lookup returns null, and `request.scope` silently stays
|
|
872
|
+
* `'authenticated'` — so `requireOrgId()` throws 403 on every
|
|
873
|
+
* tenant-scoped route. It fails CLOSED (no data leak), but the symptom
|
|
874
|
+
* points nowhere near the cause: the host sees blanket 403s and no
|
|
875
|
+
* indication that a plugin is missing. One check at registration turns
|
|
876
|
+
* that into a sentence.
|
|
877
|
+
*/
|
|
878
|
+
if (orgEnabled) {
|
|
879
|
+
if (!(pickApiMethod(auth, "getActiveMember", "organization") !== void 0 || pickApiMethod(auth, "getActiveMemberRole", "organization") !== void 0)) throw new ArcError("createBetterAuthAdapter({ orgContext: true }) requires Better Auth's `organization()` plugin — `auth.api.getActiveMember` / `getActiveMemberRole` are missing. Without it arc can never resolve membership, so request.scope stays 'authenticated' and every tenant-scoped route answers 403. Add `organization()` to your betterAuth({ plugins }), or drop `orgContext`.", {
|
|
880
|
+
code: "BETTER_AUTH_ORG_PLUGIN_MISSING",
|
|
881
|
+
statusCode: 500
|
|
882
|
+
});
|
|
883
|
+
}
|
|
864
884
|
const routeOpts = options.rateLimit && typeof options.rateLimit === "object" ? { config: { rateLimit: options.rateLimit } } : {};
|
|
865
885
|
fastify.all(`${normalizedBase}/*`, routeOpts, async (request, reply) => {
|
|
866
886
|
try {
|
|
@@ -994,7 +1014,19 @@ function buildSetCookieHeader(name, value, maxAgeSeconds, options) {
|
|
|
994
1014
|
`Path=${options.path ?? "/"}`
|
|
995
1015
|
];
|
|
996
1016
|
if (options.httpOnly !== false) parts.push("HttpOnly");
|
|
997
|
-
|
|
1017
|
+
/**
|
|
1018
|
+
* `Secure` defaults to "is this a production environment?" — via the shared classifier, NOT a
|
|
1019
|
+
* raw `NODE_ENV === "production"` comparison.
|
|
1020
|
+
*
|
|
1021
|
+
* The raw form shipped session cookies WITHOUT `Secure` on any deployment using `NODE_ENV=prod`,
|
|
1022
|
+
* because that comparison recognises only the long spelling. A cookie without `Secure` is sent
|
|
1023
|
+
* over plaintext HTTP, so a session token becomes interceptable — and nothing anywhere reports
|
|
1024
|
+
* it: the cookie is set, login works, the app behaves normally.
|
|
1025
|
+
*
|
|
1026
|
+
* `options.secure` still wins when stated (`??`), including an explicit `false` for local HTTP
|
|
1027
|
+
* development. Only the DEFAULT changed, and only in the direction of being correct more often.
|
|
1028
|
+
*/
|
|
1029
|
+
if (options.secure ?? isProductionEnv(process.env.NODE_ENV)) parts.push("Secure");
|
|
998
1030
|
parts.push(`SameSite=${capitalize(options.sameSite ?? "lax")}`);
|
|
999
1031
|
if (options.domain) parts.push(`Domain=${options.domain}`);
|
|
1000
1032
|
return parts.join("; ");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
1
|
+
/*! @classytic/arc v2.34.0 | MIT | https://classytic.com */
|
|
2
2
|
import { arcLog } from "./logger/index.mjs";
|
|
3
|
-
import { t as ArcError } from "./errors-
|
|
3
|
+
import { t as ArcError } from "./errors-Cd_yy7aW.mjs";
|
|
4
4
|
//#region src/permissions/filter-merge.ts
|
|
5
5
|
/**
|
|
6
6
|
* Policy-filter composition — logical AND, never last-writer-wins.
|
|
@@ -1,79 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
import { i as RequestScope } from "./types-ChuShpCP.mjs";
|
|
3
3
|
import { FastifyRequest } from "fastify";
|
|
4
|
-
//#region src/types/base.d.ts
|
|
5
|
-
declare module "fastify" {
|
|
6
|
-
interface FastifyRequest {
|
|
7
|
-
/** Request scope — set by auth adapter, read by permissions/presets/guards */
|
|
8
|
-
scope: RequestScope;
|
|
9
|
-
/**
|
|
10
|
-
* Current user — set by auth adapter (Better Auth, JWT, custom).
|
|
11
|
-
* `undefined` on public routes (`auth: false`) or unauthenticated requests.
|
|
12
|
-
* Guard with `if (request.user)` on routes that allow anonymous access.
|
|
13
|
-
*
|
|
14
|
-
* Kept as required (not `user?`) because `@fastify/jwt` declares it
|
|
15
|
-
* as required — declaration merges must have identical modifiers.
|
|
16
|
-
* The `| undefined` in the type achieves the same DX.
|
|
17
|
-
*/
|
|
18
|
-
user: Record<string, unknown> | undefined;
|
|
19
|
-
/** Policy-injected query filters (e.g. ownership, org-scoping) */
|
|
20
|
-
_policyFilters?: Record<string, unknown>;
|
|
21
|
-
/** Field mask — fields to include/exclude in responses */
|
|
22
|
-
fieldMask?: {
|
|
23
|
-
include?: string[];
|
|
24
|
-
exclude?: string[];
|
|
25
|
-
};
|
|
26
|
-
/** Arbitrary policy metadata for downstream consumers */
|
|
27
|
-
policyMetadata?: Record<string, unknown>;
|
|
28
|
-
/** Document loaded by policy middleware for ownership checks */
|
|
29
|
-
document?: unknown;
|
|
30
|
-
/** Ownership check context (field name + user field) */
|
|
31
|
-
_ownershipCheck?: Record<string, unknown>;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
type AnyRecord = Record<string, unknown>;
|
|
35
|
-
/** MongoDB ObjectId — accepts string or any object with a `toString()` (e.g. mongoose ObjectId). */
|
|
36
|
-
type ObjectId = string | {
|
|
37
|
-
toString(): string;
|
|
38
|
-
};
|
|
39
|
-
/**
|
|
40
|
-
* Flexible user type that accepts any object with id/_id properties.
|
|
41
|
-
* The actual user structure is defined by your app's auth system.
|
|
42
|
-
*/
|
|
43
|
-
type UserLike = UserBase & {
|
|
44
|
-
/** User email (optional) */
|
|
45
|
-
email?: string;
|
|
46
|
-
};
|
|
47
|
-
interface UserOrganization {
|
|
48
|
-
userId: string;
|
|
49
|
-
organizationId: string;
|
|
50
|
-
[key: string]: unknown;
|
|
51
|
-
}
|
|
52
|
-
interface JWTPayload {
|
|
53
|
-
sub: string;
|
|
54
|
-
[key: string]: unknown;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Typed Fastify request with Arc decorations. Use in `rawHandler` routes
|
|
58
|
-
* instead of `(req as any).user`.
|
|
59
|
-
*
|
|
60
|
-
* @example
|
|
61
|
-
* ```typescript
|
|
62
|
-
* import type { ArcRequest } from '@classytic/arc';
|
|
63
|
-
*
|
|
64
|
-
* handler: async (req: ArcRequest, reply) => {
|
|
65
|
-
* req.user?.id; // typed
|
|
66
|
-
* req.scope.organizationId; // typed (when member)
|
|
67
|
-
* req.signal; // AbortSignal (Fastify 5)
|
|
68
|
-
* }
|
|
69
|
-
* ```
|
|
70
|
-
*/
|
|
71
|
-
type ArcRequest = FastifyRequest & {
|
|
72
|
-
scope: RequestScope;
|
|
73
|
-
user: Record<string, unknown> | undefined;
|
|
74
|
-
signal: AbortSignal;
|
|
75
|
-
};
|
|
76
|
-
//#endregion
|
|
77
4
|
//#region src/utils/userHelpers.d.ts
|
|
78
5
|
/**
|
|
79
6
|
* Extract a user ID from a user object. Accepts `id` or `_id` — returns
|
|
@@ -324,4 +251,77 @@ interface PermissionCheckMeta {
|
|
|
324
251
|
_conditional?: boolean;
|
|
325
252
|
}
|
|
326
253
|
//#endregion
|
|
327
|
-
|
|
254
|
+
//#region src/types/base.d.ts
|
|
255
|
+
declare module "fastify" {
|
|
256
|
+
interface FastifyRequest {
|
|
257
|
+
/** Request scope — set by auth adapter, read by permissions/presets/guards */
|
|
258
|
+
scope: RequestScope;
|
|
259
|
+
/**
|
|
260
|
+
* Current user — set by auth adapter (Better Auth, JWT, custom).
|
|
261
|
+
* `undefined` on public routes (`auth: false`) or unauthenticated requests.
|
|
262
|
+
* Guard with `if (request.user)` on routes that allow anonymous access.
|
|
263
|
+
*
|
|
264
|
+
* Kept as required (not `user?`) because `@fastify/jwt` declares it
|
|
265
|
+
* as required — declaration merges must have identical modifiers.
|
|
266
|
+
* The `| undefined` in the type achieves the same DX.
|
|
267
|
+
*/
|
|
268
|
+
user: Record<string, unknown> | undefined;
|
|
269
|
+
/** Policy-injected query filters (e.g. ownership, org-scoping) */
|
|
270
|
+
_policyFilters?: Record<string, unknown>;
|
|
271
|
+
/** Field mask — fields to include/exclude in responses */
|
|
272
|
+
fieldMask?: {
|
|
273
|
+
include?: string[];
|
|
274
|
+
exclude?: string[];
|
|
275
|
+
};
|
|
276
|
+
/** Arbitrary policy metadata for downstream consumers */
|
|
277
|
+
policyMetadata?: Record<string, unknown>;
|
|
278
|
+
/** Document loaded by policy middleware for ownership checks */
|
|
279
|
+
document?: unknown;
|
|
280
|
+
/** Ownership check context (field name + user field) */
|
|
281
|
+
_ownershipCheck?: Record<string, unknown>;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
type AnyRecord = Record<string, unknown>;
|
|
285
|
+
/** MongoDB ObjectId — accepts string or any object with a `toString()` (e.g. mongoose ObjectId). */
|
|
286
|
+
type ObjectId = string | {
|
|
287
|
+
toString(): string;
|
|
288
|
+
};
|
|
289
|
+
/**
|
|
290
|
+
* Flexible user type that accepts any object with id/_id properties.
|
|
291
|
+
* The actual user structure is defined by your app's auth system.
|
|
292
|
+
*/
|
|
293
|
+
type UserLike = UserBase & {
|
|
294
|
+
/** User email (optional) */
|
|
295
|
+
email?: string;
|
|
296
|
+
};
|
|
297
|
+
interface UserOrganization {
|
|
298
|
+
userId: string;
|
|
299
|
+
organizationId: string;
|
|
300
|
+
[key: string]: unknown;
|
|
301
|
+
}
|
|
302
|
+
interface JWTPayload {
|
|
303
|
+
sub: string;
|
|
304
|
+
[key: string]: unknown;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Typed Fastify request with Arc decorations. Use in `rawHandler` routes
|
|
308
|
+
* instead of `(req as any).user`.
|
|
309
|
+
*
|
|
310
|
+
* @example
|
|
311
|
+
* ```typescript
|
|
312
|
+
* import type { ArcRequest } from '@classytic/arc';
|
|
313
|
+
*
|
|
314
|
+
* handler: async (req: ArcRequest, reply) => {
|
|
315
|
+
* req.user?.id; // typed
|
|
316
|
+
* req.scope.organizationId; // typed (when member)
|
|
317
|
+
* req.signal; // AbortSignal (Fastify 5)
|
|
318
|
+
* }
|
|
319
|
+
* ```
|
|
320
|
+
*/
|
|
321
|
+
type ArcRequest = FastifyRequest & {
|
|
322
|
+
scope: RequestScope;
|
|
323
|
+
user: Record<string, unknown> | undefined;
|
|
324
|
+
signal: AbortSignal;
|
|
325
|
+
};
|
|
326
|
+
//#endregion
|
|
327
|
+
export { UserLike as a, DataPolicy as c, UserBase as d, getUserId as f, ObjectId as i, PermissionCheck as l, normalizeRoles as m, ArcRequest as n, UserOrganization as o, getUserRoles as p, JWTPayload as r, AuthorizationDecision as s, AnyRecord as t, PermissionContext as u };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import { a as conjoinPolicyFilters } from "./authorizationDecision-
|
|
3
|
-
import { t as toRepositoryFilter } from "./repositoryFilter-
|
|
4
|
-
import { i as compileAggRequest, t as adapterSupportsAggregate } from "./validate-
|
|
1
|
+
/*! @classytic/arc v2.34.0 | MIT | https://classytic.com */
|
|
2
|
+
import { a as conjoinPolicyFilters } from "./authorizationDecision-B3mP_QTy.mjs";
|
|
3
|
+
import { t as toRepositoryFilter } from "./repositoryFilter-DKny7PDn.mjs";
|
|
4
|
+
import { i as compileAggRequest, t as adapterSupportsAggregate } from "./validate-CdQlz52F.mjs";
|
|
5
5
|
//#region src/core/aggregation/buildHandler.ts
|
|
6
6
|
/**
|
|
7
7
|
* Framework-agnostic aggregation execution. Runs safety guards,
|
package/dist/cache/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import { i as versionKey, n as hashParams, r as tagVersionKey, t as buildQueryKey } from "../keys-
|
|
3
|
-
import { t as MemoryCacheStore } from "../memory-
|
|
4
|
-
import { r as QueryCache, t as queryCachePlugin } from "../queryCachePlugin-
|
|
1
|
+
/*! @classytic/arc v2.34.0 | MIT | https://classytic.com */
|
|
2
|
+
import { i as versionKey, n as hashParams, r as tagVersionKey, t as buildQueryKey } from "../keys-WeKvY1dE.mjs";
|
|
3
|
+
import { t as MemoryCacheStore } from "../memory-qYSB7rMQ.mjs";
|
|
4
|
+
import { r as QueryCache, t as queryCachePlugin } from "../queryCachePlugin-DhsZ0ZIc.mjs";
|
|
5
5
|
//#region src/cache/redis.ts
|
|
6
6
|
/**
|
|
7
7
|
* Redis-backed cache store.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import { t as __exportAll } from "./rolldown-runtime-
|
|
1
|
+
/*! @classytic/arc v2.34.0 | MIT | https://classytic.com */
|
|
2
|
+
import { t as __exportAll } from "./rolldown-runtime-DNg-KNCk.mjs";
|
|
3
3
|
import fp from "fastify-plugin";
|
|
4
4
|
//#region src/plugins/caching.ts
|
|
5
5
|
var caching_exports = /* @__PURE__ */ __exportAll({
|
package/dist/cleanup/index.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
|
-
import { L as RequestWithExtras } from "../index-
|
|
3
|
-
import { A as
|
|
4
|
-
import { t as ArcModule } from "../types-
|
|
2
|
+
import { L as RequestWithExtras } from "../index-BcR2bFZQ.mjs";
|
|
3
|
+
import { A as CleanupStepResult, B as VerificationResult, C as CleanupResult, D as CleanupRunStore, E as CleanupRunStatus, F as PurgeEvidence, I as PurgeResourceResult, L as PurgeStrategyKind, M as CleanupWriteFence, N as DEFAULT_CLEANUP_LIMITS, O as CleanupRunTransitionPatch, P as PurgeActor, R as PurgeVerificationSummary, S as CleanupRecipe, T as CleanupRunCreateResult, _ as CleanupPermissions, a as CleanupEvidenceStore, b as CleanupPlanItem, c as CleanupInput, d as CleanupLease, f as CleanupLimits, g as CleanupPermissionCheck, h as CleanupOutcomeStatus, i as CleanupContext, j as CleanupStepRunStatus, k as CleanupStepProgress, l as CleanupJob, m as CleanupManifest, n as CLEANUP_TERMINAL_STATUSES, o as CleanupExecutionContext, p as CleanupLogger, r as CleanupCancelRequest, s as CleanupFinalizationPayload, t as Availability, u as CleanupJobQueue, v as CleanupPlan, w as CleanupRun, x as CleanupProgressSummary, y as CleanupPlanDraft, z as VerificationCheck } from "../types-DVLddu2q.mjs";
|
|
4
|
+
import { t as ArcModule } from "../types-BcTumAz_.mjs";
|
|
5
5
|
import { PurgeStrategyKind as PurgeStrategyKind$1 } from "@classytic/primitives/retention";
|
|
6
6
|
import { canonicalJson } from "@classytic/primitives/canonical";
|
|
7
7
|
import { CleanupStep } from "@classytic/repo-core/cleanup";
|
|
@@ -75,7 +75,9 @@ type CleanupErrorCode =
|
|
|
75
75
|
/** No authenticated actor could be resolved for a destructive action (fail-closed). */
|
|
76
76
|
"CLEANUP_ACTOR_REQUIRED" |
|
|
77
77
|
/** Caller lacks permission for the operation. */
|
|
78
|
-
"CLEANUP_FORBIDDEN"
|
|
78
|
+
"CLEANUP_FORBIDDEN" |
|
|
79
|
+
/** The exclusion list names an unknown or protective step (fail-closed). */
|
|
80
|
+
"CLEANUP_INVALID_EXCLUSION";
|
|
79
81
|
/**
|
|
80
82
|
* A framework error carrying BOTH `status` (read directly in code/tests) and
|
|
81
83
|
* `statusCode` (the Fastify convention arc's global error handler recognizes,
|
|
@@ -112,6 +114,16 @@ declare const CleanupErrors: {
|
|
|
112
114
|
readonly alreadyRunning: (runId: string) => CleanupError;
|
|
113
115
|
readonly runNotFound: (id: string) => CleanupError;
|
|
114
116
|
readonly invalidAction: (action: string, status: string) => CleanupError;
|
|
117
|
+
/**
|
|
118
|
+
* The operator's exclusion list cannot be honoured as written.
|
|
119
|
+
*
|
|
120
|
+
* A 400 rather than a filter: dropping an unrecognised exclusion leaves
|
|
121
|
+
* someone believing they narrowed a destructive run when they did not, and
|
|
122
|
+
* dropping a PROTECTIVE one would let a guard be switched off from the same
|
|
123
|
+
* request that starts the run. `steps` carries the offending ids so a UI can
|
|
124
|
+
* point at them.
|
|
125
|
+
*/
|
|
126
|
+
readonly invalidExclusion: (reason: string, steps: readonly string[]) => CleanupError;
|
|
115
127
|
readonly forbidden: (operation: string) => CleanupError;
|
|
116
128
|
};
|
|
117
129
|
//#endregion
|
|
@@ -333,4 +345,4 @@ declare function computePlanDigest(plan: Omit<CleanupPlan, "digest">): string;
|
|
|
333
345
|
*/
|
|
334
346
|
declare function computeManifestDigest(manifest: Record<string, unknown>): string;
|
|
335
347
|
//#endregion
|
|
336
|
-
export { type Availability, CLEANUP_TERMINAL_STATUSES, type CancelInput, type CleanupCancelRequest, CleanupCancelled, type CleanupContext, CleanupError, type CleanupErrorCode, CleanupErrors, type CleanupEvidenceStore, type CleanupExecutionContext, type CleanupFinalizationPayload, type CleanupInput, type CleanupJob, type CleanupJobQueue, type CleanupLease, type CleanupLimits, type CleanupLogger, type CleanupManifest, type CleanupOutcomeStatus, type CleanupPermissionCheck, type CleanupPermissions, type CleanupPlan, type CleanupPlanDraft, type CleanupPlanItem, type CleanupProgressSummary, type CleanupRecipe, type CleanupRecipeInfo, type CleanupRegistry, type CleanupResult, type CleanupRun, type CleanupRunCreateResult, type CleanupRunStatus, type CleanupRunStore, type CleanupRunTransitionPatch, type CleanupService, type CleanupServiceDeps, type CleanupStepResult, type CleanupWriteFence, DEFAULT_CLEANUP_LIMITS, type DataCleanupModuleDeps, type ExecuteInput, GLOBAL_DESTRUCTIVE_KEY, MemoryCleanupEvidenceStore, MemoryCleanupJobQueue, MemoryCleanupRunStore, type PreviewInput, type PurgeActor, type PurgeEvidence, type PurgeResourceResult, type PurgeStrategyKind, type PurgeVerificationSummary, type RecipeFromStepsInput, type VerificationCheck, type VerificationResult, canonicalJson, computeManifestDigest, computePlanDigest, createCleanupRegistry, createCleanupService, createDataCleanupModule, recipeFromSteps };
|
|
348
|
+
export { type Availability, CLEANUP_TERMINAL_STATUSES, type CancelInput, type CleanupCancelRequest, CleanupCancelled, type CleanupContext, CleanupError, type CleanupErrorCode, CleanupErrors, type CleanupEvidenceStore, type CleanupExecutionContext, type CleanupFinalizationPayload, type CleanupInput, type CleanupJob, type CleanupJobQueue, type CleanupLease, type CleanupLimits, type CleanupLogger, type CleanupManifest, type CleanupOutcomeStatus, type CleanupPermissionCheck, type CleanupPermissions, type CleanupPlan, type CleanupPlanDraft, type CleanupPlanItem, type CleanupProgressSummary, type CleanupRecipe, type CleanupRecipeInfo, type CleanupRegistry, type CleanupResult, type CleanupRun, type CleanupRunCreateResult, type CleanupRunStatus, type CleanupRunStore, type CleanupRunTransitionPatch, type CleanupService, type CleanupServiceDeps, type CleanupStepProgress, type CleanupStepResult, type CleanupStepRunStatus, type CleanupWriteFence, DEFAULT_CLEANUP_LIMITS, type DataCleanupModuleDeps, type ExecuteInput, GLOBAL_DESTRUCTIVE_KEY, MemoryCleanupEvidenceStore, MemoryCleanupJobQueue, MemoryCleanupRunStore, type PreviewInput, type PurgeActor, type PurgeEvidence, type PurgeResourceResult, type PurgeStrategyKind, type PurgeVerificationSummary, type RecipeFromStepsInput, type VerificationCheck, type VerificationResult, canonicalJson, computeManifestDigest, computePlanDigest, createCleanupRegistry, createCleanupService, createDataCleanupModule, recipeFromSteps };
|