@defai.digital/contracts 13.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +214 -0
- package/dist/ability/v1/index.d.ts +5 -0
- package/dist/ability/v1/index.d.ts.map +1 -0
- package/dist/ability/v1/index.js +5 -0
- package/dist/ability/v1/index.js.map +1 -0
- package/dist/ability/v1/schema.d.ts +288 -0
- package/dist/ability/v1/schema.d.ts.map +1 -0
- package/dist/ability/v1/schema.js +138 -0
- package/dist/ability/v1/schema.js.map +1 -0
- package/dist/agent/v1/index.d.ts +8 -0
- package/dist/agent/v1/index.d.ts.map +1 -0
- package/dist/agent/v1/index.js +31 -0
- package/dist/agent/v1/index.js.map +1 -0
- package/dist/agent/v1/schema.d.ts +4055 -0
- package/dist/agent/v1/schema.d.ts.map +1 -0
- package/dist/agent/v1/schema.js +970 -0
- package/dist/agent/v1/schema.js.map +1 -0
- package/dist/agent/v1/storage-port.d.ts +172 -0
- package/dist/agent/v1/storage-port.d.ts.map +1 -0
- package/dist/agent/v1/storage-port.js +10 -0
- package/dist/agent/v1/storage-port.js.map +1 -0
- package/dist/analysis/v1/index.d.ts +7 -0
- package/dist/analysis/v1/index.d.ts.map +1 -0
- package/dist/analysis/v1/index.js +21 -0
- package/dist/analysis/v1/index.js.map +1 -0
- package/dist/analysis/v1/schema.d.ts +348 -0
- package/dist/analysis/v1/schema.d.ts.map +1 -0
- package/dist/analysis/v1/schema.js +252 -0
- package/dist/analysis/v1/schema.js.map +1 -0
- package/dist/cli/v1/index.d.ts +8 -0
- package/dist/cli/v1/index.d.ts.map +1 -0
- package/dist/cli/v1/index.js +46 -0
- package/dist/cli/v1/index.js.map +1 -0
- package/dist/cli/v1/output.d.ts +347 -0
- package/dist/cli/v1/output.d.ts.map +1 -0
- package/dist/cli/v1/output.js +288 -0
- package/dist/cli/v1/output.js.map +1 -0
- package/dist/cli/v1/schema.d.ts +494 -0
- package/dist/cli/v1/schema.d.ts.map +1 -0
- package/dist/cli/v1/schema.js +342 -0
- package/dist/cli/v1/schema.js.map +1 -0
- package/dist/config/v1/config.d.ts +887 -0
- package/dist/config/v1/config.d.ts.map +1 -0
- package/dist/config/v1/config.js +348 -0
- package/dist/config/v1/config.js.map +1 -0
- package/dist/config/v1/errors.d.ts +84 -0
- package/dist/config/v1/errors.d.ts.map +1 -0
- package/dist/config/v1/errors.js +150 -0
- package/dist/config/v1/errors.js.map +1 -0
- package/dist/config/v1/events.d.ts +416 -0
- package/dist/config/v1/events.d.ts.map +1 -0
- package/dist/config/v1/events.js +204 -0
- package/dist/config/v1/events.js.map +1 -0
- package/dist/config/v1/index.d.ts +11 -0
- package/dist/config/v1/index.d.ts.map +1 -0
- package/dist/config/v1/index.js +49 -0
- package/dist/config/v1/index.js.map +1 -0
- package/dist/config/v1/operations.d.ts +293 -0
- package/dist/config/v1/operations.d.ts.map +1 -0
- package/dist/config/v1/operations.js +172 -0
- package/dist/config/v1/operations.js.map +1 -0
- package/dist/config/v1/provider-config.d.ts +124 -0
- package/dist/config/v1/provider-config.d.ts.map +1 -0
- package/dist/config/v1/provider-config.js +123 -0
- package/dist/config/v1/provider-config.js.map +1 -0
- package/dist/constants.d.ts +292 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +370 -0
- package/dist/constants.js.map +1 -0
- package/dist/context/v1/index.d.ts +5 -0
- package/dist/context/v1/index.d.ts.map +1 -0
- package/dist/context/v1/index.js +13 -0
- package/dist/context/v1/index.js.map +1 -0
- package/dist/context/v1/schema.d.ts +289 -0
- package/dist/context/v1/schema.d.ts.map +1 -0
- package/dist/context/v1/schema.js +145 -0
- package/dist/context/v1/schema.js.map +1 -0
- package/dist/cross-cutting/v1/dead-letter.d.ts +305 -0
- package/dist/cross-cutting/v1/dead-letter.d.ts.map +1 -0
- package/dist/cross-cutting/v1/dead-letter.js +172 -0
- package/dist/cross-cutting/v1/dead-letter.js.map +1 -0
- package/dist/cross-cutting/v1/idempotency.d.ts +222 -0
- package/dist/cross-cutting/v1/idempotency.d.ts.map +1 -0
- package/dist/cross-cutting/v1/idempotency.js +170 -0
- package/dist/cross-cutting/v1/idempotency.js.map +1 -0
- package/dist/cross-cutting/v1/index.d.ts +14 -0
- package/dist/cross-cutting/v1/index.d.ts.map +1 -0
- package/dist/cross-cutting/v1/index.js +18 -0
- package/dist/cross-cutting/v1/index.js.map +1 -0
- package/dist/cross-cutting/v1/retention.d.ts +347 -0
- package/dist/cross-cutting/v1/retention.d.ts.map +1 -0
- package/dist/cross-cutting/v1/retention.js +178 -0
- package/dist/cross-cutting/v1/retention.js.map +1 -0
- package/dist/cross-cutting/v1/saga.d.ts +358 -0
- package/dist/cross-cutting/v1/saga.d.ts.map +1 -0
- package/dist/cross-cutting/v1/saga.js +219 -0
- package/dist/cross-cutting/v1/saga.js.map +1 -0
- package/dist/design/v1/index.d.ts +5 -0
- package/dist/design/v1/index.d.ts.map +1 -0
- package/dist/design/v1/index.js +5 -0
- package/dist/design/v1/index.js.map +1 -0
- package/dist/design/v1/schema.d.ts +748 -0
- package/dist/design/v1/schema.d.ts.map +1 -0
- package/dist/design/v1/schema.js +316 -0
- package/dist/design/v1/schema.js.map +1 -0
- package/dist/discussion/v1/index.d.ts +10 -0
- package/dist/discussion/v1/index.d.ts.map +1 -0
- package/dist/discussion/v1/index.js +21 -0
- package/dist/discussion/v1/index.js.map +1 -0
- package/dist/discussion/v1/schema.d.ts +1186 -0
- package/dist/discussion/v1/schema.d.ts.map +1 -0
- package/dist/discussion/v1/schema.js +560 -0
- package/dist/discussion/v1/schema.js.map +1 -0
- package/dist/file-system/v1/index.d.ts +7 -0
- package/dist/file-system/v1/index.d.ts.map +1 -0
- package/dist/file-system/v1/index.js +7 -0
- package/dist/file-system/v1/index.js.map +1 -0
- package/dist/file-system/v1/schema.d.ts +644 -0
- package/dist/file-system/v1/schema.d.ts.map +1 -0
- package/dist/file-system/v1/schema.js +278 -0
- package/dist/file-system/v1/schema.js.map +1 -0
- package/dist/guard/v1/index.d.ts +9 -0
- package/dist/guard/v1/index.d.ts.map +1 -0
- package/dist/guard/v1/index.js +10 -0
- package/dist/guard/v1/index.js.map +1 -0
- package/dist/guard/v1/schema.d.ts +308 -0
- package/dist/guard/v1/schema.d.ts.map +1 -0
- package/dist/guard/v1/schema.js +267 -0
- package/dist/guard/v1/schema.js.map +1 -0
- package/dist/index.d.ts +68 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +117 -0
- package/dist/index.js.map +1 -0
- package/dist/iterate/v1/index.d.ts +5 -0
- package/dist/iterate/v1/index.d.ts.map +1 -0
- package/dist/iterate/v1/index.js +13 -0
- package/dist/iterate/v1/index.js.map +1 -0
- package/dist/iterate/v1/schema.d.ts +693 -0
- package/dist/iterate/v1/schema.d.ts.map +1 -0
- package/dist/iterate/v1/schema.js +244 -0
- package/dist/iterate/v1/schema.js.map +1 -0
- package/dist/mcp/v1/index.d.ts +8 -0
- package/dist/mcp/v1/index.d.ts.map +1 -0
- package/dist/mcp/v1/index.js +20 -0
- package/dist/mcp/v1/index.js.map +1 -0
- package/dist/mcp/v1/prompts/index.d.ts +5 -0
- package/dist/mcp/v1/prompts/index.d.ts.map +1 -0
- package/dist/mcp/v1/prompts/index.js +5 -0
- package/dist/mcp/v1/prompts/index.js.map +1 -0
- package/dist/mcp/v1/prompts/schema.d.ts +266 -0
- package/dist/mcp/v1/prompts/schema.d.ts.map +1 -0
- package/dist/mcp/v1/prompts/schema.js +138 -0
- package/dist/mcp/v1/prompts/schema.js.map +1 -0
- package/dist/mcp/v1/rate-limit.schema.d.ts +175 -0
- package/dist/mcp/v1/rate-limit.schema.d.ts.map +1 -0
- package/dist/mcp/v1/rate-limit.schema.js +164 -0
- package/dist/mcp/v1/rate-limit.schema.js.map +1 -0
- package/dist/mcp/v1/resources/index.d.ts +5 -0
- package/dist/mcp/v1/resources/index.d.ts.map +1 -0
- package/dist/mcp/v1/resources/index.js +5 -0
- package/dist/mcp/v1/resources/index.js.map +1 -0
- package/dist/mcp/v1/resources/schema.d.ts +169 -0
- package/dist/mcp/v1/resources/schema.d.ts.map +1 -0
- package/dist/mcp/v1/resources/schema.js +118 -0
- package/dist/mcp/v1/resources/schema.js.map +1 -0
- package/dist/mcp/v1/runtime/cache.d.ts +204 -0
- package/dist/mcp/v1/runtime/cache.d.ts.map +1 -0
- package/dist/mcp/v1/runtime/cache.js +92 -0
- package/dist/mcp/v1/runtime/cache.js.map +1 -0
- package/dist/mcp/v1/runtime/index.d.ts +5 -0
- package/dist/mcp/v1/runtime/index.d.ts.map +1 -0
- package/dist/mcp/v1/runtime/index.js +9 -0
- package/dist/mcp/v1/runtime/index.js.map +1 -0
- package/dist/mcp/v1/runtime/limits.d.ts +113 -0
- package/dist/mcp/v1/runtime/limits.d.ts.map +1 -0
- package/dist/mcp/v1/runtime/limits.js +95 -0
- package/dist/mcp/v1/runtime/limits.js.map +1 -0
- package/dist/mcp/v1/runtime/response.d.ts +467 -0
- package/dist/mcp/v1/runtime/response.d.ts.map +1 -0
- package/dist/mcp/v1/runtime/response.js +130 -0
- package/dist/mcp/v1/runtime/response.js.map +1 -0
- package/dist/mcp/v1/runtime/timeout.d.ts +116 -0
- package/dist/mcp/v1/runtime/timeout.d.ts.map +1 -0
- package/dist/mcp/v1/runtime/timeout.js +116 -0
- package/dist/mcp/v1/runtime/timeout.js.map +1 -0
- package/dist/mcp/v1/schema.d.ts +171 -0
- package/dist/mcp/v1/schema.d.ts.map +1 -0
- package/dist/mcp/v1/schema.js +97 -0
- package/dist/mcp/v1/schema.js.map +1 -0
- package/dist/mcp/v1/tools/agent.d.ts +485 -0
- package/dist/mcp/v1/tools/agent.d.ts.map +1 -0
- package/dist/mcp/v1/tools/agent.js +264 -0
- package/dist/mcp/v1/tools/agent.js.map +1 -0
- package/dist/mcp/v1/tools/guard.d.ts +243 -0
- package/dist/mcp/v1/tools/guard.d.ts.map +1 -0
- package/dist/mcp/v1/tools/guard.js +136 -0
- package/dist/mcp/v1/tools/guard.js.map +1 -0
- package/dist/mcp/v1/tools/index.d.ts +15 -0
- package/dist/mcp/v1/tools/index.d.ts.map +1 -0
- package/dist/mcp/v1/tools/index.js +22 -0
- package/dist/mcp/v1/tools/index.js.map +1 -0
- package/dist/mcp/v1/tools/memory.d.ts +569 -0
- package/dist/mcp/v1/tools/memory.d.ts.map +1 -0
- package/dist/mcp/v1/tools/memory.js +319 -0
- package/dist/mcp/v1/tools/memory.js.map +1 -0
- package/dist/mcp/v1/tools/session.d.ts +545 -0
- package/dist/mcp/v1/tools/session.d.ts.map +1 -0
- package/dist/mcp/v1/tools/session.js +309 -0
- package/dist/mcp/v1/tools/session.js.map +1 -0
- package/dist/mcp/v1/tools/tool-list-schemas.d.ts +354 -0
- package/dist/mcp/v1/tools/tool-list-schemas.d.ts.map +1 -0
- package/dist/mcp/v1/tools/tool-list-schemas.js +140 -0
- package/dist/mcp/v1/tools/tool-list-schemas.js.map +1 -0
- package/dist/mcp/v1/tools/trace.d.ts +282 -0
- package/dist/mcp/v1/tools/trace.d.ts.map +1 -0
- package/dist/mcp/v1/tools/trace.js +94 -0
- package/dist/mcp/v1/tools/trace.js.map +1 -0
- package/dist/mcp/v1/tools/workflow.d.ts +146 -0
- package/dist/mcp/v1/tools/workflow.d.ts.map +1 -0
- package/dist/mcp/v1/tools/workflow.js +68 -0
- package/dist/mcp/v1/tools/workflow.js.map +1 -0
- package/dist/mcp/v1/trace/index.d.ts +5 -0
- package/dist/mcp/v1/trace/index.d.ts.map +1 -0
- package/dist/mcp/v1/trace/index.js +5 -0
- package/dist/mcp/v1/trace/index.js.map +1 -0
- package/dist/mcp/v1/trace/tool-trace.d.ts +107 -0
- package/dist/mcp/v1/trace/tool-trace.d.ts.map +1 -0
- package/dist/mcp/v1/trace/tool-trace.js +91 -0
- package/dist/mcp/v1/trace/tool-trace.js.map +1 -0
- package/dist/memory/v1/index.d.ts +2 -0
- package/dist/memory/v1/index.d.ts.map +1 -0
- package/dist/memory/v1/index.js +2 -0
- package/dist/memory/v1/index.js.map +1 -0
- package/dist/memory/v1/schema.d.ts +188 -0
- package/dist/memory/v1/schema.d.ts.map +1 -0
- package/dist/memory/v1/schema.js +108 -0
- package/dist/memory/v1/schema.js.map +1 -0
- package/dist/ml-lifecycle/v1/index.d.ts +12 -0
- package/dist/ml-lifecycle/v1/index.d.ts.map +1 -0
- package/dist/ml-lifecycle/v1/index.js +12 -0
- package/dist/ml-lifecycle/v1/index.js.map +1 -0
- package/dist/ml-lifecycle/v1/schema.d.ts +1207 -0
- package/dist/ml-lifecycle/v1/schema.d.ts.map +1 -0
- package/dist/ml-lifecycle/v1/schema.js +481 -0
- package/dist/ml-lifecycle/v1/schema.js.map +1 -0
- package/dist/orchestration/v1/index.d.ts +5 -0
- package/dist/orchestration/v1/index.d.ts.map +1 -0
- package/dist/orchestration/v1/index.js +23 -0
- package/dist/orchestration/v1/index.js.map +1 -0
- package/dist/orchestration/v1/schema.d.ts +1384 -0
- package/dist/orchestration/v1/schema.d.ts.map +1 -0
- package/dist/orchestration/v1/schema.js +394 -0
- package/dist/orchestration/v1/schema.js.map +1 -0
- package/dist/provider/v1/circuit-breaker.d.ts +151 -0
- package/dist/provider/v1/circuit-breaker.d.ts.map +1 -0
- package/dist/provider/v1/circuit-breaker.js +119 -0
- package/dist/provider/v1/circuit-breaker.js.map +1 -0
- package/dist/provider/v1/health.d.ts +246 -0
- package/dist/provider/v1/health.d.ts.map +1 -0
- package/dist/provider/v1/health.js +190 -0
- package/dist/provider/v1/health.js.map +1 -0
- package/dist/provider/v1/index.d.ts +13 -0
- package/dist/provider/v1/index.d.ts.map +1 -0
- package/dist/provider/v1/index.js +17 -0
- package/dist/provider/v1/index.js.map +1 -0
- package/dist/provider/v1/port.d.ts +237 -0
- package/dist/provider/v1/port.d.ts.map +1 -0
- package/dist/provider/v1/port.js +113 -0
- package/dist/provider/v1/port.js.map +1 -0
- package/dist/provider/v1/rate-limit.d.ts +214 -0
- package/dist/provider/v1/rate-limit.d.ts.map +1 -0
- package/dist/provider/v1/rate-limit.js +165 -0
- package/dist/provider/v1/rate-limit.js.map +1 -0
- package/dist/resilience/v1/circuit-breaker.d.ts +135 -0
- package/dist/resilience/v1/circuit-breaker.d.ts.map +1 -0
- package/dist/resilience/v1/circuit-breaker.js +105 -0
- package/dist/resilience/v1/circuit-breaker.js.map +1 -0
- package/dist/resilience/v1/index.d.ts +17 -0
- package/dist/resilience/v1/index.d.ts.map +1 -0
- package/dist/resilience/v1/index.js +17 -0
- package/dist/resilience/v1/index.js.map +1 -0
- package/dist/resilience/v1/loop-guard.d.ts +123 -0
- package/dist/resilience/v1/loop-guard.d.ts.map +1 -0
- package/dist/resilience/v1/loop-guard.js +96 -0
- package/dist/resilience/v1/loop-guard.js.map +1 -0
- package/dist/resilience/v1/metrics.d.ts +323 -0
- package/dist/resilience/v1/metrics.d.ts.map +1 -0
- package/dist/resilience/v1/metrics.js +183 -0
- package/dist/resilience/v1/metrics.js.map +1 -0
- package/dist/resilience/v1/rate-limiter.d.ts +122 -0
- package/dist/resilience/v1/rate-limiter.d.ts.map +1 -0
- package/dist/resilience/v1/rate-limiter.js +119 -0
- package/dist/resilience/v1/rate-limiter.js.map +1 -0
- package/dist/resilience/v1/resource-limits.d.ts +146 -0
- package/dist/resilience/v1/resource-limits.d.ts.map +1 -0
- package/dist/resilience/v1/resource-limits.js +130 -0
- package/dist/resilience/v1/resource-limits.js.map +1 -0
- package/dist/review/v1/index.d.ts +7 -0
- package/dist/review/v1/index.d.ts.map +1 -0
- package/dist/review/v1/index.js +23 -0
- package/dist/review/v1/index.js.map +1 -0
- package/dist/review/v1/schema.d.ts +1284 -0
- package/dist/review/v1/schema.d.ts.map +1 -0
- package/dist/review/v1/schema.js +423 -0
- package/dist/review/v1/schema.js.map +1 -0
- package/dist/routing/v1/index.d.ts +2 -0
- package/dist/routing/v1/index.d.ts.map +1 -0
- package/dist/routing/v1/index.js +2 -0
- package/dist/routing/v1/index.js.map +1 -0
- package/dist/routing/v1/schema.d.ts +315 -0
- package/dist/routing/v1/schema.d.ts.map +1 -0
- package/dist/routing/v1/schema.js +103 -0
- package/dist/routing/v1/schema.js.map +1 -0
- package/dist/scaffold/v1/index.d.ts +7 -0
- package/dist/scaffold/v1/index.d.ts.map +1 -0
- package/dist/scaffold/v1/index.js +7 -0
- package/dist/scaffold/v1/index.js.map +1 -0
- package/dist/scaffold/v1/schema.d.ts +351 -0
- package/dist/scaffold/v1/schema.d.ts.map +1 -0
- package/dist/scaffold/v1/schema.js +238 -0
- package/dist/scaffold/v1/schema.js.map +1 -0
- package/dist/session/v1/index.d.ts +7 -0
- package/dist/session/v1/index.d.ts.map +1 -0
- package/dist/session/v1/index.js +23 -0
- package/dist/session/v1/index.js.map +1 -0
- package/dist/session/v1/schema.d.ts +1156 -0
- package/dist/session/v1/schema.d.ts.map +1 -0
- package/dist/session/v1/schema.js +315 -0
- package/dist/session/v1/schema.js.map +1 -0
- package/dist/storage/v1/index.d.ts +9 -0
- package/dist/storage/v1/index.d.ts.map +1 -0
- package/dist/storage/v1/index.js +21 -0
- package/dist/storage/v1/index.js.map +1 -0
- package/dist/storage/v1/schema.d.ts +411 -0
- package/dist/storage/v1/schema.d.ts.map +1 -0
- package/dist/storage/v1/schema.js +167 -0
- package/dist/storage/v1/schema.js.map +1 -0
- package/dist/telemetry/v1/index.d.ts +5 -0
- package/dist/telemetry/v1/index.d.ts.map +1 -0
- package/dist/telemetry/v1/index.js +5 -0
- package/dist/telemetry/v1/index.js.map +1 -0
- package/dist/telemetry/v1/schema.d.ts +747 -0
- package/dist/telemetry/v1/schema.d.ts.map +1 -0
- package/dist/telemetry/v1/schema.js +300 -0
- package/dist/telemetry/v1/schema.js.map +1 -0
- package/dist/token-budget/v1/index.d.ts +7 -0
- package/dist/token-budget/v1/index.d.ts.map +1 -0
- package/dist/token-budget/v1/index.js +25 -0
- package/dist/token-budget/v1/index.js.map +1 -0
- package/dist/token-budget/v1/schema.d.ts +588 -0
- package/dist/token-budget/v1/schema.d.ts.map +1 -0
- package/dist/token-budget/v1/schema.js +239 -0
- package/dist/token-budget/v1/schema.js.map +1 -0
- package/dist/trace/v1/index.d.ts +2 -0
- package/dist/trace/v1/index.d.ts.map +1 -0
- package/dist/trace/v1/index.js +4 -0
- package/dist/trace/v1/index.js.map +1 -0
- package/dist/trace/v1/schema.d.ts +531 -0
- package/dist/trace/v1/schema.d.ts.map +1 -0
- package/dist/trace/v1/schema.js +243 -0
- package/dist/trace/v1/schema.js.map +1 -0
- package/dist/workflow/v1/index.d.ts +3 -0
- package/dist/workflow/v1/index.d.ts.map +1 -0
- package/dist/workflow/v1/index.js +8 -0
- package/dist/workflow/v1/index.js.map +1 -0
- package/dist/workflow/v1/schema.d.ts +267 -0
- package/dist/workflow/v1/schema.d.ts.map +1 -0
- package/dist/workflow/v1/schema.js +95 -0
- package/dist/workflow/v1/schema.js.map +1 -0
- package/dist/workflow/v1/step-guard.d.ts +571 -0
- package/dist/workflow/v1/step-guard.d.ts.map +1 -0
- package/dist/workflow/v1/step-guard.js +305 -0
- package/dist/workflow/v1/step-guard.js.map +1 -0
- package/dist/workflow-templates/v1/index.d.ts +8 -0
- package/dist/workflow-templates/v1/index.d.ts.map +1 -0
- package/dist/workflow-templates/v1/index.js +8 -0
- package/dist/workflow-templates/v1/index.js.map +1 -0
- package/dist/workflow-templates/v1/schema.d.ts +714 -0
- package/dist/workflow-templates/v1/schema.d.ts.map +1 -0
- package/dist/workflow-templates/v1/schema.js +168 -0
- package/dist/workflow-templates/v1/schema.js.map +1 -0
- package/package.json +142 -0
- package/src/guard/v1/policy.schema.json +56 -0
- package/src/mcp/v1/tools.schema.json +108 -0
- package/src/memory/v1/event.schema.json +136 -0
- package/src/routing/v1/decision.schema.json +155 -0
- package/src/trace/v1/event.schema.json +197 -0
- package/src/workflow/v1/workflow.schema.json +142 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Idempotency Contract V1
|
|
3
|
+
*
|
|
4
|
+
* Provides contracts for preventing duplicate request processing.
|
|
5
|
+
* Enables safe retries and exactly-once semantics.
|
|
6
|
+
*
|
|
7
|
+
* Invariants:
|
|
8
|
+
* - INV-ID-001: Same idempotency key returns cached response
|
|
9
|
+
* - INV-ID-002: Different request with same key is rejected (conflict)
|
|
10
|
+
* - INV-ID-003: Cache entries expire after TTL
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
/**
|
|
14
|
+
* Idempotency check status
|
|
15
|
+
*/
|
|
16
|
+
export declare const IdempotencyStatusSchema: z.ZodEnum<["new", "cached", "processing", "conflict"]>;
|
|
17
|
+
export type IdempotencyStatus = z.infer<typeof IdempotencyStatusSchema>;
|
|
18
|
+
/**
|
|
19
|
+
* Idempotency cache entry status
|
|
20
|
+
*/
|
|
21
|
+
export declare const CacheEntryStatusSchema: z.ZodEnum<["processing", "completed", "failed"]>;
|
|
22
|
+
export type CacheEntryStatus = z.infer<typeof CacheEntryStatusSchema>;
|
|
23
|
+
/**
|
|
24
|
+
* Idempotency cache entry
|
|
25
|
+
*/
|
|
26
|
+
export declare const IdempotencyCacheEntrySchema: z.ZodObject<{
|
|
27
|
+
/** Idempotency key */
|
|
28
|
+
key: z.ZodString;
|
|
29
|
+
/** Hash of original request */
|
|
30
|
+
requestHash: z.ZodString;
|
|
31
|
+
/** Cached response (if completed) */
|
|
32
|
+
response: z.ZodUnknown;
|
|
33
|
+
/** Entry creation timestamp */
|
|
34
|
+
createdAt: z.ZodString;
|
|
35
|
+
/** Entry expiration timestamp */
|
|
36
|
+
expiresAt: z.ZodString;
|
|
37
|
+
/** Current status */
|
|
38
|
+
status: z.ZodEnum<["processing", "completed", "failed"]>;
|
|
39
|
+
/** Error message if failed */
|
|
40
|
+
error: z.ZodOptional<z.ZodString>;
|
|
41
|
+
/** Request metadata */
|
|
42
|
+
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
43
|
+
/** Last update timestamp */
|
|
44
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
45
|
+
}, "strip", z.ZodTypeAny, {
|
|
46
|
+
status: "completed" | "failed" | "processing";
|
|
47
|
+
createdAt: string;
|
|
48
|
+
key: string;
|
|
49
|
+
expiresAt: string;
|
|
50
|
+
requestHash: string;
|
|
51
|
+
metadata?: Record<string, unknown> | undefined;
|
|
52
|
+
error?: string | undefined;
|
|
53
|
+
updatedAt?: string | undefined;
|
|
54
|
+
response?: unknown;
|
|
55
|
+
}, {
|
|
56
|
+
status: "completed" | "failed" | "processing";
|
|
57
|
+
createdAt: string;
|
|
58
|
+
key: string;
|
|
59
|
+
expiresAt: string;
|
|
60
|
+
requestHash: string;
|
|
61
|
+
metadata?: Record<string, unknown> | undefined;
|
|
62
|
+
error?: string | undefined;
|
|
63
|
+
updatedAt?: string | undefined;
|
|
64
|
+
response?: unknown;
|
|
65
|
+
}>;
|
|
66
|
+
export type IdempotencyCacheEntry = z.infer<typeof IdempotencyCacheEntrySchema>;
|
|
67
|
+
/**
|
|
68
|
+
* Idempotency configuration
|
|
69
|
+
*/
|
|
70
|
+
export declare const IdempotencyConfigSchema: z.ZodObject<{
|
|
71
|
+
/** Enable idempotency checking */
|
|
72
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
73
|
+
/** TTL for cached responses in seconds */
|
|
74
|
+
ttlSeconds: z.ZodDefault<z.ZodNumber>;
|
|
75
|
+
/** Maximum cached entries */
|
|
76
|
+
maxEntries: z.ZodDefault<z.ZodNumber>;
|
|
77
|
+
/** Cleanup interval in seconds */
|
|
78
|
+
cleanupIntervalSeconds: z.ZodDefault<z.ZodNumber>;
|
|
79
|
+
/** Lock timeout for processing state in ms */
|
|
80
|
+
lockTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
81
|
+
/** Include request body in hash */
|
|
82
|
+
hashRequestBody: z.ZodDefault<z.ZodBoolean>;
|
|
83
|
+
/** Include specific headers in hash */
|
|
84
|
+
hashHeaders: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
85
|
+
}, "strip", z.ZodTypeAny, {
|
|
86
|
+
enabled: boolean;
|
|
87
|
+
maxEntries: number;
|
|
88
|
+
ttlSeconds: number;
|
|
89
|
+
cleanupIntervalSeconds: number;
|
|
90
|
+
lockTimeoutMs: number;
|
|
91
|
+
hashRequestBody: boolean;
|
|
92
|
+
hashHeaders: string[];
|
|
93
|
+
}, {
|
|
94
|
+
enabled?: boolean | undefined;
|
|
95
|
+
maxEntries?: number | undefined;
|
|
96
|
+
ttlSeconds?: number | undefined;
|
|
97
|
+
cleanupIntervalSeconds?: number | undefined;
|
|
98
|
+
lockTimeoutMs?: number | undefined;
|
|
99
|
+
hashRequestBody?: boolean | undefined;
|
|
100
|
+
hashHeaders?: string[] | undefined;
|
|
101
|
+
}>;
|
|
102
|
+
export type IdempotencyConfig = z.infer<typeof IdempotencyConfigSchema>;
|
|
103
|
+
/**
|
|
104
|
+
* Idempotency check result
|
|
105
|
+
*/
|
|
106
|
+
export declare const IdempotencyCheckResultSchema: z.ZodObject<{
|
|
107
|
+
/** Result status */
|
|
108
|
+
status: z.ZodEnum<["new", "cached", "processing", "conflict"]>;
|
|
109
|
+
/** Cached response (if status is 'cached') */
|
|
110
|
+
response: z.ZodOptional<z.ZodUnknown>;
|
|
111
|
+
/** When response was cached (if cached) */
|
|
112
|
+
cachedAt: z.ZodOptional<z.ZodString>;
|
|
113
|
+
/** Error message (if status is 'conflict') */
|
|
114
|
+
error: z.ZodOptional<z.ZodString>;
|
|
115
|
+
/** Time until lock expires (if processing) */
|
|
116
|
+
lockExpiresInMs: z.ZodOptional<z.ZodNumber>;
|
|
117
|
+
}, "strip", z.ZodTypeAny, {
|
|
118
|
+
status: "cached" | "new" | "processing" | "conflict";
|
|
119
|
+
error?: string | undefined;
|
|
120
|
+
response?: unknown;
|
|
121
|
+
cachedAt?: string | undefined;
|
|
122
|
+
lockExpiresInMs?: number | undefined;
|
|
123
|
+
}, {
|
|
124
|
+
status: "cached" | "new" | "processing" | "conflict";
|
|
125
|
+
error?: string | undefined;
|
|
126
|
+
response?: unknown;
|
|
127
|
+
cachedAt?: string | undefined;
|
|
128
|
+
lockExpiresInMs?: number | undefined;
|
|
129
|
+
}>;
|
|
130
|
+
export type IdempotencyCheckResult = z.infer<typeof IdempotencyCheckResultSchema>;
|
|
131
|
+
/**
|
|
132
|
+
* Idempotency statistics
|
|
133
|
+
*/
|
|
134
|
+
export declare const IdempotencyStatsSchema: z.ZodObject<{
|
|
135
|
+
/** Total cached entries */
|
|
136
|
+
totalEntries: z.ZodNumber;
|
|
137
|
+
/** Entries by status */
|
|
138
|
+
byStatus: z.ZodObject<{
|
|
139
|
+
processing: z.ZodNumber;
|
|
140
|
+
completed: z.ZodNumber;
|
|
141
|
+
failed: z.ZodNumber;
|
|
142
|
+
}, "strip", z.ZodTypeAny, {
|
|
143
|
+
completed: number;
|
|
144
|
+
failed: number;
|
|
145
|
+
processing: number;
|
|
146
|
+
}, {
|
|
147
|
+
completed: number;
|
|
148
|
+
failed: number;
|
|
149
|
+
processing: number;
|
|
150
|
+
}>;
|
|
151
|
+
/** Cache hit rate (0-1) */
|
|
152
|
+
hitRate: z.ZodNumber;
|
|
153
|
+
/** Total hits */
|
|
154
|
+
totalHits: z.ZodNumber;
|
|
155
|
+
/** Total misses */
|
|
156
|
+
totalMisses: z.ZodNumber;
|
|
157
|
+
/** Total conflicts */
|
|
158
|
+
totalConflicts: z.ZodNumber;
|
|
159
|
+
/** Oldest entry timestamp */
|
|
160
|
+
oldestEntry: z.ZodOptional<z.ZodString>;
|
|
161
|
+
}, "strip", z.ZodTypeAny, {
|
|
162
|
+
totalEntries: number;
|
|
163
|
+
hitRate: number;
|
|
164
|
+
byStatus: {
|
|
165
|
+
completed: number;
|
|
166
|
+
failed: number;
|
|
167
|
+
processing: number;
|
|
168
|
+
};
|
|
169
|
+
totalHits: number;
|
|
170
|
+
totalMisses: number;
|
|
171
|
+
totalConflicts: number;
|
|
172
|
+
oldestEntry?: string | undefined;
|
|
173
|
+
}, {
|
|
174
|
+
totalEntries: number;
|
|
175
|
+
hitRate: number;
|
|
176
|
+
byStatus: {
|
|
177
|
+
completed: number;
|
|
178
|
+
failed: number;
|
|
179
|
+
processing: number;
|
|
180
|
+
};
|
|
181
|
+
totalHits: number;
|
|
182
|
+
totalMisses: number;
|
|
183
|
+
totalConflicts: number;
|
|
184
|
+
oldestEntry?: string | undefined;
|
|
185
|
+
}>;
|
|
186
|
+
export type IdempotencyStats = z.infer<typeof IdempotencyStatsSchema>;
|
|
187
|
+
/**
|
|
188
|
+
* Idempotency error codes
|
|
189
|
+
*/
|
|
190
|
+
export declare const IdempotencyErrorCodes: {
|
|
191
|
+
readonly KEY_CONFLICT: "IDEMPOTENCY_KEY_CONFLICT";
|
|
192
|
+
readonly LOCK_TIMEOUT: "IDEMPOTENCY_LOCK_TIMEOUT";
|
|
193
|
+
readonly CACHE_FULL: "IDEMPOTENCY_CACHE_FULL";
|
|
194
|
+
readonly INVALID_KEY: "IDEMPOTENCY_INVALID_KEY";
|
|
195
|
+
readonly ENTRY_EXPIRED: "IDEMPOTENCY_ENTRY_EXPIRED";
|
|
196
|
+
};
|
|
197
|
+
export type IdempotencyErrorCode = (typeof IdempotencyErrorCodes)[keyof typeof IdempotencyErrorCodes];
|
|
198
|
+
/**
|
|
199
|
+
* Validates idempotency configuration
|
|
200
|
+
*/
|
|
201
|
+
export declare function validateIdempotencyConfig(data: unknown): IdempotencyConfig;
|
|
202
|
+
/**
|
|
203
|
+
* Validates idempotency cache entry
|
|
204
|
+
*/
|
|
205
|
+
export declare function validateIdempotencyCacheEntry(data: unknown): IdempotencyCacheEntry;
|
|
206
|
+
/**
|
|
207
|
+
* Creates default idempotency configuration
|
|
208
|
+
*/
|
|
209
|
+
export declare function createDefaultIdempotencyConfig(): IdempotencyConfig;
|
|
210
|
+
/**
|
|
211
|
+
* Generates request hash from request data
|
|
212
|
+
*/
|
|
213
|
+
export declare function generateRequestHash(method: string, path: string, body?: unknown, headers?: Record<string, string>): string;
|
|
214
|
+
/**
|
|
215
|
+
* Calculates expiration timestamp
|
|
216
|
+
*/
|
|
217
|
+
export declare function calculateExpiration(ttlSeconds: number): string;
|
|
218
|
+
/**
|
|
219
|
+
* Checks if entry is expired
|
|
220
|
+
*/
|
|
221
|
+
export declare function isEntryExpired(entry: IdempotencyCacheEntry): boolean;
|
|
222
|
+
//# sourceMappingURL=idempotency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../../src/cross-cutting/v1/idempotency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB;;GAEG;AACH,eAAO,MAAM,uBAAuB,wDAKlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,sBAAsB,kDAIjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;;GAEG;AACH,eAAO,MAAM,2BAA2B;IACtC,sBAAsB;;IAGtB,+BAA+B;;IAG/B,qCAAqC;;IAGrC,+BAA+B;;IAG/B,iCAAiC;;IAGjC,qBAAqB;;IAGrB,8BAA8B;;IAG9B,uBAAuB;;IAGvB,4BAA4B;;;;;;;;;;;;;;;;;;;;;;EAE5B,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,uBAAuB;IAClC,kCAAkC;;IAGlC,0CAA0C;;IAG1C,6BAA6B;;IAG7B,kCAAkC;;IAGlC,8CAA8C;;IAG9C,mCAAmC;;IAGnC,uCAAuC;;;;;;;;;;;;;;;;;;EAEvC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,4BAA4B;IACvC,oBAAoB;;IAGpB,8CAA8C;;IAG9C,2CAA2C;;IAG3C,8CAA8C;;IAG9C,8CAA8C;;;;;;;;;;;;;;EAE9C,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF;;GAEG;AACH,eAAO,MAAM,sBAAsB;IACjC,2BAA2B;;IAG3B,wBAAwB;;;;;;;;;;;;;;IAOxB,2BAA2B;;IAG3B,iBAAiB;;IAGjB,mBAAmB;;IAGnB,sBAAsB;;IAGtB,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;EAE7B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;CAMxB,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAC9B,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,OAAO,qBAAqB,CAAC,CAAC;AAErE;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,CAE1E;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,OAAO,GAAG,qBAAqB,CAElF;AAED;;GAEG;AACH,wBAAgB,8BAA8B,IAAI,iBAAiB,CAElE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAgBR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAEpE"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Idempotency Contract V1
|
|
3
|
+
*
|
|
4
|
+
* Provides contracts for preventing duplicate request processing.
|
|
5
|
+
* Enables safe retries and exactly-once semantics.
|
|
6
|
+
*
|
|
7
|
+
* Invariants:
|
|
8
|
+
* - INV-ID-001: Same idempotency key returns cached response
|
|
9
|
+
* - INV-ID-002: Different request with same key is rejected (conflict)
|
|
10
|
+
* - INV-ID-003: Cache entries expire after TTL
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { IDEMPOTENCY_TTL_SECONDS, LIMIT_STORE_ENTRIES, CLEANUP_INTERVAL_SECONDS, TIMEOUT_SAGA_DEFAULT, } from '../../constants.js';
|
|
14
|
+
/**
|
|
15
|
+
* Idempotency check status
|
|
16
|
+
*/
|
|
17
|
+
export const IdempotencyStatusSchema = z.enum([
|
|
18
|
+
'new', // New request, proceed with processing
|
|
19
|
+
'cached', // Cached response available
|
|
20
|
+
'processing', // Request currently being processed
|
|
21
|
+
'conflict', // Different request with same key
|
|
22
|
+
]);
|
|
23
|
+
/**
|
|
24
|
+
* Idempotency cache entry status
|
|
25
|
+
*/
|
|
26
|
+
export const CacheEntryStatusSchema = z.enum([
|
|
27
|
+
'processing', // Request is being processed
|
|
28
|
+
'completed', // Request completed successfully
|
|
29
|
+
'failed', // Request failed (allows retry)
|
|
30
|
+
]);
|
|
31
|
+
/**
|
|
32
|
+
* Idempotency cache entry
|
|
33
|
+
*/
|
|
34
|
+
export const IdempotencyCacheEntrySchema = z.object({
|
|
35
|
+
/** Idempotency key */
|
|
36
|
+
key: z.string().uuid(),
|
|
37
|
+
/** Hash of original request */
|
|
38
|
+
requestHash: z.string(),
|
|
39
|
+
/** Cached response (if completed) */
|
|
40
|
+
response: z.unknown(),
|
|
41
|
+
/** Entry creation timestamp */
|
|
42
|
+
createdAt: z.string().datetime(),
|
|
43
|
+
/** Entry expiration timestamp */
|
|
44
|
+
expiresAt: z.string().datetime(),
|
|
45
|
+
/** Current status */
|
|
46
|
+
status: CacheEntryStatusSchema,
|
|
47
|
+
/** Error message if failed */
|
|
48
|
+
error: z.string().optional(),
|
|
49
|
+
/** Request metadata */
|
|
50
|
+
metadata: z.record(z.string(), z.unknown()).optional(),
|
|
51
|
+
/** Last update timestamp */
|
|
52
|
+
updatedAt: z.string().datetime().optional(),
|
|
53
|
+
});
|
|
54
|
+
/**
|
|
55
|
+
* Idempotency configuration
|
|
56
|
+
*/
|
|
57
|
+
export const IdempotencyConfigSchema = z.object({
|
|
58
|
+
/** Enable idempotency checking */
|
|
59
|
+
enabled: z.boolean().default(true),
|
|
60
|
+
/** TTL for cached responses in seconds */
|
|
61
|
+
ttlSeconds: z.number().int().min(60).max(86400).default(IDEMPOTENCY_TTL_SECONDS),
|
|
62
|
+
/** Maximum cached entries */
|
|
63
|
+
maxEntries: z.number().int().min(100).max(100000).default(LIMIT_STORE_ENTRIES),
|
|
64
|
+
/** Cleanup interval in seconds */
|
|
65
|
+
cleanupIntervalSeconds: z.number().int().min(60).max(3600).default(CLEANUP_INTERVAL_SECONDS),
|
|
66
|
+
/** Lock timeout for processing state in ms */
|
|
67
|
+
lockTimeoutMs: z.number().int().min(1000).max(300000).default(TIMEOUT_SAGA_DEFAULT),
|
|
68
|
+
/** Include request body in hash */
|
|
69
|
+
hashRequestBody: z.boolean().default(true),
|
|
70
|
+
/** Include specific headers in hash */
|
|
71
|
+
hashHeaders: z.array(z.string()).default([]),
|
|
72
|
+
});
|
|
73
|
+
/**
|
|
74
|
+
* Idempotency check result
|
|
75
|
+
*/
|
|
76
|
+
export const IdempotencyCheckResultSchema = z.object({
|
|
77
|
+
/** Result status */
|
|
78
|
+
status: IdempotencyStatusSchema,
|
|
79
|
+
/** Cached response (if status is 'cached') */
|
|
80
|
+
response: z.unknown().optional(),
|
|
81
|
+
/** When response was cached (if cached) */
|
|
82
|
+
cachedAt: z.string().datetime().optional(),
|
|
83
|
+
/** Error message (if status is 'conflict') */
|
|
84
|
+
error: z.string().optional(),
|
|
85
|
+
/** Time until lock expires (if processing) */
|
|
86
|
+
lockExpiresInMs: z.number().int().min(0).optional(),
|
|
87
|
+
});
|
|
88
|
+
/**
|
|
89
|
+
* Idempotency statistics
|
|
90
|
+
*/
|
|
91
|
+
export const IdempotencyStatsSchema = z.object({
|
|
92
|
+
/** Total cached entries */
|
|
93
|
+
totalEntries: z.number().int().min(0),
|
|
94
|
+
/** Entries by status */
|
|
95
|
+
byStatus: z.object({
|
|
96
|
+
processing: z.number().int().min(0),
|
|
97
|
+
completed: z.number().int().min(0),
|
|
98
|
+
failed: z.number().int().min(0),
|
|
99
|
+
}),
|
|
100
|
+
/** Cache hit rate (0-1) */
|
|
101
|
+
hitRate: z.number().min(0).max(1),
|
|
102
|
+
/** Total hits */
|
|
103
|
+
totalHits: z.number().int().min(0),
|
|
104
|
+
/** Total misses */
|
|
105
|
+
totalMisses: z.number().int().min(0),
|
|
106
|
+
/** Total conflicts */
|
|
107
|
+
totalConflicts: z.number().int().min(0),
|
|
108
|
+
/** Oldest entry timestamp */
|
|
109
|
+
oldestEntry: z.string().datetime().optional(),
|
|
110
|
+
});
|
|
111
|
+
/**
|
|
112
|
+
* Idempotency error codes
|
|
113
|
+
*/
|
|
114
|
+
export const IdempotencyErrorCodes = {
|
|
115
|
+
KEY_CONFLICT: 'IDEMPOTENCY_KEY_CONFLICT',
|
|
116
|
+
LOCK_TIMEOUT: 'IDEMPOTENCY_LOCK_TIMEOUT',
|
|
117
|
+
CACHE_FULL: 'IDEMPOTENCY_CACHE_FULL',
|
|
118
|
+
INVALID_KEY: 'IDEMPOTENCY_INVALID_KEY',
|
|
119
|
+
ENTRY_EXPIRED: 'IDEMPOTENCY_ENTRY_EXPIRED',
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Validates idempotency configuration
|
|
123
|
+
*/
|
|
124
|
+
export function validateIdempotencyConfig(data) {
|
|
125
|
+
return IdempotencyConfigSchema.parse(data);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Validates idempotency cache entry
|
|
129
|
+
*/
|
|
130
|
+
export function validateIdempotencyCacheEntry(data) {
|
|
131
|
+
return IdempotencyCacheEntrySchema.parse(data);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Creates default idempotency configuration
|
|
135
|
+
*/
|
|
136
|
+
export function createDefaultIdempotencyConfig() {
|
|
137
|
+
return IdempotencyConfigSchema.parse({});
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Generates request hash from request data
|
|
141
|
+
*/
|
|
142
|
+
export function generateRequestHash(method, path, body, headers) {
|
|
143
|
+
const data = JSON.stringify({
|
|
144
|
+
method,
|
|
145
|
+
path,
|
|
146
|
+
body,
|
|
147
|
+
headers,
|
|
148
|
+
});
|
|
149
|
+
// Simple hash - in production use crypto
|
|
150
|
+
let hash = 0;
|
|
151
|
+
for (let i = 0; i < data.length; i++) {
|
|
152
|
+
const char = data.charCodeAt(i);
|
|
153
|
+
hash = ((hash << 5) - hash) + char;
|
|
154
|
+
hash = hash & hash;
|
|
155
|
+
}
|
|
156
|
+
return Math.abs(hash).toString(16).padStart(8, '0');
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Calculates expiration timestamp
|
|
160
|
+
*/
|
|
161
|
+
export function calculateExpiration(ttlSeconds) {
|
|
162
|
+
return new Date(Date.now() + ttlSeconds * 1000).toISOString();
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Checks if entry is expired
|
|
166
|
+
*/
|
|
167
|
+
export function isEntryExpired(entry) {
|
|
168
|
+
return new Date(entry.expiresAt) < new Date();
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=idempotency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../../src/cross-cutting/v1/idempotency.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Cutting Contracts V1
|
|
3
|
+
*
|
|
4
|
+
* Contracts for cross-cutting concerns including:
|
|
5
|
+
* - Dead Letter Queue (DLQ)
|
|
6
|
+
* - Saga Pattern
|
|
7
|
+
* - Data Retention
|
|
8
|
+
* - Idempotency
|
|
9
|
+
*/
|
|
10
|
+
export { DeadLetterStatusSchema, DeadLetterErrorSchema, DeadLetterEntrySchema, DLQConfigSchema, DLQProcessResultSchema, DLQListOptionsSchema, DLQStatsSchema, DLQErrorCodes, validateDLQConfig, validateDeadLetterEntry, createDefaultDLQConfig, calculateRetryDelay, type DeadLetterStatus, type DeadLetterError, type DeadLetterEntry, type DLQConfig, type DLQProcessResult, type DLQListOptions, type DLQStats, type DLQErrorCode, } from './dead-letter.js';
|
|
11
|
+
export { CompensationActionTypeSchema, CompensationActionSchema, SagaFailureStrategySchema, CompensationOrderSchema, SagaDefinitionSchema, SagaStatusSchema, CompensationErrorSchema, SagaStateSchema, SagaResultSchema, SagaStepSchema, SagaContextSchema, SagaErrorCodes, SAGA_STATE_TRANSITIONS, validateSagaDefinition, validateSagaState, isValidSagaTransition, createInitialSagaState, type CompensationActionType, type CompensationAction, type SagaFailureStrategy, type CompensationOrder, type SagaDefinition, type SagaStatus, type CompensationError, type SagaState, type SagaResult, type SagaStep, type SagaContext, type SagaErrorCode, } from './saga.js';
|
|
12
|
+
export { RetentionDataTypeSchema, RetentionConditionsSchema, RetentionPolicySchema, RetentionRunResultSchema, RetentionSummarySchema, ArchiveEntrySchema, RetentionErrorCodes, validateRetentionPolicy, validateRetentionRunResult, createDefaultRetentionPolicy, calculateRetentionCutoff, type RetentionDataType, type RetentionConditions, type RetentionPolicy, type RetentionRunResult, type RetentionSummary, type ArchiveEntry, type RetentionErrorCode, } from './retention.js';
|
|
13
|
+
export { IdempotencyStatusSchema, CacheEntryStatusSchema, IdempotencyCacheEntrySchema, IdempotencyConfigSchema, IdempotencyCheckResultSchema, IdempotencyStatsSchema, IdempotencyErrorCodes, validateIdempotencyConfig, validateIdempotencyCacheEntry, createDefaultIdempotencyConfig, generateRequestHash, calculateExpiration, isEntryExpired, type IdempotencyStatus, type CacheEntryStatus, type IdempotencyCacheEntry, type IdempotencyConfig, type IdempotencyCheckResult, type IdempotencyStats, type IdempotencyErrorCode, } from './idempotency.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cross-cutting/v1/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,YAAY,GAClB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,kBAAkB,GACxB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,uBAAuB,EACvB,4BAA4B,EAC5B,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,6BAA6B,EAC7B,8BAA8B,EAC9B,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Cutting Contracts V1
|
|
3
|
+
*
|
|
4
|
+
* Contracts for cross-cutting concerns including:
|
|
5
|
+
* - Dead Letter Queue (DLQ)
|
|
6
|
+
* - Saga Pattern
|
|
7
|
+
* - Data Retention
|
|
8
|
+
* - Idempotency
|
|
9
|
+
*/
|
|
10
|
+
// Dead Letter Queue
|
|
11
|
+
export { DeadLetterStatusSchema, DeadLetterErrorSchema, DeadLetterEntrySchema, DLQConfigSchema, DLQProcessResultSchema, DLQListOptionsSchema, DLQStatsSchema, DLQErrorCodes, validateDLQConfig, validateDeadLetterEntry, createDefaultDLQConfig, calculateRetryDelay, } from './dead-letter.js';
|
|
12
|
+
// Saga Pattern
|
|
13
|
+
export { CompensationActionTypeSchema, CompensationActionSchema, SagaFailureStrategySchema, CompensationOrderSchema, SagaDefinitionSchema, SagaStatusSchema, CompensationErrorSchema, SagaStateSchema, SagaResultSchema, SagaStepSchema, SagaContextSchema, SagaErrorCodes, SAGA_STATE_TRANSITIONS, validateSagaDefinition, validateSagaState, isValidSagaTransition, createInitialSagaState, } from './saga.js';
|
|
14
|
+
// Data Retention
|
|
15
|
+
export { RetentionDataTypeSchema, RetentionConditionsSchema, RetentionPolicySchema, RetentionRunResultSchema, RetentionSummarySchema, ArchiveEntrySchema, RetentionErrorCodes, validateRetentionPolicy, validateRetentionRunResult, createDefaultRetentionPolicy, calculateRetentionCutoff, } from './retention.js';
|
|
16
|
+
// Idempotency
|
|
17
|
+
export { IdempotencyStatusSchema, CacheEntryStatusSchema, IdempotencyCacheEntrySchema, IdempotencyConfigSchema, IdempotencyCheckResultSchema, IdempotencyStatsSchema, IdempotencyErrorCodes, validateIdempotencyConfig, validateIdempotencyCacheEntry, createDefaultIdempotencyConfig, generateRequestHash, calculateExpiration, isEntryExpired, } from './idempotency.js';
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cross-cutting/v1/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,oBAAoB;AACpB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,GASpB,MAAM,kBAAkB,CAAC;AAE1B,eAAe;AACf,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,GAavB,MAAM,WAAW,CAAC;AAEnB,iBAAiB;AACjB,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,GAQzB,MAAM,gBAAgB,CAAC;AAExB,cAAc;AACd,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,EAC3B,uBAAuB,EACvB,4BAA4B,EAC5B,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,6BAA6B,EAC7B,8BAA8B,EAC9B,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,GAQf,MAAM,kBAAkB,CAAC"}
|