@kelpie/server 0.12.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.d.ts +13 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +8 -1
- package/dist/app.js.map +1 -1
- package/dist/boot.d.ts +9 -0
- package/dist/boot.d.ts.map +1 -1
- package/dist/boot.js +12 -2
- package/dist/boot.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/apiKeyScopes.d.ts.map +1 -1
- package/dist/lib/apiKeyScopes.js +6 -0
- package/dist/lib/apiKeyScopes.js.map +1 -1
- package/dist/lib/columns.d.ts +6 -0
- package/dist/lib/columns.d.ts.map +1 -1
- package/dist/lib/columns.js +5 -3
- package/dist/lib/columns.js.map +1 -1
- package/dist/lib/config.d.ts +17 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +3 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/egress.d.ts.map +1 -1
- package/dist/lib/egress.js +8 -4
- package/dist/lib/egress.js.map +1 -1
- package/dist/lib/errors.d.ts +3 -3
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +13 -5
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/ids.d.ts +11 -0
- package/dist/lib/ids.d.ts.map +1 -1
- package/dist/lib/ids.js +11 -0
- package/dist/lib/ids.js.map +1 -1
- package/dist/lib/jobs.d.ts +110 -0
- package/dist/lib/jobs.d.ts.map +1 -0
- package/dist/lib/jobs.js +5 -0
- package/dist/lib/jobs.js.map +1 -0
- package/dist/lib/kelpieConfigFile.d.ts +15 -1
- package/dist/lib/kelpieConfigFile.d.ts.map +1 -1
- package/dist/lib/kelpieConfigFile.js +33 -1
- package/dist/lib/kelpieConfigFile.js.map +1 -1
- package/dist/modules/agent-tasks/catalog.d.ts.map +1 -1
- package/dist/modules/agent-tasks/catalog.js +32 -1
- package/dist/modules/agent-tasks/catalog.js.map +1 -1
- package/dist/modules/agent-tasks/index.d.ts.map +1 -1
- package/dist/modules/agent-tasks/index.js +1 -0
- package/dist/modules/agent-tasks/index.js.map +1 -1
- package/dist/modules/agent-tasks/resolve.d.ts.map +1 -1
- package/dist/modules/agent-tasks/resolve.js +5 -0
- package/dist/modules/agent-tasks/resolve.js.map +1 -1
- package/dist/modules/agent-tasks/routes.d.ts +2 -0
- package/dist/modules/agent-tasks/routes.d.ts.map +1 -1
- package/dist/modules/attachedRecords.d.ts +22 -8
- package/dist/modules/attachedRecords.d.ts.map +1 -1
- package/dist/modules/attachedRecords.js +42 -5
- package/dist/modules/attachedRecords.js.map +1 -1
- package/dist/modules/auth/index.d.ts.map +1 -1
- package/dist/modules/auth/index.js +1 -0
- package/dist/modules/auth/index.js.map +1 -1
- package/dist/modules/auth/repository.d.ts +14 -0
- package/dist/modules/auth/repository.d.ts.map +1 -1
- package/dist/modules/auth/repository.js +20 -2
- package/dist/modules/auth/repository.js.map +1 -1
- package/dist/modules/auth/routes.d.ts.map +1 -1
- package/dist/modules/auth/routes.js +30 -0
- package/dist/modules/auth/routes.js.map +1 -1
- package/dist/modules/auth/service.d.ts +28 -0
- package/dist/modules/auth/service.d.ts.map +1 -1
- package/dist/modules/auth/service.js +72 -4
- package/dist/modules/auth/service.js.map +1 -1
- package/dist/modules/companies/repository.d.ts.map +1 -1
- package/dist/modules/companies/repository.js +1 -1
- package/dist/modules/companies/repository.js.map +1 -1
- package/dist/modules/companies/routes.d.ts +2 -4
- package/dist/modules/companies/routes.d.ts.map +1 -1
- package/dist/modules/companies/routes.js +6 -11
- package/dist/modules/companies/routes.js.map +1 -1
- package/dist/modules/companies/schema.d.ts +13 -28
- package/dist/modules/companies/schema.d.ts.map +1 -1
- package/dist/modules/companies/schema.js +2 -2
- package/dist/modules/companies/schema.js.map +1 -1
- package/dist/modules/companies/service.d.ts +2 -3
- package/dist/modules/companies/service.d.ts.map +1 -1
- package/dist/modules/companies/service.js +4 -7
- package/dist/modules/companies/service.js.map +1 -1
- package/dist/modules/core.d.ts.map +1 -1
- package/dist/modules/core.js +2 -0
- package/dist/modules/core.js.map +1 -1
- package/dist/modules/custom-fields/repository.d.ts.map +1 -1
- package/dist/modules/custom-fields/repository.js +2 -0
- package/dist/modules/custom-fields/repository.js.map +1 -1
- package/dist/modules/custom-fields/routes.d.ts +1 -0
- package/dist/modules/custom-fields/routes.d.ts.map +1 -1
- package/dist/modules/dashboard/index.d.ts.map +1 -1
- package/dist/modules/dashboard/index.js +1 -0
- package/dist/modules/dashboard/index.js.map +1 -1
- package/dist/modules/dashboard/repository.d.ts +13 -0
- package/dist/modules/dashboard/repository.d.ts.map +1 -1
- package/dist/modules/dashboard/repository.js +36 -0
- package/dist/modules/dashboard/repository.js.map +1 -1
- package/dist/modules/dashboard/routes.d.ts.map +1 -1
- package/dist/modules/dashboard/routes.js +13 -0
- package/dist/modules/dashboard/routes.js.map +1 -1
- package/dist/modules/dashboard/service.d.ts +11 -0
- package/dist/modules/dashboard/service.d.ts.map +1 -1
- package/dist/modules/dashboard/service.js +24 -1
- package/dist/modules/dashboard/service.js.map +1 -1
- package/dist/modules/decisions/repository.d.ts.map +1 -1
- package/dist/modules/decisions/repository.js +2 -0
- package/dist/modules/decisions/repository.js.map +1 -1
- package/dist/modules/decisions/routes.d.ts +2 -0
- package/dist/modules/decisions/routes.d.ts.map +1 -1
- package/dist/modules/events/attendances.d.ts +35 -0
- package/dist/modules/events/attendances.d.ts.map +1 -0
- package/dist/modules/events/attendances.js +157 -0
- package/dist/modules/events/attendances.js.map +1 -0
- package/dist/modules/events/catalog.d.ts +35 -0
- package/dist/modules/events/catalog.d.ts.map +1 -0
- package/dist/modules/events/catalog.js +11 -0
- package/dist/modules/events/catalog.js.map +1 -0
- package/dist/modules/events/index.d.ts +10 -0
- package/dist/modules/events/index.d.ts.map +1 -0
- package/dist/modules/events/index.js +47 -0
- package/dist/modules/events/index.js.map +1 -0
- package/dist/modules/events/repository.d.ts +67 -0
- package/dist/modules/events/repository.d.ts.map +1 -0
- package/dist/modules/events/repository.js +212 -0
- package/dist/modules/events/repository.js.map +1 -0
- package/dist/modules/events/routes.d.ts +136 -0
- package/dist/modules/events/routes.d.ts.map +1 -0
- package/dist/modules/events/routes.js +280 -0
- package/dist/modules/events/routes.js.map +1 -0
- package/dist/modules/events/schema.d.ts +626 -0
- package/dist/modules/events/schema.d.ts.map +1 -0
- package/dist/modules/events/schema.js +93 -0
- package/dist/modules/events/schema.js.map +1 -0
- package/dist/modules/events/service.d.ts +68 -0
- package/dist/modules/events/service.d.ts.map +1 -0
- package/dist/modules/events/service.js +262 -0
- package/dist/modules/events/service.js.map +1 -0
- package/dist/modules/events/tools.d.ts +8 -0
- package/dist/modules/events/tools.d.ts.map +1 -0
- package/dist/modules/events/tools.js +80 -0
- package/dist/modules/events/tools.js.map +1 -0
- package/dist/modules/forms/applySubmissionFields.d.ts.map +1 -1
- package/dist/modules/forms/applySubmissionFields.js +7 -5
- package/dist/modules/forms/applySubmissionFields.js.map +1 -1
- package/dist/modules/forms/fillAddresses.d.ts +4 -0
- package/dist/modules/forms/fillAddresses.d.ts.map +1 -0
- package/dist/modules/forms/fillAddresses.js +93 -0
- package/dist/modules/forms/fillAddresses.js.map +1 -0
- package/dist/modules/forms/repository.d.ts +2 -2
- package/dist/modules/forms/repository.d.ts.map +1 -1
- package/dist/modules/forms/repository.js.map +1 -1
- package/dist/modules/forms/routes.d.ts +2 -0
- package/dist/modules/forms/routes.d.ts.map +1 -1
- package/dist/modules/forms/routes.js +2 -2
- package/dist/modules/forms/routes.js.map +1 -1
- package/dist/modules/forms/schema.js +2 -2
- package/dist/modules/forms/schema.js.map +1 -1
- package/dist/modules/forms/service.js +2 -2
- package/dist/modules/forms/service.js.map +1 -1
- package/dist/modules/forms/submission.d.ts +1 -0
- package/dist/modules/forms/submission.d.ts.map +1 -1
- package/dist/modules/forms/submission.js +27 -4
- package/dist/modules/forms/submission.js.map +1 -1
- package/dist/modules/hiring/roles.d.ts.map +1 -1
- package/dist/modules/hiring/roles.js +2 -1
- package/dist/modules/hiring/roles.js.map +1 -1
- package/dist/modules/import-export/addresses.d.ts +22 -0
- package/dist/modules/import-export/addresses.d.ts.map +1 -0
- package/dist/modules/import-export/addresses.js +83 -0
- package/dist/modules/import-export/addresses.js.map +1 -0
- package/dist/modules/import-export/drafts.d.ts +3 -4
- package/dist/modules/import-export/drafts.d.ts.map +1 -1
- package/dist/modules/import-export/drafts.js +4 -5
- package/dist/modules/import-export/drafts.js.map +1 -1
- package/dist/modules/import-export/exportRows.d.ts.map +1 -1
- package/dist/modules/import-export/exportRows.js +3 -3
- package/dist/modules/import-export/exportRows.js.map +1 -1
- package/dist/modules/import-export/plan.d.ts.map +1 -1
- package/dist/modules/import-export/plan.js +17 -2
- package/dist/modules/import-export/plan.js.map +1 -1
- package/dist/modules/import-export/presets.d.ts.map +1 -1
- package/dist/modules/import-export/presets.js +52 -7
- package/dist/modules/import-export/presets.js.map +1 -1
- package/dist/modules/import-export/repository.d.ts +3 -4
- package/dist/modules/import-export/repository.d.ts.map +1 -1
- package/dist/modules/import-export/repository.js +2 -3
- package/dist/modules/import-export/repository.js.map +1 -1
- package/dist/modules/import-export/writes.d.ts.map +1 -1
- package/dist/modules/import-export/writes.js +8 -4
- package/dist/modules/import-export/writes.js.map +1 -1
- package/dist/modules/lists/routes.d.ts +4 -0
- package/dist/modules/lists/routes.d.ts.map +1 -1
- package/dist/modules/notes/routes.d.ts +2 -0
- package/dist/modules/notes/routes.d.ts.map +1 -1
- package/dist/modules/people/repository.d.ts.map +1 -1
- package/dist/modules/people/repository.js +1 -1
- package/dist/modules/people/repository.js.map +1 -1
- package/dist/modules/people/routes.d.ts +2 -2
- package/dist/modules/people/routes.js +6 -6
- package/dist/modules/people/routes.js.map +1 -1
- package/dist/modules/people/schema.d.ts +17 -14
- package/dist/modules/people/schema.d.ts.map +1 -1
- package/dist/modules/people/schema.js +6 -4
- package/dist/modules/people/schema.js.map +1 -1
- package/dist/modules/people/service.d.ts +2 -2
- package/dist/modules/people/service.d.ts.map +1 -1
- package/dist/modules/people/service.js +5 -4
- package/dist/modules/people/service.js.map +1 -1
- package/dist/modules/plans/repository.d.ts +2 -2
- package/dist/modules/plans/repository.d.ts.map +1 -1
- package/dist/modules/plans/routes.d.ts +1 -0
- package/dist/modules/plans/routes.d.ts.map +1 -1
- package/dist/modules/plans/routes.js +4 -4
- package/dist/modules/plans/routes.js.map +1 -1
- package/dist/modules/plans/schema.d.ts +2 -2
- package/dist/modules/plans/schema.d.ts.map +1 -1
- package/dist/modules/plans/schema.js +3 -3
- package/dist/modules/plans/schema.js.map +1 -1
- package/dist/modules/plans/service.d.ts +2 -2
- package/dist/modules/plans/service.d.ts.map +1 -1
- package/dist/modules/plans/service.js.map +1 -1
- package/dist/modules/plans/tools.js +2 -2
- package/dist/modules/plans/tools.js.map +1 -1
- package/dist/modules/recordTargets.d.ts.map +1 -1
- package/dist/modules/recordTargets.js +11 -0
- package/dist/modules/recordTargets.js.map +1 -1
- package/dist/modules/references.d.ts.map +1 -1
- package/dist/modules/references.js +2 -0
- package/dist/modules/references.js.map +1 -1
- package/dist/modules/sample-data/fixture.d.ts +26 -4
- package/dist/modules/sample-data/fixture.d.ts.map +1 -1
- package/dist/modules/sample-data/fixture.js +157 -23
- package/dist/modules/sample-data/fixture.js.map +1 -1
- package/dist/modules/sample-data/index.d.ts +5 -2
- package/dist/modules/sample-data/index.d.ts.map +1 -1
- package/dist/modules/sample-data/index.js +7 -2
- package/dist/modules/sample-data/index.js.map +1 -1
- package/dist/modules/sample-data/routes.d.ts.map +1 -1
- package/dist/modules/sample-data/routes.js +2 -0
- package/dist/modules/sample-data/routes.js.map +1 -1
- package/dist/modules/sample-data/service.d.ts +11 -3
- package/dist/modules/sample-data/service.d.ts.map +1 -1
- package/dist/modules/sample-data/service.js +452 -363
- package/dist/modules/sample-data/service.js.map +1 -1
- package/dist/modules/sample-data/tools.d.ts.map +1 -1
- package/dist/modules/sample-data/tools.js +4 -3
- package/dist/modules/sample-data/tools.js.map +1 -1
- package/dist/modules/search/index.d.ts +1 -1
- package/dist/modules/search/index.d.ts.map +1 -1
- package/dist/modules/search/index.js +2 -1
- package/dist/modules/search/index.js.map +1 -1
- package/dist/modules/search/repository.d.ts +1 -0
- package/dist/modules/search/repository.d.ts.map +1 -1
- package/dist/modules/search/repository.js +22 -0
- package/dist/modules/search/repository.js.map +1 -1
- package/dist/modules/search/service.d.ts +2 -2
- package/dist/modules/search/service.d.ts.map +1 -1
- package/dist/modules/search/service.js +4 -3
- package/dist/modules/search/service.js.map +1 -1
- package/dist/modules/smtp-email/index.d.ts +12 -4
- package/dist/modules/smtp-email/index.d.ts.map +1 -1
- package/dist/modules/smtp-email/index.js +25 -5
- package/dist/modules/smtp-email/index.js.map +1 -1
- package/dist/modules/workspace/repository.d.ts +2 -0
- package/dist/modules/workspace/repository.d.ts.map +1 -1
- package/dist/modules/workspace/repository.js +12 -0
- package/dist/modules/workspace/repository.js.map +1 -1
- package/dist/modules/workspace/routes.d.ts.map +1 -1
- package/dist/modules/workspace/routes.js +13 -0
- package/dist/modules/workspace/routes.js.map +1 -1
- package/dist/modules/workspace/service.d.ts +10 -0
- package/dist/modules/workspace/service.d.ts.map +1 -1
- package/dist/modules/workspace/service.js +34 -10
- package/dist/modules/workspace/service.js.map +1 -1
- package/dist/modules/workspace/starters.d.ts +17 -2
- package/dist/modules/workspace/starters.d.ts.map +1 -1
- package/dist/modules/workspace/starters.js +141 -14
- package/dist/modules/workspace/starters.js.map +1 -1
- package/dist/modules/workspace/workspaceAccessMiddleware.d.ts.map +1 -1
- package/dist/modules/workspace/workspaceAccessMiddleware.js +3 -4
- package/dist/modules/workspace/workspaceAccessMiddleware.js.map +1 -1
- package/dist/runtime/events.d.ts +1 -1
- package/dist/runtime/events.d.ts.map +1 -1
- package/dist/runtime/events.js +2 -0
- package/dist/runtime/events.js.map +1 -1
- package/dist/runtime/jobs.d.ts +63 -0
- package/dist/runtime/jobs.d.ts.map +1 -0
- package/dist/runtime/jobs.js +231 -0
- package/dist/runtime/jobs.js.map +1 -0
- package/dist/runtime/module.d.ts +20 -0
- package/dist/runtime/module.d.ts.map +1 -1
- package/dist/runtime/registry.d.ts +8 -0
- package/dist/runtime/registry.d.ts.map +1 -1
- package/dist/runtime/registry.js +117 -7
- package/dist/runtime/registry.js.map +1 -1
- package/dist/runtime/transaction.d.ts +19 -0
- package/dist/runtime/transaction.d.ts.map +1 -1
- package/dist/runtime/transaction.js +7 -0
- package/dist/runtime/transaction.js.map +1 -1
- package/dist/schema/index.d.ts +1 -0
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +1 -0
- package/dist/schema/index.js.map +1 -1
- package/dist/testing/app.d.ts +15 -0
- package/dist/testing/app.d.ts.map +1 -1
- package/dist/testing/app.js +7 -1
- package/dist/testing/app.js.map +1 -1
- package/dist/testing/client.d.ts.map +1 -1
- package/dist/testing/client.js +9 -1
- package/dist/testing/client.js.map +1 -1
- package/dist/testing/database.d.ts +7 -0
- package/dist/testing/database.d.ts.map +1 -1
- package/dist/testing/database.js +26 -2
- package/dist/testing/database.js.map +1 -1
- package/dist/testing/services.d.ts +7 -0
- package/dist/testing/services.d.ts.map +1 -1
- package/dist/testing/services.js +8 -1
- package/dist/testing/services.js.map +1 -1
- package/dist/worker.d.ts +15 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +19 -0
- package/dist/worker.js.map +1 -0
- package/migrations/0044_events.sql +79 -0
- package/migrations/0045_addresses.sql +66 -0
- package/migrations/0046_drop_company_website.sql +66 -0
- package/migrations/meta/_journal.json +21 -0
- package/package.json +4 -3
- package/src/app.ts +25 -1
- package/src/boot.ts +21 -2
- package/src/index.ts +17 -0
- package/src/lib/apiKeyScopes.ts +6 -0
- package/src/lib/columns.ts +12 -3
- package/src/lib/config.ts +21 -0
- package/src/lib/egress.ts +8 -4
- package/src/lib/errors.ts +16 -9
- package/src/lib/ids.ts +11 -0
- package/src/lib/jobs.ts +126 -0
- package/src/lib/kelpieConfigFile.ts +69 -1
- package/src/modules/agent-tasks/catalog.ts +33 -1
- package/src/modules/agent-tasks/index.ts +1 -0
- package/src/modules/agent-tasks/resolve.ts +11 -0
- package/src/modules/attachedRecords.ts +85 -13
- package/src/modules/auth/index.ts +1 -0
- package/src/modules/auth/repository.ts +34 -3
- package/src/modules/auth/routes.ts +44 -1
- package/src/modules/auth/service.ts +118 -4
- package/src/modules/companies/repository.ts +1 -0
- package/src/modules/companies/routes.ts +6 -11
- package/src/modules/companies/schema.ts +3 -3
- package/src/modules/companies/service.ts +6 -10
- package/src/modules/core.ts +2 -0
- package/src/modules/custom-fields/repository.ts +2 -0
- package/src/modules/dashboard/index.ts +1 -0
- package/src/modules/dashboard/repository.ts +64 -0
- package/src/modules/dashboard/routes.ts +15 -0
- package/src/modules/dashboard/service.ts +48 -0
- package/src/modules/decisions/repository.ts +2 -0
- package/src/modules/events/attendances.ts +245 -0
- package/src/modules/events/catalog.ts +36 -0
- package/src/modules/events/index.ts +54 -0
- package/src/modules/events/repository.ts +396 -0
- package/src/modules/events/routes.ts +405 -0
- package/src/modules/events/schema.ts +148 -0
- package/src/modules/events/service.ts +443 -0
- package/src/modules/events/tools.ts +118 -0
- package/src/modules/forms/applySubmissionFields.ts +7 -5
- package/src/modules/forms/fillAddresses.ts +185 -0
- package/src/modules/forms/repository.ts +3 -3
- package/src/modules/forms/routes.ts +2 -2
- package/src/modules/forms/schema.ts +2 -2
- package/src/modules/forms/service.ts +2 -2
- package/src/modules/forms/submission.ts +34 -4
- package/src/modules/hiring/roles.ts +2 -1
- package/src/modules/import-export/addresses.ts +150 -0
- package/src/modules/import-export/drafts.ts +7 -9
- package/src/modules/import-export/exportRows.ts +3 -3
- package/src/modules/import-export/plan.ts +30 -2
- package/src/modules/import-export/presets.ts +55 -7
- package/src/modules/import-export/repository.ts +5 -7
- package/src/modules/import-export/writes.ts +8 -4
- package/src/modules/people/repository.ts +1 -0
- package/src/modules/people/routes.ts +6 -6
- package/src/modules/people/schema.ts +7 -5
- package/src/modules/people/service.ts +7 -5
- package/src/modules/plans/repository.ts +2 -2
- package/src/modules/plans/routes.ts +6 -6
- package/src/modules/plans/schema.ts +4 -4
- package/src/modules/plans/service.ts +3 -3
- package/src/modules/plans/tools.ts +2 -2
- package/src/modules/recordTargets.ts +14 -0
- package/src/modules/references.ts +2 -0
- package/src/modules/sample-data/fixture.ts +208 -27
- package/src/modules/sample-data/index.ts +7 -2
- package/src/modules/sample-data/routes.ts +2 -0
- package/src/modules/sample-data/service.ts +166 -49
- package/src/modules/sample-data/tools.ts +4 -3
- package/src/modules/search/index.ts +2 -1
- package/src/modules/search/repository.ts +32 -1
- package/src/modules/search/service.ts +6 -4
- package/src/modules/smtp-email/index.ts +32 -10
- package/src/modules/workspace/repository.ts +18 -0
- package/src/modules/workspace/routes.ts +16 -0
- package/src/modules/workspace/service.ts +59 -14
- package/src/modules/workspace/starters.ts +275 -14
- package/src/modules/workspace/workspaceAccessMiddleware.ts +3 -4
- package/src/runtime/events.ts +2 -0
- package/src/runtime/jobs.ts +358 -0
- package/src/runtime/module.ts +20 -0
- package/src/runtime/registry.ts +146 -8
- package/src/runtime/transaction.ts +43 -0
- package/src/schema/index.ts +1 -0
- package/src/testing/app.ts +22 -1
- package/src/testing/client.ts +11 -1
- package/src/testing/database.ts +35 -2
- package/src/testing/services.ts +15 -1
- package/src/worker.ts +20 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/runtime/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAGpD,OAAO,QAAQ,MAAM,UAAU,CAAA;AAG/B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGjD;;;;;;;;;;GAUG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,QAAQ;IACR,SAAS;IACT,UAAU;IACV,MAAM;IACN,SAAS;IACT,aAAa;IACb,aAAa;IACb,OAAO;IACP,MAAM;IACN,WAAW;IACX,eAAe;IACf,MAAM;CACE,CAAA;AAoDV;;;;;;;GAOG;AACH,MAAM,YAAY,GAAG,IAAI,iBAAiB,EAA8B,CAAA;AAExE,MAAM,UAAU,iBAAiB;IAC/B,OAAO,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAA;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAiC,EACjC,IAAY,EACZ,MAAmB,EACnB,QAAgB;IAEhB,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IAC1B,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC;YAC5F,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AACvB,CAAC;AA2DD,MAAM,0BAA0B,GAAG,IAAI,CAAA;AA0BvC,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAO,GAAoB,EAAE;IAC1E,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAkC,CAAA;IAC/D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAA;IAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,MAAM,cAAc,GAAoB,EAAE,CAAA;IAC1C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAA;IAC5C,MAAM,gBAAgB,GAAG,OAAO,CAAC,uBAAuB,IAAI,0BAA0B,CAAA;IAEtF,SAAS,IAAI,CACX,KAAa,EACb,SAAiB,EACjB,OAA+C,EAC/C,OAA4D;QAE5D,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;YACrB,IAAI,WAAuC,CAAA;YAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;YAClC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAkB,CAAC,OAAO,EAAE,EAAE;gBACrD,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAA;gBAC5D,WAAW,CAAC,KAAK,EAAE,EAAE,CAAA;YACvB,CAAC,CAAC,CAAA;YAEF,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;oBACjC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC5C,KAAK;iBACN,CAAC,CAAA;gBACF,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACzB,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;gBAClF,CAAC;YACH,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;oBACnC,KAAK;oBACL,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;oBAC5B,GAAG,OAAO,CAAC,KAAK,CAAC;iBAClB,CAAC,CAAA;YACJ,CAAC;oBAAS,CAAC;gBACT,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;oBAC9B,YAAY,CAAC,WAAW,CAAC,CAAA;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC,CAAA;IACH,CAAC;IAED,OAAO;QACL,eAAe,CAAC,OAAO;YACrB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBACjC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CACb,UAAU,IAAI,iCAAiC,QAAQ,iBAAiB,OAAO,CAAC,QAAQ,GAAG,CAC5F,CAAA;gBACH,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;gBAClC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YAC3B,CAAC;QACH,CAAC;QAED,QAAQ,CAAC,IAAI;YACX,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC1B,CAAC;QAED,SAAS,CAAC,IAAI;YACZ,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC1B,CAAC;QAED,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,gBAAgB;YACvC,MAAM,KAAK,GAAG,gBAAgB,EAAE,KAAK,IAAI,IAAI,CAAA;YAC7C,MAAM,SAAS,GAAG,gBAAgB,EAAE,SAAS,IAAI,gBAAgB,CAAA;YACjE,MAAM,OAAO,GAAG,IAAI,CAClB,KAAK,EACL,SAAS,EACT,CAAC,KAAK,EAAE,EAAE;gBACR,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAoC,CAAA;gBAC3D,OAAO,OAAO,CAAC,QAAiB,CAAC,CAAA;YACnC,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;gBACR,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAoC,CAAA;gBAC3D,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAA;YACvD,CAAC,CACF,CAAA;YACD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC5B,CAAC;QAED,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB;YAC/C,MAAM,KAAK,GAAG,gBAAgB,EAAE,KAAK,IAAI,GAAG,MAAM,GAAG,CAAA;YACrD,MAAM,SAAS,GAAG,gBAAgB,EAAE,SAAS,IAAI,gBAAgB,CAAA;YACjE,cAAc,CAAC,IAAI,CAAC;gBAClB,MAAM;gBACN,KAAK;gBACL,GAAG,EAAE,IAAI,CACP,KAAK,EACL,SAAS,EACT,OAAO,EACP,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CACtD;aACF,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,CAAC,KAAK;YACX,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAA;YAC5C,MAAM,KAAK,GAAsB;gBAC/B,GAAG,MAAM;gBACT;oBACE,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;oBAC7B,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;iBAC1B;aACF,CAAA;YAED,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;YACtF,MAAM,UAAU,GAAG,KAAqC,CAAA;YAExD,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAC3C,OAAO,CAAC,UAAU,CAAC;gBACjB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC;gBACrC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;aAClD,CAAC,CACH,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACrB,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;gBACxB,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YAC1B,CAAC,CAAC,CAAA;YAEF,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QACtC,CAAC;QAED,KAAK,CAAC,KAAK;YACT,0EAA0E;YAC1E,iDAAiD;YACjD,OAAO,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAA;YACzC,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/runtime/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { Logger } from '../lib/logger.ts';
|
|
2
|
+
import type { EnqueueOptions, JobHandle, JobRegistry } from '../lib/jobs.ts';
|
|
3
|
+
import type { Transaction } from './transaction.ts';
|
|
4
|
+
export interface JobsRuntimeOptions {
|
|
5
|
+
readonly connectionString: string;
|
|
6
|
+
readonly logger: Logger;
|
|
7
|
+
/**
|
|
8
|
+
* Polling floor. LISTEN/NOTIFY wakes a worker immediately when a job is
|
|
9
|
+
* inserted via `send()`, but pg-boss's own retry re-insert (inside
|
|
10
|
+
* `fail()`) never notifies, so a retried job is only ever picked up by
|
|
11
|
+
* this poll — as is a fresh job if the listener never opened. Also used
|
|
12
|
+
* as pg-boss's `notifyPollingIntervalSeconds`, so NOTIFY-active queues
|
|
13
|
+
* poll no slower than this either. Default 2s in production; tests pass
|
|
14
|
+
* a shorter value so a retry runs within the test's own budget.
|
|
15
|
+
*/
|
|
16
|
+
readonly pollingIntervalSeconds?: number;
|
|
17
|
+
/**
|
|
18
|
+
* How many workers the runtime spins up per handle when a definition does
|
|
19
|
+
* not override `defaults.localConcurrency`. Matches pg-boss's default.
|
|
20
|
+
*/
|
|
21
|
+
readonly defaultLocalConcurrency?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface JobsRuntime {
|
|
24
|
+
/** The port modules bind to at register time. */
|
|
25
|
+
readonly registry: JobRegistry;
|
|
26
|
+
/** True once `register` has been called with this name. Used by tests. */
|
|
27
|
+
hasHandle(name: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Applies pg-boss's own schema migration. Idempotent: safe to run on every
|
|
30
|
+
* boot. Uses a throwaway `PgBoss` in `migrate: true, createSchema: true`
|
|
31
|
+
* mode, matching the release-command flow the cloud runs.
|
|
32
|
+
*/
|
|
33
|
+
migrate(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Opens the persistent pg-boss instance and declares every registered
|
|
36
|
+
* queue plus its dead-letter counterpart. Must run before `enqueueOnTx`
|
|
37
|
+
* or `startWorking`. `migrate: false` here: `migrate()` above owns that
|
|
38
|
+
* step, so instances never race the migration.
|
|
39
|
+
*/
|
|
40
|
+
start(): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Starts the `work()` loop for every registered handle. The worker entry
|
|
43
|
+
* point calls this; the API calls it too unless `--no-worker` is set.
|
|
44
|
+
* Handler errors are logged and rethrown so pg-boss retries or
|
|
45
|
+
* dead-letters the job.
|
|
46
|
+
*/
|
|
47
|
+
startWorking(): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Enqueues a job on the caller's transaction via `fromDrizzle(tx, sql)`.
|
|
50
|
+
* The insert commits with the surrounding write; a rollback discards it.
|
|
51
|
+
* Rejects when no `handle` was registered for `name` (this would be a
|
|
52
|
+
* boot-time bug, not a runtime one).
|
|
53
|
+
*/
|
|
54
|
+
enqueueOnTx<Data>(tx: Transaction, handle: JobHandle<Data>, data: Data, options?: EnqueueOptions): Promise<string | null>;
|
|
55
|
+
/**
|
|
56
|
+
* Drains in-flight work and closes the pg-boss instance. `offWork({wait:
|
|
57
|
+
* true})` awaits every handler mid-flight; `boss.stop` then tears down
|
|
58
|
+
* the connection pool.
|
|
59
|
+
*/
|
|
60
|
+
stop(): Promise<void>;
|
|
61
|
+
}
|
|
62
|
+
export declare function createJobsRuntime(options: JobsRuntimeOptions): JobsRuntime;
|
|
63
|
+
//# sourceMappingURL=jobs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/runtime/jobs.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,EACV,cAAc,EAGd,SAAS,EACT,WAAW,EACZ,MAAM,gBAAgB,CAAA;AAEvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAqCnD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB;;;;;;;;OAQG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAA;IACxC;;;OAGG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAA;CAC1C;AAED,MAAM,WAAW,WAAW;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;IAC9B,0EAA0E;IAC1E,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IAChC;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACxB;;;;;OAKG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB;;;;;OAKG;IACH,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7B;;;;;OAKG;IACH,WAAW,CAAC,IAAI,EACd,EAAE,EAAE,WAAW,EACf,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,EACvB,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACzB;;;;OAIG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACtB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAiP1E"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { sql } from 'drizzle-orm';
|
|
2
|
+
import { PgBoss, fromDrizzle } from 'pg-boss';
|
|
3
|
+
import { describeThrown } from '../lib/errors.js';
|
|
4
|
+
import { deadLetterQueueName } from '../lib/jobs.js';
|
|
5
|
+
/**
|
|
6
|
+
* The pg-boss provider that binds the job port defined in `lib/jobs.ts` to a
|
|
7
|
+
* real Postgres-backed queue.
|
|
8
|
+
*
|
|
9
|
+
* Two phases:
|
|
10
|
+
*
|
|
11
|
+
* 1. Registration, at boot. Modules call `context.jobs.define(...)` during
|
|
12
|
+
* `register`. The registry records the definition (fails boot on a
|
|
13
|
+
* duplicate name) and returns the handle. Nothing touches the database
|
|
14
|
+
* yet.
|
|
15
|
+
* 2. `start()`, from the entry point. Opens the pg-boss instance, primes the
|
|
16
|
+
* queue cache, and calls `createQueue` for every registered handle plus
|
|
17
|
+
* its dead-letter queue. Idempotent (`create_queue` upserts).
|
|
18
|
+
*
|
|
19
|
+
* The API and the worker both call `start()`: the API needs a boss instance
|
|
20
|
+
* to insert jobs on request-scoped transactions; the worker adds a
|
|
21
|
+
* `startWorking()` step that runs `work()` per handle.
|
|
22
|
+
*
|
|
23
|
+
* @see modules.md for how jobs sit next to the event bus.
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* The pg-boss schema name. Fixed here rather than configurable per assembly:
|
|
27
|
+
* self-hosters run one Postgres per Kelpie install and would gain nothing
|
|
28
|
+
* from renaming the schema.
|
|
29
|
+
*/
|
|
30
|
+
const PGBOSS_SCHEMA = 'pgboss';
|
|
31
|
+
const DEFAULT_LOCAL_CONCURRENCY = 5;
|
|
32
|
+
export function createJobsRuntime(options) {
|
|
33
|
+
const registered = new Map();
|
|
34
|
+
// Tracks which handles have had `createQueue` run and which have had
|
|
35
|
+
// `work()` called, so a runtime that registers a fresh handle after
|
|
36
|
+
// `start()` (a test that adds one mid-suite) still gets its queue built
|
|
37
|
+
// and its worker started without redoing the ones already up.
|
|
38
|
+
const queuesCreated = new Set();
|
|
39
|
+
const workersStarted = new Set();
|
|
40
|
+
let boss;
|
|
41
|
+
function requireBoss() {
|
|
42
|
+
if (boss === undefined) {
|
|
43
|
+
throw new Error('jobs runtime used before start(): call jobs.start() at boot');
|
|
44
|
+
}
|
|
45
|
+
return boss;
|
|
46
|
+
}
|
|
47
|
+
const registry = {
|
|
48
|
+
define(definition) {
|
|
49
|
+
if (registered.has(definition.name)) {
|
|
50
|
+
throw new Error(`job "${definition.name}" is defined twice`);
|
|
51
|
+
}
|
|
52
|
+
const handle = { name: definition.name };
|
|
53
|
+
registered.set(definition.name, {
|
|
54
|
+
definition: definition,
|
|
55
|
+
handle: handle,
|
|
56
|
+
});
|
|
57
|
+
return handle;
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
async function migrate() {
|
|
61
|
+
// A throwaway instance in migrate/createSchema mode. Cheaper than
|
|
62
|
+
// vendoring the SQL: pg-boss owns its schema, and `getConstructionPlans`
|
|
63
|
+
// / `getMigrationPlans` produce statements we would just execute in the
|
|
64
|
+
// same order the library does itself. `supervise: false, schedule: false`
|
|
65
|
+
// keeps the instance from spawning any background work while it lives.
|
|
66
|
+
const migrator = new PgBoss({
|
|
67
|
+
connectionString: options.connectionString,
|
|
68
|
+
schema: PGBOSS_SCHEMA,
|
|
69
|
+
migrate: true,
|
|
70
|
+
createSchema: true,
|
|
71
|
+
supervise: false,
|
|
72
|
+
schedule: false,
|
|
73
|
+
});
|
|
74
|
+
try {
|
|
75
|
+
await migrator.start();
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
await migrator.stop({ graceful: false, close: true, timeout: 5_000 });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function ensureQueuesFor(instance) {
|
|
82
|
+
for (const { definition } of registered.values()) {
|
|
83
|
+
if (queuesCreated.has(definition.name)) {
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const deadLetter = deadLetterQueueName(definition.name);
|
|
87
|
+
// Dead letter queue must exist before the main queue references it.
|
|
88
|
+
await instance.createQueue(deadLetter, {
|
|
89
|
+
policy: 'standard',
|
|
90
|
+
notify: false,
|
|
91
|
+
});
|
|
92
|
+
await instance.createQueue(definition.name, {
|
|
93
|
+
policy: 'standard',
|
|
94
|
+
deadLetter,
|
|
95
|
+
notify: true,
|
|
96
|
+
...(definition.defaults?.retryLimit === undefined
|
|
97
|
+
? {}
|
|
98
|
+
: { retryLimit: definition.defaults.retryLimit }),
|
|
99
|
+
...(definition.defaults?.retryDelay === undefined
|
|
100
|
+
? {}
|
|
101
|
+
: { retryDelay: definition.defaults.retryDelay }),
|
|
102
|
+
...(definition.defaults?.retryBackoff === undefined
|
|
103
|
+
? {}
|
|
104
|
+
: { retryBackoff: definition.defaults.retryBackoff }),
|
|
105
|
+
...(definition.defaults?.retryDelayMax === undefined
|
|
106
|
+
? {}
|
|
107
|
+
: { retryDelayMax: definition.defaults.retryDelayMax }),
|
|
108
|
+
...(definition.defaults?.expireInSeconds === undefined
|
|
109
|
+
? {}
|
|
110
|
+
: { expireInSeconds: definition.defaults.expireInSeconds }),
|
|
111
|
+
});
|
|
112
|
+
queuesCreated.add(definition.name);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async function start() {
|
|
116
|
+
if (boss === undefined) {
|
|
117
|
+
const instance = new PgBoss({
|
|
118
|
+
connectionString: options.connectionString,
|
|
119
|
+
schema: PGBOSS_SCHEMA,
|
|
120
|
+
migrate: false,
|
|
121
|
+
createSchema: false,
|
|
122
|
+
supervise: false,
|
|
123
|
+
schedule: false,
|
|
124
|
+
useListenNotify: true,
|
|
125
|
+
});
|
|
126
|
+
instance.on('error', (error) => {
|
|
127
|
+
options.logger.error('pg-boss error', { error: describeThrown(error) });
|
|
128
|
+
});
|
|
129
|
+
await instance.start();
|
|
130
|
+
boss = instance;
|
|
131
|
+
}
|
|
132
|
+
await ensureQueuesFor(boss);
|
|
133
|
+
}
|
|
134
|
+
async function startWorking() {
|
|
135
|
+
const instance = requireBoss();
|
|
136
|
+
const pollingIntervalSeconds = options.pollingIntervalSeconds ?? 2;
|
|
137
|
+
const defaultLocalConcurrency = options.defaultLocalConcurrency ?? DEFAULT_LOCAL_CONCURRENCY;
|
|
138
|
+
for (const { definition } of registered.values()) {
|
|
139
|
+
if (workersStarted.has(definition.name)) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
const localConcurrency = definition.defaults?.localConcurrency ?? defaultLocalConcurrency;
|
|
143
|
+
await instance.work(definition.name, {
|
|
144
|
+
batchSize: 1,
|
|
145
|
+
localConcurrency,
|
|
146
|
+
pollingIntervalSeconds,
|
|
147
|
+
notifyPollingIntervalSeconds: pollingIntervalSeconds,
|
|
148
|
+
}, async (batch) => {
|
|
149
|
+
const job = batch[0];
|
|
150
|
+
if (job === undefined) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const parsed = definition.schema.safeParse(job.data);
|
|
154
|
+
if (!parsed.success) {
|
|
155
|
+
options.logger.error('job payload rejected by schema', {
|
|
156
|
+
job: definition.name,
|
|
157
|
+
id: job.id,
|
|
158
|
+
issues: parsed.error.issues,
|
|
159
|
+
});
|
|
160
|
+
throw new Error(`job "${definition.name}" payload does not match its schema: ${parsed.error.issues
|
|
161
|
+
.map((issue) => issue.message)
|
|
162
|
+
.join('; ')}`);
|
|
163
|
+
}
|
|
164
|
+
const jobLogger = options.logger.child({ job: definition.name, jobId: job.id });
|
|
165
|
+
const context = {
|
|
166
|
+
id: job.id,
|
|
167
|
+
data: parsed.data,
|
|
168
|
+
log: jobLogger,
|
|
169
|
+
signal: job.signal,
|
|
170
|
+
};
|
|
171
|
+
try {
|
|
172
|
+
await definition.handler(context);
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
jobLogger.error('job handler failed', { error: describeThrown(error) });
|
|
176
|
+
throw error;
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
workersStarted.add(definition.name);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async function enqueueOnTx(tx, handle, data, enqueueOptions = {}) {
|
|
183
|
+
const instance = requireBoss();
|
|
184
|
+
const entry = registered.get(handle.name);
|
|
185
|
+
if (entry === undefined) {
|
|
186
|
+
throw new Error(`enqueue for unregistered job "${handle.name}"`);
|
|
187
|
+
}
|
|
188
|
+
return instance.send(handle.name, data, {
|
|
189
|
+
db: fromDrizzle(tx, sql),
|
|
190
|
+
...(enqueueOptions.retryLimit === undefined ? {} : { retryLimit: enqueueOptions.retryLimit }),
|
|
191
|
+
...(enqueueOptions.retryBackoff === undefined
|
|
192
|
+
? {}
|
|
193
|
+
: { retryBackoff: enqueueOptions.retryBackoff }),
|
|
194
|
+
...(enqueueOptions.singletonKey === undefined
|
|
195
|
+
? {}
|
|
196
|
+
: { singletonKey: enqueueOptions.singletonKey }),
|
|
197
|
+
...(enqueueOptions.startAfter === undefined ? {} : { startAfter: enqueueOptions.startAfter }),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
async function stop() {
|
|
201
|
+
const instance = boss;
|
|
202
|
+
if (instance === undefined) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
for (const name of workersStarted) {
|
|
206
|
+
try {
|
|
207
|
+
await instance.offWork(name, { wait: true });
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
options.logger.error('offWork failed', {
|
|
211
|
+
job: name,
|
|
212
|
+
error: describeThrown(error),
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
workersStarted.clear();
|
|
217
|
+
await instance.stop({ graceful: true, close: true, timeout: 30_000 });
|
|
218
|
+
boss = undefined;
|
|
219
|
+
queuesCreated.clear();
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
registry,
|
|
223
|
+
hasHandle: (name) => registered.has(name),
|
|
224
|
+
migrate,
|
|
225
|
+
start,
|
|
226
|
+
startWorking,
|
|
227
|
+
enqueueOnTx,
|
|
228
|
+
stop,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=jobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/runtime/jobs.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/module.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import type { Actor } from '../lib/actor.ts';
|
|
|
4
4
|
import type { Database } from '../lib/database.ts';
|
|
5
5
|
import type { EmailSender } from '../lib/email.ts';
|
|
6
6
|
import type { IdFactory } from '../lib/ids.ts';
|
|
7
|
+
import type { JobRegistry } from '../lib/jobs.ts';
|
|
7
8
|
import type { Logger } from '../lib/logger.ts';
|
|
8
9
|
import type { SecretEncryptionConfig } from '../lib/secrets.ts';
|
|
9
10
|
import type { EntitlementRegistry } from './entitlements.ts';
|
|
@@ -119,6 +120,14 @@ export interface ModuleServices {
|
|
|
119
120
|
* `secretEncryption`. Same fallback pattern as `appBaseUrl`.
|
|
120
121
|
*/
|
|
121
122
|
readonly secretEncryption?: SecretEncryptionConfig | undefined;
|
|
123
|
+
/**
|
|
124
|
+
* Whether the instance accepts a brand-new account, from `kelpie.config.ts`'s
|
|
125
|
+
* `signups` (or `SIGNUPS`). Undefined defaults to `true` (open), the same
|
|
126
|
+
* default `loadConfig` and `resolveKelpieConfig` use, so a caller that has
|
|
127
|
+
* not thought about it — a test, an older assembly — sees no change in
|
|
128
|
+
* behaviour.
|
|
129
|
+
*/
|
|
130
|
+
readonly signupsEnabled?: boolean;
|
|
122
131
|
}
|
|
123
132
|
export interface ModuleContext extends ModuleServices {
|
|
124
133
|
/** Registers routes. They mount under `/v1` and are public API like any other. */
|
|
@@ -217,6 +226,17 @@ export interface ModuleContext extends ModuleServices {
|
|
|
217
226
|
* commits, and must be idempotent.
|
|
218
227
|
*/
|
|
219
228
|
readonly events: EventBus;
|
|
229
|
+
/**
|
|
230
|
+
* Declares a background job. Modules call `context.jobs.define(...)` at
|
|
231
|
+
* register time and receive a typed handle to enqueue against. The insert
|
|
232
|
+
* lives inside the caller's transaction (`services.transaction`) so a
|
|
233
|
+
* rollback discards the job.
|
|
234
|
+
*
|
|
235
|
+
* A second `define` with the same name fails boot. Handlers run out of
|
|
236
|
+
* process on the worker entry point, or inline when the API runs its own
|
|
237
|
+
* worker.
|
|
238
|
+
*/
|
|
239
|
+
readonly jobs: JobRegistry;
|
|
220
240
|
/**
|
|
221
241
|
* Declare capabilities and check grants. Every check is granted and unlimited
|
|
222
242
|
* until a module registers a provider.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/runtime/module.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/runtime/module.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import type { Context, Handler, MiddlewareHandler } from 'hono';
|
|
|
3
3
|
import type { Actor } from '../lib/actor.ts';
|
|
4
4
|
import type { Environment } from '../lib/config.ts';
|
|
5
5
|
import type { EmailSender } from '../lib/email.ts';
|
|
6
|
+
import type { JobRegistry } from '../lib/jobs.ts';
|
|
6
7
|
import type { Logger } from '../lib/logger.ts';
|
|
7
8
|
import type { EntitlementRegistry } from './entitlements.ts';
|
|
8
9
|
import type { EventBus } from './events.ts';
|
|
@@ -85,6 +86,13 @@ export interface ModuleRuntimeOptions {
|
|
|
85
86
|
* two modules had registered it.
|
|
86
87
|
*/
|
|
87
88
|
readonly additionalEmailProviders?: ReadonlyMap<string, EmailSender> | undefined;
|
|
89
|
+
/**
|
|
90
|
+
* The job registry modules bind to at register time. Bound to the pg-boss
|
|
91
|
+
* runtime in production (`runtime/jobs.ts`) and to a stub in unit tests
|
|
92
|
+
* that never define a job. A module that calls `context.jobs.define` when
|
|
93
|
+
* this is absent gets a boot-time error naming the module.
|
|
94
|
+
*/
|
|
95
|
+
readonly jobs?: JobRegistry | undefined;
|
|
88
96
|
/**
|
|
89
97
|
* The deploy-time module override (`lib/moduleConfig.ts`), parsed. A locked
|
|
90
98
|
* module id wins over whatever a workspace's own settings say.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/runtime/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AAE/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAEhE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAE5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,EAGV,YAAY,EACZ,OAAO,EAGP,cAAc,EACd,kBAAkB,EAEnB,MAAM,aAAa,CAAA;AAIpB;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAA;IACzC,0FAA0F;IAC1F,QAAQ,CAAC,aAAa,EAAE,SAAS,YAAY,EAAE,CAAA;IAC/C,qFAAqF;IACrF,QAAQ,CAAC,aAAa,EAAE,SAAS,yBAAyB,EAAE,CAAA;IAC5D,sEAAsE;IACtE,QAAQ,CAAC,SAAS,EAAE,SAAS,oBAAoB,EAAE,CAAA;IACnD,QAAQ,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAA;IAC/C,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;IACrC,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;IACzB,yEAAyE;IACzE,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAA;CAC3C;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;CACpC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/runtime/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/registry.js
CHANGED
|
@@ -25,6 +25,97 @@ function assertMountablePath(moduleId, kind, path) {
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
+
/** Verb methods a module can call on the router — full Hono set. */
|
|
29
|
+
const ROUTER_VERB_METHODS = ['get', 'post', 'put', 'patch', 'delete', 'options', 'all'];
|
|
30
|
+
function isRouterVerbMethod(name) {
|
|
31
|
+
return ROUTER_VERB_METHODS.includes(name);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Wraps a Hono router so every route the module registers runs `gate` first,
|
|
35
|
+
* and only that module's own routes. The straightforward alternative —
|
|
36
|
+
* `router.use('*', gate)` — attaches at `/v1/*` on the app once the router is
|
|
37
|
+
* mounted (Hono flattens sub-routers onto the parent prefix), so the gate
|
|
38
|
+
* fires for every module's routes, not just this module's. Prepending the gate
|
|
39
|
+
* to each declared route keeps the check local.
|
|
40
|
+
*
|
|
41
|
+
* The full router surface is covered so a future contributor cannot silently
|
|
42
|
+
* reintroduce the leak by reaching for a method that was not wrapped:
|
|
43
|
+
*
|
|
44
|
+
* - HTTP verbs and `on`: prepend `gate`, then the module's handlers.
|
|
45
|
+
* - `use(pattern, ...)` at a specific path: prepend `gate`, then the mw.
|
|
46
|
+
* - `route(subPath, subApp)`: recursively wrap `subApp` before mounting, so
|
|
47
|
+
* every route it contributes still runs the gate first.
|
|
48
|
+
*
|
|
49
|
+
* And the calls that cannot be made module-local through wrapping fail at
|
|
50
|
+
* boot with a message naming the module, rather than shipping a subtle leak:
|
|
51
|
+
*
|
|
52
|
+
* - `use()` with no path, `use('*')`, `use('/*')`, `use('/')`: any of these
|
|
53
|
+
* register a middleware at `/v1/*` on the parent app once the router is
|
|
54
|
+
* mounted — the exact bug this wrapper prevents. A module that wants to
|
|
55
|
+
* share middleware across many of its routes must name a specific path
|
|
56
|
+
* (`/things/*`) or attach the middleware per route.
|
|
57
|
+
* - `notFound` / `onError`: fire for every unmatched or failing `/v1`
|
|
58
|
+
* request once the router is flattened, so a module's handler would run
|
|
59
|
+
* for other modules' traffic. Handle failures inside the module's own
|
|
60
|
+
* route handlers instead.
|
|
61
|
+
*/
|
|
62
|
+
function gateRouter(router, moduleId, gate) {
|
|
63
|
+
const proxy = new Proxy(router, {
|
|
64
|
+
get(target, property, receiver) {
|
|
65
|
+
if (typeof property !== 'string') {
|
|
66
|
+
return Reflect.get(target, property, receiver);
|
|
67
|
+
}
|
|
68
|
+
if (isRouterVerbMethod(property)) {
|
|
69
|
+
return (path, ...handlers) => {
|
|
70
|
+
const method = target[property];
|
|
71
|
+
method.call(target, path, gate, ...handlers);
|
|
72
|
+
return proxy;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
if (property === 'on') {
|
|
76
|
+
return (method, path, ...handlers) => {
|
|
77
|
+
target.on(method, path, gate, ...handlers);
|
|
78
|
+
return proxy;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
if (property === 'use') {
|
|
82
|
+
return (...args) => {
|
|
83
|
+
const first = args[0];
|
|
84
|
+
const isAppWide = typeof first !== 'string' || first === '*' || first === '/*' || first === '/';
|
|
85
|
+
if (isAppWide) {
|
|
86
|
+
throw new ModuleBootError([
|
|
87
|
+
`module "${moduleId}" called router.use() with an app-wide pattern (${typeof first === 'string' ? `"${first}"` : 'no path'}). Hono flattens the module router onto "/v1", so this would fire for every module's routes. Name a specific path ("/things/*") or attach middleware per route.`,
|
|
88
|
+
]);
|
|
89
|
+
}
|
|
90
|
+
const [pattern, ...handlers] = args;
|
|
91
|
+
target.use(pattern, gate, ...handlers);
|
|
92
|
+
return proxy;
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
if (property === 'route') {
|
|
96
|
+
return (path, subApp) => {
|
|
97
|
+
// The sub-app's routes were registered on it before this call, so a
|
|
98
|
+
// proxy over `subApp` cannot retroactively prepend the gate to them.
|
|
99
|
+
// Instead attach the gate as middleware scoped to the sub-router's
|
|
100
|
+
// mount prefix on this router — once flattened onto `/v1`, the
|
|
101
|
+
// middleware covers exactly `/v1${path}/*`, which is the module's
|
|
102
|
+
// own routes. `use` must land before `route` so composition order
|
|
103
|
+
// runs the gate first.
|
|
104
|
+
target.use(`${path.replace(/\/+$/, '')}/*`, gate);
|
|
105
|
+
target.route(path, subApp);
|
|
106
|
+
return proxy;
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
if (property === 'notFound' || property === 'onError') {
|
|
110
|
+
throw new ModuleBootError([
|
|
111
|
+
`module "${moduleId}" called router.${property}(). A module router's ${property} fires for every unmatched or failing "/v1" request once the router is mounted; handle failures inside the module's own route handlers instead.`,
|
|
112
|
+
]);
|
|
113
|
+
}
|
|
114
|
+
return Reflect.get(target, property, receiver);
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
return proxy;
|
|
118
|
+
}
|
|
28
119
|
/**
|
|
29
120
|
* The email sender every module writes through. `target` is set once, after
|
|
30
121
|
* all modules have registered, from the provider `email.provider` picked. Until
|
|
@@ -79,10 +170,25 @@ class ExternalSignInProxy {
|
|
|
79
170
|
* that tries to register under this name fails boot.
|
|
80
171
|
*/
|
|
81
172
|
const LOG_PROVIDER_NAME = 'log';
|
|
173
|
+
/**
|
|
174
|
+
* Refuses `define` for a module that reached `context.jobs` when the runtime
|
|
175
|
+
* booted without a jobs registry. Named so a boot log points at the module
|
|
176
|
+
* whose declaration cannot be honoured, rather than a bare stack trace.
|
|
177
|
+
*/
|
|
178
|
+
function createMissingJobsRegistry(moduleId) {
|
|
179
|
+
return {
|
|
180
|
+
define() {
|
|
181
|
+
throw new ModuleBootError([
|
|
182
|
+
`module "${moduleId}" defines a job but the assembly booted without a jobs runtime`,
|
|
183
|
+
]);
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
}
|
|
82
187
|
function createModuleContext(module, accumulator, options, events, entitlements, moduleCatalog, emailProxy, providers, externalSignIn) {
|
|
83
188
|
return {
|
|
84
189
|
...options.services,
|
|
85
190
|
email: emailProxy,
|
|
191
|
+
jobs: options.jobs ?? createMissingJobsRegistry(module.id),
|
|
86
192
|
provideExternalSignIn(handler) {
|
|
87
193
|
externalSignIn.install(module.id, handler);
|
|
88
194
|
},
|
|
@@ -105,19 +211,23 @@ function createModuleContext(module, accumulator, options, events, entitlements,
|
|
|
105
211
|
},
|
|
106
212
|
routes(mount) {
|
|
107
213
|
const router = new Hono();
|
|
108
|
-
// Gate
|
|
109
|
-
//
|
|
110
|
-
//
|
|
111
|
-
//
|
|
214
|
+
// Gate must run before anything `mount` adds. A `router.use('*', gate)`
|
|
215
|
+
// here would attach at `/v1/*` on the app after mounting (Hono flattens
|
|
216
|
+
// the sub-router onto the parent prefix), which would fire the gate for
|
|
217
|
+
// every module's routes, not just this one's. So the gate is prepended
|
|
218
|
+
// to each individual route through `gateRouter` instead.
|
|
112
219
|
if (module.structural !== true && options.resolveActor !== undefined) {
|
|
113
220
|
const { resolveActor } = options;
|
|
114
|
-
|
|
221
|
+
const gate = async (context, next) => {
|
|
115
222
|
const actor = await resolveActor(context);
|
|
116
223
|
await requireCapability(entitlements, requireWorkspaceId(actor), moduleCapabilityName(module.id));
|
|
117
224
|
await next();
|
|
118
|
-
}
|
|
225
|
+
};
|
|
226
|
+
mount(gateRouter(router, module.id, gate));
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
mount(router);
|
|
119
230
|
}
|
|
120
|
-
mount(router);
|
|
121
231
|
accumulator.routers.push({ moduleId: module.id, router });
|
|
122
232
|
},
|
|
123
233
|
publicRoutes(mount) {
|