@noodleseed/one 0.46.0 → 0.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/auth-ops.d.ts.map +1 -1
- package/dist/commands/auth-ops.js +28 -4
- package/dist/commands/auth-ops.js.map +1 -1
- package/dist/commands/billing-enforcement-ops.d.ts +2 -0
- package/dist/commands/billing-enforcement-ops.d.ts.map +1 -0
- package/dist/commands/billing-enforcement-ops.js +312 -0
- package/dist/commands/billing-enforcement-ops.js.map +1 -0
- package/dist/commands/billing-metering-ops.d.ts +2 -0
- package/dist/commands/billing-metering-ops.d.ts.map +1 -0
- package/dist/commands/billing-metering-ops.js +128 -0
- package/dist/commands/billing-metering-ops.js.map +1 -0
- package/dist/commands/billing-metering-validation-ops.d.ts +2 -0
- package/dist/commands/billing-metering-validation-ops.d.ts.map +1 -0
- package/dist/commands/billing-metering-validation-ops.js +186 -0
- package/dist/commands/billing-metering-validation-ops.js.map +1 -0
- package/dist/commands/billing-ops.d.ts.map +1 -1
- package/dist/commands/billing-ops.js +6 -0
- package/dist/commands/billing-ops.js.map +1 -1
- package/dist/commands/catalog-data-resources.d.ts.map +1 -1
- package/dist/commands/catalog-data-resources.js +14 -3
- package/dist/commands/catalog-data-resources.js.map +1 -1
- package/dist/commands/catalog-render.d.ts.map +1 -1
- package/dist/commands/catalog-render.js +7 -5
- package/dist/commands/catalog-render.js.map +1 -1
- package/dist/commands/deploy-ops.d.ts.map +1 -1
- package/dist/commands/deploy-ops.js +10 -1
- package/dist/commands/deploy-ops.js.map +1 -1
- package/dist/commands/deploy-output.d.ts.map +1 -1
- package/dist/commands/deploy-output.js +4 -0
- package/dist/commands/deploy-output.js.map +1 -1
- package/dist/commands/deploy-version-resolution.d.ts +1 -0
- package/dist/commands/deploy-version-resolution.d.ts.map +1 -1
- package/dist/commands/deploy-version-resolution.js +8 -0
- package/dist/commands/deploy-version-resolution.js.map +1 -1
- package/dist/commands/mcp-apps-chatgpt.d.ts +7 -0
- package/dist/commands/mcp-apps-chatgpt.d.ts.map +1 -0
- package/dist/commands/mcp-apps-chatgpt.js +143 -0
- package/dist/commands/mcp-apps-chatgpt.js.map +1 -0
- package/dist/commands/mcp-apps.d.ts.map +1 -1
- package/dist/commands/mcp-apps.js +2 -114
- package/dist/commands/mcp-apps.js.map +1 -1
- package/dist/deploy-payload-size.d.ts +3 -0
- package/dist/deploy-payload-size.d.ts.map +1 -0
- package/dist/deploy-payload-size.js +29 -0
- package/dist/deploy-payload-size.js.map +1 -0
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +16 -8
- package/dist/deploy.js.map +1 -1
- package/dist/sdk-version-skew.d.ts +3 -0
- package/dist/sdk-version-skew.d.ts.map +1 -0
- package/dist/sdk-version-skew.js +34 -0
- package/dist/sdk-version-skew.js.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +2 -2
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js +2 -2
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/authoring/dist/server.d.ts +5 -0
- package/node_modules/@noodle-borg/authoring/dist/server.d.ts.map +1 -1
- package/node_modules/@noodle-borg/authoring/dist/server.js +1 -0
- package/node_modules/@noodle-borg/authoring/dist/server.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +7 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.js +4 -1
- package/node_modules/@noodle-borg/compiler/dist/artifact/types.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/compile.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/compile.js +3 -0
- package/node_modules/@noodle-borg/compiler/dist/compile.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +12 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +7 -0
- package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.js +18 -0
- package/node_modules/@noodle-borg/protocol/dist/sdk-server.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/tool-interaction.d.ts +3 -0
- package/node_modules/@noodle-borg/protocol/dist/tool-interaction.d.ts.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/tool-interaction.js +12 -3
- package/node_modules/@noodle-borg/protocol/dist/tool-interaction.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/enforcement-profile.d.ts +96 -0
- package/node_modules/@noodle-borg/service/dist/billing/enforcement-profile.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/enforcement-profile.js +198 -0
- package/node_modules/@noodle-borg/service/dist/billing/enforcement-profile.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/integration.d.ts +25 -2
- package/node_modules/@noodle-borg/service/dist/billing/integration.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/integration.js +51 -5
- package/node_modules/@noodle-borg/service/dist/billing/integration.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/meter-capacity.d.ts +77 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-capacity.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-capacity.js +202 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-capacity.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-live-validation-contract.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-live-validation-contract.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-live-validation-contract.js +93 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-live-validation-contract.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-live-validation.d.ts +76 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-live-validation.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-live-validation.js +233 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-live-validation.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-readiness-health.d.ts +89 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-readiness-health.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-readiness-health.js +191 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-readiness-health.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-readiness.d.ts +99 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-readiness.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-readiness.js +136 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-readiness.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-runtime-config.d.ts +9 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-runtime-config.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-runtime-config.js +24 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-runtime-config.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-validation-epoch.d.ts +75 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-validation-epoch.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-validation-epoch.js +127 -0
- package/node_modules/@noodle-borg/service/dist/billing/meter-validation-epoch.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-enforcement-profile-schema.d.ts +4 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-enforcement-profile-schema.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-enforcement-profile-schema.js +107 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-enforcement-profile-schema.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-enforcement-profile.d.ts +18 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-enforcement-profile.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-enforcement-profile.js +341 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-enforcement-profile.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-clock.d.ts +3 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-clock.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-clock.js +9 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-clock.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-epoch-fixtures.d.ts +13 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-epoch-fixtures.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-epoch-fixtures.js +102 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-epoch-fixtures.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-epochs.d.ts +41 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-epochs.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-epochs.js +289 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-epochs.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-evidence-retention.d.ts +16 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-evidence-retention.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-evidence-retention.js +126 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-evidence-retention.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-live-validation.d.ts +33 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-live-validation.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-live-validation.js +436 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-live-validation.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-maintenance.d.ts +26 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-maintenance.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-maintenance.js +146 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-maintenance.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-partition.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-partition.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-partition.js +42 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-partition.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-prepare-preflight.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-prepare-preflight.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-prepare-preflight.js +44 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-prepare-preflight.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-readiness-live.d.ts +13 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-readiness-live.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-readiness-live.js +189 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-readiness-live.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-readiness.d.ts +18 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-readiness.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-readiness.js +342 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-readiness.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-reconciliation.d.ts +27 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-reconciliation.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-reconciliation.js +304 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-reconciliation.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-retention.d.ts +22 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-retention.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-retention.js +224 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-retention.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-runtime.d.ts +33 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-runtime.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-runtime.js +173 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-runtime.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-scheduler-schema.d.ts +7 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-scheduler-schema.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-scheduler-schema.js +50 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-scheduler-schema.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-scheduler-store.d.ts +34 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-scheduler-store.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-scheduler-store.js +157 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-scheduler-store.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-scheduler.d.ts +56 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-scheduler.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-scheduler.js +264 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-scheduler.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-schema.d.ts +6 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-schema.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-schema.js +414 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-schema.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-validation.d.ts +43 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-validation.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-validation.js +321 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-validation.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-window-lock.d.ts +10 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-window-lock.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-window-lock.js +13 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-window-lock.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-window-schema.d.ts +6 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-window-schema.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-window-schema.js +248 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-window-schema.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-writer-compaction.d.ts +29 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-writer-compaction.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-writer-compaction.js +240 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-writer-compaction.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-writer-health-schema.d.ts +4 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-writer-health-schema.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-writer-health-schema.js +140 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-meter-writer-health-schema.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-migration.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/postgres-migration.js +4 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-migration.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/postgres-schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/postgres-schema.js +6 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres-schema.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/postgres.js +3 -0
- package/node_modules/@noodle-borg/service/dist/billing/postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/service-meter-runtime.d.ts +7 -0
- package/node_modules/@noodle-borg/service/dist/billing/service-meter-runtime.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/service-meter-runtime.js +19 -0
- package/node_modules/@noodle-borg/service/dist/billing/service-meter-runtime.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/shadow-meter.d.ts +9 -4
- package/node_modules/@noodle-borg/service/dist/billing/shadow-meter.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/shadow-meter.js +34 -95
- package/node_modules/@noodle-borg/service/dist/billing/shadow-meter.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/usage-identity.d.ts +14 -0
- package/node_modules/@noodle-borg/service/dist/billing/usage-identity.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/usage-identity.js +87 -0
- package/node_modules/@noodle-borg/service/dist/billing/usage-identity.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/usage-observer.d.ts +6 -0
- package/node_modules/@noodle-borg/service/dist/billing/usage-observer.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing/usage-observer.js +26 -0
- package/node_modules/@noodle-borg/service/dist/billing/usage-observer.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing-public.d.ts +16 -0
- package/node_modules/@noodle-borg/service/dist/billing-public.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/billing-public.js +15 -0
- package/node_modules/@noodle-borg/service/dist/billing-public.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/customer-verifier.d.ts +1 -0
- package/node_modules/@noodle-borg/service/dist/customer-verifier.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/customer-verifier.js +15 -0
- package/node_modules/@noodle-borg/service/dist/customer-verifier.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/http-util.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/http-util.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/http-util.js +1 -1
- package/node_modules/@noodle-borg/service/dist/http-util.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts +2 -7
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js +1 -6
- package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/main.js +3 -0
- package/node_modules/@noodle-borg/service/dist/main.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/options.d.ts +18 -0
- package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/persistence-options.d.ts +4 -0
- package/node_modules/@noodle-borg/service/dist/persistence-options.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/persistence-options.js +22 -0
- package/node_modules/@noodle-borg/service/dist/persistence-options.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/billing-enforcement-cohort.d.ts +17 -0
- package/node_modules/@noodle-borg/service/dist/routes/billing-enforcement-cohort.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/billing-enforcement-cohort.js +145 -0
- package/node_modules/@noodle-borg/service/dist/routes/billing-enforcement-cohort.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/billing-meter-readiness.d.ts +15 -0
- package/node_modules/@noodle-borg/service/dist/routes/billing-meter-readiness.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/billing-meter-readiness.js +78 -0
- package/node_modules/@noodle-borg/service/dist/routes/billing-meter-readiness.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/billing-meter-validation.d.ts +15 -0
- package/node_modules/@noodle-borg/service/dist/routes/billing-meter-validation.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/billing-meter-validation.js +108 -0
- package/node_modules/@noodle-borg/service/dist/routes/billing-meter-validation.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/commercial-dispatch.d.ts +6 -0
- package/node_modules/@noodle-borg/service/dist/routes/commercial-dispatch.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/commercial-dispatch.js +99 -0
- package/node_modules/@noodle-borg/service/dist/routes/commercial-dispatch.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/commercial-service-deps.d.ts +25 -0
- package/node_modules/@noodle-borg/service/dist/routes/commercial-service-deps.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/commercial-service-deps.js +35 -0
- package/node_modules/@noodle-borg/service/dist/routes/commercial-service-deps.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +3 -1
- package/node_modules/@noodle-borg/service/dist/routes/control-plane.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve-options.d.ts +93 -0
- package/node_modules/@noodle-borg/service/dist/serve-options.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/serve-options.js +2 -0
- package/node_modules/@noodle-borg/service/dist/serve-options.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/serve.d.ts +2 -92
- package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.js +64 -59
- package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service-resource-cleanup.d.ts +22 -0
- package/node_modules/@noodle-borg/service/dist/service-resource-cleanup.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/service-resource-cleanup.js +51 -0
- package/node_modules/@noodle-borg/service/dist/service-resource-cleanup.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.js +10 -21
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/cloudsql-pool.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/cloudsql-pool.js +7 -1
- package/node_modules/@noodle-borg/service/dist/store/cloudsql-pool.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-billing.d.ts +6 -2
- package/node_modules/@noodle-borg/service/dist/store/postgres-billing.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-billing.js +11 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-billing.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
import { BILLING_METER_AGGREGATE_RETENTION_MONTHS, BILLING_METER_EXACT_KEY_TOMBSTONE_RETENTION_DAYS, BILLING_METER_PARTITION_HORIZON_MONTHS, BILLING_METER_READINESS_SCHEMA_VERSION, BILLING_METER_RECEIPT_RETENTION_DAYS, } from './meter-readiness.js';
|
|
2
|
+
import { readBillingMeterTransactionTime } from './postgres-meter-clock.js';
|
|
3
|
+
import { ensureBillingMeterReceiptIntegritySchema, ensureBillingMeterWindowRegistrySchema, } from './postgres-meter-window-schema.js';
|
|
4
|
+
/** Additive, inactive storage for validation and readiness evidence. Never activates a meter epoch. */
|
|
5
|
+
export async function ensureAuthoritativeMeterSchema(pool) {
|
|
6
|
+
await pool.query(`
|
|
7
|
+
CREATE OR REPLACE FUNCTION billing_meter_transaction_time() RETURNS timestamptz AS $$
|
|
8
|
+
SELECT pg_catalog.transaction_timestamp()
|
|
9
|
+
$$ LANGUAGE sql STABLE PARALLEL SAFE
|
|
10
|
+
`);
|
|
11
|
+
await pool.query(`
|
|
12
|
+
CREATE TABLE IF NOT EXISTS billing_meter_retention_policy (
|
|
13
|
+
singleton boolean PRIMARY KEY DEFAULT true CHECK (singleton),
|
|
14
|
+
schema_version integer NOT NULL CHECK (schema_version = 1),
|
|
15
|
+
receipt_retention_days integer NOT NULL CHECK (receipt_retention_days > 0),
|
|
16
|
+
tombstone_retention_days integer NOT NULL CHECK (tombstone_retention_days > 0),
|
|
17
|
+
aggregate_retention_months integer NOT NULL CHECK (aggregate_retention_months > 0)
|
|
18
|
+
)
|
|
19
|
+
`);
|
|
20
|
+
await pool.query(`INSERT INTO billing_meter_retention_policy
|
|
21
|
+
(singleton, schema_version, receipt_retention_days, tombstone_retention_days,
|
|
22
|
+
aggregate_retention_months)
|
|
23
|
+
VALUES (true, $1, $2, $3, $4)
|
|
24
|
+
ON CONFLICT (singleton) DO NOTHING`, [
|
|
25
|
+
BILLING_METER_READINESS_SCHEMA_VERSION,
|
|
26
|
+
BILLING_METER_RECEIPT_RETENTION_DAYS,
|
|
27
|
+
BILLING_METER_EXACT_KEY_TOMBSTONE_RETENTION_DAYS,
|
|
28
|
+
BILLING_METER_AGGREGATE_RETENTION_MONTHS,
|
|
29
|
+
]);
|
|
30
|
+
await pool.query(`
|
|
31
|
+
CREATE TABLE IF NOT EXISTS billing_meter_epochs (
|
|
32
|
+
id text PRIMARY KEY,
|
|
33
|
+
schema_version integer NOT NULL CHECK (schema_version = 1),
|
|
34
|
+
state text NOT NULL CHECK (state IN ('prepared', 'active', 'retired')),
|
|
35
|
+
key_generation text NOT NULL,
|
|
36
|
+
release_sha text NOT NULL CHECK (release_sha ~ '^[0-9a-f]{40}$'),
|
|
37
|
+
retry_identity_version integer NOT NULL CHECK (retry_identity_version > 0),
|
|
38
|
+
writer_contract_version integer NOT NULL DEFAULT 1 CHECK (writer_contract_version > 0),
|
|
39
|
+
prepared_at timestamptz NOT NULL,
|
|
40
|
+
reconciliation_failed_at timestamptz,
|
|
41
|
+
activated_at timestamptz,
|
|
42
|
+
retired_at timestamptz,
|
|
43
|
+
CHECK (
|
|
44
|
+
(state = 'prepared' AND activated_at IS NULL AND retired_at IS NULL) OR
|
|
45
|
+
(state = 'active' AND activated_at IS NOT NULL AND retired_at IS NULL) OR
|
|
46
|
+
(state = 'retired' AND retired_at IS NOT NULL)
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
|
+
`);
|
|
50
|
+
await pool.query(`
|
|
51
|
+
ALTER TABLE billing_meter_epochs
|
|
52
|
+
ADD COLUMN IF NOT EXISTS writer_contract_version integer NOT NULL DEFAULT 1,
|
|
53
|
+
ADD COLUMN IF NOT EXISTS reconciliation_failed_at timestamptz
|
|
54
|
+
`);
|
|
55
|
+
await pool.query(`
|
|
56
|
+
CREATE UNIQUE INDEX IF NOT EXISTS billing_meter_epochs_one_active_idx
|
|
57
|
+
ON billing_meter_epochs ((state))
|
|
58
|
+
WHERE state = 'active'
|
|
59
|
+
`);
|
|
60
|
+
await pool.query(`
|
|
61
|
+
CREATE UNIQUE INDEX IF NOT EXISTS billing_meter_epochs_one_prepared_idx
|
|
62
|
+
ON billing_meter_epochs ((state))
|
|
63
|
+
WHERE state = 'prepared'
|
|
64
|
+
`);
|
|
65
|
+
await ensureBillingMeterWindowRegistrySchema(pool);
|
|
66
|
+
await pool.query(`
|
|
67
|
+
CREATE TABLE IF NOT EXISTS billing_meter_epoch_operations (
|
|
68
|
+
operation_id text PRIMARY KEY,
|
|
69
|
+
action text NOT NULL
|
|
70
|
+
CHECK (action IN ('validation_prepare', 'validation_retire')),
|
|
71
|
+
idempotency_key_hash text NOT NULL UNIQUE
|
|
72
|
+
CHECK (idempotency_key_hash ~ '^[0-9a-f]{64}$'),
|
|
73
|
+
request_fingerprint text NOT NULL
|
|
74
|
+
CHECK (request_fingerprint ~ '^[0-9a-f]{64}$'),
|
|
75
|
+
epoch_id text NOT NULL REFERENCES billing_meter_epochs(id) ON DELETE RESTRICT,
|
|
76
|
+
result jsonb NOT NULL,
|
|
77
|
+
actor_subject text NOT NULL,
|
|
78
|
+
actor_email text NOT NULL,
|
|
79
|
+
service_origin text NOT NULL,
|
|
80
|
+
reason text NOT NULL,
|
|
81
|
+
created_at timestamptz NOT NULL,
|
|
82
|
+
UNIQUE (action, epoch_id)
|
|
83
|
+
)
|
|
84
|
+
`);
|
|
85
|
+
await pool.query(`
|
|
86
|
+
CREATE TABLE IF NOT EXISTS billing_meter_usage_events (
|
|
87
|
+
event_id text NOT NULL,
|
|
88
|
+
epoch_id text NOT NULL REFERENCES billing_meter_epochs(id) ON DELETE RESTRICT,
|
|
89
|
+
mode text NOT NULL CHECK (mode = 'validation'),
|
|
90
|
+
high_confidence_key_hash bytea,
|
|
91
|
+
fallback_fingerprint bytea NOT NULL,
|
|
92
|
+
semantic_fingerprint bytea NOT NULL,
|
|
93
|
+
classification text NOT NULL CHECK (classification IN ('included', 'overage', 'denied')),
|
|
94
|
+
billing_account_id text NOT NULL REFERENCES billing_accounts(id) ON DELETE RESTRICT,
|
|
95
|
+
org_slug text NOT NULL,
|
|
96
|
+
app_slug text NOT NULL,
|
|
97
|
+
environment text NOT NULL,
|
|
98
|
+
deployment_id text NOT NULL,
|
|
99
|
+
link_version integer NOT NULL CHECK (link_version > 0),
|
|
100
|
+
snapshot_id text NOT NULL,
|
|
101
|
+
snapshot_version integer NOT NULL CHECK (snapshot_version > 0),
|
|
102
|
+
admitted_at timestamptz NOT NULL,
|
|
103
|
+
window_start timestamptz NOT NULL,
|
|
104
|
+
window_end timestamptz NOT NULL CHECK (window_end > window_start),
|
|
105
|
+
recorded_at timestamptz NOT NULL,
|
|
106
|
+
retention_until timestamptz NOT NULL,
|
|
107
|
+
PRIMARY KEY (recorded_at, event_id),
|
|
108
|
+
CHECK (high_confidence_key_hash IS NULL OR octet_length(high_confidence_key_hash) = 32),
|
|
109
|
+
CHECK (octet_length(fallback_fingerprint) = 32),
|
|
110
|
+
CHECK (octet_length(semantic_fingerprint) = 32),
|
|
111
|
+
CHECK (retention_until = window_end + interval '${BILLING_METER_RECEIPT_RETENTION_DAYS} days'),
|
|
112
|
+
CONSTRAINT billing_meter_usage_events_window_fkey
|
|
113
|
+
FOREIGN KEY (epoch_id, window_start, window_end)
|
|
114
|
+
REFERENCES billing_meter_windows(epoch_id, window_start, window_end) ON DELETE RESTRICT,
|
|
115
|
+
FOREIGN KEY (billing_account_id, snapshot_id)
|
|
116
|
+
REFERENCES billing_entitlement_snapshots(billing_account_id, id) ON DELETE RESTRICT
|
|
117
|
+
) PARTITION BY RANGE (recorded_at)
|
|
118
|
+
`);
|
|
119
|
+
await ensureBillingMeterReceiptIntegritySchema(pool);
|
|
120
|
+
await pool.query(`
|
|
121
|
+
CREATE INDEX IF NOT EXISTS billing_meter_usage_events_fallback_idx
|
|
122
|
+
ON billing_meter_usage_events
|
|
123
|
+
(epoch_id, fallback_fingerprint, semantic_fingerprint, recorded_at DESC)
|
|
124
|
+
`);
|
|
125
|
+
await pool.query(`
|
|
126
|
+
DROP INDEX IF EXISTS billing_meter_usage_events_reconcile_idx
|
|
127
|
+
`);
|
|
128
|
+
await pool.query(`
|
|
129
|
+
CREATE INDEX IF NOT EXISTS billing_meter_usage_events_window_fkey_idx
|
|
130
|
+
ON billing_meter_usage_events (epoch_id, window_start, window_end)
|
|
131
|
+
`);
|
|
132
|
+
await pool.query(`
|
|
133
|
+
CREATE INDEX IF NOT EXISTS billing_meter_usage_events_retention_idx
|
|
134
|
+
ON billing_meter_usage_events (retention_until)
|
|
135
|
+
`);
|
|
136
|
+
await pool.query(`
|
|
137
|
+
CREATE TABLE IF NOT EXISTS billing_meter_exact_key_tombstones (
|
|
138
|
+
epoch_id text NOT NULL REFERENCES billing_meter_epochs(id) ON DELETE RESTRICT,
|
|
139
|
+
key_hash bytea NOT NULL CHECK (octet_length(key_hash) = 32),
|
|
140
|
+
semantic_fingerprint bytea NOT NULL CHECK (octet_length(semantic_fingerprint) = 32),
|
|
141
|
+
event_id text NOT NULL,
|
|
142
|
+
classification text NOT NULL CHECK (classification IN ('included', 'overage', 'denied')),
|
|
143
|
+
window_end timestamptz NOT NULL,
|
|
144
|
+
created_at timestamptz NOT NULL,
|
|
145
|
+
retention_until timestamptz NOT NULL,
|
|
146
|
+
PRIMARY KEY (epoch_id, key_hash),
|
|
147
|
+
CHECK (
|
|
148
|
+
retention_until =
|
|
149
|
+
window_end + interval '${BILLING_METER_EXACT_KEY_TOMBSTONE_RETENTION_DAYS} days'
|
|
150
|
+
)
|
|
151
|
+
)
|
|
152
|
+
`);
|
|
153
|
+
await pool.query(`
|
|
154
|
+
CREATE INDEX IF NOT EXISTS billing_meter_exact_key_tombstones_retention_idx
|
|
155
|
+
ON billing_meter_exact_key_tombstones (retention_until)
|
|
156
|
+
`);
|
|
157
|
+
await pool.query(`
|
|
158
|
+
CREATE TABLE IF NOT EXISTS billing_meter_account_windows (
|
|
159
|
+
epoch_id text NOT NULL REFERENCES billing_meter_epochs(id) ON DELETE RESTRICT,
|
|
160
|
+
billing_account_id text NOT NULL REFERENCES billing_accounts(id) ON DELETE RESTRICT,
|
|
161
|
+
window_start timestamptz NOT NULL,
|
|
162
|
+
window_end timestamptz NOT NULL CHECK (window_end > window_start),
|
|
163
|
+
included_calls bigint NOT NULL CHECK (included_calls >= 0),
|
|
164
|
+
overage_calls bigint NOT NULL CHECK (overage_calls >= 0),
|
|
165
|
+
denied_calls bigint NOT NULL CHECK (denied_calls >= 0),
|
|
166
|
+
first_admitted_at timestamptz NOT NULL,
|
|
167
|
+
last_admitted_at timestamptz NOT NULL,
|
|
168
|
+
updated_at timestamptz NOT NULL,
|
|
169
|
+
retention_until timestamptz NOT NULL,
|
|
170
|
+
PRIMARY KEY (epoch_id, billing_account_id, window_start),
|
|
171
|
+
FOREIGN KEY (epoch_id, window_start, window_end)
|
|
172
|
+
REFERENCES billing_meter_windows(epoch_id, window_start, window_end) ON DELETE RESTRICT,
|
|
173
|
+
CHECK (
|
|
174
|
+
retention_until =
|
|
175
|
+
window_end + interval '${BILLING_METER_AGGREGATE_RETENTION_MONTHS} months'
|
|
176
|
+
)
|
|
177
|
+
)
|
|
178
|
+
`);
|
|
179
|
+
await pool.query(`
|
|
180
|
+
CREATE INDEX IF NOT EXISTS billing_meter_account_windows_retention_idx
|
|
181
|
+
ON billing_meter_account_windows (retention_until)
|
|
182
|
+
`);
|
|
183
|
+
await pool.query(`
|
|
184
|
+
CREATE INDEX IF NOT EXISTS billing_meter_account_windows_reconcile_idx
|
|
185
|
+
ON billing_meter_account_windows (epoch_id, window_start, window_end)
|
|
186
|
+
INCLUDE (billing_account_id, included_calls, overage_calls, denied_calls)
|
|
187
|
+
`);
|
|
188
|
+
await pool.query(`
|
|
189
|
+
CREATE TABLE IF NOT EXISTS billing_meter_org_windows (
|
|
190
|
+
epoch_id text NOT NULL REFERENCES billing_meter_epochs(id) ON DELETE RESTRICT,
|
|
191
|
+
billing_account_id text NOT NULL REFERENCES billing_accounts(id) ON DELETE RESTRICT,
|
|
192
|
+
org_slug text NOT NULL,
|
|
193
|
+
window_start timestamptz NOT NULL,
|
|
194
|
+
window_end timestamptz NOT NULL CHECK (window_end > window_start),
|
|
195
|
+
included_calls bigint NOT NULL CHECK (included_calls >= 0),
|
|
196
|
+
overage_calls bigint NOT NULL CHECK (overage_calls >= 0),
|
|
197
|
+
denied_calls bigint NOT NULL CHECK (denied_calls >= 0),
|
|
198
|
+
first_admitted_at timestamptz NOT NULL,
|
|
199
|
+
last_admitted_at timestamptz NOT NULL,
|
|
200
|
+
updated_at timestamptz NOT NULL,
|
|
201
|
+
retention_until timestamptz NOT NULL,
|
|
202
|
+
PRIMARY KEY (epoch_id, billing_account_id, org_slug, window_start),
|
|
203
|
+
FOREIGN KEY (epoch_id, window_start, window_end)
|
|
204
|
+
REFERENCES billing_meter_windows(epoch_id, window_start, window_end) ON DELETE RESTRICT,
|
|
205
|
+
CHECK (
|
|
206
|
+
retention_until =
|
|
207
|
+
window_end + interval '${BILLING_METER_AGGREGATE_RETENTION_MONTHS} months'
|
|
208
|
+
)
|
|
209
|
+
)
|
|
210
|
+
`);
|
|
211
|
+
await pool.query(`
|
|
212
|
+
CREATE INDEX IF NOT EXISTS billing_meter_org_windows_retention_idx
|
|
213
|
+
ON billing_meter_org_windows (retention_until)
|
|
214
|
+
`);
|
|
215
|
+
await pool.query(`
|
|
216
|
+
CREATE INDEX IF NOT EXISTS billing_meter_org_windows_reconcile_idx
|
|
217
|
+
ON billing_meter_org_windows (epoch_id, window_start, window_end)
|
|
218
|
+
INCLUDE (billing_account_id, org_slug, included_calls, overage_calls, denied_calls)
|
|
219
|
+
`);
|
|
220
|
+
await pool.query(`
|
|
221
|
+
CREATE TABLE IF NOT EXISTS billing_meter_maintenance_runs (
|
|
222
|
+
run_id text PRIMARY KEY,
|
|
223
|
+
status text NOT NULL CHECK (status IN ('running', 'succeeded', 'failed')),
|
|
224
|
+
started_at timestamptz NOT NULL,
|
|
225
|
+
completed_at timestamptz,
|
|
226
|
+
partition_horizon timestamptz,
|
|
227
|
+
receipt_partitions_dropped bigint NOT NULL DEFAULT 0
|
|
228
|
+
CHECK (receipt_partitions_dropped >= 0),
|
|
229
|
+
receipts_deleted bigint NOT NULL DEFAULT 0 CHECK (receipts_deleted >= 0),
|
|
230
|
+
tombstones_deleted bigint NOT NULL DEFAULT 0 CHECK (tombstones_deleted >= 0),
|
|
231
|
+
account_windows_deleted bigint NOT NULL DEFAULT 0 CHECK (account_windows_deleted >= 0),
|
|
232
|
+
org_windows_deleted bigint NOT NULL DEFAULT 0 CHECK (org_windows_deleted >= 0),
|
|
233
|
+
meter_windows_deleted bigint NOT NULL DEFAULT 0 CHECK (meter_windows_deleted >= 0),
|
|
234
|
+
reconciliation_runs_deleted bigint NOT NULL DEFAULT 0
|
|
235
|
+
CHECK (reconciliation_runs_deleted >= 0),
|
|
236
|
+
scheduler_runs_deleted bigint NOT NULL DEFAULT 0 CHECK (scheduler_runs_deleted >= 0),
|
|
237
|
+
maintenance_runs_deleted bigint NOT NULL DEFAULT 0
|
|
238
|
+
CHECK (maintenance_runs_deleted >= 0),
|
|
239
|
+
writer_sessions_compacted bigint NOT NULL DEFAULT 0 CHECK (writer_sessions_compacted >= 0),
|
|
240
|
+
writer_baselines_folded bigint NOT NULL DEFAULT 0 CHECK (writer_baselines_folded >= 0),
|
|
241
|
+
writer_clean_sessions_compacted bigint NOT NULL DEFAULT 0
|
|
242
|
+
CHECK (writer_clean_sessions_compacted >= 0),
|
|
243
|
+
writer_unclean_sessions_compacted bigint NOT NULL DEFAULT 0
|
|
244
|
+
CHECK (writer_unclean_sessions_compacted >= 0),
|
|
245
|
+
CHECK (
|
|
246
|
+
(status = 'running' AND completed_at IS NULL) OR
|
|
247
|
+
(status IN ('succeeded', 'failed') AND completed_at IS NOT NULL)
|
|
248
|
+
)
|
|
249
|
+
)
|
|
250
|
+
`);
|
|
251
|
+
await pool.query(`
|
|
252
|
+
ALTER TABLE billing_meter_maintenance_runs
|
|
253
|
+
ADD COLUMN IF NOT EXISTS reconciliation_runs_deleted bigint NOT NULL DEFAULT 0
|
|
254
|
+
CHECK (reconciliation_runs_deleted >= 0),
|
|
255
|
+
ADD COLUMN IF NOT EXISTS meter_windows_deleted bigint NOT NULL DEFAULT 0
|
|
256
|
+
CHECK (meter_windows_deleted >= 0),
|
|
257
|
+
ADD COLUMN IF NOT EXISTS scheduler_runs_deleted bigint NOT NULL DEFAULT 0
|
|
258
|
+
CHECK (scheduler_runs_deleted >= 0),
|
|
259
|
+
ADD COLUMN IF NOT EXISTS maintenance_runs_deleted bigint NOT NULL DEFAULT 0
|
|
260
|
+
CHECK (maintenance_runs_deleted >= 0),
|
|
261
|
+
ADD COLUMN IF NOT EXISTS writer_sessions_compacted bigint NOT NULL DEFAULT 0
|
|
262
|
+
CHECK (writer_sessions_compacted >= 0),
|
|
263
|
+
ADD COLUMN IF NOT EXISTS writer_baselines_folded bigint NOT NULL DEFAULT 0
|
|
264
|
+
CHECK (writer_baselines_folded >= 0),
|
|
265
|
+
ADD COLUMN IF NOT EXISTS writer_clean_sessions_compacted bigint NOT NULL DEFAULT 0
|
|
266
|
+
CHECK (writer_clean_sessions_compacted >= 0),
|
|
267
|
+
ADD COLUMN IF NOT EXISTS writer_unclean_sessions_compacted bigint NOT NULL DEFAULT 0
|
|
268
|
+
CHECK (writer_unclean_sessions_compacted >= 0)
|
|
269
|
+
`);
|
|
270
|
+
await pool.query(`
|
|
271
|
+
CREATE INDEX IF NOT EXISTS billing_meter_maintenance_runs_completed_idx
|
|
272
|
+
ON billing_meter_maintenance_runs (completed_at DESC)
|
|
273
|
+
WHERE status = 'succeeded'
|
|
274
|
+
`);
|
|
275
|
+
await pool.query(`
|
|
276
|
+
CREATE TABLE IF NOT EXISTS billing_meter_reconciliation_runs (
|
|
277
|
+
run_id text PRIMARY KEY,
|
|
278
|
+
epoch_id text NOT NULL REFERENCES billing_meter_epochs(id) ON DELETE RESTRICT,
|
|
279
|
+
window_start timestamptz NOT NULL,
|
|
280
|
+
window_end timestamptz NOT NULL CHECK (window_end > window_start),
|
|
281
|
+
status text NOT NULL CHECK (status IN ('succeeded', 'failed')),
|
|
282
|
+
sealed boolean NOT NULL,
|
|
283
|
+
seal_basis text CHECK (seal_basis IN ('window_end', 'epoch_retired')),
|
|
284
|
+
epoch_retired_at timestamptz,
|
|
285
|
+
receipt_included_calls bigint NOT NULL CHECK (receipt_included_calls >= 0),
|
|
286
|
+
receipt_overage_calls bigint NOT NULL CHECK (receipt_overage_calls >= 0),
|
|
287
|
+
receipt_denied_calls bigint NOT NULL CHECK (receipt_denied_calls >= 0),
|
|
288
|
+
account_included_calls bigint NOT NULL CHECK (account_included_calls >= 0),
|
|
289
|
+
account_overage_calls bigint NOT NULL CHECK (account_overage_calls >= 0),
|
|
290
|
+
account_denied_calls bigint NOT NULL CHECK (account_denied_calls >= 0),
|
|
291
|
+
org_included_calls bigint NOT NULL CHECK (org_included_calls >= 0),
|
|
292
|
+
org_overage_calls bigint NOT NULL CHECK (org_overage_calls >= 0),
|
|
293
|
+
org_denied_calls bigint NOT NULL CHECK (org_denied_calls >= 0),
|
|
294
|
+
account_integrity_mismatch boolean NOT NULL,
|
|
295
|
+
org_integrity_mismatch boolean NOT NULL,
|
|
296
|
+
checked_at timestamptz NOT NULL,
|
|
297
|
+
next_reconcile_at timestamptz,
|
|
298
|
+
CHECK (
|
|
299
|
+
(
|
|
300
|
+
NOT sealed AND seal_basis IS NULL AND epoch_retired_at IS NULL
|
|
301
|
+
) OR (
|
|
302
|
+
sealed AND status = 'succeeded' AND (
|
|
303
|
+
(
|
|
304
|
+
seal_basis = 'window_end' AND epoch_retired_at IS NULL AND
|
|
305
|
+
checked_at >= window_end
|
|
306
|
+
) OR (
|
|
307
|
+
seal_basis = 'epoch_retired' AND epoch_retired_at IS NOT NULL AND
|
|
308
|
+
checked_at >= epoch_retired_at
|
|
309
|
+
)
|
|
310
|
+
)
|
|
311
|
+
)
|
|
312
|
+
),
|
|
313
|
+
CHECK (
|
|
314
|
+
status = 'failed' OR
|
|
315
|
+
(
|
|
316
|
+
receipt_included_calls = account_included_calls AND
|
|
317
|
+
receipt_included_calls = org_included_calls AND
|
|
318
|
+
receipt_overage_calls = account_overage_calls AND
|
|
319
|
+
receipt_overage_calls = org_overage_calls AND
|
|
320
|
+
receipt_denied_calls = account_denied_calls AND
|
|
321
|
+
receipt_denied_calls = org_denied_calls AND
|
|
322
|
+
NOT account_integrity_mismatch AND
|
|
323
|
+
NOT org_integrity_mismatch
|
|
324
|
+
)
|
|
325
|
+
)
|
|
326
|
+
)
|
|
327
|
+
`);
|
|
328
|
+
await pool.query(`
|
|
329
|
+
ALTER TABLE billing_meter_reconciliation_runs
|
|
330
|
+
ADD COLUMN IF NOT EXISTS next_reconcile_at timestamptz
|
|
331
|
+
`);
|
|
332
|
+
await pool.query(`
|
|
333
|
+
CREATE INDEX IF NOT EXISTS billing_meter_reconciliation_runs_latest_idx
|
|
334
|
+
ON billing_meter_reconciliation_runs (epoch_id, checked_at DESC)
|
|
335
|
+
`);
|
|
336
|
+
await pool.query(`
|
|
337
|
+
CREATE INDEX IF NOT EXISTS billing_meter_reconciliation_runs_due_idx
|
|
338
|
+
ON billing_meter_reconciliation_runs
|
|
339
|
+
(epoch_id, window_start, window_end, checked_at DESC, run_id DESC)
|
|
340
|
+
INCLUDE (status, sealed, next_reconcile_at)
|
|
341
|
+
`);
|
|
342
|
+
await pool.query(`
|
|
343
|
+
CREATE INDEX IF NOT EXISTS billing_meter_reconciliation_runs_compaction_idx
|
|
344
|
+
ON billing_meter_reconciliation_runs
|
|
345
|
+
(epoch_id, window_start, window_end, sealed DESC, checked_at DESC, run_id DESC)
|
|
346
|
+
`);
|
|
347
|
+
await pool.query(`
|
|
348
|
+
CREATE INDEX IF NOT EXISTS billing_meter_reconciliation_runs_failed_compaction_idx
|
|
349
|
+
ON billing_meter_reconciliation_runs
|
|
350
|
+
(epoch_id, window_start, window_end, checked_at DESC, run_id DESC)
|
|
351
|
+
WHERE status = 'failed'
|
|
352
|
+
`);
|
|
353
|
+
await pool.query(`
|
|
354
|
+
CREATE UNIQUE INDEX IF NOT EXISTS billing_meter_reconciliation_runs_one_sealed_idx
|
|
355
|
+
ON billing_meter_reconciliation_runs (epoch_id, window_start, window_end)
|
|
356
|
+
WHERE sealed
|
|
357
|
+
`);
|
|
358
|
+
await pool.query(`
|
|
359
|
+
CREATE OR REPLACE FUNCTION billing_meter_mark_reconciliation_failure()
|
|
360
|
+
RETURNS trigger AS $$
|
|
361
|
+
BEGIN
|
|
362
|
+
UPDATE billing_meter_epochs
|
|
363
|
+
SET reconciliation_failed_at = least(
|
|
364
|
+
coalesce(reconciliation_failed_at, NEW.checked_at),
|
|
365
|
+
NEW.checked_at
|
|
366
|
+
)
|
|
367
|
+
WHERE id = NEW.epoch_id;
|
|
368
|
+
RETURN NEW;
|
|
369
|
+
END
|
|
370
|
+
$$ LANGUAGE plpgsql
|
|
371
|
+
`);
|
|
372
|
+
await pool.query(`
|
|
373
|
+
CREATE OR REPLACE TRIGGER billing_meter_mark_reconciliation_failure
|
|
374
|
+
AFTER INSERT ON billing_meter_reconciliation_runs
|
|
375
|
+
FOR EACH ROW
|
|
376
|
+
WHEN (NEW.status = 'failed')
|
|
377
|
+
EXECUTE FUNCTION billing_meter_mark_reconciliation_failure()
|
|
378
|
+
`);
|
|
379
|
+
await pool.query(`
|
|
380
|
+
UPDATE billing_meter_epochs AS epoch
|
|
381
|
+
SET reconciliation_failed_at = historical.failed_at
|
|
382
|
+
FROM (
|
|
383
|
+
SELECT epoch_id, min(checked_at) AS failed_at
|
|
384
|
+
FROM billing_meter_reconciliation_runs
|
|
385
|
+
WHERE status = 'failed'
|
|
386
|
+
GROUP BY epoch_id
|
|
387
|
+
) AS historical
|
|
388
|
+
WHERE epoch.id = historical.epoch_id
|
|
389
|
+
AND (
|
|
390
|
+
epoch.reconciliation_failed_at IS NULL OR
|
|
391
|
+
epoch.reconciliation_failed_at > historical.failed_at
|
|
392
|
+
)
|
|
393
|
+
`);
|
|
394
|
+
await ensureAuthoritativeMeterPartitions(pool);
|
|
395
|
+
}
|
|
396
|
+
export async function ensureAuthoritativeMeterPartitions(pool) {
|
|
397
|
+
const at = new Date(await readBillingMeterTransactionTime(pool));
|
|
398
|
+
for (let offset = 0; offset <= BILLING_METER_PARTITION_HORIZON_MONTHS; offset += 1) {
|
|
399
|
+
const start = new Date(Date.UTC(at.getUTCFullYear(), at.getUTCMonth() + offset, 1));
|
|
400
|
+
const end = new Date(Date.UTC(at.getUTCFullYear(), at.getUTCMonth() + offset + 1, 1));
|
|
401
|
+
const partition = billingMeterPartitionName(start);
|
|
402
|
+
await pool.query(`CREATE TABLE IF NOT EXISTS ${partition}
|
|
403
|
+
PARTITION OF billing_meter_usage_events
|
|
404
|
+
FOR VALUES FROM ('${start.toISOString()}') TO ('${end.toISOString()}')`);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
export function billingMeterPartitionName(month) {
|
|
408
|
+
if (!Number.isFinite(month.getTime()))
|
|
409
|
+
throw new Error('billing meter partition date is invalid');
|
|
410
|
+
const year = month.getUTCFullYear().toString().padStart(4, '0');
|
|
411
|
+
const ordinal = (month.getUTCMonth() + 1).toString().padStart(2, '0');
|
|
412
|
+
return `billing_meter_usage_events_y${year}m${ordinal}`;
|
|
413
|
+
}
|
|
414
|
+
//# sourceMappingURL=postgres-meter-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-meter-schema.js","sourceRoot":"","sources":["../../src/billing/postgres-meter-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Pool, PoolClient } from 'pg';
|
|
2
|
+
export type BillingMeterValidationClassification = 'included' | 'overage' | 'denied';
|
|
3
|
+
export interface BillingMeterValidationRecordInput {
|
|
4
|
+
readonly epochId: string;
|
|
5
|
+
readonly classification: BillingMeterValidationClassification;
|
|
6
|
+
readonly org: string;
|
|
7
|
+
readonly app: string;
|
|
8
|
+
readonly environment: string;
|
|
9
|
+
readonly deploymentId: string;
|
|
10
|
+
readonly highConfidenceKeyHash?: string;
|
|
11
|
+
readonly fallbackFingerprint: string;
|
|
12
|
+
readonly semanticFingerprint: string;
|
|
13
|
+
}
|
|
14
|
+
export interface BillingMeterValidationRecordResult {
|
|
15
|
+
readonly outcome: 'recorded' | 'duplicate';
|
|
16
|
+
readonly deduplicatedBy: null | 'high_confidence_key' | 'bounded_fallback';
|
|
17
|
+
readonly eventId: string;
|
|
18
|
+
readonly classification: BillingMeterValidationClassification;
|
|
19
|
+
}
|
|
20
|
+
export interface BillingMeterValidationRecordOptions {
|
|
21
|
+
readonly retryWindowMs: number;
|
|
22
|
+
/** One-way key-generation marker; never the raw HMAC key. */
|
|
23
|
+
readonly keyGeneration: string;
|
|
24
|
+
/** Exact release identity bound into the prepared validation epoch. */
|
|
25
|
+
readonly releaseSha: string;
|
|
26
|
+
readonly writerContractVersion?: number;
|
|
27
|
+
}
|
|
28
|
+
export interface BillingMeterValidationTransactionOptions extends BillingMeterValidationRecordOptions {
|
|
29
|
+
/** Internal live-writer attribution. It is never accepted from an MCP caller. */
|
|
30
|
+
readonly writerSessionId?: string;
|
|
31
|
+
}
|
|
32
|
+
export declare class BillingMeterValidationIdempotencyConflictError extends Error {
|
|
33
|
+
readonly code: "billing_meter_validation_idempotency_conflict";
|
|
34
|
+
constructor();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Validation-only transaction for load/reconciliation proof. It is deliberately absent from request
|
|
38
|
+
* dispatch and accepts only a prepared epoch; it does not make or enforce a customer admission decision.
|
|
39
|
+
*/
|
|
40
|
+
export declare function recordBillingMeterValidationUsage(pool: Pool, input: BillingMeterValidationRecordInput, options: BillingMeterValidationRecordOptions): Promise<BillingMeterValidationRecordResult>;
|
|
41
|
+
/** Reuse the exact receipt/counter transaction from the live writer without accepting an epoch on its API. */
|
|
42
|
+
export declare function recordBillingMeterValidationUsageTx(client: PoolClient, input: BillingMeterValidationRecordInput, options: BillingMeterValidationTransactionOptions): Promise<BillingMeterValidationRecordResult>;
|
|
43
|
+
//# sourceMappingURL=postgres-meter-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-meter-validation.d.ts","sourceRoot":"","sources":["../../src/billing/postgres-meter-validation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAgB3C,MAAM,MAAM,oCAAoC,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErF,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,oCAAoC,CAAC;IAC9D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,WAAW,CAAC;IAC3C,QAAQ,CAAC,cAAc,EAAE,IAAI,GAAG,qBAAqB,GAAG,kBAAkB,CAAC;IAC3E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,oCAAoC,CAAC;CAC/D;AAED,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,6DAA6D;IAC7D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,uEAAuE;IACvE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,wCACf,SAAQ,mCAAmC;IAC3C,iFAAiF;IACjF,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,qBAAa,8CAA+C,SAAQ,KAAK;IACvE,QAAQ,CAAC,IAAI,EAAG,+CAA+C,CAAU;;CAM1E;AAsCD;;;GAGG;AACH,wBAAsB,iCAAiC,CACrD,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,iCAAiC,EACxC,OAAO,EAAE,mCAAmC,GAC3C,OAAO,CAAC,kCAAkC,CAAC,CAiB7C;AAED,8GAA8G;AAC9G,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,iCAAiC,EACxC,OAAO,EAAE,wCAAwC,GAChD,OAAO,CAAC,kCAAkC,CAAC,CAwB7C"}
|