@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
package/script/server/service.js
CHANGED
|
@@ -43,7 +43,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
43
43
|
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");
|
|
44
44
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
45
45
|
};
|
|
46
|
-
var _InternalStoreHandle_nc, _TrellisService_instances, _TrellisService_server, _TrellisService_nc, _TrellisService_handlerTrellis, _TrellisService_operationTransfer, _TrellisService_stopHealthPublishing, _TrellisService_managedJobWorkers,
|
|
46
|
+
var _InternalStoreHandle_nc, _TrellisService_instances, _TrellisService_server, _TrellisService_nc, _TrellisService_handlerTrellis, _TrellisService_operationTransfer, _TrellisService_stopHealthPublishing, _TrellisService_managedJobWorkers, _TrellisService_contractJobs, _TrellisService_jobsBinding, _TrellisService_ownedOutboxDispatchers, _TrellisService_waitPromise, _TrellisService_stopPromise, _TrellisService_createHandleFacade, _TrellisService_createSqlOutboxBinding, _TrellisService_createSqlOutbox, _TrellisService_operation;
|
|
47
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
48
|
exports.TrellisService = exports.StoreHandle = void 0;
|
|
49
49
|
exports.createConnectedService = createConnectedService;
|
|
@@ -68,11 +68,70 @@ const runtime_transport_js_1 = require("../runtime_transport.js");
|
|
|
68
68
|
const server_logger_js_1 = require("../server_logger.js");
|
|
69
69
|
const index_js_1 = require("../errors/index.js");
|
|
70
70
|
const jobs_js_1 = require("../jobs.js");
|
|
71
|
+
const ulid_1 = require("ulid");
|
|
71
72
|
const job_manager_js_1 = require("./internal_jobs/job-manager.js");
|
|
72
73
|
const runtime_worker_js_1 = require("./internal_jobs/runtime-worker.js");
|
|
74
|
+
const key_coordinator_js_1 = require("./internal_jobs/key-coordinator.js");
|
|
73
75
|
const types_js_1 = require("./internal_jobs/types.js");
|
|
74
76
|
const connection_js_1 = require("../connection.js");
|
|
75
77
|
const init_js_1 = require("../telemetry/init.js");
|
|
78
|
+
const mod_js_2 = require("../telemetry/mod.js");
|
|
79
|
+
const outbox_inbox_js_1 = require("../service/outbox_inbox.js");
|
|
80
|
+
function normalizeResourceJobsBinding(binding) {
|
|
81
|
+
const queues = {};
|
|
82
|
+
for (const [name, queue] of Object.entries(binding.queues)) {
|
|
83
|
+
const baseQueue = baseJobsQueueBinding(queue);
|
|
84
|
+
if (!queue.keyConcurrency) {
|
|
85
|
+
queues[name] = {
|
|
86
|
+
...baseQueue,
|
|
87
|
+
...(queue.queue ? { queue: normalizeQueuePolicy(queue.queue) } : {}),
|
|
88
|
+
};
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const policy = (0, key_coordinator_js_1.normalizeJobKeyPolicy)({
|
|
92
|
+
keyConcurrency: queue.keyConcurrency,
|
|
93
|
+
queue: queue.queue,
|
|
94
|
+
});
|
|
95
|
+
queues[name] = {
|
|
96
|
+
...baseQueue,
|
|
97
|
+
keyConcurrency: {
|
|
98
|
+
key: policy.key,
|
|
99
|
+
maxActive: policy.maxActive,
|
|
100
|
+
heartbeatIntervalMs: policy.heartbeatIntervalMs,
|
|
101
|
+
heartbeatTtlMs: policy.heartbeatTtlMs,
|
|
102
|
+
stalePolicy: policy.stalePolicy,
|
|
103
|
+
},
|
|
104
|
+
queue: policy.queue,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
return { namespace: binding.namespace, queues };
|
|
108
|
+
}
|
|
109
|
+
function baseJobsQueueBinding(queue) {
|
|
110
|
+
return {
|
|
111
|
+
queueType: queue.queueType,
|
|
112
|
+
publishPrefix: queue.publishPrefix,
|
|
113
|
+
workSubject: queue.workSubject,
|
|
114
|
+
consumerName: queue.consumerName,
|
|
115
|
+
payload: queue.payload,
|
|
116
|
+
...(queue.result ? { result: queue.result } : {}),
|
|
117
|
+
maxDeliver: queue.maxDeliver,
|
|
118
|
+
backoffMs: queue.backoffMs,
|
|
119
|
+
ackWaitMs: queue.ackWaitMs,
|
|
120
|
+
...(queue.defaultDeadlineMs !== undefined
|
|
121
|
+
? { defaultDeadlineMs: queue.defaultDeadlineMs }
|
|
122
|
+
: {}),
|
|
123
|
+
progress: queue.progress,
|
|
124
|
+
logs: queue.logs,
|
|
125
|
+
dlq: queue.dlq,
|
|
126
|
+
concurrency: queue.concurrency,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function normalizeQueuePolicy(queue) {
|
|
130
|
+
return {
|
|
131
|
+
maxQueuedPerKey: queue.maxQueuedPerKey ?? 0,
|
|
132
|
+
whenFull: queue.whenFull ?? "reject",
|
|
133
|
+
};
|
|
134
|
+
}
|
|
76
135
|
const ClientTransportEndpointsSchema = typebox_1.Type.Object({
|
|
77
136
|
natsServers: typebox_1.Type.Array(typebox_1.Type.String({ minLength: 1 }), { minItems: 1 }),
|
|
78
137
|
});
|
|
@@ -548,6 +607,7 @@ async function createConnectedService(args) {
|
|
|
548
607
|
metadata: args.contractEventConsumers,
|
|
549
608
|
bindings: args.bindings.eventConsumers,
|
|
550
609
|
},
|
|
610
|
+
durableEventConsumerBeforeReadinessCheck: args.durableEventConsumerBeforeReadinessCheck,
|
|
551
611
|
connection,
|
|
552
612
|
});
|
|
553
613
|
let transfer;
|
|
@@ -573,6 +633,7 @@ async function createConnectedService(args) {
|
|
|
573
633
|
prepare: (event, data) => outbound.prepare(event, data),
|
|
574
634
|
publish: (event, data) => outbound.publish(event, data),
|
|
575
635
|
publishPrepared: (event) => outbound.publishPrepared(event),
|
|
636
|
+
stopEventListeners: () => outbound.stopEventListeners(),
|
|
576
637
|
get kv() {
|
|
577
638
|
return getHandlerResources().kv;
|
|
578
639
|
},
|
|
@@ -676,6 +737,147 @@ function toUnexpectedError(cause) {
|
|
|
676
737
|
? cause
|
|
677
738
|
: new index_js_1.UnexpectedError({ cause });
|
|
678
739
|
}
|
|
740
|
+
function resolveSqlOutboxTables(tables) {
|
|
741
|
+
return {
|
|
742
|
+
outbox: tables?.outbox ?? outbox_inbox_js_1.defaultSqlOutboxTables.outbox,
|
|
743
|
+
inbox: tables?.inbox ?? outbox_inbox_js_1.defaultSqlOutboxTables.inbox,
|
|
744
|
+
};
|
|
745
|
+
}
|
|
746
|
+
function createSqlOutboxBaseExecutor(options) {
|
|
747
|
+
return options.executor;
|
|
748
|
+
}
|
|
749
|
+
function createSqlOutboxTransactionRunner(options) {
|
|
750
|
+
return options.transaction;
|
|
751
|
+
}
|
|
752
|
+
function createSqlOutboxEventEnqueueFacade(args) {
|
|
753
|
+
const facade = {};
|
|
754
|
+
const source = args.event;
|
|
755
|
+
for (const [groupName, leaves] of Object.entries(source)) {
|
|
756
|
+
const group = {};
|
|
757
|
+
for (const [leafName, leaf] of Object.entries(leaves)) {
|
|
758
|
+
group[leafName] = {
|
|
759
|
+
enqueue: (payload) => result_1.AsyncResult.from((async () => {
|
|
760
|
+
const prepared = leaf.prepare(payload).take();
|
|
761
|
+
if ((0, result_1.isErr)(prepared))
|
|
762
|
+
return result_1.Result.err(prepared.error);
|
|
763
|
+
const record = (0, outbox_inbox_js_1.preparedTrellisEventToOutboxRecord)(prepared);
|
|
764
|
+
try {
|
|
765
|
+
const message = await args.repository.enqueue(record);
|
|
766
|
+
args.onEnqueued();
|
|
767
|
+
return result_1.Result.ok(message);
|
|
768
|
+
}
|
|
769
|
+
catch (cause) {
|
|
770
|
+
return result_1.Result.err(toUnexpectedError(cause));
|
|
771
|
+
}
|
|
772
|
+
})()),
|
|
773
|
+
};
|
|
774
|
+
}
|
|
775
|
+
Object.defineProperty(facade, groupName, {
|
|
776
|
+
value: group,
|
|
777
|
+
enumerable: true,
|
|
778
|
+
configurable: true,
|
|
779
|
+
});
|
|
780
|
+
}
|
|
781
|
+
return facade;
|
|
782
|
+
}
|
|
783
|
+
function createSqlOutboxJobEnqueueFacade(args) {
|
|
784
|
+
const facade = {};
|
|
785
|
+
for (const queueType of Object.keys(args.contractJobs)) {
|
|
786
|
+
const queueBinding = args.jobsBinding?.queues[queueType];
|
|
787
|
+
const queue = queueType;
|
|
788
|
+
facade[queue] = {
|
|
789
|
+
create: (payload) => {
|
|
790
|
+
if (!queueBinding) {
|
|
791
|
+
return result_1.AsyncResult.err(new index_js_1.ValidationError({
|
|
792
|
+
errors: [{
|
|
793
|
+
path: "/",
|
|
794
|
+
message: `Jobs binding unavailable for queue '${queue}'`,
|
|
795
|
+
}],
|
|
796
|
+
}));
|
|
797
|
+
}
|
|
798
|
+
const submissionId = (0, ulid_1.ulid)();
|
|
799
|
+
const jobId = (0, ulid_1.ulid)();
|
|
800
|
+
const context = (0, job_manager_js_1.createJobContext)();
|
|
801
|
+
const record = {
|
|
802
|
+
id: submissionId,
|
|
803
|
+
kind: "job.create",
|
|
804
|
+
name: queue,
|
|
805
|
+
subject: `${queueBinding.publishPrefix}.${jobId}.created`,
|
|
806
|
+
payload: JSON.stringify({
|
|
807
|
+
...payload,
|
|
808
|
+
jobId,
|
|
809
|
+
submissionId,
|
|
810
|
+
}),
|
|
811
|
+
headers: {
|
|
812
|
+
"request-id": context.requestId,
|
|
813
|
+
"traceparent": context.traceparent,
|
|
814
|
+
...(context.tracestate ? { "tracestate": context.tracestate } : {}),
|
|
815
|
+
},
|
|
816
|
+
};
|
|
817
|
+
return result_1.AsyncResult.from((async () => {
|
|
818
|
+
try {
|
|
819
|
+
await args.repository.enqueue(record);
|
|
820
|
+
args.onEnqueued();
|
|
821
|
+
return result_1.Result.ok({
|
|
822
|
+
submissionId,
|
|
823
|
+
jobId,
|
|
824
|
+
queue,
|
|
825
|
+
mode: "create",
|
|
826
|
+
});
|
|
827
|
+
}
|
|
828
|
+
catch (cause) {
|
|
829
|
+
return result_1.Result.err(toUnexpectedError(cause));
|
|
830
|
+
}
|
|
831
|
+
})());
|
|
832
|
+
},
|
|
833
|
+
submit: (payload) => {
|
|
834
|
+
if (!queueBinding) {
|
|
835
|
+
return result_1.AsyncResult.err(new index_js_1.ValidationError({
|
|
836
|
+
errors: [{
|
|
837
|
+
path: "/",
|
|
838
|
+
message: `Jobs binding unavailable for queue '${queue}'`,
|
|
839
|
+
}],
|
|
840
|
+
}));
|
|
841
|
+
}
|
|
842
|
+
const submissionId = (0, ulid_1.ulid)();
|
|
843
|
+
const jobId = (0, ulid_1.ulid)();
|
|
844
|
+
const context = (0, job_manager_js_1.createJobContext)();
|
|
845
|
+
const record = {
|
|
846
|
+
id: submissionId,
|
|
847
|
+
kind: "job.submit",
|
|
848
|
+
name: queue,
|
|
849
|
+
subject: `${queueBinding.publishPrefix}.${jobId}.created`,
|
|
850
|
+
payload: JSON.stringify({
|
|
851
|
+
...payload,
|
|
852
|
+
jobId,
|
|
853
|
+
submissionId,
|
|
854
|
+
}),
|
|
855
|
+
headers: {
|
|
856
|
+
"request-id": context.requestId,
|
|
857
|
+
"traceparent": context.traceparent,
|
|
858
|
+
...(context.tracestate ? { "tracestate": context.tracestate } : {}),
|
|
859
|
+
},
|
|
860
|
+
};
|
|
861
|
+
return result_1.AsyncResult.from((async () => {
|
|
862
|
+
try {
|
|
863
|
+
await args.repository.enqueue(record);
|
|
864
|
+
args.onEnqueued();
|
|
865
|
+
return result_1.Result.ok({
|
|
866
|
+
submissionId,
|
|
867
|
+
jobId,
|
|
868
|
+
queue,
|
|
869
|
+
mode: "submit",
|
|
870
|
+
});
|
|
871
|
+
}
|
|
872
|
+
catch (cause) {
|
|
873
|
+
return result_1.Result.err(toUnexpectedError(cause));
|
|
874
|
+
}
|
|
875
|
+
})());
|
|
876
|
+
},
|
|
877
|
+
};
|
|
878
|
+
}
|
|
879
|
+
return facade;
|
|
880
|
+
}
|
|
679
881
|
function serializeJobHandlerError(error) {
|
|
680
882
|
try {
|
|
681
883
|
return JSON.stringify(error.toSerializable());
|
|
@@ -700,7 +902,8 @@ function wrapVoidTask(task) {
|
|
|
700
902
|
}
|
|
701
903
|
function isTerminalJobState(state) {
|
|
702
904
|
return state === "completed" || state === "failed" || state === "cancelled" ||
|
|
703
|
-
state === "expired" || state === "
|
|
905
|
+
state === "expired" || state === "skipped" || state === "stale" ||
|
|
906
|
+
state === "dead" || state === "dismissed";
|
|
704
907
|
}
|
|
705
908
|
function isTerminalJobSnapshot(snapshot) {
|
|
706
909
|
return isTerminalJobState(snapshot.state);
|
|
@@ -798,6 +1001,9 @@ function snapshotFromLifecycleEvent(current, event) {
|
|
|
798
1001
|
case "failed":
|
|
799
1002
|
case "cancelled":
|
|
800
1003
|
case "expired":
|
|
1004
|
+
case "skipped":
|
|
1005
|
+
case "stale":
|
|
1006
|
+
case "staleCompletionIgnored":
|
|
801
1007
|
case "dead":
|
|
802
1008
|
case "dismissed":
|
|
803
1009
|
return event.error === undefined ? base : {
|
|
@@ -974,17 +1180,20 @@ function createJobsFacade(args) {
|
|
|
974
1180
|
const handlers = new Map();
|
|
975
1181
|
const jobsFacade = {};
|
|
976
1182
|
const lifecycle = createJobLifecycleTracker(args.nc);
|
|
1183
|
+
const keyCoordinator = (0, key_coordinator_js_1.createNatsJobKeyCoordinator)(args.nc);
|
|
1184
|
+
const jobsBinding = args.jobsBinding
|
|
1185
|
+
? normalizeResourceJobsBinding(args.jobsBinding)
|
|
1186
|
+
: undefined;
|
|
977
1187
|
let activeHost;
|
|
978
1188
|
let startupPromise;
|
|
979
1189
|
let stopPromise;
|
|
980
1190
|
for (const queueType of Object.keys(args.contractJobs ?? {})) {
|
|
981
|
-
const queueBinding =
|
|
1191
|
+
const queueBinding = jobsBinding?.queues[queueType];
|
|
982
1192
|
if (queueBinding)
|
|
983
1193
|
lifecycle.watch(queueBinding);
|
|
984
1194
|
jobsFacade[queueType] = {
|
|
985
1195
|
create: (payload) => result_1.AsyncResult.from((async () => {
|
|
986
1196
|
try {
|
|
987
|
-
const jobsBinding = args.jobsBinding;
|
|
988
1197
|
if (!jobsBinding) {
|
|
989
1198
|
return result_1.Result.err(toUnexpectedError(new Error("Jobs bindings are unavailable")));
|
|
990
1199
|
}
|
|
@@ -995,6 +1204,7 @@ function createJobsFacade(args) {
|
|
|
995
1204
|
const manager = new job_manager_js_1.JobManager({
|
|
996
1205
|
nc: args.nc,
|
|
997
1206
|
jobs: jobsBinding,
|
|
1207
|
+
keyCoordinator,
|
|
998
1208
|
});
|
|
999
1209
|
await args.nc.flush();
|
|
1000
1210
|
const created = await manager.create(queueType, payload);
|
|
@@ -1007,6 +1217,60 @@ function createJobsFacade(args) {
|
|
|
1007
1217
|
lifecycle,
|
|
1008
1218
|
}));
|
|
1009
1219
|
}
|
|
1220
|
+
catch (cause) {
|
|
1221
|
+
if (cause instanceof jobs_js_1.JobNotEnqueuedError) {
|
|
1222
|
+
return result_1.Result.err(cause);
|
|
1223
|
+
}
|
|
1224
|
+
return result_1.Result.err(toUnexpectedError(cause));
|
|
1225
|
+
}
|
|
1226
|
+
})()),
|
|
1227
|
+
submit: (payload) => result_1.AsyncResult.from((async () => {
|
|
1228
|
+
try {
|
|
1229
|
+
if (!jobsBinding) {
|
|
1230
|
+
return result_1.Result.err(toUnexpectedError(new Error("Jobs bindings are unavailable")));
|
|
1231
|
+
}
|
|
1232
|
+
const queueBinding = jobsBinding.queues[queueType];
|
|
1233
|
+
if (!queueBinding) {
|
|
1234
|
+
return result_1.Result.err(toUnexpectedError(new Error(`Jobs binding for queue '${queueType}' is unavailable`)));
|
|
1235
|
+
}
|
|
1236
|
+
const manager = new job_manager_js_1.JobManager({
|
|
1237
|
+
nc: args.nc,
|
|
1238
|
+
jobs: jobsBinding,
|
|
1239
|
+
keyCoordinator,
|
|
1240
|
+
});
|
|
1241
|
+
await args.nc.flush();
|
|
1242
|
+
const outcome = await manager.submit(queueType, payload);
|
|
1243
|
+
if (outcome.kind === "accepted") {
|
|
1244
|
+
return result_1.Result.ok({
|
|
1245
|
+
kind: "accepted",
|
|
1246
|
+
key: outcome.key,
|
|
1247
|
+
ref: createJobRef({
|
|
1248
|
+
nc: args.nc,
|
|
1249
|
+
queueType,
|
|
1250
|
+
jobsBinding,
|
|
1251
|
+
queueBinding,
|
|
1252
|
+
seed: outcome.job,
|
|
1253
|
+
lifecycle,
|
|
1254
|
+
}),
|
|
1255
|
+
});
|
|
1256
|
+
}
|
|
1257
|
+
if (outcome.kind === "replaced") {
|
|
1258
|
+
return result_1.Result.ok({
|
|
1259
|
+
kind: "replaced",
|
|
1260
|
+
key: outcome.key,
|
|
1261
|
+
replaced: outcome.replaced,
|
|
1262
|
+
ref: createJobRef({
|
|
1263
|
+
nc: args.nc,
|
|
1264
|
+
queueType,
|
|
1265
|
+
jobsBinding,
|
|
1266
|
+
queueBinding,
|
|
1267
|
+
seed: outcome.job,
|
|
1268
|
+
lifecycle,
|
|
1269
|
+
}),
|
|
1270
|
+
});
|
|
1271
|
+
}
|
|
1272
|
+
return result_1.Result.ok(outcome);
|
|
1273
|
+
}
|
|
1010
1274
|
catch (cause) {
|
|
1011
1275
|
return result_1.Result.err(toUnexpectedError(cause));
|
|
1012
1276
|
}
|
|
@@ -1040,10 +1304,9 @@ function createJobsFacade(args) {
|
|
|
1040
1304
|
activeHost = host;
|
|
1041
1305
|
return result_1.Result.ok(host);
|
|
1042
1306
|
}
|
|
1043
|
-
if (!
|
|
1307
|
+
if (!jobsBinding || !args.workStream) {
|
|
1044
1308
|
return result_1.Result.err(toUnexpectedError(new Error("Jobs infrastructure bindings are unavailable for this service")));
|
|
1045
1309
|
}
|
|
1046
|
-
const jobsBinding = args.jobsBinding;
|
|
1047
1310
|
const workStream = args.workStream;
|
|
1048
1311
|
const hosts = [];
|
|
1049
1312
|
try {
|
|
@@ -1059,6 +1322,7 @@ function createJobsFacade(args) {
|
|
|
1059
1322
|
const manager = new job_manager_js_1.JobManager({
|
|
1060
1323
|
nc: args.nc,
|
|
1061
1324
|
jobs: jobsBinding,
|
|
1325
|
+
keyCoordinator,
|
|
1062
1326
|
});
|
|
1063
1327
|
const host = await (0, runtime_worker_js_1.startNatsWorkerHostFromBinding)({
|
|
1064
1328
|
jobs: jobsBinding,
|
|
@@ -1068,6 +1332,7 @@ function createJobsFacade(args) {
|
|
|
1068
1332
|
instanceId: `${args.serviceName}-worker`,
|
|
1069
1333
|
queueTypes: [queueType],
|
|
1070
1334
|
manager,
|
|
1335
|
+
heartbeatPublisher: args.nc,
|
|
1071
1336
|
getProjectedJob: async (job) => {
|
|
1072
1337
|
return lifecycle.get({
|
|
1073
1338
|
service: job.service,
|
|
@@ -1176,24 +1441,6 @@ function createJobsFacade(args) {
|
|
|
1176
1441
|
});
|
|
1177
1442
|
return jobsFacade;
|
|
1178
1443
|
}
|
|
1179
|
-
function createBoundJobsFacade(args) {
|
|
1180
|
-
const boundJobs = {};
|
|
1181
|
-
const jobs = args.jobs;
|
|
1182
|
-
for (const queueType of Object.keys(jobs)) {
|
|
1183
|
-
const queue = jobs[queueType];
|
|
1184
|
-
if (!queue)
|
|
1185
|
-
continue;
|
|
1186
|
-
boundJobs[queueType] = {
|
|
1187
|
-
create: (payload) => queue.create(payload),
|
|
1188
|
-
handle: (handler) => queue.handle(({ job, client }) => handler({
|
|
1189
|
-
job,
|
|
1190
|
-
client,
|
|
1191
|
-
deps: args.deps,
|
|
1192
|
-
})),
|
|
1193
|
-
};
|
|
1194
|
-
}
|
|
1195
|
-
return boundJobs;
|
|
1196
|
-
}
|
|
1197
1444
|
/**
|
|
1198
1445
|
* Connects a service with caller-supplied runtime dependencies for tests and
|
|
1199
1446
|
* Trellis-owned internals. This helper is intentionally not re-exported from
|
|
@@ -1203,6 +1450,7 @@ function createBoundJobsFacade(args) {
|
|
|
1203
1450
|
*/
|
|
1204
1451
|
function connectTrellisServiceWithRuntimeDeps(args, deps) {
|
|
1205
1452
|
return result_1.AsyncResult.from((async () => {
|
|
1453
|
+
const totalStartedAt = performance.now();
|
|
1206
1454
|
try {
|
|
1207
1455
|
const runtimeDeps = {
|
|
1208
1456
|
...(await loadDefaultServiceRuntimeDeps()),
|
|
@@ -1213,6 +1461,7 @@ function connectTrellisServiceWithRuntimeDeps(args, deps) {
|
|
|
1213
1461
|
}
|
|
1214
1462
|
const auth = await (0, auth_js_2.createAuth)({ sessionKeySeed: args.sessionKeySeed });
|
|
1215
1463
|
const bootstrapLog = resolveServiceLogger(args.server?.log);
|
|
1464
|
+
const bootstrapStartedAt = performance.now();
|
|
1216
1465
|
const bootstrap = await fetchServiceBootstrapInfo({
|
|
1217
1466
|
trellisUrl: args.trellisUrl,
|
|
1218
1467
|
serviceName: args.name,
|
|
@@ -1222,12 +1471,18 @@ function connectTrellisServiceWithRuntimeDeps(args, deps) {
|
|
|
1222
1471
|
auth,
|
|
1223
1472
|
log: bootstrapLog,
|
|
1224
1473
|
});
|
|
1474
|
+
(0, mod_js_2.recordTrellisDuration)("trellis.connect.duration", performance.now() - bootstrapStartedAt, {
|
|
1475
|
+
phase: "bootstrap",
|
|
1476
|
+
participantKind: "service",
|
|
1477
|
+
outcome: "ok",
|
|
1478
|
+
});
|
|
1225
1479
|
const { authenticator: authTokenAuthenticator, inboxPrefix } = await auth
|
|
1226
1480
|
.natsConnectOptions({
|
|
1227
1481
|
contractDigest: args.contract.CONTRACT_DIGEST,
|
|
1228
1482
|
});
|
|
1229
1483
|
let nc;
|
|
1230
1484
|
try {
|
|
1485
|
+
const natsStartedAt = performance.now();
|
|
1231
1486
|
nc = await runtimeDeps.connect({
|
|
1232
1487
|
servers: (0, runtime_transport_js_1.selectRuntimeTransportServers)(bootstrap.connectInfo.transports),
|
|
1233
1488
|
maxReconnectAttempts: runtime_transport_js_1.DEFAULT_RUNTIME_MAX_RECONNECT_ATTEMPTS,
|
|
@@ -1238,6 +1493,11 @@ function connectTrellisServiceWithRuntimeDeps(args, deps) {
|
|
|
1238
1493
|
(0, nats_core_1.jwtAuthenticator)(bootstrap.connectInfo.transport.sentinel.jwt, new TextEncoder().encode(bootstrap.connectInfo.transport.sentinel.seed)),
|
|
1239
1494
|
],
|
|
1240
1495
|
});
|
|
1496
|
+
(0, mod_js_2.recordTrellisDuration)("trellis.connect.duration", performance.now() - natsStartedAt, {
|
|
1497
|
+
phase: "nats_connect",
|
|
1498
|
+
participantKind: "service",
|
|
1499
|
+
outcome: "ok",
|
|
1500
|
+
});
|
|
1241
1501
|
}
|
|
1242
1502
|
catch (cause) {
|
|
1243
1503
|
throw new index_js_1.TransportError({
|
|
@@ -1263,7 +1523,7 @@ function connectTrellisServiceWithRuntimeDeps(args, deps) {
|
|
|
1263
1523
|
...(args.server ?? {}),
|
|
1264
1524
|
api: args.contract.API.owned,
|
|
1265
1525
|
};
|
|
1266
|
-
|
|
1526
|
+
const service = await createConnectedService({
|
|
1267
1527
|
name: args.name,
|
|
1268
1528
|
auth,
|
|
1269
1529
|
nc,
|
|
@@ -1274,7 +1534,14 @@ function connectTrellisServiceWithRuntimeDeps(args, deps) {
|
|
|
1274
1534
|
contractEventConsumers: args.contract.CONTRACT.eventConsumers,
|
|
1275
1535
|
server,
|
|
1276
1536
|
bindings: bootstrap.binding.resources,
|
|
1277
|
-
|
|
1537
|
+
durableEventConsumerBeforeReadinessCheck: runtimeDeps.durableEventConsumerBeforeReadinessCheck,
|
|
1538
|
+
});
|
|
1539
|
+
(0, mod_js_2.recordTrellisDuration)("trellis.connect.duration", performance.now() - totalStartedAt, {
|
|
1540
|
+
phase: "total",
|
|
1541
|
+
participantKind: "service",
|
|
1542
|
+
outcome: "ok",
|
|
1543
|
+
});
|
|
1544
|
+
return result_1.Result.ok(service);
|
|
1278
1545
|
}
|
|
1279
1546
|
catch (cause) {
|
|
1280
1547
|
await closeFailedServiceBootstrapConnection(nc);
|
|
@@ -1351,6 +1618,9 @@ class TrellisService {
|
|
|
1351
1618
|
_TrellisService_operationTransfer.set(this, void 0);
|
|
1352
1619
|
_TrellisService_stopHealthPublishing.set(this, void 0);
|
|
1353
1620
|
_TrellisService_managedJobWorkers.set(this, void 0);
|
|
1621
|
+
_TrellisService_contractJobs.set(this, void 0);
|
|
1622
|
+
_TrellisService_jobsBinding.set(this, void 0);
|
|
1623
|
+
_TrellisService_ownedOutboxDispatchers.set(this, new Set());
|
|
1354
1624
|
_TrellisService_waitPromise.set(this, void 0);
|
|
1355
1625
|
_TrellisService_stopPromise.set(this, void 0);
|
|
1356
1626
|
if (token !== trellisServiceConstructorToken) {
|
|
@@ -1385,33 +1655,20 @@ class TrellisService {
|
|
|
1385
1655
|
});
|
|
1386
1656
|
this.jobs = jobs;
|
|
1387
1657
|
__classPrivateFieldSet(this, _TrellisService_managedJobWorkers, jobs[MANAGED_JOB_WORKERS], "f");
|
|
1658
|
+
__classPrivateFieldSet(this, _TrellisService_contractJobs, contractJobs, "f");
|
|
1659
|
+
__classPrivateFieldSet(this, _TrellisService_jobsBinding, bindings.jobs, "f");
|
|
1388
1660
|
this.health = health;
|
|
1389
1661
|
this.handle = __classPrivateFieldGet(this, _TrellisService_instances, "m", _TrellisService_createHandleFacade).call(this);
|
|
1390
1662
|
this.connection = connection;
|
|
1391
1663
|
__classPrivateFieldSet(this, _TrellisService_stopHealthPublishing, stopHealthPublishing, "f");
|
|
1392
1664
|
}
|
|
1393
1665
|
/**
|
|
1394
|
-
*
|
|
1395
|
-
*
|
|
1666
|
+
* Creates an explicit SQL outbox helper for service-owned transactions.
|
|
1667
|
+
* Services should create this at startup and close over it in handlers.
|
|
1396
1668
|
*/
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
auth: this.auth,
|
|
1401
|
-
event: __classPrivateFieldGet(this, _TrellisService_instances, "m", _TrellisService_createBoundEventFacade).call(this, deps),
|
|
1402
|
-
kv: this.kv,
|
|
1403
|
-
store: this.store,
|
|
1404
|
-
jobs: createBoundJobsFacade({ jobs: this.jobs, deps }),
|
|
1405
|
-
health: __classPrivateFieldGet(this, _TrellisService_instances, "m", _TrellisService_createBoundHealth).call(this, deps),
|
|
1406
|
-
handle: __classPrivateFieldGet(this, _TrellisService_instances, "m", _TrellisService_createBoundHandleFacade).call(this, deps),
|
|
1407
|
-
connection: this.connection,
|
|
1408
|
-
createTransfer: (args) => this.createTransfer(args),
|
|
1409
|
-
completeOperation: (operationId, output) => this.completeOperation(operationId, output),
|
|
1410
|
-
publishPrepared: (event) => this.publishPrepared(event),
|
|
1411
|
-
wait: () => this.wait(),
|
|
1412
|
-
stop: () => this.stop(),
|
|
1413
|
-
with: (nextDeps) => this.with(nextDeps),
|
|
1414
|
-
};
|
|
1669
|
+
createSqlOutbox(options) {
|
|
1670
|
+
const binding = __classPrivateFieldGet(this, _TrellisService_instances, "m", _TrellisService_createSqlOutboxBinding).call(this, options);
|
|
1671
|
+
return __classPrivateFieldGet(this, _TrellisService_instances, "m", _TrellisService_createSqlOutbox).call(this, binding);
|
|
1415
1672
|
}
|
|
1416
1673
|
/** Publishes a prepared event through the service runtime connection. */
|
|
1417
1674
|
publishPrepared(event) {
|
|
@@ -1472,6 +1729,11 @@ class TrellisService {
|
|
|
1472
1729
|
async stop() {
|
|
1473
1730
|
__classPrivateFieldSet(this, _TrellisService_stopPromise, __classPrivateFieldGet(this, _TrellisService_stopPromise, "f") ?? (async () => {
|
|
1474
1731
|
this.connection.stopObserving();
|
|
1732
|
+
__classPrivateFieldGet(this, _TrellisService_handlerTrellis, "f").stopEventListeners();
|
|
1733
|
+
for (const dispatcher of __classPrivateFieldGet(this, _TrellisService_ownedOutboxDispatchers, "f")) {
|
|
1734
|
+
dispatcher.stop();
|
|
1735
|
+
}
|
|
1736
|
+
__classPrivateFieldGet(this, _TrellisService_ownedOutboxDispatchers, "f").clear();
|
|
1475
1737
|
try {
|
|
1476
1738
|
await __classPrivateFieldGet(this, _TrellisService_stopHealthPublishing, "f").call(this);
|
|
1477
1739
|
}
|
|
@@ -1499,91 +1761,13 @@ class TrellisService {
|
|
|
1499
1761
|
}
|
|
1500
1762
|
}
|
|
1501
1763
|
exports.TrellisService = TrellisService;
|
|
1502
|
-
_TrellisService_server = new WeakMap(), _TrellisService_nc = new WeakMap(), _TrellisService_handlerTrellis = new WeakMap(), _TrellisService_operationTransfer = new WeakMap(), _TrellisService_stopHealthPublishing = new WeakMap(), _TrellisService_managedJobWorkers = new WeakMap(), _TrellisService_waitPromise = new WeakMap(), _TrellisService_stopPromise = new WeakMap(), _TrellisService_instances = new WeakSet(),
|
|
1503
|
-
const health = this.health;
|
|
1504
|
-
return {
|
|
1505
|
-
serviceName: health.serviceName,
|
|
1506
|
-
kind: health.kind,
|
|
1507
|
-
instanceId: health.instanceId,
|
|
1508
|
-
contractId: health.contractId,
|
|
1509
|
-
contractDigest: health.contractDigest,
|
|
1510
|
-
startedAt: health.startedAt,
|
|
1511
|
-
publishIntervalMs: health.publishIntervalMs,
|
|
1512
|
-
setInfo(info) {
|
|
1513
|
-
if (typeof info !== "function") {
|
|
1514
|
-
health.setInfo(info);
|
|
1515
|
-
return;
|
|
1516
|
-
}
|
|
1517
|
-
health.setInfo(() => info({ deps }));
|
|
1518
|
-
},
|
|
1519
|
-
add(name, check) {
|
|
1520
|
-
return health.add(name, () => check({ deps }));
|
|
1521
|
-
},
|
|
1522
|
-
checks: () => health.checks(),
|
|
1523
|
-
response: () => health.response(),
|
|
1524
|
-
heartbeat: () => health.heartbeat(),
|
|
1525
|
-
};
|
|
1526
|
-
}, _TrellisService_createBoundEventFacade = function _TrellisService_createBoundEventFacade(deps) {
|
|
1527
|
-
const event = {};
|
|
1528
|
-
const source = this.event;
|
|
1529
|
-
for (const [groupName, leaves] of Object.entries(source)) {
|
|
1530
|
-
const group = {};
|
|
1531
|
-
for (const [leafName, leaf] of Object.entries(leaves)) {
|
|
1532
|
-
group[leafName] = {
|
|
1533
|
-
prepare: (payload) => leaf.prepare(payload),
|
|
1534
|
-
publish: (payload) => leaf.publish(payload),
|
|
1535
|
-
listen: (handler, subjectData, opts) => leaf.listen((payload, context) => handler({
|
|
1536
|
-
event: payload,
|
|
1537
|
-
context,
|
|
1538
|
-
client: __classPrivateFieldGet(this, _TrellisService_handlerTrellis, "f"),
|
|
1539
|
-
deps,
|
|
1540
|
-
}), subjectData, opts),
|
|
1541
|
-
};
|
|
1542
|
-
}
|
|
1543
|
-
Object.defineProperty(event, groupName, {
|
|
1544
|
-
value: group,
|
|
1545
|
-
enumerable: true,
|
|
1546
|
-
configurable: true,
|
|
1547
|
-
});
|
|
1548
|
-
}
|
|
1549
|
-
return event;
|
|
1550
|
-
}, _TrellisService_createHandleFacade = function _TrellisService_createHandleFacade() {
|
|
1551
|
-
const rpc = {};
|
|
1552
|
-
for (const method of Object.keys(__classPrivateFieldGet(this, _TrellisService_server, "f").api.rpc ?? {})) {
|
|
1553
|
-
addSurfaceLeaf(rpc, method, (handler) => __classPrivateFieldGet(this, _TrellisService_server, "f").mountRuntime(method, async ({ input, context }) => await Promise.resolve(handler({
|
|
1554
|
-
input,
|
|
1555
|
-
context,
|
|
1556
|
-
client: __classPrivateFieldGet(this, _TrellisService_handlerTrellis, "f"),
|
|
1557
|
-
}))));
|
|
1558
|
-
}
|
|
1559
|
-
const feed = {};
|
|
1560
|
-
for (const feedName of Object.keys(__classPrivateFieldGet(this, _TrellisService_server, "f").api.feeds ?? {})) {
|
|
1561
|
-
addSurfaceLeaf(feed, feedName, (handler) => __classPrivateFieldGet(this, _TrellisService_server, "f").feedHandle(feedName).handle((context) => handler({
|
|
1562
|
-
...context,
|
|
1563
|
-
client: __classPrivateFieldGet(this, _TrellisService_handlerTrellis, "f"),
|
|
1564
|
-
})));
|
|
1565
|
-
}
|
|
1566
|
-
const operation = {};
|
|
1567
|
-
for (const operationName of Object.keys(__classPrivateFieldGet(this, _TrellisService_server, "f").api.operations ?? {})) {
|
|
1568
|
-
const registration = __classPrivateFieldGet(this, _TrellisService_instances, "m", _TrellisService_operation).call(this, operationName);
|
|
1569
|
-
const leaf = Object.assign((handler) => registration.handle((context) => handler({
|
|
1570
|
-
...context,
|
|
1571
|
-
client: __classPrivateFieldGet(this, _TrellisService_handlerTrellis, "f"),
|
|
1572
|
-
})), {
|
|
1573
|
-
accept: (args) => registration.accept(args),
|
|
1574
|
-
control: (operationId) => registration.control(operationId),
|
|
1575
|
-
});
|
|
1576
|
-
addSurfaceLeaf(operation, operationName, leaf);
|
|
1577
|
-
}
|
|
1578
|
-
return { rpc, feed, operation };
|
|
1579
|
-
}, _TrellisService_createBoundHandleFacade = function _TrellisService_createBoundHandleFacade(deps) {
|
|
1764
|
+
_TrellisService_server = new WeakMap(), _TrellisService_nc = new WeakMap(), _TrellisService_handlerTrellis = new WeakMap(), _TrellisService_operationTransfer = new WeakMap(), _TrellisService_stopHealthPublishing = new WeakMap(), _TrellisService_managedJobWorkers = new WeakMap(), _TrellisService_contractJobs = new WeakMap(), _TrellisService_jobsBinding = new WeakMap(), _TrellisService_ownedOutboxDispatchers = new WeakMap(), _TrellisService_waitPromise = new WeakMap(), _TrellisService_stopPromise = new WeakMap(), _TrellisService_instances = new WeakSet(), _TrellisService_createHandleFacade = function _TrellisService_createHandleFacade() {
|
|
1580
1765
|
const rpc = {};
|
|
1581
1766
|
for (const method of Object.keys(__classPrivateFieldGet(this, _TrellisService_server, "f").api.rpc ?? {})) {
|
|
1582
1767
|
addSurfaceLeaf(rpc, method, (handler) => __classPrivateFieldGet(this, _TrellisService_server, "f").mountRuntime(method, async ({ input, context }) => await Promise.resolve(handler({
|
|
1583
1768
|
input,
|
|
1584
1769
|
context,
|
|
1585
1770
|
client: __classPrivateFieldGet(this, _TrellisService_handlerTrellis, "f"),
|
|
1586
|
-
deps,
|
|
1587
1771
|
}))));
|
|
1588
1772
|
}
|
|
1589
1773
|
const feed = {};
|
|
@@ -1591,7 +1775,6 @@ _TrellisService_server = new WeakMap(), _TrellisService_nc = new WeakMap(), _Tre
|
|
|
1591
1775
|
addSurfaceLeaf(feed, feedName, (handler) => __classPrivateFieldGet(this, _TrellisService_server, "f").feedHandle(feedName).handle((context) => handler({
|
|
1592
1776
|
...context,
|
|
1593
1777
|
client: __classPrivateFieldGet(this, _TrellisService_handlerTrellis, "f"),
|
|
1594
|
-
deps,
|
|
1595
1778
|
})));
|
|
1596
1779
|
}
|
|
1597
1780
|
const operation = {};
|
|
@@ -1600,7 +1783,6 @@ _TrellisService_server = new WeakMap(), _TrellisService_nc = new WeakMap(), _Tre
|
|
|
1600
1783
|
const leaf = Object.assign((handler) => registration.handle((context) => handler({
|
|
1601
1784
|
...context,
|
|
1602
1785
|
client: __classPrivateFieldGet(this, _TrellisService_handlerTrellis, "f"),
|
|
1603
|
-
deps,
|
|
1604
1786
|
})), {
|
|
1605
1787
|
accept: (args) => registration.accept(args),
|
|
1606
1788
|
control: (operationId) => registration.control(operationId),
|
|
@@ -1608,6 +1790,66 @@ _TrellisService_server = new WeakMap(), _TrellisService_nc = new WeakMap(), _Tre
|
|
|
1608
1790
|
addSurfaceLeaf(operation, operationName, leaf);
|
|
1609
1791
|
}
|
|
1610
1792
|
return { rpc, feed, operation };
|
|
1793
|
+
}, _TrellisService_createSqlOutboxBinding = function _TrellisService_createSqlOutboxBinding(options) {
|
|
1794
|
+
const tables = resolveSqlOutboxTables(options.tables);
|
|
1795
|
+
const executor = createSqlOutboxBaseExecutor(options);
|
|
1796
|
+
const repository = new outbox_inbox_js_1.SqlOutboxRepository(executor, options.dialect, tables);
|
|
1797
|
+
const dispatchRuntime = {
|
|
1798
|
+
publishPreparedEvent: (event) => __classPrivateFieldGet(this, _TrellisService_handlerTrellis, "f").publishPrepared(event),
|
|
1799
|
+
// dispatchJobSubmission: stub — filled in by Phase 3
|
|
1800
|
+
};
|
|
1801
|
+
const dispatcher = new outbox_inbox_js_1.OutboxDispatcher(repository, dispatchRuntime, options.dispatcher);
|
|
1802
|
+
__classPrivateFieldGet(this, _TrellisService_ownedOutboxDispatchers, "f").add(dispatcher);
|
|
1803
|
+
return {
|
|
1804
|
+
dialect: options.dialect,
|
|
1805
|
+
tables,
|
|
1806
|
+
transaction: createSqlOutboxTransactionRunner(options),
|
|
1807
|
+
dispatcher,
|
|
1808
|
+
};
|
|
1809
|
+
}, _TrellisService_createSqlOutbox = function _TrellisService_createSqlOutbox(binding) {
|
|
1810
|
+
return {
|
|
1811
|
+
transaction: (work) => result_1.AsyncResult.from((() => {
|
|
1812
|
+
let enqueued = 0;
|
|
1813
|
+
const toResultError = (cause) => {
|
|
1814
|
+
if (cause instanceof index_js_1.ValidationError ||
|
|
1815
|
+
cause instanceof index_js_1.UnexpectedError) {
|
|
1816
|
+
return result_1.Result.err(cause);
|
|
1817
|
+
}
|
|
1818
|
+
return result_1.Result.err(toUnexpectedError(cause));
|
|
1819
|
+
};
|
|
1820
|
+
let transaction;
|
|
1821
|
+
try {
|
|
1822
|
+
transaction = binding.transaction(({ tx, executor }) => {
|
|
1823
|
+
const repository = new outbox_inbox_js_1.SqlOutboxRepository(executor, binding.dialect, binding.tables);
|
|
1824
|
+
const event = createSqlOutboxEventEnqueueFacade({
|
|
1825
|
+
event: this.event,
|
|
1826
|
+
repository,
|
|
1827
|
+
onEnqueued: () => {
|
|
1828
|
+
enqueued += 1;
|
|
1829
|
+
},
|
|
1830
|
+
});
|
|
1831
|
+
const job = createSqlOutboxJobEnqueueFacade({
|
|
1832
|
+
serviceName: this.name,
|
|
1833
|
+
contractJobs: __classPrivateFieldGet(this, _TrellisService_contractJobs, "f"),
|
|
1834
|
+
jobsBinding: __classPrivateFieldGet(this, _TrellisService_jobsBinding, "f"),
|
|
1835
|
+
repository,
|
|
1836
|
+
onEnqueued: () => {
|
|
1837
|
+
enqueued += 1;
|
|
1838
|
+
},
|
|
1839
|
+
});
|
|
1840
|
+
return work({ tx, event, job });
|
|
1841
|
+
});
|
|
1842
|
+
}
|
|
1843
|
+
catch (cause) {
|
|
1844
|
+
return Promise.resolve(toResultError(cause));
|
|
1845
|
+
}
|
|
1846
|
+
return transaction.then((result) => {
|
|
1847
|
+
if (enqueued > 0)
|
|
1848
|
+
binding.dispatcher.notify();
|
|
1849
|
+
return result_1.Result.ok(result);
|
|
1850
|
+
}, toResultError);
|
|
1851
|
+
})()),
|
|
1852
|
+
};
|
|
1611
1853
|
}, _TrellisService_operation = function _TrellisService_operation(operation) {
|
|
1612
1854
|
const registration = __classPrivateFieldGet(this, _TrellisService_server, "f").operationHandle(operation);
|
|
1613
1855
|
return {
|