@molecule/api-emails-inbound-ses 1.0.2 → 1.1.1

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 CHANGED
@@ -3,7 +3,7 @@ AUTO-GENERATED — DO NOT EDIT THIS FILE.
3
3
  Generated by `mlcl sync-docs` from the package's src/index.ts JSDoc + mlcl/registry.json.
4
4
  Edits here are overwritten on the next commit (molecule's pre-commit hook regenerates).
5
5
  To change this document, edit the module-level JSDoc in src/index.ts.
6
- Generated: 2026-08-04T01:48:03.682Z
6
+ Generated: 2026-09-18T06:05:34.971Z
7
7
  -->
8
8
 
9
9
  # @molecule/api-emails-inbound-ses
@@ -381,7 +381,12 @@ interface SnsNotificationPayload {
381
381
  /** A unique UUID for the message. */
382
382
  MessageId: string
383
383
 
384
- /** The notification topic ARN. */
384
+ /**
385
+ * The notification topic ARN. Its account-id field is part of the
386
+ * SNS-signed canonical string, so after signature verification it is an
387
+ * attested publisher identity — the source used for
388
+ * `AWS_SES_INBOUND_ACCOUNT_ID` pinning.
389
+ */
385
390
  TopicArn?: string
386
391
 
387
392
  /**
@@ -401,7 +406,11 @@ interface SnsNotificationPayload {
401
406
  /** Base64-encoded signature over the canonical string. */
402
407
  Signature: string
403
408
 
404
- /** URL of the X.509 PEM cert used to sign the message. */
409
+ /**
410
+ * URL of the X.509 PEM cert used to sign the message. Must be HTTPS on an
411
+ * allowlisted `*.amazonaws.com` host; a 12-digit account-id path segment,
412
+ * when present, participates in `AWS_SES_INBOUND_ACCOUNT_ID` pinning.
413
+ */
405
414
  SigningCertURL: string
406
415
 
407
416
  /** Confirmation token (only on SubscriptionConfirmation messages). */
@@ -651,17 +660,27 @@ Verifies the signature of an SNS notification payload. Implements the
651
660
  AWS SNS signature-verification flow:
652
661
 
653
662
  1. Parse the JSON body.
654
- 2. Reject if `SigningCertURL` is not from an allowlisted host.
655
- 3. Fetch the X.509 certificate from `SigningCertURL`.
656
- 4. Build the canonical string per AWS docs (field order varies by
663
+ 2. PIN THE PUBLISHER (fail-closed): accept the notification only when
664
+ EITHER `AWS_SES_INBOUND_TOPIC_ARN` is configured and matches the
665
+ payload's `TopicArn`, OR `AWS_SES_INBOUND_ACCOUNT_ID` is configured
666
+ and matches the AWS account id carried by the notification (the 12-digit
667
+ segment of the `SigningCertURL` path, or the account field of the
668
+ SIGNED `TopicArn`). When NEITHER is configured, verification THROWS a
669
+ tagged `config.notConfigured` error — a valid AWS signature only proves
670
+ that _some_ AWS account published the message (the cert-hostname
671
+ allowlist admits every `sns.<region>.amazonaws.com` cert), so without
672
+ a pin ANY AWS account that can publish to SNS can forge inbound mail.
673
+ 3. Reject if `SigningCertURL` is not from an allowlisted host.
674
+ 4. Fetch the X.509 certificate from `SigningCertURL`.
675
+ 5. Build the canonical string per AWS docs (field order varies by
657
676
  `Type`).
658
- 5. Verify the base64-decoded `Signature` against the canonical string
677
+ 6. Verify the base64-decoded `Signature` against the canonical string
659
678
  using SHA1 (`SignatureVersion === '1'`) or SHA256
660
679
  (`SignatureVersion === '2'`).
661
- 6. When `AWS_SES_INBOUND_TOPIC_ARN` is set, also verify the payload's
662
- `TopicArn` matches.
663
680
 
664
681
  Errors NEVER leak signing material; failures simply return `false`.
682
+ The ONLY throw is the misconfiguration error from step 2 (distinct
683
+ failure class per the `InboundEmailProvider` contract).
665
684
 
666
685
  ```typescript
667
686
  function verifySignature(
@@ -761,6 +780,20 @@ Peer dependencies:
761
780
  - `@molecule/api-secrets`
762
781
  - `mailparser`
763
782
 
783
+ Verification is FAIL-CLOSED on publisher identity. An SNS signature only
784
+ proves that _some_ AWS account published the message — the
785
+ `*.amazonaws.com` cert-hostname allowlist admits every AWS account's
786
+ signing cert — so a notification is accepted only when it is pinned to
787
+ YOUR infrastructure: either `AWS_SES_INBOUND_TOPIC_ARN` is set and
788
+ exactly matches the payload's `TopicArn`, or
789
+ `AWS_SES_INBOUND_ACCOUNT_ID` is set and matches the publisher's 12-digit
790
+ AWS account id (read from the `SigningCertURL` path or the account field
791
+ of the SNS-signed `TopicArn`). When NEITHER is configured,
792
+ `verifySignature` throws a tagged `config.notConfigured` (503) error
793
+ instead of accepting any validly-signed SNS message — without a pin, any
794
+ AWS account could forge inbound mail into your app. Configure at least
795
+ one of the two in `api/.env`; the topic ARN is the tighter pin.
796
+
764
797
  The (uncached) signing-certificate fetch is bounded to a 5 second
765
798
  timeout — a hanging/slow `SigningCertURL` endpoint fails fast into a
766
799
  `false` verification result instead of stalling the webhook handler for
package/dist/index.d.ts CHANGED
@@ -12,6 +12,20 @@
12
12
  * reimplement SMTP / SES SendEmail.
13
13
  *
14
14
  * @remarks
15
+ * Verification is FAIL-CLOSED on publisher identity. An SNS signature only
16
+ * proves that *some* AWS account published the message — the
17
+ * `*.amazonaws.com` cert-hostname allowlist admits every AWS account's
18
+ * signing cert — so a notification is accepted only when it is pinned to
19
+ * YOUR infrastructure: either `AWS_SES_INBOUND_TOPIC_ARN` is set and
20
+ * exactly matches the payload's `TopicArn`, or
21
+ * `AWS_SES_INBOUND_ACCOUNT_ID` is set and matches the publisher's 12-digit
22
+ * AWS account id (read from the `SigningCertURL` path or the account field
23
+ * of the SNS-signed `TopicArn`). When NEITHER is configured,
24
+ * `verifySignature` throws a tagged `config.notConfigured` (503) error
25
+ * instead of accepting any validly-signed SNS message — without a pin, any
26
+ * AWS account could forge inbound mail into your app. Configure at least
27
+ * one of the two in `api/.env`; the topic ARN is the tighter pin.
28
+ *
15
29
  * The (uncached) signing-certificate fetch is bounded to a 5 second
16
30
  * timeout — a hanging/slow `SigningCertURL` endpoint fails fast into a
17
31
  * `false` verification result instead of stalling the webhook handler for
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA"}
package/dist/index.js CHANGED
@@ -12,6 +12,20 @@
12
12
  * reimplement SMTP / SES SendEmail.
13
13
  *
14
14
  * @remarks
15
+ * Verification is FAIL-CLOSED on publisher identity. An SNS signature only
16
+ * proves that *some* AWS account published the message — the
17
+ * `*.amazonaws.com` cert-hostname allowlist admits every AWS account's
18
+ * signing cert — so a notification is accepted only when it is pinned to
19
+ * YOUR infrastructure: either `AWS_SES_INBOUND_TOPIC_ARN` is set and
20
+ * exactly matches the payload's `TopicArn`, or
21
+ * `AWS_SES_INBOUND_ACCOUNT_ID` is set and matches the publisher's 12-digit
22
+ * AWS account id (read from the `SigningCertURL` path or the account field
23
+ * of the SNS-signed `TopicArn`). When NEITHER is configured,
24
+ * `verifySignature` throws a tagged `config.notConfigured` (503) error
25
+ * instead of accepting any validly-signed SNS message — without a pin, any
26
+ * AWS account could forge inbound mail into your app. Configure at least
27
+ * one of the two in `api/.env`; the topic ARN is the tighter pin.
28
+ *
15
29
  * The (uncached) signing-certificate fetch is bounded to a 5 second
16
30
  * timeout — a hanging/slow `SigningCertURL` endpoint fails fast into a
17
31
  * `false` verification result instead of stalling the webhook handler for
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA"}
@@ -29,21 +29,33 @@ export declare const _resetSigningCertCache: () => void;
29
29
  * AWS SNS signature-verification flow:
30
30
  *
31
31
  * 1. Parse the JSON body.
32
- * 2. Reject if `SigningCertURL` is not from an allowlisted host.
33
- * 3. Fetch the X.509 certificate from `SigningCertURL`.
34
- * 4. Build the canonical string per AWS docs (field order varies by
32
+ * 2. PIN THE PUBLISHER (fail-closed): accept the notification only when
33
+ * EITHER `AWS_SES_INBOUND_TOPIC_ARN` is configured and matches the
34
+ * payload's `TopicArn`, OR `AWS_SES_INBOUND_ACCOUNT_ID` is configured
35
+ * and matches the AWS account id carried by the notification (the 12-digit
36
+ * segment of the `SigningCertURL` path, or the account field of the
37
+ * SIGNED `TopicArn`). When NEITHER is configured, verification THROWS a
38
+ * tagged `config.notConfigured` error — a valid AWS signature only proves
39
+ * that *some* AWS account published the message (the cert-hostname
40
+ * allowlist admits every `sns.<region>.amazonaws.com` cert), so without
41
+ * a pin ANY AWS account that can publish to SNS can forge inbound mail.
42
+ * 3. Reject if `SigningCertURL` is not from an allowlisted host.
43
+ * 4. Fetch the X.509 certificate from `SigningCertURL`.
44
+ * 5. Build the canonical string per AWS docs (field order varies by
35
45
  * `Type`).
36
- * 5. Verify the base64-decoded `Signature` against the canonical string
46
+ * 6. Verify the base64-decoded `Signature` against the canonical string
37
47
  * using SHA1 (`SignatureVersion === '1'`) or SHA256
38
48
  * (`SignatureVersion === '2'`).
39
- * 6. When `AWS_SES_INBOUND_TOPIC_ARN` is set, also verify the payload's
40
- * `TopicArn` matches.
41
49
  *
42
50
  * Errors NEVER leak signing material; failures simply return `false`.
51
+ * The ONLY throw is the misconfiguration error from step 2 (distinct
52
+ * failure class per the `InboundEmailProvider` contract).
43
53
  *
44
54
  * @param _headers - HTTP headers (unused — SNS signs the body).
45
55
  * @param body - Raw HTTP request body (JSON).
46
56
  * @returns `true` when the signature is valid, `false` otherwise.
57
+ * @throws {Error} Tagged `config.notConfigured` (503) when neither
58
+ * `AWS_SES_INBOUND_TOPIC_ARN` nor `AWS_SES_INBOUND_ACCOUNT_ID` is set.
47
59
  */
48
60
  export declare const verifySignature: (_headers: Record<string, string | string[] | undefined>, body: Buffer | string) => Promise<boolean>;
49
61
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAMpC,OAAO,cAAc,CAAA;AAGrB,OAAO,KAAK,EACV,YAAY,EAEZ,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,8BAA8B,CAAA;AA+BrC;;GAEG;AACH,eAAO,MAAM,sBAAsB,QAAO,IAEzC,CAAA;AAqDD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,EACvD,MAAM,MAAM,GAAG,MAAM,KACpB,OAAO,CAAC,OAAO,CAqDjB,CAAA;AAuCD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,EACvD,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9C,OAAO,CAAC,YAAY,CA6EtB,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,GAClB,OAAO,YAAY,EACnB,OAAO,iBAAiB,KACvB,OAAO,CAAC,uBAAuB,CA+CjC,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,QAAO,OAAe,CAAA;AAEhD;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,oBAKtB,CAAA"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAMpC,OAAO,cAAc,CAAA;AAGrB,OAAO,KAAK,EACV,YAAY,EAEZ,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,8BAA8B,CAAA;AA2ErC;;GAEG;AACH,eAAO,MAAM,sBAAsB,QAAO,IAEzC,CAAA;AAqDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,EACvD,MAAM,MAAM,GAAG,MAAM,KACpB,OAAO,CAAC,OAAO,CA+EjB,CAAA;AAuCD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,EACvD,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9C,OAAO,CAAC,YAAY,CA6EtB,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,GAClB,OAAO,YAAY,EACnB,OAAO,iBAAiB,KACvB,OAAO,CAAC,uBAAuB,CA+CjC,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,QAAO,OAAe,CAAA;AAEhD;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,oBAKtB,CAAA"}
package/dist/provider.js CHANGED
@@ -24,7 +24,52 @@ import { createPublicKey, createVerify } from 'node:crypto';
24
24
  // (not through the package barrel).
25
25
  import './secrets.js';
26
26
  import { sendMail } from '@molecule/api-emails';
27
+ import { configNotConfiguredError } from '@molecule/api-secrets';
27
28
  import { base64ToBuffer, buildSnsCanonicalString, isAllowedSigningCertUrl, parseJsonBody, parseRawMimeContent, splitReferences, unwrapMessageId, } from './utilities.js';
29
+ /**
30
+ * Extracts the AWS account id from an SNS `SigningCertURL` path, when the URL
31
+ * carries one. AWS account ids are exactly 12 decimal digits; any single path
32
+ * segment of that shape is treated as the publisher's account id. Returns
33
+ * `undefined` when the URL has no such segment (the classic AWS shape
34
+ * `https://sns.<region>.amazonaws.com/SimpleNotificationService-<hash>.pem`
35
+ * does not embed the account id — see {@link topicArnAccountId} for the
36
+ * signed-TopicArn source that covers it).
37
+ *
38
+ * Module-private: not part of the package's public export surface.
39
+ */
40
+ const extractSigningCertAccountId = (url) => {
41
+ let parsed;
42
+ try {
43
+ parsed = new URL(url);
44
+ }
45
+ catch (_error) {
46
+ return undefined;
47
+ }
48
+ for (const segment of parsed.pathname.split('/')) {
49
+ if (/^\d{12}$/u.test(segment))
50
+ return segment;
51
+ }
52
+ return undefined;
53
+ };
54
+ /**
55
+ * Extracts the AWS account id from an SNS topic ARN
56
+ * (`arn:<partition>:<service>:<region>:<account-id>:<resource>`). The
57
+ * `TopicArn` field is part of the SNS-signed canonical string, so — once the
58
+ * signature itself verifies against an `*.amazonaws.com` cert — the account
59
+ * id it carries is an attested fact, not a client-controlled claim. This is
60
+ * what makes account pinning work for notifications whose `SigningCertURL`
61
+ * path has no account-id segment (the common AWS shape).
62
+ *
63
+ * Module-private: not part of the package's public export surface.
64
+ */
65
+ const topicArnAccountId = (arn) => {
66
+ if (!arn)
67
+ return undefined;
68
+ const parts = arn.split(':');
69
+ // arn:<partition>:<service>:<region>:<account-id>:<resource>
70
+ const account = parts.length >= 6 ? parts[4] : undefined;
71
+ return account !== undefined && /^\d{12}$/u.test(account) ? account : undefined;
72
+ };
28
73
  /**
29
74
  * Cache of fetched SNS signing certificate PEM bodies, keyed by
30
75
  * `SigningCertURL`. AWS rotates these infrequently and serves them from a
@@ -103,21 +148,33 @@ const isSnsPayload = (value) => {
103
148
  * AWS SNS signature-verification flow:
104
149
  *
105
150
  * 1. Parse the JSON body.
106
- * 2. Reject if `SigningCertURL` is not from an allowlisted host.
107
- * 3. Fetch the X.509 certificate from `SigningCertURL`.
108
- * 4. Build the canonical string per AWS docs (field order varies by
151
+ * 2. PIN THE PUBLISHER (fail-closed): accept the notification only when
152
+ * EITHER `AWS_SES_INBOUND_TOPIC_ARN` is configured and matches the
153
+ * payload's `TopicArn`, OR `AWS_SES_INBOUND_ACCOUNT_ID` is configured
154
+ * and matches the AWS account id carried by the notification (the 12-digit
155
+ * segment of the `SigningCertURL` path, or the account field of the
156
+ * SIGNED `TopicArn`). When NEITHER is configured, verification THROWS a
157
+ * tagged `config.notConfigured` error — a valid AWS signature only proves
158
+ * that *some* AWS account published the message (the cert-hostname
159
+ * allowlist admits every `sns.<region>.amazonaws.com` cert), so without
160
+ * a pin ANY AWS account that can publish to SNS can forge inbound mail.
161
+ * 3. Reject if `SigningCertURL` is not from an allowlisted host.
162
+ * 4. Fetch the X.509 certificate from `SigningCertURL`.
163
+ * 5. Build the canonical string per AWS docs (field order varies by
109
164
  * `Type`).
110
- * 5. Verify the base64-decoded `Signature` against the canonical string
165
+ * 6. Verify the base64-decoded `Signature` against the canonical string
111
166
  * using SHA1 (`SignatureVersion === '1'`) or SHA256
112
167
  * (`SignatureVersion === '2'`).
113
- * 6. When `AWS_SES_INBOUND_TOPIC_ARN` is set, also verify the payload's
114
- * `TopicArn` matches.
115
168
  *
116
169
  * Errors NEVER leak signing material; failures simply return `false`.
170
+ * The ONLY throw is the misconfiguration error from step 2 (distinct
171
+ * failure class per the `InboundEmailProvider` contract).
117
172
  *
118
173
  * @param _headers - HTTP headers (unused — SNS signs the body).
119
174
  * @param body - Raw HTTP request body (JSON).
120
175
  * @returns `true` when the signature is valid, `false` otherwise.
176
+ * @throws {Error} Tagged `config.notConfigured` (503) when neither
177
+ * `AWS_SES_INBOUND_TOPIC_ARN` nor `AWS_SES_INBOUND_ACCOUNT_ID` is set.
121
178
  */
122
179
  export const verifySignature = async (_headers, body) => {
123
180
  let parsed;
@@ -131,7 +188,29 @@ export const verifySignature = async (_headers, body) => {
131
188
  if (!isSnsPayload(parsed))
132
189
  return false;
133
190
  const expectedTopic = process.env.AWS_SES_INBOUND_TOPIC_ARN;
134
- if (expectedTopic && parsed.TopicArn !== expectedTopic)
191
+ const expectedAccount = process.env.AWS_SES_INBOUND_ACCOUNT_ID;
192
+ if (expectedTopic === undefined && expectedAccount === undefined) {
193
+ // Fail closed: without an origin pin, "signature valid" only proves some
194
+ // AWS account sent this — cross-account forgery. This is a deployment
195
+ // misconfiguration, not a forged request, so it throws the tagged config
196
+ // error (503) rather than collapsing into the 401 `false` path.
197
+ throw Object.assign(configNotConfiguredError('AWS_SES_INBOUND_TOPIC_ARN'), {
198
+ message: 'Neither AWS_SES_INBOUND_TOPIC_ARN nor AWS_SES_INBOUND_ACCOUNT_ID is set — ' +
199
+ 'SES inbound webhook verification is fail-closed without an origin pin. ' +
200
+ 'Set AWS_SES_INBOUND_TOPIC_ARN to the exact topic ARN your SES receipt rule publishes ' +
201
+ 'to, or AWS_SES_INBOUND_ACCOUNT_ID to your 12-digit AWS account id, in api/.env.',
202
+ });
203
+ }
204
+ // Origin pinning: either the exact topic matches, or the publisher account
205
+ // matches. The TopicArn account field is itself covered by the SNS signature
206
+ // (verified below), so it is an attested fact, not a client claim.
207
+ const topicMatches = expectedTopic !== undefined && parsed.TopicArn === expectedTopic;
208
+ const notificationAccounts = [
209
+ extractSigningCertAccountId(parsed.SigningCertURL),
210
+ topicArnAccountId(parsed.TopicArn),
211
+ ];
212
+ const accountMatches = expectedAccount !== undefined && notificationAccounts.includes(expectedAccount);
213
+ if (!topicMatches && !accountMatches)
135
214
  return false;
136
215
  if (!isAllowedSigningCertUrl(parsed.SigningCertURL))
137
216
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE3D,sEAAsE;AACtE,2EAA2E;AAC3E,oCAAoC;AACpC,OAAO,cAAc,CAAA;AAErB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAQ/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAGhE,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,uBAAuB,EACvB,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,eAAe,GAChB,MAAM,gBAAgB,CAAA;AAEvB;;;;;;;;;;GAUG;AACH,MAAM,2BAA2B,GAAG,CAAC,GAAW,EAAsB,EAAE;IACtE,IAAI,MAAW,CAAA;IACf,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;IACvB,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAA;IAC/C,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,iBAAiB,GAAG,CAAC,GAAuB,EAAsB,EAAE;IACxE,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAA;IAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,6DAA6D;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACxD,OAAO,OAAO,KAAK,SAAS,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;AACjF,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAA;AAE3C;;;;;;;GAOG;AACH,MAAM,qBAAqB,GAAG,IAAI,CAAA;AAElC;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAS,EAAE;IAC/C,SAAS,CAAC,KAAK,EAAE,CAAA;AACnB,CAAC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAW,EAA+B,EAAE;IAC1E,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAA;IAEnD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACjC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IAEvC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAA;QACzF,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,SAAS,CAAA;QAClC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QACjC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAAE,OAAO,SAAS,CAAA;QACxD,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACvB,OAAO,GAAG,CAAA;IACZ,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,4EAA4E;QAC5E,qEAAqE;QACrE,wDAAwD;QACxD,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,YAAY,GAAG,CAAC,KAAc,EAAmC,EAAE;IACvE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACrD,MAAM,CAAC,GAAG,KAAgC,CAAA;IAC1C,OAAO,CACL,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAC1B,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;QAC/B,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;QAC7B,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;QAC/B,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;QAC/B,OAAO,CAAC,CAAC,cAAc,KAAK,QAAQ;QACpC,OAAO,CAAC,CAAC,gBAAgB,KAAK,QAAQ,CACvC,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,QAAuD,EACvD,IAAqB,EACH,EAAE;IACpB,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,8EAA8E;QAC9E,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAA;IAEvC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAA;IAC3D,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAA;IAE9D,IAAI,aAAa,KAAK,SAAS,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QACjE,yEAAyE;QACzE,sEAAsE;QACtE,yEAAyE;QACzE,gEAAgE;QAChE,MAAM,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,2BAA2B,CAAC,EAAE;YACzE,OAAO,EACL,4EAA4E;gBAC5E,yEAAyE;gBACzE,uFAAuF;gBACvF,iFAAiF;SACpF,CAAC,CAAA;IACJ,CAAC;IAED,2EAA2E;IAC3E,6EAA6E;IAC7E,mEAAmE;IACnE,MAAM,YAAY,GAAG,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,aAAa,CAAA;IACrF,MAAM,oBAAoB,GAAG;QAC3B,2BAA2B,CAAC,MAAM,CAAC,cAAc,CAAC;QAClD,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC;KACnC,CAAA;IACD,MAAM,cAAc,GAClB,eAAe,KAAK,SAAS,IAAI,oBAAoB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;IACjF,IAAI,CAAC,YAAY,IAAI,CAAC,cAAc;QAAE,OAAO,KAAK,CAAA;IAElD,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,cAAc,CAAC;QAAE,OAAO,KAAK,CAAA;IAEjE,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IACzD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAA;IAEtB,MAAM,SAAS,GACb,MAAM,CAAC,gBAAgB,KAAK,GAAG;QAC7B,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,MAAM,CAAC,gBAAgB,KAAK,GAAG;YAC/B,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,SAAS,CAAA;IACjB,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAA;IAE5B,IAAI,SAAiB,CAAA;IACrB,IAAI,CAAC;QACH,SAAS,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAA;IAC7C,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,kFAAkF;QAClF,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,eAAuB,CAAA;IAC3B,IAAI,CAAC;QACH,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IAC3D,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,oEAAoE;QACpE,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAE9C,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;QACtC,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;QACxC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAClC,QAAQ,CAAC,GAAG,EAAE,CAAA;QACd,OAAO,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;IACpD,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,yFAAyF;QACzF,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,CACzB,IAA2C,EACR,EAAE;IACrC,MAAM,GAAG,GAAsC,EAAE,CAAA;IACjD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;gBAAE,SAAQ;YAC7E,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;YAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAA;YAC3B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAA;YACtB,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;YACxB,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAA;IAC7B,IAAI,EAAE,EAAE,CAAC;QACP,IAAI,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS;YAAE,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAA;QACzF,IAAI,OAAO,EAAE,CAAC,SAAS,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,SAAS;YACrE,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,SAAS,CAAA;QAClC,IAAI,OAAO,EAAE,CAAC,SAAS,KAAK,QAAQ,IAAI,GAAG,CAAC,aAAa,CAAC,KAAK,SAAS;YACtE,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,SAAS,CAAA;QACnC,IAAI,OAAO,EAAE,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS;YACnE,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAA;IAClC,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,QAAuD,EACvD,IAA+C,EACxB,EAAE;IACzB,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6CAA6C,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IAClF,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;IACjF,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,0BAA0B,IAAI,MAAM,CAAC,IAAI,KAAK,yBAAyB,EAAE,CAAC;QAC5F,MAAM,OAAO,GAAsC,EAAE,CAAA;QACrD,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ;YACzC,OAAO,CAAC,qBAAqB,CAAC,GAAG,MAAM,CAAC,YAAY,CAAA;QACtD,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,SAAS;YACpB,IAAI,EAAE,EAAE;YACR,EAAE,EAAE,EAAE;YACN,OAAO,EAAE,SAAS,MAAM,CAAC,IAAI,EAAE;YAC/B,OAAO;YACP,UAAU,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;SACvC,CAAA;IACH,CAAC;IAED,IAAI,UAAyC,CAAA;IAC7C,IAAI,CAAC;QACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAkC,CAAA;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,uDAAuD,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IAC5F,CAAC;IACD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;IAC1E,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACzD,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAA;IAE9C,IAAI,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5E,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE;YAC3C,EAAE,EAAE,YAAY;YAChB,UAAU,EAAE,aAAa;SAC1B,CAAC,CAAA;QACF,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,KAAK,CAAC,SAAS,GAAG,YAAY,CAAA;QACpD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,2DAA2D;IAC3D,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAA;IAC9C,MAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IACnD,MAAM,mBAAmB,GAAG,eAAe,CAAC,EAAE,CAAC,SAAS,CAAC,CAAA;IACzD,MAAM,SAAS,GAAG,eAAe,CAAC,EAAE,CAAC,SAAS,CAAC,CAAA;IAC/C,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAA;IAE3F,MAAM,KAAK,GAAiB;QAC1B,EAAE,EAAE,YAAY;QAChB,IAAI,EACF,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QAC7F,EAAE,EACA,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC;YACtC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE;YACf,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;gBAC1C,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;gBACrC,CAAC,CAAC,EAAE;QACV,OAAO,EAAE,OAAO,EAAE,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACzD,OAAO;QACP,UAAU,EAAE,aAAa;KAC1B,CAAA;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;IACtE,IAAI,mBAAmB;QAAE,KAAK,CAAC,SAAS,GAAG,mBAAmB,CAAA;;QACzD,KAAK,CAAC,SAAS,GAAG,YAAY,CAAA;IACnC,IAAI,SAAS;QAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAA;IAC1C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,UAAU,GAAG,UAAU,CAAA;IAExD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAC1B,KAAmB,EACnB,KAAwB,EACU,EAAE;IACpC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IACjF,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,wHAAwH,CACzH,CAAA;IACH,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,OAAO,KAAK,CAAC,OAAO,EAAE,CAAA;IAEvD,MAAM,gBAAgB,GAA2B,EAAE,CAAA;IACnD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,gBAAgB,CAAC,aAAa,CAAC,GAAG,IAAI,KAAK,CAAC,SAAS,GAAG,CAAA;QACxD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC1B,gBAAgB,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACrE,CAAC;IAED,MAAM,OAAO,GAA2B;QACtC,GAAG,gBAAgB;QACnB,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;KACzB,CAAA;IAED,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,WAAW;QACjB,EAAE,EAAE,KAAK,CAAC,IAAI;QACd,OAAO;QACP,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YACnD,CAAC,CAAC;gBACE,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAyB,EAAE,EAAE,CAAC,CAAC;oBACjE,QAAQ,EAAE,CAAC,CAAC,IAAI;oBAChB,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;oBACxC,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC3D,CAAC,CAAC;aACJ;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAyC,CAAC,CAAA;IAExE,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;KAC3B,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAY,EAAE,CAAC,IAAI,CAAA;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAyB;IAC5C,mBAAmB;IACnB,eAAe;IACf,OAAO;IACP,aAAa;CACd,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAG7D,qEAAqE;AACrE,eAAO,MAAM,iCAAiC,EAAE,gBAAgB,EAuC/D,CAAA"}
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAG7D,qEAAqE;AACrE,eAAO,MAAM,iCAAiC,EAAE,gBAAgB,EA+C/D,CAAA"}
package/dist/secrets.js CHANGED
@@ -34,11 +34,18 @@ export const emailsInboundSesSecretDefinitions = [
34
34
  },
35
35
  {
36
36
  key: 'AWS_SES_INBOUND_TOPIC_ARN',
37
- description: 'SES inbound SNS topic ARN — ARN of the SNS topic your SES receipt rule publishes inbound mail to.',
37
+ description: 'SES inbound SNS topic ARN — ARN of the SNS topic your SES receipt rule publishes inbound mail to. One of this or AWS_SES_INBOUND_ACCOUNT_ID must be set; inbound webhook verification fails closed without an origin pin.',
38
38
  helpUrl: 'https://console.aws.amazon.com/ses/',
39
39
  required: false,
40
40
  example: 'arn:aws:sns:us-east-1:123456789012:ses-inbound',
41
41
  },
42
+ {
43
+ key: 'AWS_SES_INBOUND_ACCOUNT_ID',
44
+ description: 'SES inbound AWS account id — Your 12-digit AWS account id; SNS notifications published by any other AWS account are rejected. One of this or AWS_SES_INBOUND_TOPIC_ARN must be set; inbound webhook verification fails closed without an origin pin.',
45
+ helpUrl: 'https://console.aws.amazon.com/iam/',
46
+ required: false,
47
+ example: '123456789012',
48
+ },
42
49
  {
43
50
  key: 'AWS_SNS_SIGNING_CERT_HOSTNAME_SUFFIXES',
44
51
  description: 'SNS signing-cert hostname allowlist — Comma-separated hostname suffixes allowed for SNS signature certificates; the default (.amazonaws.com) is fine.',
@@ -1 +1 @@
1
- {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,qEAAqE;AACrE,MAAM,CAAC,MAAM,iCAAiC,GAAuB;IACnE;QACE,GAAG,EAAE,mBAAmB;QACxB,WAAW,EACT,iIAAiI;QACnI,OAAO,EAAE,qCAAqC;QAC9C,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,SAAS;KACnB;IACD;QACE,GAAG,EAAE,uBAAuB;QAC5B,WAAW,EACT,6FAA6F;QAC/F,OAAO,EAAE,qCAAqC;QAC9C,QAAQ,EAAE,IAAI;KACf;IACD;QACE,GAAG,EAAE,gBAAgB;QACrB,WAAW,EACT,kGAAkG;QACpG,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,WAAW;KACrB;IACD;QACE,GAAG,EAAE,2BAA2B;QAChC,WAAW,EACT,mGAAmG;QACrG,OAAO,EAAE,qCAAqC;QAC9C,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,gDAAgD;KAC1D;IACD;QACE,GAAG,EAAE,wCAAwC;QAC7C,WAAW,EACT,uJAAuJ;QACzJ,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,gBAAgB;QACzB,OAAO,EAAE,gBAAgB;KAC1B;CACF,CAAA;AAED,eAAe,CAAC,iCAAiC,CAAC,CAAA"}
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,qEAAqE;AACrE,MAAM,CAAC,MAAM,iCAAiC,GAAuB;IACnE;QACE,GAAG,EAAE,mBAAmB;QACxB,WAAW,EACT,iIAAiI;QACnI,OAAO,EAAE,qCAAqC;QAC9C,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,SAAS;KACnB;IACD;QACE,GAAG,EAAE,uBAAuB;QAC5B,WAAW,EACT,6FAA6F;QAC/F,OAAO,EAAE,qCAAqC;QAC9C,QAAQ,EAAE,IAAI;KACf;IACD;QACE,GAAG,EAAE,gBAAgB;QACrB,WAAW,EACT,kGAAkG;QACpG,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,WAAW;KACrB;IACD;QACE,GAAG,EAAE,2BAA2B;QAChC,WAAW,EACT,2NAA2N;QAC7N,OAAO,EAAE,qCAAqC;QAC9C,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,gDAAgD;KAC1D;IACD;QACE,GAAG,EAAE,4BAA4B;QACjC,WAAW,EACT,sPAAsP;QACxP,OAAO,EAAE,qCAAqC;QAC9C,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,cAAc;KACxB;IACD;QACE,GAAG,EAAE,wCAAwC;QAC7C,WAAW,EACT,uJAAuJ;QACzJ,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,gBAAgB;QACzB,OAAO,EAAE,gBAAgB;KAC1B;CACF,CAAA;AAED,eAAe,CAAC,iCAAiC,CAAC,CAAA"}
package/dist/types.d.ts CHANGED
@@ -28,7 +28,12 @@ export interface SnsNotificationPayload {
28
28
  Type: string;
29
29
  /** A unique UUID for the message. */
30
30
  MessageId: string;
31
- /** The notification topic ARN. */
31
+ /**
32
+ * The notification topic ARN. Its account-id field is part of the
33
+ * SNS-signed canonical string, so after signature verification it is an
34
+ * attested publisher identity — the source used for
35
+ * `AWS_SES_INBOUND_ACCOUNT_ID` pinning.
36
+ */
32
37
  TopicArn?: string;
33
38
  /**
34
39
  * Subject line as supplied by the publisher. Optional for notifications.
@@ -42,7 +47,11 @@ export interface SnsNotificationPayload {
42
47
  SignatureVersion: string;
43
48
  /** Base64-encoded signature over the canonical string. */
44
49
  Signature: string;
45
- /** URL of the X.509 PEM cert used to sign the message. */
50
+ /**
51
+ * URL of the X.509 PEM cert used to sign the message. Must be HTTPS on an
52
+ * allowlisted `*.amazonaws.com` host; a 12-digit account-id path segment,
53
+ * when present, participates in `AWS_SES_INBOUND_ACCOUNT_ID` pinning.
54
+ */
46
55
  SigningCertURL: string;
47
56
  /** Confirmation token (only on SubscriptionConfirmation messages). */
48
57
  Token?: string;
@@ -115,6 +124,17 @@ declare global {
115
124
  * `TopicArn` does not match are rejected.
116
125
  */
117
126
  AWS_SES_INBOUND_TOPIC_ARN?: string;
127
+ /**
128
+ * Optional AWS account id (12 digits). When set, notifications are
129
+ * accepted only when the publisher account matches — sourced from the
130
+ * 12-digit segment of the `SigningCertURL` path or the account field
131
+ * of the SNS-signed `TopicArn`. Together with
132
+ * `AWS_SES_INBOUND_TOPIC_ARN` this is the fail-closed origin pin: when
133
+ * NEITHER is configured, `verifySignature` throws a tagged
134
+ * configuration error instead of accepting any validly-signed SNS
135
+ * message (which would admit cross-account forgery).
136
+ */
137
+ AWS_SES_INBOUND_ACCOUNT_ID?: string;
118
138
  }
119
139
  }
120
140
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,8BAA8B,CAAA;AAErC;;;;;;;GAOG;AACH,eAAO,MAAM,kCAAkC,EAAE,SAAS,MAAM,EAAuB,CAAA;AAEvF;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAA;IAEjB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAA;IAEf,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAA;IAEjB,uEAAuE;IACvE,gBAAgB,EAAE,MAAM,CAAA;IAExB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAA;IAEjB,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAA;IAEtB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,6BAA6B;IAC5C,gEAAgE;IAChE,gBAAgB,EAAE,MAAM,CAAA;IAExB,4CAA4C;IAC5C,IAAI,EAAE;QACJ,8CAA8C;QAC9C,SAAS,EAAE,MAAM,CAAA;QACjB,gCAAgC;QAChC,MAAM,EAAE,MAAM,CAAA;QACd,+BAA+B;QAC/B,SAAS,EAAE,MAAM,CAAA;QACjB,+BAA+B;QAC/B,WAAW,EAAE,MAAM,EAAE,CAAA;QACrB,oDAAoD;QACpD,aAAa,CAAC,EAAE;YACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;YACf,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;YACb,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;YACb,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;YACd,OAAO,CAAC,EAAE,MAAM,CAAA;YAChB,SAAS,CAAC,EAAE,MAAM,CAAA;YAClB,SAAS,CAAC,EAAE,MAAM,CAAA;YAClB,UAAU,CAAC,EAAE,MAAM,CAAA;SACpB,CAAA;QACD;;WAEG;QACH,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KACjD,CAAA;IAED;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,MAAM,CAAC;QACf;;;;WAIG;QACH,UAAiB,UAAU;YACzB;;;eAGG;YACH,sCAAsC,CAAC,EAAE,MAAM,CAAA;YAE/C;;;eAGG;YACH,yBAAyB,CAAC,EAAE,MAAM,CAAA;SACnC;KACF;CACF"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,8BAA8B,CAAA;AAErC;;;;;;;GAOG;AACH,eAAO,MAAM,kCAAkC,EAAE,SAAS,MAAM,EAAuB,CAAA;AAEvF;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAA;IAEf,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAA;IAEjB,uEAAuE;IACvE,gBAAgB,EAAE,MAAM,CAAA;IAExB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAA;IAEjB;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAA;IAEtB,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,6BAA6B;IAC5C,gEAAgE;IAChE,gBAAgB,EAAE,MAAM,CAAA;IAExB,4CAA4C;IAC5C,IAAI,EAAE;QACJ,8CAA8C;QAC9C,SAAS,EAAE,MAAM,CAAA;QACjB,gCAAgC;QAChC,MAAM,EAAE,MAAM,CAAA;QACd,+BAA+B;QAC/B,SAAS,EAAE,MAAM,CAAA;QACjB,+BAA+B;QAC/B,WAAW,EAAE,MAAM,EAAE,CAAA;QACrB,oDAAoD;QACpD,aAAa,CAAC,EAAE;YACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;YACf,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;YACb,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;YACb,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;YACd,OAAO,CAAC,EAAE,MAAM,CAAA;YAChB,SAAS,CAAC,EAAE,MAAM,CAAA;YAClB,SAAS,CAAC,EAAE,MAAM,CAAA;YAClB,UAAU,CAAC,EAAE,MAAM,CAAA;SACpB,CAAA;QACD;;WAEG;QACH,OAAO,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KACjD,CAAA;IAED;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,MAAM,CAAC;QACf;;;;WAIG;QACH,UAAiB,UAAU;YACzB;;;eAGG;YACH,sCAAsC,CAAC,EAAE,MAAM,CAAA;YAE/C;;;eAGG;YACH,yBAAyB,CAAC,EAAE,MAAM,CAAA;YAElC;;;;;;;;;eASG;YACH,0BAA0B,CAAC,EAAE,MAAM,CAAA;SACpC;KACF;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@molecule/api-emails-inbound-ses",
3
- "version": "1.0.2",
3
+ "version": "1.1.1",
4
4
  "description": "AWS SES inbound email provider — parses SNS notification payloads carrying SES inbound messages into normalized InboundEmail.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -34,8 +34,8 @@
34
34
  "mailparser": "3.9.28"
35
35
  },
36
36
  "devDependencies": {
37
- "@molecule/api-emails": "1.0.1",
38
- "@molecule/api-emails-inbound": "1.0.1",
37
+ "@molecule/api-emails": "1.0.2",
38
+ "@molecule/api-emails-inbound": "1.0.2",
39
39
  "@types/mailparser": "3.4.6",
40
40
  "@types/node": "26.1.2",
41
41
  "typescript": "6.0.3",
@@ -51,7 +51,7 @@
51
51
  "url": "https://github.com/molecule-dev/molecule.git",
52
52
  "directory": "packages/api/bonds/emails-inbound/ses"
53
53
  },
54
- "homepage": "https://github.com/molecule-dev/molecule/tree/main/packages/api/bonds/emails-inbound/ses",
54
+ "homepage": "https://www.molecule.dev/packages/api-emails-inbound-ses",
55
55
  "bugs": "https://github.com/molecule-dev/molecule/issues",
56
56
  "publishConfig": {
57
57
  "access": "public"