@classytic/arc 1.1.0 → 2.1.2
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 +247 -794
- package/bin/arc.js +91 -52
- package/dist/EventTransport-BD2U0BTc.d.mts +100 -0
- package/dist/EventTransport-BD2U0BTc.d.mts.map +1 -0
- package/dist/HookSystem-BsGV-j2l.mjs +405 -0
- package/dist/HookSystem-BsGV-j2l.mjs.map +1 -0
- package/dist/ResourceRegistry-DsN4KJjV.mjs +250 -0
- package/dist/ResourceRegistry-DsN4KJjV.mjs.map +1 -0
- package/dist/adapters/index.d.mts +5 -0
- package/dist/adapters/index.mjs +3 -0
- package/dist/audit/index.d.mts +82 -0
- package/dist/audit/index.d.mts.map +1 -0
- package/dist/audit/index.mjs +276 -0
- package/dist/audit/index.mjs.map +1 -0
- package/dist/audit/mongodb.d.mts +5 -0
- package/dist/audit/mongodb.mjs +3 -0
- package/dist/audited-C3T5DTUx.mjs +141 -0
- package/dist/audited-C3T5DTUx.mjs.map +1 -0
- package/dist/auth/index.d.mts +189 -0
- package/dist/auth/index.d.mts.map +1 -0
- package/dist/auth/index.mjs +1102 -0
- package/dist/auth/index.mjs.map +1 -0
- package/dist/auth/redis-session.d.mts +44 -0
- package/dist/auth/redis-session.d.mts.map +1 -0
- package/dist/auth/redis-session.mjs +76 -0
- package/dist/auth/redis-session.mjs.map +1 -0
- package/dist/betterAuthOpenApi-BrHKeSAx.mjs +250 -0
- package/dist/betterAuthOpenApi-BrHKeSAx.mjs.map +1 -0
- package/dist/cache/index.d.mts +146 -0
- package/dist/cache/index.d.mts.map +1 -0
- package/dist/cache/index.mjs +92 -0
- package/dist/cache/index.mjs.map +1 -0
- package/dist/caching-Bl28lYsR.mjs +94 -0
- package/dist/caching-Bl28lYsR.mjs.map +1 -0
- package/dist/chunk-C7Uep-_p.mjs +20 -0
- package/dist/circuitBreaker-DeY4FCjs.mjs +1097 -0
- package/dist/circuitBreaker-DeY4FCjs.mjs.map +1 -0
- package/dist/cli/commands/describe.d.mts +19 -0
- package/dist/cli/commands/describe.d.mts.map +1 -0
- package/dist/cli/commands/describe.mjs +239 -0
- package/dist/cli/commands/describe.mjs.map +1 -0
- package/dist/cli/commands/docs.d.mts +14 -0
- package/dist/cli/commands/docs.d.mts.map +1 -0
- package/dist/cli/commands/docs.mjs +53 -0
- package/dist/cli/commands/docs.mjs.map +1 -0
- package/dist/cli/commands/{generate.d.ts → generate.d.mts} +3 -1
- package/dist/cli/commands/generate.d.mts.map +1 -0
- package/dist/cli/commands/generate.mjs +358 -0
- package/dist/cli/commands/generate.mjs.map +1 -0
- package/dist/cli/commands/{init.d.ts → init.d.mts} +12 -8
- package/dist/cli/commands/init.d.mts.map +1 -0
- package/dist/cli/commands/{init.js → init.mjs} +807 -616
- package/dist/cli/commands/init.mjs.map +1 -0
- package/dist/cli/commands/introspect.d.mts +11 -0
- package/dist/cli/commands/introspect.d.mts.map +1 -0
- package/dist/cli/commands/introspect.mjs +76 -0
- package/dist/cli/commands/introspect.mjs.map +1 -0
- package/dist/cli/index.d.mts +17 -0
- package/dist/cli/index.d.mts.map +1 -0
- package/dist/cli/index.mjs +157 -0
- package/dist/cli/index.mjs.map +1 -0
- package/dist/constants-DdXFXQtN.mjs +85 -0
- package/dist/constants-DdXFXQtN.mjs.map +1 -0
- package/dist/core/index.d.mts +5 -0
- package/dist/core/index.mjs +4 -0
- package/dist/createApp-CUgNqegw.mjs +560 -0
- package/dist/createApp-CUgNqegw.mjs.map +1 -0
- package/dist/defineResource-k0_BDn8v.mjs +2197 -0
- package/dist/defineResource-k0_BDn8v.mjs.map +1 -0
- package/dist/discovery/index.d.mts +47 -0
- package/dist/discovery/index.d.mts.map +1 -0
- package/dist/discovery/index.mjs +110 -0
- package/dist/discovery/index.mjs.map +1 -0
- package/dist/docs/index.d.mts +163 -0
- package/dist/docs/index.d.mts.map +1 -0
- package/dist/docs/index.mjs +73 -0
- package/dist/docs/index.mjs.map +1 -0
- package/dist/elevation-BRy3yFWT.mjs +113 -0
- package/dist/elevation-BRy3yFWT.mjs.map +1 -0
- package/dist/elevation-B_2dRLVP.d.mts +88 -0
- package/dist/elevation-B_2dRLVP.d.mts.map +1 -0
- package/dist/errorHandler-BbcgBmIH.d.mts +73 -0
- package/dist/errorHandler-BbcgBmIH.d.mts.map +1 -0
- package/dist/errorHandler-C1okiriz.mjs +109 -0
- package/dist/errorHandler-C1okiriz.mjs.map +1 -0
- package/dist/errors-B9bZok84.mjs +212 -0
- package/dist/errors-B9bZok84.mjs.map +1 -0
- package/dist/errors-ChKiFz62.d.mts +125 -0
- package/dist/errors-ChKiFz62.d.mts.map +1 -0
- package/dist/eventPlugin-CTrLH3mt.d.mts +125 -0
- package/dist/eventPlugin-CTrLH3mt.d.mts.map +1 -0
- package/dist/eventPlugin-DGR_B2on.mjs +230 -0
- package/dist/eventPlugin-DGR_B2on.mjs.map +1 -0
- package/dist/events/index.d.mts +54 -0
- package/dist/events/index.d.mts.map +1 -0
- package/dist/events/index.mjs +52 -0
- package/dist/events/index.mjs.map +1 -0
- package/dist/events/transports/redis-stream-entry.d.mts +2 -0
- package/dist/events/transports/redis-stream-entry.mjs +178 -0
- package/dist/events/transports/redis-stream-entry.mjs.map +1 -0
- package/dist/events/transports/redis.d.mts +77 -0
- package/dist/events/transports/redis.d.mts.map +1 -0
- package/dist/events/transports/redis.mjs +125 -0
- package/dist/events/transports/redis.mjs.map +1 -0
- package/dist/externalPaths-DlINfKbP.d.mts +51 -0
- package/dist/externalPaths-DlINfKbP.d.mts.map +1 -0
- package/dist/factory/index.d.mts +64 -0
- package/dist/factory/index.d.mts.map +1 -0
- package/dist/factory/index.mjs +3 -0
- package/dist/fastifyAdapter-BkrGrlFi.d.mts +217 -0
- package/dist/fastifyAdapter-BkrGrlFi.d.mts.map +1 -0
- package/dist/fields-DyaDVX4J.d.mts +110 -0
- package/dist/fields-DyaDVX4J.d.mts.map +1 -0
- package/dist/fields-iagOozy0.mjs +115 -0
- package/dist/fields-iagOozy0.mjs.map +1 -0
- package/dist/hooks/index.d.mts +4 -0
- package/dist/hooks/index.mjs +3 -0
- package/dist/idempotency/index.d.mts +97 -0
- package/dist/idempotency/index.d.mts.map +1 -0
- package/dist/idempotency/index.mjs +320 -0
- package/dist/idempotency/index.mjs.map +1 -0
- package/dist/idempotency/mongodb.d.mts +2 -0
- package/dist/idempotency/mongodb.mjs +115 -0
- package/dist/idempotency/mongodb.mjs.map +1 -0
- package/dist/idempotency/redis.d.mts +2 -0
- package/dist/idempotency/redis.mjs +104 -0
- package/dist/idempotency/redis.mjs.map +1 -0
- package/dist/index.d.mts +261 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +105 -0
- package/dist/index.mjs.map +1 -0
- package/dist/integrations/event-gateway.d.mts +47 -0
- package/dist/integrations/event-gateway.d.mts.map +1 -0
- package/dist/integrations/event-gateway.mjs +44 -0
- package/dist/integrations/event-gateway.mjs.map +1 -0
- package/dist/integrations/index.d.mts +5 -0
- package/dist/integrations/index.mjs +1 -0
- package/dist/integrations/jobs.d.mts +104 -0
- package/dist/integrations/jobs.d.mts.map +1 -0
- package/dist/integrations/jobs.mjs +124 -0
- package/dist/integrations/jobs.mjs.map +1 -0
- package/dist/integrations/streamline.d.mts +61 -0
- package/dist/integrations/streamline.d.mts.map +1 -0
- package/dist/integrations/streamline.mjs +126 -0
- package/dist/integrations/streamline.mjs.map +1 -0
- package/dist/integrations/websocket.d.mts +83 -0
- package/dist/integrations/websocket.d.mts.map +1 -0
- package/dist/integrations/websocket.mjs +289 -0
- package/dist/integrations/websocket.mjs.map +1 -0
- package/dist/interface-B01JvPVc.d.mts +78 -0
- package/dist/interface-B01JvPVc.d.mts.map +1 -0
- package/dist/interface-CZe8IkMf.d.mts +55 -0
- package/dist/interface-CZe8IkMf.d.mts.map +1 -0
- package/dist/interface-Ch8HU9uM.d.mts +1098 -0
- package/dist/interface-Ch8HU9uM.d.mts.map +1 -0
- package/dist/introspectionPlugin-rFdO8ZUa.mjs +54 -0
- package/dist/introspectionPlugin-rFdO8ZUa.mjs.map +1 -0
- package/dist/keys-BqNejWup.mjs +43 -0
- package/dist/keys-BqNejWup.mjs.map +1 -0
- package/dist/logger-Df2O2WsW.mjs +79 -0
- package/dist/logger-Df2O2WsW.mjs.map +1 -0
- package/dist/memory-cQgelFOj.mjs +144 -0
- package/dist/memory-cQgelFOj.mjs.map +1 -0
- package/dist/migrations/index.d.mts +157 -0
- package/dist/migrations/index.d.mts.map +1 -0
- package/dist/migrations/index.mjs +261 -0
- package/dist/migrations/index.mjs.map +1 -0
- package/dist/mongodb-BfJVlUJH.mjs +94 -0
- package/dist/mongodb-BfJVlUJH.mjs.map +1 -0
- package/dist/mongodb-CGzRbfAK.d.mts +119 -0
- package/dist/mongodb-CGzRbfAK.d.mts.map +1 -0
- package/dist/mongodb-JN-9JA7K.d.mts +72 -0
- package/dist/mongodb-JN-9JA7K.d.mts.map +1 -0
- package/dist/openapi-G3Cw7XuM.mjs +524 -0
- package/dist/openapi-G3Cw7XuM.mjs.map +1 -0
- package/dist/org/index.d.mts +69 -0
- package/dist/org/index.d.mts.map +1 -0
- package/dist/org/index.mjs +514 -0
- package/dist/org/index.mjs.map +1 -0
- package/dist/org/types.d.mts +83 -0
- package/dist/org/types.d.mts.map +1 -0
- package/dist/org/types.mjs +1 -0
- package/dist/permissions/index.d.mts +279 -0
- package/dist/permissions/index.d.mts.map +1 -0
- package/dist/permissions/index.mjs +579 -0
- package/dist/permissions/index.mjs.map +1 -0
- package/dist/plugins/index.d.mts +173 -0
- package/dist/plugins/index.d.mts.map +1 -0
- package/dist/plugins/index.mjs +523 -0
- package/dist/plugins/index.mjs.map +1 -0
- package/dist/plugins/response-cache.d.mts +88 -0
- package/dist/plugins/response-cache.d.mts.map +1 -0
- package/dist/plugins/response-cache.mjs +284 -0
- package/dist/plugins/response-cache.mjs.map +1 -0
- package/dist/plugins/tracing-entry.d.mts +2 -0
- package/dist/plugins/tracing-entry.mjs +186 -0
- package/dist/plugins/tracing-entry.mjs.map +1 -0
- package/dist/pluralize-CEweyOEm.mjs +87 -0
- package/dist/pluralize-CEweyOEm.mjs.map +1 -0
- package/dist/policies/{index.d.ts → index.d.mts} +204 -169
- package/dist/policies/index.d.mts.map +1 -0
- package/dist/policies/index.mjs +322 -0
- package/dist/policies/index.mjs.map +1 -0
- package/dist/presets/{index.d.ts → index.d.mts} +63 -131
- package/dist/presets/index.d.mts.map +1 -0
- package/dist/presets/index.mjs +144 -0
- package/dist/presets/index.mjs.map +1 -0
- package/dist/presets/multiTenant.d.mts +25 -0
- package/dist/presets/multiTenant.d.mts.map +1 -0
- package/dist/presets/multiTenant.mjs +114 -0
- package/dist/presets/multiTenant.mjs.map +1 -0
- package/dist/presets-BITljm96.mjs +120 -0
- package/dist/presets-BITljm96.mjs.map +1 -0
- package/dist/presets-DzSMwlKj.d.mts +58 -0
- package/dist/presets-DzSMwlKj.d.mts.map +1 -0
- package/dist/prisma-DJbMt3yf.mjs +628 -0
- package/dist/prisma-DJbMt3yf.mjs.map +1 -0
- package/dist/prisma-Dg9GoVdj.d.mts +275 -0
- package/dist/prisma-Dg9GoVdj.d.mts.map +1 -0
- package/dist/queryCachePlugin-7THaI5mt.d.mts +72 -0
- package/dist/queryCachePlugin-7THaI5mt.d.mts.map +1 -0
- package/dist/queryCachePlugin-DMBnp2Q0.mjs +139 -0
- package/dist/queryCachePlugin-DMBnp2Q0.mjs.map +1 -0
- package/dist/redis-D-JAeLtm.d.mts +50 -0
- package/dist/redis-D-JAeLtm.d.mts.map +1 -0
- package/dist/redis-stream-Bdh_vUU8.d.mts +104 -0
- package/dist/redis-stream-Bdh_vUU8.d.mts.map +1 -0
- package/dist/registry/index.d.mts +12 -0
- package/dist/registry/index.d.mts.map +1 -0
- package/dist/registry/index.mjs +4 -0
- package/dist/requestContext-QQD6ROJc.mjs +56 -0
- package/dist/requestContext-QQD6ROJc.mjs.map +1 -0
- package/dist/schemaConverter-BwrmWroW.mjs +99 -0
- package/dist/schemaConverter-BwrmWroW.mjs.map +1 -0
- package/dist/schemas/index.d.mts +64 -0
- package/dist/schemas/index.d.mts.map +1 -0
- package/dist/schemas/index.mjs +83 -0
- package/dist/schemas/index.mjs.map +1 -0
- package/dist/scope/index.d.mts +22 -0
- package/dist/scope/index.d.mts.map +1 -0
- package/dist/scope/index.mjs +66 -0
- package/dist/scope/index.mjs.map +1 -0
- package/dist/sessionManager-jPKLbHE0.d.mts +187 -0
- package/dist/sessionManager-jPKLbHE0.d.mts.map +1 -0
- package/dist/sse-B3c3_yZp.mjs +124 -0
- package/dist/sse-B3c3_yZp.mjs.map +1 -0
- package/dist/testing/index.d.mts +908 -0
- package/dist/testing/index.d.mts.map +1 -0
- package/dist/testing/index.mjs +1977 -0
- package/dist/testing/index.mjs.map +1 -0
- package/dist/tracing-Cc7vVQPp.d.mts +71 -0
- package/dist/tracing-Cc7vVQPp.d.mts.map +1 -0
- package/dist/typeGuards-DhMNLuvU.mjs +10 -0
- package/dist/typeGuards-DhMNLuvU.mjs.map +1 -0
- package/dist/types/index.d.mts +947 -0
- package/dist/types/index.d.mts.map +1 -0
- package/dist/types/index.mjs +15 -0
- package/dist/types/index.mjs.map +1 -0
- package/dist/types-Beqn1Un7.mjs +39 -0
- package/dist/types-Beqn1Un7.mjs.map +1 -0
- package/dist/types-CIgB7UUl.d.mts +446 -0
- package/dist/types-CIgB7UUl.d.mts.map +1 -0
- package/dist/types-aYB4V7uN.d.mts +87 -0
- package/dist/types-aYB4V7uN.d.mts.map +1 -0
- package/dist/utils/index.d.mts +748 -0
- package/dist/utils/index.d.mts.map +1 -0
- package/dist/utils/index.mjs +6 -0
- package/package.json +194 -68
- package/dist/BaseController-DVAiHxEQ.d.ts +0 -233
- package/dist/adapters/index.d.ts +0 -237
- package/dist/adapters/index.js +0 -668
- package/dist/arcCorePlugin-CsShQdyP.d.ts +0 -273
- package/dist/audit/index.d.ts +0 -195
- package/dist/audit/index.js +0 -319
- package/dist/auth/index.d.ts +0 -47
- package/dist/auth/index.js +0 -174
- package/dist/cli/commands/docs.d.ts +0 -11
- package/dist/cli/commands/docs.js +0 -474
- package/dist/cli/commands/generate.js +0 -334
- package/dist/cli/commands/introspect.d.ts +0 -8
- package/dist/cli/commands/introspect.js +0 -338
- package/dist/cli/index.d.ts +0 -4
- package/dist/cli/index.js +0 -3269
- package/dist/core/index.d.ts +0 -220
- package/dist/core/index.js +0 -2786
- package/dist/createApp-Ce9wl8W9.d.ts +0 -77
- package/dist/docs/index.d.ts +0 -166
- package/dist/docs/index.js +0 -658
- package/dist/errors-8WIxGS_6.d.ts +0 -122
- package/dist/events/index.d.ts +0 -117
- package/dist/events/index.js +0 -89
- package/dist/factory/index.d.ts +0 -38
- package/dist/factory/index.js +0 -1652
- package/dist/hooks/index.d.ts +0 -4
- package/dist/hooks/index.js +0 -199
- package/dist/idempotency/index.d.ts +0 -323
- package/dist/idempotency/index.js +0 -500
- package/dist/index-B4t03KQ0.d.ts +0 -1366
- package/dist/index.d.ts +0 -135
- package/dist/index.js +0 -4756
- package/dist/migrations/index.d.ts +0 -185
- package/dist/migrations/index.js +0 -274
- package/dist/org/index.d.ts +0 -129
- package/dist/org/index.js +0 -220
- package/dist/permissions/index.d.ts +0 -144
- package/dist/permissions/index.js +0 -103
- package/dist/plugins/index.d.ts +0 -46
- package/dist/plugins/index.js +0 -1069
- package/dist/policies/index.js +0 -196
- package/dist/presets/index.js +0 -384
- package/dist/presets/multiTenant.d.ts +0 -39
- package/dist/presets/multiTenant.js +0 -112
- package/dist/registry/index.d.ts +0 -16
- package/dist/registry/index.js +0 -253
- package/dist/testing/index.d.ts +0 -618
- package/dist/testing/index.js +0 -48020
- package/dist/types/index.d.ts +0 -4
- package/dist/types/index.js +0 -8
- package/dist/types-B99TBmFV.d.ts +0 -76
- package/dist/types-BvckRbs2.d.ts +0 -143
- package/dist/utils/index.d.ts +0 -679
- package/dist/utils/index.js +0 -931
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface-Ch8HU9uM.d.mts","names":[],"sources":["../src/hooks/HookSystem.ts","../src/pipeline/types.ts","../src/types/repository.ts","../src/core/defineResource.ts","../src/registry/ResourceRegistry.ts","../src/types/handlers.ts","../src/core/AccessControl.ts","../src/core/BodySanitizer.ts","../src/core/QueryResolver.ts","../src/core/BaseController.ts","../src/adapters/interface.ts"],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import fp from "fastify-plugin";
|
|
2
|
+
|
|
3
|
+
//#region src/registry/introspectionPlugin.ts
|
|
4
|
+
/**
|
|
5
|
+
* Introspection Plugin
|
|
6
|
+
*
|
|
7
|
+
* Exposes resource registry via API endpoints.
|
|
8
|
+
*/
|
|
9
|
+
const introspectionPlugin = async (fastify, opts = {}) => {
|
|
10
|
+
const { prefix = "/_resources", authRoles = ["superadmin"], enabled = true } = opts;
|
|
11
|
+
if (!enabled) {
|
|
12
|
+
fastify.log?.debug?.("Introspection plugin disabled");
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const typedFastify = fastify;
|
|
16
|
+
const authMiddleware = authRoles.length > 0 && typedFastify.authenticate ? [typedFastify.authenticate, typedFastify.authorize?.(...authRoles)].filter(Boolean) : [];
|
|
17
|
+
const getRegistry = () => fastify.arc?.registry;
|
|
18
|
+
await fastify.register(async (instance) => {
|
|
19
|
+
instance.get("/", { preHandler: authMiddleware }, async (_req, _reply) => {
|
|
20
|
+
return getRegistry()?.getIntrospection() ?? {
|
|
21
|
+
resources: [],
|
|
22
|
+
stats: {},
|
|
23
|
+
generatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
instance.get("/stats", { preHandler: authMiddleware }, async (_req, _reply) => {
|
|
27
|
+
return getRegistry()?.getStats() ?? {
|
|
28
|
+
totalResources: 0,
|
|
29
|
+
byModule: {},
|
|
30
|
+
presetUsage: {},
|
|
31
|
+
totalRoutes: 0,
|
|
32
|
+
totalEvents: 0
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
instance.get("/:name", {
|
|
36
|
+
schema: { params: {
|
|
37
|
+
type: "object",
|
|
38
|
+
properties: { name: { type: "string" } },
|
|
39
|
+
required: ["name"]
|
|
40
|
+
} },
|
|
41
|
+
preHandler: authMiddleware
|
|
42
|
+
}, async (req, reply) => {
|
|
43
|
+
const resource = getRegistry()?.get(req.params.name);
|
|
44
|
+
if (!resource) return reply.code(404).send({ error: `Resource '${req.params.name}' not found` });
|
|
45
|
+
return resource;
|
|
46
|
+
});
|
|
47
|
+
}, { prefix });
|
|
48
|
+
fastify.log?.debug?.(`Introspection API at ${prefix}`);
|
|
49
|
+
};
|
|
50
|
+
var introspectionPlugin_default = fp(introspectionPlugin, { name: "arc-introspection" });
|
|
51
|
+
|
|
52
|
+
//#endregion
|
|
53
|
+
export { introspectionPlugin_default as n, introspectionPlugin as t };
|
|
54
|
+
//# sourceMappingURL=introspectionPlugin-rFdO8ZUa.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspectionPlugin-rFdO8ZUa.mjs","names":[],"sources":["../src/registry/introspectionPlugin.ts"],"sourcesContent":["/**\n * Introspection Plugin\n *\n * Exposes resource registry via API endpoints.\n */\n\nimport fp from 'fastify-plugin';\nimport type { FastifyInstance, FastifyPluginAsync, FastifyReply, FastifyRequest } from 'fastify';\nimport type { IntrospectionPluginOptions, FastifyWithAuth, FastifyWithDecorators } from '../types/index.js';\n\nconst introspectionPlugin: FastifyPluginAsync<IntrospectionPluginOptions> = async (\n fastify: FastifyInstance,\n opts: IntrospectionPluginOptions = {}\n) => {\n const {\n prefix = '/_resources',\n authRoles = ['superadmin'],\n enabled = true,\n } = opts;\n\n if (!enabled) {\n fastify.log?.debug?.('Introspection plugin disabled');\n return;\n }\n\n const typedFastify = fastify as FastifyWithAuth;\n\n // Build auth middleware array using any to avoid complex Fastify type constraints\n const authMiddleware: unknown[] =\n authRoles.length > 0 && typedFastify.authenticate\n ? [\n typedFastify.authenticate,\n typedFastify.authorize?.(...authRoles),\n ].filter(Boolean)\n : [];\n\n // Instance-scoped registry access\n const getRegistry = () => (fastify as unknown as FastifyWithDecorators).arc?.registry;\n\n await fastify.register(async (instance) => {\n // GET / - Get all registered resources\n instance.get(\n '/',\n {\n preHandler: authMiddleware as never,\n },\n async (_req: FastifyRequest, _reply: FastifyReply) => {\n return getRegistry()?.getIntrospection() ?? { resources: [], stats: {}, generatedAt: new Date().toISOString() };\n }\n );\n\n // GET /stats - Get registry statistics\n instance.get(\n '/stats',\n {\n preHandler: authMiddleware as never,\n },\n async (_req: FastifyRequest, _reply: FastifyReply) => {\n return getRegistry()?.getStats() ?? { totalResources: 0, byModule: {}, presetUsage: {}, totalRoutes: 0, totalEvents: 0 };\n }\n );\n\n // GET /:name - Get resource by name\n instance.get<{ Params: { name: string } }>(\n '/:name',\n {\n schema: {\n params: {\n type: 'object' as const,\n properties: {\n name: { type: 'string' as const },\n },\n required: ['name' as const],\n },\n },\n preHandler: authMiddleware as never,\n },\n async (req, reply: FastifyReply) => {\n const resource = getRegistry()?.get(req.params.name);\n if (!resource) {\n return reply.code(404).send({\n error: `Resource '${req.params.name}' not found`,\n });\n }\n return resource;\n }\n );\n }, { prefix });\n\n fastify.log?.debug?.(`Introspection API at ${prefix}`);\n};\n\nexport default fp(introspectionPlugin, { name: 'arc-introspection' });\n\nexport { introspectionPlugin };\nexport type { IntrospectionPluginOptions };\n"],"mappings":";;;;;;;;AAUA,MAAM,sBAAsE,OAC1E,SACA,OAAmC,EAAE,KAClC;CACH,MAAM,EACJ,SAAS,eACT,YAAY,CAAC,aAAa,EAC1B,UAAU,SACR;AAEJ,KAAI,CAAC,SAAS;AACZ,UAAQ,KAAK,QAAQ,gCAAgC;AACrD;;CAGF,MAAM,eAAe;CAGrB,MAAM,iBACJ,UAAU,SAAS,KAAK,aAAa,eACjC,CACE,aAAa,cACb,aAAa,YAAY,GAAG,UAAU,CACvC,CAAC,OAAO,QAAQ,GACjB,EAAE;CAGR,MAAM,oBAAqB,QAA6C,KAAK;AAE7E,OAAM,QAAQ,SAAS,OAAO,aAAa;AAEzC,WAAS,IACP,KACA,EACE,YAAY,gBACb,EACD,OAAO,MAAsB,WAAyB;AACpD,UAAO,aAAa,EAAE,kBAAkB,IAAI;IAAE,WAAW,EAAE;IAAE,OAAO,EAAE;IAAE,8BAAa,IAAI,MAAM,EAAC,aAAa;IAAE;IAElH;AAGD,WAAS,IACP,UACA,EACE,YAAY,gBACb,EACD,OAAO,MAAsB,WAAyB;AACpD,UAAO,aAAa,EAAE,UAAU,IAAI;IAAE,gBAAgB;IAAG,UAAU,EAAE;IAAE,aAAa,EAAE;IAAE,aAAa;IAAG,aAAa;IAAG;IAE3H;AAGD,WAAS,IACP,UACA;GACE,QAAQ,EACN,QAAQ;IACN,MAAM;IACN,YAAY,EACV,MAAM,EAAE,MAAM,UAAmB,EAClC;IACD,UAAU,CAAC,OAAgB;IAC5B,EACF;GACD,YAAY;GACb,EACD,OAAO,KAAK,UAAwB;GAClC,MAAM,WAAW,aAAa,EAAE,IAAI,IAAI,OAAO,KAAK;AACpD,OAAI,CAAC,SACH,QAAO,MAAM,KAAK,IAAI,CAAC,KAAK,EAC1B,OAAO,aAAa,IAAI,OAAO,KAAK,cACrC,CAAC;AAEJ,UAAO;IAEV;IACA,EAAE,QAAQ,CAAC;AAEd,SAAQ,KAAK,QAAQ,wBAAwB,SAAS;;AAGxD,kCAAe,GAAG,qBAAqB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
//#region src/cache/keys.ts
|
|
2
|
+
/**
|
|
3
|
+
* Cache Key Utilities
|
|
4
|
+
*
|
|
5
|
+
* Deterministic, scope-safe key generation for QueryCache.
|
|
6
|
+
* Keys include resource version, operation, params hash, and user/org scope
|
|
7
|
+
* to ensure multi-tenant isolation and O(1) version-based invalidation.
|
|
8
|
+
*/
|
|
9
|
+
/** Build a deterministic cache key for a query */
|
|
10
|
+
function buildQueryKey(resource, operation, resourceVersion, params, userId, orgId) {
|
|
11
|
+
return `arc:${resource}:${resourceVersion}:${operation}:${hashParams(params)}:u=${userId ?? "anon"}:o=${orgId ?? "pub"}`;
|
|
12
|
+
}
|
|
13
|
+
/** Resource version key — stored in CacheStore, bumped on mutations */
|
|
14
|
+
function versionKey(resource) {
|
|
15
|
+
return `arc:ver:${resource}`;
|
|
16
|
+
}
|
|
17
|
+
/** Tag version key — stored in CacheStore, bumped on cross-resource invalidation */
|
|
18
|
+
function tagVersionKey(tag) {
|
|
19
|
+
return `arc:tagver:${tag}`;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Stable hash for query params.
|
|
23
|
+
* Sorts keys recursively, serializes to JSON, then applies djb2 hash.
|
|
24
|
+
* Returns hex string.
|
|
25
|
+
*/
|
|
26
|
+
function hashParams(params) {
|
|
27
|
+
return djb2(stableStringify(params)).toString(36);
|
|
28
|
+
}
|
|
29
|
+
function stableStringify(value) {
|
|
30
|
+
if (value === null || value === void 0) return "";
|
|
31
|
+
if (typeof value !== "object") return String(value);
|
|
32
|
+
if (Array.isArray(value)) return "[" + value.map(stableStringify).join(",") + "]";
|
|
33
|
+
return "{" + Object.keys(value).sort().map((k) => k + ":" + stableStringify(value[k])).join(",") + "}";
|
|
34
|
+
}
|
|
35
|
+
function djb2(str) {
|
|
36
|
+
let hash = 5381;
|
|
37
|
+
for (let i = 0; i < str.length; i++) hash = (hash << 5) + hash + str.charCodeAt(i) >>> 0;
|
|
38
|
+
return hash;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
//#endregion
|
|
42
|
+
export { versionKey as i, hashParams as n, tagVersionKey as r, buildQueryKey as t };
|
|
43
|
+
//# sourceMappingURL=keys-BqNejWup.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys-BqNejWup.mjs","names":[],"sources":["../src/cache/keys.ts"],"sourcesContent":["/**\r\n * Cache Key Utilities\r\n *\r\n * Deterministic, scope-safe key generation for QueryCache.\r\n * Keys include resource version, operation, params hash, and user/org scope\r\n * to ensure multi-tenant isolation and O(1) version-based invalidation.\r\n */\r\n\r\n/** Build a deterministic cache key for a query */\r\nexport function buildQueryKey(\r\n resource: string,\r\n operation: string,\r\n resourceVersion: number,\r\n params: Record<string, unknown>,\r\n userId?: string,\r\n orgId?: string,\r\n): string {\r\n const hash = hashParams(params);\r\n const uid = userId ?? 'anon';\r\n const oid = orgId ?? 'pub';\r\n return `arc:${resource}:${resourceVersion}:${operation}:${hash}:u=${uid}:o=${oid}`;\r\n}\r\n\r\n/** Resource version key — stored in CacheStore, bumped on mutations */\r\nexport function versionKey(resource: string): string {\r\n return `arc:ver:${resource}`;\r\n}\r\n\r\n/** Tag version key — stored in CacheStore, bumped on cross-resource invalidation */\r\nexport function tagVersionKey(tag: string): string {\r\n return `arc:tagver:${tag}`;\r\n}\r\n\r\n/**\r\n * Stable hash for query params.\r\n * Sorts keys recursively, serializes to JSON, then applies djb2 hash.\r\n * Returns hex string.\r\n */\r\nexport function hashParams(params: Record<string, unknown>): string {\r\n const stable = stableStringify(params);\r\n return djb2(stable).toString(36);\r\n}\r\n\r\nfunction stableStringify(value: unknown): string {\r\n if (value === null || value === undefined) return '';\r\n if (typeof value !== 'object') return String(value);\r\n if (Array.isArray(value)) return '[' + value.map(stableStringify).join(',') + ']';\r\n\r\n const sorted = Object.keys(value as Record<string, unknown>).sort();\r\n return '{' + sorted.map(k => k + ':' + stableStringify((value as Record<string, unknown>)[k])).join(',') + '}';\r\n}\r\n\r\nfunction djb2(str: string): number {\r\n let hash = 5381;\r\n for (let i = 0; i < str.length; i++) {\r\n hash = ((hash << 5) + hash + str.charCodeAt(i)) >>> 0;\r\n }\r\n return hash;\r\n}\r\n"],"mappings":";;;;;;;;;AASA,SAAgB,cACd,UACA,WACA,iBACA,QACA,QACA,OACQ;AAIR,QAAO,OAAO,SAAS,GAAG,gBAAgB,GAAG,UAAU,GAH1C,WAAW,OAAO,CAGgC,KAFnD,UAAU,OAEkD,KAD5D,SAAS;;;AAKvB,SAAgB,WAAW,UAA0B;AACnD,QAAO,WAAW;;;AAIpB,SAAgB,cAAc,KAAqB;AACjD,QAAO,cAAc;;;;;;;AAQvB,SAAgB,WAAW,QAAyC;AAElE,QAAO,KADQ,gBAAgB,OAAO,CACnB,CAAC,SAAS,GAAG;;AAGlC,SAAS,gBAAgB,OAAwB;AAC/C,KAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,KAAI,OAAO,UAAU,SAAU,QAAO,OAAO,MAAM;AACnD,KAAI,MAAM,QAAQ,MAAM,CAAE,QAAO,MAAM,MAAM,IAAI,gBAAgB,CAAC,KAAK,IAAI,GAAG;AAG9E,QAAO,MADQ,OAAO,KAAK,MAAiC,CAAC,MAAM,CAC/C,KAAI,MAAK,IAAI,MAAM,gBAAiB,MAAkC,GAAG,CAAC,CAAC,KAAK,IAAI,GAAG;;AAG7G,SAAS,KAAK,KAAqB;CACjC,IAAI,OAAO;AACX,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,IAC9B,SAAS,QAAQ,KAAK,OAAO,IAAI,WAAW,EAAE,KAAM;AAEtD,QAAO"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { t as __exportAll } from "./chunk-C7Uep-_p.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/logger/index.ts
|
|
4
|
+
var logger_exports = /* @__PURE__ */ __exportAll({
|
|
5
|
+
arcLog: () => arcLog,
|
|
6
|
+
configureArcLogger: () => configureArcLogger
|
|
7
|
+
});
|
|
8
|
+
let globalOptions = {};
|
|
9
|
+
/**
|
|
10
|
+
* Configure the Arc logger globally.
|
|
11
|
+
*
|
|
12
|
+
* Called automatically by `createApp({ debug })`, but can also be
|
|
13
|
+
* called manually for standalone usage outside of `createApp`.
|
|
14
|
+
*/
|
|
15
|
+
function configureArcLogger(options) {
|
|
16
|
+
globalOptions = { ...options };
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create a module-scoped logger.
|
|
20
|
+
*
|
|
21
|
+
* Debug and info messages are gated by the `ARC_DEBUG` env var or
|
|
22
|
+
* `createApp({ debug })` option. Warnings always show (unless
|
|
23
|
+
* `ARC_SUPPRESS_WARNINGS=1`). Errors always show.
|
|
24
|
+
*
|
|
25
|
+
* @param module - Module name (e.g., 'scope', 'elevation', 'sse', 'preset')
|
|
26
|
+
* @returns Logger instance for that module
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* const log = arcLog('elevation');
|
|
31
|
+
* log.debug('Checking elevation header');
|
|
32
|
+
* log.warn('No authenticate decorator found');
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
function arcLog(module) {
|
|
36
|
+
const prefix = `[arc:${module}]`;
|
|
37
|
+
return {
|
|
38
|
+
debug(...args) {
|
|
39
|
+
if (isDebugEnabled(module)) getWriter().debug(prefix, ...args);
|
|
40
|
+
},
|
|
41
|
+
info(...args) {
|
|
42
|
+
if (isDebugEnabled(module)) getWriter().info(prefix, ...args);
|
|
43
|
+
},
|
|
44
|
+
warn(...args) {
|
|
45
|
+
if (isSuppressed()) return;
|
|
46
|
+
getWriter().warn(prefix, ...args);
|
|
47
|
+
},
|
|
48
|
+
error(...args) {
|
|
49
|
+
getWriter().error(prefix, ...args);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function getWriter() {
|
|
54
|
+
return globalOptions.writer ?? console;
|
|
55
|
+
}
|
|
56
|
+
function isDebugEnabled(module) {
|
|
57
|
+
const configDebug = globalOptions.debug;
|
|
58
|
+
if (configDebug !== void 0 && configDebug !== false) return matchesModule(configDebug, module);
|
|
59
|
+
const envDebug = typeof process !== "undefined" ? process.env?.ARC_DEBUG : void 0;
|
|
60
|
+
if (envDebug) return matchesModule(envDebug, module);
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
function matchesModule(debug, module) {
|
|
64
|
+
if (debug === true) return true;
|
|
65
|
+
if (typeof debug === "string") {
|
|
66
|
+
const normalized = debug.trim();
|
|
67
|
+
if (normalized === "1" || normalized === "true" || normalized === "*") return true;
|
|
68
|
+
return normalized.split(",").map((s) => s.trim()).includes(module);
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
function isSuppressed() {
|
|
73
|
+
const env = typeof process !== "undefined" ? process.env?.ARC_SUPPRESS_WARNINGS : void 0;
|
|
74
|
+
return env === "1" || env === "true";
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
//#endregion
|
|
78
|
+
export { configureArcLogger as n, logger_exports as r, arcLog as t };
|
|
79
|
+
//# sourceMappingURL=logger-Df2O2WsW.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger-Df2O2WsW.mjs","names":[],"sources":["../src/logger/index.ts"],"sourcesContent":["/**\n * Arc Logger — Centralized debug & warning system\n *\n * Lightweight, zero-dependency logger for Arc framework internals.\n * Inspired by the `debug` npm package — disabled by default, opt-in via\n * environment variable or `createApp({ debug })` option.\n *\n * @example\n * ```typescript\n * // Enable via env var\n * ARC_DEBUG=1 node server.js // all modules\n * ARC_DEBUG=scope,elevation node server.js // specific modules\n *\n * // Enable via createApp\n * const app = await createApp({ debug: true });\n * const app = await createApp({ debug: 'scope,elevation' });\n *\n * // Suppress warnings (not recommended)\n * ARC_SUPPRESS_WARNINGS=1 node server.js\n *\n * // Framework internals use:\n * import { arcLog } from '../logger/index.js';\n * const log = arcLog('elevation');\n * log.debug('Elevation applied', { userId });\n * log.warn('Something unexpected');\n * ```\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ArcLoggerOptions {\n /**\n * Enable debug output.\n * - `true` or `'*'` — all modules\n * - `string` — comma-separated module names (e.g., `'scope,elevation'`)\n * - `false` — disabled (default)\n */\n debug?: boolean | string;\n\n /**\n * Custom log writer. Defaults to `console`.\n * Useful for routing Arc logs into Fastify's pino logger or test fixtures.\n */\n writer?: ArcLogWriter;\n}\n\nexport interface ArcLogWriter {\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n}\n\nexport interface ArcLogger {\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n}\n\n// ============================================================================\n// Global State\n// ============================================================================\n\nlet globalOptions: ArcLoggerOptions = {};\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/**\n * Configure the Arc logger globally.\n *\n * Called automatically by `createApp({ debug })`, but can also be\n * called manually for standalone usage outside of `createApp`.\n */\nexport function configureArcLogger(options: ArcLoggerOptions): void {\n globalOptions = { ...options };\n}\n\n/**\n * Create a module-scoped logger.\n *\n * Debug and info messages are gated by the `ARC_DEBUG` env var or\n * `createApp({ debug })` option. Warnings always show (unless\n * `ARC_SUPPRESS_WARNINGS=1`). Errors always show.\n *\n * @param module - Module name (e.g., 'scope', 'elevation', 'sse', 'preset')\n * @returns Logger instance for that module\n *\n * @example\n * ```typescript\n * const log = arcLog('elevation');\n * log.debug('Checking elevation header');\n * log.warn('No authenticate decorator found');\n * ```\n */\nexport function arcLog(module: string): ArcLogger {\n const prefix = `[arc:${module}]`;\n\n return {\n debug(...args: unknown[]) {\n if (isDebugEnabled(module)) {\n getWriter().debug(prefix, ...args);\n }\n },\n info(...args: unknown[]) {\n if (isDebugEnabled(module)) {\n getWriter().info(prefix, ...args);\n }\n },\n warn(...args: unknown[]) {\n if (isSuppressed()) return;\n getWriter().warn(prefix, ...args);\n },\n error(...args: unknown[]) {\n getWriter().error(prefix, ...args);\n },\n };\n}\n\n// ============================================================================\n// Internals\n// ============================================================================\n\nfunction getWriter(): ArcLogWriter {\n return globalOptions.writer ?? console;\n}\n\nfunction isDebugEnabled(module: string): boolean {\n // Priority 1: Programmatic config\n const configDebug = globalOptions.debug;\n if (configDebug !== undefined && configDebug !== false) {\n return matchesModule(configDebug, module);\n }\n\n // Priority 2: Environment variable\n const envDebug = typeof process !== 'undefined' ? process.env?.ARC_DEBUG : undefined;\n if (envDebug) {\n return matchesModule(envDebug, module);\n }\n\n return false;\n}\n\nfunction matchesModule(debug: boolean | string, module: string): boolean {\n if (debug === true) return true;\n if (typeof debug === 'string') {\n const normalized = debug.trim();\n if (normalized === '1' || normalized === 'true' || normalized === '*') return true;\n return normalized.split(',').map((s) => s.trim()).includes(module);\n }\n return false;\n}\n\nfunction isSuppressed(): boolean {\n const env = typeof process !== 'undefined' ? process.env?.ARC_SUPPRESS_WARNINGS : undefined;\n return env === '1' || env === 'true';\n}\n"],"mappings":";;;;;;;AAkEA,IAAI,gBAAkC,EAAE;;;;;;;AAYxC,SAAgB,mBAAmB,SAAiC;AAClE,iBAAgB,EAAE,GAAG,SAAS;;;;;;;;;;;;;;;;;;;AAoBhC,SAAgB,OAAO,QAA2B;CAChD,MAAM,SAAS,QAAQ,OAAO;AAE9B,QAAO;EACL,MAAM,GAAG,MAAiB;AACxB,OAAI,eAAe,OAAO,CACxB,YAAW,CAAC,MAAM,QAAQ,GAAG,KAAK;;EAGtC,KAAK,GAAG,MAAiB;AACvB,OAAI,eAAe,OAAO,CACxB,YAAW,CAAC,KAAK,QAAQ,GAAG,KAAK;;EAGrC,KAAK,GAAG,MAAiB;AACvB,OAAI,cAAc,CAAE;AACpB,cAAW,CAAC,KAAK,QAAQ,GAAG,KAAK;;EAEnC,MAAM,GAAG,MAAiB;AACxB,cAAW,CAAC,MAAM,QAAQ,GAAG,KAAK;;EAErC;;AAOH,SAAS,YAA0B;AACjC,QAAO,cAAc,UAAU;;AAGjC,SAAS,eAAe,QAAyB;CAE/C,MAAM,cAAc,cAAc;AAClC,KAAI,gBAAgB,UAAa,gBAAgB,MAC/C,QAAO,cAAc,aAAa,OAAO;CAI3C,MAAM,WAAW,OAAO,YAAY,cAAc,QAAQ,KAAK,YAAY;AAC3E,KAAI,SACF,QAAO,cAAc,UAAU,OAAO;AAGxC,QAAO;;AAGT,SAAS,cAAc,OAAyB,QAAyB;AACvE,KAAI,UAAU,KAAM,QAAO;AAC3B,KAAI,OAAO,UAAU,UAAU;EAC7B,MAAM,aAAa,MAAM,MAAM;AAC/B,MAAI,eAAe,OAAO,eAAe,UAAU,eAAe,IAAK,QAAO;AAC9E,SAAO,WAAW,MAAM,IAAI,CAAC,KAAK,MAAM,EAAE,MAAM,CAAC,CAAC,SAAS,OAAO;;AAEpE,QAAO;;AAGT,SAAS,eAAwB;CAC/B,MAAM,MAAM,OAAO,YAAY,cAAc,QAAQ,KAAK,wBAAwB;AAClF,QAAO,QAAQ,OAAO,QAAQ"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { t as __exportAll } from "./chunk-C7Uep-_p.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/cache/memory.ts
|
|
4
|
+
var memory_exports = /* @__PURE__ */ __exportAll({
|
|
5
|
+
MemoryCacheStore: () => MemoryCacheStore,
|
|
6
|
+
default: () => MemoryCacheStore
|
|
7
|
+
});
|
|
8
|
+
/**
|
|
9
|
+
* In-memory LRU+TTL cache store with hard entry cap and memory budget.
|
|
10
|
+
* - LRU eviction when `maxEntries` or `maxMemoryBytes` is reached
|
|
11
|
+
* - TTL expiration on read + periodic cleanup
|
|
12
|
+
* - Entry size guard to avoid runaway memory usage
|
|
13
|
+
* - Stats tracking for observability
|
|
14
|
+
*/
|
|
15
|
+
var MemoryCacheStore = class {
|
|
16
|
+
name = "memory-cache";
|
|
17
|
+
cache = /* @__PURE__ */ new Map();
|
|
18
|
+
defaultTtlMs;
|
|
19
|
+
maxEntries;
|
|
20
|
+
maxEntryBytes;
|
|
21
|
+
maxMemoryBytes;
|
|
22
|
+
evictionWatermark;
|
|
23
|
+
logger;
|
|
24
|
+
cleanupTimer;
|
|
25
|
+
currentBytes = 0;
|
|
26
|
+
_hits = 0;
|
|
27
|
+
_misses = 0;
|
|
28
|
+
_evictions = 0;
|
|
29
|
+
constructor(options = {}) {
|
|
30
|
+
this.defaultTtlMs = options.defaultTtlMs ?? 6e4;
|
|
31
|
+
this.maxEntries = clamp(options.maxEntries ?? 1e3, 1, 1e5);
|
|
32
|
+
this.maxEntryBytes = clamp(options.maxEntryBytes ?? 256 * 1024, 1024, 10 * 1024 * 1024);
|
|
33
|
+
this.maxMemoryBytes = options.maxMemoryBytes ?? 50 * 1024 * 1024;
|
|
34
|
+
this.evictionWatermark = clamp(options.evictionWatermark ?? .9, .5, 1);
|
|
35
|
+
this.logger = options.logger ?? console;
|
|
36
|
+
const cleanupIntervalMs = clamp(options.cleanupIntervalMs ?? 3e4, 1e3, 600 * 1e3);
|
|
37
|
+
this.cleanupTimer = setInterval(() => this.cleanupExpired(), cleanupIntervalMs);
|
|
38
|
+
if (this.cleanupTimer.unref) this.cleanupTimer.unref();
|
|
39
|
+
}
|
|
40
|
+
async get(key) {
|
|
41
|
+
const entry = this.cache.get(key);
|
|
42
|
+
if (!entry) {
|
|
43
|
+
this._misses++;
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (entry.expiresAt <= Date.now()) {
|
|
47
|
+
this.removeEntry(key, entry);
|
|
48
|
+
this._misses++;
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
this.cache.delete(key);
|
|
52
|
+
this.cache.set(key, entry);
|
|
53
|
+
this._hits++;
|
|
54
|
+
return entry.value;
|
|
55
|
+
}
|
|
56
|
+
async set(key, value, options = {}) {
|
|
57
|
+
const ttlMs = options.ttlMs ?? this.defaultTtlMs;
|
|
58
|
+
if (!Number.isFinite(ttlMs) || ttlMs <= 0) return;
|
|
59
|
+
const size = this.estimateSize(value);
|
|
60
|
+
if (size > this.maxEntryBytes) {
|
|
61
|
+
this.logger.warn(`[MemoryCacheStore] Skipping oversized entry for key '${key}' (${size} bytes > ${this.maxEntryBytes} bytes)`);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const existing = this.cache.get(key);
|
|
65
|
+
if (existing) {
|
|
66
|
+
this.currentBytes -= existing.size;
|
|
67
|
+
this.cache.delete(key);
|
|
68
|
+
}
|
|
69
|
+
this.cache.set(key, {
|
|
70
|
+
value,
|
|
71
|
+
size,
|
|
72
|
+
expiresAt: Date.now() + ttlMs
|
|
73
|
+
});
|
|
74
|
+
this.currentBytes += size;
|
|
75
|
+
this.evictToLimit();
|
|
76
|
+
if (this.maxMemoryBytes > 0) this.evictToMemoryLimit();
|
|
77
|
+
}
|
|
78
|
+
async delete(key) {
|
|
79
|
+
const entry = this.cache.get(key);
|
|
80
|
+
if (entry) this.removeEntry(key, entry);
|
|
81
|
+
}
|
|
82
|
+
async clear() {
|
|
83
|
+
this.cache.clear();
|
|
84
|
+
this.currentBytes = 0;
|
|
85
|
+
}
|
|
86
|
+
async close() {
|
|
87
|
+
clearInterval(this.cleanupTimer);
|
|
88
|
+
this.cache.clear();
|
|
89
|
+
this.currentBytes = 0;
|
|
90
|
+
}
|
|
91
|
+
stats() {
|
|
92
|
+
return {
|
|
93
|
+
entries: this.cache.size,
|
|
94
|
+
memoryBytes: this.currentBytes,
|
|
95
|
+
hits: this._hits,
|
|
96
|
+
misses: this._misses,
|
|
97
|
+
evictions: this._evictions
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
removeEntry(key, entry) {
|
|
101
|
+
this.cache.delete(key);
|
|
102
|
+
this.currentBytes -= entry.size;
|
|
103
|
+
}
|
|
104
|
+
evictToLimit() {
|
|
105
|
+
while (this.cache.size > this.maxEntries) {
|
|
106
|
+
const oldestKey = this.cache.keys().next().value;
|
|
107
|
+
if (!oldestKey) break;
|
|
108
|
+
const entry = this.cache.get(oldestKey);
|
|
109
|
+
this.removeEntry(oldestKey, entry);
|
|
110
|
+
this._evictions++;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
evictToMemoryLimit() {
|
|
114
|
+
const target = this.maxMemoryBytes * this.evictionWatermark;
|
|
115
|
+
while (this.currentBytes > this.maxMemoryBytes && this.cache.size > 0) {
|
|
116
|
+
const oldestKey = this.cache.keys().next().value;
|
|
117
|
+
if (!oldestKey) break;
|
|
118
|
+
const entry = this.cache.get(oldestKey);
|
|
119
|
+
this.removeEntry(oldestKey, entry);
|
|
120
|
+
this._evictions++;
|
|
121
|
+
if (this.currentBytes <= target) break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
cleanupExpired() {
|
|
125
|
+
const now = Date.now();
|
|
126
|
+
for (const [key, entry] of this.cache.entries()) if (entry.expiresAt <= now) this.removeEntry(key, entry);
|
|
127
|
+
}
|
|
128
|
+
estimateSize(value) {
|
|
129
|
+
try {
|
|
130
|
+
const json = JSON.stringify(value);
|
|
131
|
+
if (!json) return 0;
|
|
132
|
+
return Buffer.byteLength(json, "utf8");
|
|
133
|
+
} catch {
|
|
134
|
+
return this.maxEntryBytes + 1;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
function clamp(value, min, max) {
|
|
139
|
+
return Math.min(max, Math.max(min, value));
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
//#endregion
|
|
143
|
+
export { memory_exports as n, MemoryCacheStore as t };
|
|
144
|
+
//# sourceMappingURL=memory-cQgelFOj.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-cQgelFOj.mjs","names":[],"sources":["../src/cache/memory.ts"],"sourcesContent":["import type { CacheLogger, CacheSetOptions, CacheStats, CacheStore } from './interface.js';\n\ninterface MemoryEntry<TValue> {\n value: TValue;\n size: number;\n expiresAt: number;\n}\n\nexport interface MemoryCacheStoreOptions {\n /** Default TTL in milliseconds (default: 60_000) */\n defaultTtlMs?: number;\n /** Hard upper bound for entries (default: 1000) */\n maxEntries?: number;\n /** Background cleanup interval in milliseconds (default: 30_000) */\n cleanupIntervalMs?: number;\n /**\n * Maximum serialized entry size in bytes (default: 256 KiB).\n * Oversized entries are skipped to prevent memory pressure.\n */\n maxEntryBytes?: number;\n /**\n * Total memory budget in bytes (default: 50 MiB).\n * When exceeded, LRU entries are evicted until usage drops below watermark.\n * Set to 0 to disable (rely on maxEntries only).\n */\n maxMemoryBytes?: number;\n /**\n * Eviction watermark as fraction of maxMemoryBytes (default: 0.9).\n * When memory exceeds budget, evict until usage drops to budget * watermark.\n */\n evictionWatermark?: number;\n /** Logger for warnings/errors (default: console) */\n logger?: CacheLogger;\n}\n\n/**\n * In-memory LRU+TTL cache store with hard entry cap and memory budget.\n * - LRU eviction when `maxEntries` or `maxMemoryBytes` is reached\n * - TTL expiration on read + periodic cleanup\n * - Entry size guard to avoid runaway memory usage\n * - Stats tracking for observability\n */\nexport class MemoryCacheStore<TValue = unknown> implements CacheStore<TValue> {\n readonly name = 'memory-cache';\n\n private readonly cache = new Map<string, MemoryEntry<TValue>>();\n private readonly defaultTtlMs: number;\n private readonly maxEntries: number;\n private readonly maxEntryBytes: number;\n private readonly maxMemoryBytes: number;\n private readonly evictionWatermark: number;\n private readonly logger: CacheLogger;\n private readonly cleanupTimer: ReturnType<typeof setInterval>;\n\n private currentBytes = 0;\n private _hits = 0;\n private _misses = 0;\n private _evictions = 0;\n\n constructor(options: MemoryCacheStoreOptions = {}) {\n this.defaultTtlMs = options.defaultTtlMs ?? 60_000;\n this.maxEntries = clamp(options.maxEntries ?? 1000, 1, 100_000);\n this.maxEntryBytes = clamp(options.maxEntryBytes ?? 256 * 1024, 1024, 10 * 1024 * 1024);\n this.maxMemoryBytes = options.maxMemoryBytes ?? 50 * 1024 * 1024; // 50 MiB\n this.evictionWatermark = clamp(options.evictionWatermark ?? 0.9, 0.5, 1);\n this.logger = options.logger ?? console;\n\n const cleanupIntervalMs = clamp(options.cleanupIntervalMs ?? 30_000, 1000, 10 * 60 * 1000);\n this.cleanupTimer = setInterval(() => this.cleanupExpired(), cleanupIntervalMs);\n if (this.cleanupTimer.unref) this.cleanupTimer.unref();\n }\n\n async get(key: string): Promise<TValue | undefined> {\n const entry = this.cache.get(key);\n if (!entry) {\n this._misses++;\n return undefined;\n }\n\n if (entry.expiresAt <= Date.now()) {\n this.removeEntry(key, entry);\n this._misses++;\n return undefined;\n }\n\n // LRU refresh: move to most-recent position\n this.cache.delete(key);\n this.cache.set(key, entry);\n this._hits++;\n return entry.value;\n }\n\n async set(key: string, value: TValue, options: CacheSetOptions = {}): Promise<void> {\n const ttlMs = options.ttlMs ?? this.defaultTtlMs;\n if (!Number.isFinite(ttlMs) || ttlMs <= 0) return;\n\n const size = this.estimateSize(value);\n if (size > this.maxEntryBytes) {\n this.logger.warn(\n `[MemoryCacheStore] Skipping oversized entry for key '${key}' (${size} bytes > ${this.maxEntryBytes} bytes)`\n );\n return;\n }\n\n // Remove existing entry first (adjust bytes)\n const existing = this.cache.get(key);\n if (existing) {\n this.currentBytes -= existing.size;\n this.cache.delete(key);\n }\n\n this.cache.set(key, { value, size, expiresAt: Date.now() + ttlMs });\n this.currentBytes += size;\n\n this.evictToLimit();\n if (this.maxMemoryBytes > 0) this.evictToMemoryLimit();\n }\n\n async delete(key: string): Promise<void> {\n const entry = this.cache.get(key);\n if (entry) this.removeEntry(key, entry);\n }\n\n async clear(): Promise<void> {\n this.cache.clear();\n this.currentBytes = 0;\n }\n\n async close(): Promise<void> {\n clearInterval(this.cleanupTimer);\n this.cache.clear();\n this.currentBytes = 0;\n }\n\n stats(): CacheStats {\n return {\n entries: this.cache.size,\n memoryBytes: this.currentBytes,\n hits: this._hits,\n misses: this._misses,\n evictions: this._evictions,\n };\n }\n\n private removeEntry(key: string, entry: MemoryEntry<TValue>): void {\n this.cache.delete(key);\n this.currentBytes -= entry.size;\n }\n\n private evictToLimit(): void {\n while (this.cache.size > this.maxEntries) {\n const oldestKey = this.cache.keys().next().value as string | undefined;\n if (!oldestKey) break;\n const entry = this.cache.get(oldestKey)!;\n this.removeEntry(oldestKey, entry);\n this._evictions++;\n }\n }\n\n private evictToMemoryLimit(): void {\n const target = this.maxMemoryBytes * this.evictionWatermark;\n while (this.currentBytes > this.maxMemoryBytes && this.cache.size > 0) {\n const oldestKey = this.cache.keys().next().value as string | undefined;\n if (!oldestKey) break;\n const entry = this.cache.get(oldestKey)!;\n this.removeEntry(oldestKey, entry);\n this._evictions++;\n if (this.currentBytes <= target) break;\n }\n }\n\n private cleanupExpired(): void {\n const now = Date.now();\n for (const [key, entry] of this.cache.entries()) {\n if (entry.expiresAt <= now) {\n this.removeEntry(key, entry);\n }\n }\n }\n\n private estimateSize(value: TValue): number {\n try {\n const json = JSON.stringify(value);\n if (!json) return 0;\n return Buffer.byteLength(json, 'utf8');\n } catch {\n return this.maxEntryBytes + 1;\n }\n }\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\nexport default MemoryCacheStore;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import mongoose from "mongoose";
|
|
2
|
+
|
|
3
|
+
//#region src/migrations/index.d.ts
|
|
4
|
+
interface Migration {
|
|
5
|
+
/** Migration version (sequential number) */
|
|
6
|
+
version: number;
|
|
7
|
+
/** Resource name this migration applies to */
|
|
8
|
+
resource: string;
|
|
9
|
+
/** Description of the migration */
|
|
10
|
+
description?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Forward migration (apply schema change)
|
|
13
|
+
*/
|
|
14
|
+
up: (db: mongoose.mongo.Db) => Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Backward migration (revert schema change)
|
|
17
|
+
*/
|
|
18
|
+
down: (db: mongoose.mongo.Db) => Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Optional validation that data is compatible after migration
|
|
21
|
+
*/
|
|
22
|
+
validate?: (db: mongoose.mongo.Db) => Promise<boolean>;
|
|
23
|
+
}
|
|
24
|
+
interface MigrationRecord {
|
|
25
|
+
version: number;
|
|
26
|
+
resource: string;
|
|
27
|
+
description?: string;
|
|
28
|
+
appliedAt: Date;
|
|
29
|
+
executionTime: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Define a migration
|
|
33
|
+
*/
|
|
34
|
+
declare function defineMigration(migration: Migration): Migration;
|
|
35
|
+
/**
|
|
36
|
+
* Migration Runner
|
|
37
|
+
*
|
|
38
|
+
* Manages execution of migrations with tracking and rollback support.
|
|
39
|
+
*/
|
|
40
|
+
declare class MigrationRunner {
|
|
41
|
+
private readonly collectionName;
|
|
42
|
+
private readonly db;
|
|
43
|
+
constructor(db: mongoose.mongo.Db);
|
|
44
|
+
/**
|
|
45
|
+
* Run all pending migrations
|
|
46
|
+
*/
|
|
47
|
+
up(migrations: Migration[]): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Rollback last migration
|
|
50
|
+
*/
|
|
51
|
+
down(migrations: Migration[]): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Rollback to specific version
|
|
54
|
+
*/
|
|
55
|
+
downTo(migrations: Migration[], targetVersion: number): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Get all applied migrations
|
|
58
|
+
*/
|
|
59
|
+
getAppliedMigrations(): Promise<MigrationRecord[]>;
|
|
60
|
+
/**
|
|
61
|
+
* Get pending migrations
|
|
62
|
+
*/
|
|
63
|
+
getPendingMigrations(migrations: Migration[]): Promise<Migration[]>;
|
|
64
|
+
/**
|
|
65
|
+
* Check if migrations are up to date
|
|
66
|
+
*/
|
|
67
|
+
isUpToDate(migrations: Migration[]): Promise<boolean>;
|
|
68
|
+
/**
|
|
69
|
+
* Run a single migration
|
|
70
|
+
*/
|
|
71
|
+
private runMigration;
|
|
72
|
+
/**
|
|
73
|
+
* Record a completed migration
|
|
74
|
+
*/
|
|
75
|
+
private recordMigration;
|
|
76
|
+
/**
|
|
77
|
+
* Remove a migration record
|
|
78
|
+
*/
|
|
79
|
+
private removeMigration;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Schema version definition for resources
|
|
83
|
+
*/
|
|
84
|
+
interface SchemaVersion {
|
|
85
|
+
version: number;
|
|
86
|
+
migrations: Migration[];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Add versioning to resource definition
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* export default defineResource({
|
|
93
|
+
* name: 'product',
|
|
94
|
+
* version: 2,
|
|
95
|
+
* migrations: [productV1ToV2Migration],
|
|
96
|
+
* // ... rest of resource definition
|
|
97
|
+
* });
|
|
98
|
+
*/
|
|
99
|
+
declare function withSchemaVersion(version: number, migrations: Migration[]): SchemaVersion;
|
|
100
|
+
/**
|
|
101
|
+
* Global migration registry
|
|
102
|
+
*/
|
|
103
|
+
declare class MigrationRegistry {
|
|
104
|
+
private migrations;
|
|
105
|
+
/**
|
|
106
|
+
* Register a migration
|
|
107
|
+
*/
|
|
108
|
+
register(migration: Migration): void;
|
|
109
|
+
/**
|
|
110
|
+
* Register multiple migrations
|
|
111
|
+
*/
|
|
112
|
+
registerMany(migrations: Migration[]): void;
|
|
113
|
+
/**
|
|
114
|
+
* Get all migrations for a resource
|
|
115
|
+
*/
|
|
116
|
+
getForResource(resource: string): Migration[];
|
|
117
|
+
/**
|
|
118
|
+
* Get all migrations
|
|
119
|
+
*/
|
|
120
|
+
getAll(): Migration[];
|
|
121
|
+
/**
|
|
122
|
+
* Get migration by resource and version
|
|
123
|
+
*/
|
|
124
|
+
get(resource: string, version: number): Migration | undefined;
|
|
125
|
+
/**
|
|
126
|
+
* Clear all registrations
|
|
127
|
+
*/
|
|
128
|
+
clear(): void;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Global migration registry instance
|
|
132
|
+
*/
|
|
133
|
+
declare const migrationRegistry: MigrationRegistry;
|
|
134
|
+
/**
|
|
135
|
+
* Common migration helpers
|
|
136
|
+
*/
|
|
137
|
+
declare const migrationHelpers: {
|
|
138
|
+
/**
|
|
139
|
+
* Rename a field across all documents
|
|
140
|
+
*/
|
|
141
|
+
renameField: (collection: string, oldName: string, newName: string) => Migration;
|
|
142
|
+
/**
|
|
143
|
+
* Add a new field with default value
|
|
144
|
+
*/
|
|
145
|
+
addField: (collection: string, fieldName: string, defaultValue: unknown) => Migration;
|
|
146
|
+
/**
|
|
147
|
+
* Remove a field
|
|
148
|
+
*/
|
|
149
|
+
removeField: (collection: string, fieldName: string) => Migration;
|
|
150
|
+
/**
|
|
151
|
+
* Create an index
|
|
152
|
+
*/
|
|
153
|
+
createIndex: (collection: string, fields: Record<string, 1 | -1>, options?: Record<string, unknown>) => Migration;
|
|
154
|
+
};
|
|
155
|
+
//#endregion
|
|
156
|
+
export { Migration, MigrationRecord, MigrationRegistry, MigrationRunner, SchemaVersion, defineMigration, migrationHelpers, migrationRegistry, withSchemaVersion };
|
|
157
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/migrations/index.ts"],"mappings":";;;UAgCiB,SAAA;EAuBU;EArBzB,OAAA;EAqBY;EAlBZ,QAAA;EAkB6C;EAf7C,WAAA;EAkBe;;;EAbf,EAAA,GAAK,EAAA,EAAI,QAAA,CAAS,KAAA,CAAM,EAAA,KAAO,OAAA;EAc/B;;;EATA,IAAA,GAAO,EAAA,EAAI,QAAA,CAAS,KAAA,CAAM,EAAA,KAAO,OAAA;EAYtB;;;EAPX,QAAA,IAAY,EAAA,EAAI,QAAA,CAAS,KAAA,CAAM,EAAA,KAAO,OAAA;AAAA;AAAA,UAGvB,eAAA;EACf,OAAA;EACA,QAAA;EACA,WAAA;EACA,SAAA,EAAW,IAAA;EACX,aAAA;AAAA;;AAeF;;iBATgB,eAAA,CAAgB,SAAA,EAAW,SAAA,GAAY,SAAA;;;;;;cAS1C,eAAA;EAAA,iBACM,cAAA;EAAA,iBAEA,EAAA;cAEL,EAAA,EAAI,QAAA,CAAS,KAAA,CAAM,EAAA;EAuGQ;;;EAhGjC,EAAA,CAAG,UAAA,EAAY,SAAA,KAAc,OAAA;EAyGQ;;;EA/ErC,IAAA,CAAK,UAAA,EAAY,SAAA,KAAc,OAAA;EAnCpB;;;EAmEX,MAAA,CAAO,UAAA,EAAY,SAAA,IAAa,aAAA,WAAwB,OAAA;EAjE/B;;;EA8FzB,oBAAA,CAAA,GAAwB,OAAA,CAAQ,eAAA;EAvF7B;;;EAgGH,oBAAA,CAAqB,UAAA,EAAY,SAAA,KAAc,OAAA,CAAQ,SAAA;EAtElD;;;EA+EL,UAAA,CAAW,UAAA,EAAY,SAAA,KAAc,OAAA;EA/C9B;;;EAAA,QAuDC,YAAA;EA1BgB;;;EAAA,QA4EhB,eAAA;EAnEa;;;EAAA,QAiFb,eAAA;AAAA;;;;UAYC,aAAA;EACf,OAAA;EACA,UAAA,EAAY,SAAA;AAAA;AAFd;;;;;;;;;AAgBA;;AAhBA,iBAgBgB,iBAAA,CACd,OAAA,UACA,UAAA,EAAY,SAAA,KACX,aAAA;;;;cAOU,iBAAA;EAAA,QACH,UAAA;EARM;;AAOhB;EAME,QAAA,CAAS,SAAA,EAAW,SAAA;;;;EAUpB,YAAA,CAAa,UAAA,EAAY,SAAA;EAgBf;;;EAPV,cAAA,CAAe,QAAA,WAAmB,SAAA;EAxB1B;;;EA+BR,MAAA,CAAA,GAAU,SAAA;EAhBV;;;EA2BA,GAAA,CAAI,QAAA,UAAkB,OAAA,WAAkB,SAAA;EAlBzB;;;EA0Bf,KAAA,CAAA;AAAA;;;;cAQW,iBAAA,EAAiB,iBAAA;;;AAA9B;cAKa,gBAAA;;;;oCAIqB,OAAA,UAAiB,OAAA,aAAiB,SAAA;EAgEnE;;;iCAhD8B,SAAA,UAAmB,YAAA,cAAuB,SAAA;EAkBpB;;;oCAAnB,SAAA,aAAmB,SAAA;EAiBgD;;;oCAAnE,MAAA,EAAU,MAAA,kBAAsB,OAAA,GAAY,MAAA,sBAAuB,SAAA;AAAA"}
|