@substrat-run/control-plane-api 0.138.0 → 0.140.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.d.ts +14 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +398 -49
- package/dist/api.js.map +1 -1
- package/dist/audited-change.d.ts +139 -0
- package/dist/audited-change.d.ts.map +1 -0
- package/dist/audited-change.js +214 -0
- package/dist/audited-change.js.map +1 -0
- package/dist/connect-links.d.ts +29 -0
- package/dist/connect-links.d.ts.map +1 -0
- package/dist/connect-links.js +139 -0
- package/dist/connect-links.js.map +1 -0
- package/dist/connect-url.d.ts +20 -1
- package/dist/connect-url.d.ts.map +1 -1
- package/dist/connect-url.js +1 -1
- package/dist/connect-url.js.map +1 -1
- package/dist/connection-relay.d.ts +24 -0
- package/dist/connection-relay.d.ts.map +1 -1
- package/dist/connection-relay.js +31 -12
- package/dist/connection-relay.js.map +1 -1
- package/dist/email-intent.d.ts +71 -0
- package/dist/email-intent.d.ts.map +1 -0
- package/dist/email-intent.js +186 -0
- package/dist/email-intent.js.map +1 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/platform-drain.d.ts +12 -2
- package/dist/platform-drain.d.ts.map +1 -1
- package/dist/platform-drain.js +15 -3
- package/dist/platform-drain.js.map +1 -1
- package/dist/reconcile.d.ts +17 -2
- package/dist/reconcile.d.ts.map +1 -1
- package/dist/reconcile.js +35 -1
- package/dist/reconcile.js.map +1 -1
- package/dist/staff-client.d.ts +3 -1
- package/dist/staff-client.d.ts.map +1 -1
- package/dist/staff-client.js +2 -0
- package/dist/staff-client.js.map +1 -1
- package/dist/vertical-client.d.ts +60 -2
- package/dist/vertical-client.d.ts.map +1 -1
- package/dist/vertical-client.js +111 -20
- package/dist/vertical-client.js.map +1 -1
- package/package.json +6 -6
|
@@ -59,9 +59,33 @@ export declare class ConnectionRelayError extends Error {
|
|
|
59
59
|
* things are broken. Unverifiable is stored, and reported as unverified.
|
|
60
60
|
*/
|
|
61
61
|
export type ConnectionCandidateProbe = (provider: string, secret: Record<string, string>) => Promise<ConnectionProbe | undefined>;
|
|
62
|
+
/**
|
|
63
|
+
* Finish a candidate credential on the platform side, before it is probed and stored (#2100).
|
|
64
|
+
*
|
|
65
|
+
* For a provider where part of the credential is the PLATFORM's to make: Microsoft 365 with a
|
|
66
|
+
* certificate generates the keypair here, so the private key is created where it is sealed and
|
|
67
|
+
* never travels through the caller. `previous` is the live connection's plaintext secret when
|
|
68
|
+
* this upsert rotates one, so a provider can carry what must survive an edit (the keypair whose
|
|
69
|
+
* certificate the tenant already uploaded).
|
|
70
|
+
*
|
|
71
|
+
* `expiresAt`: a date lands on the connection, `null` clears the one it holds (the credential
|
|
72
|
+
* that had it is gone), and absent leaves it as it is.
|
|
73
|
+
*/
|
|
74
|
+
export type ConnectionCandidatePrepare = (candidate: Record<string, string>, previous: Record<string, string> | undefined) => Promise<{
|
|
75
|
+
secret: Record<string, string>;
|
|
76
|
+
expiresAt?: string | null;
|
|
77
|
+
}>;
|
|
78
|
+
/**
|
|
79
|
+
* The provider's {@link ConnectionCandidatePrepare}, or `undefined` when it has none. A lookup
|
|
80
|
+
* rather than a call, so the relay opens the live credential only for a provider that will read
|
|
81
|
+
* it: a provider with no preparation must rotate even when the old secret no longer opens (a
|
|
82
|
+
* sealing key the deployment no longer holds), which is the case a rotation exists to repair.
|
|
83
|
+
*/
|
|
84
|
+
export type ConnectionCandidatePreparer = (provider: string) => ConnectionCandidatePrepare | undefined;
|
|
62
85
|
/** What a preview or a fork is told when it asks to change a connection (#2005). */
|
|
63
86
|
export declare const PREVIEW_CONNECTIONS_REFUSAL = "previews and forks cannot change a tenant's connections: this scope is a preview or a fork";
|
|
64
87
|
export declare function relayConnectionUpsert(host: ScopeHost, actor: PlatformActorId, body: unknown, options?: {
|
|
65
88
|
probeCandidate?: ConnectionCandidateProbe;
|
|
89
|
+
prepareCandidate?: ConnectionCandidatePreparer;
|
|
66
90
|
}): Promise<ConnectionRelayResult>;
|
|
67
91
|
//# sourceMappingURL=connection-relay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-relay.d.ts","sourceRoot":"","sources":["../src/connection-relay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,
|
|
1
|
+
{"version":3,"file":"connection-relay.d.ts","sourceRoot":"","sources":["../src/connection-relay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAG3C;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;IAClD,uFAAuF;IACvF,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe;IAVlC,YACE,OAAO,EAAE,MAAM;IACf;;;;;OAKG;IACM,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;IAClD,uFAAuF;IAC9E,KAAK,CAAC,EAAE,eAAe,YAAA,EAIjC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,wBAAwB,GAAG,CACrC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC3B,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;AAE1C;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,0BAA0B,GAAG,CACvC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,KACzC,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,MAAM,2BAA2B,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,0BAA0B,GAAG,SAAS,CAAC;AAEvG,oFAAoF;AACpF,eAAO,MAAM,2BAA2B,+FACsD,CAAC;AAE/F,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,OAAO,EACb,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAAC,gBAAgB,CAAC,EAAE,2BAA2B,CAAA;CAAO,GAC1G,OAAO,CAAC,qBAAqB,CAAC,CAyIhC"}
|
package/dist/connection-relay.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isPrimaryScope, ulid } from '@substrat-run/kernel';
|
|
2
|
-
import { connectionId, connectionRelayRequest, } from '@substrat-run/contracts';
|
|
2
|
+
import { instant, connectionId, connectionRelayRequest, } from '@substrat-run/contracts';
|
|
3
3
|
/**
|
|
4
4
|
* The connection relay (connections.md §3.5.2) — the credential half of #574's routed
|
|
5
5
|
* connector dispatch. A hosted CP-less vertical's tenant admin holds a provider credential
|
|
@@ -76,21 +76,39 @@ export async function relayConnectionUpsert(host, actor, body, options = {}) {
|
|
|
76
76
|
throw new ConnectionRelayError(PREVIEW_CONNECTIONS_REFUSAL, 403);
|
|
77
77
|
}
|
|
78
78
|
const vertical = rec.vertical;
|
|
79
|
-
// Ask the provider before touching the store (#605). Deliberately here, ahead of every
|
|
80
|
-
// write below: a refused rotation must leave the live credential exactly as it was.
|
|
81
|
-
const probe = await options.probeCandidate?.(input.provider, input.secret);
|
|
82
|
-
if (probe && !probe.ok && probe.refused) {
|
|
83
|
-
throw new ConnectionRelayError(probe.error ?? `${input.provider} refused these credentials`, 422, probe);
|
|
84
|
-
}
|
|
85
79
|
// `listConnections` already excludes revoked rows; expired/errored rows are still the
|
|
86
80
|
// live row for this key — rotation is what revives them. The account leg matches
|
|
87
81
|
// exactly (absent matches absent): a multi-account provider's second account is a new
|
|
88
|
-
// connection, not a rotation of the first.
|
|
82
|
+
// connection, not a rotation of the first. Read before the probe because a provider that
|
|
83
|
+
// finishes its own credential (#2100) needs the one this upsert would replace.
|
|
89
84
|
const live = (await host.admin.listConnections(actor, {
|
|
90
85
|
tenantId: input.tenantId,
|
|
91
86
|
vertical,
|
|
92
87
|
provider: input.provider,
|
|
93
88
|
})).filter((c) => c.externalAccountRef === (input.externalAccountRef ?? null));
|
|
89
|
+
// #2100: the platform's half of the credential, made here — before the probe, so what is
|
|
90
|
+
// probed is exactly what is stored.
|
|
91
|
+
let secret = input.secret;
|
|
92
|
+
let expiresAt = input.expiresAt;
|
|
93
|
+
const prepare = options.prepareCandidate?.(input.provider);
|
|
94
|
+
if (prepare) {
|
|
95
|
+
const previous = live.length === 1
|
|
96
|
+
? (await host.admin.openConnection(input.tenantId, vertical, input.provider, input.externalAccountRef))?.secret
|
|
97
|
+
: undefined;
|
|
98
|
+
const prepared = await prepare(input.secret, previous);
|
|
99
|
+
secret = prepared.secret;
|
|
100
|
+
// Parsed: a provider's date becomes the same branded instant a caller's would be. `null` is
|
|
101
|
+
// the provider clearing an expiry whose credential it dropped (a certificate → a client secret).
|
|
102
|
+
expiresAt =
|
|
103
|
+
input.expiresAt ??
|
|
104
|
+
(prepared.expiresAt === undefined || prepared.expiresAt === null ? prepared.expiresAt : instant.parse(prepared.expiresAt));
|
|
105
|
+
}
|
|
106
|
+
// Ask the provider before touching the store (#605). Deliberately here, ahead of every
|
|
107
|
+
// write below: a refused rotation must leave the live credential exactly as it was.
|
|
108
|
+
const probe = await options.probeCandidate?.(input.provider, secret);
|
|
109
|
+
if (probe && !probe.ok && probe.refused) {
|
|
110
|
+
throw new ConnectionRelayError(probe.error ?? `${input.provider} refused these credentials`, 422, probe);
|
|
111
|
+
}
|
|
94
112
|
let id;
|
|
95
113
|
let created;
|
|
96
114
|
if (live.length === 0) {
|
|
@@ -103,9 +121,10 @@ export async function relayConnectionUpsert(host, actor, body, options = {}) {
|
|
|
103
121
|
label: input.label ?? input.provider,
|
|
104
122
|
externalAccountRef: input.externalAccountRef,
|
|
105
123
|
scopes: input.scopes,
|
|
106
|
-
// Whatever the caller supplies
|
|
107
|
-
|
|
108
|
-
|
|
124
|
+
// Whatever the caller supplies, else what the provider's own preparation knows (#2100: a
|
|
125
|
+
// generated certificate's end). Undefined reads "not reported" (connections.md §3.6).
|
|
126
|
+
expiresAt: expiresAt ?? undefined,
|
|
127
|
+
secret,
|
|
109
128
|
// §3.5.1 — the authorizing tenant principal, proven by the vertical's own
|
|
110
129
|
// `ctx.check` before the secret ever left the operation.
|
|
111
130
|
createdBy: input.createdBy,
|
|
@@ -114,7 +133,7 @@ export async function relayConnectionUpsert(host, actor, body, options = {}) {
|
|
|
114
133
|
}
|
|
115
134
|
else if (live.length === 1) {
|
|
116
135
|
id = live[0].id;
|
|
117
|
-
await host.admin.updateConnectionSecret(actor, id,
|
|
136
|
+
await host.admin.updateConnectionSecret(actor, id, secret, expiresAt, {
|
|
118
137
|
rotatedBy: input.createdBy,
|
|
119
138
|
});
|
|
120
139
|
created = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-relay.js","sourceRoot":"","sources":["../src/connection-relay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAkB,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EACL,YAAY,EACZ,sBAAsB,GAIvB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IASlC,MAAM;IAEN,KAAK;IAVhB,YACE,OAAe;IACf;;;;;OAKG;IACM,MAAyC;IAClD,uFAAuF;IAC9E,KAAuB;QAEhC,KAAK,CAAC,OAAO,CAAC,CAAC;sBAJN,MAAM;qBAEN,KAAK;QAGd,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"connection-relay.js","sourceRoot":"","sources":["../src/connection-relay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { type SendEmailRequest, type TenantId, type ScopeId } from '@substrat-run/contracts';
|
|
2
|
+
import type { PlatformRequestHandler } from './platform-drain.js';
|
|
3
|
+
/**
|
|
4
|
+
* The drain's handler for `send-email` (#2102): one mail a vertical requested inside an
|
|
5
|
+
* operation, delivered after that operation committed.
|
|
6
|
+
*
|
|
7
|
+
* It routes as the synchronous relay does — no `from` sends as the platform, a `from` sends
|
|
8
|
+
* through the tenant connection whose `MailSender` covers that address — and it retries what a
|
|
9
|
+
* provider deferred: a `429`, a `5xx`, or a failure with no status at all. Any other 4xx is a
|
|
10
|
+
* refusal and is final. Each outcome that ends the request is written into the scope as an
|
|
11
|
+
* event, with the provider's message id when it gives one.
|
|
12
|
+
*
|
|
13
|
+
* **Retries wait.** The drain runs on every kick and every sweep, and a kick follows any
|
|
14
|
+
* operation that requested something — so a throttled mailbox would otherwise be retried as
|
|
15
|
+
* fast as the vertical writes. A failed attempt records the earliest time to try again in the
|
|
16
|
+
* intent's `result` (`Retry-After` when the provider gave one, else a doubling backoff), and a
|
|
17
|
+
* pass before then defers it without trying, which counts no attempt. Within one pass, a
|
|
18
|
+
* sender that answered `429` is not tried again: the rest of its mail defers to the next pass.
|
|
19
|
+
*
|
|
20
|
+
* **At least once.** A send the provider accepted whose settle is then lost is sent again on
|
|
21
|
+
* the next pass. Mail has no idempotency key a provider honours across all of them, so this is
|
|
22
|
+
* the honest guarantee; the alternative — settle before sending — loses mail instead.
|
|
23
|
+
*/
|
|
24
|
+
/** Attempts before a send that keeps failing transiently dead-letters. Well under the drain's ceiling. */
|
|
25
|
+
export declare const MAX_EMAIL_SEND_ATTEMPTS = 10;
|
|
26
|
+
/** The first retry's wait when the provider named none; doubled per attempt. */
|
|
27
|
+
export declare const EMAIL_RETRY_BASE_MS = 30000;
|
|
28
|
+
/** The longest wait between attempts the backoff alone will choose. */
|
|
29
|
+
export declare const EMAIL_RETRY_MAX_MS: number;
|
|
30
|
+
/** What a sender returns. `messageId` when the provider gives one. */
|
|
31
|
+
export interface EmailSent {
|
|
32
|
+
messageId?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface SendEmailDeps {
|
|
35
|
+
/** Does this vertical hold the `emailSender` grant? Read per pass, so a revoke takes effect. */
|
|
36
|
+
mayEmail(vertical: string): Promise<boolean>;
|
|
37
|
+
/**
|
|
38
|
+
* Send as the platform's own address. A refusal throws an error carrying `status` (and
|
|
39
|
+
* `retryAfter` seconds for a throttle), read structurally.
|
|
40
|
+
*/
|
|
41
|
+
sendAsPlatform(mail: Omit<SendEmailRequest, 'from' | 'attachments' | 'about'>): Promise<EmailSent>;
|
|
42
|
+
/**
|
|
43
|
+
* Send as a tenant address, through the connection that covers it. Same error contract; a
|
|
44
|
+
* wrapper that rewords a provider's failure keeps the original as `cause`.
|
|
45
|
+
*/
|
|
46
|
+
sendAsTenant(input: {
|
|
47
|
+
tenantId: TenantId;
|
|
48
|
+
scopeId: ScopeId;
|
|
49
|
+
vertical: string;
|
|
50
|
+
from: string;
|
|
51
|
+
fromName?: string;
|
|
52
|
+
to: string;
|
|
53
|
+
subject: string;
|
|
54
|
+
html: string;
|
|
55
|
+
text: string;
|
|
56
|
+
attachmentIds: string[];
|
|
57
|
+
}): Promise<EmailSent>;
|
|
58
|
+
now?(): Date;
|
|
59
|
+
maxAttempts?: number;
|
|
60
|
+
}
|
|
61
|
+
/** One handler per drain pass: the throttles it learns last only as long as the pass. */
|
|
62
|
+
export declare function sendEmailHandler(deps: SendEmailDeps): PlatformRequestHandler;
|
|
63
|
+
/**
|
|
64
|
+
* The status that decides a retry: the provider's, when a wrapper kept it as `cause`, else the
|
|
65
|
+
* wrapper's own. A tenant send that failed in the provider surfaces as a 502 around the
|
|
66
|
+
* provider's answer — the 502 says "the provider failed", the cause says whether it will again.
|
|
67
|
+
*/
|
|
68
|
+
export declare function sendFailureStatus(e: unknown): number | undefined;
|
|
69
|
+
/** `retryAfter` (seconds) wherever along the cause chain a sender put it; 0 when nobody did. */
|
|
70
|
+
export declare function retryAfterSecondsOf(e: unknown): number;
|
|
71
|
+
//# sourceMappingURL=email-intent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-intent.d.ts","sourceRoot":"","sources":["../src/email-intent.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,OAAO,EACb,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,sBAAsB,EAA0B,MAAM,qBAAqB,CAAC;AAG1F;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,0GAA0G;AAC1G,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,gFAAgF;AAChF,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAC1C,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,QAAc,CAAC;AAE9C,sEAAsE;AACtE,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACnG;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE;QAClB,QAAQ,EAAE,QAAQ,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACvB,GAAG,CAAC,IAAI,IAAI,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAOD,yFAAyF;AACzF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,sBAAsB,CAgG5E;AAoDD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEhE;AAED,gGAAgG;AAChG,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAQtD"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { EMAIL_DEAD_LETTERED, EMAIL_REFUSED, EMAIL_SENT, PLATFORM_REQUEST_ENTITY_TYPE, sendEmailRequest, } from '@substrat-run/contracts';
|
|
2
|
+
import { attributeFailure } from './failure-attribution.js';
|
|
3
|
+
import { isTerminalDispatchFailure, providerErrorStatus } from './provider-error.js';
|
|
4
|
+
/**
|
|
5
|
+
* The drain's handler for `send-email` (#2102): one mail a vertical requested inside an
|
|
6
|
+
* operation, delivered after that operation committed.
|
|
7
|
+
*
|
|
8
|
+
* It routes as the synchronous relay does — no `from` sends as the platform, a `from` sends
|
|
9
|
+
* through the tenant connection whose `MailSender` covers that address — and it retries what a
|
|
10
|
+
* provider deferred: a `429`, a `5xx`, or a failure with no status at all. Any other 4xx is a
|
|
11
|
+
* refusal and is final. Each outcome that ends the request is written into the scope as an
|
|
12
|
+
* event, with the provider's message id when it gives one.
|
|
13
|
+
*
|
|
14
|
+
* **Retries wait.** The drain runs on every kick and every sweep, and a kick follows any
|
|
15
|
+
* operation that requested something — so a throttled mailbox would otherwise be retried as
|
|
16
|
+
* fast as the vertical writes. A failed attempt records the earliest time to try again in the
|
|
17
|
+
* intent's `result` (`Retry-After` when the provider gave one, else a doubling backoff), and a
|
|
18
|
+
* pass before then defers it without trying, which counts no attempt. Within one pass, a
|
|
19
|
+
* sender that answered `429` is not tried again: the rest of its mail defers to the next pass.
|
|
20
|
+
*
|
|
21
|
+
* **At least once.** A send the provider accepted whose settle is then lost is sent again on
|
|
22
|
+
* the next pass. Mail has no idempotency key a provider honours across all of them, so this is
|
|
23
|
+
* the honest guarantee; the alternative — settle before sending — loses mail instead.
|
|
24
|
+
*/
|
|
25
|
+
/** Attempts before a send that keeps failing transiently dead-letters. Well under the drain's ceiling. */
|
|
26
|
+
export const MAX_EMAIL_SEND_ATTEMPTS = 10;
|
|
27
|
+
/** The first retry's wait when the provider named none; doubled per attempt. */
|
|
28
|
+
export const EMAIL_RETRY_BASE_MS = 30_000;
|
|
29
|
+
/** The longest wait between attempts the backoff alone will choose. */
|
|
30
|
+
export const EMAIL_RETRY_MAX_MS = 30 * 60_000;
|
|
31
|
+
/** One handler per drain pass: the throttles it learns last only as long as the pass. */
|
|
32
|
+
export function sendEmailHandler(deps) {
|
|
33
|
+
const throttledUntil = new Map();
|
|
34
|
+
const now = () => deps.now?.() ?? new Date();
|
|
35
|
+
const maxAttempts = deps.maxAttempts ?? MAX_EMAIL_SEND_ATTEMPTS;
|
|
36
|
+
return async (ctx, request) => {
|
|
37
|
+
const attempts = request.attempts + 1;
|
|
38
|
+
const parsed = sendEmailRequest.safeParse(request.payload);
|
|
39
|
+
if (!parsed.success) {
|
|
40
|
+
// Module code goes through `requestEmail`, which parses first; this is a row written some
|
|
41
|
+
// other way. Final: the same bytes fail the same parse on every pass.
|
|
42
|
+
return over(request, EMAIL_REFUSED, null, 'platform', attempts, {
|
|
43
|
+
error: `not sent: the send-email payload is invalid (${parsed.error.issues[0]?.message ?? 'unknown'})`,
|
|
44
|
+
failure: { origin: 'platform', code: 'validation_failed', permission: null },
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
const mail = parsed.data;
|
|
48
|
+
const about = mail.about ?? null;
|
|
49
|
+
const sender = mail.from === undefined ? 'platform' : 'tenant';
|
|
50
|
+
const waitUntil = retryAtOf(request);
|
|
51
|
+
if (waitUntil !== null && waitUntil > now().getTime())
|
|
52
|
+
return { status: 'deferred' };
|
|
53
|
+
const key = mail.from === undefined ? 'platform' : `tenant:${mail.from.toLowerCase()}`;
|
|
54
|
+
if ((throttledUntil.get(key) ?? 0) > now().getTime())
|
|
55
|
+
return { status: 'deferred' };
|
|
56
|
+
if (!(await deps.mayEmail(ctx.vertical))) {
|
|
57
|
+
return over(request, EMAIL_REFUSED, about, sender, attempts, {
|
|
58
|
+
error: `not sent: vertical '${ctx.vertical}' does not hold the email-sender capability — staff ` +
|
|
59
|
+
'grants it in the console (setVerticalEmailSender)',
|
|
60
|
+
failure: { origin: 'platform', code: 'permission_denied', permission: null },
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
let sent;
|
|
64
|
+
try {
|
|
65
|
+
sent =
|
|
66
|
+
mail.from === undefined
|
|
67
|
+
? await deps.sendAsPlatform({
|
|
68
|
+
to: mail.to,
|
|
69
|
+
subject: mail.subject,
|
|
70
|
+
html: mail.html,
|
|
71
|
+
text: mail.text,
|
|
72
|
+
...(mail.fromName ? { fromName: mail.fromName } : {}),
|
|
73
|
+
})
|
|
74
|
+
: await deps.sendAsTenant({
|
|
75
|
+
tenantId: ctx.tenantId,
|
|
76
|
+
scopeId: ctx.scopeId,
|
|
77
|
+
vertical: ctx.vertical,
|
|
78
|
+
from: mail.from,
|
|
79
|
+
...(mail.fromName ? { fromName: mail.fromName } : {}),
|
|
80
|
+
to: mail.to,
|
|
81
|
+
subject: mail.subject,
|
|
82
|
+
html: mail.html,
|
|
83
|
+
text: mail.text,
|
|
84
|
+
attachmentIds: (mail.attachments ?? []).map((a) => a.attachmentId),
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
const status = sendFailureStatus(e);
|
|
89
|
+
const failure = attributeFailure(innermost(e));
|
|
90
|
+
const error = e instanceof Error ? e.message : String(e);
|
|
91
|
+
if (status !== undefined && isTerminalDispatchFailure({ status })) {
|
|
92
|
+
return over(request, EMAIL_REFUSED, about, sender, attempts, { error, failure, status });
|
|
93
|
+
}
|
|
94
|
+
if (attempts >= maxAttempts) {
|
|
95
|
+
return over(request, EMAIL_DEAD_LETTERED, about, sender, attempts, {
|
|
96
|
+
error: `gave up after ${attempts} attempts — last error: ${error}`,
|
|
97
|
+
failure,
|
|
98
|
+
status,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
const retryAfterMs = retryAfterSecondsOf(e) * 1000;
|
|
102
|
+
if (status === 429)
|
|
103
|
+
throttledUntil.set(key, now().getTime() + Math.max(retryAfterMs, 1));
|
|
104
|
+
const backoff = Math.min(EMAIL_RETRY_BASE_MS * 2 ** (attempts - 1), EMAIL_RETRY_MAX_MS);
|
|
105
|
+
const retry = { retryAt: new Date(now().getTime() + Math.max(retryAfterMs, backoff)).toISOString() };
|
|
106
|
+
return { status: 'pending', result: retry, error, failure };
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
status: 'done',
|
|
110
|
+
result: { sent: true, sender, messageId: sent.messageId ?? null },
|
|
111
|
+
event: {
|
|
112
|
+
type: EMAIL_SENT,
|
|
113
|
+
entity: entityOf(request, about),
|
|
114
|
+
payload: {
|
|
115
|
+
request: request.id,
|
|
116
|
+
about,
|
|
117
|
+
sender,
|
|
118
|
+
messageId: sent.messageId ?? null,
|
|
119
|
+
attempts,
|
|
120
|
+
code: null,
|
|
121
|
+
status: null,
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/** A terminal outcome and the event that says so. */
|
|
128
|
+
function over(request, type, about, sender, attempts, why) {
|
|
129
|
+
return {
|
|
130
|
+
status: 'failed',
|
|
131
|
+
error: why.error,
|
|
132
|
+
failure: why.failure,
|
|
133
|
+
event: {
|
|
134
|
+
type,
|
|
135
|
+
entity: entityOf(request, about),
|
|
136
|
+
payload: {
|
|
137
|
+
request: request.id,
|
|
138
|
+
about,
|
|
139
|
+
sender,
|
|
140
|
+
messageId: null,
|
|
141
|
+
attempts,
|
|
142
|
+
code: why.failure.code,
|
|
143
|
+
status: why.status ?? null,
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
const entityOf = (request, about) => about ?? { entityType: PLATFORM_REQUEST_ENTITY_TYPE, entityId: request.id };
|
|
149
|
+
function retryAtOf(request) {
|
|
150
|
+
const at = request.result?.retryAt;
|
|
151
|
+
if (typeof at !== 'string')
|
|
152
|
+
return null;
|
|
153
|
+
const ms = Date.parse(at);
|
|
154
|
+
return Number.isFinite(ms) ? ms : null;
|
|
155
|
+
}
|
|
156
|
+
/** The error a wrapper kept as `cause`, followed to the bottom: the provider's own, if any. */
|
|
157
|
+
function innermost(e) {
|
|
158
|
+
let current = e;
|
|
159
|
+
for (let depth = 0; depth < 5; depth++) {
|
|
160
|
+
const cause = current?.cause;
|
|
161
|
+
if (cause === undefined || cause === null)
|
|
162
|
+
return current;
|
|
163
|
+
current = cause;
|
|
164
|
+
}
|
|
165
|
+
return current;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* The status that decides a retry: the provider's, when a wrapper kept it as `cause`, else the
|
|
169
|
+
* wrapper's own. A tenant send that failed in the provider surfaces as a 502 around the
|
|
170
|
+
* provider's answer — the 502 says "the provider failed", the cause says whether it will again.
|
|
171
|
+
*/
|
|
172
|
+
export function sendFailureStatus(e) {
|
|
173
|
+
return providerErrorStatus(innermost(e)) ?? providerErrorStatus(e);
|
|
174
|
+
}
|
|
175
|
+
/** `retryAfter` (seconds) wherever along the cause chain a sender put it; 0 when nobody did. */
|
|
176
|
+
export function retryAfterSecondsOf(e) {
|
|
177
|
+
let current = e;
|
|
178
|
+
for (let depth = 0; depth < 6 && current !== null && typeof current === 'object'; depth++) {
|
|
179
|
+
const value = current.retryAfter;
|
|
180
|
+
if (typeof value === 'number' && Number.isFinite(value) && value > 0)
|
|
181
|
+
return value;
|
|
182
|
+
current = current.cause;
|
|
183
|
+
}
|
|
184
|
+
return 0;
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=email-intent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-intent.js","sourceRoot":"","sources":["../src/email-intent.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,23 +2,26 @@ export { createControlPlaneApi, tenantCredentialPin, CLI_MIN_VERSION_HEADER, CLI
|
|
|
2
2
|
export type { ControlPlaneApiOptions, ConnectionInspector } from './api.js';
|
|
3
3
|
export { DEV_ACTOR_HEADER, SERVICE_TOKEN_HEADER, TENANT_HEADER, UNSAFE_devPlatformActorAuth, sessionPlatformAuth, staffAllowlist, serviceTokenAuth, firstPlatformActorAuth, firstBuilderAuth, confinedTenant, } from './auth.js';
|
|
4
4
|
export { relayConnectionUpsert, ConnectionRelayError, PREVIEW_CONNECTIONS_REFUSAL } from './connection-relay.js';
|
|
5
|
+
export type { ConnectionCandidatePrepare, ConnectionCandidatePreparer } from './connection-relay.js';
|
|
5
6
|
export { relayConnectUrl, ConnectUrlRelayError } from './connect-url.js';
|
|
6
7
|
export type { ConnectFlowSpec, ConnectUrlRelayOptions } from './connect-url.js';
|
|
8
|
+
export { relayConnectLinkMint, relayConnectLinkList, relayConnectLinkRevoke, connectLinkViewOf } from './connect-links.js';
|
|
7
9
|
export { reconcileConnectionGrants, type ConnectionGrantReconcileDeps, type ConnectionGrantReconcileReport, } from './connection-grants.js';
|
|
8
10
|
export { mintPushToken, verifyPushToken, pushTokenBuilderAuth, pushActorFor } from './push-token.js';
|
|
9
11
|
export { mintTenantToken, verifyTenantToken, tenantTokenAuth } from './tenant-token.js';
|
|
10
12
|
export type { PlatformActorAuth, StaffIdentity, StaffSessionReader, StaffActorResolver, BuilderIdentity, BuilderAuth, TenantServiceIdentity, TenantServiceAuth, Principal, } from './auth.js';
|
|
11
13
|
export * from './browser.js';
|
|
12
|
-
export { VerticalClient } from './vertical-client.js';
|
|
14
|
+
export { VerticalClient, AUDITED_CALL_DEADLINE_MS } from './vertical-client.js';
|
|
13
15
|
export { versionReachedAt } from './scope-deployment.js';
|
|
14
16
|
export { hostedCrossVerticalReach } from './cross-vertical.js';
|
|
15
17
|
export { retireAllPreviewClients, retireClientsOfReapedScope, tenantIssuers, wirePreviewAuth } from './preview-auth.js';
|
|
16
18
|
export type { PreviewAuthDeps, WirePreviewAuthInput } from './preview-auth.js';
|
|
17
19
|
export type { ScopeDeployment, ScopeDeploymentVia } from './scope-deployment.js';
|
|
18
20
|
export { drainScopePlatformRequests, MAX_PLATFORM_REQUEST_ATTEMPTS, provisionSiblingScope, provisionSiblingHandler, archiveScopeHandler, peerInvokeHandler, provisionTenantHandler, setEntitlementsHandler, modelUsageHandler, sweepRunsHandler, connectorDispatchHandler, type ConnectorDispatchDeps, type ManagedTenantDeps, type PlatformDrainOptions, type ArchiveScopeDeps, type PlatformRequestHandler, type PlatformDrainContext, type PlatformRequestContext, type PlatformRequestOutcome, type PlatformDrainReport, type PeerInvokeDeps, type ProvisionSiblingDeps, type ProvisionSiblingInput, type ProvisionSiblingResult, } from './platform-drain.js';
|
|
19
|
-
export { reconcilePayloadFor, reconcileThenReassert, switchCarryFor, type SwitchCarry } from './reconcile.js';
|
|
21
|
+
export { reconcilePayloadFor, reconcileThenReassert, reviewedEntityGrants, switchCarryFor, type SwitchCarry } from './reconcile.js';
|
|
20
22
|
export type { ReconcilePayload, ReconcileGatherAdmin } from './reconcile.js';
|
|
21
23
|
export { attributeFailure, terminalFailureNote } from './failure-attribution.js';
|
|
24
|
+
export { sendEmailHandler, sendFailureStatus, retryAfterSecondsOf, MAX_EMAIL_SEND_ATTEMPTS, EMAIL_RETRY_BASE_MS, EMAIL_RETRY_MAX_MS, type EmailSent, type SendEmailDeps, } from './email-intent.js';
|
|
22
25
|
export { isTerminalDispatchFailure, isTerminalProviderError, providerErrorStatus, RETRYABLE_CLIENT_STATUSES, } from './provider-error.js';
|
|
23
26
|
export type { VerticalClientOptions, ProvisionInstanceInput, ProvisionedInstance, ConfigureInstanceInput, } from './vertical-client.js';
|
|
24
27
|
export { assertSandboxContract, deployManifest, deploymentRefFor, stableDeploymentRefFor, nextMigrationTag, DeployUploadError, upstreamStatusOf, } from './deploy.js';
|
|
@@ -27,6 +30,8 @@ export { createWfpUploader, createWfpModulesFetcher, createWfpBindingsPatcher }
|
|
|
27
30
|
export { withPlatformEntry, platformEntrySkipReason, platformSweeperDecision, PLATFORM_ENTRY_MODULE, PLATFORM_SWEEPER_MODULE, } from './platform-entry.js';
|
|
28
31
|
export type { WfpUploaderOptions, PatchScriptBindingsFn, ScriptBindingSpec, D1BindingSpec, R2BindingSpec, } from './wfp.js';
|
|
29
32
|
export { blobStoreBindings, collectBlobStoreHandles, collectTenantStoreHandles, tenantStoreBindings, } from './tenant-stores.js';
|
|
33
|
+
export { auditedChange, settleUnrecordedOutcomes, supersededUnknowns, withAuditedOutcomes, OUTCOME_CONFLICT_LOG, MALFORMED_OPERATION_ID_LOG, SETTLE_GRACE_MS, UNRECORDED_OUTCOME_LOG, } from './audited-change.js';
|
|
34
|
+
export type { AuditedChange, AuditedChangeSpec, AuditedRow, SettleAdmin, SettleOptions, SettleResult } from './audited-change.js';
|
|
30
35
|
export { createCustomHostnameProvisioner, mapCfStatus, extractRecords, reconcilePendingHostnames, isCustomHostname, validateBindableHostname, } from './custom-hostnames.js';
|
|
31
36
|
export type { CustomHostnameProvisioner, CustomHostnameProvisionerOptions, CustomHostnameIssuance, ReconcileHostnamesResult, } from './custom-hostnames.js';
|
|
32
37
|
export type { ObservabilityReader, ServiceMetricsRow, RecentLogEvent, TenantMetricsBucket, ConnectorCallsBucket, RequestFacetKey, RequestWhere, TenantRequestScope, RequestLevelCounts, RequestVolume, RequestVolumeBucket, RequestFacets, RequestFacetValue, RequestRecord, InvocationKind, LogPattern, LogPatterns, LogPatternLevel, } from './observability.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC5E,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,2BAA2B,EAC3B,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACjH,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACzE,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EACL,yBAAyB,EACzB,KAAK,4BAA4B,EACjC,KAAK,8BAA8B,GACpC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACxF,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,iBAAiB,EACjB,SAAS,GACV,MAAM,WAAW,CAAC;AAGnB,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2,13 +2,14 @@ export { createControlPlaneApi, tenantCredentialPin, CLI_MIN_VERSION_HEADER, CLI
|
|
|
2
2
|
export { DEV_ACTOR_HEADER, SERVICE_TOKEN_HEADER, TENANT_HEADER, UNSAFE_devPlatformActorAuth, sessionPlatformAuth, staffAllowlist, serviceTokenAuth, firstPlatformActorAuth, firstBuilderAuth, confinedTenant, } from './auth.js';
|
|
3
3
|
export { relayConnectionUpsert, ConnectionRelayError, PREVIEW_CONNECTIONS_REFUSAL } from './connection-relay.js';
|
|
4
4
|
export { relayConnectUrl, ConnectUrlRelayError } from './connect-url.js';
|
|
5
|
+
export { relayConnectLinkMint, relayConnectLinkList, relayConnectLinkRevoke, connectLinkViewOf } from './connect-links.js';
|
|
5
6
|
export { reconcileConnectionGrants, } from './connection-grants.js';
|
|
6
7
|
export { mintPushToken, verifyPushToken, pushTokenBuilderAuth, pushActorFor } from './push-token.js';
|
|
7
8
|
export { mintTenantToken, verifyTenantToken, tenantTokenAuth } from './tenant-token.js';
|
|
8
9
|
// The console's staff surface (#971). Browser-safe, so it is ALSO a subpath of its own
|
|
9
10
|
// (`./browser`): a bundler resolving the root entry would pull the whole server.
|
|
10
11
|
export * from './browser.js';
|
|
11
|
-
export { VerticalClient } from './vertical-client.js';
|
|
12
|
+
export { VerticalClient, AUDITED_CALL_DEADLINE_MS } from './vertical-client.js';
|
|
12
13
|
export { versionReachedAt } from './scope-deployment.js';
|
|
13
14
|
// #1705 PR 2: the cross-vertical phase's reach for a control plane whose scopes live elsewhere.
|
|
14
15
|
export { hostedCrossVerticalReach } from './cross-vertical.js';
|
|
@@ -16,14 +17,16 @@ export { hostedCrossVerticalReach } from './cross-vertical.js';
|
|
|
16
17
|
// platform sweep also runs when it garbage-collects an expired preview.
|
|
17
18
|
export { retireAllPreviewClients, retireClientsOfReapedScope, tenantIssuers, wirePreviewAuth } from './preview-auth.js';
|
|
18
19
|
export { drainScopePlatformRequests, MAX_PLATFORM_REQUEST_ATTEMPTS, provisionSiblingScope, provisionSiblingHandler, archiveScopeHandler, peerInvokeHandler, provisionTenantHandler, setEntitlementsHandler, modelUsageHandler, sweepRunsHandler, connectorDispatchHandler, } from './platform-drain.js';
|
|
19
|
-
export { reconcilePayloadFor, reconcileThenReassert, switchCarryFor } from './reconcile.js';
|
|
20
|
+
export { reconcilePayloadFor, reconcileThenReassert, reviewedEntityGrants, switchCarryFor } from './reconcile.js';
|
|
20
21
|
export { attributeFailure, terminalFailureNote } from './failure-attribution.js';
|
|
22
|
+
export { sendEmailHandler, sendFailureStatus, retryAfterSecondsOf, MAX_EMAIL_SEND_ATTEMPTS, EMAIL_RETRY_BASE_MS, EMAIL_RETRY_MAX_MS, } from './email-intent.js';
|
|
21
23
|
// #1978: moving here from the kernel — the drain is its only reader.
|
|
22
24
|
export { isTerminalDispatchFailure, isTerminalProviderError, providerErrorStatus, RETRYABLE_CLIENT_STATUSES, } from './provider-error.js';
|
|
23
25
|
export { assertSandboxContract, deployManifest, deploymentRefFor, stableDeploymentRefFor, nextMigrationTag, DeployUploadError, upstreamStatusOf, } from './deploy.js';
|
|
24
26
|
export { createWfpUploader, createWfpModulesFetcher, createWfpBindingsPatcher } from './wfp.js';
|
|
25
27
|
export { withPlatformEntry, platformEntrySkipReason, platformSweeperDecision, PLATFORM_ENTRY_MODULE, PLATFORM_SWEEPER_MODULE, } from './platform-entry.js';
|
|
26
28
|
export { blobStoreBindings, collectBlobStoreHandles, collectTenantStoreHandles, tenantStoreBindings, } from './tenant-stores.js';
|
|
29
|
+
export { auditedChange, settleUnrecordedOutcomes, supersededUnknowns, withAuditedOutcomes, OUTCOME_CONFLICT_LOG, MALFORMED_OPERATION_ID_LOG, SETTLE_GRACE_MS, UNRECORDED_OUTCOME_LOG, } from './audited-change.js';
|
|
27
30
|
export { createCustomHostnameProvisioner, mapCfStatus, extractRecords, reconcilePendingHostnames, isCustomHostname, validateBindableHostname, } from './custom-hostnames.js';
|
|
28
31
|
export { TENANT_SERIES_SCOPE_CAP, TENANT_METRICS_LIMIT, REQUEST_FACET_KEYS, REQUEST_FACET_TOP, LOG_PATTERN_TOP, INVOCATION_KINDS, invocationKindOf, } from './observability.js';
|
|
29
32
|
export { STORAGE_PAGE_DEFAULT, STORAGE_PAGE_MAX, STORAGE_READ_CONCURRENCY, readStoragePage, } from './storage-meter.js';
|
|
@@ -52,7 +55,7 @@ export { backupDirectoryIfDue } from './directory-backup.js';
|
|
|
52
55
|
// about it is one this package cannot assert on its own: that a pseudonymized dump still
|
|
53
56
|
// re-imports and still parses when a VERTICAL reads it back. That round trip needs the
|
|
54
57
|
// generator, an adapter and a vertical in one process, and the only place all three meet
|
|
55
|
-
// is a vertical's own suite — `demos/
|
|
58
|
+
// is a vertical's own suite — `demos/meridian/test/masked-round-trip.test.ts`.
|
|
56
59
|
export { maskDump, maskRecords, MASKED } from './mask.js';
|
|
57
60
|
export { createPseudonymizer, kindOf, kindUnder } from './pseudonymize.js';
|
|
58
61
|
export { resolveObservabilityWindow, observabilityBucketMinutes } from './observability-window.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,2BAA2B,EAC3B,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/platform-drain.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ConnectorHandler, type OpsFailureInput, type ScopeHost } from '@substrat-run/kernel';
|
|
2
|
-
import { type PlatformActorId, type PlatformRequest, type PlatformRequestFailure, type Scope, type ScopeId, type ScopeLifecycle, type TenantId } from '@substrat-run/contracts';
|
|
2
|
+
import { type PlatformActorId, type PlatformRequest, type PlatformRequestFailure, type PlatformOutcomeEvent, type Scope, type ScopeId, type ScopeLifecycle, type TenantId } from '@substrat-run/contracts';
|
|
3
3
|
import { type VerticalClient } from './vertical-client.js';
|
|
4
4
|
import type { PatchScriptBindingsFn } from './wfp.js';
|
|
5
5
|
/**
|
|
@@ -42,9 +42,19 @@ export interface PlatformDrainContext extends PlatformRequestContext {
|
|
|
42
42
|
}
|
|
43
43
|
/** What a handler reports for one intent; `result` is persisted (COALESCE'd) for two-phase idempotency. */
|
|
44
44
|
export interface PlatformRequestOutcome {
|
|
45
|
-
|
|
45
|
+
/**
|
|
46
|
+
* `deferred` (#2102): the handler did not try this pass — the intent is waiting out a
|
|
47
|
+
* provider's `Retry-After`, or a throttle another intent of the same pass met. Nothing is
|
|
48
|
+
* settled, so no attempt is counted: an attempt is something the provider saw.
|
|
49
|
+
*/
|
|
50
|
+
status: 'done' | 'failed' | 'pending' | 'deferred';
|
|
46
51
|
result?: unknown;
|
|
47
52
|
error?: string;
|
|
53
|
+
/**
|
|
54
|
+
* #2102: the event the settle writes into the scope, saying what became of the intent. Only
|
|
55
|
+
* on a terminal outcome — the scope refuses one on `pending`.
|
|
56
|
+
*/
|
|
57
|
+
event?: PlatformOutcomeEvent;
|
|
48
58
|
/**
|
|
49
59
|
* WHO refused (#841) — journaled beside `error` so a reader never has to infer it from the
|
|
50
60
|
* message. A handler that does not attribute leaves this undefined and the column stays
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-drain.d.ts","sourceRoot":"","sources":["../src/platform-drain.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,SAAS,EACf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAgBL,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,QAAQ,EAEd,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAA4B,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEtD;;;;;;;GAOG;AAEH,uGAAuG;AACvG,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAqB,SAAQ,sBAAsB;IAClE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC;IAC1C;;;;;;OAMG;IACH,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,GAAG,QAAQ,CAAC,CAAC;CACrD;AAaD,2GAA2G;AAC3G,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"platform-drain.d.ts","sourceRoot":"","sources":["../src/platform-drain.ts"],"names":[],"mappings":"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"}
|