@classytic/arc 2.43.0 → 2.44.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/{EventTransport-tzA7CAB4.mjs → EventTransport-DZWDsaPa.mjs} +2 -2
- package/dist/{HookSystem-B6UaKRbF.mjs → HookSystem-yjEgn7Cm.mjs} +2 -2
- package/dist/{ResourceRegistry-CuCARu2B.mjs → ResourceRegistry-DJxHUpE4.mjs} +2 -2
- package/dist/acquire-BozJ-9yt.mjs +35 -0
- package/dist/{actionPermissions-BotX1YOa.mjs → actionPermissions-5N04zBL4.mjs} +13 -17
- package/dist/audit/index.d.mts +6 -6
- package/dist/audit/index.mjs +4 -4
- package/dist/auth/audit.d.mts +8 -8
- package/dist/auth/audit.mjs +1 -1
- package/dist/auth/index.d.mts +5 -5
- package/dist/auth/index.mjs +11 -8
- package/dist/auth/redis-session.d.mts +4 -5
- package/dist/auth/redis-session.mjs +1 -1
- package/dist/{authorizationDecision-DQYrkl5f.mjs → authorizationDecision-wX3SA9w_.mjs} +4 -4
- package/dist/{boundedMap-BULzfXYU.mjs → boundedMap-DWiKW7lP.mjs} +1 -1
- package/dist/{buildHandler-CRQ8EcX5.mjs → buildHandler-Bswu_vNb.mjs} +4 -4
- package/dist/cache/index.d.mts +9 -9
- package/dist/cache/index.mjs +4 -4
- package/dist/{caching-Cc2M1DwO.mjs → caching-Drp68DIS.mjs} +2 -2
- package/dist/{claimed-B10RTfkM.mjs → claimed-DYvQoZLv.mjs} +1 -1
- package/dist/cleanup/index.d.mts +14 -14
- package/dist/cleanup/index.mjs +4 -4
- package/dist/cli/commands/describe.d.mts +5 -5
- package/dist/cli/commands/describe.mjs +3 -3
- package/dist/cli/commands/docs.d.mts +2 -3
- package/dist/cli/commands/docs.mjs +3 -3
- package/dist/cli/commands/doctor.d.mts +2 -3
- package/dist/cli/commands/doctor.mjs +1 -1
- package/dist/cli/commands/generate.mjs +2 -3
- package/dist/cli/commands/init.mjs +2 -3
- package/dist/cli/commands/introspect.d.mts +2 -3
- package/dist/cli/commands/introspect.mjs +2 -2
- package/dist/cli/index.mjs +3 -3
- package/dist/{constants-Cu7Mx7_U.mjs → constants-B2QHb6u6.mjs} +1 -1
- package/dist/context/index.d.mts +9 -9
- package/dist/context/index.mjs +5 -5
- package/dist/core/index.d.mts +3 -3
- package/dist/core/index.mjs +8 -8
- package/dist/{core-Cb0LjccA.mjs → core-COcqo0Cp.mjs} +13 -4
- package/dist/{createActionRouter-xjqonMRO.mjs → createActionRouter-zG13rpPJ.mjs} +18 -8
- package/dist/{createAggregationRouter-zRYWw_5D.mjs → createAggregationRouter-CWRz96Vr.mjs} +7 -7
- package/dist/{createApp-D-953ZAq.mjs → createApp-BGLYtErt.mjs} +34 -32
- package/dist/{createMcpServer-C9cxS8zt.d.mts → createMcpServer-DSztofa9.d.mts} +1 -1
- package/dist/{defineAggregation-Bm8RjMbq.mjs → defineAggregation--3xguLkk.mjs} +1 -1
- package/dist/{defineResource-DIC7JZGU.mjs → defineResource-gUp9ug66.mjs} +7 -7
- package/dist/discovery/index.d.mts +6 -7
- package/dist/discovery/index.mjs +1 -1
- package/dist/docs/index.d.mts +3 -3
- package/dist/docs/index.mjs +3 -3
- package/dist/{elevation-DG8SrLN-.mjs → elevation-BG4gnMsJ.mjs} +5 -5
- package/dist/encryption/index.d.mts +5 -5
- package/dist/encryption/index.mjs +3 -3
- package/dist/{errorHandler-BnfDviL1.mjs → errorHandler-COHw3N1b.mjs} +3 -3
- package/dist/{errors-CtrywMHP.mjs → errors-CW4anJBy.mjs} +1 -1
- package/dist/{eventPlugin-Q6BhzHzs.mjs → eventPlugin-BweHAVws.mjs} +8 -8
- package/dist/{eventTypes-Cdhm6ZlV.mjs → eventTypes-N4-omQFR.mjs} +2 -2
- package/dist/events/index.d.mts +14 -14
- package/dist/events/index.mjs +7 -7
- package/dist/events/transports/redis-stream-entry.mjs +4 -4
- package/dist/events/transports/redis.d.mts +4 -5
- package/dist/events/transports/redis.mjs +2 -2
- package/dist/factory/index.d.mts +16 -16
- package/dist/factory/index.mjs +6 -6
- package/dist/{fastify-augmentation-DhUJ-mvo.d.mts → fastify-augmentation-DRlCIWE9.d.mts} +2 -2
- package/dist/{fields-ToPYpMqS.mjs → fields-A5crhsJb.mjs} +1 -1
- package/dist/{filter-merge-IpGywvym.mjs → filter-merge-DGM-GQ1J.mjs} +1 -1
- package/dist/{generate-DRTkLlIl.mjs → generate-BXKo2Gc8.mjs} +2 -2
- package/dist/{headers-BbkIF6vA.mjs → headers-DKZQKL-Z.mjs} +2 -2
- package/dist/{health-D-Ft6JM6.mjs → health-BYAwA6YS.mjs} +1 -1
- package/dist/{health-DqbsG-_w.mjs → health-CrqUp3sz.mjs} +1 -1
- package/dist/hooks/index.d.mts +1 -1
- package/dist/hooks/index.mjs +2 -3
- package/dist/idempotency/index.d.mts +8 -6
- package/dist/idempotency/index.mjs +108 -46
- package/dist/idempotency/redis.d.mts +1 -1
- package/dist/idempotency/redis.mjs +30 -2
- package/dist/{index-CRoPtISf.d.mts → index-Beg3aNnK.d.mts} +3 -31
- package/dist/{index-C8zVGYsk.d.mts → index-BkV55WlV.d.mts} +3 -3
- package/dist/{index-JdbZAIsm.d.mts → index-CUJvoyw3.d.mts} +1 -1
- package/dist/{index-mqaqZNpe.d.mts → index-WH7xgvxS.d.mts} +52 -1
- package/dist/index.d.mts +5 -5
- package/dist/index.mjs +11 -11
- package/dist/{init-B_oUYDXI.mjs → init-BPzK5Lnr.mjs} +1 -1
- package/dist/integrations/event-gateway.d.mts +3 -4
- package/dist/integrations/event-gateway.mjs +2 -2
- package/dist/integrations/index.d.mts +1 -1
- package/dist/integrations/index.mjs +1 -1
- package/dist/integrations/jobs/index.mjs +3 -3
- package/dist/integrations/mcp/index.d.mts +36 -36
- package/dist/integrations/mcp/index.mjs +2 -2
- package/dist/integrations/mcp/testing.d.mts +8 -9
- package/dist/integrations/mcp/testing.mjs +2 -2
- package/dist/integrations/streamline.d.mts +12 -13
- package/dist/integrations/streamline.mjs +18 -4
- package/dist/integrations/webhooks.d.mts +23 -23
- package/dist/integrations/webhooks.mjs +3 -3
- package/dist/integrations/websocket-pushref-redis.d.mts +4 -5
- package/dist/integrations/websocket-pushref-redis.mjs +1 -1
- package/dist/integrations/websocket-redis.d.mts +4 -5
- package/dist/integrations/websocket-redis.mjs +1 -1
- package/dist/integrations/websocket.mjs +2 -2
- package/dist/{interface-C0395yUN.d.mts → interface-JJzwH4Ro.d.mts} +22 -2
- package/dist/{jsonBody-B4YVGcql.mjs → jsonBody-YIq-vGLv.mjs} +2 -2
- package/dist/{keys-B2KtgMLJ.mjs → keys-CpoiZ8hU.mjs} +1 -1
- package/dist/{loadResources-Dn4lalw2.mjs → loadResources-6jO52-RR.mjs} +3 -3
- package/dist/{loadResourcesFromEntry-3sLYbuse.mjs → loadResourcesFromEntry-MP8xEppu.mjs} +2 -2
- package/dist/logger/index.d.mts +9 -10
- package/dist/logger/index.mjs +2 -3
- package/dist/{logger-DXjfIqjV.mjs → logger-D4V1zGLI.mjs} +1 -1
- package/dist/{mcpPlugin-C08HalN5.mjs → mcpPlugin-srPc7ItN.mjs} +42 -29
- package/dist/{memory-9Cp7611C.mjs → memory-CTa5pOCW.mjs} +3 -3
- package/dist/{metrics-CWI11eRu.mjs → metrics-DsZrvnpB.mjs} +3 -3
- package/dist/middleware/index.d.mts +5 -5
- package/dist/middleware/index.mjs +3 -3
- package/dist/migrations/index.d.mts +13 -13
- package/dist/migrations/index.mjs +2 -2
- package/dist/{module-BSvOQC7E.mjs → module--L0iBIZz.mjs} +1 -1
- package/dist/mongodb-memory-server-CHhYSq5y.mjs +35539 -0
- package/dist/mongoose-CYJCLyi-.mjs +67451 -0
- package/dist/{multiTenant-cY0FkDiA.d.mts → multiTenant-CAtYlW6H.d.mts} +1 -1
- package/dist/{multipartBody-CXM2a-Dy.mjs → multipartBody-Cc7eZ9cq.mjs} +1 -1
- package/dist/node-D8UZv_8c.mjs +41236 -0
- package/dist/{openapi-DT_G4VhY.mjs → openapi-CMegfsm8.mjs} +6 -6
- package/dist/outbox-admin/index.d.mts +2 -2
- package/dist/outbox-admin/index.mjs +5 -5
- package/dist/{outbox-module-Bjgzl6tg.mjs → outbox-module-Ryk270jd.mjs} +9 -9
- package/dist/permissions/index.mjs +7 -7
- package/dist/{permissions-Cm0uYHvd.mjs → permissions-C5ijIz5Q.mjs} +9 -9
- package/dist/{pipe-BqeGT6UO.mjs → pipe-D81zMtWs.mjs} +2 -2
- package/dist/pipeline/index.d.mts +7 -7
- package/dist/pipeline/index.mjs +2 -2
- package/dist/{plan-FVR6LP59.mjs → plan-CJGMKoui.mjs} +1 -1
- package/dist/{plugin-BccET1tL.mjs → plugin-DALd9dcF.mjs} +39 -27
- package/dist/plugins/index.d.mts +7 -7
- package/dist/plugins/index.mjs +17 -17
- package/dist/plugins/response-cache.d.mts +5 -6
- package/dist/plugins/response-cache.mjs +4 -4
- package/dist/plugins/tracing-entry.mjs +2 -2
- package/dist/{pluralize-CVIOcgMF.mjs → pluralize-COUNYo3d.mjs} +1 -1
- package/dist/presets/filesUpload.d.mts +7 -7
- package/dist/presets/filesUpload.mjs +5 -5
- package/dist/presets/index.d.mts +14 -14
- package/dist/presets/index.mjs +2 -2
- package/dist/presets/multiTenant.d.mts +1 -1
- package/dist/presets/multiTenant.mjs +5 -5
- package/dist/presets/search.d.mts +8 -9
- package/dist/presets/search.mjs +2 -2
- package/dist/{presets-Cpvj6fGO.mjs → presets-CONf2Qem.mjs} +4 -4
- package/dist/{projection-Ce4aQhQk.mjs → projection-wFoLqdss.mjs} +2 -2
- package/dist/{queryCachePlugin-CFWNH8aT.mjs → queryCachePlugin-BATECpyh.mjs} +6 -6
- package/dist/{rateLimitKey-C4O-kPm0.mjs → rateLimitKey-DVEZ_UpV.mjs} +1 -1
- package/dist/{realtime-DmPE9S54.mjs → realtime-xyubMKSB.mjs} +11 -11
- package/dist/{redis-vLvtcGy_.d.mts → redis-BDgv9Glw.d.mts} +5 -1
- package/dist/registry/index.d.mts +9 -9
- package/dist/registry/index.mjs +3 -3
- package/dist/{registry-Bcz9G1bh.mjs → registry-Bdzg-hdm.mjs} +5 -4
- package/dist/{renewingLease-qODa7KJQ.mjs → renewingLease-BFJxGPuh.mjs} +1 -1
- package/dist/{replyHelpers-CG_VtVgS.mjs → replyHelpers-Bnc6lJyy.mjs} +2 -2
- package/dist/{requestContext-Dsu9P1bV.mjs → requestContext-C10UeFe5.mjs} +1 -1
- package/dist/{requirement-KDdoRcOP.mjs → requirement-Bu50QALH.mjs} +1 -1
- package/dist/{resourceRateLimit-dSjVr1pk.mjs → resourceRateLimit-urWPJxrt.mjs} +2 -2
- package/dist/rolldown-runtime-MYrLNGnq.mjs +45 -0
- package/dist/{routeValidator-D36SW8qt.mjs → routeValidator-DHtpzrzk.mjs} +1 -1
- package/dist/{runtimeCapabilities-0tccjRlj.mjs → runtimeCapabilities-DIMKMV2G.mjs} +1 -1
- package/dist/{schedules-C-OpmHBq.mjs → schedules-CKTs5ys8.mjs} +5 -5
- package/dist/{schemaConverter-BORek3O-.mjs → schemaConverter-BVjkQ5DD.mjs} +2 -2
- package/dist/{schemaIR-C7Vbp71I.mjs → schemaIR-BA0Hb21Y.mjs} +2 -2
- package/dist/schemas/index.d.mts +10 -10
- package/dist/schemas/index.mjs +1 -1
- package/dist/scim/index.d.mts +13 -13
- package/dist/scim/index.mjs +2 -2
- package/dist/scope/index.d.mts +3 -3
- package/dist/scope/index.mjs +5 -5
- package/dist/{scope-DQthe88b.mjs → scope-DINaj7Ax.mjs} +4 -4
- package/dist/{shutdown-MqA81z_P.mjs → shutdown-LpLMH8T1.mjs} +1 -1
- package/dist/{simpleEqualityMatcher-auW8QjXN.mjs → simpleEqualityMatcher-DbwIM1f1.mjs} +1 -1
- package/dist/{sse-CYzQBVFe.mjs → sse-BzJFPX_1.mjs} +7 -7
- package/dist/{sseStream-B5_Afiqn.mjs → sseStream-DQChzGTs.mjs} +2 -2
- package/dist/{store-helpers-BOzk-CuX.mjs → store-helpers-Coj9RhOZ.mjs} +1 -1
- package/dist/{streaming-DjTQhZrN.mjs → streaming-JzB5CAga.mjs} +1 -1
- package/dist/{subscriberIdentity-CW39uA8G.mjs → subscriberIdentity-DeyppIif.mjs} +1 -1
- package/dist/{tenancy--ed9eH_z.mjs → tenancy-DxV8OuX2.mjs} +2 -2
- package/dist/{tenantPreparation-BKon6Yox.mjs → tenantPreparation-CBvvAcAj.mjs} +4 -4
- package/dist/testing/cleanupStoreContract.d.mts +4 -5
- package/dist/testing/cleanupStoreContract.mjs +1 -1
- package/dist/testing/index.d.mts +35 -35
- package/dist/testing/index.mjs +16 -15
- package/dist/testing/outboxStoreContract.d.mts +4 -5
- package/dist/testing/outboxStoreContract.mjs +2 -2
- package/dist/testing/requiredPorts.d.mts +4 -5
- package/dist/testing/requiredPorts.mjs +2 -2
- package/dist/testing/storageContract.d.mts +4 -5
- package/dist/testing/storageContract.mjs +1 -1
- package/dist/{timing-qczZ0YC-.mjs → timing-CntavTlR.mjs} +1 -1
- package/dist/{transactionContext-DjFkrNG6.mjs → transactionContext-orvnGu4F.mjs} +1 -1
- package/dist/{typeGuards-CySF12G-.mjs → typeGuards-kEaP_WmO.mjs} +1 -1
- package/dist/types/index.d.mts +1 -1
- package/dist/types/index.mjs +1 -1
- package/dist/types/storage.mjs +1 -1
- package/dist/{types-B4Aq4Sdj.d.mts → types-D3Ixsh00.d.mts} +1 -1
- package/dist/{types-Bk9NOgOC.mjs → types-fvO6Ovzx.mjs} +4 -4
- package/dist/usage/index.d.mts +4 -4
- package/dist/usage/index.mjs +4 -4
- package/dist/{userHelpers-aklawRaK.mjs → userHelpers-C76zD5pa.mjs} +1 -1
- package/dist/utils/index.d.mts +47 -47
- package/dist/utils/index.mjs +12 -12
- package/dist/{utils-ec1oTo1n.mjs → utils-BpkVZ8rB.mjs} +4 -4
- package/dist/{validate-9yzHC1e2.mjs → validate-CWp-lsrm.mjs} +3 -3
- package/dist/{versioning-fhhWHV74.mjs → versioning-CHhL9P3o.mjs} +3 -3
- package/dist/{workScope-zpPyge4t.mjs → workScope-n9a7d_lZ.mjs} +2 -2
- package/package.json +45 -51
- package/dist/rolldown-runtime-D1w9Y1VJ.mjs +0 -15
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import { r as workSeedFromEvent, t as runWorkScope } from "./workScope-
|
|
1
|
+
/*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
|
|
2
|
+
import { r as workSeedFromEvent, t as runWorkScope } from "./workScope-n9a7d_lZ.mjs";
|
|
3
3
|
import { createEvent, createEventRouter } from "@classytic/primitives/events";
|
|
4
4
|
//#region src/events/EventTransport.ts
|
|
5
5
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import { t as buildRequestScopeProjection } from "./projection-
|
|
1
|
+
/*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
|
|
2
|
+
import { t as buildRequestScopeProjection } from "./projection-wFoLqdss.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.44.0 | MIT | https://classytic.com */
|
|
2
|
+
import "./constants-B2QHb6u6.mjs";
|
|
3
3
|
//#region src/registry/ResourceRegistry.ts
|
|
4
4
|
/**
|
|
5
5
|
* Resource Registry
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
|
|
2
|
+
//#region src/idempotency/acquire.ts
|
|
3
|
+
async function acquireIdempotencyKey(store, key, requestId, lockTtlMs) {
|
|
4
|
+
if (typeof store.acquire === "function") return store.acquire(key, requestId, lockTtlMs);
|
|
5
|
+
return acquireBySteps(store, key, requestId, lockTtlMs);
|
|
6
|
+
}
|
|
7
|
+
/** `get` → `tryLock` → `get`, for stores without an atomic `acquire`. */
|
|
8
|
+
async function acquireBySteps(store, key, requestId, lockTtlMs) {
|
|
9
|
+
const cached = await store.get(key);
|
|
10
|
+
if (cached) return {
|
|
11
|
+
status: "completed",
|
|
12
|
+
result: cached
|
|
13
|
+
};
|
|
14
|
+
if (!await store.tryLock(key, requestId, lockTtlMs)) return { status: "locked" };
|
|
15
|
+
let completed;
|
|
16
|
+
try {
|
|
17
|
+
completed = await store.get(key);
|
|
18
|
+
} catch (err) {
|
|
19
|
+
await store.unlock(key, requestId);
|
|
20
|
+
throw err;
|
|
21
|
+
}
|
|
22
|
+
if (!completed) return { status: "acquired" };
|
|
23
|
+
await store.unlock(key, requestId);
|
|
24
|
+
return {
|
|
25
|
+
status: "completed",
|
|
26
|
+
result: completed
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/** Release a held lock — skipped after a completion that already released it. */
|
|
30
|
+
async function releaseIdempotencyLock(store, key, requestId, completed) {
|
|
31
|
+
if (completed && store.completionReleasesLock === true) return;
|
|
32
|
+
await store.unlock(key, requestId);
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { acquireIdempotencyKey as n, releaseIdempotencyLock as r, acquireBySteps as t };
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import { f as createError } from "./errors-
|
|
3
|
-
import { n as getUserRoles } from "./userHelpers-
|
|
4
|
-
import { b as isElevated, n as PUBLIC_SCOPE, u as getRequestScope, x as isMember } from "./types-
|
|
5
|
-
import { a as resolveEffectiveRoles, r as deriveHiddenFieldPermissions, t as applyFieldReadPermissions } from "./fields-
|
|
6
|
-
import { t as buildRequestScopeProjection } from "./projection-
|
|
7
|
-
import { n as requestContext } from "./requestContext-
|
|
8
|
-
import { n as isTenantPreparation } from "./tenantPreparation-
|
|
9
|
-
import { n as evaluateAndApplyPermission } from "./authorizationDecision-
|
|
10
|
-
import { t as executePipeline } from "./pipe-
|
|
11
|
-
import { n as idempotencyConfigProblem, t as declaresIdempotencyFence } from "./requirement-
|
|
12
|
-
import { i as resolveResourceRateLimiter, r as recordUnenforcedRateLimit } from "./resourceRateLimit-
|
|
13
|
-
import { n as arcRouteValidatorCompiler } from "./routeValidator-
|
|
1
|
+
/*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
|
|
2
|
+
import { f as createError } from "./errors-CW4anJBy.mjs";
|
|
3
|
+
import { n as getUserRoles } from "./userHelpers-C76zD5pa.mjs";
|
|
4
|
+
import { b as isElevated, n as PUBLIC_SCOPE, u as getRequestScope, x as isMember } from "./types-fvO6Ovzx.mjs";
|
|
5
|
+
import { a as resolveEffectiveRoles, r as deriveHiddenFieldPermissions, t as applyFieldReadPermissions } from "./fields-A5crhsJb.mjs";
|
|
6
|
+
import { t as buildRequestScopeProjection } from "./projection-wFoLqdss.mjs";
|
|
7
|
+
import { n as requestContext } from "./requestContext-C10UeFe5.mjs";
|
|
8
|
+
import { n as isTenantPreparation } from "./tenantPreparation-CBvvAcAj.mjs";
|
|
9
|
+
import { n as evaluateAndApplyPermission } from "./authorizationDecision-wX3SA9w_.mjs";
|
|
10
|
+
import { t as executePipeline } from "./pipe-D81zMtWs.mjs";
|
|
11
|
+
import { n as idempotencyConfigProblem, t as declaresIdempotencyFence } from "./requirement-Bu50QALH.mjs";
|
|
12
|
+
import { i as resolveResourceRateLimiter, r as recordUnenforcedRateLimit } from "./resourceRateLimit-urWPJxrt.mjs";
|
|
13
|
+
import { n as arcRouteValidatorCompiler } from "./routeValidator-DHtpzrzk.mjs";
|
|
14
14
|
import { isPaginatedResult, toCanonicalList } from "@classytic/repo-core/pagination";
|
|
15
15
|
//#region src/core/fastifyAdapter.ts
|
|
16
16
|
/** Type guard for Mongoose-like documents with toObject() */
|
|
@@ -657,10 +657,6 @@ function buildRateLimitConfig(rateLimit) {
|
|
|
657
657
|
//#endregion
|
|
658
658
|
//#region src/core/middlewares/registerRoute.ts
|
|
659
659
|
/**
|
|
660
|
-
* Route registration — the one place every arc router hands a route to Fastify: arc's request
|
|
661
|
-
* validator, the idempotency-declaration fence, and duplicate-route diagnostics.
|
|
662
|
-
*/
|
|
663
|
-
/**
|
|
664
660
|
* Register a route with friendly handling of `FST_ERR_DUPLICATED_ROUTE`.
|
|
665
661
|
*
|
|
666
662
|
* Boot-time `validateRouteCrudCollisions()` catches custom-route → auto-CRUD
|
package/dist/audit/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
import { d as UserBase } from "../base-CZyixEQR.mjs";
|
|
3
|
-
import "../index-
|
|
3
|
+
import "../index-WH7xgvxS.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
|
|
@@ -88,7 +88,7 @@ interface AuditQueryOptions {
|
|
|
88
88
|
/**
|
|
89
89
|
* Create audit entry from context
|
|
90
90
|
*/
|
|
91
|
-
declare function createAuditEntry(resource: string, documentId: string, action: AuditAction, context: AuditContext, data?: {
|
|
91
|
+
export declare function createAuditEntry(resource: string, documentId: string, action: AuditAction, context: AuditContext, data?: {
|
|
92
92
|
before?: Record<string, unknown>;
|
|
93
93
|
after?: Record<string, unknown>;
|
|
94
94
|
metadata?: Record<string, unknown>;
|
|
@@ -253,7 +253,7 @@ interface AuditRequestLike {
|
|
|
253
253
|
* The audit context of a request, from its VALIDATED scope: the actor is the scope's user
|
|
254
254
|
* (or service client) and the organization is the scope's active organization.
|
|
255
255
|
*/
|
|
256
|
-
declare function auditContextOf(request: AuditRequestLike): AuditContext;
|
|
256
|
+
export declare function auditContextOf(request: AuditRequestLike): AuditContext;
|
|
257
257
|
declare const _default: FastifyPluginAsync<AuditPluginOptions>;
|
|
258
258
|
//#endregion
|
|
259
259
|
//#region src/audit/repository-audit-adapter.d.ts
|
|
@@ -275,14 +275,14 @@ interface RepositoryAuditStoreOptions {
|
|
|
275
275
|
*/
|
|
276
276
|
readonly sessionProvider?: () => unknown;
|
|
277
277
|
}
|
|
278
|
-
declare function repositoryAsAuditStore(repository: RepositoryLike, options?: RepositoryAuditStoreOptions): AuditStore;
|
|
278
|
+
export declare function repositoryAsAuditStore(repository: RepositoryLike, options?: RepositoryAuditStoreOptions): AuditStore;
|
|
279
279
|
//#endregion
|
|
280
280
|
//#region src/audit/stores/memory.d.ts
|
|
281
281
|
interface MemoryAuditStoreOptions {
|
|
282
282
|
/** Maximum entries to keep (default: 1000) */
|
|
283
283
|
maxEntries?: number;
|
|
284
284
|
}
|
|
285
|
-
declare class MemoryAuditStore implements AuditStore {
|
|
285
|
+
export declare class MemoryAuditStore implements AuditStore {
|
|
286
286
|
readonly name = "memory";
|
|
287
287
|
private entries;
|
|
288
288
|
private maxEntries;
|
|
@@ -297,4 +297,4 @@ declare class MemoryAuditStore implements AuditStore {
|
|
|
297
297
|
clear(): void;
|
|
298
298
|
}
|
|
299
299
|
//#endregion
|
|
300
|
-
export { type AuditAction, type AuditContext, type AuditEntry, type AuditLogger, type AuditPluginOptions, type AuditQueryOptions, type AuditRequestLike, type AuditStore, type AuditStoreOptions,
|
|
300
|
+
export { type AuditAction, type AuditContext, type AuditEntry, type AuditLogger, type AuditPluginOptions, type AuditQueryOptions, type AuditRequestLike, type AuditStore, type AuditStoreOptions, type MemoryAuditStoreOptions, type RepositoryAuditStoreOptions, type RequestAuditLogger, _default as auditPlugin };
|
package/dist/audit/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import { g as getUserId, i as getClientId } from "../types-
|
|
3
|
-
import { t as transactionContext } from "../transactionContext-
|
|
4
|
-
import { n as declareRuntimeCapability } from "../runtimeCapabilities-
|
|
1
|
+
/*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
|
|
2
|
+
import { g as getUserId, i as getClientId } from "../types-fvO6Ovzx.mjs";
|
|
3
|
+
import { t as transactionContext } from "../transactionContext-orvnGu4F.mjs";
|
|
4
|
+
import { n as declareRuntimeCapability } from "../runtimeCapabilities-DIMKMV2G.mjs";
|
|
5
5
|
import { and, anyOf, eq, gte, lt, lte } from "@classytic/repo-core/filter";
|
|
6
6
|
import fp from "fastify-plugin";
|
|
7
7
|
//#region src/audit/repository-audit-adapter.ts
|
package/dist/auth/audit.d.mts
CHANGED
|
@@ -9,13 +9,13 @@ import { FastifyInstance } from "fastify";
|
|
|
9
9
|
* unknown events still flow through when matched, just with the BA-supplied
|
|
10
10
|
* name verbatim. Use this list for autocomplete-friendly defaults.
|
|
11
11
|
*/
|
|
12
|
-
type AuthEventName = "session.create" | "session.delete" | "session.update" | "user.create" | "user.update" | "user.delete" | "mfa.enroll" | "mfa.verify" | "mfa.failed" | "mfa.disable" | "password.reset.request" | "password.reset.complete" | "email.verify" | "org.create" | "org.delete" | "org.invite.create" | "org.invite.accept" | "org.invite.reject" | "org.member.add" | "org.member.remove" | "org.member.role.update" | "apikey.create" | "apikey.delete" | "apikey.failed" | "endpoint.before" | "endpoint.after" | "endpoint.error";
|
|
12
|
+
export type AuthEventName = "session.create" | "session.delete" | "session.update" | "user.create" | "user.update" | "user.delete" | "mfa.enroll" | "mfa.verify" | "mfa.failed" | "mfa.disable" | "password.reset.request" | "password.reset.complete" | "email.verify" | "org.create" | "org.delete" | "org.invite.create" | "org.invite.accept" | "org.invite.reject" | "org.member.add" | "org.member.remove" | "org.member.role.update" | "apikey.create" | "apikey.delete" | "apikey.failed" | "endpoint.before" | "endpoint.after" | "endpoint.error";
|
|
13
13
|
/**
|
|
14
14
|
* Resolved auth event ready for audit. The bridge constructs this from
|
|
15
15
|
* BA's hook context, then forwards to `app.audit.custom('auth', subjectId,
|
|
16
16
|
* event.name, event.payload)`.
|
|
17
17
|
*/
|
|
18
|
-
interface AuthEvent {
|
|
18
|
+
export interface AuthEvent {
|
|
19
19
|
/** Canonical name (see {@link AuthEventName}). */
|
|
20
20
|
name: string;
|
|
21
21
|
/**
|
|
@@ -34,7 +34,7 @@ interface AuthEvent {
|
|
|
34
34
|
/**
|
|
35
35
|
* Options for `wireBetterAuthAudit`.
|
|
36
36
|
*/
|
|
37
|
-
interface WireBetterAuthAuditOptions {
|
|
37
|
+
export interface WireBetterAuthAuditOptions {
|
|
38
38
|
/**
|
|
39
39
|
* Glob patterns selecting which events to audit. `*` matches a single
|
|
40
40
|
* segment (`session.*` matches `session.create` but not `session.create.foo`),
|
|
@@ -72,7 +72,7 @@ interface WireBetterAuthAuditOptions {
|
|
|
72
72
|
* Result of `wireBetterAuthAudit` — duck-typed BA `hooks` + `databaseHooks`
|
|
73
73
|
* config plus an `attach(app)` method to connect the live audit logger.
|
|
74
74
|
*/
|
|
75
|
-
interface BetterAuthAuditBridge {
|
|
75
|
+
export interface BetterAuthAuditBridge {
|
|
76
76
|
/**
|
|
77
77
|
* Spread into `betterAuth({ hooks })`. BA's top-level `hooks.before` /
|
|
78
78
|
* `hooks.after` slots take a single async function each (not an array).
|
|
@@ -157,7 +157,7 @@ interface BetterAuthAuditBridge {
|
|
|
157
157
|
* Single BA hook entry — duck-typed to avoid pinning a BA major version.
|
|
158
158
|
* The shape mirrors `better-auth`'s public `hooks.{before,after}` API.
|
|
159
159
|
*/
|
|
160
|
-
interface BetterAuthHookEntry {
|
|
160
|
+
export interface BetterAuthHookEntry {
|
|
161
161
|
matcher: (ctx: BetterAuthHookContext) => boolean;
|
|
162
162
|
/**
|
|
163
163
|
* Returns a (possibly empty) object so BA's `runBeforeHooks` /
|
|
@@ -169,7 +169,7 @@ interface BetterAuthHookEntry {
|
|
|
169
169
|
handler: (ctx: BetterAuthHookContext) => Promise<Record<string, unknown>> | Record<string, unknown>;
|
|
170
170
|
}
|
|
171
171
|
/** Subset of BA's hook context the bridge actually reads. */
|
|
172
|
-
interface BetterAuthHookContext {
|
|
172
|
+
export interface BetterAuthHookContext {
|
|
173
173
|
path?: string;
|
|
174
174
|
method?: string;
|
|
175
175
|
body?: Record<string, unknown>;
|
|
@@ -198,6 +198,6 @@ interface SessionLike {
|
|
|
198
198
|
userAgent?: string;
|
|
199
199
|
impersonatedBy?: string;
|
|
200
200
|
}
|
|
201
|
-
declare function wireBetterAuthAudit(opts?: WireBetterAuthAuditOptions): BetterAuthAuditBridge;
|
|
201
|
+
export declare function wireBetterAuthAudit(opts?: WireBetterAuthAuditOptions): BetterAuthAuditBridge;
|
|
202
202
|
//#endregion
|
|
203
|
-
export {
|
|
203
|
+
export {};
|
package/dist/auth/audit.mjs
CHANGED
package/dist/auth/index.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
import { i as RequestScope } from "../types-Ddl9OjmE.mjs";
|
|
3
3
|
import { l as PermissionCheck } from "../base-CZyixEQR.mjs";
|
|
4
|
-
import { At as AuthHelpers, jt as AuthPluginOptions } from "../index-
|
|
4
|
+
import { At as AuthHelpers, jt as AuthPluginOptions } from "../index-WH7xgvxS.mjs";
|
|
5
5
|
import { t as ExternalOpenApiPaths } from "../externalPaths-CmGOxOtD.mjs";
|
|
6
6
|
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";
|
|
7
7
|
import { FastifyPluginAsync, FastifyReply as FastifyReply$1, FastifyRequest } from "fastify";
|
|
@@ -203,7 +203,7 @@ declare module "fastify" {
|
|
|
203
203
|
*/
|
|
204
204
|
/** Verifies one credential scheme's value; the scope to install, or `null` when it is not valid. */
|
|
205
205
|
type CredentialVerifier = (credentials: string, request: FastifyRequest) => Promise<RequestScope | null>;
|
|
206
|
-
declare function createBetterAuthAdapter(options: BetterAuthAdapterOptions): BetterAuthAdapterResult;
|
|
206
|
+
export declare function createBetterAuthAdapter(options: BetterAuthAdapterOptions): BetterAuthAdapterResult;
|
|
207
207
|
//#endregion
|
|
208
208
|
//#region src/auth/betterAuthOpenApi.d.ts
|
|
209
209
|
interface BetterAuthOpenApiOptions {
|
|
@@ -241,7 +241,7 @@ interface BetterAuthOpenApiOptions {
|
|
|
241
241
|
* endpoints, converts their Zod schemas to JSON Schema via `z.toJSONSchema()`,
|
|
242
242
|
* and returns a complete `ExternalOpenApiPaths` object ready for Arc's spec builder.
|
|
243
243
|
*/
|
|
244
|
-
declare function extractBetterAuthOpenApi(authApi: Record<string, unknown>, options?: BetterAuthOpenApiOptions): ExternalOpenApiPaths;
|
|
244
|
+
export declare function extractBetterAuthOpenApi(authApi: Record<string, unknown>, options?: BetterAuthOpenApiOptions): ExternalOpenApiPaths;
|
|
245
245
|
//#endregion
|
|
246
246
|
//#region src/auth/trustedOrigins.d.ts
|
|
247
247
|
/**
|
|
@@ -318,6 +318,6 @@ interface MirrorTrustedOriginsOptions {
|
|
|
318
318
|
* array.
|
|
319
319
|
* - `[canonicalUrl]` when `corsOrigins` is `false` / `undefined`.
|
|
320
320
|
*/
|
|
321
|
-
declare function mirrorTrustedOriginsFromCors(options: MirrorTrustedOriginsOptions): string[];
|
|
321
|
+
export declare function mirrorTrustedOriginsFromCors(options: MirrorTrustedOriginsOptions): string[];
|
|
322
322
|
//#endregion
|
|
323
|
-
export { type AuthPluginOptions, type BetterAuthAdapterOptions, type BetterAuthAdapterResult, type BetterAuthHandler, type BetterAuthOpenApiOptions, type CorsOriginsConfig, type CredentialVerifier, MemorySessionStore, type MemorySessionStoreOptions, type MirrorTrustedOriginsOptions, type SessionCookieOptions, type SessionData, type SessionManagerOptions, type SessionManagerResult, type SessionStore, _default as authPlugin,
|
|
323
|
+
export { type AuthPluginOptions, type BetterAuthAdapterOptions, type BetterAuthAdapterResult, type BetterAuthHandler, type BetterAuthOpenApiOptions, type CorsOriginsConfig, type CredentialVerifier, MemorySessionStore, type MemorySessionStoreOptions, type MirrorTrustedOriginsOptions, type SessionCookieOptions, type SessionData, type SessionManagerOptions, type SessionManagerResult, type SessionStore, _default as authPlugin, createSessionManager };
|
package/dist/auth/index.mjs
CHANGED
|
@@ -1,10 +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 { n as declareRuntimeCapability } from "../runtimeCapabilities-
|
|
7
|
-
import { E as requireOrgRole, T as requireOrgMembership, k as requireTeamMembership } from "../permissions-
|
|
1
|
+
/*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
|
|
2
|
+
import { d as createDomainError, l as UnauthorizedError, p as isArcError, t as ArcError } from "../errors-CW4anJBy.mjs";
|
|
3
|
+
import { n as requireSingleHeaderValue } from "../headers-DKZQKL-Z.mjs";
|
|
4
|
+
import { n as getUserRoles, r as normalizeRoles } from "../userHelpers-C76zD5pa.mjs";
|
|
5
|
+
import { o as toJsonSchema } from "../schemaConverter-BVjkQ5DD.mjs";
|
|
6
|
+
import { n as declareRuntimeCapability } from "../runtimeCapabilities-DIMKMV2G.mjs";
|
|
7
|
+
import { E as requireOrgRole, T as requireOrgMembership, k as requireTeamMembership } from "../permissions-C5ijIz5Q.mjs";
|
|
8
8
|
import { ARC_ERROR_CODES } from "@classytic/repo-core/errors";
|
|
9
9
|
import { isProductionEnv } from "@classytic/primitives/environment";
|
|
10
10
|
import { createHmac, randomUUID, timingSafeEqual } from "node:crypto";
|
|
@@ -48,7 +48,10 @@ const authPlugin = async (fastify, opts = {}) => {
|
|
|
48
48
|
let jwtContext = null;
|
|
49
49
|
if (jwtConfig?.secret) {
|
|
50
50
|
if (jwtConfig.secret.length < 32) throw new Error(`JWT secret must be at least 32 characters (current: ${jwtConfig.secret.length}).\nUse a strong random secret for production.`);
|
|
51
|
-
const jwtPlugin = await import("@fastify/jwt")
|
|
51
|
+
const jwtPlugin = await import("@fastify/jwt").catch((error) => {
|
|
52
|
+
if (error instanceof Error && "code" in error && error.code === "ERR_MODULE_NOT_FOUND" && error.message.includes("@fastify/jwt")) throw new Error("Arc JWT authentication requires @fastify/jwt. Run `npm install @fastify/jwt`. Better Auth and custom authenticators do not require this package.", { cause: error });
|
|
53
|
+
throw error;
|
|
54
|
+
});
|
|
52
55
|
await fastify.register(jwtPlugin.default ?? jwtPlugin, {
|
|
53
56
|
secret: jwtConfig.secret,
|
|
54
57
|
sign: {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { i as SessionData, s as SessionStore } from "../sessionManager-qimlKV0P.mjs";
|
|
3
3
|
//#region src/auth/redis-session.d.ts
|
|
4
4
|
/** Minimal Redis client interface — compatible with ioredis */
|
|
5
|
-
interface RedisLike {
|
|
5
|
+
export interface RedisLike {
|
|
6
6
|
get(key: string): Promise<string | null>;
|
|
7
7
|
set(key: string, value: string, ...args: unknown[]): Promise<unknown>;
|
|
8
8
|
del(...keys: string[]): Promise<number>;
|
|
@@ -11,7 +11,7 @@ interface RedisLike {
|
|
|
11
11
|
srem(key: string, ...members: string[]): Promise<number>;
|
|
12
12
|
expire(key: string, seconds: number): Promise<number>;
|
|
13
13
|
}
|
|
14
|
-
interface RedisSessionStoreOptions {
|
|
14
|
+
export interface RedisSessionStoreOptions {
|
|
15
15
|
/** Redis client instance (ioredis or compatible) */
|
|
16
16
|
redis: RedisLike;
|
|
17
17
|
/** Key prefix for session keys (default: 'arc:session:') */
|
|
@@ -28,7 +28,7 @@ interface RedisSessionStoreOptions {
|
|
|
28
28
|
*
|
|
29
29
|
* Session expiration is handled by Redis TTL — no cleanup interval needed.
|
|
30
30
|
*/
|
|
31
|
-
declare class RedisSessionStore implements SessionStore {
|
|
31
|
+
export declare class RedisSessionStore implements SessionStore {
|
|
32
32
|
private redis;
|
|
33
33
|
private prefix;
|
|
34
34
|
private userPrefix;
|
|
@@ -39,5 +39,4 @@ declare class RedisSessionStore implements SessionStore {
|
|
|
39
39
|
deleteAll(userId: string): Promise<void>;
|
|
40
40
|
deleteAllExcept(userId: string, currentSessionId: string): Promise<void>;
|
|
41
41
|
}
|
|
42
|
-
//#endregion
|
|
43
|
-
export { RedisLike, RedisSessionStore, RedisSessionStoreOptions };
|
|
42
|
+
//#endregion
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import { t as arcLog } from "./logger-
|
|
3
|
-
import { t as conjoinPolicyFilters } from "./filter-merge-
|
|
4
|
-
import { t as ArcError } from "./errors-
|
|
1
|
+
/*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
|
|
2
|
+
import { t as arcLog } from "./logger-D4V1zGLI.mjs";
|
|
3
|
+
import { t as conjoinPolicyFilters } from "./filter-merge-DGM-GQ1J.mjs";
|
|
4
|
+
import { t as ArcError } from "./errors-CW4anJBy.mjs";
|
|
5
5
|
//#region src/permissions/authorizationDecision.ts
|
|
6
6
|
const log = arcLog("permissions:enforce");
|
|
7
7
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import { t as conjoinPolicyFilters } from "./filter-merge-
|
|
3
|
-
import { C as toRepositoryFilter } from "./plugin-
|
|
4
|
-
import { i as compileAggRequest, t as adapterSupportsAggregate } from "./validate-
|
|
1
|
+
/*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
|
|
2
|
+
import { t as conjoinPolicyFilters } from "./filter-merge-DGM-GQ1J.mjs";
|
|
3
|
+
import { C as toRepositoryFilter } from "./plugin-DALd9dcF.mjs";
|
|
4
|
+
import { i as compileAggRequest, t as adapterSupportsAggregate } from "./validate-CWp-lsrm.mjs";
|
|
5
5
|
//#region src/core/aggregation/buildHandler.ts
|
|
6
6
|
/**
|
|
7
7
|
* Framework-agnostic aggregation execution. Runs safety guards,
|
package/dist/cache/index.d.mts
CHANGED
|
@@ -12,18 +12,18 @@ import { n as UpstashKeyValueCommands, t as IoredisKeyValueCommands } from "../r
|
|
|
12
12
|
* to ensure multi-tenant isolation and O(1) version-based invalidation.
|
|
13
13
|
*/
|
|
14
14
|
/** Build a deterministic cache key for a query */
|
|
15
|
-
declare function buildQueryKey(resource: string, operation: string, resourceVersion: number, params: Record<string, unknown>, userId?: string, orgId?: string): string;
|
|
15
|
+
export declare function buildQueryKey(resource: string, operation: string, resourceVersion: number, params: Record<string, unknown>, userId?: string, orgId?: string): string;
|
|
16
16
|
/** Resource version key — stored in CacheStore, bumped on mutations */
|
|
17
|
-
declare function versionKey(resource: string): string;
|
|
17
|
+
export declare function versionKey(resource: string): string;
|
|
18
18
|
/** Tag version key — stored in CacheStore, bumped on cross-resource invalidation */
|
|
19
|
-
declare function tagVersionKey(tag: string): string;
|
|
19
|
+
export declare function tagVersionKey(tag: string): string;
|
|
20
20
|
/**
|
|
21
21
|
* Digest of the query params for a cache key — repo-core's canonical serialiser (escaped,
|
|
22
22
|
* type-preserving, key-order-free) under SHA-256. Two different queries never share a key: a
|
|
23
23
|
* delimiter inside a value, `1` vs `"1"`, two dates or two regexes all stay distinct, and a
|
|
24
24
|
* cryptographic digest leaves no crafted collision onto another caller's cached result.
|
|
25
25
|
*/
|
|
26
|
-
declare function hashParams(params: Record<string, unknown>): string;
|
|
26
|
+
export declare function hashParams(params: Record<string, unknown>): string;
|
|
27
27
|
//#endregion
|
|
28
28
|
//#region src/cache/memory.d.ts
|
|
29
29
|
interface MemoryCacheStoreOptions {
|
|
@@ -61,7 +61,7 @@ interface MemoryCacheStoreOptions {
|
|
|
61
61
|
* - Entry size guard to avoid runaway memory usage
|
|
62
62
|
* - Stats tracking for observability
|
|
63
63
|
*/
|
|
64
|
-
declare class MemoryCacheStore<TValue = unknown> implements CacheStore<TValue> {
|
|
64
|
+
export declare class MemoryCacheStore<TValue = unknown> implements CacheStore<TValue> {
|
|
65
65
|
readonly name = "memory-cache";
|
|
66
66
|
private readonly cache;
|
|
67
67
|
private readonly defaultTtlSeconds;
|
|
@@ -149,7 +149,7 @@ interface RedisCacheStoreOptions {
|
|
|
149
149
|
* Suitable for multi-instance and horizontally scaled deployments.
|
|
150
150
|
* Uses pipeline batching when available for bulk operations.
|
|
151
151
|
*/
|
|
152
|
-
declare class RedisCacheStore<TValue = unknown> implements CacheStore<TValue> {
|
|
152
|
+
export declare class RedisCacheStore<TValue = unknown> implements CacheStore<TValue> {
|
|
153
153
|
readonly name = "redis-cache";
|
|
154
154
|
private readonly client;
|
|
155
155
|
private readonly prefix;
|
|
@@ -214,7 +214,7 @@ interface IoredisLike extends IoredisKeyValueCommands {
|
|
|
214
214
|
* });
|
|
215
215
|
* ```
|
|
216
216
|
*/
|
|
217
|
-
declare function ioredisAsCacheClient(client: IoredisLike): RedisCacheClient;
|
|
217
|
+
export declare function ioredisAsCacheClient(client: IoredisLike): RedisCacheClient;
|
|
218
218
|
/**
|
|
219
219
|
* Minimal `@upstash/redis` REST SDK shape the cache depends on — the shared
|
|
220
220
|
* key/value commands (`utils/redisShapes.ts`) plus `incrby`. HTTP-based, so it
|
|
@@ -241,6 +241,6 @@ interface UpstashRedisLike extends UpstashKeyValueCommands {
|
|
|
241
241
|
* });
|
|
242
242
|
* ```
|
|
243
243
|
*/
|
|
244
|
-
declare function upstashAsCacheClient(client: UpstashRedisLike): RedisCacheClient;
|
|
244
|
+
export declare function upstashAsCacheClient(client: UpstashRedisLike): RedisCacheClient;
|
|
245
245
|
//#endregion
|
|
246
|
-
export { type CacheEnvelope, type CacheLogger, type CacheResult, type CacheStats, type CacheStatus, type CacheStore, type CrossResourceRule, type IoredisLike,
|
|
246
|
+
export { type CacheEnvelope, type CacheLogger, type CacheResult, type CacheStats, type CacheStatus, type CacheStore, type CrossResourceRule, type IoredisLike, type MemoryCacheStoreOptions, QueryCache, type QueryCacheConfig, type QueryCacheDefaults, type QueryCachePluginOptions, type RedisCacheClient, type RedisCacheStoreOptions, type RedisPipeline, type UpstashRedisLike, queryCachePlugin };
|
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.44.0 | MIT | https://classytic.com */
|
|
2
|
+
import { i as versionKey, n as hashParams, r as tagVersionKey, t as buildQueryKey } from "../keys-CpoiZ8hU.mjs";
|
|
3
|
+
import { t as MemoryCacheStore } from "../memory-CTa5pOCW.mjs";
|
|
4
|
+
import { r as QueryCache, t as queryCachePlugin } from "../queryCachePlugin-BATECpyh.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 {
|
|
1
|
+
/*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
|
|
2
|
+
import { r as __exportAll } from "./rolldown-runtime-MYrLNGnq.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,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { A as RequestWithExtras } from "../index-
|
|
2
|
+
import { A as RequestWithExtras } from "../index-WH7xgvxS.mjs";
|
|
3
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
4
|
import { n as ArcModule } from "../types-BJ-2XqVF.mjs";
|
|
5
5
|
import { PurgeStrategyKind as PurgeStrategyKind$1 } from "@classytic/primitives/retention";
|
|
@@ -38,7 +38,7 @@ interface RecipeFromStepsInput {
|
|
|
38
38
|
/** Provider steps in EXECUTION ORDER. */
|
|
39
39
|
readonly steps: readonly CleanupStep[];
|
|
40
40
|
}
|
|
41
|
-
declare function recipeFromSteps(input: RecipeFromStepsInput): CleanupRecipe;
|
|
41
|
+
export declare function recipeFromSteps(input: RecipeFromStepsInput): CleanupRecipe;
|
|
42
42
|
//#endregion
|
|
43
43
|
//#region src/cleanup/errors.d.ts
|
|
44
44
|
/**
|
|
@@ -83,7 +83,7 @@ type CleanupErrorCode =
|
|
|
83
83
|
* step 4 of its classifier — a numeric `statusCode` + a separatored domain
|
|
84
84
|
* `code` maps to that exact status + code on the wire, never `arc.internal_error`).
|
|
85
85
|
*/
|
|
86
|
-
declare class CleanupError extends Error {
|
|
86
|
+
export declare class CleanupError extends Error {
|
|
87
87
|
readonly code: CleanupErrorCode;
|
|
88
88
|
readonly status: number;
|
|
89
89
|
/** Alias of {@link status} — the property arc's error handler classifies on. */
|
|
@@ -96,11 +96,11 @@ declare class CleanupError extends Error {
|
|
|
96
96
|
* durable `cancelRequested` flag is set. NOT a wire error — `processRun`
|
|
97
97
|
* catches it and CAS-transitions the run to `cancelled`.
|
|
98
98
|
*/
|
|
99
|
-
declare class CleanupCancelled extends Error {
|
|
99
|
+
export declare class CleanupCancelled extends Error {
|
|
100
100
|
readonly runId: string;
|
|
101
101
|
constructor(runId: string);
|
|
102
102
|
}
|
|
103
|
-
declare const CleanupErrors: {
|
|
103
|
+
export declare const CleanupErrors: {
|
|
104
104
|
readonly unknownRecipe: (id: string) => CleanupError;
|
|
105
105
|
readonly duplicateRecipe: (id: string) => CleanupError;
|
|
106
106
|
readonly unavailable: (id: string, reason: string) => CleanupError;
|
|
@@ -131,7 +131,7 @@ declare const CleanupErrors: {
|
|
|
131
131
|
* In-memory {@link CleanupRunStore}. Single-process only — see the module
|
|
132
132
|
* docblock for the production caveat.
|
|
133
133
|
*/
|
|
134
|
-
declare class MemoryCleanupRunStore implements CleanupRunStore {
|
|
134
|
+
export declare class MemoryCleanupRunStore implements CleanupRunStore {
|
|
135
135
|
#private;
|
|
136
136
|
/** Live run state, keyed by run id. Exposed for tests/inspection. */
|
|
137
137
|
readonly runs: Map<string, CleanupRun>;
|
|
@@ -148,7 +148,7 @@ declare class MemoryCleanupRunStore implements CleanupRunStore {
|
|
|
148
148
|
* In-memory {@link CleanupEvidenceStore} — idempotent by
|
|
149
149
|
* `evidence.operationId`, exactly as the port requires.
|
|
150
150
|
*/
|
|
151
|
-
declare class MemoryCleanupEvidenceStore implements CleanupEvidenceStore {
|
|
151
|
+
export declare class MemoryCleanupEvidenceStore implements CleanupEvidenceStore {
|
|
152
152
|
#private;
|
|
153
153
|
readonly evidence: PurgeEvidence[];
|
|
154
154
|
readonly manifests: CleanupManifest[];
|
|
@@ -166,7 +166,7 @@ declare class MemoryCleanupEvidenceStore implements CleanupEvidenceStore {
|
|
|
166
166
|
* gives you a microtask-deferred in-process queue that DOES auto-run
|
|
167
167
|
* `processRun` off the request path.
|
|
168
168
|
*/
|
|
169
|
-
declare class MemoryCleanupJobQueue implements CleanupJobQueue {
|
|
169
|
+
export declare class MemoryCleanupJobQueue implements CleanupJobQueue {
|
|
170
170
|
readonly jobs: CleanupJob[];
|
|
171
171
|
enqueue(job: CleanupJob): Promise<void>;
|
|
172
172
|
/** Take everything enqueued so far, clearing the buffer. */
|
|
@@ -195,7 +195,7 @@ interface CleanupRegistry {
|
|
|
195
195
|
* construction if two recipes share an id — a boot-time failure, never a
|
|
196
196
|
* silent last-wins overwrite.
|
|
197
197
|
*/
|
|
198
|
-
declare function createCleanupRegistry(recipes: readonly CleanupRecipe[]): CleanupRegistry;
|
|
198
|
+
export declare function createCleanupRegistry(recipes: readonly CleanupRecipe[]): CleanupRegistry;
|
|
199
199
|
//#endregion
|
|
200
200
|
//#region src/cleanup/service.d.ts
|
|
201
201
|
interface CleanupServiceDeps {
|
|
@@ -259,7 +259,7 @@ interface CleanupService {
|
|
|
259
259
|
cancel(id: string, input?: CancelInput): Promise<CleanupRun>;
|
|
260
260
|
retry(id: string): Promise<CleanupRun>;
|
|
261
261
|
}
|
|
262
|
-
declare function createCleanupService(deps: CleanupServiceDeps): CleanupService;
|
|
262
|
+
export declare function createCleanupService(deps: CleanupServiceDeps): CleanupService;
|
|
263
263
|
//#endregion
|
|
264
264
|
//#region src/cleanup/module.d.ts
|
|
265
265
|
interface DataCleanupModuleDeps {
|
|
@@ -330,15 +330,15 @@ interface DataCleanupModuleDeps {
|
|
|
330
330
|
/** Injected clock (tests). */
|
|
331
331
|
now?: () => Date;
|
|
332
332
|
}
|
|
333
|
-
declare function createDataCleanupModule(deps: DataCleanupModuleDeps): ArcModule<CleanupService>;
|
|
333
|
+
export declare function createDataCleanupModule(deps: DataCleanupModuleDeps): ArcModule<CleanupService>;
|
|
334
334
|
//#endregion
|
|
335
335
|
//#region src/cleanup/plan-digest.d.ts
|
|
336
336
|
/** `sha256(canonical(planMaterial))` as a hex digest. */
|
|
337
|
-
declare function computePlanDigest(plan: Omit<CleanupPlan, "digest">): string;
|
|
337
|
+
export declare function computePlanDigest(plan: Omit<CleanupPlan, "digest">): string;
|
|
338
338
|
/**
|
|
339
339
|
* Integrity checksum of a completed manifest (§5). Excludes the digest field
|
|
340
340
|
* itself. Dates (e.g. `completedAt`) participate via the strict canonicalizer.
|
|
341
341
|
*/
|
|
342
|
-
declare function computeManifestDigest(manifest: Record<string, unknown>): string;
|
|
342
|
+
export declare function computeManifestDigest(manifest: Record<string, unknown>): string;
|
|
343
343
|
//#endregion
|
|
344
|
-
export { type Availability, CLEANUP_TERMINAL_STATUSES, type CancelInput, type CleanupCancelRequest,
|
|
344
|
+
export { type Availability, CLEANUP_TERMINAL_STATUSES, type CancelInput, type CleanupCancelRequest, type CleanupContext, type CleanupErrorCode, 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, type PreviewInput, type PurgeActor, type PurgeEvidence, type PurgeResourceResult, type PurgeStrategyKind, type PurgeVerificationSummary, type RecipeFromStepsInput, type VerificationCheck, type VerificationResult };
|
package/dist/cleanup/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import { g as getUserId } from "../types-
|
|
3
|
-
import { t as defineResource } from "../defineResource-
|
|
4
|
-
import { t as defineModule } from "../module
|
|
1
|
+
/*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
|
|
2
|
+
import { g as getUserId } from "../types-fvO6Ovzx.mjs";
|
|
3
|
+
import { t as defineResource } from "../defineResource-gUp9ug66.mjs";
|
|
4
|
+
import { t as defineModule } from "../module--L0iBIZz.mjs";
|
|
5
5
|
import { createPurgeEvidence } from "@classytic/primitives/retention";
|
|
6
6
|
import { canonicalJson, sha256Hex } from "@classytic/primitives/canonical";
|
|
7
7
|
//#region src/cleanup/errors.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
|
-
import { F as ResourceDefinition, X as RouteSchemaOptions, kt as RateLimitConfig } from "../../index-
|
|
2
|
+
import { F as ResourceDefinition, X as RouteSchemaOptions, kt as RateLimitConfig } from "../../index-WH7xgvxS.mjs";
|
|
3
3
|
//#region src/cli/commands/describe.d.ts
|
|
4
|
-
interface DescribedResource {
|
|
4
|
+
export interface DescribedResource {
|
|
5
5
|
name: string;
|
|
6
6
|
displayName: string;
|
|
7
7
|
prefix: string;
|
|
@@ -124,7 +124,7 @@ interface EventDescription {
|
|
|
124
124
|
* Hosts that want a JSON dump of one resource without spawning the CLI
|
|
125
125
|
* can call this directly.
|
|
126
126
|
*/
|
|
127
|
-
declare function describeResource(resource: ResourceDefinition<unknown>, module?: string): DescribedResource;
|
|
128
|
-
declare function describe(args: string[]): Promise<void>;
|
|
127
|
+
export declare function describeResource(resource: ResourceDefinition<unknown>, module?: string): DescribedResource;
|
|
128
|
+
export declare function describe(args: string[]): Promise<void>;
|
|
129
129
|
//#endregion
|
|
130
|
-
export {
|
|
130
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/*! @classytic/arc v2.
|
|
2
|
-
import { t as CRUD_OPERATIONS } from "../../constants-
|
|
3
|
-
import { n as stringifyMeasureMap } from "../../ResourceRegistry-
|
|
1
|
+
/*! @classytic/arc v2.44.0 | MIT | https://classytic.com */
|
|
2
|
+
import { t as CRUD_OPERATIONS } from "../../constants-B2QHb6u6.mjs";
|
|
3
|
+
import { n as stringifyMeasureMap } from "../../ResourceRegistry-DJxHUpE4.mjs";
|
|
4
4
|
import { resolve } from "node:path";
|
|
5
5
|
import { pathToFileURL } from "node:url";
|
|
6
6
|
//#region src/cli/commands/describe.ts
|