pipework 0.82.0 → 0.84.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/CHANGELOG.md +16 -0
- package/dist/async/jobs/execute.d.ts +9 -0
- package/dist/async/jobs/execute.d.ts.map +1 -1
- package/dist/async/jobs/execute.js +16 -0
- package/dist/async/jobs/execute.js.map +1 -1
- package/dist/async/jobs/index.d.ts +1 -1
- package/dist/async/jobs/index.d.ts.map +1 -1
- package/dist/async/jobs/queue.d.ts +30 -4
- package/dist/async/jobs/queue.d.ts.map +1 -1
- package/dist/async/jobs/queue.js +105 -33
- package/dist/async/jobs/queue.js.map +1 -1
- package/dist/auth/auth/audit.d.ts +7 -0
- package/dist/auth/auth/audit.d.ts.map +1 -0
- package/dist/auth/auth/audit.js +28 -0
- package/dist/auth/auth/audit.js.map +1 -0
- package/dist/auth/auth/email-links.d.ts +103 -0
- package/dist/auth/auth/email-links.d.ts.map +1 -0
- package/dist/auth/auth/email-links.js +166 -0
- package/dist/auth/auth/email-links.js.map +1 -0
- package/dist/auth/auth/index.d.ts +2 -0
- package/dist/auth/auth/index.d.ts.map +1 -1
- package/dist/auth/auth/index.js +1 -0
- package/dist/auth/auth/index.js.map +1 -1
- package/dist/auth/auth/namespace.d.ts +3 -0
- package/dist/auth/auth/namespace.d.ts.map +1 -1
- package/dist/auth/auth/namespace.js +3 -0
- package/dist/auth/auth/namespace.js.map +1 -1
- package/dist/auth/auth/schema.d.ts +45 -0
- package/dist/auth/auth/schema.d.ts.map +1 -1
- package/dist/auth/auth/schema.js +27 -0
- package/dist/auth/auth/schema.js.map +1 -1
- package/dist/auth/auth/sign-in.d.ts.map +1 -1
- package/dist/auth/auth/sign-in.js +2 -21
- package/dist/auth/auth/sign-in.js.map +1 -1
- package/dist/core/config/namespace.d.ts +1 -0
- package/dist/core/config/namespace.d.ts.map +1 -1
- package/dist/core/config/schema.d.ts +1 -0
- package/dist/core/config/schema.d.ts.map +1 -1
- package/dist/core/config/schema.js +2 -0
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/surface/index.d.ts +1 -1
- package/dist/core/surface/index.d.ts.map +1 -1
- package/dist/core/surface/types.d.ts +34 -0
- package/dist/core/surface/types.d.ts.map +1 -1
- package/dist/core/surface/worker.d.ts.map +1 -1
- package/dist/core/surface/worker.js +118 -32
- package/dist/core/surface/worker.js.map +1 -1
- package/dist/data/migrate/internal-definitions.d.ts.map +1 -1
- package/dist/data/migrate/internal-definitions.js +5 -0
- package/dist/data/migrate/internal-definitions.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/infra/email/mail.d.ts +13 -0
- package/dist/infra/email/mail.d.ts.map +1 -1
- package/dist/infra/email/mail.js +32 -2
- package/dist/infra/email/mail.js.map +1 -1
- package/package.json +1 -1
- package/dist/REFERENCE.md +0 -1477
- package/dist/infra/email/sigv4.d.ts +0 -24
- package/dist/infra/email/sigv4.d.ts.map +0 -1
- package/dist/infra/email/sigv4.js +0 -55
- package/dist/infra/email/sigv4.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.84.0
|
|
4
|
+
|
|
5
|
+
- **New: `auth.emailLinks(config)`**, emailed single-use links that prove control of an address: password reset and address verification (#511).
|
|
6
|
+
- `request` answers the same, and takes at least `minResponseMs`, whether or not the address has an account or is over its limit; limits per address and per client are counted in Postgres outside the request transaction.
|
|
7
|
+
- The token is `HMAC(secret, link id, nonce)`: the link table keeps only its hash, and the stored mail message keeps only a reference, so the database alone cannot produce a working link. A new link for the same purpose ends the older ones; `endResets` ends a user's reset links on a password change.
|
|
8
|
+
- `check` reports a link's state without using it; `use` is one atomic step; `completeReset` stores the new hash through the app's `store`, ends the other reset links and signs the user out everywhere else.
|
|
9
|
+
- Requests and uses are flow steps and audited (`PasswordReset:requested`, `:completed`, `EmailAddress:verification-requested`, `:verified`), never with the token, the password or an unknown address. Tables behind the `auth.emailLinks` blueprint flag.
|
|
10
|
+
- **New: mail late data.** `mail.registerLateData(name, fn)` and `send({ …, lateData })` supply template data computed at delivery and never stored.
|
|
11
|
+
|
|
12
|
+
## 0.83.0
|
|
13
|
+
|
|
14
|
+
- **Fixed: a reaped job (worker lost) is retried.** `reap()` now applies the same rule as a failure: retried with backoff while attempts remain, then dead-lettered with a notification. `error_payload.reason` is `reaped`. `reap()` returns the reaped jobs (`ReapedJob[]`) instead of a count (#503).
|
|
15
|
+
- **Fixed: the end of a claim applies only to that claim.** `complete`, `fail` and `heartbeat` take the claim token and return whether they applied; the worker always passes it, so a stalled worker that finishes after its job was reaped and claimed again changes nothing. A heartbeat that finds its claim gone cancels the job. `fail` is now one transaction.
|
|
16
|
+
- **New: a stopping worker hands its in-flight jobs back.** Jobs still running when `shutdownDeadlineMs` ends are cancelled and returned to `pending` at once, without counting the attempt (`queue.handBack`) (#504).
|
|
17
|
+
- **New: `onJobEvent`** on the worker surface is told of `reaped`, `handed-back` and `claim-lost` jobs; it runs in a job Flow for the job's tenant, traced under the job's flow. The next attempt of a reaped or handed-back job records a `pipework.job.restart` step naming why. New `heartbeatIntervalMs` (default 30 s).
|
|
18
|
+
|
|
3
19
|
## 0.82.0
|
|
4
20
|
|
|
5
21
|
- **New: mail delivery priority.** `mail.send(db, { …, priority })` queues the message's send job at that priority, and `createMail({ …, priority })` sets the module's default; higher is claimed first, a retried delivery keeps it, and without either the queue default (0) applies as before. A non-integer priority is refused (#517).
|
|
@@ -25,6 +25,15 @@ export interface ExecuteJobOptions {
|
|
|
25
25
|
parent?: ParentTraceRef | null;
|
|
26
26
|
/** The ingress kind for the opened trace — `'cron'` for schedule-fired jobs, `'job'` otherwise. */
|
|
27
27
|
entryKind?: 'job' | 'cron';
|
|
28
|
+
/**
|
|
29
|
+
* Set when this attempt follows one that ended without failing on its own (a
|
|
30
|
+
* reap or a hand-back): the attempt's trace opens with a `pipework.job.restart`
|
|
31
|
+
* external step naming the reason and the worker that held the previous claim.
|
|
32
|
+
*/
|
|
33
|
+
restart?: {
|
|
34
|
+
readonly reason: 'reaped' | 'handed-back';
|
|
35
|
+
readonly previousWorkerId: string | null;
|
|
36
|
+
};
|
|
28
37
|
/**
|
|
29
38
|
* Ends the job at the caller's deadline. On abort the job's in-flight query is
|
|
30
39
|
* cancelled server-side so its transaction rolls back and its connection
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/async/jobs/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAQ9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/async/jobs/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAQ9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AASrE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAA;IAClC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B;;;;OAIG;IACH,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;IAC9B,mGAAmG;IACnG,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IAC1B;;;;OAIG;IACH,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,aAAa,CAAC;QAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;IACjG;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,wBAAsB,UAAU,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAC7E,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,OAAO,CAAC,CA6FlB"}
|
|
@@ -7,6 +7,8 @@ import { openTrace } from '../../trace/entry/open-trace.js';
|
|
|
7
7
|
import { parentTraceRef } from '../../trace/entry/parent-trace.js';
|
|
8
8
|
import { finalizeTrace } from '../../trace/entry/finalize-trace.js';
|
|
9
9
|
import { JobAbortedError } from './errors.js';
|
|
10
|
+
import { randomUUID } from 'node:crypto';
|
|
11
|
+
import { serializeForTrace } from '../../trace/capture/bounded-serializer.js';
|
|
10
12
|
/** Default timeout for setting up a tenant job's database transaction(s). */
|
|
11
13
|
const DEFAULT_JOB_TRANSACTION_TIMEOUT_MS = 5000;
|
|
12
14
|
export async function executeJob(handler, options) {
|
|
@@ -37,6 +39,20 @@ export async function executeJob(handler, options) {
|
|
|
37
39
|
sessionId: null,
|
|
38
40
|
});
|
|
39
41
|
}
|
|
42
|
+
if (options.restart !== undefined && jobCtxOptions.trace !== undefined && jobCtxOptions.trace !== null) {
|
|
43
|
+
const now = new Date();
|
|
44
|
+
jobCtxOptions.trace.buffer.stageExternal({
|
|
45
|
+
id: randomUUID(),
|
|
46
|
+
parentStepId: null,
|
|
47
|
+
flowStepRef: 'external:pipework.job.restart',
|
|
48
|
+
status: 'ok',
|
|
49
|
+
startedAt: now,
|
|
50
|
+
completedAt: now,
|
|
51
|
+
durationMicros: 0n,
|
|
52
|
+
capturedInputs: [serializeForTrace({ reason: options.restart.reason, previousWorkerId: options.restart.previousWorkerId })],
|
|
53
|
+
error: null,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
40
56
|
const ctx = createJobContext(jobCtxOptions);
|
|
41
57
|
const databases = resolveHandlerDatabases(handler, options.instance);
|
|
42
58
|
const timeoutMs = options.transactionTimeoutMs ?? DEFAULT_JOB_TRANSACTION_TIMEOUT_MS;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/async/jobs/execute.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAA;AAClF,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AACzG,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/async/jobs/execute.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAA;AAClF,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AACzG,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAA;AAE7E,6EAA6E;AAC7E,MAAM,kCAAkC,GAAG,IAAI,CAAA;AA0C/C,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAgC,EAChC,OAA0B;IAE1B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC/B,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI;QAAE,MAAM,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAE9E,MAAM,aAAa,GAA2C;QAC5D,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAA;IACD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,aAAa,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;IACpE,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;QAAE,aAAa,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;IAC1E,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,aAAa,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IACjE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,aAAa,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IACvE,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;QAAE,aAAa,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAA;IACzF,IAAI,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,aAAa,CAAC,KAAK,GAAG,SAAS,CAAC;YAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;YACrC,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE;YACxE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;YAC9B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;YAC1B,SAAS,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;YAChC,SAAS,EAAE,IAAI;SAChB,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,aAAa,CAAC,KAAK,KAAK,SAAS,IAAI,aAAa,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACvG,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;QACtB,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC;YACvC,EAAE,EAAE,UAAU,EAAE;YAChB,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,+BAA+B;YAC5C,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,GAAG;YACd,WAAW,EAAE,GAAG;YAChB,cAAc,EAAE,EAAE;YAClB,cAAc,EAAE,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAC3H,KAAK,EAAE,IAAI;SACZ,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAA;IAC3C,MAAM,SAAS,GAAG,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IACpE,MAAM,SAAS,GAAG,OAAO,CAAC,oBAAoB,IAAI,kCAAkC,CAAA;IAEpF,yEAAyE;IACzE,+EAA+E;IAC/E,8EAA8E;IAC9E,sEAAsE;IACtE,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;QAC7C,MAAM,UAAU,GAAG,eAAe,CAChC,OAAO,EACP,GAAG,EACH,SAAS,EACT,OAAO,CAAC,YAAY,IAAI,IAAI,EAC5B,SAAS,EACT,OAAO,CAAC,MAAM,CACf,CAAA;QACD,OAAO,aAAa,CAClB,OAAO,CAAC,QAAQ,EAChB,GAAG,CAAC,KAAK,EACT,YAAY,CACV,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EACxG,OAAO,CAAC,MAAM,EACd,KAAK,CACN,CACF,CAAA;IACH,CAAC;IAED,MAAM,GAAG,GAAG,GAAqB,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;IAE7E,sEAAsE;IACtE,8DAA8D;IAC9D,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;IAChH,CAAC;IAED,kEAAkE;IAClE,wEAAwE;IACxE,OAAO,aAAa,CAClB,OAAO,CAAC,QAAQ,EAChB,GAAG,CAAC,KAAK,EACT,YAAY,CACV,oBAAoB,CAClB,GAAG,EACH,SAAS,EACT,OAAO,CAAC,YAAY,IAAI,IAAI,EAC5B,SAAS,EACT,GAAG,EACH,OAAO,CAAC,MAAM,CACf,EACD,OAAO,CAAC,MAAM,EACd,KAAK,CACN,CACF,CAAA;AACH,CAAC;AAED,sGAAsG;AACtG,SAAS,QAAQ,CAAC,OAA0B;IAC1C,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,GAAG,CAAC,CAAA;IACrE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,CAAA;IACjE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC7D,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,MAAmB,EAAE,KAAa;IACrD,MAAM,MAAM,GAAY,MAAM,CAAC,MAAM,CAAA;IACrC,MAAM,eAAe,GACnB,OAAO,YAAY,KAAK,UAAU,IAAI,MAAM,YAAY,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,CAAA;IAEtG,OAAO,MAAM,YAAY,KAAK,IAAI,CAAC,eAAe;QAChD,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,IAAI,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;AACxC,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAI,IAAgB,EAAE,MAA+B,EAAE,KAAa;IACvF,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IAErC,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YACpB,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;QACpC,CAAC,CAAA;QACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,EAAE,CAAA;YACT,OAAM;QACR,CAAC;QACD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QACzD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;IAC5F,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -2,7 +2,7 @@ export { executeJob } from './execute.js';
|
|
|
2
2
|
export type { ExecuteJobOptions } from './execute.js';
|
|
3
3
|
export { JobAbortedError } from './errors.js';
|
|
4
4
|
export { createQueue } from './queue.js';
|
|
5
|
-
export type { Queue, QueueConfig, EnqueueOptions, EnqueueExclusion, ClaimedJob, ClaimedExclusion, JobResult, BackoffConfig } from './queue.js';
|
|
5
|
+
export type { Queue, QueueConfig, EnqueueOptions, EnqueueExclusion, ClaimedJob, ClaimedExclusion, ReapedJob, JobResult, BackoffConfig } from './queue.js';
|
|
6
6
|
export type { ExclusionConfig } from './exclusion.js';
|
|
7
7
|
export type { WaitOptions, WaitResult, ListenClient, ListenHandle } from './listener.js';
|
|
8
8
|
export { parseCron, nextTick } from './cron.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/async/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/async/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACzJ,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACxF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -69,10 +69,27 @@ export interface ClaimedJob {
|
|
|
69
69
|
readonly createdLsn: string;
|
|
70
70
|
/** Minted by this claim's own UPDATE; nulled when the claim ends. Compare it exactly to fence writes made under this claim. */
|
|
71
71
|
readonly claimToken: string;
|
|
72
|
+
/** 1-based number of the attempt this claim starts. */
|
|
73
|
+
readonly attempt: number;
|
|
74
|
+
readonly maxAttempts: number;
|
|
75
|
+
/** Why the previous claim ended without a failure of its own — a reap or a hand-back — and the worker that held it; null otherwise. */
|
|
76
|
+
readonly previous: {
|
|
77
|
+
readonly reason: 'reaped' | 'handed-back';
|
|
78
|
+
readonly workerId: string | null;
|
|
79
|
+
} | null;
|
|
72
80
|
readonly exclusion?: ClaimedExclusion;
|
|
73
81
|
/** The Flow that enqueued this job; the worker surface restores its trace, tenant and actor. */
|
|
74
82
|
readonly flow: ClaimedFlow;
|
|
75
83
|
}
|
|
84
|
+
/** One job `reap` took from a lost worker. `attempt` is the 1-based number of the attempt that was lost. */
|
|
85
|
+
export interface ReapedJob {
|
|
86
|
+
readonly jobId: string;
|
|
87
|
+
readonly type: string;
|
|
88
|
+
readonly attempt: number;
|
|
89
|
+
readonly outcome: 'retry' | 'dead_letter';
|
|
90
|
+
readonly maxAttempts: number;
|
|
91
|
+
readonly flow: ClaimedFlow;
|
|
92
|
+
}
|
|
76
93
|
export interface JobResult {
|
|
77
94
|
readonly status: 'completed' | 'failed' | 'cancelled' | 'timeout' | 'dead_letter';
|
|
78
95
|
readonly output?: unknown;
|
|
@@ -85,11 +102,20 @@ export interface Queue {
|
|
|
85
102
|
enqueue(db: DB, opts: EnqueueOptions): Promise<string>;
|
|
86
103
|
/** Claims the next eligible job, retrying transient conflicts until clean. The signal ends the retry loop on shutdown — claim resolves null promptly. */
|
|
87
104
|
claim(db: DB, workerId: string, signal?: AbortSignal): Promise<ClaimedJob | null>;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
105
|
+
/**
|
|
106
|
+
* Each of heartbeat, complete and fail takes the claim's token and applies only to that claim:
|
|
107
|
+
* once the row was reaped, handed back or claimed again they change nothing and return false.
|
|
108
|
+
* Without a token they match on the id alone.
|
|
109
|
+
*/
|
|
110
|
+
heartbeat(db: DB, jobId: string, claimToken?: string): Promise<boolean>;
|
|
111
|
+
complete(db: DB, jobId: string, output?: unknown, claimToken?: string): Promise<boolean>;
|
|
112
|
+
/** Counts the attempt as failed: retried with backoff while attempts remain, dead-lettered after. One transaction, row locked. */
|
|
113
|
+
fail(db: DB, jobId: string, error: unknown, claimToken?: string): Promise<boolean>;
|
|
114
|
+
/** Returns a claimed job to pending without counting the attempt. False when the claim no longer holds the row. */
|
|
115
|
+
handBack(db: DB, jobId: string, claimToken: string): Promise<boolean>;
|
|
91
116
|
cancel(db: DB, jobId: string): Promise<void>;
|
|
92
|
-
|
|
117
|
+
/** Fails every stale claimed job through the same retry/dead-letter rule as `fail`, and reports each. */
|
|
118
|
+
reap(db: DB): Promise<ReapedJob[]>;
|
|
93
119
|
requeueDeadLetter(db: DB, jobId: string): Promise<void>;
|
|
94
120
|
startListener(client: ListenClient): Promise<void>;
|
|
95
121
|
stopListener(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../src/async/jobs/queue.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../src/async/jobs/queue.ts"],"names":[],"mappings":"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"}
|
package/dist/async/jobs/queue.js
CHANGED
|
@@ -122,7 +122,13 @@ export function createQueue(config = {}) {
|
|
|
122
122
|
FOR UPDATE SKIP LOCKED
|
|
123
123
|
LIMIT 1
|
|
124
124
|
)
|
|
125
|
-
RETURNING id::text, job_type, priority, payload, created_lsn::text, claim_token::text, flow_trace_id::text, flow_root_id::text, flow_step_id::text, flow_tenant, flow_actor${sql.raw(exclusionReturning)}`;
|
|
125
|
+
RETURNING id::text, job_type, priority, payload, created_lsn::text, claim_token::text, attempt_count, max_attempts, error_payload->>'reason' AS previous_reason, error_payload->>'workerId' AS previous_worker_id, flow_trace_id::text, flow_root_id::text, flow_step_id::text, flow_tenant, flow_actor${sql.raw(exclusionReturning)}`;
|
|
126
|
+
}
|
|
127
|
+
function previousOf(row) {
|
|
128
|
+
const reason = row['previous_reason'];
|
|
129
|
+
if (reason !== 'reaped' && reason !== 'handed-back')
|
|
130
|
+
return null;
|
|
131
|
+
return { reason, workerId: row['previous_worker_id'] ?? null };
|
|
126
132
|
}
|
|
127
133
|
function mapClaimedRow(row) {
|
|
128
134
|
const base = {
|
|
@@ -132,6 +138,9 @@ export function createQueue(config = {}) {
|
|
|
132
138
|
payload: row['payload'],
|
|
133
139
|
createdLsn: row['created_lsn'],
|
|
134
140
|
claimToken: row['claim_token'],
|
|
141
|
+
attempt: row['attempt_count'] + 1,
|
|
142
|
+
maxAttempts: row['max_attempts'],
|
|
143
|
+
previous: previousOf(row),
|
|
135
144
|
flow: {
|
|
136
145
|
traceId: row['flow_trace_id'] ?? null,
|
|
137
146
|
rootId: row['flow_root_id'] ?? null,
|
|
@@ -187,14 +196,24 @@ export function createQueue(config = {}) {
|
|
|
187
196
|
}
|
|
188
197
|
}
|
|
189
198
|
}
|
|
190
|
-
|
|
191
|
-
|
|
199
|
+
/** Rows a claim-scoped statement may touch: the claim's own token while it is still held. */
|
|
200
|
+
function claimScope(claimToken) {
|
|
201
|
+
return claimToken === undefined
|
|
202
|
+
? sql ``
|
|
203
|
+
: sql ` AND claim_token = ${claimToken}::uuid AND status IN ('claimed', 'running')`;
|
|
204
|
+
}
|
|
205
|
+
async function heartbeat(db, jobId, claimToken) {
|
|
206
|
+
const rows = await db.execute(sql `UPDATE ${sql.raw(tableQ)} SET heartbeat_at = now() WHERE id = ${jobId}::uuid${claimScope(claimToken)} RETURNING id`);
|
|
207
|
+
return rows.length > 0;
|
|
192
208
|
}
|
|
193
|
-
async function complete(db, jobId, output) {
|
|
209
|
+
async function complete(db, jobId, output, claimToken) {
|
|
194
210
|
const outputJson = output !== undefined ? JSON.stringify(output) : null;
|
|
195
|
-
await db.execute(sql `UPDATE ${sql.raw(tableQ)} SET status = 'completed', completed_at = now(), claim_token = NULL, output = ${outputJson !== null ? sql `${outputJson}::jsonb` : sql `NULL`}
|
|
196
|
-
WHERE id = ${jobId}::uuid`);
|
|
211
|
+
const rows = await db.execute(sql `UPDATE ${sql.raw(tableQ)} SET status = 'completed', completed_at = now(), claim_token = NULL, output = ${outputJson !== null ? sql `${outputJson}::jsonb` : sql `NULL`}
|
|
212
|
+
WHERE id = ${jobId}::uuid${claimScope(claimToken)} RETURNING id`);
|
|
213
|
+
if (rows.length === 0)
|
|
214
|
+
return false;
|
|
197
215
|
await db.execute(sql `SELECT pg_notify(${channel}, ${jobId})`);
|
|
216
|
+
return true;
|
|
198
217
|
}
|
|
199
218
|
function calculateDelay(attemptCount) {
|
|
200
219
|
if (!backoff)
|
|
@@ -204,20 +223,17 @@ export function createQueue(config = {}) {
|
|
|
204
223
|
const delay = backoff.delayMs * Math.pow(2, attemptCount);
|
|
205
224
|
return backoff.maxDelayMs !== undefined ? Math.min(delay, backoff.maxDelayMs) : delay;
|
|
206
225
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
}
|
|
214
|
-
const attemptCount = job['attempt_count'];
|
|
215
|
-
const jobMaxAttempts = job['max_attempts'];
|
|
226
|
+
/**
|
|
227
|
+
* Counts the attempt as failed: back to pending with backoff while attempts
|
|
228
|
+
* remain, dead letter (and a notify) after. The row must already be locked by
|
|
229
|
+
* the caller's transaction. Shared by fail and reap so the two cannot drift.
|
|
230
|
+
*/
|
|
231
|
+
async function retryOrDeadLetter(tx, jobId, attemptCount, jobMaxAttempts, errorJson) {
|
|
216
232
|
const nextAttempt = attemptCount + 1;
|
|
217
233
|
if (nextAttempt < jobMaxAttempts) {
|
|
218
234
|
const delayMs = calculateDelay(attemptCount);
|
|
219
235
|
const delaySeconds = `${Math.ceil(delayMs / 1000)} seconds`;
|
|
220
|
-
await
|
|
236
|
+
await tx.execute(sql `UPDATE ${sql.raw(tableQ)} SET
|
|
221
237
|
status = 'pending',
|
|
222
238
|
attempt_count = ${nextAttempt},
|
|
223
239
|
next_retry_at = ${delayMs > 0 ? sql `now() + ${delaySeconds}::interval` : sql `NULL`},
|
|
@@ -227,17 +243,44 @@ export function createQueue(config = {}) {
|
|
|
227
243
|
worker_id = NULL,
|
|
228
244
|
claim_token = NULL
|
|
229
245
|
WHERE id = ${jobId}::uuid`);
|
|
246
|
+
return 'retry';
|
|
230
247
|
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
248
|
+
await tx.execute(sql `UPDATE ${sql.raw(tableQ)} SET
|
|
249
|
+
status = 'dead_letter',
|
|
250
|
+
attempt_count = ${nextAttempt},
|
|
251
|
+
completed_at = now(),
|
|
252
|
+
claim_token = NULL,
|
|
253
|
+
error_payload = ${errorJson}::jsonb
|
|
254
|
+
WHERE id = ${jobId}::uuid`);
|
|
255
|
+
await tx.execute(sql `SELECT pg_notify(${channel}, ${jobId})`);
|
|
256
|
+
return 'dead_letter';
|
|
257
|
+
}
|
|
258
|
+
async function fail(db, jobId, error, claimToken) {
|
|
259
|
+
const errorJson = JSON.stringify(serializeError(error));
|
|
260
|
+
return db.transaction(async (tx) => {
|
|
261
|
+
const jobRows = await tx.execute(sql `SELECT attempt_count, max_attempts FROM ${sql.raw(tableQ)} WHERE id = ${jobId}::uuid${claimScope(claimToken)} FOR UPDATE`);
|
|
262
|
+
const job = jobRows[0];
|
|
263
|
+
if (!job) {
|
|
264
|
+
if (claimToken !== undefined)
|
|
265
|
+
return false;
|
|
266
|
+
throw new Error(`[pipework] Cannot fail job "${jobId}" — job not found.`);
|
|
267
|
+
}
|
|
268
|
+
await retryOrDeadLetter(tx, jobId, job['attempt_count'], job['max_attempts'], errorJson);
|
|
269
|
+
return true;
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
async function handBack(db, jobId, claimToken) {
|
|
273
|
+
const rows = await db.execute(sql `UPDATE ${sql.raw(tableQ)} SET
|
|
274
|
+
status = 'pending',
|
|
275
|
+
next_retry_at = NULL,
|
|
276
|
+
claimed_at = NULL,
|
|
277
|
+
heartbeat_at = NULL,
|
|
278
|
+
claim_token = NULL,
|
|
279
|
+
error_payload = jsonb_build_object('reason', 'handed-back', 'workerId', worker_id),
|
|
280
|
+
worker_id = NULL
|
|
281
|
+
WHERE id = ${jobId}::uuid${claimScope(claimToken)}
|
|
282
|
+
RETURNING id`);
|
|
283
|
+
return rows.length > 0;
|
|
241
284
|
}
|
|
242
285
|
async function cancel(db, jobId) {
|
|
243
286
|
await db.execute(sql `UPDATE ${sql.raw(tableQ)} SET status = 'cancelled', completed_at = now(), claim_token = NULL
|
|
@@ -245,12 +288,41 @@ export function createQueue(config = {}) {
|
|
|
245
288
|
}
|
|
246
289
|
async function reap(db) {
|
|
247
290
|
const staleInterval = `${Math.floor(staleTimeoutMs / 1000)} seconds`;
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
291
|
+
return db.transaction(async (tx) => {
|
|
292
|
+
const stale = await tx.execute(sql `SELECT id::text, job_type, attempt_count, max_attempts, worker_id, flow_trace_id::text, flow_root_id::text,
|
|
293
|
+
flow_step_id::text, flow_tenant, flow_actor
|
|
294
|
+
FROM ${sql.raw(tableQ)}
|
|
295
|
+
WHERE status IN ('claimed', 'running')
|
|
296
|
+
AND heartbeat_at < now() - ${staleInterval}::interval
|
|
297
|
+
FOR UPDATE SKIP LOCKED`);
|
|
298
|
+
const reaped = [];
|
|
299
|
+
for (const row of stale) {
|
|
300
|
+
const id = row['id'];
|
|
301
|
+
const attemptCount = row['attempt_count'];
|
|
302
|
+
const jobMaxAttempts = row['max_attempts'];
|
|
303
|
+
const errorJson = JSON.stringify({
|
|
304
|
+
reason: 'reaped',
|
|
305
|
+
message: 'worker lost: heartbeat timeout',
|
|
306
|
+
workerId: row['worker_id'] ?? null,
|
|
307
|
+
});
|
|
308
|
+
const outcome = await retryOrDeadLetter(tx, id, attemptCount, jobMaxAttempts, errorJson);
|
|
309
|
+
reaped.push({
|
|
310
|
+
jobId: id,
|
|
311
|
+
type: row['job_type'],
|
|
312
|
+
attempt: attemptCount + 1,
|
|
313
|
+
outcome,
|
|
314
|
+
maxAttempts: jobMaxAttempts,
|
|
315
|
+
flow: {
|
|
316
|
+
traceId: row['flow_trace_id'] ?? null,
|
|
317
|
+
rootId: row['flow_root_id'] ?? null,
|
|
318
|
+
stepId: row['flow_step_id'] ?? null,
|
|
319
|
+
tenant: row['flow_tenant'] ?? null,
|
|
320
|
+
actor: row['flow_actor'] ?? null,
|
|
321
|
+
},
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
return reaped;
|
|
325
|
+
});
|
|
254
326
|
}
|
|
255
327
|
async function requeueDeadLetter(db, jobId) {
|
|
256
328
|
const rows = await db.execute(sql `UPDATE ${sql.raw(tableQ)} SET
|
|
@@ -279,7 +351,7 @@ export function createQueue(config = {}) {
|
|
|
279
351
|
const sched = createScheduler({ enqueue }, tableQ);
|
|
280
352
|
return {
|
|
281
353
|
definition,
|
|
282
|
-
enqueue, claim, heartbeat, complete, fail, cancel, reap, requeueDeadLetter,
|
|
354
|
+
enqueue, claim, heartbeat, complete, fail, handBack, cancel, reap, requeueDeadLetter,
|
|
283
355
|
startListener, stopListener, waitFor, enqueueAndWait,
|
|
284
356
|
schedule: (db, spec) => sched.schedule(db, spec),
|
|
285
357
|
syncSchedules: (db, declared, owned) => sched.sync(db, declared, owned),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/async/jobs/queue.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/async/jobs/queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DB } from '../../data/db/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Writes an audit record with no tenant and no actor (the person is not yet signed in)
|
|
4
|
+
* under the Flow's open trace step; does nothing when no step is open. A failure is logged, not thrown.
|
|
5
|
+
*/
|
|
6
|
+
export declare function auditUnauthenticated(db: DB, entity: string, verb: string, entityId: string | null, details: Record<string, unknown>): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/auth/auth/audit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAA;AAIhD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9F,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { sql } from '../../data/db/sql.js';
|
|
2
|
+
import { getContext } from '../../request/context/store.js';
|
|
3
|
+
import { getBaseLogger } from '../../core/logging/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Writes an audit record with no tenant and no actor (the person is not yet signed in)
|
|
6
|
+
* under the Flow's open trace step; does nothing when no step is open. A failure is logged, not thrown.
|
|
7
|
+
*/
|
|
8
|
+
export async function auditUnauthenticated(db, entity, verb, entityId, details) {
|
|
9
|
+
const flow = getContext();
|
|
10
|
+
const trace = flow?.trace;
|
|
11
|
+
const stepId = trace?.buffer.openStepId ?? null;
|
|
12
|
+
if (trace === undefined || trace === null || stepId === null)
|
|
13
|
+
return;
|
|
14
|
+
try {
|
|
15
|
+
await db.transaction(async (sp) => {
|
|
16
|
+
await sp.execute(sql `
|
|
17
|
+
INSERT INTO audit_record
|
|
18
|
+
(trace_day, trace_id, trace_step_id, tenant_id, actor_id, entity, verb, entity_id, after, occurred_at)
|
|
19
|
+
VALUES (${trace.openedDay}, ${trace.id}, ${stepId}, NULL, NULL,
|
|
20
|
+
${entity}, ${verb}, ${entityId}, ${JSON.stringify(details)}::jsonb, now())
|
|
21
|
+
`);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
getBaseLogger().error({ err, traceId: trace.id }, `Failed to write the ${entity} ${verb} audit record`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/auth/auth/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,EAAM,EAAE,MAAc,EAAE,IAAY,EAAE,QAAuB,EAAE,OAAgC;IAE/F,MAAM,IAAI,GAAG,UAAU,EAAE,CAAA;IACzB,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,CAAA;IACzB,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI,CAAA;IAC/C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI;QAAE,OAAM;IACpE,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAM,EAAE,EAAE;YACpC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAA;;;kBAGR,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,EAAE,KAAK,MAAM;YAC7C,MAAM,KAAK,IAAI,KAAK,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;OAC7D,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,aAAa,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,uBAAuB,MAAM,IAAI,IAAI,eAAe,CAAC,CAAA;IACzG,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type { DB } from '../../data/db/index.js';
|
|
2
|
+
import type { Mail } from '../../infra/email/mail.js';
|
|
3
|
+
import type { Passwords } from './passwords.js';
|
|
4
|
+
import type { Sessions } from './sessions.js';
|
|
5
|
+
export type EmailLinkPurpose = 'reset' | 'verify';
|
|
6
|
+
export interface EmailLinkPurposeConfig {
|
|
7
|
+
/** The name of the app's mail template; it reads `data.url`. */
|
|
8
|
+
readonly template: string;
|
|
9
|
+
readonly expiresInSeconds: number;
|
|
10
|
+
/** The link the person opens, built from the token. */
|
|
11
|
+
readonly url: (token: string) => string;
|
|
12
|
+
}
|
|
13
|
+
export interface RequestLimit {
|
|
14
|
+
readonly max: number;
|
|
15
|
+
readonly windowSeconds: number;
|
|
16
|
+
}
|
|
17
|
+
export interface EmailLinksConfig {
|
|
18
|
+
readonly mail: Mail<any>;
|
|
19
|
+
readonly passwords: Passwords;
|
|
20
|
+
/** When set, a completed reset revokes the user's refresh tokens and bumps their auth version. */
|
|
21
|
+
readonly sessions?: Pick<Sessions, 'revokeAll' | 'bumpVersion'>;
|
|
22
|
+
/** Keys the token. At least 32 bytes; without it a copy of the database cannot make a token. */
|
|
23
|
+
readonly secret: string;
|
|
24
|
+
/** Finds the user for an address (given trimmed, NFC and lower-cased), or null. Runs in the request's transaction. */
|
|
25
|
+
readonly lookup: (db: DB, address: string) => Promise<{
|
|
26
|
+
userId: string;
|
|
27
|
+
} | null>;
|
|
28
|
+
readonly purposes: {
|
|
29
|
+
readonly reset?: EmailLinkPurposeConfig;
|
|
30
|
+
readonly verify?: EmailLinkPurposeConfig;
|
|
31
|
+
};
|
|
32
|
+
/** Defaults: 5 per address and 20 per client within 3600 seconds. */
|
|
33
|
+
readonly limits?: {
|
|
34
|
+
readonly perAddress?: RequestLimit;
|
|
35
|
+
readonly perClient?: RequestLimit;
|
|
36
|
+
};
|
|
37
|
+
/** Every `request` takes at least this long. Default 250. */
|
|
38
|
+
readonly minResponseMs?: number;
|
|
39
|
+
}
|
|
40
|
+
export type EmailLinkState = 'active' | 'used' | 'expired' | 'ended' | 'unknown';
|
|
41
|
+
export type EmailLinkRefusal = 'unknown' | 'used' | 'expired' | 'ended' | 'wrong-purpose';
|
|
42
|
+
export interface EmailLinks {
|
|
43
|
+
/**
|
|
44
|
+
* Asks for a link. Answers `{ ok: true }` for a known address, an unknown one and an over-limit one alike,
|
|
45
|
+
* and takes at least `minResponseMs` for each. Only a known, within-limit address gets a message.
|
|
46
|
+
* Runs in `db` (the caller's transaction): a rollback drops the link and the message. The limit counts
|
|
47
|
+
* are kept on `pipe.system()`, so they survive a rollback. Needs an active Flow.
|
|
48
|
+
*/
|
|
49
|
+
request(db: DB, input: {
|
|
50
|
+
purpose: EmailLinkPurpose;
|
|
51
|
+
address: string;
|
|
52
|
+
client?: string;
|
|
53
|
+
}): Promise<{
|
|
54
|
+
ok: true;
|
|
55
|
+
}>;
|
|
56
|
+
/** The state of a link, without using it. */
|
|
57
|
+
check(db: DB, token: string): Promise<{
|
|
58
|
+
state: EmailLinkState;
|
|
59
|
+
purpose?: EmailLinkPurpose;
|
|
60
|
+
userId?: string;
|
|
61
|
+
}>;
|
|
62
|
+
/** Uses a link of `purpose` in one atomic statement: of two concurrent uses exactly one succeeds. */
|
|
63
|
+
use(db: DB, token: string, purpose: EmailLinkPurpose): Promise<{
|
|
64
|
+
ok: true;
|
|
65
|
+
userId: string;
|
|
66
|
+
address: string;
|
|
67
|
+
} | {
|
|
68
|
+
ok: false;
|
|
69
|
+
reason: EmailLinkRefusal;
|
|
70
|
+
}>;
|
|
71
|
+
/**
|
|
72
|
+
* Uses a reset link, hashes the new password, calls `store(db, userId, hash)` (the app keeps the hash),
|
|
73
|
+
* ends the user's other reset links and, when `sessions` is configured, revokes all their refresh tokens
|
|
74
|
+
* and bumps their auth version. A link that cannot be used changes nothing. The caller starts the new session.
|
|
75
|
+
*/
|
|
76
|
+
completeReset(db: DB, token: string, newPassword: string, options: {
|
|
77
|
+
store: (db: DB, userId: string, passwordHash: string) => Promise<void>;
|
|
78
|
+
}): Promise<{
|
|
79
|
+
ok: true;
|
|
80
|
+
userId: string;
|
|
81
|
+
} | {
|
|
82
|
+
ok: false;
|
|
83
|
+
reason: EmailLinkRefusal;
|
|
84
|
+
}>;
|
|
85
|
+
/** Ends the user's outstanding reset links (call it when a password changes). */
|
|
86
|
+
endResets(db: DB, userId: string): Promise<void>;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Creates emailed single-use links that prove control of an address: password reset and address
|
|
90
|
+
* verification. Needs blueprint `emailLinks: {}` (tables `pipework_email_links`, `pipework_email_link_requests`)
|
|
91
|
+
* and `email: {}`; the app's mail module must run `mail.jobs`.
|
|
92
|
+
*
|
|
93
|
+
* The token is `base64url(HMAC-SHA256(secret, id || nonce))`. The link table holds only its sha256, and the
|
|
94
|
+
* stored message holds only a reference: the url is computed when the message is delivered, so no copy of the
|
|
95
|
+
* database holds a token or can make one without `secret`.
|
|
96
|
+
*
|
|
97
|
+
* Requesting, using and completing a reset are flow steps (`pipework/auth:email-link-request`,
|
|
98
|
+
* `pipework/auth:email-link-use`) and are audited (`PasswordReset:requested`, `PasswordReset:completed`,
|
|
99
|
+
* `PasswordReset:link-used`, `EmailAddress:verification-requested`, `EmailAddress:verified`; no tenant), never with the token,
|
|
100
|
+
* the password or an address that matched no user.
|
|
101
|
+
*/
|
|
102
|
+
export declare function createEmailLinks(config: EmailLinksConfig): EmailLinks;
|
|
103
|
+
//# sourceMappingURL=email-links.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-links.d.ts","sourceRoot":"","sources":["../../../src/auth/auth/email-links.ts"],"names":[],"mappings":"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"}
|