@kelpie/server 0.5.2 → 0.6.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/index.d.ts +17 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -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 +44 -6
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +9 -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 +123 -0
- package/dist/lib/kelpieConfigFile.d.ts.map +1 -0
- package/dist/lib/kelpieConfigFile.js +111 -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/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/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/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/service.d.ts +5 -0
- package/dist/modules/import-export/service.d.ts.map +1 -1
- package/dist/modules/import-export/service.js +53 -14
- package/dist/modules/import-export/service.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.map +1 -1
- package/dist/testing/app.js +11 -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/package.json +5 -2
- package/src/index.ts +44 -9
- package/src/lib/actor.ts +15 -1
- package/src/lib/config.ts +56 -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 +283 -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/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/events.ts +25 -0
- package/src/modules/import-export/index.ts +2 -0
- package/src/modules/import-export/service.ts +83 -15
- 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 +11 -3
- package/src/testing/database.ts +6 -3
- package/src/testing/services.ts +34 -5
|
@@ -2,7 +2,9 @@ import { changedKeys } from '../../lib/changes.js';
|
|
|
2
2
|
import { AppError } from '../../lib/errors.js';
|
|
3
3
|
import { readListWindow, toPage } from '../../lib/pagination.js';
|
|
4
4
|
import { describeCreation, describeLink, describeStageChange, describeUnlink, describeUpdate, } from '../activities/wording.js';
|
|
5
|
+
import { toEventActor } from '../../lib/actor.js';
|
|
5
6
|
import { actorMemberId, requireWorkspaceId } from '../auth/actor.js';
|
|
7
|
+
import './events.js';
|
|
6
8
|
import { deleteRecordsAttachedTo } from '../attachedRecords.js';
|
|
7
9
|
import * as companyRepository from '../companies/repository.js';
|
|
8
10
|
import * as pipelineRepository from '../pipelines/repository.js';
|
|
@@ -160,9 +162,9 @@ export function createRaisesService(dependencies) {
|
|
|
160
162
|
...describeLink('person', named.get(personId) ?? personId),
|
|
161
163
|
});
|
|
162
164
|
}
|
|
163
|
-
events.emit('
|
|
165
|
+
events.emit('raises.raise.created', { type: 'raise', id }, {});
|
|
164
166
|
return toView(created, personIds);
|
|
165
|
-
});
|
|
167
|
+
}, { workspaceId, actor: toEventActor(actor) });
|
|
166
168
|
},
|
|
167
169
|
async update(actor, id, changes) {
|
|
168
170
|
const workspaceId = requireWorkspaceId(actor);
|
|
@@ -240,23 +242,12 @@ export function createRaisesService(dependencies) {
|
|
|
240
242
|
...describeUnlink('person', named.get(personId) ?? personId),
|
|
241
243
|
});
|
|
242
244
|
}
|
|
243
|
-
events.emit('
|
|
244
|
-
workspaceId,
|
|
245
|
-
objectType: 'raise',
|
|
246
|
-
recordId: id,
|
|
247
|
-
changedFields: linksChanged ? [...changed, 'personIds'] : changed,
|
|
248
|
-
});
|
|
245
|
+
events.emit('raises.raise.updated', { type: 'raise', id }, { changed: linksChanged ? [...changed, 'personIds'] : changed });
|
|
249
246
|
if (stageMove !== undefined) {
|
|
250
|
-
events.emit('
|
|
251
|
-
workspaceId,
|
|
252
|
-
objectType: 'raise',
|
|
253
|
-
recordId: id,
|
|
254
|
-
fromStageId: stageMove.from.id,
|
|
255
|
-
toStageId: stageMove.to.id,
|
|
256
|
-
});
|
|
247
|
+
events.emit('raises.raise.stage_changed', { type: 'raise', id }, { fromStageId: stageMove.from.id, toStageId: stageMove.to.id });
|
|
257
248
|
}
|
|
258
249
|
return toView(updated, nextPeople ?? currentPeople);
|
|
259
|
-
});
|
|
250
|
+
}, { workspaceId, actor: toEventActor(actor) });
|
|
260
251
|
},
|
|
261
252
|
async remove(actor, id) {
|
|
262
253
|
const workspaceId = requireWorkspaceId(actor);
|
|
@@ -267,8 +258,8 @@ export function createRaisesService(dependencies) {
|
|
|
267
258
|
// here, in the same transaction.
|
|
268
259
|
await deleteRecordsAttachedTo(tx, workspaceId, 'raise', id);
|
|
269
260
|
await repository.deleteRaise(tx, workspaceId, id);
|
|
270
|
-
events.emit('
|
|
271
|
-
});
|
|
261
|
+
events.emit('raises.raise.deleted', { type: 'raise', id }, {});
|
|
262
|
+
}, { workspaceId, actor: toEventActor(actor) });
|
|
272
263
|
},
|
|
273
264
|
};
|
|
274
265
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/modules/raises/service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/modules/raises/service.ts"],"names":[],"mappings":"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"}
|
package/dist/modules/reseal.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { KelpieConfig } from '../lib/config.ts';
|
|
1
2
|
import type { Database } from '../lib/database.ts';
|
|
3
|
+
import type { Logger } from '../lib/logger.ts';
|
|
2
4
|
import type { SecretCipher } from '../lib/secrets.ts';
|
|
3
5
|
/** The columns this pass covers. Exported for the test that checks none is missing. */
|
|
4
6
|
export declare const RESEALED_COLUMNS: readonly string[];
|
|
@@ -30,4 +32,57 @@ export interface ResealOutcome {
|
|
|
30
32
|
* what a non-empty `unreadable` means.
|
|
31
33
|
*/
|
|
32
34
|
export declare function resealStoredSecrets(db: Database, cipher: SecretCipher): Promise<ResealOutcome>;
|
|
35
|
+
/**
|
|
36
|
+
* One reseal pass over some set of columns. Core's own pass is one; a module
|
|
37
|
+
* with its own sealed table exports one too, and the assembly wires it in as
|
|
38
|
+
* an `extraPasses` entry.
|
|
39
|
+
*
|
|
40
|
+
* The shape matches `resealStoredSecrets` on purpose, so a pass covering a
|
|
41
|
+
* single column returns a one-element `columns` and `runReseal` can print
|
|
42
|
+
* every pass the same way.
|
|
43
|
+
*/
|
|
44
|
+
export type ResealPass = (db: Database, cipher: SecretCipher) => Promise<ResealOutcome>;
|
|
45
|
+
export interface RunResealOptions {
|
|
46
|
+
readonly config: KelpieConfig;
|
|
47
|
+
readonly logger: Logger;
|
|
48
|
+
/**
|
|
49
|
+
* Extra passes to run after core's own. An assembly wires its modules'
|
|
50
|
+
* sealed columns in here; each pass covers columns core cannot see.
|
|
51
|
+
*/
|
|
52
|
+
readonly extraPasses?: readonly ResealPass[];
|
|
53
|
+
/** Where the per-column report goes. Defaults to stdout. */
|
|
54
|
+
readonly report?: (message: string) => void;
|
|
55
|
+
/** Where unreadable-row ids and the trailing failure summary go. Defaults to stderr. */
|
|
56
|
+
readonly reportFatal?: (message: string) => void;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Runs every reseal pass under the current `SECRET_ENCRYPTION_KEY` and
|
|
60
|
+
* prints a report. Returns the exit code a script should return: 0 if every
|
|
61
|
+
* examined value is now under the current key, 1 if any row was unreadable.
|
|
62
|
+
*
|
|
63
|
+
* The rotation procedure, in full:
|
|
64
|
+
*
|
|
65
|
+
* 1. Keep the current key. Add the new one as `SECRET_ENCRYPTION_KEY` and
|
|
66
|
+
* move the old value to `SECRET_ENCRYPTION_KEY_PREVIOUS`.
|
|
67
|
+
* 2. Deploy. Deliveries keep signing: new secrets seal under the new key,
|
|
68
|
+
* and existing ones still open under the previous one.
|
|
69
|
+
* 3. Run the reseal script. It rewrites every row still sealed under the
|
|
70
|
+
* old key.
|
|
71
|
+
* 4. Remove `SECRET_ENCRYPTION_KEY_PREVIOUS` and deploy again.
|
|
72
|
+
*
|
|
73
|
+
* Safe to run at any point, including with no previous key set, where it
|
|
74
|
+
* reports that everything is already current and writes nothing.
|
|
75
|
+
*
|
|
76
|
+
* Prefers `config.secretEncryption` (the top-level field an assembly's
|
|
77
|
+
* `kelpie.config.ts` declares). Falls back to parsing `config.env` for
|
|
78
|
+
* older assemblies and for `loadConfig`-based callers that never populate
|
|
79
|
+
* the top-level field. Either path validates before the pass opens a row,
|
|
80
|
+
* so a mistyped key throws `ConfigurationError` at boot rather than
|
|
81
|
+
* reporting every row as unreadable.
|
|
82
|
+
*
|
|
83
|
+
* @throws ConfigurationError if neither `config.secretEncryption` nor the
|
|
84
|
+
* fallback env parse produces a valid `SecretEncryptionConfig`. The
|
|
85
|
+
* database is closed before the throw.
|
|
86
|
+
*/
|
|
87
|
+
export declare function runReseal(options: RunResealOptions): Promise<number>;
|
|
33
88
|
//# sourceMappingURL=reseal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reseal.d.ts","sourceRoot":"","sources":["../../src/modules/reseal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reseal.d.ts","sourceRoot":"","sources":["../../src/modules/reseal.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAEpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAgFrD,uFAAuF;AACvF,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAAiD,CAAA;AAE/F,kCAAkC;AAClC,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;CACvC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAA;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,aAAa,CAAC,CA8CxB;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;AAEvF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAA;IAC5C,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,wFAAwF;IACxF,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACjD;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2E1E"}
|
package/dist/modules/reseal.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { eq } from 'drizzle-orm';
|
|
2
|
-
import {
|
|
2
|
+
import { ConfigurationError } from '../lib/config.js';
|
|
3
|
+
import { connectDatabase } from '../lib/database.js';
|
|
4
|
+
import { createSecretCipher, secretEncryptionConfigSchema, SecretDecryptionError } from '../lib/secrets.js';
|
|
3
5
|
import { agentRegistrations } from './agent-tasks/schema.js';
|
|
4
6
|
import { webhooks } from './webhooks/schema.js';
|
|
5
7
|
/**
|
|
@@ -94,4 +96,91 @@ export async function resealStoredSecrets(db, cipher) {
|
|
|
94
96
|
unreadable: columns.reduce((total, column) => total + column.unreadable.length, 0),
|
|
95
97
|
};
|
|
96
98
|
}
|
|
99
|
+
function defaultReport(message) {
|
|
100
|
+
process.stdout.write(`${message}\n`);
|
|
101
|
+
}
|
|
102
|
+
function defaultReportFatal(message) {
|
|
103
|
+
process.stderr.write(`${message}\n`);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Runs every reseal pass under the current `SECRET_ENCRYPTION_KEY` and
|
|
107
|
+
* prints a report. Returns the exit code a script should return: 0 if every
|
|
108
|
+
* examined value is now under the current key, 1 if any row was unreadable.
|
|
109
|
+
*
|
|
110
|
+
* The rotation procedure, in full:
|
|
111
|
+
*
|
|
112
|
+
* 1. Keep the current key. Add the new one as `SECRET_ENCRYPTION_KEY` and
|
|
113
|
+
* move the old value to `SECRET_ENCRYPTION_KEY_PREVIOUS`.
|
|
114
|
+
* 2. Deploy. Deliveries keep signing: new secrets seal under the new key,
|
|
115
|
+
* and existing ones still open under the previous one.
|
|
116
|
+
* 3. Run the reseal script. It rewrites every row still sealed under the
|
|
117
|
+
* old key.
|
|
118
|
+
* 4. Remove `SECRET_ENCRYPTION_KEY_PREVIOUS` and deploy again.
|
|
119
|
+
*
|
|
120
|
+
* Safe to run at any point, including with no previous key set, where it
|
|
121
|
+
* reports that everything is already current and writes nothing.
|
|
122
|
+
*
|
|
123
|
+
* Prefers `config.secretEncryption` (the top-level field an assembly's
|
|
124
|
+
* `kelpie.config.ts` declares). Falls back to parsing `config.env` for
|
|
125
|
+
* older assemblies and for `loadConfig`-based callers that never populate
|
|
126
|
+
* the top-level field. Either path validates before the pass opens a row,
|
|
127
|
+
* so a mistyped key throws `ConfigurationError` at boot rather than
|
|
128
|
+
* reporting every row as unreadable.
|
|
129
|
+
*
|
|
130
|
+
* @throws ConfigurationError if neither `config.secretEncryption` nor the
|
|
131
|
+
* fallback env parse produces a valid `SecretEncryptionConfig`. The
|
|
132
|
+
* database is closed before the throw.
|
|
133
|
+
*/
|
|
134
|
+
export async function runReseal(options) {
|
|
135
|
+
const report = options.report ?? defaultReport;
|
|
136
|
+
const reportFatal = options.reportFatal ?? defaultReportFatal;
|
|
137
|
+
const database = connectDatabase(options.config.databaseUrl, options.logger);
|
|
138
|
+
let secretConfig = options.config.secretEncryption;
|
|
139
|
+
if (secretConfig === undefined) {
|
|
140
|
+
const parsed = secretEncryptionConfigSchema.safeParse(options.config.env);
|
|
141
|
+
if (!parsed.success) {
|
|
142
|
+
await database.close();
|
|
143
|
+
throw new ConfigurationError(parsed.error.issues.map((issue) => `${issue.path.join('.')}: ${issue.message}`));
|
|
144
|
+
}
|
|
145
|
+
secretConfig = parsed.data;
|
|
146
|
+
}
|
|
147
|
+
const hasPrevious = secretConfig.SECRET_ENCRYPTION_KEY_PREVIOUS !== undefined &&
|
|
148
|
+
secretConfig.SECRET_ENCRYPTION_KEY_PREVIOUS.trim().length > 0;
|
|
149
|
+
if (!hasPrevious) {
|
|
150
|
+
report('SECRET_ENCRYPTION_KEY_PREVIOUS is not set. Nothing sealed under an older key can be read.');
|
|
151
|
+
}
|
|
152
|
+
const cipher = createSecretCipher(secretConfig);
|
|
153
|
+
const passes = [resealStoredSecrets, ...(options.extraPasses ?? [])];
|
|
154
|
+
try {
|
|
155
|
+
// Sequential rather than `Promise.all`, so two full-table passes never
|
|
156
|
+
// contend for the pool at once. Each pass is idempotent; a run that
|
|
157
|
+
// dies halfway leaves the finished rows current and re-running
|
|
158
|
+
// completes the rest.
|
|
159
|
+
const outcomes = [];
|
|
160
|
+
for (const pass of passes) {
|
|
161
|
+
outcomes.push(await pass(database.db, cipher));
|
|
162
|
+
}
|
|
163
|
+
const columns = outcomes.flatMap((outcome) => outcome.columns);
|
|
164
|
+
const examined = outcomes.reduce((total, outcome) => total + outcome.examined, 0);
|
|
165
|
+
const resealed = outcomes.reduce((total, outcome) => total + outcome.resealed, 0);
|
|
166
|
+
const unreadable = outcomes.reduce((total, outcome) => total + outcome.unreadable, 0);
|
|
167
|
+
for (const column of columns) {
|
|
168
|
+
report(`${column.label}: ${String(column.examined)} examined, ${String(column.resealed)} re-sealed, ${String(column.unreadable.length)} unreadable`);
|
|
169
|
+
for (const id of column.unreadable) {
|
|
170
|
+
reportFatal(` unreadable: ${id}`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (unreadable > 0) {
|
|
174
|
+
reportFatal(`\n${String(unreadable)} value(s) opened under neither key. They were sealed under a key that is not configured, or the rows have been altered. Nothing here can recover them: set SECRET_ENCRYPTION_KEY_PREVIOUS to the key they were sealed with and run this again, or have those records re-created.`);
|
|
175
|
+
return 1;
|
|
176
|
+
}
|
|
177
|
+
report(resealed === 0
|
|
178
|
+
? `\nNothing to do: all ${String(examined)} value(s) are already sealed under the current key.`
|
|
179
|
+
: `\nRe-sealed ${String(resealed)} of ${String(examined)} value(s). You can now remove SECRET_ENCRYPTION_KEY_PREVIOUS.`);
|
|
180
|
+
return 0;
|
|
181
|
+
}
|
|
182
|
+
finally {
|
|
183
|
+
await database.close();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
97
186
|
//# sourceMappingURL=reseal.js.map
|
|
@@ -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":"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"}
|
|
@@ -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"}
|