@mavogel/awscdk-rootmail 0.0.225 → 0.0.227

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.
Files changed (98) hide show
  1. package/.jsii +60 -13
  2. package/API.md +31 -0
  3. package/integ-tests/integ.rootmail-custom-santa.ts.snapshot/RootmailIntegTestStack.assets.json +29 -29
  4. package/integ-tests/integ.rootmail-custom-santa.ts.snapshot/RootmailIntegTestStack.template.json +11 -10
  5. package/integ-tests/integ.rootmail-custom-santa.ts.snapshot/SetupTestIntegStackDefaultTestDeployAssert6EB6FF77.assets.json +2 -2
  6. package/integ-tests/integ.rootmail-custom-santa.ts.snapshot/SetupTestIntegStackDefaultTestDeployAssert6EB6FF77.template.json +2 -2
  7. package/integ-tests/{integ.rootmail.ts.snapshot/asset.9572b451243318765beb576ae7528096b3879783dbaab795c02c01d7f4e83438 → integ.rootmail-custom-santa.ts.snapshot/asset.11768574bbd12c5ed10f463a68797423c366b61535ebc1b14951661b92657fa5}/index.js +1 -1
  8. package/integ-tests/{integ.rootmail.ts.snapshot/asset.157ba1713f7224463b621261792d18081588ff306a9bc3f75e6c468fabbe1a60 → integ.rootmail-custom-santa.ts.snapshot/asset.409d1db869dd0ed635bff94c855031afc92e9ac918a5d09651dd0b5316db1433}/index.js +1 -1
  9. package/integ-tests/integ.rootmail-custom-santa.ts.snapshot/asset.5407280701b87b2f099edc3024ed41a8c3a392c678cd6cf144fd099626ebe66d/index.js +35106 -0
  10. package/integ-tests/{integ.rootmail.ts.snapshot/asset.78b64aaf9aebb4eacbdd42197be10e9d5894360a642f7dcf79aeb84bb3552377 → integ.rootmail-custom-santa.ts.snapshot/asset.7144c5a47b3904b1aa4b27be73803a4b684f4ef765d9df8fa767779d37106254}/index.js +1 -1
  11. package/integ-tests/{integ.rootmail.ts.snapshot/asset.b8448324ef2c7d5bfa362722df2d397079d5aabaae2749f09180ac5bedfa5c89 → integ.rootmail-custom-santa.ts.snapshot/asset.9709438d0fbb508ea9bfee8683a274b4f9492f5e527eb28e0bd9e2bc96b9a08f}/index.js +4 -1
  12. package/integ-tests/{integ.rootmail.ts.snapshot/asset.f75274dd7677b6ef41f29d2dfc2c885b4f4e069d3fb8e67636bd89efd3f0fcad → integ.rootmail-custom-santa.ts.snapshot/asset.a0f9d47d625e1e17d1946bc138cc46c9b7ecb7136dc54cf26af266b0e30b4e15}/index.js +1 -1
  13. package/integ-tests/{integ.rootmail.ts.snapshot/asset.4c079063901e6478dbb5ace19e3123641ebf0da2ab648ecf52079c5bec154196 → integ.rootmail-custom-santa.ts.snapshot/asset.aca912f8a6aebc5dfd423aff79785b8fd7488473a4cf93aaa7ad0e442b548787}/index.js +1 -1
  14. package/integ-tests/{integ.rootmail.ts.snapshot/asset.d2b520d86fd9d964c83dc0d5ce2e4456dbde5fa7ae0c791a71865cbdfe2fb855 → integ.rootmail-custom-santa.ts.snapshot/asset.ad34b204b794bb6638b7af71a62693ffbfcee3c07bdbd90bbf9f8787036bc7c3}/index.js +1 -1
  15. package/integ-tests/{integ.rootmail.ts.snapshot/asset.7e8a681794eff5fda1841caa360113df5488ecf944055a69b8f1e5a687e269f5 → integ.rootmail-custom-santa.ts.snapshot/asset.f61472ea141af20f69ebb7a7718158fcb95d72410c0c2a2e72cc59b1822873fc}/index.js +1 -1
  16. package/integ-tests/integ.rootmail-custom-santa.ts.snapshot/integ.json +1 -1
  17. package/integ-tests/integ.rootmail-custom-santa.ts.snapshot/manifest.json +2 -2
  18. package/integ-tests/integ.rootmail-custom-santa.ts.snapshot/tree.json +9 -9
  19. package/integ-tests/integ.rootmail-filter-subject.ts +156 -0
  20. package/integ-tests/integ.rootmail-filter-subject.ts.snapshot/RootmailIntegTestStack.assets.json +162 -0
  21. package/integ-tests/integ.rootmail-filter-subject.ts.snapshot/RootmailIntegTestStack.template.json +4542 -0
  22. package/integ-tests/integ.rootmail-filter-subject.ts.snapshot/SetupTestIntegStackDefaultTestDeployAssert6EB6FF77.assets.json +32 -0
  23. package/integ-tests/integ.rootmail-filter-subject.ts.snapshot/SetupTestIntegStackDefaultTestDeployAssert6EB6FF77.template.json +249 -0
  24. package/integ-tests/integ.rootmail-filter-subject.ts.snapshot/asset.53e8368959effe94a6e51bef9c7c5bf0eaf5c4d64eece81632ca62aa34517978.bundle/index.js +31981 -0
  25. package/integ-tests/integ.rootmail-filter-subject.ts.snapshot/asset.5cc92ed0cea39e2b8de2dbc527dfb5980a3af9564bd1084d840b9787c7d0467e/index.d.ts +14 -0
  26. package/integ-tests/integ.rootmail-filter-subject.ts.snapshot/asset.5cc92ed0cea39e2b8de2dbc527dfb5980a3af9564bd1084d840b9787c7d0467e/index.js +1 -0
  27. package/integ-tests/{integ.rootmail-custom-santa.ts.snapshot/asset.97724f55c990db7c62d85b80d4afb032e60011490da173e3551e6a131013b79d → integ.rootmail-filter-subject.ts.snapshot/asset.9ac6d29f0cc4b20ec46e4c186d9a6f6448c7ea11b689e70a5dda69671a9d6848}/index.js +376 -20245
  28. package/integ-tests/{integ.rootmail-custom-santa.ts.snapshot/asset.b8448324ef2c7d5bfa362722df2d397079d5aabaae2749f09180ac5bedfa5c89 → integ.rootmail-filter-subject.ts.snapshot/asset.be7d56b509650f7f97c406a745d8335992726086995e4cb4aaf50417ab40e803}/index.js +3 -0
  29. package/integ-tests/integ.rootmail-filter-subject.ts.snapshot/asset.f2d30cfc360482320a52a4fcde8a70f3569df79ab30be24650fda58eb60052cf/cfn-response.js +1 -0
  30. package/integ-tests/integ.rootmail-filter-subject.ts.snapshot/asset.f2d30cfc360482320a52a4fcde8a70f3569df79ab30be24650fda58eb60052cf/consts.js +1 -0
  31. package/integ-tests/integ.rootmail-filter-subject.ts.snapshot/asset.f2d30cfc360482320a52a4fcde8a70f3569df79ab30be24650fda58eb60052cf/framework.js +3 -0
  32. package/integ-tests/integ.rootmail-filter-subject.ts.snapshot/asset.f2d30cfc360482320a52a4fcde8a70f3569df79ab30be24650fda58eb60052cf/outbound.js +1 -0
  33. package/integ-tests/integ.rootmail-filter-subject.ts.snapshot/asset.f2d30cfc360482320a52a4fcde8a70f3569df79ab30be24650fda58eb60052cf/util.js +1 -0
  34. package/integ-tests/integ.rootmail-filter-subject.ts.snapshot/integ.json +27 -0
  35. package/integ-tests/integ.rootmail-filter-subject.ts.snapshot/manifest.json +742 -0
  36. package/integ-tests/integ.rootmail-filter-subject.ts.snapshot/tree.json +5893 -0
  37. package/integ-tests/integ.rootmail.ts.snapshot/RootmailIntegTestStack.assets.json +32 -32
  38. package/integ-tests/integ.rootmail.ts.snapshot/RootmailIntegTestStack.template.json +12 -11
  39. package/integ-tests/integ.rootmail.ts.snapshot/SetupTestIntegStackDefaultTestDeployAssert6EB6FF77.assets.json +2 -2
  40. package/integ-tests/integ.rootmail.ts.snapshot/SetupTestIntegStackDefaultTestDeployAssert6EB6FF77.template.json +3 -3
  41. package/integ-tests/integ.rootmail.ts.snapshot/asset.11768574bbd12c5ed10f463a68797423c366b61535ebc1b14951661b92657fa5/index.js +47 -0
  42. package/integ-tests/integ.rootmail.ts.snapshot/asset.409d1db869dd0ed635bff94c855031afc92e9ac918a5d09651dd0b5316db1433/index.js +106 -0
  43. package/integ-tests/integ.rootmail.ts.snapshot/asset.7144c5a47b3904b1aa4b27be73803a4b684f4ef765d9df8fa767779d37106254/index.js +61 -0
  44. package/integ-tests/integ.rootmail.ts.snapshot/asset.9709438d0fbb508ea9bfee8683a274b4f9492f5e527eb28e0bd9e2bc96b9a08f/index.js +108 -0
  45. package/integ-tests/integ.rootmail.ts.snapshot/asset.a0f9d47d625e1e17d1946bc138cc46c9b7ecb7136dc54cf26af266b0e30b4e15/index.js +74 -0
  46. package/integ-tests/integ.rootmail.ts.snapshot/asset.aca912f8a6aebc5dfd423aff79785b8fd7488473a4cf93aaa7ad0e442b548787/index.js +215 -0
  47. package/integ-tests/integ.rootmail.ts.snapshot/asset.ad34b204b794bb6638b7af71a62693ffbfcee3c07bdbd90bbf9f8787036bc7c3/index.js +85 -0
  48. package/integ-tests/integ.rootmail.ts.snapshot/{asset.3fe096136c1d1292627baeb9b860b3206032deebb5a03ea407d7d04833a222d7 → asset.b0a80de4302e54c024e3dd1233407ed7b1b3ab3bae801ce319e6d8660b2a8db3}/index.js +618 -20478
  49. package/integ-tests/integ.rootmail.ts.snapshot/{asset.070f758ea9c89b8ceea9bb5141ea511633e1d72ab992b608da4efb3d6eeb2ba5 → asset.d25bfd59a60ba15d60c7d58fe66a9c9930044da8f0592ac451a8760bbbfa6460}/index.js +1 -1
  50. package/integ-tests/integ.rootmail.ts.snapshot/asset.f61472ea141af20f69ebb7a7718158fcb95d72410c0c2a2e72cc59b1822873fc/index.js +83 -0
  51. package/integ-tests/integ.rootmail.ts.snapshot/manifest.json +2 -2
  52. package/integ-tests/integ.rootmail.ts.snapshot/tree.json +10 -10
  53. package/lib/rootmail.d.ts +6 -0
  54. package/lib/rootmail.js +4 -2
  55. package/lib/ses-receipt-ruleset-activation.d.ts +1 -0
  56. package/lib/ses-receipt-ruleset-activation.js +2 -1
  57. package/lib/ses-receipt-ruleset-activation.on-event-handler.d.ts +1 -0
  58. package/lib/ses-receipt-ruleset-activation.on-event-handler.js +3 -2
  59. package/lib/ses-receive.d.ts +4 -0
  60. package/lib/ses-receive.js +4 -2
  61. package/lib/ses-receive.ops-santa-handler.js +15 -3
  62. package/node_modules/axios/CHANGELOG.md +11 -0
  63. package/node_modules/axios/dist/axios.js +2 -2
  64. package/node_modules/axios/dist/axios.js.map +1 -1
  65. package/node_modules/axios/dist/axios.min.js +1 -1
  66. package/node_modules/axios/dist/axios.min.js.map +1 -1
  67. package/node_modules/axios/dist/browser/axios.cjs +2 -2
  68. package/node_modules/axios/dist/browser/axios.cjs.map +1 -1
  69. package/node_modules/axios/dist/esm/axios.js +2 -2
  70. package/node_modules/axios/dist/esm/axios.js.map +1 -1
  71. package/node_modules/axios/dist/esm/axios.min.js +1 -1
  72. package/node_modules/axios/dist/esm/axios.min.js.map +1 -1
  73. package/node_modules/axios/dist/node/axios.cjs +2 -2
  74. package/node_modules/axios/dist/node/axios.cjs.map +1 -1
  75. package/node_modules/axios/index.d.cts +28 -33
  76. package/node_modules/axios/index.d.ts +568 -75
  77. package/node_modules/axios/lib/env/data.js +1 -1
  78. package/node_modules/axios/package.json +1 -1
  79. package/node_modules/cdk-nag/.jsii +2 -2
  80. package/node_modules/cdk-nag/lib/ignore-suppression-conditions.js +5 -5
  81. package/node_modules/cdk-nag/lib/nag-logger.js +2 -2
  82. package/node_modules/cdk-nag/lib/nag-pack.js +1 -1
  83. package/node_modules/cdk-nag/lib/nag-rules.js +1 -1
  84. package/node_modules/cdk-nag/lib/nag-suppressions.js +1 -1
  85. package/node_modules/cdk-nag/lib/packs/aws-solutions.js +1 -1
  86. package/node_modules/cdk-nag/lib/packs/hipaa-security.js +1 -1
  87. package/node_modules/cdk-nag/lib/packs/nist-800-53-r4.js +1 -1
  88. package/node_modules/cdk-nag/lib/packs/nist-800-53-r5.js +1 -1
  89. package/node_modules/cdk-nag/lib/packs/pci-dss-321.js +1 -1
  90. package/node_modules/cdk-nag/package.json +1 -1
  91. package/package.json +4 -4
  92. /package/integ-tests/{integ.rootmail-custom-santa.ts.snapshot → integ.rootmail-filter-subject.ts.snapshot}/asset.157ba1713f7224463b621261792d18081588ff306a9bc3f75e6c468fabbe1a60/index.js +0 -0
  93. /package/integ-tests/{integ.rootmail-custom-santa.ts.snapshot → integ.rootmail-filter-subject.ts.snapshot}/asset.4c079063901e6478dbb5ace19e3123641ebf0da2ab648ecf52079c5bec154196/index.js +0 -0
  94. /package/integ-tests/{integ.rootmail-custom-santa.ts.snapshot → integ.rootmail-filter-subject.ts.snapshot}/asset.78b64aaf9aebb4eacbdd42197be10e9d5894360a642f7dcf79aeb84bb3552377/index.js +0 -0
  95. /package/integ-tests/{integ.rootmail-custom-santa.ts.snapshot → integ.rootmail-filter-subject.ts.snapshot}/asset.7e8a681794eff5fda1841caa360113df5488ecf944055a69b8f1e5a687e269f5/index.js +0 -0
  96. /package/integ-tests/{integ.rootmail-custom-santa.ts.snapshot → integ.rootmail-filter-subject.ts.snapshot}/asset.9572b451243318765beb576ae7528096b3879783dbaab795c02c01d7f4e83438/index.js +0 -0
  97. /package/integ-tests/{integ.rootmail-custom-santa.ts.snapshot → integ.rootmail-filter-subject.ts.snapshot}/asset.d2b520d86fd9d964c83dc0d5ce2e4456dbde5fa7ae0c791a71865cbdfe2fb855/index.js +0 -0
  98. /package/integ-tests/{integ.rootmail-custom-santa.ts.snapshot → integ.rootmail-filter-subject.ts.snapshot}/asset.f75274dd7677b6ef41f29d2dfc2c885b4f4e069d3fb8e67636bd89efd3f0fcad/index.js +0 -0
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // asset-input/src/hosted-zone-dkim-verification-records.on-event-handler.ts
21
+ var hosted_zone_dkim_verification_records_on_event_handler_exports = {};
22
+ __export(hosted_zone_dkim_verification_records_on_event_handler_exports, {
23
+ ATTR_DKIM_TOKENS: () => ATTR_DKIM_TOKENS,
24
+ ATTR_VERIFICATION_TOKEN: () => ATTR_VERIFICATION_TOKEN,
25
+ PROP_DOMAIN: () => PROP_DOMAIN,
26
+ handler: () => handler
27
+ });
28
+ module.exports = __toCommonJS(hosted_zone_dkim_verification_records_on_event_handler_exports);
29
+ var import_client_ses = require("@aws-sdk/client-ses");
30
+ var PROP_DOMAIN = "Domain";
31
+ var ATTR_VERIFICATION_TOKEN = "VerificationToken";
32
+ var ATTR_DKIM_TOKENS = "DkimTokens";
33
+ var ses = new import_client_ses.SES();
34
+ async function handler(event) {
35
+ const domain = event.ResourceProperties[PROP_DOMAIN];
36
+ switch (event.RequestType) {
37
+ case "Create":
38
+ case "Update":
39
+ let physicalResourceId = event.PhysicalResourceId;
40
+ if (event.RequestType === "Create") {
41
+ physicalResourceId = event.RequestId;
42
+ }
43
+ console.log(`${event.RequestType}: Do Domain verification and DKIM records for ${event.LogicalResourceId} and domain '${domain}' with PhysicalResourceId '${physicalResourceId}'`);
44
+ const verifyDomainResponse = await ses.verifyDomainIdentity({ Domain: domain });
45
+ const verificationToken = verifyDomainResponse.VerificationToken;
46
+ console.log(`${event.RequestType}: Got verification token '${verificationToken}' for domain '${domain}'`);
47
+ const verifyDomainDkimResponse = await ses.verifyDomainDkim({ Domain: domain });
48
+ const dkimTokens = verifyDomainDkimResponse.DkimTokens;
49
+ console.log(`${event.RequestType}: Got DKIM tokens '${dkimTokens}' for domain '${domain}'`);
50
+ return {
51
+ PhysicalResourceId: physicalResourceId,
52
+ Data: {
53
+ [ATTR_VERIFICATION_TOKEN]: verificationToken,
54
+ [ATTR_DKIM_TOKENS]: dkimTokens
55
+ }
56
+ };
57
+ // TODO check if delete should do nothing: https://github.com/superwerker/superwerker/blob/main/templates/rootmail.yaml#L170
58
+ // we store in Parameter Store as well
59
+ case "Delete":
60
+ console.log(`Deleting Domain identity for domain '${domain}' with PhysicalResourceId '${event.PhysicalResourceId}'`);
61
+ const deleteResponse = await ses.deleteIdentity({ Identity: domain });
62
+ console.log(`Deleted Domain identity for domain '${domain}'`, deleteResponse);
63
+ return {
64
+ PhysicalResourceId: event.PhysicalResourceId
65
+ };
66
+ }
67
+ }
68
+ // Annotate the CommonJS export names for ESM import in node:
69
+ 0 && (module.exports = {
70
+ ATTR_DKIM_TOKENS,
71
+ ATTR_VERIFICATION_TOKEN,
72
+ PROP_DOMAIN,
73
+ handler
74
+ });
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // asset-input/src/rootmail-autowire-dns.on-event-handler.ts
21
+ var rootmail_autowire_dns_on_event_handler_exports = {};
22
+ __export(rootmail_autowire_dns_on_event_handler_exports, {
23
+ PROP_DOMAIN: () => PROP_DOMAIN,
24
+ PROP_HOSTED_ZONE_PARAMETER_NAME: () => PROP_HOSTED_ZONE_PARAMETER_NAME,
25
+ PROP_PARENT_HOSTED_ZONE_ID: () => PROP_PARENT_HOSTED_ZONE_ID,
26
+ PROP_R53_CHANGEINFO_ID_PARAMETER_NAME: () => PROP_R53_CHANGEINFO_ID_PARAMETER_NAME,
27
+ PROP_SUB_DOMAIN: () => PROP_SUB_DOMAIN,
28
+ handler: () => handler
29
+ });
30
+ module.exports = __toCommonJS(rootmail_autowire_dns_on_event_handler_exports);
31
+ var import_client_route_53 = require("@aws-sdk/client-route-53");
32
+ var import_client_ssm = require("@aws-sdk/client-ssm");
33
+ var PROP_DOMAIN = "Domain";
34
+ var PROP_SUB_DOMAIN = "Subdomain";
35
+ var PROP_PARENT_HOSTED_ZONE_ID = "ParentHostedZoneId";
36
+ var PROP_HOSTED_ZONE_PARAMETER_NAME = "HostedZoneParameterName";
37
+ var PROP_R53_CHANGEINFO_ID_PARAMETER_NAME = "R53ChangeInfoIdParameterName";
38
+ var route53 = new import_client_route_53.Route53();
39
+ var ssm = new import_client_ssm.SSM();
40
+ async function handler(event) {
41
+ const domain = event.ResourceProperties[PROP_DOMAIN];
42
+ const parentHostedZoneId = event.ResourceProperties[PROP_PARENT_HOSTED_ZONE_ID];
43
+ if (parentHostedZoneId === void 0 || parentHostedZoneId.trim().length === 0) {
44
+ switch (event.RequestType) {
45
+ case "Create":
46
+ log(`${event.RequestType}: Autowire DNS is disabled for '${domain}'. Skipping. PhysicalResourceId: ${event.RequestId}`);
47
+ return {
48
+ PhysicalResourceId: event.RequestId
49
+ };
50
+ case "Update":
51
+ case "Delete":
52
+ log(`${event.RequestType}: Autowire DNS is disabled for '${domain}'. Skipping. PhysicalResourceId: ${event.PhysicalResourceId}`);
53
+ return {
54
+ PhysicalResourceId: event.PhysicalResourceId
55
+ };
56
+ }
57
+ }
58
+ const subdomain = event.ResourceProperties[PROP_SUB_DOMAIN];
59
+ const hostedZoneParameterName = event.ResourceProperties[PROP_HOSTED_ZONE_PARAMETER_NAME];
60
+ const r53ChangeInfoIdParameterName = event.ResourceProperties[PROP_R53_CHANGEINFO_ID_PARAMETER_NAME];
61
+ switch (event.RequestType) {
62
+ case "Create":
63
+ const hostedZoneNameServerParameterResponse = await ssm.getParameter({
64
+ Name: hostedZoneParameterName
65
+ });
66
+ const hostedZoneNameServersAsString = hostedZoneNameServerParameterResponse.Parameter?.Value;
67
+ log({
68
+ event: hostedZoneNameServersAsString,
69
+ level: "debug"
70
+ });
71
+ if (hostedZoneNameServersAsString === void 0 || hostedZoneNameServersAsString === "") {
72
+ throw new Error(`hosted zone name servers not found or empty in parameter store for ${domain}: ${hostedZoneNameServersAsString}`);
73
+ }
74
+ const hostedZoneNameServers = hostedZoneNameServersAsString?.split(",");
75
+ if (hostedZoneNameServers.length !== 4) {
76
+ throw new Error(`expected exactly 4 hosted zone name servers for ${domain}. Got ${hostedZoneNameServers.length}: ${hostedZoneNameServers}`);
77
+ }
78
+ const hostedZoneResponse = await route53.listHostedZonesByName({
79
+ DNSName: domain
80
+ });
81
+ if (hostedZoneResponse.HostedZones === void 0 || hostedZoneResponse.HostedZones?.length === 0) {
82
+ log({
83
+ event: hostedZoneResponse,
84
+ level: "debug"
85
+ });
86
+ throw new Error(`expected to find at least one hosted zone for ${domain}`);
87
+ }
88
+ const filteredHostedZones = hostedZoneResponse.HostedZones?.filter((hostedZone) => {
89
+ return hostedZone.Id === `/hostedzone/${parentHostedZoneId}`;
90
+ });
91
+ if (filteredHostedZones.length !== 1) {
92
+ log({
93
+ event: hostedZoneResponse,
94
+ level: "debug"
95
+ });
96
+ throw new Error(`expected to find & filter exactly 1 hosted zone for ${domain}. Got ${filteredHostedZones.length}`);
97
+ }
98
+ const listResourceRecordSetsResponse = await route53.listResourceRecordSets({
99
+ // remove the prefix for using it as parameter
100
+ HostedZoneId: parentHostedZoneId.replace("/hostedzone/", "")
101
+ });
102
+ if (listResourceRecordSetsResponse.ResourceRecordSets === void 0) {
103
+ log({
104
+ event: listResourceRecordSetsResponse,
105
+ level: "debug"
106
+ });
107
+ throw new Error(`expected to find at least one resource record set for ${domain}`);
108
+ }
109
+ const existingNSRecordSet = listResourceRecordSetsResponse.ResourceRecordSets?.find((recordSet) => {
110
+ return recordSet.Name === `${subdomain}.${domain}.` && recordSet.Type === "NS";
111
+ });
112
+ if (existingNSRecordSet !== void 0) {
113
+ log({
114
+ event: existingNSRecordSet,
115
+ level: "debug"
116
+ });
117
+ log(`NS record for Name '${subdomain}.${domain}' and type NS already exists. Skipping.`);
118
+ return {
119
+ PhysicalResourceId: event.RequestId
120
+ };
121
+ }
122
+ log(`NS record for Name '${subdomain}.${domain}' and type NS does not exist. Creating.`);
123
+ const recordSetCreationResponse = await route53.changeResourceRecordSets({
124
+ HostedZoneId: parentHostedZoneId,
125
+ ChangeBatch: {
126
+ Comment: "rootmail-autowire-dns",
127
+ Changes: [
128
+ {
129
+ Action: "CREATE",
130
+ ResourceRecordSet: {
131
+ Name: `${subdomain}.${domain}`,
132
+ Type: "NS",
133
+ TTL: 60,
134
+ ResourceRecords: [
135
+ // are always 4
136
+ { Value: hostedZoneNameServers[0] },
137
+ { Value: hostedZoneNameServers[1] },
138
+ { Value: hostedZoneNameServers[2] },
139
+ { Value: hostedZoneNameServers[3] }
140
+ ]
141
+ }
142
+ }
143
+ ]
144
+ }
145
+ });
146
+ await ssm.putParameter({
147
+ Name: r53ChangeInfoIdParameterName,
148
+ Value: recordSetCreationResponse.ChangeInfo.Id,
149
+ Overwrite: true
150
+ });
151
+ return {
152
+ PhysicalResourceId: event.RequestId
153
+ };
154
+ case "Update":
155
+ log(`Skipping update for NS record for Name '${subdomain}.${domain}'`);
156
+ return {
157
+ PhysicalResourceId: event.PhysicalResourceId
158
+ };
159
+ case "Delete":
160
+ log(`Deleting NS record for Name '${subdomain}.${domain}' in the hosted zone with ID ${parentHostedZoneId}`);
161
+ const recordName = `${subdomain}.${domain}`;
162
+ try {
163
+ let nextRecordName;
164
+ let isRecordDeleted = false;
165
+ do {
166
+ const recordsResponse = await route53.listResourceRecordSets({
167
+ HostedZoneId: parentHostedZoneId,
168
+ StartRecordName: nextRecordName
169
+ });
170
+ for (const recordSet of recordsResponse.ResourceRecordSets || []) {
171
+ if (recordSet.Name === `${recordName}.` && recordSet.Type === "NS") {
172
+ console.log(`Deleting record: ${recordSet.Name} ${recordSet.Type}`);
173
+ await route53.changeResourceRecordSets({
174
+ HostedZoneId: parentHostedZoneId,
175
+ ChangeBatch: {
176
+ Changes: [
177
+ {
178
+ Action: "DELETE",
179
+ ResourceRecordSet: recordSet
180
+ }
181
+ ]
182
+ }
183
+ });
184
+ console.log(`Deleted record: ${recordSet.Name} ${recordSet.Type}. Stopping here.`);
185
+ isRecordDeleted = true;
186
+ break;
187
+ }
188
+ }
189
+ nextRecordName = recordsResponse.NextRecordName;
190
+ if (isRecordDeleted) {
191
+ console.log(`Record deleted: ${recordName} type 'NS'. Quitting.`);
192
+ break;
193
+ }
194
+ } while (nextRecordName);
195
+ } catch (err) {
196
+ console.log(`Error deleting records: ${err}`);
197
+ throw err;
198
+ }
199
+ return {
200
+ PhysicalResourceId: event.PhysicalResourceId
201
+ };
202
+ }
203
+ }
204
+ function log(msg) {
205
+ console.log(JSON.stringify(msg));
206
+ }
207
+ // Annotate the CommonJS export names for ESM import in node:
208
+ 0 && (module.exports = {
209
+ PROP_DOMAIN,
210
+ PROP_HOSTED_ZONE_PARAMETER_NAME,
211
+ PROP_PARENT_HOSTED_ZONE_ID,
212
+ PROP_R53_CHANGEINFO_ID_PARAMETER_NAME,
213
+ PROP_SUB_DOMAIN,
214
+ handler
215
+ });
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // asset-input/integ-tests/functions/send-email-handler.ts
21
+ var send_email_handler_exports = {};
22
+ __export(send_email_handler_exports, {
23
+ handler: () => handler
24
+ });
25
+ module.exports = __toCommonJS(send_email_handler_exports);
26
+ var import_client_ses = require("@aws-sdk/client-ses");
27
+ var ses = new import_client_ses.SES();
28
+ var handler = async (event) => {
29
+ const id = event.id || "test-id-1";
30
+ const text = event.text || "test";
31
+ const sourceMail = event.sourceMail || "test@example.com";
32
+ const toMail = event.toMail || "root@example.com";
33
+ const ruleAfter = await ses.describeReceiptRule({
34
+ RuleSetName: "RootMail",
35
+ RuleName: "Receive"
36
+ });
37
+ log({ message: "Rule:", rule: ruleAfter.Rule });
38
+ const params = {
39
+ Source: sourceMail,
40
+ Destination: {
41
+ ToAddresses: [toMail]
42
+ },
43
+ Message: {
44
+ Subject: {
45
+ Data: id
46
+ },
47
+ Body: {
48
+ Text: {
49
+ Data: text
50
+ }
51
+ }
52
+ }
53
+ };
54
+ try {
55
+ const res = await ses.sendEmail(params);
56
+ if (res.$metadata.httpStatusCode !== 200) {
57
+ log({
58
+ message: "Error sending email",
59
+ params,
60
+ messageId: res.MessageId,
61
+ err: `httpStatusCode: ${res.$metadata.httpStatusCode}`
62
+ });
63
+ return { sendStatusCode: 500, err: res.$metadata.httpStatusCode };
64
+ }
65
+ log({
66
+ message: "Email sent",
67
+ params,
68
+ res
69
+ });
70
+ return { sendStatusCode: 200 };
71
+ } catch (err) {
72
+ log({
73
+ message: "Error (catch) sending email",
74
+ err
75
+ });
76
+ return { sendStatusCode: 500, err };
77
+ }
78
+ };
79
+ function log(msg) {
80
+ console.log(JSON.stringify(msg));
81
+ }
82
+ // Annotate the CommonJS export names for ESM import in node:
83
+ 0 && (module.exports = {
84
+ handler
85
+ });