@kelpie/server 0.5.2 → 0.7.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/README.md +5 -2
- package/dist/app.d.ts +13 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +9 -0
- package/dist/app.js.map +1 -1
- package/dist/boot.d.ts +42 -0
- package/dist/boot.d.ts.map +1 -0
- package/dist/boot.js +57 -0
- package/dist/boot.js.map +1 -0
- package/dist/index.d.ts +20 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/actor.d.ts +9 -1
- package/dist/lib/actor.d.ts.map +1 -1
- package/dist/lib/actor.js +13 -0
- package/dist/lib/actor.js.map +1 -1
- package/dist/lib/config.d.ts +51 -6
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +11 -5
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/email.d.ts +15 -63
- package/dist/lib/email.d.ts.map +1 -1
- package/dist/lib/email.js +13 -65
- package/dist/lib/email.js.map +1 -1
- package/dist/lib/fromEnv.d.ts +60 -0
- package/dist/lib/fromEnv.d.ts.map +1 -0
- package/dist/lib/fromEnv.js +94 -0
- package/dist/lib/fromEnv.js.map +1 -0
- package/dist/lib/ids.d.ts +6 -0
- package/dist/lib/ids.d.ts.map +1 -1
- package/dist/lib/ids.js +6 -0
- package/dist/lib/ids.js.map +1 -1
- package/dist/lib/kelpieConfigFile.d.ts +129 -0
- package/dist/lib/kelpieConfigFile.d.ts.map +1 -0
- package/dist/lib/kelpieConfigFile.js +112 -0
- package/dist/lib/kelpieConfigFile.js.map +1 -0
- package/dist/lib/logger.d.ts +38 -7
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +58 -20
- package/dist/lib/logger.js.map +1 -1
- package/dist/modules/agent-tasks/index.d.ts.map +1 -1
- package/dist/modules/agent-tasks/index.js +4 -1
- package/dist/modules/agent-tasks/index.js.map +1 -1
- package/dist/modules/agent-tasks/prompt.d.ts +36 -6
- package/dist/modules/agent-tasks/prompt.d.ts.map +1 -1
- package/dist/modules/agent-tasks/prompt.js +33 -4
- package/dist/modules/agent-tasks/prompt.js.map +1 -1
- package/dist/modules/agent-tasks/service.d.ts.map +1 -1
- package/dist/modules/agent-tasks/service.js +3 -2
- package/dist/modules/agent-tasks/service.js.map +1 -1
- package/dist/modules/agent-tasks/wire.d.ts +11 -0
- package/dist/modules/agent-tasks/wire.d.ts.map +1 -1
- package/dist/modules/agent-tasks/wire.js +1 -0
- package/dist/modules/agent-tasks/wire.js.map +1 -1
- package/dist/modules/auth/index.d.ts.map +1 -1
- package/dist/modules/auth/index.js +8 -7
- package/dist/modules/auth/index.js.map +1 -1
- package/dist/modules/companies/events.d.ts +22 -0
- package/dist/modules/companies/events.d.ts.map +1 -0
- package/dist/modules/companies/events.js +8 -0
- package/dist/modules/companies/events.js.map +1 -0
- package/dist/modules/companies/index.d.ts.map +1 -1
- package/dist/modules/companies/index.js +2 -0
- package/dist/modules/companies/index.js.map +1 -1
- package/dist/modules/companies/service.d.ts +1 -0
- package/dist/modules/companies/service.d.ts.map +1 -1
- package/dist/modules/companies/service.js +8 -11
- package/dist/modules/companies/service.js.map +1 -1
- package/dist/modules/core.d.ts.map +1 -1
- package/dist/modules/core.js +4 -0
- package/dist/modules/core.js.map +1 -1
- package/dist/modules/deals/events.d.ts +31 -0
- package/dist/modules/deals/events.d.ts.map +1 -0
- package/dist/modules/deals/events.js +12 -0
- package/dist/modules/deals/events.js.map +1 -0
- package/dist/modules/deals/index.d.ts.map +1 -1
- package/dist/modules/deals/index.js +2 -0
- package/dist/modules/deals/index.js.map +1 -1
- package/dist/modules/deals/service.d.ts +1 -0
- package/dist/modules/deals/service.d.ts.map +1 -1
- package/dist/modules/deals/service.js +9 -18
- package/dist/modules/deals/service.js.map +1 -1
- package/dist/modules/decisions/events.d.ts +21 -0
- package/dist/modules/decisions/events.d.ts.map +1 -0
- package/dist/modules/decisions/events.js +11 -0
- package/dist/modules/decisions/events.js.map +1 -0
- package/dist/modules/decisions/index.d.ts.map +1 -1
- package/dist/modules/decisions/index.js +2 -0
- package/dist/modules/decisions/index.js.map +1 -1
- package/dist/modules/decisions/service.d.ts +1 -0
- package/dist/modules/decisions/service.d.ts.map +1 -1
- package/dist/modules/decisions/service.js +4 -7
- package/dist/modules/decisions/service.js.map +1 -1
- package/dist/modules/eventCatalogs.d.ts +35 -0
- package/dist/modules/eventCatalogs.d.ts.map +1 -0
- package/dist/modules/eventCatalogs.js +35 -0
- package/dist/modules/eventCatalogs.js.map +1 -0
- package/dist/modules/forms/events.d.ts +37 -0
- package/dist/modules/forms/events.d.ts.map +1 -0
- package/dist/modules/forms/events.js +15 -0
- package/dist/modules/forms/events.js.map +1 -0
- package/dist/modules/forms/index.d.ts.map +1 -1
- package/dist/modules/forms/index.js +2 -0
- package/dist/modules/forms/index.js.map +1 -1
- package/dist/modules/forms/service.d.ts +1 -0
- package/dist/modules/forms/service.d.ts.map +1 -1
- package/dist/modules/forms/service.js +8 -11
- package/dist/modules/forms/service.js.map +1 -1
- package/dist/modules/forms/submission.d.ts +5 -0
- package/dist/modules/forms/submission.d.ts.map +1 -1
- package/dist/modules/forms/submission.js +54 -28
- package/dist/modules/forms/submission.js.map +1 -1
- package/dist/modules/handbook/events.d.ts +28 -0
- package/dist/modules/handbook/events.d.ts.map +1 -0
- package/dist/modules/handbook/events.js +14 -0
- package/dist/modules/handbook/events.js.map +1 -0
- package/dist/modules/handbook/index.d.ts.map +1 -1
- package/dist/modules/handbook/index.js +2 -0
- package/dist/modules/handbook/index.js.map +1 -1
- package/dist/modules/handbook/service.d.ts +1 -0
- package/dist/modules/handbook/service.d.ts.map +1 -1
- package/dist/modules/handbook/service.js +8 -15
- package/dist/modules/handbook/service.js.map +1 -1
- package/dist/modules/hiring/candidates.d.ts +1 -0
- package/dist/modules/hiring/candidates.d.ts.map +1 -1
- package/dist/modules/hiring/candidates.js +8 -11
- package/dist/modules/hiring/candidates.js.map +1 -1
- package/dist/modules/hiring/events.d.ts +35 -0
- package/dist/modules/hiring/events.d.ts.map +1 -0
- package/dist/modules/hiring/events.js +11 -0
- package/dist/modules/hiring/events.js.map +1 -0
- package/dist/modules/hiring/index.d.ts.map +1 -1
- package/dist/modules/hiring/index.js +2 -0
- package/dist/modules/hiring/index.js.map +1 -1
- package/dist/modules/hiring/roles.d.ts +1 -0
- package/dist/modules/hiring/roles.d.ts.map +1 -1
- package/dist/modules/hiring/roles.js +8 -11
- package/dist/modules/hiring/roles.js.map +1 -1
- package/dist/modules/import-export/drafts.d.ts +9 -0
- package/dist/modules/import-export/drafts.d.ts.map +1 -1
- package/dist/modules/import-export/drafts.js +25 -0
- package/dist/modules/import-export/drafts.js.map +1 -1
- package/dist/modules/import-export/events.d.ts +22 -0
- package/dist/modules/import-export/events.d.ts.map +1 -0
- package/dist/modules/import-export/events.js +12 -0
- package/dist/modules/import-export/events.js.map +1 -0
- package/dist/modules/import-export/exportRows.d.ts +9 -0
- package/dist/modules/import-export/exportRows.d.ts.map +1 -1
- package/dist/modules/import-export/exportRows.js +10 -1
- package/dist/modules/import-export/exportRows.js.map +1 -1
- package/dist/modules/import-export/index.d.ts.map +1 -1
- package/dist/modules/import-export/index.js +2 -0
- package/dist/modules/import-export/index.js.map +1 -1
- package/dist/modules/import-export/plan.d.ts +23 -1
- package/dist/modules/import-export/plan.d.ts.map +1 -1
- package/dist/modules/import-export/plan.js +62 -3
- 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 +25 -0
- package/dist/modules/import-export/presets.js.map +1 -1
- package/dist/modules/import-export/repository.d.ts +17 -0
- package/dist/modules/import-export/repository.d.ts.map +1 -1
- package/dist/modules/import-export/repository.js +21 -1
- package/dist/modules/import-export/repository.js.map +1 -1
- package/dist/modules/import-export/routes.d.ts.map +1 -1
- package/dist/modules/import-export/routes.js +5 -1
- package/dist/modules/import-export/routes.js.map +1 -1
- package/dist/modules/import-export/schema.d.ts +55 -0
- package/dist/modules/import-export/schema.d.ts.map +1 -1
- package/dist/modules/import-export/schema.js +13 -1
- package/dist/modules/import-export/schema.js.map +1 -1
- package/dist/modules/import-export/service.d.ts +9 -1
- package/dist/modules/import-export/service.d.ts.map +1 -1
- package/dist/modules/import-export/service.js +104 -17
- package/dist/modules/import-export/service.js.map +1 -1
- package/dist/modules/import-export/tools.d.ts.map +1 -1
- package/dist/modules/import-export/tools.js +7 -1
- package/dist/modules/import-export/tools.js.map +1 -1
- package/dist/modules/import-export/writes.d.ts +16 -0
- package/dist/modules/import-export/writes.d.ts.map +1 -1
- package/dist/modules/import-export/writes.js +77 -2
- package/dist/modules/import-export/writes.js.map +1 -1
- package/dist/modules/notes/events.d.ts +22 -0
- package/dist/modules/notes/events.d.ts.map +1 -0
- package/dist/modules/notes/events.js +12 -0
- package/dist/modules/notes/events.js.map +1 -0
- package/dist/modules/notes/index.d.ts.map +1 -1
- package/dist/modules/notes/index.js +2 -0
- package/dist/modules/notes/index.js.map +1 -1
- package/dist/modules/notes/service.d.ts +1 -0
- package/dist/modules/notes/service.d.ts.map +1 -1
- package/dist/modules/notes/service.js +4 -7
- package/dist/modules/notes/service.js.map +1 -1
- package/dist/modules/opportunities/events.d.ts +31 -0
- package/dist/modules/opportunities/events.d.ts.map +1 -0
- package/dist/modules/opportunities/events.js +12 -0
- package/dist/modules/opportunities/events.js.map +1 -0
- package/dist/modules/opportunities/index.d.ts.map +1 -1
- package/dist/modules/opportunities/index.js +2 -0
- package/dist/modules/opportunities/index.js.map +1 -1
- package/dist/modules/opportunities/service.d.ts +1 -0
- package/dist/modules/opportunities/service.d.ts.map +1 -1
- package/dist/modules/opportunities/service.js +9 -18
- package/dist/modules/opportunities/service.js.map +1 -1
- package/dist/modules/partnerships/events.d.ts +31 -0
- package/dist/modules/partnerships/events.d.ts.map +1 -0
- package/dist/modules/partnerships/events.js +12 -0
- package/dist/modules/partnerships/events.js.map +1 -0
- package/dist/modules/partnerships/index.d.ts.map +1 -1
- package/dist/modules/partnerships/index.js +2 -0
- package/dist/modules/partnerships/index.js.map +1 -1
- package/dist/modules/partnerships/service.d.ts +1 -0
- package/dist/modules/partnerships/service.d.ts.map +1 -1
- package/dist/modules/partnerships/service.js +9 -18
- package/dist/modules/partnerships/service.js.map +1 -1
- package/dist/modules/people/events.d.ts +28 -0
- package/dist/modules/people/events.d.ts.map +1 -0
- package/dist/modules/people/events.js +18 -0
- package/dist/modules/people/events.js.map +1 -0
- package/dist/modules/people/index.d.ts.map +1 -1
- package/dist/modules/people/index.js +2 -0
- package/dist/modules/people/index.js.map +1 -1
- package/dist/modules/people/service.d.ts +1 -0
- package/dist/modules/people/service.d.ts.map +1 -1
- package/dist/modules/people/service.js +8 -11
- package/dist/modules/people/service.js.map +1 -1
- package/dist/modules/pipelines/service.d.ts +4 -0
- package/dist/modules/pipelines/service.d.ts.map +1 -1
- package/dist/modules/pipelines/service.js +31 -8
- package/dist/modules/pipelines/service.js.map +1 -1
- package/dist/modules/plans/events.d.ts +21 -0
- package/dist/modules/plans/events.d.ts.map +1 -0
- package/dist/modules/plans/events.js +11 -0
- package/dist/modules/plans/events.js.map +1 -0
- package/dist/modules/plans/index.d.ts.map +1 -1
- package/dist/modules/plans/index.js +2 -0
- package/dist/modules/plans/index.js.map +1 -1
- package/dist/modules/plans/service.d.ts +1 -0
- package/dist/modules/plans/service.d.ts.map +1 -1
- package/dist/modules/plans/service.js +6 -14
- package/dist/modules/plans/service.js.map +1 -1
- package/dist/modules/positions/events.d.ts +22 -0
- package/dist/modules/positions/events.d.ts.map +1 -0
- package/dist/modules/positions/events.js +8 -0
- package/dist/modules/positions/events.js.map +1 -0
- package/dist/modules/positions/index.d.ts.map +1 -1
- package/dist/modules/positions/index.js +2 -0
- package/dist/modules/positions/index.js.map +1 -1
- package/dist/modules/positions/service.d.ts +1 -0
- package/dist/modules/positions/service.d.ts.map +1 -1
- package/dist/modules/positions/service.js +8 -11
- package/dist/modules/positions/service.js.map +1 -1
- package/dist/modules/raises/events.d.ts +31 -0
- package/dist/modules/raises/events.d.ts.map +1 -0
- package/dist/modules/raises/events.js +12 -0
- package/dist/modules/raises/events.js.map +1 -0
- package/dist/modules/raises/index.d.ts.map +1 -1
- package/dist/modules/raises/index.js +2 -0
- package/dist/modules/raises/index.js.map +1 -1
- package/dist/modules/raises/service.d.ts +1 -0
- package/dist/modules/raises/service.d.ts.map +1 -1
- package/dist/modules/raises/service.js +9 -18
- package/dist/modules/raises/service.js.map +1 -1
- package/dist/modules/reseal.d.ts +55 -0
- package/dist/modules/reseal.d.ts.map +1 -1
- package/dist/modules/reseal.js +90 -1
- package/dist/modules/reseal.js.map +1 -1
- package/dist/modules/smtp-email/index.d.ts +69 -0
- package/dist/modules/smtp-email/index.d.ts.map +1 -0
- package/dist/modules/smtp-email/index.js +82 -0
- package/dist/modules/smtp-email/index.js.map +1 -0
- package/dist/modules/webhooks/index.d.ts.map +1 -1
- package/dist/modules/webhooks/index.js +5 -1
- package/dist/modules/webhooks/index.js.map +1 -1
- package/dist/modules/webhooks/payloads.d.ts +22 -7
- package/dist/modules/webhooks/payloads.d.ts.map +1 -1
- package/dist/modules/webhooks/payloads.js +63 -44
- package/dist/modules/webhooks/payloads.js.map +1 -1
- package/dist/modules/workspace/events.d.ts +52 -0
- package/dist/modules/workspace/events.d.ts.map +1 -0
- package/dist/modules/workspace/events.js +16 -0
- package/dist/modules/workspace/events.js.map +1 -0
- package/dist/modules/workspace/index.d.ts.map +1 -1
- package/dist/modules/workspace/index.js +6 -2
- package/dist/modules/workspace/index.js.map +1 -1
- package/dist/modules/workspace/service.d.ts +1 -0
- package/dist/modules/workspace/service.d.ts.map +1 -1
- package/dist/modules/workspace/service.js +13 -15
- package/dist/modules/workspace/service.js.map +1 -1
- package/dist/runtime/events.d.ts +86 -108
- package/dist/runtime/events.d.ts.map +1 -1
- package/dist/runtime/events.js +123 -52
- package/dist/runtime/events.js.map +1 -1
- package/dist/runtime/module.d.ts +54 -2
- package/dist/runtime/module.d.ts.map +1 -1
- package/dist/runtime/registry.d.ts +23 -0
- package/dist/runtime/registry.d.ts.map +1 -1
- package/dist/runtime/registry.js +102 -2
- package/dist/runtime/registry.js.map +1 -1
- package/dist/runtime/transaction.d.ts +29 -4
- package/dist/runtime/transaction.d.ts.map +1 -1
- package/dist/runtime/transaction.js +48 -7
- package/dist/runtime/transaction.js.map +1 -1
- package/dist/testing/app.d.ts +5 -1
- package/dist/testing/app.d.ts.map +1 -1
- package/dist/testing/app.js +13 -3
- package/dist/testing/app.js.map +1 -1
- package/dist/testing/database.d.ts.map +1 -1
- package/dist/testing/database.js +6 -3
- package/dist/testing/database.js.map +1 -1
- package/dist/testing/services.d.ts +21 -1
- package/dist/testing/services.d.ts.map +1 -1
- package/dist/testing/services.js +20 -5
- package/dist/testing/services.js.map +1 -1
- package/migrations/0019_sharp_red_skull.sql +4 -0
- package/migrations/0020_early_nemesis.sql +2 -0
- package/migrations/meta/0019_snapshot.json +5138 -0
- package/migrations/meta/0020_snapshot.json +5138 -0
- package/migrations/meta/_journal.json +14 -0
- package/package.json +5 -2
- package/src/app.ts +26 -0
- package/src/boot.ts +89 -0
- package/src/index.ts +52 -9
- package/src/lib/actor.ts +15 -1
- package/src/lib/config.ts +65 -7
- package/src/lib/email.ts +22 -92
- package/src/lib/fromEnv.ts +143 -0
- package/src/lib/ids.ts +6 -0
- package/src/lib/kelpieConfigFile.ts +291 -0
- package/src/lib/logger.ts +92 -34
- package/src/modules/agent-tasks/index.ts +4 -1
- package/src/modules/agent-tasks/prompt.ts +57 -9
- package/src/modules/agent-tasks/service.ts +3 -2
- package/src/modules/agent-tasks/wire.ts +12 -0
- package/src/modules/auth/index.ts +11 -9
- package/src/modules/companies/events.ts +25 -0
- package/src/modules/companies/index.ts +2 -0
- package/src/modules/companies/service.ts +8 -11
- package/src/modules/core.ts +4 -0
- package/src/modules/deals/events.ts +34 -0
- package/src/modules/deals/index.ts +2 -0
- package/src/modules/deals/service.ts +17 -18
- package/src/modules/decisions/events.ts +24 -0
- package/src/modules/decisions/index.ts +2 -0
- package/src/modules/decisions/service.ts +8 -7
- package/src/modules/eventCatalogs.ts +35 -0
- package/src/modules/forms/events.ts +37 -0
- package/src/modules/forms/index.ts +2 -0
- package/src/modules/forms/service.ts +12 -11
- package/src/modules/forms/submission.ts +80 -29
- package/src/modules/handbook/events.ts +31 -0
- package/src/modules/handbook/index.ts +2 -0
- package/src/modules/handbook/service.ts +8 -15
- package/src/modules/hiring/candidates.ts +8 -11
- package/src/modules/hiring/events.ts +36 -0
- package/src/modules/hiring/index.ts +2 -0
- package/src/modules/hiring/roles.ts +8 -11
- package/src/modules/import-export/drafts.ts +27 -0
- package/src/modules/import-export/events.ts +25 -0
- package/src/modules/import-export/exportRows.ts +10 -1
- package/src/modules/import-export/index.ts +2 -0
- package/src/modules/import-export/plan.ts +107 -5
- package/src/modules/import-export/presets.ts +25 -0
- package/src/modules/import-export/repository.ts +35 -1
- package/src/modules/import-export/routes.ts +5 -0
- package/src/modules/import-export/schema.ts +13 -0
- package/src/modules/import-export/service.ts +153 -19
- package/src/modules/import-export/tools.ts +9 -0
- package/src/modules/import-export/writes.ts +116 -3
- package/src/modules/notes/events.ts +25 -0
- package/src/modules/notes/index.ts +2 -0
- package/src/modules/notes/service.ts +8 -7
- package/src/modules/opportunities/events.ts +34 -0
- package/src/modules/opportunities/index.ts +2 -0
- package/src/modules/opportunities/service.ts +17 -18
- package/src/modules/partnerships/events.ts +34 -0
- package/src/modules/partnerships/index.ts +2 -0
- package/src/modules/partnerships/service.ts +17 -18
- package/src/modules/people/events.ts +36 -0
- package/src/modules/people/index.ts +2 -0
- package/src/modules/people/service.ts +97 -87
- package/src/modules/pipelines/service.ts +47 -8
- package/src/modules/plans/events.ts +24 -0
- package/src/modules/plans/index.ts +2 -0
- package/src/modules/plans/service.ts +14 -14
- package/src/modules/positions/events.ts +25 -0
- package/src/modules/positions/index.ts +2 -0
- package/src/modules/positions/service.ts +8 -11
- package/src/modules/raises/events.ts +34 -0
- package/src/modules/raises/index.ts +2 -0
- package/src/modules/raises/service.ts +17 -18
- package/src/modules/reseal.ts +144 -1
- package/src/modules/smtp-email/index.ts +119 -0
- package/src/modules/webhooks/index.ts +5 -1
- package/src/modules/webhooks/payloads.ts +94 -48
- package/src/modules/workspace/events.ts +46 -0
- package/src/modules/workspace/index.ts +6 -2
- package/src/modules/workspace/service.ts +37 -15
- package/src/runtime/events.ts +268 -107
- package/src/runtime/module.ts +55 -2
- package/src/runtime/registry.ts +169 -1
- package/src/runtime/transaction.ts +94 -17
- package/src/testing/app.ts +18 -4
- package/src/testing/database.ts +6 -3
- package/src/testing/services.ts +34 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reseal.js","sourceRoot":"","sources":["../../src/modules/reseal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"reseal.js","sourceRoot":"","sources":["../../src/modules/reseal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGpD,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAE3G,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AA+B/C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,cAAc,GAA4B;IAC9C;QACE,KAAK,EAAE,2BAA2B;QAClC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnG,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;YAC9B,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QACvF,CAAC;KACF;IACD;QACE,KAAK,EAAE,oCAAoC;QAC3C,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CACjB,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,uBAAuB,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QACzF,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;YAC9B,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,uBAAuB,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QAC/F,CAAC;KACF;IACD;QACE,KAAK,EAAE,2CAA2C;QAClD,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CACjB,EAAE;aACC,MAAM,CAAC,EAAE,EAAE,EAAE,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,kBAAkB,CAAC,mBAAmB,EAAE,CAAC;aACrF,IAAI,CAAC,kBAAkB,CAAC;QAC7B,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE;YAC9B,MAAM,EAAE;iBACL,MAAM,CAAC,kBAAkB,CAAC;iBAC1B,GAAG,CAAC,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC;iBACpC,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QACzC,CAAC;KACF;CACF,CAAA;AAED,uFAAuF;AACvF,MAAM,CAAC,MAAM,gBAAgB,GAAsB,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAuB/F;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAY,EACZ,MAAoB;IAEpB,MAAM,OAAO,GAA0B,EAAE,CAAA;IAEzC,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACpC,2EAA2E;QAC3E,wEAAwE;QACxE,6EAA6E;QAC7E,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CACzC,CAAC,GAAG,EAAyC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI,CACpE,CAAA;QACD,MAAM,UAAU,GAAa,EAAE,CAAA;QAC/B,IAAI,QAAQ,GAAG,CAAC,CAAA;QAEhB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,IAAwB,CAAA;YAE5B,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAClC,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,CAAC,KAAK,YAAY,qBAAqB,CAAC,EAAE,CAAC;oBAC9C,MAAM,KAAK,CAAA;gBACb,CAAC;gBAED,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACvB,SAAQ;YACV,CAAC;YAED,uEAAuE;YACvE,wDAAwD;YACxD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,SAAQ;YACV,CAAC;YAED,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;YACpC,QAAQ,IAAI,CAAC,CAAA;QACf,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAA;IACpF,CAAC;IAED,OAAO;QACL,OAAO;QACP,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;KACnF,CAAA;AACH,CAAC;AA2BD,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAA;AACtC,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe;IACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAA;AACtC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAyB;IACvD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAA;IAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,kBAAkB,CAAA;IAC7D,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;IAE5E,IAAI,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAA;IAElD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,4BAA4B,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAEzE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;YAEtB,MAAM,IAAI,kBAAkB,CAC1B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAChF,CAAA;QACH,CAAC;QAED,YAAY,GAAG,MAAM,CAAC,IAAI,CAAA;IAC5B,CAAC;IAED,MAAM,WAAW,GACf,YAAY,CAAC,8BAA8B,KAAK,SAAS;QACzD,YAAY,CAAC,8BAA8B,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAA;IAE/D,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,CAAC,2FAA2F,CAAC,CAAA;IACrG,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAA;IAC/C,MAAM,MAAM,GAA0B,CAAC,mBAAmB,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAA;IAE3F,IAAI,CAAC;QACH,uEAAuE;QACvE,oEAAoE;QACpE,+DAA+D;QAC/D,sBAAsB;QACtB,MAAM,QAAQ,GAAoB,EAAE,CAAA;QACpC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAA;QAChD,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC9D,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QACjF,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QACjF,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;QAErF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,CACJ,GAAG,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAC7I,CAAA;YAED,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACnC,WAAW,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;YACpC,CAAC;QACH,CAAC;QAED,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,WAAW,CACT,KAAK,MAAM,CAAC,UAAU,CAAC,kRAAkR,CAC1S,CAAA;YAED,OAAO,CAAC,CAAA;QACV,CAAC;QAED,MAAM,CACJ,QAAQ,KAAK,CAAC;YACZ,CAAC,CAAC,wBAAwB,MAAM,CAAC,QAAQ,CAAC,qDAAqD;YAC/F,CAAC,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,OAAO,MAAM,CAAC,QAAQ,CAAC,+DAA+D,CAC1H,CAAA;QAED,OAAO,CAAC,CAAA;IACV,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { EmailSender } from '../../lib/email.ts';
|
|
3
|
+
import type { Logger } from '../../lib/logger.ts';
|
|
4
|
+
import type { KelpieModule } from '../../runtime/module.ts';
|
|
5
|
+
/**
|
|
6
|
+
* The built-in SMTP email module.
|
|
7
|
+
*
|
|
8
|
+
* Registers a provider named `'smtp'` with core's email runtime. An assembly
|
|
9
|
+
* that sets `email.provider: 'smtp'` in its `kelpie.config.ts` uses this
|
|
10
|
+
* sender; any other value picks a different provider (`'log'` for the built-in
|
|
11
|
+
* or another provider module's name). Reads `EMAIL_FROM` and `SMTP_*` from the
|
|
12
|
+
* environment; missing or malformed values fail boot.
|
|
13
|
+
*
|
|
14
|
+
* A commercial email integration (Resend, Postmark) belongs in its own module
|
|
15
|
+
* following the same shape, registered under a different name.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* The name this module registers under. An assembly puts `provider: 'smtp'`
|
|
19
|
+
* in its `email` block to pick it.
|
|
20
|
+
*/
|
|
21
|
+
export declare const SMTP_EMAIL_PROVIDER = "smtp";
|
|
22
|
+
export type { EmailMessage } from '../../lib/email.ts';
|
|
23
|
+
declare const smtpEmailConfigSchema: z.ZodObject<{
|
|
24
|
+
EMAIL_FROM: z.ZodString;
|
|
25
|
+
SMTP_HOST: z.ZodString;
|
|
26
|
+
SMTP_PORT: z.ZodCoercedNumber<unknown>;
|
|
27
|
+
SMTP_SECURE: z.ZodPipe<z.ZodEnum<{
|
|
28
|
+
false: "false";
|
|
29
|
+
true: "true";
|
|
30
|
+
}>, z.ZodTransform<boolean, "false" | "true">>;
|
|
31
|
+
SMTP_USER: z.ZodString;
|
|
32
|
+
SMTP_PASSWORD: z.ZodString;
|
|
33
|
+
}, z.core.$strip>;
|
|
34
|
+
export type SmtpEmailConfig = z.infer<typeof smtpEmailConfigSchema>;
|
|
35
|
+
/**
|
|
36
|
+
* What `createSmtpEmailSender` sends a message through. A real deployment gets
|
|
37
|
+
* one backed by `nodemailer`; a test injects one that records calls, so the
|
|
38
|
+
* sender is verifiable without a container running a real SMTP conversation.
|
|
39
|
+
*/
|
|
40
|
+
export interface SmtpTransport {
|
|
41
|
+
sendMail(message: {
|
|
42
|
+
from: string;
|
|
43
|
+
to: string;
|
|
44
|
+
subject: string;
|
|
45
|
+
text: string;
|
|
46
|
+
}): Promise<unknown>;
|
|
47
|
+
}
|
|
48
|
+
/** Sends over SMTP. `transport` defaults to a real connection built from `config`. */
|
|
49
|
+
export declare function createSmtpEmailSender(config: SmtpEmailConfig, logger: Logger, transport?: SmtpTransport): EmailSender;
|
|
50
|
+
/**
|
|
51
|
+
* Options a caller may pass when building the module. `transport` is here for
|
|
52
|
+
* tests; a real deployment omits it and lets the module open a nodemailer
|
|
53
|
+
* connection from the resolved config.
|
|
54
|
+
*/
|
|
55
|
+
export interface SmtpEmailModuleOptions {
|
|
56
|
+
readonly transport?: SmtpTransport;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* The built-in SMTP module. Registers a factory under `SMTP_EMAIL_PROVIDER`;
|
|
60
|
+
* the factory reads the SMTP environment and builds the nodemailer sender, but
|
|
61
|
+
* only if the assembly's `email.provider` picks this module. Boot fails loudly
|
|
62
|
+
* if any SMTP variable is missing or malformed at that point.
|
|
63
|
+
*
|
|
64
|
+
* The module stays in `coreModules` unconditionally: on any other provider
|
|
65
|
+
* (e.g. `EMAIL_PROVIDER=log`) the factory never runs, so the SMTP environment
|
|
66
|
+
* is not checked.
|
|
67
|
+
*/
|
|
68
|
+
export declare function createSmtpEmailModule(options?: SmtpEmailModuleOptions): KelpieModule;
|
|
69
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/smtp-email/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,KAAK,EAAgB,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE3D;;;;;;;;;;;GAWG;AAEH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,SAAS,CAAA;AAEzC,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,QAAA,MAAM,qBAAqB;;;;;;;;;;iBAOzB,CAAA;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACjG;AAWD,sFAAsF;AACtF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,aAAiD,GAC3D,WAAW,CAiBb;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAA;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,YAAY,CAiBxF"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import nodemailer from 'nodemailer';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { describeThrown } from '../../lib/errors.js';
|
|
4
|
+
/**
|
|
5
|
+
* The built-in SMTP email module.
|
|
6
|
+
*
|
|
7
|
+
* Registers a provider named `'smtp'` with core's email runtime. An assembly
|
|
8
|
+
* that sets `email.provider: 'smtp'` in its `kelpie.config.ts` uses this
|
|
9
|
+
* sender; any other value picks a different provider (`'log'` for the built-in
|
|
10
|
+
* or another provider module's name). Reads `EMAIL_FROM` and `SMTP_*` from the
|
|
11
|
+
* environment; missing or malformed values fail boot.
|
|
12
|
+
*
|
|
13
|
+
* A commercial email integration (Resend, Postmark) belongs in its own module
|
|
14
|
+
* following the same shape, registered under a different name.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* The name this module registers under. An assembly puts `provider: 'smtp'`
|
|
18
|
+
* in its `email` block to pick it.
|
|
19
|
+
*/
|
|
20
|
+
export const SMTP_EMAIL_PROVIDER = 'smtp';
|
|
21
|
+
const smtpEmailConfigSchema = z.object({
|
|
22
|
+
EMAIL_FROM: z.string().min(1),
|
|
23
|
+
SMTP_HOST: z.string().min(1),
|
|
24
|
+
SMTP_PORT: z.coerce.number().int().positive().max(65535),
|
|
25
|
+
SMTP_SECURE: z.enum(['true', 'false']).transform((value) => value === 'true'),
|
|
26
|
+
SMTP_USER: z.string().min(1),
|
|
27
|
+
SMTP_PASSWORD: z.string().min(1),
|
|
28
|
+
});
|
|
29
|
+
function createNodemailerTransport(config) {
|
|
30
|
+
return nodemailer.createTransport({
|
|
31
|
+
host: config.SMTP_HOST,
|
|
32
|
+
port: config.SMTP_PORT,
|
|
33
|
+
secure: config.SMTP_SECURE,
|
|
34
|
+
auth: { user: config.SMTP_USER, pass: config.SMTP_PASSWORD },
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/** Sends over SMTP. `transport` defaults to a real connection built from `config`. */
|
|
38
|
+
export function createSmtpEmailSender(config, logger, transport = createNodemailerTransport(config)) {
|
|
39
|
+
return {
|
|
40
|
+
async send(message) {
|
|
41
|
+
try {
|
|
42
|
+
await transport.sendMail({
|
|
43
|
+
from: config.EMAIL_FROM,
|
|
44
|
+
to: message.to,
|
|
45
|
+
subject: message.subject,
|
|
46
|
+
text: message.body,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
catch (cause) {
|
|
50
|
+
const reason = describeThrown(cause);
|
|
51
|
+
logger.error('smtp send failed', { to: message.to, reason });
|
|
52
|
+
throw new Error(`Failed to send email to ${message.to} over SMTP: ${reason}`, { cause });
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The built-in SMTP module. Registers a factory under `SMTP_EMAIL_PROVIDER`;
|
|
59
|
+
* the factory reads the SMTP environment and builds the nodemailer sender, but
|
|
60
|
+
* only if the assembly's `email.provider` picks this module. Boot fails loudly
|
|
61
|
+
* if any SMTP variable is missing or malformed at that point.
|
|
62
|
+
*
|
|
63
|
+
* The module stays in `coreModules` unconditionally: on any other provider
|
|
64
|
+
* (e.g. `EMAIL_PROVIDER=log`) the factory never runs, so the SMTP environment
|
|
65
|
+
* is not checked.
|
|
66
|
+
*/
|
|
67
|
+
export function createSmtpEmailModule(options = {}) {
|
|
68
|
+
return {
|
|
69
|
+
id: 'smtp-email',
|
|
70
|
+
structural: true,
|
|
71
|
+
register(context) {
|
|
72
|
+
context.provideEmailSender(SMTP_EMAIL_PROVIDER, () => {
|
|
73
|
+
const config = context.config(smtpEmailConfigSchema);
|
|
74
|
+
return options.transport === undefined
|
|
75
|
+
? createSmtpEmailSender(config, context.log)
|
|
76
|
+
: createSmtpEmailSender(config, context.log, options.transport);
|
|
77
|
+
});
|
|
78
|
+
return Promise.resolve();
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/smtp-email/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/webhooks/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAO3D,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAOxD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,qBAAqB;IACpC,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAA;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CACvB;AAED,wBAAgB,oBAAoB,CAClC,mBAAmB,EAAE,MAAM,EAC3B,OAAO,GAAE,qBAA0B,GAClC,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/webhooks/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAO3D,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAOxD;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,qBAAqB;IACpC,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAA;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CACvB;AAED,wBAAgB,oBAAoB,CAClC,mBAAmB,EAAE,MAAM,EAC3B,OAAO,GAAE,qBAA0B,GAClC,YAAY,CAmDd"}
|
|
@@ -16,7 +16,11 @@ export function createWebhooksModule(migrationsDirectory, options = {}) {
|
|
|
16
16
|
// when a customer's endpoint goes quiet is far too late. The retention
|
|
17
17
|
// window is validated the same way for the same reason — a bad value
|
|
18
18
|
// should stop boot, not prune by the wrong window.
|
|
19
|
-
|
|
19
|
+
//
|
|
20
|
+
// Prefer the top-level `secretEncryption` from the assembly's
|
|
21
|
+
// kelpie.config.ts; fall back to the schema read for older assemblies
|
|
22
|
+
// that don't declare it.
|
|
23
|
+
const cipher = createSecretCipher(context.secretEncryption ?? context.config(secretEncryptionConfigSchema));
|
|
20
24
|
const retention = context.config(deliveryRetentionConfigSchema);
|
|
21
25
|
const egress = createEgressGuard(context.config(egressConfigSchema));
|
|
22
26
|
const service = createWebhooksService({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/webhooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAA;AAEvF,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,6BAA6B,EAC7B,QAAQ,GACT,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAsBlD,MAAM,UAAU,oBAAoB,CAClC,mBAA2B,EAC3B,OAAO,GAA0B,EAAE;IAEnC,OAAO;QACL,EAAE,EAAE,UAAU;QACd,QAAQ,EAAE,CAAC,WAAW,CAAC;QAEvB,QAAQ,CAAC,OAAO;YACd,oEAAoE;YACpE,0EAA0E;YAC1E,uEAAuE;YACvE,qEAAqE;YACrE,mDAAmD;YACnD,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/webhooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAA;AAEvF,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,6BAA6B,EAC7B,QAAQ,GACT,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAsBlD,MAAM,UAAU,oBAAoB,CAClC,mBAA2B,EAC3B,OAAO,GAA0B,EAAE;IAEnC,OAAO;QACL,EAAE,EAAE,UAAU;QACd,QAAQ,EAAE,CAAC,WAAW,CAAC;QAEvB,QAAQ,CAAC,OAAO;YACd,oEAAoE;YACpE,0EAA0E;YAC1E,uEAAuE;YACvE,qEAAqE;YACrE,mDAAmD;YACnD,EAAE;YACF,8DAA8D;YAC9D,sEAAsE;YACtE,yBAAyB;YACzB,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAA;YAC3G,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAA;YAC/D,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAA;YAEpE,MAAM,OAAO,GAAG,qBAAqB,CAAC;gBACpC,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,MAAM;aACP,CAAC,CAAA;YAEF,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,MAAM;gBACN,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,gBAAgB,CAAC,MAAM,CAAC;gBAC9C,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,QAAQ;gBAChC,aAAa,EAAE,SAAS,CAAC,+BAA+B;gBACxD,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAA;YAEF,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;YAC3C,0BAA0B,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;YAEhF,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;gBACxB,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;YAC5E,CAAC,CAAC,CAAA;YAEF,qBAAqB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YAE3C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAC1B,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
import type { WebhookEvent } from '@kelpie/schemas';
|
|
1
|
+
import type { KelpieEvent, WebhookEvent } from '@kelpie/schemas';
|
|
2
2
|
import type { EventBus } from '../../runtime/events.ts';
|
|
3
3
|
/**
|
|
4
4
|
* The bridge from the internal event catalog to what a webhook receiver sees.
|
|
5
5
|
*
|
|
6
6
|
* `modules.md` makes the webhooks engine a consumer of the bus, so this is the
|
|
7
7
|
* only place that knows both vocabularies. Everything downstream works with a
|
|
8
|
-
* `WebhookEventPayload` and never sees
|
|
8
|
+
* `WebhookEventPayload` and never sees an internal event key.
|
|
9
|
+
*
|
|
10
|
+
* A single prefix subscribe (`''`) sees every envelope event, and the
|
|
11
|
+
* translator below decides whether the event corresponds to a deliverable wire
|
|
12
|
+
* event. Unrecognised names are dropped, so a module's private events (a
|
|
13
|
+
* `.stage_changed` on a deal, a `.added` on a note) never reach a receiver
|
|
14
|
+
* that never subscribed to them.
|
|
9
15
|
*
|
|
10
16
|
* Payload keys are `snake_case`, matching `api.md`, because a receiver has no
|
|
11
17
|
* reason to expect a different convention from a webhook than from the REST
|
|
@@ -20,12 +26,21 @@ export interface WebhookEventPayload {
|
|
|
20
26
|
readonly data: Record<string, unknown>;
|
|
21
27
|
}
|
|
22
28
|
/**
|
|
23
|
-
*
|
|
29
|
+
* Translates an envelope event into a `WebhookEventPayload`, or `undefined` if
|
|
30
|
+
* the event does not correspond to any deliverable wire event.
|
|
24
31
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
32
|
+
* The last segment of the event name (`.created`, `.updated`, `.deleted`,
|
|
33
|
+
* `.submitted`) picks the wire event. A `.created`/`.updated`/`.deleted` event
|
|
34
|
+
* is only translated when its target type is one of the CRM record objects
|
|
35
|
+
* (`RECORD_OBJECT_TYPES`), because those are the only ones the wire catalog
|
|
36
|
+
* offers. Everything else is skipped.
|
|
37
|
+
*/
|
|
38
|
+
export declare function translateEnvelopeEvent(event: KelpieEvent<string, unknown>): WebhookEventPayload | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Subscribes the engine to every deliverable event through one prefix match on
|
|
41
|
+
* `''`, which every envelope event starts with. The translator inside decides
|
|
42
|
+
* whether the event corresponds to a deliverable wire event; unrecognised
|
|
43
|
+
* names are dropped.
|
|
29
44
|
*/
|
|
30
45
|
export declare function subscribeDeliverableEvents(bus: EventBus, deliver: (payload: WebhookEventPayload) => Promise<void>): void;
|
|
31
46
|
//# sourceMappingURL=payloads.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payloads.d.ts","sourceRoot":"","sources":["../../../src/modules/webhooks/payloads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"payloads.d.ts","sourceRoot":"","sources":["../../../src/modules/webhooks/payloads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAEhE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAIvD;;;;;;;;;;;;;;;;GAgBG;AAEH,YAAY,EAAE,YAAY,EAAE,CAAA;AAE5B,+EAA+E;AAC/E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;IAC5B,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACvC;AAaD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,mBAAmB,GAAG,SAAS,CAiDjC;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,GACvD,IAAI,CAYN"}
|
|
@@ -1,52 +1,71 @@
|
|
|
1
|
+
import { RECORD_OBJECT_TYPES } from '../../runtime/events.js';
|
|
2
|
+
const recordObjectTypes = new Set(RECORD_OBJECT_TYPES);
|
|
1
3
|
/**
|
|
2
|
-
*
|
|
4
|
+
* Translates an envelope event into a `WebhookEventPayload`, or `undefined` if
|
|
5
|
+
* the event does not correspond to any deliverable wire event.
|
|
3
6
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
+
* The last segment of the event name (`.created`, `.updated`, `.deleted`,
|
|
8
|
+
* `.submitted`) picks the wire event. A `.created`/`.updated`/`.deleted` event
|
|
9
|
+
* is only translated when its target type is one of the CRM record objects
|
|
10
|
+
* (`RECORD_OBJECT_TYPES`), because those are the only ones the wire catalog
|
|
11
|
+
* offers. Everything else is skipped.
|
|
7
12
|
*/
|
|
8
|
-
|
|
9
|
-
'
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
object_type:
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
13
|
+
export function translateEnvelopeEvent(event) {
|
|
14
|
+
const suffix = event.name.slice(event.name.lastIndexOf('.') + 1);
|
|
15
|
+
const objectType = event.target.type;
|
|
16
|
+
if (suffix === 'created' || suffix === 'deleted') {
|
|
17
|
+
if (!recordObjectTypes.has(objectType)) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
workspaceId: event.workspaceId,
|
|
22
|
+
event: suffix === 'created' ? 'record.created' : 'record.deleted',
|
|
23
|
+
data: { object_type: objectType, record_id: event.target.id },
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
if (suffix === 'updated') {
|
|
27
|
+
if (!recordObjectTypes.has(objectType)) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
const data = event.data;
|
|
31
|
+
return {
|
|
32
|
+
workspaceId: event.workspaceId,
|
|
33
|
+
event: 'record.updated',
|
|
34
|
+
data: {
|
|
35
|
+
object_type: objectType,
|
|
36
|
+
record_id: event.target.id,
|
|
37
|
+
changed_fields: data.changed !== undefined ? [...data.changed] : [],
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
if (suffix === 'submitted') {
|
|
42
|
+
// Form submission is the only `.submitted` wire event today. The forms
|
|
43
|
+
// module emits its envelope with `formId` and `submissionId` in `data`.
|
|
44
|
+
const data = event.data;
|
|
45
|
+
if (data.formId === undefined || data.submissionId === undefined) {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
workspaceId: event.workspaceId,
|
|
50
|
+
event: 'form.submitted',
|
|
51
|
+
data: { form_id: data.formId, submission_id: data.submissionId },
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
38
56
|
/**
|
|
39
|
-
* Subscribes the engine to every deliverable event
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* would need a cast, and the cast is exactly what would let a wrong payload
|
|
44
|
-
* through. A literal key indexes `builders` at its precise signature.
|
|
57
|
+
* Subscribes the engine to every deliverable event through one prefix match on
|
|
58
|
+
* `''`, which every envelope event starts with. The translator inside decides
|
|
59
|
+
* whether the event corresponds to a deliverable wire event; unrecognised
|
|
60
|
+
* names are dropped.
|
|
45
61
|
*/
|
|
46
62
|
export function subscribeDeliverableEvents(bus, deliver) {
|
|
47
|
-
bus.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
63
|
+
bus.subscribePrefix('', async (event) => {
|
|
64
|
+
const built = translateEnvelopeEvent(event);
|
|
65
|
+
if (built === undefined) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
await deliver(built);
|
|
69
|
+
}, { label: 'webhooks:envelope-bridge' });
|
|
51
70
|
}
|
|
52
71
|
//# sourceMappingURL=payloads.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payloads.js","sourceRoot":"","sources":["../../../src/modules/webhooks/payloads.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"payloads.js","sourceRoot":"","sources":["../../../src/modules/webhooks/payloads.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AA+B7D,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAS,mBAAmB,CAAC,CAAA;AAW9D;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAmC;IAEnC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAChE,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAA;IAEpC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACjD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACvC,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,OAAO;YACL,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB;YACjE,IAAI,EAAE,EAAE,WAAW,EAAE,UAA8B,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE;SAClF,CAAA;IACH,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACvC,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAyB,CAAA;QAC5C,OAAO;YACL,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,KAAK,EAAE,gBAAgB;YACvB,IAAI,EAAE;gBACJ,WAAW,EAAE,UAA8B;gBAC3C,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;gBAC1B,cAAc,EAAE,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;aACpE;SACF,CAAA;IACH,CAAC;IAED,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,uEAAuE;QACvE,wEAAwE;QACxE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAyB,CAAA;QAC5C,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACjE,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,OAAO;YACL,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,KAAK,EAAE,gBAAgB;YACvB,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE;SACjE,CAAA;IACH,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,GAAa,EACb,OAAwD;IAExD,GAAG,CAAC,eAAe,CACjB,EAAE,EACF,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAA;QAC3C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAM;QACR,CAAC;QACD,MAAM,OAAO,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC,EACD,EAAE,KAAK,EAAE,0BAA0B,EAAE,CACtC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Domain events published by the workspace module.
|
|
4
|
+
*
|
|
5
|
+
* Workspace-level events (`workspace.workspace.*`) target the workspace itself.
|
|
6
|
+
* Membership events target the `workspace_members` row, with the user id in
|
|
7
|
+
* `data` so a consumer that watches identity does not need a second lookup.
|
|
8
|
+
*/
|
|
9
|
+
export declare const workspaceEvents: {
|
|
10
|
+
'workspace.workspace.created': z.ZodObject<{
|
|
11
|
+
slug: z.ZodString;
|
|
12
|
+
}, z.core.$strip>;
|
|
13
|
+
'workspace.workspace.deleted': z.ZodObject<{
|
|
14
|
+
slug: z.ZodString;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
'workspace.member.invited': z.ZodObject<{
|
|
17
|
+
inviteId: z.ZodString;
|
|
18
|
+
email: z.ZodString;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
'workspace.member.joined': z.ZodObject<{
|
|
21
|
+
userId: z.ZodString;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
'workspace.member.removed': z.ZodObject<{
|
|
24
|
+
userId: z.ZodString;
|
|
25
|
+
}, z.core.$strip>;
|
|
26
|
+
};
|
|
27
|
+
export interface WorkspaceCreatedData {
|
|
28
|
+
readonly slug: string;
|
|
29
|
+
}
|
|
30
|
+
export interface WorkspaceDeletedData {
|
|
31
|
+
readonly slug: string;
|
|
32
|
+
}
|
|
33
|
+
export interface MemberInvitedData {
|
|
34
|
+
readonly inviteId: string;
|
|
35
|
+
readonly email: string;
|
|
36
|
+
}
|
|
37
|
+
export interface MemberJoinedData {
|
|
38
|
+
readonly userId: string;
|
|
39
|
+
}
|
|
40
|
+
export interface MemberRemovedData {
|
|
41
|
+
readonly userId: string;
|
|
42
|
+
}
|
|
43
|
+
declare module '../../runtime/events.ts' {
|
|
44
|
+
interface KelpieEventMap {
|
|
45
|
+
'workspace.workspace.created': WorkspaceCreatedData;
|
|
46
|
+
'workspace.workspace.deleted': WorkspaceDeletedData;
|
|
47
|
+
'workspace.member.invited': MemberInvitedData;
|
|
48
|
+
'workspace.member.joined': MemberJoinedData;
|
|
49
|
+
'workspace.member.removed': MemberRemovedData;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/modules/workspace/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB;;;;;;GAMG;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;CAME,CAAA;AAE9B,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AACD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AACD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AACD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AACD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,OAAO,QAAQ,yBAAyB,CAAC;IACvC,UAAU,cAAc;QACtB,6BAA6B,EAAE,oBAAoB,CAAA;QACnD,6BAA6B,EAAE,oBAAoB,CAAA;QACnD,0BAA0B,EAAE,iBAAiB,CAAA;QAC7C,yBAAyB,EAAE,gBAAgB,CAAA;QAC3C,0BAA0B,EAAE,iBAAiB,CAAA;KAC9C;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Domain events published by the workspace module.
|
|
4
|
+
*
|
|
5
|
+
* Workspace-level events (`workspace.workspace.*`) target the workspace itself.
|
|
6
|
+
* Membership events target the `workspace_members` row, with the user id in
|
|
7
|
+
* `data` so a consumer that watches identity does not need a second lookup.
|
|
8
|
+
*/
|
|
9
|
+
export const workspaceEvents = {
|
|
10
|
+
'workspace.workspace.created': z.object({ slug: z.string() }),
|
|
11
|
+
'workspace.workspace.deleted': z.object({ slug: z.string() }),
|
|
12
|
+
'workspace.member.invited': z.object({ inviteId: z.string(), email: z.string() }),
|
|
13
|
+
'workspace.member.joined': z.object({ userId: z.string() }),
|
|
14
|
+
'workspace.member.removed': z.object({ userId: z.string() }),
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/modules/workspace/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,6BAA6B,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAC7D,6BAA6B,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAC7D,0BAA0B,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACjF,yBAAyB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAC3D,0BAA0B,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;CAChC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/workspace/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/workspace/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAU3D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,mBAAmB,EAAE,MAAM,GAAG,YAAY,CAuD/E"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { appUrlConfigSchema } from '../../lib/appUrl.js';
|
|
2
2
|
import { parseModuleCapability } from '../../runtime/moduleConfig.js';
|
|
3
3
|
import { SEATS_LIMIT, WORKSPACE_ACCESS } from './capabilities.js';
|
|
4
|
+
import { workspaceEvents } from './events.js';
|
|
4
5
|
import * as repository from './repository.js';
|
|
5
6
|
import { mountWorkspaceRoutes } from './routes.js';
|
|
6
7
|
import * as schema from './schema.js';
|
|
@@ -17,8 +18,11 @@ export function createWorkspaceModule(migrationsDirectory) {
|
|
|
17
18
|
id: 'workspace',
|
|
18
19
|
requires: ['auth'],
|
|
19
20
|
structural: true,
|
|
21
|
+
events: workspaceEvents,
|
|
20
22
|
register(context) {
|
|
21
|
-
|
|
23
|
+
// Prefer the top-level `appBaseUrl` from the assembly's kelpie.config.ts;
|
|
24
|
+
// fall back to the schema read for older assemblies that don't declare it.
|
|
25
|
+
const appBaseUrl = context.appBaseUrl ?? context.config(appUrlConfigSchema).APP_BASE_URL;
|
|
22
26
|
context.entitlements.declare(SEATS_LIMIT);
|
|
23
27
|
context.entitlements.declare(WORKSPACE_ACCESS);
|
|
24
28
|
// Answers `module.<id>` for whatever a config override left undecided
|
|
@@ -39,7 +43,7 @@ export function createWorkspaceModule(migrationsDirectory) {
|
|
|
39
43
|
createId: context.createId,
|
|
40
44
|
now: context.now,
|
|
41
45
|
entitlements: context.entitlements,
|
|
42
|
-
appBaseUrl
|
|
46
|
+
appBaseUrl,
|
|
43
47
|
toggleableModuleIds: context.moduleCatalog
|
|
44
48
|
.filter((entry) => !entry.structural)
|
|
45
49
|
.map((entry) => entry.id),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/workspace/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAEnD;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,mBAA2B;IAC/D,OAAO;QACL,EAAE,EAAE,WAAW;QACf,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,UAAU,EAAE,IAAI;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/workspace/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import type { IdFactory } from '../../lib/ids.ts';
|
|
|
4
4
|
import type { EntitlementRegistry } from '../../runtime/entitlements.ts';
|
|
5
5
|
import type { TransactionScope } from '../../runtime/transaction.ts';
|
|
6
6
|
import type { Actor, SessionActor } from '../auth/actor.ts';
|
|
7
|
+
import './events.ts';
|
|
7
8
|
import type { InvitableRole, InviteStatus, MemberRole } from './roles.ts';
|
|
8
9
|
export interface WorkspaceDependencies {
|
|
9
10
|
readonly db: Database;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/modules/workspace/service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAGxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/modules/workspace/service.ts"],"names":[],"mappings":"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"}
|