velocious 1.0.596 → 1.0.597
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/build/background-jobs/pooled-runner-broker-identity.js +22 -4
- package/build/background-jobs/store.js +383 -9
- package/build/background-jobs/types.js +1 -0
- package/build/cli/commands/db/tenants/migrations/pending.js +45 -0
- package/build/configuration-types.js +3 -0
- package/build/configuration.js +5 -2
- package/build/database/drivers/sqlite/base.js +3 -3
- package/build/database/tenants/migration-pending-inspector.js +77 -0
- package/build/environment-handlers/base.js +8 -0
- package/build/environment-handlers/node.js +14 -0
- package/build/mailer/backends/resend-smtp.js +121 -0
- package/build/mailer/base.js +52 -22
- package/build/mailer/delivery-operation-store.js +152 -0
- package/build/mailer/delivery-operation.js +205 -0
- package/build/mailer/delivery.js +9 -4
- package/build/mailer/index.js +5 -1
- package/build/mailer.js +6 -1
- package/build/src/background-jobs/pooled-runner-broker-identity.d.ts +10 -1
- package/build/src/background-jobs/pooled-runner-broker-identity.d.ts.map +1 -1
- package/build/src/background-jobs/pooled-runner-broker-identity.js +23 -5
- package/build/src/background-jobs/store.d.ts +154 -0
- package/build/src/background-jobs/store.d.ts.map +1 -1
- package/build/src/background-jobs/store.js +350 -10
- package/build/src/background-jobs/types.d.ts +5 -0
- package/build/src/background-jobs/types.d.ts.map +1 -1
- package/build/src/background-jobs/types.js +2 -1
- package/build/src/cli/commands/db/tenants/migrations/pending.d.ts +15 -0
- package/build/src/cli/commands/db/tenants/migrations/pending.d.ts.map +1 -0
- package/build/src/cli/commands/db/tenants/migrations/pending.js +40 -0
- package/build/src/configuration-types.d.ts +20 -0
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +4 -1
- package/build/src/configuration.d.ts +2 -2
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +6 -3
- package/build/src/database/drivers/sqlite/base.js +4 -4
- package/build/src/database/tenants/migration-pending-inspector.d.ts +38 -0
- package/build/src/database/tenants/migration-pending-inspector.d.ts.map +1 -0
- package/build/src/database/tenants/migration-pending-inspector.js +70 -0
- package/build/src/environment-handlers/base.d.ts +10 -0
- package/build/src/environment-handlers/base.d.ts.map +1 -1
- package/build/src/environment-handlers/base.js +8 -1
- package/build/src/environment-handlers/node.d.ts +11 -0
- package/build/src/environment-handlers/node.d.ts.map +1 -1
- package/build/src/environment-handlers/node.js +14 -1
- package/build/src/mailer/backends/resend-smtp.d.ts +43 -0
- package/build/src/mailer/backends/resend-smtp.d.ts.map +1 -0
- package/build/src/mailer/backends/resend-smtp.js +106 -0
- package/build/src/mailer/base.d.ts +9 -2
- package/build/src/mailer/base.d.ts.map +1 -1
- package/build/src/mailer/base.js +41 -19
- package/build/src/mailer/delivery-operation-store.d.ts +52 -0
- package/build/src/mailer/delivery-operation-store.d.ts.map +1 -0
- package/build/src/mailer/delivery-operation-store.js +130 -0
- package/build/src/mailer/delivery-operation.d.ts +73 -0
- package/build/src/mailer/delivery-operation.d.ts.map +1 -0
- package/build/src/mailer/delivery-operation.js +185 -0
- package/build/src/mailer/delivery.d.ts +4 -2
- package/build/src/mailer/delivery.d.ts.map +1 -1
- package/build/src/mailer/delivery.js +9 -5
- package/build/src/mailer/index.d.ts +24 -1
- package/build/src/mailer/index.d.ts.map +1 -1
- package/build/src/mailer/index.js +6 -2
- package/build/src/mailer.d.ts +11 -13
- package/build/src/mailer.d.ts.map +1 -1
- package/build/src/mailer.js +7 -2
- package/build/src/sync/local-mutation-log.d.ts +5 -5
- package/build/src/sync/local-mutation-log.d.ts.map +1 -1
- package/build/src/sync/local-mutation-log.js +34 -10
- package/build/src/sync/stable-json.d.ts +1 -8
- package/build/src/sync/stable-json.d.ts.map +1 -1
- package/build/src/sync/stable-json.js +2 -27
- package/build/src/sync/sync-envelope-replay-service.d.ts +3 -2
- package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
- package/build/src/sync/sync-envelope-replay-service.js +12 -8
- package/build/src/utils/stable-json.d.ts +7 -0
- package/build/src/utils/stable-json.d.ts.map +1 -0
- package/build/src/utils/stable-json.js +25 -0
- package/build/sync/local-mutation-log.js +37 -6
- package/build/sync/stable-json.js +1 -28
- package/build/sync/sync-envelope-replay-service.js +11 -7
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/utils/stable-json.js +26 -0
- package/package.json +1 -1
- package/src/background-jobs/pooled-runner-broker-identity.js +22 -4
- package/src/background-jobs/store.js +383 -9
- package/src/background-jobs/types.js +1 -0
- package/src/cli/commands/db/tenants/migrations/pending.js +45 -0
- package/src/configuration-types.js +3 -0
- package/src/configuration.js +5 -2
- package/src/database/drivers/sqlite/base.js +3 -3
- package/src/database/tenants/migration-pending-inspector.js +77 -0
- package/src/environment-handlers/base.js +8 -0
- package/src/environment-handlers/node.js +14 -0
- package/src/mailer/backends/resend-smtp.js +121 -0
- package/src/mailer/base.js +52 -22
- package/src/mailer/delivery-operation-store.js +152 -0
- package/src/mailer/delivery-operation.js +205 -0
- package/src/mailer/delivery.js +9 -4
- package/src/mailer/index.js +5 -1
- package/src/mailer.js +6 -1
- package/src/sync/local-mutation-log.js +37 -6
- package/src/sync/stable-json.js +1 -28
- package/src/sync/sync-envelope-replay-service.js +11 -7
- package/src/utils/stable-json.js +26 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export declare const MAIL_DELIVERY_JOB_NAME = "MailDeliveryJob";
|
|
2
|
+
export declare const MAIL_DELIVERY_OPERATIONS_TABLE = "mailer_delivery_operations";
|
|
3
|
+
/**
|
|
4
|
+
* Reads and validates a backend's provider idempotency capability.
|
|
5
|
+
* @param {object} args - Capability input.
|
|
6
|
+
* @param {import("../configuration-types.js").MailerBackend | undefined} args.backend - Configured backend.
|
|
7
|
+
* @param {import("./index.js").MailerDeliveryOperationRequest | import("./index.js").MailerDeliveryOperation} args.deliveryOperation - Required operation.
|
|
8
|
+
* @param {import("./index.js").MailerDeliveryPayload} args.payload - Rendered or persisted payload.
|
|
9
|
+
* @returns {import("./index.js").MailerDeliveryIdempotencyCapability} - Capability.
|
|
10
|
+
*/
|
|
11
|
+
export declare function requireDeliveryIdempotencyCapability({ backend, deliveryOperation, payload }: {
|
|
12
|
+
backend: import("../configuration-types.js").MailerBackend | undefined;
|
|
13
|
+
deliveryOperation: import("./index.js").MailerDeliveryOperationRequest | import("./index.js").MailerDeliveryOperation;
|
|
14
|
+
payload: import("./index.js").MailerDeliveryPayload;
|
|
15
|
+
}): import("./index.js").MailerDeliveryIdempotencyCapability;
|
|
16
|
+
/**
|
|
17
|
+
* Normalizes one public required operation into immutable payload metadata.
|
|
18
|
+
* @param {object} args - Preparation input.
|
|
19
|
+
* @param {import("./index.js").MailerDeliveryIdempotencyCapability} args.capability - Backend capability.
|
|
20
|
+
* @param {import("./index.js").MailerDeliveryOperationRequest} args.deliveryOperation - Public operation request.
|
|
21
|
+
* @param {import("./index.js").MailerDeliveryPayload} args.payload - Rendered payload.
|
|
22
|
+
* @returns {import("./index.js").MailerDeliveryPayload} - Payload with immutable operation metadata.
|
|
23
|
+
*/
|
|
24
|
+
export declare function prepareRequiredDeliveryPayload({ capability, deliveryOperation, payload }: {
|
|
25
|
+
capability: import("./index.js").MailerDeliveryIdempotencyCapability;
|
|
26
|
+
deliveryOperation: import("./index.js").MailerDeliveryOperationRequest;
|
|
27
|
+
payload: import("./index.js").MailerDeliveryPayload;
|
|
28
|
+
}): import("./index.js").MailerDeliveryPayload;
|
|
29
|
+
/**
|
|
30
|
+
* Builds the versioned digest for every recipient-visible/provider-relevant payload field.
|
|
31
|
+
* @param {object} args - Digest input.
|
|
32
|
+
* @param {string} args.operationId - Stable operation id.
|
|
33
|
+
* @param {import("./index.js").MailerDeliveryPayload} args.payload - Rendered payload.
|
|
34
|
+
* @returns {string} - Versioned SHA-256 digest.
|
|
35
|
+
*/
|
|
36
|
+
export declare function mailDeliveryPayloadDigest({ operationId, payload }: {
|
|
37
|
+
operationId: string;
|
|
38
|
+
payload: import("./index.js").MailerDeliveryPayload;
|
|
39
|
+
}): string;
|
|
40
|
+
/**
|
|
41
|
+
* Extracts validated persisted operation metadata from a payload.
|
|
42
|
+
* @param {import("./index.js").MailerDeliveryPayload} payload - Mail payload.
|
|
43
|
+
* @returns {import("./index.js").MailerDeliveryOperation | null} - Operation or null.
|
|
44
|
+
*/
|
|
45
|
+
export declare function deliveryOperationFromPayload(payload: import("./index.js").MailerDeliveryPayload): import("./index.js").MailerDeliveryOperation | null;
|
|
46
|
+
/**
|
|
47
|
+
* Extracts a built-in mail operation from generic job arguments.
|
|
48
|
+
* @param {string} jobName - Job class name.
|
|
49
|
+
* @param {Array<ReturnType<typeof JSON.parse>>} args - Job arguments.
|
|
50
|
+
* @returns {{operation: import("./index.js").MailerDeliveryOperation, payload: import("./index.js").MailerDeliveryPayload} | null} - Mail operation input.
|
|
51
|
+
*/
|
|
52
|
+
export declare function mailDeliveryOperationForJob(jobName: string, args: Array<ReturnType<typeof JSON.parse>>): {
|
|
53
|
+
operation: import("./index.js").MailerDeliveryOperation;
|
|
54
|
+
payload: import("./index.js").MailerDeliveryPayload;
|
|
55
|
+
} | null;
|
|
56
|
+
/**
|
|
57
|
+
* Fixed-size primary key for a potentially long operation id.
|
|
58
|
+
* @param {string} operationId - Operation id.
|
|
59
|
+
* @returns {string} - SHA-256 operation key.
|
|
60
|
+
*/
|
|
61
|
+
export declare function mailDeliveryOperationKey(operationId: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Validates provider compatibility and payload integrity before an attempt.
|
|
64
|
+
* @param {object} args - Validation input.
|
|
65
|
+
* @param {import("./index.js").MailerDeliveryIdempotencyCapability} args.capability - Current backend capability.
|
|
66
|
+
* @param {import("./index.js").MailerDeliveryPayload} args.payload - Persisted payload.
|
|
67
|
+
* @returns {import("./index.js").MailerDeliveryOperation} - Persisted operation.
|
|
68
|
+
*/
|
|
69
|
+
export declare function validateAttemptPayload({ capability, payload }: {
|
|
70
|
+
capability: import("./index.js").MailerDeliveryIdempotencyCapability;
|
|
71
|
+
payload: import("./index.js").MailerDeliveryPayload;
|
|
72
|
+
}): import("./index.js").MailerDeliveryOperation;
|
|
73
|
+
//# sourceMappingURL=delivery-operation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery-operation.d.ts","sourceRoot":"","sources":["../../../src/mailer/delivery-operation.js"],"names":[],"mappings":"AAMA,eAAO,MAAM,sBAAsB,oBAAoB,CAAA;AACvD,eAAO,MAAM,8BAA8B,+BAA+B,CAAA;AAG1E;;;;;;;GAOG;AACH,wBAAgB,oCAAoC,CAAC,EAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAC,EALvF;IAA4E,OAAO,EAA3E,OAAO,2BAA2B,EAAE,aAAa,GAAG,SAAS,CACrE;IAAiH,iBAAiB,EAA1H,OAAO,YAAY,EAAE,8BAA8B,GAAG,OAAO,YAAY,EAAE,uBAAuB,CAC1G;IAAyD,OAAO,EAAxD,OAAO,YAAY,EAAE,qBAAqB,CAClD;CAEuF,GAF7E,OAAO,YAAY,EAAE,mCAAmC,CAuBpE;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAAC,EAAC,UAAU,EAAE,iBAAiB,EAAE,OAAO,EAAC,EALpF;IAAuE,UAAU,EAAzE,OAAO,YAAY,EAAE,mCAAmC,CAChE;IAAkE,iBAAiB,EAA3E,OAAO,YAAY,EAAE,8BAA8B,CAC3D;IAAyD,OAAO,EAAxD,OAAO,YAAY,EAAE,qBAAqB,CAClD;CAEoF,GAF1E,OAAO,YAAY,EAAE,qBAAqB,CAgBtD;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,EAAC,WAAW,EAAE,OAAO,EAAC,EAJ7D;IAAqB,WAAW,EAAxB,MAAM,CACd;IAAyD,OAAO,EAAxD,OAAO,YAAY,EAAE,qBAAqB,CAClD;CAE6D,GAFnD,MAAM,CAoBlB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAHzC,OAAO,YAAY,EAAE,qBAGoB,GAFvC,OAAO,YAAY,EAAE,uBAAuB,GAAG,IAAI,CAa/D;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAJxC,MAIwC,EAAE,IAAI,EAH9C,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAGW,GAF5C;IAAC,SAAS,EAAE,OAAO,YAAY,EAAE,uBAAuB,CAAC;IAAC,OAAO,EAAE,OAAO,YAAY,EAAE,qBAAqB,CAAA;CAAC,GAAG,IAAI,CASjI;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAHzC,MAGyC,GAFvC,MAAM,CAIlB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,EAAC,UAAU,EAAE,OAAO,EAAC,EAJzD;IAAuE,UAAU,EAAzE,OAAO,YAAY,EAAE,mCAAmC,CAChE;IAAyD,OAAO,EAAxD,OAAO,YAAY,EAAE,qBAAqB,CAClD;CAEyD,GAF/C,OAAO,YAAY,EAAE,uBAAuB,CAqBxD"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import { createHash } from "crypto";
|
|
3
|
+
import VelociousError from "../velocious-error.js";
|
|
4
|
+
import stableJsonStringify from "../utils/stable-json.js";
|
|
5
|
+
export const MAIL_DELIVERY_JOB_NAME = "MailDeliveryJob";
|
|
6
|
+
export const MAIL_DELIVERY_OPERATIONS_TABLE = "mailer_delivery_operations";
|
|
7
|
+
const PAYLOAD_DIGEST_FORMAT = "velocious-mail-delivery-payload-v1";
|
|
8
|
+
/**
|
|
9
|
+
* Reads and validates a backend's provider idempotency capability.
|
|
10
|
+
* @param {object} args - Capability input.
|
|
11
|
+
* @param {import("../configuration-types.js").MailerBackend | undefined} args.backend - Configured backend.
|
|
12
|
+
* @param {import("./index.js").MailerDeliveryOperationRequest | import("./index.js").MailerDeliveryOperation} args.deliveryOperation - Required operation.
|
|
13
|
+
* @param {import("./index.js").MailerDeliveryPayload} args.payload - Rendered or persisted payload.
|
|
14
|
+
* @returns {import("./index.js").MailerDeliveryIdempotencyCapability} - Capability.
|
|
15
|
+
*/
|
|
16
|
+
export function requireDeliveryIdempotencyCapability({ backend, deliveryOperation, payload }) {
|
|
17
|
+
if (!backend || typeof backend.deliveryIdempotencyCapability !== "function") {
|
|
18
|
+
throw VelociousError.safe("The configured mailer backend does not support required provider idempotency.", {
|
|
19
|
+
code: "mail-delivery-idempotency-unsupported"
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
const capability = backend.deliveryIdempotencyCapability();
|
|
23
|
+
if (!capability || typeof capability.providerKind !== "string" || capability.providerKind.length === 0) {
|
|
24
|
+
throw new Error("Mailer backend delivery idempotency capability requires a non-empty providerKind");
|
|
25
|
+
}
|
|
26
|
+
if (!Number.isSafeInteger(capability.retentionMs) || capability.retentionMs <= 0) {
|
|
27
|
+
throw new Error("Mailer backend delivery idempotency capability requires a positive safe-integer retentionMs");
|
|
28
|
+
}
|
|
29
|
+
if (typeof backend.validateDeliveryOperation === "function") {
|
|
30
|
+
backend.validateDeliveryOperation({ deliveryOperation, payload });
|
|
31
|
+
}
|
|
32
|
+
return capability;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Normalizes one public required operation into immutable payload metadata.
|
|
36
|
+
* @param {object} args - Preparation input.
|
|
37
|
+
* @param {import("./index.js").MailerDeliveryIdempotencyCapability} args.capability - Backend capability.
|
|
38
|
+
* @param {import("./index.js").MailerDeliveryOperationRequest} args.deliveryOperation - Public operation request.
|
|
39
|
+
* @param {import("./index.js").MailerDeliveryPayload} args.payload - Rendered payload.
|
|
40
|
+
* @returns {import("./index.js").MailerDeliveryPayload} - Payload with immutable operation metadata.
|
|
41
|
+
*/
|
|
42
|
+
export function prepareRequiredDeliveryPayload({ capability, deliveryOperation, payload }) {
|
|
43
|
+
validateDeliveryOperationRequest(deliveryOperation);
|
|
44
|
+
const payloadDigest = mailDeliveryPayloadDigest({ operationId: deliveryOperation.id, payload });
|
|
45
|
+
return {
|
|
46
|
+
...payload,
|
|
47
|
+
deliveryOperation: {
|
|
48
|
+
id: deliveryOperation.id,
|
|
49
|
+
idempotency: "required",
|
|
50
|
+
payloadDigest,
|
|
51
|
+
providerKind: capability.providerKind,
|
|
52
|
+
providerRetentionMs: capability.retentionMs
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Builds the versioned digest for every recipient-visible/provider-relevant payload field.
|
|
58
|
+
* @param {object} args - Digest input.
|
|
59
|
+
* @param {string} args.operationId - Stable operation id.
|
|
60
|
+
* @param {import("./index.js").MailerDeliveryPayload} args.payload - Rendered payload.
|
|
61
|
+
* @returns {string} - Versioned SHA-256 digest.
|
|
62
|
+
*/
|
|
63
|
+
export function mailDeliveryPayloadDigest({ operationId, payload }) {
|
|
64
|
+
const canonicalPayload = {
|
|
65
|
+
action: payload.action,
|
|
66
|
+
bcc: payload.bcc ?? null,
|
|
67
|
+
cc: payload.cc ?? null,
|
|
68
|
+
format: PAYLOAD_DIGEST_FORMAT,
|
|
69
|
+
from: payload.from ?? null,
|
|
70
|
+
headers: canonicalHeaders(payload.headers),
|
|
71
|
+
html: payload.html,
|
|
72
|
+
mailer: payload.mailer,
|
|
73
|
+
operationId,
|
|
74
|
+
replyTo: payload.replyTo ?? null,
|
|
75
|
+
subject: payload.subject,
|
|
76
|
+
to: payload.to
|
|
77
|
+
};
|
|
78
|
+
const digest = createHash("sha256").update(stableJsonStringify(canonicalPayload)).digest("hex");
|
|
79
|
+
return `sha256:v1:${digest}`;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Extracts validated persisted operation metadata from a payload.
|
|
83
|
+
* @param {import("./index.js").MailerDeliveryPayload} payload - Mail payload.
|
|
84
|
+
* @returns {import("./index.js").MailerDeliveryOperation | null} - Operation or null.
|
|
85
|
+
*/
|
|
86
|
+
export function deliveryOperationFromPayload(payload) {
|
|
87
|
+
const operation = payload.deliveryOperation;
|
|
88
|
+
if (!operation)
|
|
89
|
+
return null;
|
|
90
|
+
if (operation.idempotency !== "required")
|
|
91
|
+
throw new Error("Persisted mail delivery operation idempotency must be required");
|
|
92
|
+
if (typeof operation.id !== "string" || operation.id.length === 0)
|
|
93
|
+
throw new Error("Persisted mail delivery operation requires an id");
|
|
94
|
+
if (typeof operation.payloadDigest !== "string" || !operation.payloadDigest.startsWith("sha256:v1:"))
|
|
95
|
+
throw new Error("Persisted mail delivery operation requires a versioned payload digest");
|
|
96
|
+
if (typeof operation.providerKind !== "string" || operation.providerKind.length === 0)
|
|
97
|
+
throw new Error("Persisted mail delivery operation requires a provider kind");
|
|
98
|
+
if (!Number.isSafeInteger(operation.providerRetentionMs) || operation.providerRetentionMs <= 0)
|
|
99
|
+
throw new Error("Persisted mail delivery operation requires a positive retention");
|
|
100
|
+
return operation;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Extracts a built-in mail operation from generic job arguments.
|
|
104
|
+
* @param {string} jobName - Job class name.
|
|
105
|
+
* @param {Array<ReturnType<typeof JSON.parse>>} args - Job arguments.
|
|
106
|
+
* @returns {{operation: import("./index.js").MailerDeliveryOperation, payload: import("./index.js").MailerDeliveryPayload} | null} - Mail operation input.
|
|
107
|
+
*/
|
|
108
|
+
export function mailDeliveryOperationForJob(jobName, args) {
|
|
109
|
+
if (jobName !== MAIL_DELIVERY_JOB_NAME || !args[0] || typeof args[0] !== "object" || Array.isArray(args[0]))
|
|
110
|
+
return null;
|
|
111
|
+
const payload = /** @type {import("./index.js").MailerDeliveryPayload} */ (args[0]);
|
|
112
|
+
const operation = deliveryOperationFromPayload(payload);
|
|
113
|
+
return operation ? { operation, payload } : null;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Fixed-size primary key for a potentially long operation id.
|
|
117
|
+
* @param {string} operationId - Operation id.
|
|
118
|
+
* @returns {string} - SHA-256 operation key.
|
|
119
|
+
*/
|
|
120
|
+
export function mailDeliveryOperationKey(operationId) {
|
|
121
|
+
return createHash("sha256").update(`velocious-mail-delivery-operation:${operationId}`).digest("hex");
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Validates provider compatibility and payload integrity before an attempt.
|
|
125
|
+
* @param {object} args - Validation input.
|
|
126
|
+
* @param {import("./index.js").MailerDeliveryIdempotencyCapability} args.capability - Current backend capability.
|
|
127
|
+
* @param {import("./index.js").MailerDeliveryPayload} args.payload - Persisted payload.
|
|
128
|
+
* @returns {import("./index.js").MailerDeliveryOperation} - Persisted operation.
|
|
129
|
+
*/
|
|
130
|
+
export function validateAttemptPayload({ capability, payload }) {
|
|
131
|
+
const operation = deliveryOperationFromPayload(payload);
|
|
132
|
+
if (!operation)
|
|
133
|
+
throw new Error("Expected a persisted mail delivery operation");
|
|
134
|
+
if (operation.providerKind !== capability.providerKind || operation.providerRetentionMs !== capability.retentionMs) {
|
|
135
|
+
throw VelociousError.safe("The configured mailer backend no longer matches the required delivery operation provider.", {
|
|
136
|
+
code: "mail-delivery-idempotency-provider-mismatch"
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
const currentDigest = mailDeliveryPayloadDigest({ operationId: operation.id, payload });
|
|
140
|
+
if (currentDigest !== operation.payloadDigest) {
|
|
141
|
+
throw VelociousError.safe("The persisted mail delivery payload digest does not match its required operation.", {
|
|
142
|
+
code: "mail-delivery-idempotency-payload-mismatch"
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
return operation;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Validates the public operation shape without accepting future semantics silently.
|
|
149
|
+
* @param {import("./index.js").MailerDeliveryOperationRequest} deliveryOperation - Public operation.
|
|
150
|
+
* @returns {void}
|
|
151
|
+
*/
|
|
152
|
+
function validateDeliveryOperationRequest(deliveryOperation) {
|
|
153
|
+
if (!deliveryOperation || typeof deliveryOperation !== "object" || Array.isArray(deliveryOperation)) {
|
|
154
|
+
throw VelociousError.safe("deliveryOperation must be an object.", { code: "mail-delivery-operation-invalid" });
|
|
155
|
+
}
|
|
156
|
+
if (typeof deliveryOperation.id !== "string" || deliveryOperation.id.length === 0) {
|
|
157
|
+
throw VelociousError.safe("deliveryOperation.id must be a non-empty string.", { code: "mail-delivery-operation-invalid" });
|
|
158
|
+
}
|
|
159
|
+
if (deliveryOperation.idempotency !== "required") {
|
|
160
|
+
throw VelociousError.safe('deliveryOperation.idempotency must be "required".', { code: "mail-delivery-operation-invalid" });
|
|
161
|
+
}
|
|
162
|
+
const keys = Object.keys(deliveryOperation);
|
|
163
|
+
if (keys.some((key) => key !== "id" && key !== "idempotency")) {
|
|
164
|
+
throw VelociousError.safe("deliveryOperation contains unsupported fields.", { code: "mail-delivery-operation-invalid" });
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Canonicalizes case-insensitive custom headers without exposing values.
|
|
169
|
+
* @param {Record<string, string> | undefined} headers - Custom headers.
|
|
170
|
+
* @returns {Array<[string, string]>} - Sorted header pairs.
|
|
171
|
+
*/
|
|
172
|
+
function canonicalHeaders(headers) {
|
|
173
|
+
if (!headers)
|
|
174
|
+
return [];
|
|
175
|
+
const pairs = Object.entries(headers).map(([name, value]) => [name.toLowerCase(), value]);
|
|
176
|
+
const names = new Set();
|
|
177
|
+
for (const [name] of pairs) {
|
|
178
|
+
if (names.has(name)) {
|
|
179
|
+
throw VelociousError.safe("Mail headers contain duplicate case-insensitive names.", { code: "mail-delivery-headers-invalid" });
|
|
180
|
+
}
|
|
181
|
+
names.add(name);
|
|
182
|
+
}
|
|
183
|
+
return /** @type {Array<[string, string]>} */ (pairs.sort(([left], [right]) => left.localeCompare(right)));
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsaXZlcnktb3BlcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21haWxlci9kZWxpdmVyeS1vcGVyYXRpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxRQUFRLENBQUE7QUFDakMsT0FBTyxjQUFjLE1BQU0sdUJBQXVCLENBQUE7QUFDbEQsT0FBTyxtQkFBbUIsTUFBTSx5QkFBeUIsQ0FBQTtBQUV6RCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxpQkFBaUIsQ0FBQTtBQUN2RCxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyw0QkFBNEIsQ0FBQTtBQUMxRSxNQUFNLHFCQUFxQixHQUFHLG9DQUFvQyxDQUFBO0FBRWxFOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsb0NBQW9DLENBQUMsRUFBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFDO0lBQ3hGLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxPQUFPLENBQUMsNkJBQTZCLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDNUUsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLCtFQUErRSxFQUFFO1lBQ3pHLElBQUksRUFBRSx1Q0FBdUM7U0FDOUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyw2QkFBNkIsRUFBRSxDQUFBO0lBRTFELElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxVQUFVLENBQUMsWUFBWSxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2RyxNQUFNLElBQUksS0FBSyxDQUFDLGtGQUFrRixDQUFDLENBQUE7SUFDckcsQ0FBQztJQUNELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxVQUFVLENBQUMs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LEVBQUMsSUFBSSxFQUFFLCtCQUErQixFQUFDLENBQUMsQ0FBQTtRQUM5SCxDQUFDO1FBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNqQixDQUFDO0lBRUQsT0FBTyxzQ0FBc0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzVHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtjcmVhdGVIYXNofSBmcm9tIFwiY3J5cHRvXCJcbmltcG9ydCBWZWxvY2lvdXNFcnJvciBmcm9tIFwiLi4vdmVsb2Npb3VzLWVycm9yLmpzXCJcbmltcG9ydCBzdGFibGVKc29uU3RyaW5naWZ5IGZyb20gXCIuLi91dGlscy9zdGFibGUtanNvbi5qc1wiXG5cbmV4cG9ydCBjb25zdCBNQUlMX0RFTElWRVJZX0pPQl9OQU1FID0gXCJNYWlsRGVsaXZlcnlKb2JcIlxuZXhwb3J0IGNvbnN0IE1BSUxfREVMSVZFUllfT1BFUkFUSU9OU19UQUJMRSA9IFwibWFpbGVyX2RlbGl2ZXJ5X29wZXJhdGlvbnNcIlxuY29uc3QgUEFZTE9BRF9ESUdFU1RfRk9STUFUID0gXCJ2ZWxvY2lvdXMtbWFpbC1kZWxpdmVyeS1wYXlsb2FkLXYxXCJcblxuLyoqXG4gKiBSZWFkcyBhbmQgdmFsaWRhdGVzIGEgYmFja2VuZCdzIHByb3ZpZGVyIGlkZW1wb3RlbmN5IGNhcGFiaWxpdHkuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIENhcGFiaWxpdHkgaW5wdXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuTWFpbGVyQmFja2VuZCB8IHVuZGVmaW5lZH0gYXJncy5iYWNrZW5kIC0gQ29uZmlndXJlZCBiYWNrZW5kLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5T3BlcmF0aW9uUmVxdWVzdCB8IGltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlPcGVyYXRpb259IGFyZ3MuZGVsaXZlcnlPcGVyYXRpb24gLSBSZXF1aXJlZCBvcGVyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkfSBhcmdzLnBheWxvYWQgLSBSZW5kZXJlZCBvciBwZXJzaXN0ZWQgcGF5bG9hZC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5SWRlbXBvdGVuY3lDYXBhYmlsaXR5fSAtIENhcGFiaWxpdHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlRGVsaXZlcnlJZGVtcG90ZW5jeUNhcGFiaWxpdHkoe2JhY2tlbmQsIGRlbGl2ZXJ5T3BlcmF0aW9uLCBwYXlsb2FkfSkge1xuICBpZiAoIWJhY2tlbmQgfHwgdHlwZW9mIGJhY2tlbmQuZGVsaXZlcnlJZGVtcG90ZW5jeUNhcGFiaWxpdHkgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoXCJUaGUgY29uZmlndXJlZCBtYWlsZXIgYmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IHJlcXVpcmVkIHByb3ZpZGVyIGlkZW1wb3RlbmN5LlwiLCB7XG4gICAgICBjb2RlOiBcIm1haWwtZGVsaXZlcnktaWRlbXBvdGVuY3ktdW5zdXBwb3J0ZWRcIlxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjYXBhYmlsaXR5ID0gYmFja2VuZC5kZWxpdmVyeUlkZW1wb3RlbmN5Q2FwYWJpbGl0eSgpXG5cbiAgaWYgKCFjYXBhYmlsaXR5IHx8IHR5cGVvZiBjYXBhYmlsaXR5LnByb3ZpZGVyS2luZCAhPT0gXCJzdHJpbmdcIiB8fCBjYXBhYmlsaXR5LnByb3ZpZGVyS2luZC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJNYWlsZXIgYmFja2VuZCBkZWxpdmVyeSBpZGVtcG90ZW5jeSBjYXBhYmlsaXR5IHJlcXVpcmVzIGEgbm9uLWVtcHR5IHByb3ZpZGVyS2luZFwiKVxuICB9XG4gIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoY2FwYWJpbGl0eS5yZXRlbnRpb25NcykgfHwgY2FwYWJpbGl0eS5yZXRlbnRpb25NcyA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWFpbGVyIGJhY2tlbmQgZGVsaXZlcnkgaWRlbXBvdGVuY3kgY2FwYWJpbGl0eSByZXF1aXJlcyBhIHBvc2l0aXZlIHNhZmUtaW50ZWdlciByZXRlbnRpb25Nc1wiKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBiYWNrZW5kLnZhbGlkYXRlRGVsaXZlcnlPcGVyYXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGJhY2tlbmQudmFsaWRhdGVEZWxpdmVyeU9wZXJhdGlvbih7ZGVsaXZlcnlPcGVyYXRpb24sIHBheWxvYWR9KVxuICB9XG5cbiAgcmV0dXJuIGNhcGFiaWxpdHlcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIG9uZSBwdWJsaWMgcmVxdWlyZWQgb3BlcmF0aW9uIGludG8gaW1tdXRhYmxlIHBheWxvYWQgbWV0YWRhdGEuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIFByZXBhcmF0aW9uIGlucHV0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5SWRlbXBvdGVuY3lDYXBhYmlsaXR5fSBhcmdzLmNhcGFiaWxpdHkgLSBCYWNrZW5kIGNhcGFiaWxpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlPcGVyYXRpb25SZXF1ZXN0fSBhcmdzLmRlbGl2ZXJ5T3BlcmF0aW9uIC0gUHVibGljIG9wZXJhdGlvbiByZXF1ZXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5UGF5bG9hZH0gYXJncy5wYXlsb2FkIC0gUmVuZGVyZWQgcGF5bG9hZC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5UGF5bG9hZH0gLSBQYXlsb2FkIHdpdGggaW1tdXRhYmxlIG9wZXJhdGlvbiBtZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVSZXF1aXJlZERlbGl2ZXJ5UGF5bG9hZCh7Y2FwYWJpbGl0eSwgZGVsaXZlcnlPcGVyYXRpb24sIHBheWxvYWR9KSB7XG4gIHZhbGlkYXRlRGVsaXZlcnlPcGVyYXRpb25SZXF1ZXN0KGRlbGl2ZXJ5T3BlcmF0aW9uKVxuICBjb25zdCBwYXlsb2FkRGlnZXN0ID0gbWFpbERlbGl2ZXJ5UGF5bG9hZERpZ2VzdCh7b3BlcmF0aW9uSWQ6IGRlbGl2ZXJ5T3BlcmF0aW9uLmlkLCBwYXlsb2FkfSlcblxuICByZXR1cm4ge1xuICAgIC4uLnBheWxvYWQsXG4gICAgZGVsaXZlcnlPcGVyYXRpb246IHtcbiAgICAgIGlkOiBkZWxpdmVyeU9wZXJhdGlvbi5pZCxcbiAgICAgIGlkZW1wb3RlbmN5OiBcInJlcXVpcmVkXCIsXG4gICAgICBwYXlsb2FkRGlnZXN0LFxuICAgICAgcHJvdmlkZXJLaW5kOiBjYXBhYmlsaXR5LnByb3ZpZGVyS2luZCxcbiAgICAgIHByb3ZpZGVyUmV0ZW50aW9uTXM6IGNhcGFiaWxpdHkucmV0ZW50aW9uTXNcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHZlcnNpb25lZCBkaWdlc3QgZm9yIGV2ZXJ5IHJlY2lwaWVudC12aXNpYmxlL3Byb3ZpZGVyLXJlbGV2YW50IHBheWxvYWQgZmllbGQuXG4gKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIERpZ2VzdCBpbnB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm9wZXJhdGlvbklkIC0gU3RhYmxlIG9wZXJhdGlvbiBpZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9IGFyZ3MucGF5bG9hZCAtIFJlbmRlcmVkIHBheWxvYWQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFZlcnNpb25lZCBTSEEtMjU2IGRpZ2VzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haWxEZWxpdmVyeVBheWxvYWREaWdlc3Qoe29wZXJhdGlvbklkLCBwYXlsb2FkfSkge1xuICBjb25zdCBjYW5vbmljYWxQYXlsb2FkID0ge1xuICAgIGFjdGlvbjogcGF5bG9hZC5hY3Rpb24sXG4gICAgYmNjOiBwYXlsb2FkLmJjYyA/PyBudWxsLFxuICAgIGNjOiBwYXlsb2FkLmNjID8/IG51bGwsXG4gICAgZm9ybWF0OiBQQVlMT0FEX0RJR0VTVF9GT1JNQVQsXG4gICAgZnJvbTogcGF5bG9hZC5mcm9tID8/IG51bGwsXG4gICAgaGVhZGVyczogY2Fub25pY2FsSGVhZGVycyhwYXlsb2FkLmhlYWRlcnMpLFxuICAgIGh0bWw6IHBheWxvYWQuaHRtbCxcbiAgICBtYWlsZXI6IHBheWxvYWQubWFpbGVyLFxuICAgIG9wZXJhdGlvbklkLFxuICAgIHJlcGx5VG86IHBheWxvYWQucmVwbHlUbyA/PyBudWxsLFxuICAgIHN1YmplY3Q6IHBheWxvYWQuc3ViamVjdCxcbiAgICB0bzogcGF5bG9hZC50b1xuICB9XG4gIGNvbnN0IGRpZ2VzdCA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKHN0YWJsZUpzb25TdHJpbmdpZnkoY2Fub25pY2FsUGF5bG9hZCkpLmRpZ2VzdChcImhleFwiKVxuXG4gIHJldHVybiBgc2hhMjU2OnYxOiR7ZGlnZXN0fWBcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB2YWxpZGF0ZWQgcGVyc2lzdGVkIG9wZXJhdGlvbiBtZXRhZGF0YSBmcm9tIGEgcGF5bG9hZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9IHBheWxvYWQgLSBNYWlsIHBheWxvYWQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeU9wZXJhdGlvbiB8IG51bGx9IC0gT3BlcmF0aW9uIG9yIG51bGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpdmVyeU9wZXJhdGlvbkZyb21QYXlsb2FkKHBheWxvYWQpIHtcbiAgY29uc3Qgb3BlcmF0aW9uID0gcGF5bG9hZC5kZWxpdmVyeU9wZXJhdGlvblxuXG4gIGlmICghb3BlcmF0aW9uKSByZXR1cm4gbnVsbFxuICBpZiAob3BlcmF0aW9uLmlkZW1wb3RlbmN5ICE9PSBcInJlcXVpcmVkXCIpIHRocm93IG5ldyBFcnJvcihcIlBlcnNpc3RlZCBtYWlsIGRlbGl2ZXJ5IG9wZXJhdGlvbiBpZGVtcG90ZW5jeSBtdXN0IGJlIHJlcXVpcmVkXCIpXG4gIGlmICh0eXBlb2Ygb3BlcmF0aW9uLmlkICE9PSBcInN0cmluZ1wiIHx8IG9wZXJhdGlvbi5pZC5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcihcIlBlcnNpc3RlZCBtYWlsIGRlbGl2ZXJ5IG9wZXJhdGlvbiByZXF1aXJlcyBhbiBpZFwiKVxuICBpZiAodHlwZW9mIG9wZXJhdGlvbi5wYXlsb2FkRGlnZXN0ICE9PSBcInN0cmluZ1wiIHx8ICFvcGVyYXRpb24ucGF5bG9hZERpZ2VzdC5zdGFydHNXaXRoKFwic2hhMjU2OnYxOlwiKSkgdGhyb3cgbmV3IEVycm9yKFwiUGVyc2lzdGVkIG1haWwgZGVsaXZlcnkgb3BlcmF0aW9uIHJlcXVpcmVzIGEgdmVyc2lvbmVkIHBheWxvYWQgZGlnZXN0XCIpXG4gIGlmICh0eXBlb2Ygb3BlcmF0aW9uLnByb3ZpZGVyS2luZCAhPT0gXCJzdHJpbmdcIiB8fCBvcGVyYXRpb24ucHJvdmlkZXJLaW5kLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKFwiUGVyc2lzdGVkIG1haWwgZGVsaXZlcnkgb3BlcmF0aW9uIHJlcXVpcmVzIGEgcHJvdmlkZXIga2luZFwiKVxuICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG9wZXJhdGlvbi5wcm92aWRlclJldGVudGlvbk1zKSB8fCBvcGVyYXRpb24ucHJvdmlkZXJSZXRlbnRpb25NcyA8PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJQZXJzaXN0ZWQgbWFpbCBkZWxpdmVyeSBvcGVyYXRpb24gcmVxdWlyZXMgYSBwb3NpdGl2ZSByZXRlbnRpb25cIilcblxuICByZXR1cm4gb3BlcmF0aW9uXG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBidWlsdC1pbiBtYWlsIG9wZXJhdGlvbiBmcm9tIGdlbmVyaWMgam9iIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBqb2JOYW1lIC0gSm9iIGNsYXNzIG5hbWUuXG4gKiBAcGFyYW0ge0FycmF5PFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gYXJncyAtIEpvYiBhcmd1bWVudHMuXG4gKiBAcmV0dXJucyB7e29wZXJhdGlvbjogaW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeU9wZXJhdGlvbiwgcGF5bG9hZDogaW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9IHwgbnVsbH0gLSBNYWlsIG9wZXJhdGlvbiBpbnB1dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haWxEZWxpdmVyeU9wZXJhdGlvbkZvckpvYihqb2JOYW1lLCBhcmdzKSB7XG4gIGlmIChqb2JOYW1lICE9PSBNQUlMX0RFTElWRVJZX0pPQl9OQU1FIHx8ICFhcmdzWzBdIHx8IHR5cGVvZiBhcmdzWzBdICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYXJnc1swXSkpIHJldHVybiBudWxsXG5cbiAgY29uc3QgcGF5bG9hZCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9ICovIChhcmdzWzBdKVxuICBjb25zdCBvcGVyYXRpb24gPSBkZWxpdmVyeU9wZXJhdGlvbkZyb21QYXlsb2FkKHBheWxvYWQpXG5cbiAgcmV0dXJuIG9wZXJhdGlvbiA/IHtvcGVyYXRpb24sIHBheWxvYWR9IDogbnVsbFxufVxuXG4vKipcbiAqIEZpeGVkLXNpemUgcHJpbWFyeSBrZXkgZm9yIGEgcG90ZW50aWFsbHkgbG9uZyBvcGVyYXRpb24gaWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0aW9uSWQgLSBPcGVyYXRpb24gaWQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFNIQS0yNTYgb3BlcmF0aW9uIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haWxEZWxpdmVyeU9wZXJhdGlvbktleShvcGVyYXRpb25JZCkge1xuICByZXR1cm4gY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoYHZlbG9jaW91cy1tYWlsLWRlbGl2ZXJ5LW9wZXJhdGlvbjoke29wZXJhdGlvbklkfWApLmRpZ2VzdChcImhleFwiKVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBwcm92aWRlciBjb21wYXRpYmlsaXR5IGFuZCBwYXlsb2FkIGludGVncml0eSBiZWZvcmUgYW4gYXR0ZW1wdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gVmFsaWRhdGlvbiBpbnB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeUlkZW1wb3RlbmN5Q2FwYWJpbGl0eX0gYXJncy5jYXBhYmlsaXR5IC0gQ3VycmVudCBiYWNrZW5kIGNhcGFiaWxpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlQYXlsb2FkfSBhcmdzLnBheWxvYWQgLSBQZXJzaXN0ZWQgcGF5bG9hZC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5T3BlcmF0aW9ufSAtIFBlcnNpc3RlZCBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUF0dGVtcHRQYXlsb2FkKHtjYXBhYmlsaXR5LCBwYXlsb2FkfSkge1xuICBjb25zdCBvcGVyYXRpb24gPSBkZWxpdmVyeU9wZXJhdGlvbkZyb21QYXlsb2FkKHBheWxvYWQpXG5cbiAgaWYgKCFvcGVyYXRpb24pIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGEgcGVyc2lzdGVkIG1haWwgZGVsaXZlcnkgb3BlcmF0aW9uXCIpXG4gIGlmIChvcGVyYXRpb24ucHJvdmlkZXJLaW5kICE9PSBjYXBhYmlsaXR5LnByb3ZpZGVyS2luZCB8fCBvcGVyYXRpb24ucHJvdmlkZXJSZXRlbnRpb25NcyAhPT0gY2FwYWJpbGl0eS5yZXRlbnRpb25Ncykge1xuICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoXCJUaGUgY29uZmlndXJlZCBtYWlsZXIgYmFja2VuZCBubyBsb25nZXIgbWF0Y2hlcyB0aGUgcmVxdWlyZWQgZGVsaXZlcnkgb3BlcmF0aW9uIHByb3ZpZGVyLlwiLCB7XG4gICAgICBjb2RlOiBcIm1haWwtZGVsaXZlcnktaWRlbXBvdGVuY3ktcHJvdmlkZXItbWlzbWF0Y2hcIlxuICAgIH0pXG4gIH1cblxuICBjb25zdCBjdXJyZW50RGlnZXN0ID0gbWFpbERlbGl2ZXJ5UGF5bG9hZERpZ2VzdCh7b3BlcmF0aW9uSWQ6IG9wZXJhdGlvbi5pZCwgcGF5bG9hZH0pXG5cbiAgaWYgKGN1cnJlbnREaWdlc3QgIT09IG9wZXJhdGlvbi5wYXlsb2FkRGlnZXN0KSB7XG4gICAgdGhyb3cgVmVsb2Npb3VzRXJyb3Iuc2FmZShcIlRoZSBwZXJzaXN0ZWQgbWFpbCBkZWxpdmVyeSBwYXlsb2FkIGRpZ2VzdCBkb2VzIG5vdCBtYXRjaCBpdHMgcmVxdWlyZWQgb3BlcmF0aW9uLlwiLCB7XG4gICAgICBjb2RlOiBcIm1haWwtZGVsaXZlcnktaWRlbXBvdGVuY3ktcGF5bG9hZC1taXNtYXRjaFwiXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBvcGVyYXRpb25cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHB1YmxpYyBvcGVyYXRpb24gc2hhcGUgd2l0aG91dCBhY2NlcHRpbmcgZnV0dXJlIHNlbWFudGljcyBzaWxlbnRseS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeU9wZXJhdGlvblJlcXVlc3R9IGRlbGl2ZXJ5T3BlcmF0aW9uIC0gUHVibGljIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZURlbGl2ZXJ5T3BlcmF0aW9uUmVxdWVzdChkZWxpdmVyeU9wZXJhdGlvbikge1xuICBpZiAoIWRlbGl2ZXJ5T3BlcmF0aW9uIHx8IHR5cGVvZiBkZWxpdmVyeU9wZXJhdGlvbiAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGRlbGl2ZXJ5T3BlcmF0aW9uKSkge1xuICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoXCJkZWxpdmVyeU9wZXJhdGlvbiBtdXN0IGJlIGFuIG9iamVjdC5cIiwge2NvZGU6IFwibWFpbC1kZWxpdmVyeS1vcGVyYXRpb24taW52YWxpZFwifSlcbiAgfVxuICBpZiAodHlwZW9mIGRlbGl2ZXJ5T3BlcmF0aW9uLmlkICE9PSBcInN0cmluZ1wiIHx8IGRlbGl2ZXJ5T3BlcmF0aW9uLmlkLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoXCJkZWxpdmVyeU9wZXJhdGlvbi5pZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy5cIiwge2NvZGU6IFwibWFpbC1kZWxpdmVyeS1vcGVyYXRpb24taW52YWxpZFwifSlcbiAgfVxuICBpZiAoZGVsaXZlcnlPcGVyYXRpb24uaWRlbXBvdGVuY3kgIT09IFwicmVxdWlyZWRcIikge1xuICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoJ2RlbGl2ZXJ5T3BlcmF0aW9uLmlkZW1wb3RlbmN5IG11c3QgYmUgXCJyZXF1aXJlZFwiLicsIHtjb2RlOiBcIm1haWwtZGVsaXZlcnktb3BlcmF0aW9uLWludmFsaWRcIn0pXG4gIH1cblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGVsaXZlcnlPcGVyYXRpb24pXG5cbiAgaWYgKGtleXMuc29tZSgoa2V5KSA9PiBrZXkgIT09IFwiaWRcIiAmJiBrZXkgIT09IFwiaWRlbXBvdGVuY3lcIikpIHtcbiAgICB0aHJvdyBWZWxvY2lvdXNFcnJvci5zYWZlKFwiZGVsaXZlcnlPcGVyYXRpb24gY29udGFpbnMgdW5zdXBwb3J0ZWQgZmllbGRzLlwiLCB7Y29kZTogXCJtYWlsLWRlbGl2ZXJ5LW9wZXJhdGlvbi1pbnZhbGlkXCJ9KVxuICB9XG59XG5cbi8qKlxuICogQ2Fub25pY2FsaXplcyBjYXNlLWluc2Vuc2l0aXZlIGN1c3RvbSBoZWFkZXJzIHdpdGhvdXQgZXhwb3NpbmcgdmFsdWVzLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkfSBoZWFkZXJzIC0gQ3VzdG9tIGhlYWRlcnMuXG4gKiBAcmV0dXJucyB7QXJyYXk8W3N0cmluZywgc3RyaW5nXT59IC0gU29ydGVkIGhlYWRlciBwYWlycy5cbiAqL1xuZnVuY3Rpb24gY2Fub25pY2FsSGVhZGVycyhoZWFkZXJzKSB7XG4gIGlmICghaGVhZGVycykgcmV0dXJuIFtdXG5cbiAgY29uc3QgcGFpcnMgPSBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IFtuYW1lLnRvTG93ZXJDYXNlKCksIHZhbHVlXSlcbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0KClcblxuICBmb3IgKGNvbnN0IFtuYW1lXSBvZiBwYWlycykge1xuICAgIGlmIChuYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgIHRocm93IFZlbG9jaW91c0Vycm9yLnNhZmUoXCJNYWlsIGhlYWRlcnMgY29udGFpbiBkdXBsaWNhdGUgY2FzZS1pbnNlbnNpdGl2ZSBuYW1lcy5cIiwge2NvZGU6IFwibWFpbC1kZWxpdmVyeS1oZWFkZXJzLWludmFsaWRcIn0pXG4gICAgfVxuICAgIG5hbWVzLmFkZChuYW1lKVxuICB9XG5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7QXJyYXk8W3N0cmluZywgc3RyaW5nXT59ICovIChwYWlycy5zb3J0KChbbGVmdF0sIFtyaWdodF0pID0+IGxlZnQubG9jYWxlQ29tcGFyZShyaWdodCkpKVxufVxuIl19
|
|
@@ -38,13 +38,15 @@ export default class MailerDelivery {
|
|
|
38
38
|
deliverNow(): Promise<import("./index.js").MailerDeliveryPayload | ReturnType<typeof JSON.parse>>;
|
|
39
39
|
/**
|
|
40
40
|
* Runs deliver later.
|
|
41
|
+
* @param {import("./index.js").MailerDeliveryLaterOptions} [options] - Delivery execution options.
|
|
41
42
|
* @returns {Promise<string | import("./index.js").MailerDeliveryPayload | null>} - Job id or payload in test mode.
|
|
42
43
|
*/
|
|
43
|
-
deliverLater(): Promise<string | import("./index.js").MailerDeliveryPayload | null>;
|
|
44
|
+
deliverLater({ deliveryOperation, ...restArgs }?: import("./index.js").MailerDeliveryLaterOptions): Promise<string | import("./index.js").MailerDeliveryPayload | null>;
|
|
44
45
|
/**
|
|
45
46
|
* Runs deliver laver.
|
|
47
|
+
* @param {import("./index.js").MailerDeliveryLaterOptions} [options] - Delivery execution options.
|
|
46
48
|
* @returns {Promise<string | import("./index.js").MailerDeliveryPayload | null>} - Job id or payload in test mode.
|
|
47
49
|
*/
|
|
48
|
-
deliverLaver(): Promise<string | import("./index.js").MailerDeliveryPayload | null>;
|
|
50
|
+
deliverLaver(options?: import("./index.js").MailerDeliveryLaterOptions): Promise<string | import("./index.js").MailerDeliveryPayload | null>;
|
|
49
51
|
}
|
|
50
52
|
//# sourceMappingURL=delivery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../../src/mailer/delivery.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../../src/mailer/delivery.js"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC;;yDAEqD;IACrD,MAAM,EADI,OAAO,WAAW,EAAE,mBAAmB,CAC3C;IACN;;wDAEoD;IACpD,aAAa,EADH,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CACnC;IACb;;wBAEoB;IACpB,UAAU,EADA,MAAM,CACN;IAEV;;;;;;OAMG;IACH,YAAY,EAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAC,EAJ5C;QAAsD,MAAM,EAApD,OAAO,WAAW,EAAE,mBAAmB,CAC/C;QAAqD,aAAa,EAA1D,OAAO,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAC9C;QAAqB,UAAU,EAAvB,MAAM,CAChB;KAC8C,EAI9C;IAED;;;OAGG;IACG,YAAY,IAFL,OAAO,CAAC,OAAO,YAAY,EAAE,qBAAqB,CAAC,CAM/D;IAED;;;OAGG;IACG,UAAU,IAFH,OAAO,CAAC,OAAO,YAAY,EAAE,qBAAqB,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAM/F;IAED;;;;OAIG;IACG,YAAY,CAAC,EAAC,iBAAiB,EAAE,GAAG,QAAQ,EAAC,AAHhD,CACA,EADQ,OAAO,YAAY,EAAE,0BAGwB,GAF3C,OAAO,CAAC,MAAM,GAAG,OAAO,YAAY,EAAE,qBAAqB,GAAG,IAAI,CAAC,CAO/E;IAED;;;;OAIG;IACG,YAAY,CAAC,OAAO,AAHvB,CACA,EADQ,OAAO,YAAY,EAAE,0BAGN,GAFb,OAAO,CAAC,MAAM,GAAG,OAAO,YAAY,EAAE,qBAAqB,GAAG,IAAI,CAAC,CAI/E;CACF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// @ts-check
|
|
2
|
+
import restArgsError from "../utils/rest-args-error.js";
|
|
2
3
|
/**
|
|
3
4
|
* Represents a prepared mail delivery.
|
|
4
5
|
*/
|
|
@@ -45,18 +46,21 @@ export default class MailerDelivery {
|
|
|
45
46
|
}
|
|
46
47
|
/**
|
|
47
48
|
* Runs deliver later.
|
|
49
|
+
* @param {import("./index.js").MailerDeliveryLaterOptions} [options] - Delivery execution options.
|
|
48
50
|
* @returns {Promise<string | import("./index.js").MailerDeliveryPayload | null>} - Job id or payload in test mode.
|
|
49
51
|
*/
|
|
50
|
-
async deliverLater() {
|
|
52
|
+
async deliverLater({ deliveryOperation, ...restArgs } = {}) {
|
|
53
|
+
restArgsError(restArgs);
|
|
51
54
|
const payload = await this.buildPayload();
|
|
52
|
-
return await this.mailer._enqueuePayload(payload);
|
|
55
|
+
return await this.mailer._enqueuePayload(payload, { deliveryOperation });
|
|
53
56
|
}
|
|
54
57
|
/**
|
|
55
58
|
* Runs deliver laver.
|
|
59
|
+
* @param {import("./index.js").MailerDeliveryLaterOptions} [options] - Delivery execution options.
|
|
56
60
|
* @returns {Promise<string | import("./index.js").MailerDeliveryPayload | null>} - Job id or payload in test mode.
|
|
57
61
|
*/
|
|
58
|
-
async deliverLaver() {
|
|
59
|
-
return await this.deliverLater();
|
|
62
|
+
async deliverLaver(options) {
|
|
63
|
+
return await this.deliverLater(options);
|
|
60
64
|
}
|
|
61
65
|
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsaXZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWFpbGVyL2RlbGl2ZXJ5LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUV2RDs7R0FFRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sY0FBYztJQUNqQzs7eURBRXFEO0lBQ3JELE1BQU0sQ0FBQTtJQUNOOzt3REFFb0Q7SUFDcEQsYUFBYSxDQUFBO0lBQ2I7O3dCQUVvQjtJQUNwQixVQUFVLENBQUE7SUFFVjs7Ozs7O09BTUc7SUFDSCxZQUFZLEVBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUM7UUFDN0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFDbEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUE7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxZQUFZO1FBQ2hCLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQTtRQUV4QixPQUFPLHlEQUF5RCxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUE7SUFDdEcsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxVQUFVO1FBQ2QsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFekMsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ25ELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFDLGlCQUFpQixFQUFFLEdBQUcsUUFBUSxFQUFDLEdBQUcsRUFBRTtRQUN0RCxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDdkIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFekMsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFDLGlCQUFpQixFQUFDLENBQUMsQ0FBQTtJQUN4RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTztRQUN4QixPQUFPLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN6QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHByZXBhcmVkIG1haWwgZGVsaXZlcnkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxlckRlbGl2ZXJ5IHtcbiAgLyoqXG4gICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICogQHR5cGUge2ltcG9ydChcIi4vYmFzZS5qc1wiKS5WZWxvY2lvdXNNYWlsZXJCYXNlfSAqL1xuICBtYWlsZXJcbiAgLyoqXG4gICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICogQHR5cGUge1Byb21pc2U8UmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4+fSAqL1xuICBhY3Rpb25Qcm9taXNlXG4gIC8qKlxuICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAqIEB0eXBlIHtzdHJpbmd9ICovXG4gIGFjdGlvbk5hbWVcblxuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBDb25zdHJ1Y3RvciBhcmdzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vYmFzZS5qc1wiKS5WZWxvY2lvdXNNYWlsZXJCYXNlfSBhcmdzLm1haWxlciAtIE1haWxlciBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtQcm9taXNlPFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+Pn0gYXJncy5hY3Rpb25Qcm9taXNlIC0gQWN0aW9uIHByb21pc2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmFjdGlvbk5hbWUgLSBBY3Rpb24gbmFtZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHttYWlsZXIsIGFjdGlvblByb21pc2UsIGFjdGlvbk5hbWV9KSB7XG4gICAgdGhpcy5tYWlsZXIgPSBtYWlsZXJcbiAgICB0aGlzLmFjdGlvblByb21pc2UgPSBhY3Rpb25Qcm9taXNlXG4gICAgdGhpcy5hY3Rpb25OYW1lID0gYWN0aW9uTmFtZVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYnVpbGQgcGF5bG9hZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWQ+fSAtIFJlbmRlcmVkIG1haWxlciBwYXlsb2FkLlxuICAgKi9cbiAgYXN5bmMgYnVpbGRQYXlsb2FkKCkge1xuICAgIGF3YWl0IHRoaXMuYWN0aW9uUHJvbWlzZVxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9ICovIChhd2FpdCB0aGlzLm1haWxlci5fYnVpbGRQYXlsb2FkKCkpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBkZWxpdmVyIG5vdy5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWQgfCBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPj59IC0gRGVsaXZlcmVkIHBheWxvYWQgb3IgaGFuZGxlciByZXN1bHQuXG4gICAqL1xuICBhc3luYyBkZWxpdmVyTm93KCkge1xuICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCB0aGlzLmJ1aWxkUGF5bG9hZCgpXG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5tYWlsZXIuX2RlbGl2ZXJQYXlsb2FkKHBheWxvYWQpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBkZWxpdmVyIGxhdGVyLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlMYXRlck9wdGlvbnN9IFtvcHRpb25zXSAtIERlbGl2ZXJ5IGV4ZWN1dGlvbiBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmcgfCBpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5UGF5bG9hZCB8IG51bGw+fSAtIEpvYiBpZCBvciBwYXlsb2FkIGluIHRlc3QgbW9kZS5cbiAgICovXG4gIGFzeW5jIGRlbGl2ZXJMYXRlcih7ZGVsaXZlcnlPcGVyYXRpb24sIC4uLnJlc3RBcmdzfSA9IHt9KSB7XG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcbiAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgdGhpcy5idWlsZFBheWxvYWQoKVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubWFpbGVyLl9lbnF1ZXVlUGF5bG9hZChwYXlsb2FkLCB7ZGVsaXZlcnlPcGVyYXRpb259KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZGVsaXZlciBsYXZlci5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5TGF0ZXJPcHRpb25zfSBbb3B0aW9uc10gLSBEZWxpdmVyeSBleGVjdXRpb24gb3B0aW9ucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nIHwgaW1wb3J0KFwiLi9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWQgfCBudWxsPn0gLSBKb2IgaWQgb3IgcGF5bG9hZCBpbiB0ZXN0IG1vZGUuXG4gICAqL1xuICBhc3luYyBkZWxpdmVyTGF2ZXIob3B0aW9ucykge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmRlbGl2ZXJMYXRlcihvcHRpb25zKVxuICB9XG59XG4iXX0=
|
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
export type MailerDeliveryOperationRequest = {
|
|
2
|
+
id: string;
|
|
3
|
+
idempotency: "required";
|
|
4
|
+
};
|
|
5
|
+
export type MailerDeliveryOperation = {
|
|
6
|
+
id: string;
|
|
7
|
+
idempotency: "required";
|
|
8
|
+
payloadDigest: string;
|
|
9
|
+
providerKind: string;
|
|
10
|
+
providerRetentionMs: number;
|
|
11
|
+
};
|
|
12
|
+
export type MailerDeliveryIdempotencyCapability = {
|
|
13
|
+
providerKind: string;
|
|
14
|
+
retentionMs: number;
|
|
15
|
+
};
|
|
16
|
+
export type MailerDeliveryLaterOptions = {
|
|
17
|
+
deliveryOperation?: MailerDeliveryOperationRequest;
|
|
18
|
+
};
|
|
1
19
|
export type MailerDeliveryPayload = {
|
|
2
20
|
to: ReturnType<typeof JSON.parse>;
|
|
3
21
|
subject: string;
|
|
@@ -9,8 +27,13 @@ export type MailerDeliveryPayload = {
|
|
|
9
27
|
html: string;
|
|
10
28
|
mailer: string;
|
|
11
29
|
action: string;
|
|
30
|
+
deliveryOperation?: MailerDeliveryOperation;
|
|
12
31
|
};
|
|
13
|
-
/** @typedef {{
|
|
32
|
+
/** @typedef {{id: string, idempotency: "required"}} MailerDeliveryOperationRequest */
|
|
33
|
+
/** @typedef {{id: string, idempotency: "required", payloadDigest: string, providerKind: string, providerRetentionMs: number}} MailerDeliveryOperation */
|
|
34
|
+
/** @typedef {{providerKind: string, retentionMs: number}} MailerDeliveryIdempotencyCapability */
|
|
35
|
+
/** @typedef {{deliveryOperation?: MailerDeliveryOperationRequest}} MailerDeliveryLaterOptions */
|
|
36
|
+
/** @typedef {{to: ReturnType<typeof JSON.parse>, subject: string, from?: ReturnType<typeof JSON.parse>, cc?: ReturnType<typeof JSON.parse>, bcc?: ReturnType<typeof JSON.parse>, replyTo?: ReturnType<typeof JSON.parse>, headers?: Record<string, string>, html: string, mailer: string, action: string, deliveryOperation?: MailerDeliveryOperation}} MailerDeliveryPayload */
|
|
14
37
|
import { clearDeliveries, deliverPayload, deliveries, enqueuePayload, getDeliveryHandler, setDeliveryHandler, VelociousMailerBase } from "./base.js";
|
|
15
38
|
export { VelociousMailerBase, clearDeliveries, deliverPayload, deliveries, enqueuePayload, getDeliveryHandler, setDeliveryHandler };
|
|
16
39
|
export default VelociousMailerBase;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mailer/index.js"],"names":[],"mappings":"AAEI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mailer/index.js"],"names":[],"mappings":"AAEI,YAAiD,8BAA8B,GAArE;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,UAAU,CAAA;CAAC,CAAgC;AAC/E,YAA2H,uBAAuB,GAAxI;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,UAAU,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAA;CAAC,CAAyB;AAClJ,YAAuD,mCAAmC,GAAhF;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAC,CAAqC;AAC1F,YAAgE,0BAA0B,GAAhF;IAAC,iBAAiB,CAAC,EAAE,8BAA8B,CAAA;CAAC,CAA4B;AAC1F,YAAqV,qBAAqB,GAAhW;IAAC,EAAE,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAAC,EAAE,CAAC,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAAC,GAAG,CAAC,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,uBAAuB,CAAA;CAAC,CAAuB;AAJ9W,sFAAsF;AACtF,yJAAyJ;AACzJ,iGAAiG;AACjG,iGAAiG;AACjG,iXAAiX;AAEjX,OAAO,EACL,eAAe,EACf,cAAc,EACd,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EACnB,CAAA;eACc,mBAAmB"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
// @ts-check
|
|
2
|
-
/** @typedef {{
|
|
2
|
+
/** @typedef {{id: string, idempotency: "required"}} MailerDeliveryOperationRequest */
|
|
3
|
+
/** @typedef {{id: string, idempotency: "required", payloadDigest: string, providerKind: string, providerRetentionMs: number}} MailerDeliveryOperation */
|
|
4
|
+
/** @typedef {{providerKind: string, retentionMs: number}} MailerDeliveryIdempotencyCapability */
|
|
5
|
+
/** @typedef {{deliveryOperation?: MailerDeliveryOperationRequest}} MailerDeliveryLaterOptions */
|
|
6
|
+
/** @typedef {{to: ReturnType<typeof JSON.parse>, subject: string, from?: ReturnType<typeof JSON.parse>, cc?: ReturnType<typeof JSON.parse>, bcc?: ReturnType<typeof JSON.parse>, replyTo?: ReturnType<typeof JSON.parse>, headers?: Record<string, string>, html: string, mailer: string, action: string, deliveryOperation?: MailerDeliveryOperation}} MailerDeliveryPayload */
|
|
3
7
|
import { clearDeliveries, deliverPayload, deliveries, enqueuePayload, getDeliveryHandler, setDeliveryHandler, VelociousMailerBase } from "./base.js";
|
|
4
8
|
export { VelociousMailerBase, clearDeliveries, deliverPayload, deliveries, enqueuePayload, getDeliveryHandler, setDeliveryHandler };
|
|
5
9
|
export default VelociousMailerBase;
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWFpbGVyL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixzRkFBc0Y7QUFDdEYseUpBQXlKO0FBQ3pKLGlHQUFpRztBQUNqRyxpR0FBaUc7QUFDakcsaVhBQWlYO0FBRWpYLE9BQU8sRUFDTCxlQUFlLEVBQ2YsY0FBYyxFQUNkLFVBQVUsRUFDVixjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDcEIsTUFBTSxXQUFXLENBQUE7QUFFbEIsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsY0FBYyxFQUNkLFVBQVUsRUFDVixjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNuQixDQUFBO0FBQ0QsZUFBZSxtQkFBbUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKiogQHR5cGVkZWYge3tpZDogc3RyaW5nLCBpZGVtcG90ZW5jeTogXCJyZXF1aXJlZFwifX0gTWFpbGVyRGVsaXZlcnlPcGVyYXRpb25SZXF1ZXN0ICovXG4vKiogQHR5cGVkZWYge3tpZDogc3RyaW5nLCBpZGVtcG90ZW5jeTogXCJyZXF1aXJlZFwiLCBwYXlsb2FkRGlnZXN0OiBzdHJpbmcsIHByb3ZpZGVyS2luZDogc3RyaW5nLCBwcm92aWRlclJldGVudGlvbk1zOiBudW1iZXJ9fSBNYWlsZXJEZWxpdmVyeU9wZXJhdGlvbiAqL1xuLyoqIEB0eXBlZGVmIHt7cHJvdmlkZXJLaW5kOiBzdHJpbmcsIHJldGVudGlvbk1zOiBudW1iZXJ9fSBNYWlsZXJEZWxpdmVyeUlkZW1wb3RlbmN5Q2FwYWJpbGl0eSAqL1xuLyoqIEB0eXBlZGVmIHt7ZGVsaXZlcnlPcGVyYXRpb24/OiBNYWlsZXJEZWxpdmVyeU9wZXJhdGlvblJlcXVlc3R9fSBNYWlsZXJEZWxpdmVyeUxhdGVyT3B0aW9ucyAqL1xuLyoqIEB0eXBlZGVmIHt7dG86IFJldHVyblR5cGU8dHlwZW9mIEpTT04ucGFyc2U+LCBzdWJqZWN0OiBzdHJpbmcsIGZyb20/OiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPiwgY2M/OiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPiwgYmNjPzogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5wYXJzZT4sIHJlcGx5VG8/OiBSZXR1cm5UeXBlPHR5cGVvZiBKU09OLnBhcnNlPiwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGh0bWw6IHN0cmluZywgbWFpbGVyOiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCBkZWxpdmVyeU9wZXJhdGlvbj86IE1haWxlckRlbGl2ZXJ5T3BlcmF0aW9ufX0gTWFpbGVyRGVsaXZlcnlQYXlsb2FkICovXG5cbmltcG9ydCB7XG4gIGNsZWFyRGVsaXZlcmllcyxcbiAgZGVsaXZlclBheWxvYWQsXG4gIGRlbGl2ZXJpZXMsXG4gIGVucXVldWVQYXlsb2FkLFxuICBnZXREZWxpdmVyeUhhbmRsZXIsXG4gIHNldERlbGl2ZXJ5SGFuZGxlcixcbiAgVmVsb2Npb3VzTWFpbGVyQmFzZVxufSBmcm9tIFwiLi9iYXNlLmpzXCJcblxuZXhwb3J0IHtcbiAgVmVsb2Npb3VzTWFpbGVyQmFzZSxcbiAgY2xlYXJEZWxpdmVyaWVzLFxuICBkZWxpdmVyUGF5bG9hZCxcbiAgZGVsaXZlcmllcyxcbiAgZW5xdWV1ZVBheWxvYWQsXG4gIGdldERlbGl2ZXJ5SGFuZGxlcixcbiAgc2V0RGVsaXZlcnlIYW5kbGVyXG59XG5leHBvcnQgZGVmYXVsdCBWZWxvY2lvdXNNYWlsZXJCYXNlXG4iXX0=
|
package/build/src/mailer.d.ts
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
export type
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
action: string;
|
|
12
|
-
};
|
|
13
|
-
/** @typedef {{to: ReturnType<typeof JSON.parse>, subject: string, from?: ReturnType<typeof JSON.parse>, cc?: ReturnType<typeof JSON.parse>, bcc?: ReturnType<typeof JSON.parse>, replyTo?: ReturnType<typeof JSON.parse>, headers?: Record<string, string>, html: string, mailer: string, action: string}} MailerDeliveryPayload */
|
|
1
|
+
export type MailerDeliveryOperationRequest = import("./mailer/index.js").MailerDeliveryOperationRequest;
|
|
2
|
+
export type MailerDeliveryOperation = import("./mailer/index.js").MailerDeliveryOperation;
|
|
3
|
+
export type MailerDeliveryIdempotencyCapability = import("./mailer/index.js").MailerDeliveryIdempotencyCapability;
|
|
4
|
+
export type MailerDeliveryLaterOptions = import("./mailer/index.js").MailerDeliveryLaterOptions;
|
|
5
|
+
export type MailerDeliveryPayload = import("./mailer/index.js").MailerDeliveryPayload;
|
|
6
|
+
/** @typedef {import("./mailer/index.js").MailerDeliveryOperationRequest} MailerDeliveryOperationRequest */
|
|
7
|
+
/** @typedef {import("./mailer/index.js").MailerDeliveryOperation} MailerDeliveryOperation */
|
|
8
|
+
/** @typedef {import("./mailer/index.js").MailerDeliveryIdempotencyCapability} MailerDeliveryIdempotencyCapability */
|
|
9
|
+
/** @typedef {import("./mailer/index.js").MailerDeliveryLaterOptions} MailerDeliveryLaterOptions */
|
|
10
|
+
/** @typedef {import("./mailer/index.js").MailerDeliveryPayload} MailerDeliveryPayload */
|
|
14
11
|
export { VelociousMailerBase, clearDeliveries, deliverPayload, deliveries, enqueuePayload, getDeliveryHandler, setDeliveryHandler } from "./mailer/index.js";
|
|
15
12
|
export { default as SmtpMailerBackend } from "./mailer/backends/smtp.js";
|
|
13
|
+
export { default as ResendSmtpMailerBackend } from "./mailer/backends/resend-smtp.js";
|
|
16
14
|
export { default } from "./mailer/index.js";
|
|
17
15
|
//# sourceMappingURL=mailer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mailer.d.ts","sourceRoot":"","sources":["../../src/mailer.js"],"names":[],"mappings":"AAEI,
|
|
1
|
+
{"version":3,"file":"mailer.d.ts","sourceRoot":"","sources":["../../src/mailer.js"],"names":[],"mappings":"AAEI,YAAsE,8BAA8B,GAA1F,OAAO,mBAAmB,EAAE,8BAA8B,CAAgC;AACpG,YAA+D,uBAAuB,GAA5E,OAAO,mBAAmB,EAAE,uBAAuB,CAAyB;AACtF,YAA2E,mCAAmC,GAApG,OAAO,mBAAmB,EAAE,mCAAmC,CAAqC;AAC9G,YAAkE,0BAA0B,GAAlF,OAAO,mBAAmB,EAAE,0BAA0B,CAA4B;AAC5F,YAA6D,qBAAqB,GAAxE,OAAO,mBAAmB,EAAE,qBAAqB,CAAuB;AAJtF,2GAA2G;AAC3G,6FAA6F;AAC7F,qHAAqH;AACrH,mGAAmG;AACnG,yFAAyF;AAEzF,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAC,OAAO,IAAI,iBAAiB,EAAC,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAC,OAAO,IAAI,uBAAuB,EAAC,MAAM,kCAAkC,CAAA;AACnF,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAA"}
|
package/build/src/mailer.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
// @ts-check
|
|
2
|
-
/** @typedef {
|
|
2
|
+
/** @typedef {import("./mailer/index.js").MailerDeliveryOperationRequest} MailerDeliveryOperationRequest */
|
|
3
|
+
/** @typedef {import("./mailer/index.js").MailerDeliveryOperation} MailerDeliveryOperation */
|
|
4
|
+
/** @typedef {import("./mailer/index.js").MailerDeliveryIdempotencyCapability} MailerDeliveryIdempotencyCapability */
|
|
5
|
+
/** @typedef {import("./mailer/index.js").MailerDeliveryLaterOptions} MailerDeliveryLaterOptions */
|
|
6
|
+
/** @typedef {import("./mailer/index.js").MailerDeliveryPayload} MailerDeliveryPayload */
|
|
3
7
|
export { VelociousMailerBase, clearDeliveries, deliverPayload, deliveries, enqueuePayload, getDeliveryHandler, setDeliveryHandler } from "./mailer/index.js";
|
|
4
8
|
export { default as SmtpMailerBackend } from "./mailer/backends/smtp.js";
|
|
9
|
+
export { default as ResendSmtpMailerBackend } from "./mailer/backends/resend-smtp.js";
|
|
5
10
|
export { default } from "./mailer/index.js";
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21haWxlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosMkdBQTJHO0FBQzNHLDZGQUE2RjtBQUM3RixxSEFBcUg7QUFDckgsbUdBQW1HO0FBQ25HLHlGQUF5RjtBQUV6RixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixjQUFjLEVBQ2QsVUFBVSxFQUNWLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ25CLE1BQU0sbUJBQW1CLENBQUE7QUFDMUIsT0FBTyxFQUFDLE9BQU8sSUFBSSxpQkFBaUIsRUFBQyxNQUFNLDJCQUEyQixDQUFBO0FBQ3RFLE9BQU8sRUFBQyxPQUFPLElBQUksdUJBQXVCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQTtBQUNuRixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sbUJBQW1CLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCIuL21haWxlci9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeU9wZXJhdGlvblJlcXVlc3R9IE1haWxlckRlbGl2ZXJ5T3BlcmF0aW9uUmVxdWVzdCAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCIuL21haWxlci9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeU9wZXJhdGlvbn0gTWFpbGVyRGVsaXZlcnlPcGVyYXRpb24gKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9tYWlsZXIvaW5kZXguanNcIikuTWFpbGVyRGVsaXZlcnlJZGVtcG90ZW5jeUNhcGFiaWxpdHl9IE1haWxlckRlbGl2ZXJ5SWRlbXBvdGVuY3lDYXBhYmlsaXR5ICovXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4vbWFpbGVyL2luZGV4LmpzXCIpLk1haWxlckRlbGl2ZXJ5TGF0ZXJPcHRpb25zfSBNYWlsZXJEZWxpdmVyeUxhdGVyT3B0aW9ucyAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCIuL21haWxlci9pbmRleC5qc1wiKS5NYWlsZXJEZWxpdmVyeVBheWxvYWR9IE1haWxlckRlbGl2ZXJ5UGF5bG9hZCAqL1xuXG5leHBvcnQge1xuICBWZWxvY2lvdXNNYWlsZXJCYXNlLFxuICBjbGVhckRlbGl2ZXJpZXMsXG4gIGRlbGl2ZXJQYXlsb2FkLFxuICBkZWxpdmVyaWVzLFxuICBlbnF1ZXVlUGF5bG9hZCxcbiAgZ2V0RGVsaXZlcnlIYW5kbGVyLFxuICBzZXREZWxpdmVyeUhhbmRsZXJcbn0gZnJvbSBcIi4vbWFpbGVyL2luZGV4LmpzXCJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBTbXRwTWFpbGVyQmFja2VuZH0gZnJvbSBcIi4vbWFpbGVyL2JhY2tlbmRzL3NtdHAuanNcIlxuZXhwb3J0IHtkZWZhdWx0IGFzIFJlc2VuZFNtdHBNYWlsZXJCYWNrZW5kfSBmcm9tIFwiLi9tYWlsZXIvYmFja2VuZHMvcmVzZW5kLXNtdHAuanNcIlxuZXhwb3J0IHtkZWZhdWx0fSBmcm9tIFwiLi9tYWlsZXIvaW5kZXguanNcIlxuIl19
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
* @property {import("./device-identity.js").SignedSyncMutation} [signedMutation] - Original signed mutation envelope, retained for peer-forwarded mutations.
|
|
38
38
|
* @property {number} sequence - Monotonic local sequence.
|
|
39
39
|
* @property {LocalMutationStatus} status - Local replay/apply status.
|
|
40
|
-
* @property {Record<string, import("../
|
|
40
|
+
* @property {Record<string, import("../frontend-models/base.js").FrontendModelTransportValue>} [syncResult] - Backend replay/result metadata. Stored as transport markers so Date (and other typed) values survive the durable JSON round trip and are restored on readback.
|
|
41
41
|
* @property {string} updatedAt - ISO timestamp when the record was last changed.
|
|
42
42
|
*/
|
|
43
43
|
export type LocalMutationLogRecordsOptions = {
|
|
@@ -113,9 +113,9 @@ export type LocalMutationLogRecord = {
|
|
|
113
113
|
*/
|
|
114
114
|
status: LocalMutationStatus;
|
|
115
115
|
/**
|
|
116
|
-
* - Backend replay/result metadata.
|
|
116
|
+
* - Backend replay/result metadata. Stored as transport markers so Date (and other typed) values survive the durable JSON round trip and are restored on readback.
|
|
117
117
|
*/
|
|
118
|
-
syncResult?: Record<string, import("../
|
|
118
|
+
syncResult?: Record<string, import("../frontend-models/base.js").FrontendModelTransportValue>;
|
|
119
119
|
/**
|
|
120
120
|
* - ISO timestamp when the record was last changed.
|
|
121
121
|
*/
|
|
@@ -169,13 +169,13 @@ export default class LocalMutationLog {
|
|
|
169
169
|
* @param {object} args - Arguments.
|
|
170
170
|
* @param {string} args.id - Record id.
|
|
171
171
|
* @param {LocalMutationStatus} args.status - New status.
|
|
172
|
-
* @param {Record<string, import("../
|
|
172
|
+
* @param {Record<string, import("../frontend-models/base.js").FrontendModelTransportValue>} [args.syncResult] - Result metadata (may carry transport-restored typed values).
|
|
173
173
|
* @returns {Promise<LocalMutationLogRecord>} - Updated record.
|
|
174
174
|
*/
|
|
175
175
|
updateStatus({ id, status, syncResult }: {
|
|
176
176
|
id: string;
|
|
177
177
|
status: LocalMutationStatus;
|
|
178
|
-
syncResult?: Record<string, import("../
|
|
178
|
+
syncResult?: Record<string, import("../frontend-models/base.js").FrontendModelTransportValue>;
|
|
179
179
|
}): Promise<LocalMutationLogRecord>;
|
|
180
180
|
/**
|
|
181
181
|
* Replaces the mutation payload of a still-pending record. Used when an
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-mutation-log.d.ts","sourceRoot":"","sources":["../../../src/sync/local-mutation-log.js"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;;;;;;;GAaG;AACH;;;;;GAKG;AACH;;;KAGK;AACL;;;;;;;;;;;;GAYG;AAvCA,YAAkB,8BAA8B,GAChD;;;;IAAmC,QAAQ,AAA3C,CACF,EADa,mBAAmB,EAAE,CAClC;CAAA,CAAA;AAOE,YAAkB,uBAAuB,GACzC;;;;IAAyF,YAAY,EAA1F,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CACvF;;;;IAAwE,aAAa,EAA1E,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CACtE;;;;IAA6D,YAAY,EAA9D,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAC3D;;;;IAA+I,MAAM,EAA1I,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,sBAAsB,GAAG,IAAI,GAAG,SAAS,CAC7I;;;;IAA2I,OAAO,EAAvI,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,8BAA8B,KAAK,OAAO,CAAC,sBAAsB,EAAE,CAAC,GAAG,sBAAsB,EAAE,CACzI;;;;IAAyF,YAAY,EAA1F,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CACzF;CAAA,CAAA;AAGE,YAAkB,uBAAuB,GACzC;;;;IAAmB,gBAAgB,EAAxB,MAAM,CACjB;;;;IAAmB,KAAK,EAAb,MAAM,CACnB;CAAA,CAAA;AAGE,YAA+F,mBAAmB,GAAxG,SAAS,GAAG,iBAAiB,GAAG,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAqB;AAIlH,YAAkB,sBAAsB,GACxC;;;;IAAmB,SAAS,EAAjB,MAAM,CACjB;;;;IAAsC,YAAY,EAAvC,uBAAuB,EAAE,CACpC;;;;IAAmB,EAAE,EAAV,MAAM,CACjB;;;;IAAwD,QAAQ,EAArD,OAAO,sBAAsB,EAAE,YAAY,CACtD;;;;IAA+D,cAAc,AAA7E,CACA,EADW,OAAO,sBAAsB,EAAE,kBAAkB,CAC5D;;;;IAAmB,QAAQ,EAAhB,MAAM,CACjB;;;;IAAgC,MAAM,EAA3B,mBAAmB,CAC9B;;;;
|
|
1
|
+
{"version":3,"file":"local-mutation-log.d.ts","sourceRoot":"","sources":["../../../src/sync/local-mutation-log.js"],"names":[],"mappings":"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"}
|