@forumone/throughline-workflows 0.2.11 → 0.3.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 +47 -0
- package/dist/audit-event-echo.d.ts.map +1 -1
- package/dist/audit-event-echo.js +7 -0
- package/dist/audit-event-echo.js.map +1 -1
- package/dist/execute-scheduled-publishes.d.ts.map +1 -1
- package/dist/execute-scheduled-publishes.js +12 -0
- package/dist/execute-scheduled-publishes.js.map +1 -1
- package/dist/expire-stale-approvals.d.ts.map +1 -1
- package/dist/expire-stale-approvals.js +13 -0
- package/dist/expire-stale-approvals.js.map +1 -1
- package/dist/healthcheck.d.ts.map +1 -1
- package/dist/healthcheck.js +13 -0
- package/dist/healthcheck.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/revalidate-on-publish.d.ts.map +1 -1
- package/dist/revalidate-on-publish.js +7 -0
- package/dist/revalidate-on-publish.js.map +1 -1
- package/dist/types.d.ts +67 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +21 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,52 @@
|
|
|
1
1
|
# @forumone/throughline-workflows
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 7fc0c19: Every workflow factory now takes `onTerminalFailure` and `concurrency`.
|
|
8
|
+
|
|
9
|
+
Audit 06 F-09, found in the only consumer: across that app and all seventeen
|
|
10
|
+
packages here, `onFailure|idempotency|concurrency|singleton` matched no function
|
|
11
|
+
config at all. A run that exhausted its retries stopped — no dead-letter row, no
|
|
12
|
+
email, no page — and 12 H1 is what that cost: `expire-stale-approvals` threw at
|
|
13
|
+
02:00 UTC every night for eighteen days, in every environment, and nobody
|
|
14
|
+
noticed. A host had no way to be told, because the factories took no option.
|
|
15
|
+
|
|
16
|
+
Both live on `BaseWorkflowOptions`, so a host wires failure handling once rather
|
|
17
|
+
than per factory, and `failureOptions` is the single place the translation
|
|
18
|
+
happens.
|
|
19
|
+
|
|
20
|
+
`onTerminalFailure`, not `onFailure`, and the collision that forced the name is
|
|
21
|
+
worth knowing: `HealthcheckOptions.onFailure` already exists and means something
|
|
22
|
+
different — once per run with the checks that failed, on the _first_ bad run,
|
|
23
|
+
because a probe has no retries to exhaust. Both are useful and a healthcheck can
|
|
24
|
+
take both. One name for two moments would have made every call site ambiguous
|
|
25
|
+
about which it was wiring.
|
|
26
|
+
|
|
27
|
+
`concurrency` defaults to 1 on the three functions that need it and is absent on
|
|
28
|
+
the two that do not, which is a claim about which of them race:
|
|
29
|
+
- `execute-scheduled-publishes` and `expire-stale-approvals` both collect a set
|
|
30
|
+
of due rows and then act on them. Overlapping runs find the same row and both
|
|
31
|
+
act — a document published twice through a pipeline that gates on approvals,
|
|
32
|
+
or a requester told twice that their request lapsed.
|
|
33
|
+
- `healthcheck` is capped because two probes report one outage twice.
|
|
34
|
+
- `revalidate-on-publish` and `audit-event-echo` are left uncapped. Revalidating
|
|
35
|
+
twice is the same as revalidating once, and one audit row is one event, so
|
|
36
|
+
serialising them would put a queue in front of every publish and every audited
|
|
37
|
+
write for no correctness gain.
|
|
38
|
+
|
|
39
|
+
A host passing `concurrency` overrides the default; passing 0 is honoured rather
|
|
40
|
+
than read as absent.
|
|
41
|
+
|
|
42
|
+
`AuditEventEchoOptions` takes an `inngest` and no `payload`, so it is not a
|
|
43
|
+
`BaseWorkflowOptions`. Rather than exclude it from failure handling for a reason
|
|
44
|
+
unrelated to failure handling, `failureOptions` reads a narrower
|
|
45
|
+
`FailureAwareOptions` and that interface extends it.
|
|
46
|
+
|
|
47
|
+
New exports: `failureOptions`, and the types `WorkflowFailureHandler` and
|
|
48
|
+
`FailureAwareOptions`.
|
|
49
|
+
|
|
3
50
|
## 0.2.11
|
|
4
51
|
|
|
5
52
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-event-echo.d.ts","sourceRoot":"","sources":["../src/audit-event-echo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"audit-event-echo.d.ts","sourceRoot":"","sources":["../src/audit-event-echo.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAiBvD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,qBAAqB,GAAG,eAAe,CAAC,GAAG,CAgDhG"}
|
package/dist/audit-event-echo.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { failureOptions } from './types.js';
|
|
1
2
|
const APPROVAL_DECISION_ACTIONS = new Set([
|
|
2
3
|
'approval.granted',
|
|
3
4
|
'approval.declined',
|
|
@@ -16,6 +17,12 @@ const APPROVAL_DECISION_ACTIONS = new Set([
|
|
|
16
17
|
export function createAuditEventEchoFunction(options) {
|
|
17
18
|
return options.inngest.createFunction({
|
|
18
19
|
id: options.id ?? 'audit-event-echo',
|
|
20
|
+
/*
|
|
21
|
+
No default cap. One audit row is one event, and the echo only fans it out
|
|
22
|
+
to notification events — so runs are independent by construction and
|
|
23
|
+
serialising them would put a queue in front of every audited write.
|
|
24
|
+
*/
|
|
25
|
+
...failureOptions(options),
|
|
19
26
|
triggers: [{ event: 'audit/event.recorded' }],
|
|
20
27
|
}, async ({ event, step, logger }) => {
|
|
21
28
|
const data = (event.data ?? {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-event-echo.js","sourceRoot":"","sources":["../src/audit-event-echo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"audit-event-echo.js","sourceRoot":"","sources":["../src/audit-event-echo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAa3C,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IACxC,kBAAkB;IAClB,mBAAmB;IACnB,4BAA4B;CAC7B,CAAC,CAAA;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B,CAAC,OAA8B;IACzE,OAAO,OAAO,CAAC,OAAO,CAAC,cAAc,CACnC;QACE,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,kBAAkB;QACpC;;;;UAIE;QACF,GAAG,cAAc,CAAC,OAAO,CAAC;QAC1B,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;KAC9C,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;QAChC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAsB,CAAA;QACpD,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QAE1D,MAAM,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;YACrD,IAAI,IAAI,CAAC,MAAM,KAAK,oBAAoB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACnE,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;oBACzB,IAAI,EAAE,oCAAoC;oBAC1C,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,iBAAiB,EAAE;iBAC7C,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,MAAM,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACnD,IAAI,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzE,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;oBACzB,IAAI,EAAE,qCAAqC;oBAC3C,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;iBACpE,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAA;QACvC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAE,CAAA;YAChC,MAAM,IAAI,CAAC,GAAG,CAAC,kBAAkB,KAAK,EAAE,EAAE,KAAK,IAAI,EAAE;gBACnD,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;oBAC3C,MAAM,OAAO,CAAC,MAAM,CAAC;wBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,IAAI,EAAE,IAA0C;qBACjD,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-scheduled-publishes.d.ts","sourceRoot":"","sources":["../src/execute-scheduled-publishes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"execute-scheduled-publishes.d.ts","sourceRoot":"","sources":["../src/execute-scheduled-publishes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,YAAY,CAAA;AAWlE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uCAAuC,CACrD,OAAO,EAAE,gCAAgC,GACxC,eAAe,CAAC,GAAG,CAuFrB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { failureOptions } from './types.js';
|
|
1
2
|
const DEFAULT_SCHEDULE = '*/5 * * * *';
|
|
2
3
|
const REASONING = 'Scheduled publish executed by workflow cron';
|
|
3
4
|
/**
|
|
@@ -19,6 +20,17 @@ export function createExecuteScheduledPublishesFunction(options) {
|
|
|
19
20
|
const schedule = options.schedule ?? DEFAULT_SCHEDULE;
|
|
20
21
|
return options.inngest.createFunction({
|
|
21
22
|
id: options.id ?? 'execute-scheduled-publishes',
|
|
23
|
+
/*
|
|
24
|
+
One at a time by default, because this reads then acts: `find-due-<slug>`
|
|
25
|
+
collects the documents whose scheduled time has passed, and the publish
|
|
26
|
+
loop runs after. Two overlapping runs both see the same due document and
|
|
27
|
+
both publish it — which for a pipeline that gates on approvals means two
|
|
28
|
+
audit trails for one act, and an `approval.granted` consumed twice.
|
|
29
|
+
|
|
30
|
+
The cost of the cap is nil: the poll finds nothing on almost every tick,
|
|
31
|
+
and a run that does find something is the only one that needs to.
|
|
32
|
+
*/
|
|
33
|
+
...failureOptions(options, 1),
|
|
22
34
|
triggers: [{ cron: schedule }],
|
|
23
35
|
}, async ({ step, logger }) => {
|
|
24
36
|
const nowIso = new Date().toISOString();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-scheduled-publishes.js","sourceRoot":"","sources":["../src/execute-scheduled-publishes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"execute-scheduled-publishes.js","sourceRoot":"","sources":["../src/execute-scheduled-publishes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expire-stale-approvals.d.ts","sourceRoot":"","sources":["../src/expire-stale-approvals.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"expire-stale-approvals.d.ts","sourceRoot":"","sources":["../src/expire-stale-approvals.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAA;AAa7D;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,2BAA2B,GACnC,eAAe,CAAC,GAAG,CAsFrB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { failureOptions } from './types.js';
|
|
1
2
|
import { getAuditWriter } from '@forumone/throughline-core';
|
|
2
3
|
const DEFAULT_SCHEDULE = '0 2 * * *'; // daily at 2am UTC
|
|
3
4
|
const DEFAULT_SLUG = 'approvals';
|
|
@@ -13,6 +14,18 @@ export function createExpireStaleApprovalsFunction(options) {
|
|
|
13
14
|
const collectionSlug = options.collectionSlug ?? DEFAULT_SLUG;
|
|
14
15
|
return options.inngest.createFunction({
|
|
15
16
|
id: options.id ?? 'expire-stale-approvals',
|
|
17
|
+
/*
|
|
18
|
+
One at a time by default, for the same read-then-act reason as
|
|
19
|
+
`execute-scheduled-publishes`: `find-expired` collects pending approvals
|
|
20
|
+
past their expiry and the loop expires them. Two runs both find the same
|
|
21
|
+
approval, both write `status: 'expired'`, and both send the expiry email —
|
|
22
|
+
so the requester is told twice that their request lapsed.
|
|
23
|
+
|
|
24
|
+
This is also the function 12 H1 is about. It threw every night for
|
|
25
|
+
eighteen days over a wrong collection slug; a cap does nothing for that,
|
|
26
|
+
and the `onFailure` above is what would have said so.
|
|
27
|
+
*/
|
|
28
|
+
...failureOptions(options, 1),
|
|
16
29
|
triggers: [{ cron: schedule }],
|
|
17
30
|
}, async ({ step, logger }) => {
|
|
18
31
|
const now = new Date().toISOString();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expire-stale-approvals.js","sourceRoot":"","sources":["../src/expire-stale-approvals.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"expire-stale-approvals.js","sourceRoot":"","sources":["../src/expire-stale-approvals.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"healthcheck.d.ts","sourceRoot":"","sources":["../src/healthcheck.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"healthcheck.d.ts","sourceRoot":"","sources":["../src/healthcheck.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAqB,MAAM,YAAY,CAAA;AAK9F;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,kBAAkB,GAAG,eAAe,CAAC,GAAG,CAwE1F;AAWD;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,cAAc,GAAE,MAAgB,GAC/B,qBAAqB,CAevB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,qBAAqB,CAkBvF"}
|
package/dist/healthcheck.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { failureOptions } from './types.js';
|
|
1
2
|
const DEFAULT_SCHEDULE = '*/15 * * * *';
|
|
2
3
|
const REACHABLE_TIMEOUT_MS = 5_000;
|
|
3
4
|
/**
|
|
@@ -12,6 +13,18 @@ export function createHealthcheckFunction(options) {
|
|
|
12
13
|
const onFailure = options.onFailure ?? defaultOnFailure;
|
|
13
14
|
return options.inngest.createFunction({
|
|
14
15
|
id: options.id ?? 'healthcheck',
|
|
16
|
+
/*
|
|
17
|
+
One at a time by default. Two probes running together tell you nothing a
|
|
18
|
+
single one does not, and `onFailure` below fires per run — so overlapping
|
|
19
|
+
runs would report the same outage twice.
|
|
20
|
+
|
|
21
|
+
`HealthcheckOptions.onFailure` is this package's own option and a
|
|
22
|
+
different thing from Inngest's: it is called once per run when a check
|
|
23
|
+
fails, so it reports the *first* bad run rather than waiting for retries
|
|
24
|
+
to exhaust. A probe has no retries. Both are available now, and they
|
|
25
|
+
answer different questions — see the note on `failureOptions`.
|
|
26
|
+
*/
|
|
27
|
+
...failureOptions(options, 1),
|
|
15
28
|
triggers: [{ cron: schedule }],
|
|
16
29
|
}, async ({ step, logger }) => {
|
|
17
30
|
const results = [];
|
package/dist/healthcheck.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"healthcheck.js","sourceRoot":"","sources":["../src/healthcheck.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"healthcheck.js","sourceRoot":"","sources":["../src/healthcheck.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,5 +3,6 @@ export { createExecuteScheduledPublishesFunction } from './execute-scheduled-pub
|
|
|
3
3
|
export { createExpireStaleApprovalsFunction } from './expire-stale-approvals.js';
|
|
4
4
|
export { createAuditEventEchoFunction } from './audit-event-echo.js';
|
|
5
5
|
export { createHealthcheckFunction, createPayloadReachableCheck, createManifestReachableCheck, } from './healthcheck.js';
|
|
6
|
-
export
|
|
6
|
+
export { failureOptions } from './types.js';
|
|
7
|
+
export type { BaseWorkflowOptions, WorkflowFailureHandler, FailureAwareOptions, RevalidateFn, RevalidatePathsInput, RevalidateOnPublishOptions, ScheduledCollectionConfig, ExecuteScheduledPublishesOptions, ExpireStaleApprovalsOptions, AuditEchoEvent, AuditEchoHandler, AuditEventEchoOptions, HealthcheckDefinition, HealthcheckOptions, HealthcheckResult, } from './types.js';
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,EAAE,uCAAuC,EAAE,MAAM,kCAAkC,CAAA;AAC1F,OAAO,EAAE,kCAAkC,EAAE,MAAM,6BAA6B,CAAA;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAA;AAEzB,YAAY,EACV,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,gCAAgC,EAChC,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,EAAE,uCAAuC,EAAE,MAAM,kCAAkC,CAAA;AAC1F,OAAO,EAAE,kCAAkC,EAAE,MAAM,6BAA6B,CAAA;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,YAAY,EACV,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,gCAAgC,EAChC,2BAA2B,EAC3B,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,YAAY,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -4,4 +4,5 @@ export { createExecuteScheduledPublishesFunction } from './execute-scheduled-pub
|
|
|
4
4
|
export { createExpireStaleApprovalsFunction } from './expire-stale-approvals.js';
|
|
5
5
|
export { createAuditEventEchoFunction } from './audit-event-echo.js';
|
|
6
6
|
export { createHealthcheckFunction, createPayloadReachableCheck, createManifestReachableCheck, } from './healthcheck.js';
|
|
7
|
+
export { failureOptions } from './types.js';
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,EAAE,uCAAuC,EAAE,MAAM,kCAAkC,CAAA;AAC1F,OAAO,EAAE,kCAAkC,EAAE,MAAM,6BAA6B,CAAA;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAEpD,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,EAAE,uCAAuC,EAAE,MAAM,kCAAkC,CAAA;AAC1F,OAAO,EAAE,kCAAkC,EAAE,MAAM,6BAA6B,CAAA;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revalidate-on-publish.d.ts","sourceRoot":"","sources":["../src/revalidate-on-publish.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"revalidate-on-publish.d.ts","sourceRoot":"","sources":["../src/revalidate-on-publish.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,KAAK,EAAgB,0BAA0B,EAAwB,MAAM,YAAY,CAAA;AAOhG;;;;;;;;GAQG;AACH,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,0BAA0B,GAClC,eAAe,CAAC,GAAG,CA6CrB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { failureOptions } from './types.js';
|
|
1
2
|
const DEFAULT_URL_BUILDERS = {
|
|
2
3
|
pages: (slug) => (slug === 'home' || slug === '' ? '/' : `/${slug}`),
|
|
3
4
|
posts: (slug) => `/blog/${slug}`,
|
|
@@ -18,6 +19,12 @@ export function createRevalidateOnPublishFunction(options) {
|
|
|
18
19
|
return options.inngest.createFunction({
|
|
19
20
|
id: options.id ?? 'revalidate-on-publish',
|
|
20
21
|
retries: 5,
|
|
22
|
+
/*
|
|
23
|
+
No default cap. This is event-driven and idempotent — it drops cache tags
|
|
24
|
+
and revalidates paths, and doing that twice is the same as doing it once —
|
|
25
|
+
so two publishes landing together should not queue behind each other.
|
|
26
|
+
*/
|
|
27
|
+
...failureOptions(options),
|
|
21
28
|
triggers: [
|
|
22
29
|
{ event: 'content/page.published' },
|
|
23
30
|
{ event: 'content/page.unpublished' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revalidate-on-publish.js","sourceRoot":"","sources":["../src/revalidate-on-publish.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"revalidate-on-publish.js","sourceRoot":"","sources":["../src/revalidate-on-publish.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -6,9 +6,75 @@ import type { Payload } from 'payload';
|
|
|
6
6
|
* means the client app is responsible for instantiating both and passing
|
|
7
7
|
* them in.
|
|
8
8
|
*/
|
|
9
|
+
export type WorkflowFailureHandler = (args: {
|
|
10
|
+
/** The error that exhausted the retries. */
|
|
11
|
+
error: Error;
|
|
12
|
+
/** Inngest's `function.failed` payload, which names the run. */
|
|
13
|
+
event: {
|
|
14
|
+
data?: {
|
|
15
|
+
function_id?: string;
|
|
16
|
+
run_id?: string;
|
|
17
|
+
event?: {
|
|
18
|
+
name?: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
}) => Promise<void> | void;
|
|
9
23
|
export interface BaseWorkflowOptions {
|
|
10
24
|
inngest: Inngest;
|
|
11
25
|
payload: Payload;
|
|
26
|
+
/**
|
|
27
|
+
* Called once when a run has exhausted its retries.
|
|
28
|
+
*
|
|
29
|
+
* Named `onTerminalFailure` rather than `onFailure`, and the collision that
|
|
30
|
+
* forced it is worth keeping in view: `HealthcheckOptions.onFailure` already
|
|
31
|
+
* exists and is a different thing — it fires once per run with the list of
|
|
32
|
+
* checks that failed, on the *first* bad run, because a probe has no retries
|
|
33
|
+
* to exhaust. Both are useful and a function can take both. One name for two
|
|
34
|
+
* moments would have made every call site ambiguous about which it wired.
|
|
35
|
+
*
|
|
36
|
+
* Optional, and absent means the previous behaviour: the failure reaches
|
|
37
|
+
* whatever Inngest's dashboard shows and nothing else. A host that passes one
|
|
38
|
+
* gets the only signal that does not require somebody to go and look.
|
|
39
|
+
*/
|
|
40
|
+
onTerminalFailure?: WorkflowFailureHandler;
|
|
41
|
+
/**
|
|
42
|
+
* Maximum simultaneous runs of this function.
|
|
43
|
+
*
|
|
44
|
+
* Two of the crons here default to 1 because they read a set of due rows and
|
|
45
|
+
* then act on them, which is a lost-update race between overlapping runs —
|
|
46
|
+
* see each one's own note. Passing a value overrides that; passing one for a
|
|
47
|
+
* workflow with no default adds a cap where there was none.
|
|
48
|
+
*/
|
|
49
|
+
concurrency?: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The failure and concurrency half of a function config, built once.
|
|
53
|
+
*
|
|
54
|
+
* Spread into each `createFunction` config so the five workflows cannot
|
|
55
|
+
* disagree about the shape — the same reason `collect-component-tokens.ts` was
|
|
56
|
+
* extracted, where the writer and the checker being separate implementations
|
|
57
|
+
* left 61 of 74 contracts drifted.
|
|
58
|
+
*
|
|
59
|
+
* `defaultConcurrency` is the factory's own answer, used when the host passes
|
|
60
|
+
* none. Omitting both keys rather than passing `undefined` matters:
|
|
61
|
+
* `exactOptionalPropertyTypes` is on, and Inngest reads the presence of the key.
|
|
62
|
+
*/
|
|
63
|
+
export declare function failureOptions(options: FailureAwareOptions, defaultConcurrency?: number): {
|
|
64
|
+
onFailure?: WorkflowFailureHandler;
|
|
65
|
+
concurrency?: number;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* The two fields `failureOptions` reads, and nothing else.
|
|
69
|
+
*
|
|
70
|
+
* Narrower than `BaseWorkflowOptions` on purpose: `AuditEventEchoOptions` takes
|
|
71
|
+
* an `inngest` and no `payload`, so it is not a `BaseWorkflowOptions` and asking
|
|
72
|
+
* for one would have excluded it from failure handling for a reason that has
|
|
73
|
+
* nothing to do with failure handling.
|
|
74
|
+
*/
|
|
75
|
+
export interface FailureAwareOptions {
|
|
76
|
+
onTerminalFailure?: WorkflowFailureHandler;
|
|
77
|
+
concurrency?: number;
|
|
12
78
|
}
|
|
13
79
|
export interface RevalidatePathsInput {
|
|
14
80
|
/** A page path (`/about`, `/blog/post-1`, or `''` for layout-level only). */
|
|
@@ -129,7 +195,7 @@ export interface AuditEchoHandler {
|
|
|
129
195
|
/** Side-effects (e.g. fire a follow-on Inngest event). */
|
|
130
196
|
handle: (event: AuditEchoEvent) => Promise<void>;
|
|
131
197
|
}
|
|
132
|
-
export interface AuditEventEchoOptions {
|
|
198
|
+
export interface AuditEventEchoOptions extends FailureAwareOptions {
|
|
133
199
|
inngest: Inngest;
|
|
134
200
|
/**
|
|
135
201
|
* Additional handlers run after the built-in approval fan-out. Each
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -1,2 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The failure and concurrency half of a function config, built once.
|
|
3
|
+
*
|
|
4
|
+
* Spread into each `createFunction` config so the five workflows cannot
|
|
5
|
+
* disagree about the shape — the same reason `collect-component-tokens.ts` was
|
|
6
|
+
* extracted, where the writer and the checker being separate implementations
|
|
7
|
+
* left 61 of 74 contracts drifted.
|
|
8
|
+
*
|
|
9
|
+
* `defaultConcurrency` is the factory's own answer, used when the host passes
|
|
10
|
+
* none. Omitting both keys rather than passing `undefined` matters:
|
|
11
|
+
* `exactOptionalPropertyTypes` is on, and Inngest reads the presence of the key.
|
|
12
|
+
*/
|
|
13
|
+
export function failureOptions(options, defaultConcurrency) {
|
|
14
|
+
const concurrency = options.concurrency ?? defaultConcurrency;
|
|
15
|
+
return {
|
|
16
|
+
// `onFailure` is Inngest's key; `onTerminalFailure` is ours. The rename
|
|
17
|
+
// happens here, once, which is the other reason this is a function.
|
|
18
|
+
...(options.onTerminalFailure ? { onFailure: options.onTerminalFailure } : {}),
|
|
19
|
+
...(concurrency !== undefined ? { concurrency } : {}),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
2
22
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAoEA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAC5B,OAA4B,EAC5B,kBAA2B;IAE3B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,kBAAkB,CAAA;IAE7D,OAAO;QACL,wEAAwE;QACxE,oEAAoE;QACpE,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forumone/throughline-workflows",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Composable Inngest function factories for the Throughline framework — revalidation, scheduled publishing, approval expiration, audit fan-out, healthcheck.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|