velocious 1.0.596 → 1.0.598
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 +18 -2
- package/build/background-jobs/main.js +42 -32
- 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/main.d.ts +15 -10
- package/build/src/background-jobs/main.d.ts.map +1 -1
- package/build/src/background-jobs/main.js +42 -34
- 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/testing/factory/node/definition-reload-policy.d.ts +97 -0
- package/build/src/testing/factory/node/definition-reload-policy.d.ts.map +1 -0
- package/build/src/testing/factory/node/definition-reload-policy.js +133 -0
- package/build/src/testing/factory/node/load-definitions.d.ts +4 -1
- package/build/src/testing/factory/node/load-definitions.d.ts.map +1 -1
- package/build/src/testing/factory/node/load-definitions.js +27 -4
- package/build/src/testing/test-runner.js +7 -7
- 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/testing/factory/node/definition-reload-policy.js +149 -0
- package/build/testing/factory/node/load-definitions.js +29 -5
- package/build/testing/test-runner.js +6 -6
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/utils/stable-json.js +26 -0
- package/package.json +2 -1
- package/src/background-jobs/main.js +42 -32
- 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/testing/factory/node/definition-reload-policy.js +149 -0
- package/src/testing/factory/node/load-definitions.js +29 -5
- package/src/testing/test-runner.js +6 -6
- 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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"}
|