glasswork 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +57 -1
- package/README.md +3 -0
- package/dist/auth/better-auth-provider.d.ts +11 -3
- package/dist/auth/better-auth-provider.d.ts.map +1 -1
- package/dist/auth/better-auth-provider.js +15 -6
- package/dist/auth/better-auth-provider.js.map +1 -1
- package/dist/auth/middleware.d.ts +1 -1
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +18 -10
- package/dist/auth/middleware.js.map +1 -1
- package/dist/auth/types.d.ts +6 -2
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/core/bootstrap.d.ts.map +1 -1
- package/dist/core/bootstrap.js +16 -7
- package/dist/core/bootstrap.js.map +1 -1
- package/dist/core/module-graph.js +3 -0
- package/dist/core/module-graph.js.map +1 -1
- package/dist/core/request-scope.d.ts +12 -0
- package/dist/core/request-scope.d.ts.map +1 -0
- package/dist/core/request-scope.js +86 -0
- package/dist/core/request-scope.js.map +1 -0
- package/dist/core/route-factory.d.ts +1 -0
- package/dist/core/route-factory.d.ts.map +1 -1
- package/dist/core/types.d.ts +6 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/email/compiler/compiler.d.ts.map +1 -1
- package/dist/email/compiler/compiler.js +69 -17
- package/dist/email/compiler/compiler.js.map +1 -1
- package/dist/email/compiler/tokenizer.js +4 -2
- package/dist/email/compiler/tokenizer.js.map +1 -1
- package/dist/email/compiler/types.d.ts +2 -0
- package/dist/email/compiler/types.d.ts.map +1 -1
- package/dist/email/transports/ses-transport.d.ts +8 -0
- package/dist/email/transports/ses-transport.d.ts.map +1 -1
- package/dist/email/transports/ses-transport.js +132 -25
- package/dist/email/transports/ses-transport.js.map +1 -1
- package/dist/email/webhooks/handler-factory.d.ts +1 -0
- package/dist/email/webhooks/handler-factory.d.ts.map +1 -1
- package/dist/email/webhooks/handler-factory.js +40 -38
- package/dist/email/webhooks/handler-factory.js.map +1 -1
- package/dist/email/webhooks/notification-parser.d.ts +1 -1
- package/dist/email/webhooks/notification-parser.js +1 -1
- package/dist/email/webhooks/signature-verification.d.ts +4 -2
- package/dist/email/webhooks/signature-verification.d.ts.map +1 -1
- package/dist/email/webhooks/signature-verification.js +63 -8
- package/dist/email/webhooks/signature-verification.js.map +1 -1
- package/dist/email/webhooks/subscription-handler.d.ts +4 -2
- package/dist/email/webhooks/subscription-handler.d.ts.map +1 -1
- package/dist/email/webhooks/subscription-handler.js +42 -6
- package/dist/email/webhooks/subscription-handler.js.map +1 -1
- package/dist/email/webhooks/types.d.ts +17 -2
- package/dist/email/webhooks/types.d.ts.map +1 -1
- package/dist/jobs/define-job.d.ts +4 -4
- package/dist/jobs/define-job.d.ts.map +1 -1
- package/dist/jobs/drivers/mock-driver.d.ts.map +1 -1
- package/dist/jobs/drivers/mock-driver.js +11 -1
- package/dist/jobs/drivers/mock-driver.js.map +1 -1
- package/dist/jobs/index.d.ts +2 -2
- package/dist/jobs/index.d.ts.map +1 -1
- package/dist/jobs/index.js +1 -1
- package/dist/jobs/index.js.map +1 -1
- package/dist/jobs/job-service.d.ts +6 -6
- package/dist/jobs/job-service.d.ts.map +1 -1
- package/dist/jobs/job-service.js +8 -0
- package/dist/jobs/job-service.js.map +1 -1
- package/dist/jobs/observability/emf.d.ts +5 -15
- package/dist/jobs/observability/emf.d.ts.map +1 -1
- package/dist/jobs/observability/emf.js +87 -67
- package/dist/jobs/observability/emf.js.map +1 -1
- package/dist/jobs/observability/index.d.ts +2 -4
- package/dist/jobs/observability/index.d.ts.map +1 -1
- package/dist/jobs/observability/index.js +1 -3
- package/dist/jobs/observability/index.js.map +1 -1
- package/dist/jobs/observability/types.d.ts +16 -193
- package/dist/jobs/observability/types.d.ts.map +1 -1
- package/dist/jobs/types.d.ts +4 -4
- package/dist/jobs/types.d.ts.map +1 -1
- package/dist/jobs/worker.d.ts +5 -0
- package/dist/jobs/worker.d.ts.map +1 -1
- package/dist/jobs/worker.js +73 -12
- package/dist/jobs/worker.js.map +1 -1
- package/dist/list-query/builder.d.ts +2 -1
- package/dist/list-query/builder.d.ts.map +1 -1
- package/dist/list-query/builder.js +23 -15
- package/dist/list-query/builder.js.map +1 -1
- package/dist/middleware/rate-limit.d.ts.map +1 -1
- package/dist/middleware/rate-limit.js +60 -92
- package/dist/middleware/rate-limit.js.map +1 -1
- package/dist/openapi/openapi.d.ts +1 -4
- package/dist/openapi/openapi.d.ts.map +1 -1
- package/dist/openapi/openapi.js +15 -35
- package/dist/openapi/openapi.js.map +1 -1
- package/dist/sse/index.d.ts +6 -0
- package/dist/sse/index.d.ts.map +1 -0
- package/dist/sse/index.js +18 -0
- package/dist/sse/index.js.map +1 -0
- package/dist/sse/sse-broadcaster.d.ts +38 -0
- package/dist/sse/sse-broadcaster.d.ts.map +1 -0
- package/dist/sse/sse-broadcaster.js +118 -0
- package/dist/sse/sse-broadcaster.js.map +1 -0
- package/dist/utils/get-client-ip.d.ts.map +1 -1
- package/dist/utils/get-client-ip.js +22 -13
- package/dist/utils/get-client-ip.js.map +1 -1
- package/package.json +11 -3
- package/dist/jobs/observability/client.d.ts +0 -26
- package/dist/jobs/observability/client.d.ts.map +0 -1
- package/dist/jobs/observability/client.js +0 -286
- package/dist/jobs/observability/client.js.map +0 -1
- package/dist/jobs/observability/dashboard.d.ts +0 -19
- package/dist/jobs/observability/dashboard.d.ts.map +0 -1
- package/dist/jobs/observability/dashboard.js +0 -144
- package/dist/jobs/observability/dashboard.js.map +0 -1
- package/dist/jobs/scheduler.d.ts +0 -17
- package/dist/jobs/scheduler.d.ts.map +0 -1
- package/dist/jobs/scheduler.js +0 -83
- package/dist/jobs/scheduler.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ses-transport.js","sourceRoot":"","sources":["../../../src/email/transports/ses-transport.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ses-transport.js","sourceRoot":"","sources":["../../../src/email/transports/ses-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ import type { CreateWebhookHandlerOptions } from './types.js';
|
|
|
13
13
|
*
|
|
14
14
|
* router.post('/webhooks/ses',
|
|
15
15
|
* createSESWebhookHandler({
|
|
16
|
+
* allowedTopicArns: ['arn:aws:sns:eu-west-1:123456789012:email-events'],
|
|
16
17
|
* onDelivered: async (event, c) => {
|
|
17
18
|
* const logger = c.get('logger');
|
|
18
19
|
* logger.info({ messageId: event.messageId }, 'Email delivered');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler-factory.d.ts","sourceRoot":"","sources":["../../../src/email/webhooks/handler-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAKvD,OAAO,KAAK,EAGV,2BAA2B,EAG5B,MAAM,YAAY,CAAC;AAIpB
|
|
1
|
+
{"version":3,"file":"handler-factory.d.ts","sourceRoot":"","sources":["../../../src/email/webhooks/handler-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAKvD,OAAO,KAAK,EAGV,2BAA2B,EAG5B,MAAM,YAAY,CAAC;AAIpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,2BAAgC,GACxC,iBAAiB,CA8CnB"}
|
|
@@ -16,6 +16,7 @@ const logger = createLogger('SES Webhook');
|
|
|
16
16
|
*
|
|
17
17
|
* router.post('/webhooks/ses',
|
|
18
18
|
* createSESWebhookHandler({
|
|
19
|
+
* allowedTopicArns: ['arn:aws:sns:eu-west-1:123456789012:email-events'],
|
|
19
20
|
* onDelivered: async (event, c) => {
|
|
20
21
|
* const logger = c.get('logger');
|
|
21
22
|
* logger.info({ messageId: event.messageId }, 'Email delivered');
|
|
@@ -41,14 +42,20 @@ const logger = createLogger('SES Webhook');
|
|
|
41
42
|
* ```
|
|
42
43
|
*/
|
|
43
44
|
export function createSESWebhookHandler(options = {}) {
|
|
44
|
-
const { verifySignature =
|
|
45
|
+
const { verifySignature = true, allowedTopicArns, signatureOptions, subscriptionOptions, onDelivered, onBounced, onComplaint, } = options;
|
|
46
|
+
if (verifySignature && (!allowedTopicArns || allowedTopicArns.length === 0)) {
|
|
47
|
+
throw new Error('createSESWebhookHandler requires at least one allowed SNS topic ARN when signature verification is enabled');
|
|
48
|
+
}
|
|
45
49
|
return async (c, _next) => {
|
|
46
|
-
// Step 1: Verify signature (
|
|
47
|
-
const verifyResult = await handleSignatureVerification(c, verifySignature,
|
|
50
|
+
// Step 1: Verify signature (enabled by default in every environment)
|
|
51
|
+
const verifyResult = await handleSignatureVerification(c, verifySignature, {
|
|
52
|
+
...signatureOptions,
|
|
53
|
+
allowedTopicArns: allowedTopicArns ?? [],
|
|
54
|
+
});
|
|
48
55
|
if (verifyResult)
|
|
49
56
|
return verifyResult;
|
|
50
57
|
// Step 2: Handle subscription confirmations
|
|
51
|
-
const subscriptionResult = await handleSubscriptionConfirmation(c);
|
|
58
|
+
const subscriptionResult = await handleSubscriptionConfirmation(c, subscriptionOptions);
|
|
52
59
|
if (subscriptionResult)
|
|
53
60
|
return subscriptionResult;
|
|
54
61
|
// Step 3: Parse the SES event
|
|
@@ -58,7 +65,13 @@ export function createSESWebhookHandler(options = {}) {
|
|
|
58
65
|
return c.json({ received: true }, 200);
|
|
59
66
|
}
|
|
60
67
|
// Step 4: Route to the appropriate handler
|
|
61
|
-
|
|
68
|
+
try {
|
|
69
|
+
await routeSESEvent(event, c, { onDelivered, onBounced, onComplaint });
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
logger.error('SES event processing failed:', error);
|
|
73
|
+
return c.json({ error: 'Event processing failed' }, 503);
|
|
74
|
+
}
|
|
62
75
|
return c.json({ received: true }, 200);
|
|
63
76
|
};
|
|
64
77
|
}
|
|
@@ -84,53 +97,42 @@ async function handleSignatureVerification(c, verifySignature, signatureOptions)
|
|
|
84
97
|
/**
|
|
85
98
|
* Handles subscription confirmation step
|
|
86
99
|
*/
|
|
87
|
-
async function handleSubscriptionConfirmation(c) {
|
|
88
|
-
const subscriptionMiddleware = handleSNSSubscription();
|
|
100
|
+
async function handleSubscriptionConfirmation(c, options) {
|
|
101
|
+
const subscriptionMiddleware = handleSNSSubscription(options);
|
|
89
102
|
return await runMiddleware(subscriptionMiddleware, c);
|
|
90
103
|
}
|
|
91
104
|
/**
|
|
92
105
|
* Routes SES events to appropriate handlers
|
|
93
106
|
*/
|
|
94
107
|
async function routeSESEvent(event, c, handlers) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
break;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
catch (error) {
|
|
115
|
-
logger.error('Handler error:', error);
|
|
116
|
-
// Don't fail the request - we don't want SNS to retry indefinitely
|
|
117
|
-
// The error is logged and can be tracked
|
|
108
|
+
switch (event.type) {
|
|
109
|
+
case 'delivered':
|
|
110
|
+
if (handlers.onDelivered) {
|
|
111
|
+
await handlers.onDelivered(event, c);
|
|
112
|
+
}
|
|
113
|
+
break;
|
|
114
|
+
case 'bounced':
|
|
115
|
+
if (handlers.onBounced) {
|
|
116
|
+
await handlers.onBounced(event, c);
|
|
117
|
+
}
|
|
118
|
+
break;
|
|
119
|
+
case 'complaint':
|
|
120
|
+
if (handlers.onComplaint) {
|
|
121
|
+
await handlers.onComplaint(event, c);
|
|
122
|
+
}
|
|
123
|
+
break;
|
|
118
124
|
}
|
|
119
125
|
}
|
|
120
126
|
/**
|
|
121
127
|
* Helper to run middleware and capture early responses
|
|
122
128
|
*/
|
|
123
129
|
async function runMiddleware(middleware, c) {
|
|
124
|
-
let earlyResponse;
|
|
125
130
|
let nextCalled = false;
|
|
126
|
-
await middleware(c, async () => {
|
|
131
|
+
const response = await middleware(c, async () => {
|
|
127
132
|
nextCalled = true;
|
|
128
133
|
});
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
earlyResponse = c.res;
|
|
133
|
-
}
|
|
134
|
-
return earlyResponse;
|
|
134
|
+
if (nextCalled)
|
|
135
|
+
return undefined;
|
|
136
|
+
return response instanceof Response ? response : c.res;
|
|
135
137
|
}
|
|
136
138
|
//# sourceMappingURL=handler-factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler-factory.js","sourceRoot":"","sources":["../../../src/email/webhooks/handler-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AASlE,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;AAE3C
|
|
1
|
+
{"version":3,"file":"handler-factory.js","sourceRoot":"","sources":["../../../src/email/webhooks/handler-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AASlE,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAO,GAAgC,EAAE;IAEzC,MAAM,EACJ,eAAe,GAAG,IAAI,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,SAAS,EACT,WAAW,GACZ,GAAG,OAAO,CAAC;IAEZ,IAAI,eAAe,IAAI,CAAC,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;QACxB,qEAAqE;QACrE,MAAM,YAAY,GAAG,MAAM,2BAA2B,CAAC,CAAC,EAAE,eAAe,EAAE;YACzE,GAAG,gBAAgB;YACnB,gBAAgB,EAAE,gBAAgB,IAAI,EAAE;SACzC,CAAC,CAAC;QACH,IAAI,YAAY;YAAE,OAAO,YAAY,CAAC;QAEtC,4CAA4C;QAC5C,MAAM,kBAAkB,GAAG,MAAM,8BAA8B,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;QACxF,IAAI,kBAAkB;YAAE,OAAO,kBAAkB,CAAC;QAElD,8BAA8B;QAC9B,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,uDAAuD;YACvD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC;QAED,2CAA2C;QAC3C,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACpD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,2BAA2B,CACxC,CAAU,EACV,eAAwB,EACxB,gBAA0D;IAE1D,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QAC9D,OAAO,MAAM,aAAa,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,iDAAiD;IACjD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAChC,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,8BAA8B,CAC3C,CAAU,EACV,OAAqD;IAErD,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC9D,OAAO,MAAM,aAAa,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,KAAe,EACf,CAAU,EACV,QAIC;IAED,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,WAAW;YACd,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACzB,MAAM,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACvC,CAAC;YACD,MAAM;QACR,KAAK,SAAS;YACZ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACvB,MAAM,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,MAAM;QACR,KAAK,WAAW;YACd,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACzB,MAAM,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACvC,CAAC;YACD,MAAM;IACV,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,UAA6B,EAC7B,CAAU;IAEV,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;QAC9C,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,IAAI,UAAU;QAAE,OAAO,SAAS,CAAC;IACjC,OAAO,QAAQ,YAAY,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACzD,CAAC"}
|
|
@@ -11,7 +11,7 @@ import type { SESEvent, SNSMessage } from './types.js';
|
|
|
11
11
|
* import { parseSESNotification, verifySNSSignature, handleSNSSubscription } from 'glasswork/email';
|
|
12
12
|
*
|
|
13
13
|
* router.post('/webhooks/ses',
|
|
14
|
-
* verifySNSSignature(),
|
|
14
|
+
* verifySNSSignature({ allowedTopicArns: [process.env.SNS_TOPIC_ARN!] }),
|
|
15
15
|
* handleSNSSubscription(),
|
|
16
16
|
* async (c) => {
|
|
17
17
|
* const event = await parseSESNotification(c);
|
|
@@ -11,7 +11,7 @@ const logger = createLogger('SES');
|
|
|
11
11
|
* import { parseSESNotification, verifySNSSignature, handleSNSSubscription } from 'glasswork/email';
|
|
12
12
|
*
|
|
13
13
|
* router.post('/webhooks/ses',
|
|
14
|
-
* verifySNSSignature(),
|
|
14
|
+
* verifySNSSignature({ allowedTopicArns: [process.env.SNS_TOPIC_ARN!] }),
|
|
15
15
|
* handleSNSSubscription(),
|
|
16
16
|
* async (c) => {
|
|
17
17
|
* const event = await parseSESNotification(c);
|
|
@@ -21,7 +21,9 @@ export declare function buildStringToSign(message: SNSMessage): string;
|
|
|
21
21
|
* import { verifySNSSignature } from 'glasswork/email';
|
|
22
22
|
*
|
|
23
23
|
* router.post('/webhooks/ses',
|
|
24
|
-
* verifySNSSignature(
|
|
24
|
+
* verifySNSSignature({
|
|
25
|
+
* allowedTopicArns: ['arn:aws:sns:eu-west-1:123456789012:email-events'],
|
|
26
|
+
* }),
|
|
25
27
|
* async (c) => {
|
|
26
28
|
* // Message is verified to be from AWS SNS
|
|
27
29
|
* const body = await c.req.json();
|
|
@@ -30,7 +32,7 @@ export declare function buildStringToSign(message: SNSMessage): string;
|
|
|
30
32
|
* );
|
|
31
33
|
* ```
|
|
32
34
|
*/
|
|
33
|
-
export declare function verifySNSSignature(options
|
|
35
|
+
export declare function verifySNSSignature(options: VerifySignatureOptions): MiddlewareHandler;
|
|
34
36
|
/**
|
|
35
37
|
* Clears the certificate cache (useful for testing)
|
|
36
38
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signature-verification.d.ts","sourceRoot":"","sources":["../../../src/email/webhooks/signature-verification.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"signature-verification.d.ts","sourceRoot":"","sources":["../../../src/email/webhooks/signature-verification.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAwGrE;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAmC7D;AAqBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,GAAG,iBAAiB,CAyDrF;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
|
|
@@ -9,6 +9,9 @@ const certCache = new Map();
|
|
|
9
9
|
* Default certificate cache TTL (1 hour)
|
|
10
10
|
*/
|
|
11
11
|
const DEFAULT_CERT_CACHE_TTL = 60 * 60 * 1000;
|
|
12
|
+
const DEFAULT_FETCH_TIMEOUT_MS = 5_000;
|
|
13
|
+
const MAX_CERTIFICATE_LENGTH = 64 * 1024;
|
|
14
|
+
const MAX_CACHED_CERTIFICATES = 100;
|
|
12
15
|
/**
|
|
13
16
|
* AWS SNS certificate domain pattern
|
|
14
17
|
*/
|
|
@@ -21,7 +24,12 @@ function isValidCertUrl(url) {
|
|
|
21
24
|
const parsed = new URL(url);
|
|
22
25
|
return (parsed.protocol === 'https:' &&
|
|
23
26
|
SNS_CERT_DOMAIN_PATTERN.test(parsed.hostname) &&
|
|
24
|
-
parsed.pathname.endsWith('.pem')
|
|
27
|
+
parsed.pathname.endsWith('.pem') &&
|
|
28
|
+
!parsed.username &&
|
|
29
|
+
!parsed.password &&
|
|
30
|
+
!parsed.search &&
|
|
31
|
+
!parsed.hash &&
|
|
32
|
+
(parsed.port === '' || parsed.port === '443'));
|
|
25
33
|
}
|
|
26
34
|
catch {
|
|
27
35
|
return false;
|
|
@@ -32,23 +40,59 @@ function isValidCertUrl(url) {
|
|
|
32
40
|
*/
|
|
33
41
|
async function fetchCertificate(certUrl, options) {
|
|
34
42
|
const now = Date.now();
|
|
43
|
+
for (const [key, entry] of certCache) {
|
|
44
|
+
if (entry.expiresAt <= now)
|
|
45
|
+
certCache.delete(key);
|
|
46
|
+
}
|
|
35
47
|
const cached = certCache.get(certUrl);
|
|
36
48
|
if (cached && cached.expiresAt > now) {
|
|
37
49
|
return cached.cert;
|
|
38
50
|
}
|
|
39
51
|
const fetchFn = options.fetchFn || fetch;
|
|
40
|
-
const response = await fetchFn(certUrl
|
|
52
|
+
const response = await fetchFn(certUrl, {
|
|
53
|
+
redirect: 'error',
|
|
54
|
+
signal: AbortSignal.timeout(options.fetchTimeoutMs ?? DEFAULT_FETCH_TIMEOUT_MS),
|
|
55
|
+
});
|
|
41
56
|
if (!response.ok) {
|
|
42
57
|
throw new Error(`Failed to fetch SNS certificate: ${response.status}`);
|
|
43
58
|
}
|
|
44
|
-
const cert = await response
|
|
59
|
+
const cert = await readCertificate(response);
|
|
45
60
|
const ttl = options.certCacheTTL ?? DEFAULT_CERT_CACHE_TTL;
|
|
61
|
+
while (certCache.size >= MAX_CACHED_CERTIFICATES) {
|
|
62
|
+
const oldest = certCache.keys().next().value;
|
|
63
|
+
if (oldest !== undefined)
|
|
64
|
+
certCache.delete(oldest);
|
|
65
|
+
}
|
|
46
66
|
certCache.set(certUrl, {
|
|
47
67
|
cert,
|
|
48
68
|
expiresAt: now + ttl,
|
|
49
69
|
});
|
|
50
70
|
return cert;
|
|
51
71
|
}
|
|
72
|
+
async function readCertificate(response) {
|
|
73
|
+
const reader = response.body?.getReader();
|
|
74
|
+
if (!reader)
|
|
75
|
+
throw new Error('Empty SNS signing certificate response');
|
|
76
|
+
const chunks = [];
|
|
77
|
+
let length = 0;
|
|
78
|
+
try {
|
|
79
|
+
while (true) {
|
|
80
|
+
const chunk = await reader.read();
|
|
81
|
+
if (chunk.done)
|
|
82
|
+
break;
|
|
83
|
+
length += chunk.value.byteLength;
|
|
84
|
+
if (length > MAX_CERTIFICATE_LENGTH) {
|
|
85
|
+
await reader.cancel();
|
|
86
|
+
throw new Error('SNS signing certificate is too large');
|
|
87
|
+
}
|
|
88
|
+
chunks.push(chunk.value);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
reader.releaseLock();
|
|
93
|
+
}
|
|
94
|
+
return Buffer.concat(chunks).toString('utf8');
|
|
95
|
+
}
|
|
52
96
|
/**
|
|
53
97
|
* Builds the canonical string to sign for SNS message verification
|
|
54
98
|
*
|
|
@@ -99,8 +143,8 @@ function verifySignature(message, certificate) {
|
|
|
99
143
|
const stringToSign = buildStringToSign(message);
|
|
100
144
|
// Extract public key from X.509 certificate
|
|
101
145
|
const publicKey = createPublicKey(certificate);
|
|
102
|
-
|
|
103
|
-
const verify = createVerify(
|
|
146
|
+
const algorithm = message.SignatureVersion === '2' ? 'SHA256' : 'SHA1';
|
|
147
|
+
const verify = createVerify(algorithm);
|
|
104
148
|
verify.update(stringToSign);
|
|
105
149
|
verify.end();
|
|
106
150
|
return verify.verify(publicKey, message.Signature, 'base64');
|
|
@@ -121,7 +165,9 @@ function verifySignature(message, certificate) {
|
|
|
121
165
|
* import { verifySNSSignature } from 'glasswork/email';
|
|
122
166
|
*
|
|
123
167
|
* router.post('/webhooks/ses',
|
|
124
|
-
* verifySNSSignature(
|
|
168
|
+
* verifySNSSignature({
|
|
169
|
+
* allowedTopicArns: ['arn:aws:sns:eu-west-1:123456789012:email-events'],
|
|
170
|
+
* }),
|
|
125
171
|
* async (c) => {
|
|
126
172
|
* // Message is verified to be from AWS SNS
|
|
127
173
|
* const body = await c.req.json();
|
|
@@ -130,7 +176,11 @@ function verifySignature(message, certificate) {
|
|
|
130
176
|
* );
|
|
131
177
|
* ```
|
|
132
178
|
*/
|
|
133
|
-
export function verifySNSSignature(options
|
|
179
|
+
export function verifySNSSignature(options) {
|
|
180
|
+
if (options.allowedTopicArns.length === 0) {
|
|
181
|
+
throw new Error('verifySNSSignature requires at least one allowed SNS topic ARN');
|
|
182
|
+
}
|
|
183
|
+
const allowedTopicArns = new Set(options.allowedTopicArns);
|
|
134
184
|
return async (c, next) => {
|
|
135
185
|
// Clone the request to read the body without consuming it
|
|
136
186
|
const body = await c.req.text();
|
|
@@ -142,9 +192,14 @@ export function verifySNSSignature(options = {}) {
|
|
|
142
192
|
return c.json({ error: 'Invalid JSON body' }, 400);
|
|
143
193
|
}
|
|
144
194
|
// Validate signature version
|
|
145
|
-
if (message.SignatureVersion !== '1') {
|
|
195
|
+
if (message.SignatureVersion !== '1' && message.SignatureVersion !== '2') {
|
|
146
196
|
return c.json({ error: 'Unsupported signature version' }, 400);
|
|
147
197
|
}
|
|
198
|
+
// A valid SNS signature only proves who signed the message. Restricting the
|
|
199
|
+
// topic prevents other AWS customers from sending valid messages here.
|
|
200
|
+
if (!allowedTopicArns.has(message.TopicArn)) {
|
|
201
|
+
return c.json({ error: 'Unexpected SNS topic' }, 403);
|
|
202
|
+
}
|
|
148
203
|
// Validate certificate URL
|
|
149
204
|
if (!isValidCertUrl(message.SigningCertURL)) {
|
|
150
205
|
return c.json({ error: 'Invalid certificate URL' }, 400);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signature-verification.js","sourceRoot":"","sources":["../../../src/email/webhooks/signature-verification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;AAEnC;;GAEG;AACH,MAAM,SAAS,GAAG,IAAI,GAAG,EAA+C,CAAC;AAEzE;;GAEG;AACH,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"signature-verification.js","sourceRoot":"","sources":["../../../src/email/webhooks/signature-verification.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,8 @@ export interface HandleSubscriptionOptions {
|
|
|
7
7
|
fetchFn?: typeof fetch;
|
|
8
8
|
/** Whether to auto-confirm subscriptions (default: true) */
|
|
9
9
|
autoConfirm?: boolean;
|
|
10
|
+
/** Maximum time for the confirmation request (default: 5 seconds) */
|
|
11
|
+
confirmationTimeoutMs?: number;
|
|
10
12
|
}
|
|
11
13
|
/**
|
|
12
14
|
* Middleware that automatically handles SNS subscription confirmations.
|
|
@@ -15,7 +17,7 @@ export interface HandleSubscriptionOptions {
|
|
|
15
17
|
* SubscriptionConfirmation message that must be confirmed by visiting
|
|
16
18
|
* the SubscribeURL. This middleware handles that automatically.
|
|
17
19
|
*
|
|
18
|
-
* Should be used after `verifySNSSignature()` to ensure the confirmation
|
|
20
|
+
* Should be used after `verifySNSSignature({ allowedTopicArns })` to ensure the confirmation
|
|
19
21
|
* request is genuine.
|
|
20
22
|
*
|
|
21
23
|
* @example
|
|
@@ -23,7 +25,7 @@ export interface HandleSubscriptionOptions {
|
|
|
23
25
|
* import { verifySNSSignature, handleSNSSubscription } from 'glasswork/email';
|
|
24
26
|
*
|
|
25
27
|
* router.post('/webhooks/ses',
|
|
26
|
-
* verifySNSSignature(),
|
|
28
|
+
* verifySNSSignature({ allowedTopicArns: [process.env.SNS_TOPIC_ARN!] }),
|
|
27
29
|
* handleSNSSubscription(),
|
|
28
30
|
* async (c) => {
|
|
29
31
|
* // This only runs for actual notifications, not subscription confirmations
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription-handler.d.ts","sourceRoot":"","sources":["../../../src/email/webhooks/subscription-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAMvD;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,wCAAwC;IACxC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"subscription-handler.d.ts","sourceRoot":"","sources":["../../../src/email/webhooks/subscription-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAMvD;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,wCAAwC;IACxC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qEAAqE;IACrE,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAID;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,yBAA8B,GAAG,iBAAiB,CAiChG"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createLogger } from '../../utils/logger.js';
|
|
2
2
|
const logger = createLogger('SNS');
|
|
3
|
+
const DEFAULT_CONFIRMATION_TIMEOUT_MS = 5_000;
|
|
3
4
|
/**
|
|
4
5
|
* Middleware that automatically handles SNS subscription confirmations.
|
|
5
6
|
*
|
|
@@ -7,7 +8,7 @@ const logger = createLogger('SNS');
|
|
|
7
8
|
* SubscriptionConfirmation message that must be confirmed by visiting
|
|
8
9
|
* the SubscribeURL. This middleware handles that automatically.
|
|
9
10
|
*
|
|
10
|
-
* Should be used after `verifySNSSignature()` to ensure the confirmation
|
|
11
|
+
* Should be used after `verifySNSSignature({ allowedTopicArns })` to ensure the confirmation
|
|
11
12
|
* request is genuine.
|
|
12
13
|
*
|
|
13
14
|
* @example
|
|
@@ -15,7 +16,7 @@ const logger = createLogger('SNS');
|
|
|
15
16
|
* import { verifySNSSignature, handleSNSSubscription } from 'glasswork/email';
|
|
16
17
|
*
|
|
17
18
|
* router.post('/webhooks/ses',
|
|
18
|
-
* verifySNSSignature(),
|
|
19
|
+
* verifySNSSignature({ allowedTopicArns: [process.env.SNS_TOPIC_ARN!] }),
|
|
19
20
|
* handleSNSSubscription(),
|
|
20
21
|
* async (c) => {
|
|
21
22
|
* // This only runs for actual notifications, not subscription confirmations
|
|
@@ -26,7 +27,7 @@ const logger = createLogger('SNS');
|
|
|
26
27
|
* ```
|
|
27
28
|
*/
|
|
28
29
|
export function handleSNSSubscription(options = {}) {
|
|
29
|
-
const { fetchFn = fetch, autoConfirm = true } = options;
|
|
30
|
+
const { fetchFn = fetch, autoConfirm = true, confirmationTimeoutMs = DEFAULT_CONFIRMATION_TIMEOUT_MS, } = options;
|
|
30
31
|
return async (c, next) => {
|
|
31
32
|
const message = await getSNSMessage(c);
|
|
32
33
|
if (!message) {
|
|
@@ -34,7 +35,7 @@ export function handleSNSSubscription(options = {}) {
|
|
|
34
35
|
}
|
|
35
36
|
// Handle subscription confirmation
|
|
36
37
|
if (message.Type === 'SubscriptionConfirmation') {
|
|
37
|
-
const result = await handleSubscriptionConfirmation(c, message, autoConfirm, fetchFn);
|
|
38
|
+
const result = await handleSubscriptionConfirmation(c, message, autoConfirm, fetchFn, confirmationTimeoutMs);
|
|
38
39
|
if (result)
|
|
39
40
|
return result;
|
|
40
41
|
}
|
|
@@ -65,7 +66,7 @@ async function getSNSMessage(c) {
|
|
|
65
66
|
/**
|
|
66
67
|
* Handles subscription confirmation
|
|
67
68
|
*/
|
|
68
|
-
async function handleSubscriptionConfirmation(c, message, autoConfirm, fetchFn) {
|
|
69
|
+
async function handleSubscriptionConfirmation(c, message, autoConfirm, fetchFn, confirmationTimeoutMs) {
|
|
69
70
|
if (!autoConfirm) {
|
|
70
71
|
logger.info('Subscription confirmation received but auto-confirm disabled');
|
|
71
72
|
return c.json({ message: 'Subscription confirmation received' }, 200);
|
|
@@ -74,9 +75,16 @@ async function handleSubscriptionConfirmation(c, message, autoConfirm, fetchFn)
|
|
|
74
75
|
logger.error('Subscription confirmation missing SubscribeURL');
|
|
75
76
|
return c.json({ error: 'Missing SubscribeURL' }, 400);
|
|
76
77
|
}
|
|
78
|
+
if (!isValidSubscribeUrl(message.SubscribeURL, message)) {
|
|
79
|
+
logger.error('Subscription confirmation has an invalid SubscribeURL');
|
|
80
|
+
return c.json({ error: 'Invalid SubscribeURL' }, 400);
|
|
81
|
+
}
|
|
77
82
|
try {
|
|
78
83
|
logger.info('Confirming subscription to:', message.TopicArn);
|
|
79
|
-
const response = await fetchFn(message.SubscribeURL
|
|
84
|
+
const response = await fetchFn(message.SubscribeURL, {
|
|
85
|
+
redirect: 'error',
|
|
86
|
+
signal: AbortSignal.timeout(confirmationTimeoutMs),
|
|
87
|
+
});
|
|
80
88
|
if (!response.ok) {
|
|
81
89
|
logger.error('Failed to confirm subscription:', response.status);
|
|
82
90
|
return c.json({ error: 'Failed to confirm subscription' }, 500);
|
|
@@ -89,6 +97,34 @@ async function handleSubscriptionConfirmation(c, message, autoConfirm, fetchFn)
|
|
|
89
97
|
return c.json({ error: 'Failed to confirm subscription' }, 500);
|
|
90
98
|
}
|
|
91
99
|
}
|
|
100
|
+
function isValidSubscribeUrl(value, message) {
|
|
101
|
+
try {
|
|
102
|
+
const url = new URL(value);
|
|
103
|
+
const arn = message.TopicArn.split(':');
|
|
104
|
+
const partition = arn[1];
|
|
105
|
+
const service = arn[2];
|
|
106
|
+
const region = arn[3];
|
|
107
|
+
if (!partition || service !== 'sns' || !region)
|
|
108
|
+
return false;
|
|
109
|
+
const suffix = partition === 'aws-cn' ? 'amazonaws.com.cn' : 'amazonaws.com';
|
|
110
|
+
const expectedHostname = `sns.${region}.${suffix}`;
|
|
111
|
+
if (url.protocol !== 'https:' ||
|
|
112
|
+
url.hostname !== expectedHostname ||
|
|
113
|
+
(url.port !== '' && url.port !== '443') ||
|
|
114
|
+
url.username !== '' ||
|
|
115
|
+
url.password !== '' ||
|
|
116
|
+
url.pathname !== '/' ||
|
|
117
|
+
url.searchParams.get('Action') !== 'ConfirmSubscription') {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
const token = url.searchParams.get('Token');
|
|
121
|
+
const topicArn = url.searchParams.get('TopicArn');
|
|
122
|
+
return (!token || token === message.Token) && (!topicArn || topicArn === message.TopicArn);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
92
128
|
/**
|
|
93
129
|
* Handles unsubscribe confirmation
|
|
94
130
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription-handler.js","sourceRoot":"","sources":["../../../src/email/webhooks/subscription-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"subscription-handler.js","sourceRoot":"","sources":["../../../src/email/webhooks/subscription-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -157,8 +157,12 @@ export type SESNotification = SESDeliveryNotification | SESBounceNotification |
|
|
|
157
157
|
* Options for SNS signature verification
|
|
158
158
|
*/
|
|
159
159
|
export interface VerifySignatureOptions {
|
|
160
|
+
/** SNS topic ARNs that this endpoint accepts */
|
|
161
|
+
allowedTopicArns: readonly string[];
|
|
160
162
|
/** Cache TTL for signing certificates in milliseconds (default: 1 hour) */
|
|
161
163
|
certCacheTTL?: number;
|
|
164
|
+
/** Maximum time for fetching a signing certificate (default: 5 seconds) */
|
|
165
|
+
fetchTimeoutMs?: number;
|
|
162
166
|
/** Custom fetch function for testing */
|
|
163
167
|
fetchFn?: typeof fetch;
|
|
164
168
|
}
|
|
@@ -178,10 +182,21 @@ export interface SESWebhookHandlers {
|
|
|
178
182
|
* Options for the webhook handler factory
|
|
179
183
|
*/
|
|
180
184
|
export interface CreateWebhookHandlerOptions extends SESWebhookHandlers {
|
|
181
|
-
/** Whether to verify SNS signatures (default: true in
|
|
185
|
+
/** Whether to verify SNS signatures (default: true in every environment) */
|
|
182
186
|
verifySignature?: boolean;
|
|
187
|
+
/** SNS topic ARNs accepted when signature verification is enabled */
|
|
188
|
+
allowedTopicArns?: readonly string[];
|
|
183
189
|
/** Options for signature verification */
|
|
184
|
-
signatureOptions?: VerifySignatureOptions
|
|
190
|
+
signatureOptions?: Omit<VerifySignatureOptions, 'allowedTopicArns'>;
|
|
191
|
+
/** Options for handling SNS subscription confirmations */
|
|
192
|
+
subscriptionOptions?: {
|
|
193
|
+
/** Whether to confirm subscriptions automatically (default: true) */
|
|
194
|
+
autoConfirm?: boolean;
|
|
195
|
+
/** Maximum time for the confirmation request (default: 5 seconds) */
|
|
196
|
+
confirmationTimeoutMs?: number;
|
|
197
|
+
/** Custom fetch function for testing */
|
|
198
|
+
fetchFn?: typeof fetch;
|
|
199
|
+
};
|
|
185
200
|
}
|
|
186
201
|
export {};
|
|
187
202
|
//# sourceMappingURL=types.d.ts.map
|