@qlever-llc/trellis 0.10.22 → 0.11.0-rc.1
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/esm/auth/mod.d.ts +1 -1
- package/esm/auth/mod.d.ts.map +1 -1
- package/esm/auth/mod.js +1 -1
- package/esm/auth/protocol.d.ts +55 -0
- package/esm/auth/protocol.d.ts.map +1 -1
- package/esm/browser.d.ts +3 -3
- package/esm/browser.d.ts.map +1 -1
- package/esm/browser.js +1 -1
- package/esm/client_connect.d.ts +12 -3
- package/esm/client_connect.d.ts.map +1 -1
- package/esm/client_connect.js +112 -7
- package/esm/codec.d.ts +7 -6
- package/esm/codec.d.ts.map +1 -1
- package/esm/codec.js +125 -6
- package/esm/contract_support/canonical.d.ts +3 -0
- package/esm/contract_support/canonical.d.ts.map +1 -1
- package/esm/contract_support/canonical.js +3 -0
- package/esm/contract_support/mod.d.ts +125 -10
- package/esm/contract_support/mod.d.ts.map +1 -1
- package/esm/contract_support/mod.js +159 -5
- package/esm/contract_support/protocol.d.ts +92 -7
- package/esm/contract_support/protocol.d.ts.map +1 -1
- package/esm/contract_support/protocol.js +41 -7
- package/esm/contract_support/runtime.d.ts +4 -1
- package/esm/contract_support/runtime.d.ts.map +1 -1
- package/esm/errors/SchemaValidationError.d.ts +49 -0
- package/esm/errors/SchemaValidationError.d.ts.map +1 -0
- package/esm/errors/SchemaValidationError.js +67 -0
- package/esm/errors/index.d.ts +38 -9
- package/esm/errors/index.d.ts.map +1 -1
- package/esm/errors/index.js +16 -0
- package/esm/generated-sdk/auth/api.d.ts +33 -605
- package/esm/generated-sdk/auth/api.d.ts.map +1 -1
- package/esm/generated-sdk/auth/api.js +6 -1
- package/esm/generated-sdk/auth/client.d.ts +129 -134
- package/esm/generated-sdk/auth/client.d.ts.map +1 -1
- package/esm/generated-sdk/auth/contract.d.ts +2 -601
- package/esm/generated-sdk/auth/contract.d.ts.map +1 -1
- package/esm/generated-sdk/auth/contract.js +310 -93
- package/esm/generated-sdk/auth/mod.d.ts +1 -1
- package/esm/generated-sdk/auth/mod.d.ts.map +1 -1
- package/esm/generated-sdk/auth/owned_api.d.ts +88 -86
- package/esm/generated-sdk/auth/owned_api.d.ts.map +1 -1
- package/esm/generated-sdk/auth/owned_api.js +6 -0
- package/esm/generated-sdk/auth/schemas.d.ts +284 -136
- package/esm/generated-sdk/auth/schemas.d.ts.map +1 -1
- package/esm/generated-sdk/auth/schemas.js +231 -92
- package/esm/generated-sdk/auth/types.d.ts +565 -89
- package/esm/generated-sdk/auth/types.d.ts.map +1 -1
- package/esm/generated-sdk/auth/types.js +1 -1
- package/esm/generated-sdk/health/api.d.ts +29 -18
- package/esm/generated-sdk/health/api.d.ts.map +1 -1
- package/esm/generated-sdk/health/client.d.ts +7 -21
- package/esm/generated-sdk/health/client.d.ts.map +1 -1
- package/esm/generated-sdk/health/contract.d.ts +2 -15
- package/esm/generated-sdk/health/contract.d.ts.map +1 -1
- package/esm/generated-sdk/health/contract.js +2 -10
- package/esm/generated-sdk/health/mod.d.ts +1 -1
- package/esm/generated-sdk/health/mod.d.ts.map +1 -1
- package/esm/generated-sdk/health/owned_api.d.ts +2 -2
- package/esm/generated-sdk/health/schemas.d.ts +1 -14
- package/esm/generated-sdk/health/schemas.d.ts.map +1 -1
- package/esm/generated-sdk/health/schemas.js +1 -9
- package/esm/generated-sdk/health/types.d.ts +10 -5
- package/esm/generated-sdk/health/types.d.ts.map +1 -1
- package/esm/generated-sdk/health/types.js +1 -2
- package/esm/generated-sdk/jobs/api.d.ts +29 -109
- package/esm/generated-sdk/jobs/api.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/client.d.ts +21 -33
- package/esm/generated-sdk/jobs/client.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/contract.d.ts +2 -106
- package/esm/generated-sdk/jobs/contract.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/contract.js +268 -1
- package/esm/generated-sdk/jobs/mod.d.ts +1 -1
- package/esm/generated-sdk/jobs/mod.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/owned_api.d.ts +22 -9
- package/esm/generated-sdk/jobs/owned_api.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/owned_api.js +20 -1
- package/esm/generated-sdk/jobs/schemas.d.ts +437 -0
- package/esm/generated-sdk/jobs/schemas.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/schemas.js +211 -0
- package/esm/generated-sdk/jobs/types.d.ts +195 -12
- package/esm/generated-sdk/jobs/types.d.ts.map +1 -1
- package/esm/generated-sdk/jobs/types.js +1 -1
- package/esm/generated-sdk/state/api.d.ts +29 -68
- package/esm/generated-sdk/state/api.d.ts.map +1 -1
- package/esm/generated-sdk/state/client.d.ts +17 -31
- package/esm/generated-sdk/state/client.d.ts.map +1 -1
- package/esm/generated-sdk/state/contract.d.ts +1 -64
- package/esm/generated-sdk/state/contract.d.ts.map +1 -1
- package/esm/generated-sdk/state/mod.d.ts +1 -1
- package/esm/generated-sdk/state/mod.d.ts.map +1 -1
- package/esm/generated-sdk/state/owned_api.d.ts +7 -7
- package/esm/generated-sdk/state/types.d.ts +52 -9
- package/esm/generated-sdk/state/types.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/api.d.ts +33 -45
- package/esm/generated-sdk/trellis-core/api.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/api.js +6 -1
- package/esm/generated-sdk/trellis-core/client.d.ts +31 -20
- package/esm/generated-sdk/trellis-core/client.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/contract.d.ts +2 -41
- package/esm/generated-sdk/trellis-core/contract.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/contract.js +91 -1
- package/esm/generated-sdk/trellis-core/mod.d.ts +1 -1
- package/esm/generated-sdk/trellis-core/mod.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/owned_api.d.ts +4 -4
- package/esm/generated-sdk/trellis-core/schemas.d.ts +113 -0
- package/esm/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/schemas.js +81 -0
- package/esm/generated-sdk/trellis-core/types.d.ts +54 -7
- package/esm/generated-sdk/trellis-core/types.d.ts.map +1 -1
- package/esm/generated-sdk/trellis-core/types.js +1 -1
- package/esm/health.d.ts +1 -1
- package/esm/health.d.ts.map +1 -1
- package/esm/health.js +1 -1
- package/esm/index.d.ts +4 -4
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +2 -2
- package/esm/jobs.d.ts +69 -3
- package/esm/jobs.d.ts.map +1 -1
- package/esm/jobs.js +92 -3
- package/esm/server/health.d.ts +2 -6
- package/esm/server/health.d.ts.map +1 -1
- package/esm/server/health_schemas.d.ts +0 -8
- package/esm/server/health_schemas.d.ts.map +1 -1
- package/esm/server/health_schemas.js +0 -5
- package/esm/server/internal_jobs/bindings.d.ts +11 -0
- package/esm/server/internal_jobs/bindings.d.ts.map +1 -1
- package/esm/server/internal_jobs/job-manager.d.ts +58 -2
- package/esm/server/internal_jobs/job-manager.d.ts.map +1 -1
- package/esm/server/internal_jobs/job-manager.js +429 -55
- package/esm/server/internal_jobs/key-coordinator.d.ts +269 -0
- package/esm/server/internal_jobs/key-coordinator.d.ts.map +1 -0
- package/esm/server/internal_jobs/key-coordinator.js +677 -0
- package/esm/server/internal_jobs/projection.d.ts.map +1 -1
- package/esm/server/internal_jobs/projection.js +2 -0
- package/esm/server/internal_jobs/runtime-worker.d.ts +5 -1
- package/esm/server/internal_jobs/runtime-worker.d.ts.map +1 -1
- package/esm/server/internal_jobs/runtime-worker.js +14 -2
- package/esm/server/internal_jobs/types.d.ts +5 -5
- package/esm/server/internal_jobs/types.d.ts.map +1 -1
- package/esm/server/internal_jobs/types.js +6 -0
- package/esm/server/runtime.d.ts.map +1 -1
- package/esm/server/service.d.ts +81 -112
- package/esm/server/service.d.ts.map +1 -1
- package/esm/server/service.js +372 -130
- package/esm/server.d.ts +3 -3
- package/esm/server.d.ts.map +1 -1
- package/esm/service/deno.d.ts +1 -1
- package/esm/service/deno.d.ts.map +1 -1
- package/esm/service/drizzle.d.ts +52 -0
- package/esm/service/drizzle.d.ts.map +1 -0
- package/esm/service/drizzle.js +108 -0
- package/esm/service/mod.d.ts +3 -3
- package/esm/service/mod.d.ts.map +1 -1
- package/esm/service/mod.js +2 -2
- package/esm/service/node.d.ts +1 -1
- package/esm/service/node.d.ts.map +1 -1
- package/esm/service/outbox_inbox.d.ts +76 -22
- package/esm/service/outbox_inbox.d.ts.map +1 -1
- package/esm/service/outbox_inbox.js +231 -70
- package/esm/telemetry/metrics.d.ts +55 -0
- package/esm/telemetry/metrics.d.ts.map +1 -1
- package/esm/telemetry/metrics.js +86 -0
- package/esm/telemetry/mod.d.ts +2 -1
- package/esm/telemetry/mod.d.ts.map +1 -1
- package/esm/telemetry/mod.js +1 -1
- package/esm/trellis.d.ts +62 -30
- package/esm/trellis.d.ts.map +1 -1
- package/esm/trellis.js +125 -42
- package/package.json +14 -2
- package/script/auth/mod.d.ts +1 -1
- package/script/auth/mod.d.ts.map +1 -1
- package/script/auth/mod.js +11 -4
- package/script/auth/protocol.d.ts +55 -0
- package/script/auth/protocol.d.ts.map +1 -1
- package/script/browser.d.ts +3 -3
- package/script/browser.d.ts.map +1 -1
- package/script/browser.js +3 -2
- package/script/client_connect.d.ts +12 -3
- package/script/client_connect.d.ts.map +1 -1
- package/script/client_connect.js +111 -6
- package/script/codec.d.ts +7 -6
- package/script/codec.d.ts.map +1 -1
- package/script/codec.js +124 -5
- package/script/contract_support/canonical.d.ts +3 -0
- package/script/contract_support/canonical.d.ts.map +1 -1
- package/script/contract_support/canonical.js +3 -0
- package/script/contract_support/mod.d.ts +125 -10
- package/script/contract_support/mod.d.ts.map +1 -1
- package/script/contract_support/mod.js +165 -5
- package/script/contract_support/protocol.d.ts +92 -7
- package/script/contract_support/protocol.d.ts.map +1 -1
- package/script/contract_support/protocol.js +42 -8
- package/script/contract_support/runtime.d.ts +4 -1
- package/script/contract_support/runtime.d.ts.map +1 -1
- package/script/errors/SchemaValidationError.d.ts +49 -0
- package/script/errors/SchemaValidationError.d.ts.map +1 -0
- package/script/errors/SchemaValidationError.js +74 -0
- package/script/errors/index.d.ts +38 -9
- package/script/errors/index.d.ts.map +1 -1
- package/script/errors/index.js +20 -1
- package/script/generated-sdk/auth/api.d.ts +33 -605
- package/script/generated-sdk/auth/api.d.ts.map +1 -1
- package/script/generated-sdk/auth/api.js +6 -1
- package/script/generated-sdk/auth/client.d.ts +129 -134
- package/script/generated-sdk/auth/client.d.ts.map +1 -1
- package/script/generated-sdk/auth/contract.d.ts +2 -601
- package/script/generated-sdk/auth/contract.d.ts.map +1 -1
- package/script/generated-sdk/auth/contract.js +310 -93
- package/script/generated-sdk/auth/mod.d.ts +1 -1
- package/script/generated-sdk/auth/mod.d.ts.map +1 -1
- package/script/generated-sdk/auth/owned_api.d.ts +88 -86
- package/script/generated-sdk/auth/owned_api.d.ts.map +1 -1
- package/script/generated-sdk/auth/owned_api.js +6 -0
- package/script/generated-sdk/auth/schemas.d.ts +284 -136
- package/script/generated-sdk/auth/schemas.d.ts.map +1 -1
- package/script/generated-sdk/auth/schemas.js +231 -92
- package/script/generated-sdk/auth/types.d.ts +565 -89
- package/script/generated-sdk/auth/types.d.ts.map +1 -1
- package/script/generated-sdk/auth/types.js +1 -1
- package/script/generated-sdk/health/api.d.ts +29 -18
- package/script/generated-sdk/health/api.d.ts.map +1 -1
- package/script/generated-sdk/health/client.d.ts +7 -21
- package/script/generated-sdk/health/client.d.ts.map +1 -1
- package/script/generated-sdk/health/contract.d.ts +2 -15
- package/script/generated-sdk/health/contract.d.ts.map +1 -1
- package/script/generated-sdk/health/contract.js +2 -10
- package/script/generated-sdk/health/mod.d.ts +1 -1
- package/script/generated-sdk/health/mod.d.ts.map +1 -1
- package/script/generated-sdk/health/owned_api.d.ts +2 -2
- package/script/generated-sdk/health/schemas.d.ts +1 -14
- package/script/generated-sdk/health/schemas.d.ts.map +1 -1
- package/script/generated-sdk/health/schemas.js +1 -9
- package/script/generated-sdk/health/types.d.ts +10 -5
- package/script/generated-sdk/health/types.d.ts.map +1 -1
- package/script/generated-sdk/health/types.js +1 -2
- package/script/generated-sdk/jobs/api.d.ts +29 -109
- package/script/generated-sdk/jobs/api.d.ts.map +1 -1
- package/script/generated-sdk/jobs/client.d.ts +21 -33
- package/script/generated-sdk/jobs/client.d.ts.map +1 -1
- package/script/generated-sdk/jobs/contract.d.ts +2 -106
- package/script/generated-sdk/jobs/contract.d.ts.map +1 -1
- package/script/generated-sdk/jobs/contract.js +268 -1
- package/script/generated-sdk/jobs/mod.d.ts +1 -1
- package/script/generated-sdk/jobs/mod.d.ts.map +1 -1
- package/script/generated-sdk/jobs/owned_api.d.ts +22 -9
- package/script/generated-sdk/jobs/owned_api.d.ts.map +1 -1
- package/script/generated-sdk/jobs/owned_api.js +19 -0
- package/script/generated-sdk/jobs/schemas.d.ts +437 -0
- package/script/generated-sdk/jobs/schemas.d.ts.map +1 -1
- package/script/generated-sdk/jobs/schemas.js +212 -1
- package/script/generated-sdk/jobs/types.d.ts +195 -12
- package/script/generated-sdk/jobs/types.d.ts.map +1 -1
- package/script/generated-sdk/jobs/types.js +1 -1
- package/script/generated-sdk/state/api.d.ts +29 -68
- package/script/generated-sdk/state/api.d.ts.map +1 -1
- package/script/generated-sdk/state/client.d.ts +17 -31
- package/script/generated-sdk/state/client.d.ts.map +1 -1
- package/script/generated-sdk/state/contract.d.ts +1 -64
- package/script/generated-sdk/state/contract.d.ts.map +1 -1
- package/script/generated-sdk/state/mod.d.ts +1 -1
- package/script/generated-sdk/state/mod.d.ts.map +1 -1
- package/script/generated-sdk/state/owned_api.d.ts +7 -7
- package/script/generated-sdk/state/types.d.ts +52 -9
- package/script/generated-sdk/state/types.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/api.d.ts +33 -45
- package/script/generated-sdk/trellis-core/api.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/api.js +6 -1
- package/script/generated-sdk/trellis-core/client.d.ts +31 -20
- package/script/generated-sdk/trellis-core/client.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/contract.d.ts +2 -41
- package/script/generated-sdk/trellis-core/contract.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/contract.js +91 -1
- package/script/generated-sdk/trellis-core/mod.d.ts +1 -1
- package/script/generated-sdk/trellis-core/mod.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/owned_api.d.ts +4 -4
- package/script/generated-sdk/trellis-core/schemas.d.ts +113 -0
- package/script/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/schemas.js +81 -0
- package/script/generated-sdk/trellis-core/types.d.ts +54 -7
- package/script/generated-sdk/trellis-core/types.d.ts.map +1 -1
- package/script/generated-sdk/trellis-core/types.js +1 -1
- package/script/health.d.ts +1 -1
- package/script/health.d.ts.map +1 -1
- package/script/health.js +1 -2
- package/script/index.d.ts +4 -4
- package/script/index.d.ts.map +1 -1
- package/script/index.js +2 -2
- package/script/jobs.d.ts +69 -3
- package/script/jobs.d.ts.map +1 -1
- package/script/jobs.js +93 -3
- package/script/server/health.d.ts +2 -6
- package/script/server/health.d.ts.map +1 -1
- package/script/server/health_schemas.d.ts +0 -8
- package/script/server/health_schemas.d.ts.map +1 -1
- package/script/server/health_schemas.js +1 -6
- package/script/server/internal_jobs/bindings.d.ts +11 -0
- package/script/server/internal_jobs/bindings.d.ts.map +1 -1
- package/script/server/internal_jobs/job-manager.d.ts +58 -2
- package/script/server/internal_jobs/job-manager.d.ts.map +1 -1
- package/script/server/internal_jobs/job-manager.js +429 -54
- package/script/server/internal_jobs/key-coordinator.d.ts +269 -0
- package/script/server/internal_jobs/key-coordinator.d.ts.map +1 -0
- package/script/server/internal_jobs/key-coordinator.js +690 -0
- package/script/server/internal_jobs/projection.d.ts.map +1 -1
- package/script/server/internal_jobs/projection.js +2 -0
- package/script/server/internal_jobs/runtime-worker.d.ts +5 -1
- package/script/server/internal_jobs/runtime-worker.d.ts.map +1 -1
- package/script/server/internal_jobs/runtime-worker.js +14 -2
- package/script/server/internal_jobs/types.d.ts +5 -5
- package/script/server/internal_jobs/types.d.ts.map +1 -1
- package/script/server/internal_jobs/types.js +6 -0
- package/script/server/runtime.d.ts.map +1 -1
- package/script/server/service.d.ts +81 -112
- package/script/server/service.d.ts.map +1 -1
- package/script/server/service.js +369 -127
- package/script/server.d.ts +3 -3
- package/script/server.d.ts.map +1 -1
- package/script/service/deno.d.ts +1 -1
- package/script/service/deno.d.ts.map +1 -1
- package/script/service/drizzle.d.ts +52 -0
- package/script/service/drizzle.d.ts.map +1 -0
- package/script/service/drizzle.js +113 -0
- package/script/service/mod.d.ts +3 -3
- package/script/service/mod.d.ts.map +1 -1
- package/script/service/mod.js +4 -3
- package/script/service/node.d.ts +1 -1
- package/script/service/node.d.ts.map +1 -1
- package/script/service/outbox_inbox.d.ts +76 -22
- package/script/service/outbox_inbox.d.ts.map +1 -1
- package/script/service/outbox_inbox.js +233 -70
- package/script/telemetry/metrics.d.ts +55 -0
- package/script/telemetry/metrics.d.ts.map +1 -1
- package/script/telemetry/metrics.js +88 -0
- package/script/telemetry/mod.d.ts +2 -1
- package/script/telemetry/mod.d.ts.map +1 -1
- package/script/telemetry/mod.js +3 -1
- package/script/trellis.d.ts +62 -30
- package/script/trellis.d.ts.map +1 -1
- package/script/trellis.js +124 -41
- package/src/auth/mod.ts +7 -0
- package/src/browser.ts +5 -7
- package/src/client_connect.ts +200 -12
- package/src/codec.ts +186 -11
- package/src/contract_support/canonical.ts +3 -0
- package/src/contract_support/mod.ts +380 -9
- package/src/contract_support/protocol.ts +57 -10
- package/src/contract_support/runtime.ts +7 -0
- package/src/errors/SchemaValidationError.ts +67 -0
- package/src/errors/index.ts +28 -0
- package/src/health.ts +0 -1
- package/src/index.ts +7 -8
- package/src/jobs.ts +138 -1
- package/src/sdk/_generated/auth/api.ts +38 -7
- package/src/sdk/_generated/auth/client.ts +168 -530
- package/src/sdk/_generated/auth/contract.ts +310 -93
- package/src/sdk/_generated/auth/mod.ts +0 -1
- package/src/sdk/_generated/auth/owned_api.ts +92 -86
- package/src/sdk/_generated/auth/schemas.ts +231 -92
- package/src/sdk/_generated/auth/types.ts +1069 -273
- package/src/sdk/_generated/core/api.ts +38 -7
- package/src/sdk/_generated/core/client.ts +47 -73
- package/src/sdk/_generated/core/contract.ts +91 -1
- package/src/sdk/_generated/core/mod.ts +0 -1
- package/src/sdk/_generated/core/owned_api.ts +4 -4
- package/src/sdk/_generated/core/schemas.ts +81 -0
- package/src/sdk/_generated/core/types.ts +79 -15
- package/src/sdk/_generated/health/api.ts +29 -5
- package/src/sdk/_generated/health/client.ts +11 -58
- package/src/sdk/_generated/health/contract.ts +2 -10
- package/src/sdk/_generated/health/mod.ts +0 -1
- package/src/sdk/_generated/health/owned_api.ts +2 -2
- package/src/sdk/_generated/health/schemas.ts +1 -9
- package/src/sdk/_generated/health/types.ts +23 -2
- package/src/sdk/_generated/jobs/api.ts +29 -5
- package/src/sdk/_generated/jobs/client.ts +25 -109
- package/src/sdk/_generated/jobs/contract.ts +269 -1
- package/src/sdk/_generated/jobs/mod.ts +0 -1
- package/src/sdk/_generated/jobs/owned_api.ts +30 -9
- package/src/sdk/_generated/jobs/schemas.ts +213 -0
- package/src/sdk/_generated/jobs/types.ts +252 -18
- package/src/sdk/_generated/state/api.ts +29 -5
- package/src/sdk/_generated/state/client.ts +18 -95
- package/src/sdk/_generated/state/mod.ts +0 -1
- package/src/sdk/_generated/state/owned_api.ts +7 -7
- package/src/sdk/_generated/state/types.ts +91 -15
- package/src/server/health.ts +2 -6
- package/src/server/health_schemas.ts +0 -6
- package/src/server/internal_jobs/bindings.ts +11 -0
- package/src/server/internal_jobs/job-manager.ts +553 -24
- package/src/server/internal_jobs/key-coordinator.ts +1080 -0
- package/src/server/internal_jobs/projection.ts +2 -0
- package/src/server/internal_jobs/runtime-worker.ts +17 -1
- package/src/server/internal_jobs/types.ts +6 -0
- package/src/server/runtime.ts +4 -0
- package/src/server/service.ts +645 -625
- package/src/server.ts +14 -7
- package/src/service/deno.ts +0 -5
- package/src/service/drizzle.ts +184 -0
- package/src/service/mod.ts +17 -7
- package/src/service/node.ts +0 -5
- package/src/service/outbox_inbox.ts +354 -88
- package/src/telemetry/metrics.ts +198 -1
- package/src/telemetry/mod.ts +6 -0
- package/src/trellis.ts +286 -105
|
@@ -10,17 +10,20 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
10
10
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
11
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
12
|
};
|
|
13
|
-
var _JobManager_instances, _JobManager_context, _JobManager_meta, _JobManager_getQueueBinding, _JobManager_publishJobEvent;
|
|
13
|
+
var _JobManager_instances, _JobManager_context, _JobManager_meta, _JobManager_getQueueBinding, _JobManager_publishJobEvent, _JobManager_submit, _JobManager_submitPrepared, _JobManager_admitKeyedCreate, _JobManager_removeQueuedKeyedReservation, _JobManager_restoreReplacedKeyedReservation, _JobManager_publishSkipped, _JobManager_keyedHeartbeat, _JobManager_releaseKeyedSlot, _JobManager_releaseKeyedSlotAfterPublishFailure, _JobManager_publishStaleCompletionIgnored;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.JobCancellationToken = exports.ActiveJobRuntimeError = exports.ActiveJob = exports.JobManager = exports.JobProcessError = void 0;
|
|
16
|
+
exports.createJobContext = createJobContext;
|
|
16
17
|
const nats_core_1 = require("@nats-io/nats-core");
|
|
17
18
|
const ulid_1 = require("ulid");
|
|
18
19
|
const carrier_js_1 = require("../../telemetry/carrier.js");
|
|
19
20
|
const mod_js_1 = require("../../telemetry/mod.js");
|
|
21
|
+
const jobs_js_1 = require("../../jobs.js");
|
|
20
22
|
const active_job_js_1 = require("./active-job.js");
|
|
21
23
|
Object.defineProperty(exports, "ActiveJob", { enumerable: true, get: function () { return active_job_js_1.ActiveJob; } });
|
|
22
24
|
Object.defineProperty(exports, "ActiveJobRuntimeError", { enumerable: true, get: function () { return active_job_js_1.ActiveJobRuntimeError; } });
|
|
23
25
|
Object.defineProperty(exports, "JobCancellationToken", { enumerable: true, get: function () { return active_job_js_1.JobCancellationToken; } });
|
|
26
|
+
const key_coordinator_js_1 = require("./key-coordinator.js");
|
|
24
27
|
class JobProcessError extends Error {
|
|
25
28
|
constructor(kind, message) {
|
|
26
29
|
super(message);
|
|
@@ -48,41 +51,83 @@ class JobManager {
|
|
|
48
51
|
__classPrivateFieldSet(this, _JobManager_context, context, "f");
|
|
49
52
|
}
|
|
50
53
|
async create(type, payload) {
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
await __classPrivateFieldGet(this, _JobManager_instances, "m",
|
|
85
|
-
|
|
54
|
+
const outcome = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_submit).call(this, type, payload, true);
|
|
55
|
+
if (outcome.kind === "accepted") {
|
|
56
|
+
return outcome.job;
|
|
57
|
+
}
|
|
58
|
+
if (outcome.kind === "coalesced") {
|
|
59
|
+
throw new jobs_js_1.JobNotEnqueuedError({
|
|
60
|
+
reason: "coalesced",
|
|
61
|
+
key: outcome.key,
|
|
62
|
+
active: 0,
|
|
63
|
+
queued: 1,
|
|
64
|
+
limit: 0,
|
|
65
|
+
existingJobId: outcome.existing.id,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
if (outcome.kind === "replaced") {
|
|
69
|
+
throw new jobs_js_1.JobNotEnqueuedError({
|
|
70
|
+
reason: "queue-depth",
|
|
71
|
+
key: outcome.key,
|
|
72
|
+
active: 0,
|
|
73
|
+
queued: 1,
|
|
74
|
+
limit: 0,
|
|
75
|
+
existingJobId: outcome.replaced.id,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
throw new jobs_js_1.JobNotEnqueuedError({
|
|
79
|
+
reason: outcome.reason,
|
|
80
|
+
key: outcome.key,
|
|
81
|
+
active: outcome.active,
|
|
82
|
+
queued: outcome.queued,
|
|
83
|
+
limit: outcome.limit,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
async submit(type, payload) {
|
|
87
|
+
return await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_submit).call(this, type, payload, false);
|
|
88
|
+
}
|
|
89
|
+
async createPrepared(submission) {
|
|
90
|
+
const outcome = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_submitPrepared).call(this, submission, true, true);
|
|
91
|
+
if (outcome.kind === "accepted") {
|
|
92
|
+
return outcome.job;
|
|
93
|
+
}
|
|
94
|
+
if (outcome.kind === "coalesced") {
|
|
95
|
+
throw new jobs_js_1.JobNotEnqueuedError({
|
|
96
|
+
reason: "coalesced",
|
|
97
|
+
key: outcome.key,
|
|
98
|
+
active: 0,
|
|
99
|
+
queued: 1,
|
|
100
|
+
limit: 0,
|
|
101
|
+
existingJobId: outcome.existing.id,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
if (outcome.kind === "replaced") {
|
|
105
|
+
throw new jobs_js_1.JobNotEnqueuedError({
|
|
106
|
+
reason: "queue-depth",
|
|
107
|
+
key: outcome.key,
|
|
108
|
+
active: 0,
|
|
109
|
+
queued: 1,
|
|
110
|
+
limit: 0,
|
|
111
|
+
existingJobId: outcome.replaced.id,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
throw new jobs_js_1.JobNotEnqueuedError({
|
|
115
|
+
reason: outcome.reason,
|
|
116
|
+
key: outcome.key,
|
|
117
|
+
active: outcome.active,
|
|
118
|
+
queued: outcome.queued,
|
|
119
|
+
limit: outcome.limit,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
async submitPrepared(submission) {
|
|
123
|
+
return await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_submitPrepared).call(this, submission, false, true);
|
|
124
|
+
}
|
|
125
|
+
async cleanupQueuedKeyedJob(job) {
|
|
126
|
+
const queue = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, job.type);
|
|
127
|
+
const keyedPolicy = getKeyPolicy(queue);
|
|
128
|
+
if (!keyedPolicy)
|
|
129
|
+
return;
|
|
130
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_removeQueuedKeyedReservation).call(this, job, keyedPolicy);
|
|
86
131
|
}
|
|
87
132
|
process(job, cancellation, handler, metadata = {}, validation = {}) {
|
|
88
133
|
return this.processWithHeartbeat(job, cancellation, () => {
|
|
@@ -90,25 +135,78 @@ class JobManager {
|
|
|
90
135
|
}, handler, metadata, validation);
|
|
91
136
|
}
|
|
92
137
|
async processWithHeartbeat(job, cancellation, heartbeat, handler, metadata = {}, validation = {}) {
|
|
93
|
-
__classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, job.type);
|
|
94
138
|
const tries = job.tries + 1;
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
139
|
+
const queue = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, job.type);
|
|
140
|
+
const keyedPolicy = getKeyPolicy(queue);
|
|
141
|
+
let lease;
|
|
142
|
+
let staleSlots = [];
|
|
143
|
+
if (keyedPolicy) {
|
|
144
|
+
const coordinator = __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator;
|
|
145
|
+
if (!coordinator) {
|
|
146
|
+
throw new Error(`Keyed jobs queue '${job.type}' requires the JOBS_KEYS coordinator`);
|
|
147
|
+
}
|
|
148
|
+
const acquired = await coordinator.acquireActiveSlot({
|
|
149
|
+
service: job.service,
|
|
150
|
+
jobType: job.type,
|
|
151
|
+
jobId: job.id,
|
|
152
|
+
payload: job.payload,
|
|
153
|
+
context: job.context,
|
|
154
|
+
lifecycleState: metadata.latestState ?? job.state,
|
|
155
|
+
tries,
|
|
156
|
+
instanceId: metadata.instanceId ?? "unknown",
|
|
157
|
+
now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
|
|
158
|
+
policy: keyedPolicy,
|
|
159
|
+
});
|
|
160
|
+
if (acquired.kind === "blocked") {
|
|
161
|
+
return { outcome: "deferred", tries, reason: acquired.reason };
|
|
162
|
+
}
|
|
163
|
+
lease = {
|
|
164
|
+
key: acquired.key,
|
|
165
|
+
keyHash: acquired.keyHash,
|
|
166
|
+
slotToken: acquired.slotToken,
|
|
167
|
+
policy: keyedPolicy,
|
|
168
|
+
};
|
|
169
|
+
staleSlots = acquired.stale;
|
|
170
|
+
}
|
|
171
|
+
try {
|
|
172
|
+
for (const stale of staleSlots) {
|
|
173
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, stale.jobId, {
|
|
174
|
+
jobId: stale.jobId,
|
|
175
|
+
service: job.service,
|
|
176
|
+
jobType: job.type,
|
|
177
|
+
eventType: "stale",
|
|
178
|
+
state: "stale",
|
|
179
|
+
previousState: "active",
|
|
180
|
+
context: stale.context,
|
|
181
|
+
tries: stale.tries,
|
|
182
|
+
error: "keyed job lease expired",
|
|
183
|
+
timestamp: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
|
|
187
|
+
jobId: job.id,
|
|
188
|
+
service: job.service,
|
|
189
|
+
jobType: job.type,
|
|
190
|
+
eventType: "started",
|
|
191
|
+
state: "active",
|
|
192
|
+
previousState: job.state,
|
|
193
|
+
context: job.context,
|
|
194
|
+
tries,
|
|
195
|
+
timestamp: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlotAfterPublishFailure).call(this, job, lease, error);
|
|
200
|
+
throw error;
|
|
201
|
+
}
|
|
106
202
|
try {
|
|
107
|
-
const result = await this.withActiveJobAndHeartbeat({ ...job, state: "active", tries }, cancellation, heartbeat, handler, metadata);
|
|
203
|
+
const result = await this.withActiveJobAndHeartbeat({ ...job, state: "active", tries }, cancellation, lease ? __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_keyedHeartbeat).call(this, job, lease, heartbeat) : heartbeat, handler, metadata, lease);
|
|
108
204
|
if (cancellation.isHostShutdown()) {
|
|
205
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
|
|
109
206
|
return { outcome: "interrupted", tries };
|
|
110
207
|
}
|
|
111
208
|
if (cancellation.isCancelled()) {
|
|
209
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
|
|
112
210
|
return { outcome: "cancelled", tries };
|
|
113
211
|
}
|
|
114
212
|
try {
|
|
@@ -121,6 +219,11 @@ class JobManager {
|
|
|
121
219
|
catch (error) {
|
|
122
220
|
throw JobProcessError.failed(error instanceof Error ? error.message : String(error));
|
|
123
221
|
}
|
|
222
|
+
const release = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
|
|
223
|
+
if (release === "staleCompletion") {
|
|
224
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishStaleCompletionIgnored).call(this, job, tries);
|
|
225
|
+
return { outcome: "stale_completion_ignored", tries };
|
|
226
|
+
}
|
|
124
227
|
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
|
|
125
228
|
jobId: job.id,
|
|
126
229
|
service: job.service,
|
|
@@ -137,9 +240,11 @@ class JobManager {
|
|
|
137
240
|
}
|
|
138
241
|
catch (error) {
|
|
139
242
|
if (cancellation.isHostShutdown()) {
|
|
243
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
|
|
140
244
|
return { outcome: "interrupted", tries };
|
|
141
245
|
}
|
|
142
246
|
if (cancellation.isCancelled()) {
|
|
247
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
|
|
143
248
|
return { outcome: "cancelled", tries };
|
|
144
249
|
}
|
|
145
250
|
if (error instanceof JobProcessError) {
|
|
@@ -151,6 +256,11 @@ class JobManager {
|
|
|
151
256
|
operation: job.type,
|
|
152
257
|
phase: "handler_result",
|
|
153
258
|
});
|
|
259
|
+
const release = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
|
|
260
|
+
if (release === "staleCompletion") {
|
|
261
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishStaleCompletionIgnored).call(this, job, tries);
|
|
262
|
+
return { outcome: "stale_completion_ignored", tries };
|
|
263
|
+
}
|
|
154
264
|
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
|
|
155
265
|
jobId: job.id,
|
|
156
266
|
service: job.service,
|
|
@@ -171,6 +281,11 @@ class JobManager {
|
|
|
171
281
|
operation: job.type,
|
|
172
282
|
phase: "handler_result",
|
|
173
283
|
});
|
|
284
|
+
const release = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
|
|
285
|
+
if (release === "staleCompletion") {
|
|
286
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishStaleCompletionIgnored).call(this, job, tries);
|
|
287
|
+
return { outcome: "stale_completion_ignored", tries };
|
|
288
|
+
}
|
|
174
289
|
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
|
|
175
290
|
jobId: job.id,
|
|
176
291
|
service: job.service,
|
|
@@ -241,7 +356,10 @@ class JobManager {
|
|
|
241
356
|
throw new active_job_js_1.ActiveJobRuntimeError("worker heartbeat unavailable");
|
|
242
357
|
}, f, metadata);
|
|
243
358
|
}
|
|
244
|
-
async withActiveJobAndHeartbeat(job, cancellation, heartbeat, f, metadata = {}) {
|
|
359
|
+
async withActiveJobAndHeartbeat(job, cancellation, heartbeat, f, metadata = {}, lease) {
|
|
360
|
+
const stopAutoHeartbeat = lease
|
|
361
|
+
? startAutoHeartbeat(heartbeat, lease.policy.heartbeatIntervalMs)
|
|
362
|
+
: () => { };
|
|
245
363
|
const activeJob = new active_job_js_1.ActiveJob(job, cancellation, {
|
|
246
364
|
updateProgress: (progress) => this.emitProgress(job, progress),
|
|
247
365
|
log: (entry) => this.emitLog(job, entry),
|
|
@@ -259,7 +377,12 @@ class JobManager {
|
|
|
259
377
|
}, {
|
|
260
378
|
redeliveryCount: metadata.redeliveryCount ?? 0,
|
|
261
379
|
});
|
|
262
|
-
|
|
380
|
+
try {
|
|
381
|
+
return await f(activeJob);
|
|
382
|
+
}
|
|
383
|
+
finally {
|
|
384
|
+
stopAutoHeartbeat();
|
|
385
|
+
}
|
|
263
386
|
}
|
|
264
387
|
}
|
|
265
388
|
exports.JobManager = JobManager;
|
|
@@ -274,9 +397,9 @@ _JobManager_context = new WeakMap(), _JobManager_instances = new WeakSet(), _Job
|
|
|
274
397
|
throw new Error(`Missing jobs binding for queue '${type}'`);
|
|
275
398
|
}
|
|
276
399
|
return binding;
|
|
277
|
-
}, _JobManager_publishJobEvent = async function _JobManager_publishJobEvent(type, jobId, event) {
|
|
400
|
+
}, _JobManager_publishJobEvent = async function _JobManager_publishJobEvent(type, jobId, event, stableMessageId) {
|
|
278
401
|
const binding = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, type);
|
|
279
|
-
const headers = headersFromJobContext(event.context);
|
|
402
|
+
const headers = headersFromJobContext(event.context, stableMessageId);
|
|
280
403
|
try {
|
|
281
404
|
await __classPrivateFieldGet(this, _JobManager_context, "f").nc.publish(`${binding.publishPrefix}.${jobId}.${event.eventType}`, new TextEncoder().encode(JSON.stringify(event)), { headers });
|
|
282
405
|
}
|
|
@@ -290,7 +413,256 @@ _JobManager_context = new WeakMap(), _JobManager_instances = new WeakSet(), _Job
|
|
|
290
413
|
});
|
|
291
414
|
throw error;
|
|
292
415
|
}
|
|
416
|
+
}, _JobManager_submit = async function _JobManager_submit(type, payload, strictCreate) {
|
|
417
|
+
const meta = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this);
|
|
418
|
+
const now = meta.nowIso();
|
|
419
|
+
const id = meta.nextJobId();
|
|
420
|
+
const context = createJobContext();
|
|
421
|
+
const namespace = __classPrivateFieldGet(this, _JobManager_context, "f").jobs.namespace;
|
|
422
|
+
const submission = {
|
|
423
|
+
submissionId: id,
|
|
424
|
+
mode: strictCreate ? "create" : "submit",
|
|
425
|
+
service: namespace,
|
|
426
|
+
queue: type,
|
|
427
|
+
jobId: id,
|
|
428
|
+
payload,
|
|
429
|
+
createdAt: now,
|
|
430
|
+
context,
|
|
431
|
+
};
|
|
432
|
+
return await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_submitPrepared).call(this, submission, strictCreate);
|
|
433
|
+
}, _JobManager_submitPrepared = async function _JobManager_submitPrepared(submission, strictCreate, stableMessageIds) {
|
|
434
|
+
const { queue: type, jobId: id, createdAt: now, context, service, payload, } = submission;
|
|
435
|
+
const binding = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, type);
|
|
436
|
+
const deadline = computeDeadline(now, binding.defaultDeadlineMs);
|
|
437
|
+
const job = {
|
|
438
|
+
id,
|
|
439
|
+
service,
|
|
440
|
+
type,
|
|
441
|
+
state: "pending",
|
|
442
|
+
context,
|
|
443
|
+
payload,
|
|
444
|
+
createdAt: now,
|
|
445
|
+
updatedAt: now,
|
|
446
|
+
tries: 0,
|
|
447
|
+
maxTries: binding.maxDeliver,
|
|
448
|
+
...(deadline ? { deadline } : {}),
|
|
449
|
+
};
|
|
450
|
+
const event = {
|
|
451
|
+
jobId: id,
|
|
452
|
+
service,
|
|
453
|
+
jobType: type,
|
|
454
|
+
eventType: "created",
|
|
455
|
+
state: "pending",
|
|
456
|
+
context,
|
|
457
|
+
tries: 0,
|
|
458
|
+
maxTries: binding.maxDeliver,
|
|
459
|
+
payload,
|
|
460
|
+
...(deadline ? { deadline } : {}),
|
|
461
|
+
timestamp: now,
|
|
462
|
+
};
|
|
463
|
+
const keyedPolicy = getKeyPolicy(binding);
|
|
464
|
+
if (keyedPolicy) {
|
|
465
|
+
const admission = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_admitKeyedCreate).call(this, {
|
|
466
|
+
type,
|
|
467
|
+
job,
|
|
468
|
+
event,
|
|
469
|
+
policy: keyedPolicy,
|
|
470
|
+
strictCreate,
|
|
471
|
+
submissionId: submission.submissionId,
|
|
472
|
+
});
|
|
473
|
+
if (admission.kind !== "accepted" && admission.kind !== "replaced") {
|
|
474
|
+
return admission;
|
|
475
|
+
}
|
|
476
|
+
if (strictCreate && admission.kind === "replaced") {
|
|
477
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_restoreReplacedKeyedReservation).call(this, job, admission.replaced, keyedPolicy, submission.submissionId);
|
|
478
|
+
return {
|
|
479
|
+
kind: "rejected",
|
|
480
|
+
key: admission.key,
|
|
481
|
+
reason: "queue-depth",
|
|
482
|
+
active: admission.state.active.length,
|
|
483
|
+
queued: admission.state.queued.length,
|
|
484
|
+
limit: keyedPolicy.queue.maxQueuedPerKey,
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
if (admission.kind === "replaced") {
|
|
488
|
+
try {
|
|
489
|
+
const skippedMsgId = stableMessageIds
|
|
490
|
+
? `trellis-job-skipped:${submission.submissionId}:${admission.replaced.id}`
|
|
491
|
+
: undefined;
|
|
492
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishSkipped).call(this, type, admission.replaced, now, skippedMsgId);
|
|
493
|
+
}
|
|
494
|
+
catch (error) {
|
|
495
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_restoreReplacedKeyedReservation).call(this, job, admission.replaced, keyedPolicy, submission.submissionId);
|
|
496
|
+
throw error;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
try {
|
|
500
|
+
const createdMsgId = stableMessageIds
|
|
501
|
+
? `trellis-job-created:${submission.submissionId}`
|
|
502
|
+
: undefined;
|
|
503
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, type, id, event, createdMsgId);
|
|
504
|
+
}
|
|
505
|
+
catch (error) {
|
|
506
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_removeQueuedKeyedReservation).call(this, job, keyedPolicy);
|
|
507
|
+
throw error;
|
|
508
|
+
}
|
|
509
|
+
if (admission.kind === "replaced") {
|
|
510
|
+
return {
|
|
511
|
+
kind: "replaced",
|
|
512
|
+
key: admission.key,
|
|
513
|
+
replaced: {
|
|
514
|
+
service: admission.replaced.service,
|
|
515
|
+
jobType: admission.replaced.jobType,
|
|
516
|
+
id: admission.replaced.id,
|
|
517
|
+
},
|
|
518
|
+
job,
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
return { kind: "accepted", job, key: admission.key };
|
|
522
|
+
}
|
|
523
|
+
const createdMsgId = stableMessageIds
|
|
524
|
+
? `trellis-job-created:${submission.submissionId}`
|
|
525
|
+
: undefined;
|
|
526
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, type, id, event, createdMsgId);
|
|
527
|
+
return { kind: "accepted", job };
|
|
528
|
+
}, _JobManager_admitKeyedCreate = async function _JobManager_admitKeyedCreate(args) {
|
|
529
|
+
const coordinator = __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator;
|
|
530
|
+
if (!coordinator) {
|
|
531
|
+
throw new Error(`Keyed jobs queue '${args.type}' requires the JOBS_KEYS coordinator`);
|
|
532
|
+
}
|
|
533
|
+
return await coordinator.admitCreate({
|
|
534
|
+
service: args.job.service,
|
|
535
|
+
jobType: args.type,
|
|
536
|
+
jobId: args.job.id,
|
|
537
|
+
payload: args.job.payload,
|
|
538
|
+
context: args.event.context,
|
|
539
|
+
createdAt: args.event.timestamp,
|
|
540
|
+
policy: args.policy,
|
|
541
|
+
strictCreate: args.strictCreate,
|
|
542
|
+
...(args.submissionId ? { submissionId: args.submissionId } : {}),
|
|
543
|
+
});
|
|
544
|
+
}, _JobManager_removeQueuedKeyedReservation = async function _JobManager_removeQueuedKeyedReservation(job, policy) {
|
|
545
|
+
const coordinator = __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator;
|
|
546
|
+
if (!coordinator)
|
|
547
|
+
return;
|
|
548
|
+
await coordinator.removeQueuedJob({
|
|
549
|
+
service: job.service,
|
|
550
|
+
jobType: job.type,
|
|
551
|
+
jobId: job.id,
|
|
552
|
+
payload: job.payload,
|
|
553
|
+
now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
|
|
554
|
+
policy,
|
|
555
|
+
});
|
|
556
|
+
}, _JobManager_restoreReplacedKeyedReservation = async function _JobManager_restoreReplacedKeyedReservation(job, replaced, policy, submissionId) {
|
|
557
|
+
const coordinator = __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator;
|
|
558
|
+
if (!coordinator)
|
|
559
|
+
return;
|
|
560
|
+
await coordinator.restoreReplacedQueuedJob({
|
|
561
|
+
service: job.service,
|
|
562
|
+
jobType: job.type,
|
|
563
|
+
replacementJobId: job.id,
|
|
564
|
+
replaced,
|
|
565
|
+
payload: job.payload,
|
|
566
|
+
now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
|
|
567
|
+
policy,
|
|
568
|
+
...(submissionId ? { submissionId } : {}),
|
|
569
|
+
});
|
|
570
|
+
}, _JobManager_publishSkipped = async function _JobManager_publishSkipped(type, replaced, timestamp, stableMessageId) {
|
|
571
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, type, replaced.id, {
|
|
572
|
+
jobId: replaced.id,
|
|
573
|
+
service: __classPrivateFieldGet(this, _JobManager_context, "f").jobs.namespace,
|
|
574
|
+
jobType: type,
|
|
575
|
+
eventType: "skipped",
|
|
576
|
+
state: "skipped",
|
|
577
|
+
previousState: "pending",
|
|
578
|
+
context: replaced.context,
|
|
579
|
+
tries: 0,
|
|
580
|
+
error: "replaced by newer keyed job",
|
|
581
|
+
timestamp,
|
|
582
|
+
}, stableMessageId);
|
|
583
|
+
}, _JobManager_keyedHeartbeat = function _JobManager_keyedHeartbeat(job, lease, heartbeat) {
|
|
584
|
+
return async () => {
|
|
585
|
+
await heartbeat();
|
|
586
|
+
const renewed = await __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator.renewHeartbeat({
|
|
587
|
+
service: job.service,
|
|
588
|
+
jobType: job.type,
|
|
589
|
+
jobId: job.id,
|
|
590
|
+
lease,
|
|
591
|
+
now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
|
|
592
|
+
});
|
|
593
|
+
if (renewed.kind === "lost") {
|
|
594
|
+
(0, mod_js_1.recordTrellisError)(new active_job_js_1.ActiveJobRuntimeError("keyed job slot lease was lost"), {
|
|
595
|
+
surface: "job",
|
|
596
|
+
direction: "worker",
|
|
597
|
+
operation: job.type,
|
|
598
|
+
phase: "heartbeat",
|
|
599
|
+
});
|
|
600
|
+
}
|
|
601
|
+
};
|
|
602
|
+
}, _JobManager_releaseKeyedSlot = async function _JobManager_releaseKeyedSlot(job, lease) {
|
|
603
|
+
if (!lease)
|
|
604
|
+
return undefined;
|
|
605
|
+
const released = await __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator.releaseActiveSlot({
|
|
606
|
+
service: job.service,
|
|
607
|
+
jobType: job.type,
|
|
608
|
+
jobId: job.id,
|
|
609
|
+
lease,
|
|
610
|
+
now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
|
|
611
|
+
});
|
|
612
|
+
return released.kind === "released" ? "released" : "staleCompletion";
|
|
613
|
+
}, _JobManager_releaseKeyedSlotAfterPublishFailure = async function _JobManager_releaseKeyedSlotAfterPublishFailure(job, lease, publishError) {
|
|
614
|
+
try {
|
|
615
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
|
|
616
|
+
}
|
|
617
|
+
catch (cleanupError) {
|
|
618
|
+
(0, mod_js_1.recordTrellisError)(cleanupError, {
|
|
619
|
+
surface: "job",
|
|
620
|
+
direction: "worker",
|
|
621
|
+
operation: job.type,
|
|
622
|
+
phase: "keyed_slot_cleanup",
|
|
623
|
+
});
|
|
624
|
+
(0, mod_js_1.recordTrellisError)(publishError, {
|
|
625
|
+
surface: "job",
|
|
626
|
+
direction: "worker",
|
|
627
|
+
operation: job.type,
|
|
628
|
+
phase: "publish",
|
|
629
|
+
});
|
|
630
|
+
}
|
|
631
|
+
}, _JobManager_publishStaleCompletionIgnored = async function _JobManager_publishStaleCompletionIgnored(job, tries) {
|
|
632
|
+
await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
|
|
633
|
+
jobId: job.id,
|
|
634
|
+
service: job.service,
|
|
635
|
+
jobType: job.type,
|
|
636
|
+
eventType: "staleCompletionIgnored",
|
|
637
|
+
state: "stale",
|
|
638
|
+
previousState: "active",
|
|
639
|
+
context: job.context,
|
|
640
|
+
tries,
|
|
641
|
+
error: "keyed job slot lease was lost before completion",
|
|
642
|
+
timestamp: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
|
|
643
|
+
});
|
|
293
644
|
};
|
|
645
|
+
function getKeyPolicy(binding) {
|
|
646
|
+
if (!binding.keyConcurrency) {
|
|
647
|
+
return undefined;
|
|
648
|
+
}
|
|
649
|
+
return (0, key_coordinator_js_1.normalizeJobKeyPolicy)({
|
|
650
|
+
keyConcurrency: binding.keyConcurrency,
|
|
651
|
+
queue: binding.queue,
|
|
652
|
+
});
|
|
653
|
+
}
|
|
654
|
+
function startAutoHeartbeat(heartbeat, intervalMs) {
|
|
655
|
+
const timer = setInterval(() => {
|
|
656
|
+
void heartbeat().catch((error) => {
|
|
657
|
+
(0, mod_js_1.recordTrellisError)(error, {
|
|
658
|
+
surface: "job",
|
|
659
|
+
direction: "worker",
|
|
660
|
+
phase: "heartbeat",
|
|
661
|
+
});
|
|
662
|
+
});
|
|
663
|
+
}, intervalMs);
|
|
664
|
+
return () => clearInterval(timer);
|
|
665
|
+
}
|
|
294
666
|
function computeDeadline(now, deadlineMs) {
|
|
295
667
|
if (deadlineMs === undefined) {
|
|
296
668
|
return undefined;
|
|
@@ -314,13 +686,16 @@ function createJobContext() {
|
|
|
314
686
|
...(tracestate ? { tracestate } : {}),
|
|
315
687
|
};
|
|
316
688
|
}
|
|
317
|
-
function headersFromJobContext(context) {
|
|
689
|
+
function headersFromJobContext(context, stableMessageId) {
|
|
318
690
|
const headers = (0, nats_core_1.headers)();
|
|
319
691
|
headers.set("request-id", context.requestId);
|
|
320
692
|
headers.set("traceparent", context.traceparent);
|
|
321
693
|
if (context.tracestate) {
|
|
322
694
|
headers.set("tracestate", context.tracestate);
|
|
323
695
|
}
|
|
696
|
+
if (stableMessageId) {
|
|
697
|
+
headers.set("Nats-Msg-Id", stableMessageId);
|
|
698
|
+
}
|
|
324
699
|
return headers;
|
|
325
700
|
}
|
|
326
701
|
function isValidTraceparent(value) {
|