@wraps.dev/cli 3.14.0 → 3.16.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/dist/cli.js CHANGED
@@ -12538,17 +12538,17 @@ var init_loadSso_W73U3YF2 = __esm({
12538
12538
  }
12539
12539
  });
12540
12540
 
12541
- // ../core/dist/dist-es-IGT2EBTC.js
12542
- var dist_es_IGT2EBTC_exports = {};
12543
- __export(dist_es_IGT2EBTC_exports, {
12541
+ // ../core/dist/dist-es-NT54JC6T.js
12542
+ var dist_es_NT54JC6T_exports = {};
12543
+ __export(dist_es_NT54JC6T_exports, {
12544
12544
  fromSSO: () => fromSSO,
12545
12545
  isSsoProfile: () => isSsoProfile,
12546
12546
  validateSsoProfile: () => validateSsoProfile
12547
12547
  });
12548
12548
  import { promises as fsPromises } from "fs";
12549
12549
  var isSsoProfile, EXPIRE_WINDOW_MS, REFRESH_MESSAGE, getSsoOidcClient, getNewSsoOidcToken, validateTokenExpiry, validateTokenKey, writeFile, writeSSOTokenToFile, lastRefreshAttemptTime, fromSso, SHOULD_FAIL_CREDENTIAL_CHAIN, resolveSSOCredentials, validateSsoProfile, fromSSO;
12550
- var init_dist_es_IGT2EBTC = __esm({
12551
- "../core/dist/dist-es-IGT2EBTC.js"() {
12550
+ var init_dist_es_NT54JC6T = __esm({
12551
+ "../core/dist/dist-es-NT54JC6T.js"() {
12552
12552
  "use strict";
12553
12553
  init_esm_shims();
12554
12554
  init_chunk_VEAA7R3K();
@@ -12854,9 +12854,9 @@ var init_dist_es_DRZJXHTP = __esm({
12854
12854
  }
12855
12855
  });
12856
12856
 
12857
- // ../core/dist/sts-CUYV6JJF.js
12858
- var sts_CUYV6JJF_exports = {};
12859
- __export(sts_CUYV6JJF_exports, {
12857
+ // ../core/dist/sts-M53DV675.js
12858
+ var sts_M53DV675_exports = {};
12859
+ __export(sts_M53DV675_exports, {
12860
12860
  $Command: () => Command,
12861
12861
  AssumeRole$: () => AssumeRole$,
12862
12862
  AssumeRoleCommand: () => AssumeRoleCommand,
@@ -12931,12 +12931,12 @@ function createSmithyApiNoAuthHttpAuthOption3(authParameters) {
12931
12931
  };
12932
12932
  }
12933
12933
  var q, a3, b3, c3, d3, e3, f3, g3, h3, i3, j3, k3, l, m, n, o, p, _data3, root3, r3, nodes3, bdd3, cache3, defaultEndpointResolver3, createEndpointRuleSetHttpAuthSchemeParametersProvider, _defaultSTSHttpAuthSchemeParametersProvider, defaultSTSHttpAuthSchemeParametersProvider, createEndpointRuleSetHttpAuthSchemeProvider, _defaultSTSHttpAuthSchemeProvider, defaultSTSHttpAuthSchemeProvider, resolveHttpAuthSchemeConfig3, resolveClientEndpointParameters3, commonParams3, STSServiceException, ExpiredTokenException2, MalformedPolicyDocumentException, PackedPolicyTooLargeException, RegionDisabledException, IDPRejectedClaimException, InvalidIdentityTokenException, IDPCommunicationErrorException, _A, _AKI, _AR, _ARI, _ARR, _ARRs, _ARU, _ARWWI, _ARWWIR, _ARWWIRs, _Au, _C, _CA, _DS, _E, _EI, _ETE2, _IDPCEE, _IDPRCE, _IITE, _K, _MPDE, _P, _PA, _PAr, _PC, _PCLT, _PCr, _PDT, _PI, _PPS, _PPTLE, _Pr, _RA, _RDE, _RSN, _SAK, _SFWIT, _SI, _SN, _ST, _T, _TC, _TTK, _Ta, _V, _WIT, _a, _aKST, _aQE, _c3, _cTT, _e3, _hE3, _m2, _pDLT, _s3, _tLT, n03, _s_registry3, STSServiceException$, n0_registry3, ExpiredTokenException$2, IDPCommunicationErrorException$, IDPRejectedClaimException$, InvalidIdentityTokenException$, MalformedPolicyDocumentException$, PackedPolicyTooLargeException$, RegionDisabledException$, errorTypeRegistries3, accessKeySecretType, clientTokenType, AssumedRoleUser$, AssumeRoleRequest$, AssumeRoleResponse$, AssumeRoleWithWebIdentityRequest$, AssumeRoleWithWebIdentityResponse$, Credentials$, PolicyDescriptorType$, ProvidedContext$, Tag$, policyDescriptorListType, ProvidedContextsListType, tagKeyListType, tagListType, AssumeRole$, AssumeRoleWithWebIdentity$, getRuntimeConfig4, getRuntimeConfig23, getHttpAuthExtensionConfiguration3, resolveHttpAuthRuntimeConfig3, resolveRuntimeExtensions3, STSClient2, command3, _ep03, _mw03, AssumeRoleCommand, AssumeRoleWithWebIdentityCommand, commands2, STS, getAccountIdFromAssumedRoleUser, resolveRegion, getDefaultRoleAssumer, getDefaultRoleAssumerWithWebIdentity, isH2, getCustomizableStsClientCtor, getDefaultRoleAssumer2, getDefaultRoleAssumerWithWebIdentity2, decorateDefaultCredentialProvider;
12934
- var init_sts_CUYV6JJF = __esm({
12935
- "../core/dist/sts-CUYV6JJF.js"() {
12934
+ var init_sts_M53DV675 = __esm({
12935
+ "../core/dist/sts-M53DV675.js"() {
12936
12936
  "use strict";
12937
12937
  init_esm_shims();
12938
- init_chunk_HXLHAPSY();
12939
12938
  init_chunk_6IJ7OJX6();
12939
+ init_chunk_HXLHAPSY();
12940
12940
  init_chunk_66V6LKQ4();
12941
12941
  init_chunk_OD44264Z();
12942
12942
  init_chunk_TS237RHU();
@@ -14948,16 +14948,16 @@ var init_dist_es_BJ5Q5O5V = __esm({
14948
14948
  }
14949
14949
  });
14950
14950
 
14951
- // ../core/dist/dist-es-FHTOZU7I.js
14952
- var dist_es_FHTOZU7I_exports = {};
14953
- __export(dist_es_FHTOZU7I_exports, {
14951
+ // ../core/dist/dist-es-STWOPB6S.js
14952
+ var dist_es_STWOPB6S_exports = {};
14953
+ __export(dist_es_STWOPB6S_exports, {
14954
14954
  fromTokenFile: () => fromTokenFile,
14955
14955
  fromWebToken: () => fromWebToken
14956
14956
  });
14957
14957
  import { readFileSync as readFileSync2 } from "fs";
14958
14958
  var fromWebToken, ENV_TOKEN_FILE, ENV_ROLE_ARN, ENV_ROLE_SESSION_NAME, fromTokenFile;
14959
- var init_dist_es_FHTOZU7I = __esm({
14960
- "../core/dist/dist-es-FHTOZU7I.js"() {
14959
+ var init_dist_es_STWOPB6S = __esm({
14960
+ "../core/dist/dist-es-STWOPB6S.js"() {
14961
14961
  "use strict";
14962
14962
  init_esm_shims();
14963
14963
  init_chunk_VEAA7R3K();
@@ -14968,7 +14968,7 @@ var init_dist_es_FHTOZU7I = __esm({
14968
14968
  const { roleArn, roleSessionName, webIdentityToken, providerId, policyArns, policy, durationSeconds } = init4;
14969
14969
  let { roleAssumerWithWebIdentity } = init4;
14970
14970
  if (!roleAssumerWithWebIdentity) {
14971
- const { getDefaultRoleAssumerWithWebIdentity: getDefaultRoleAssumerWithWebIdentity3 } = await Promise.resolve().then(() => (init_sts_CUYV6JJF(), sts_CUYV6JJF_exports));
14971
+ const { getDefaultRoleAssumerWithWebIdentity: getDefaultRoleAssumerWithWebIdentity3 } = await Promise.resolve().then(() => (init_sts_M53DV675(), sts_M53DV675_exports));
14972
14972
  roleAssumerWithWebIdentity = getDefaultRoleAssumerWithWebIdentity3({
14973
14973
  ...init4.clientConfig,
14974
14974
  credentialProviderLogger: init4.logger,
@@ -15015,14 +15015,14 @@ var init_dist_es_FHTOZU7I = __esm({
15015
15015
  }
15016
15016
  });
15017
15017
 
15018
- // ../core/dist/dist-es-QGKOUWAV.js
15019
- var dist_es_QGKOUWAV_exports = {};
15020
- __export(dist_es_QGKOUWAV_exports, {
15018
+ // ../core/dist/dist-es-VEUWLPOI.js
15019
+ var dist_es_VEUWLPOI_exports = {};
15020
+ __export(dist_es_VEUWLPOI_exports, {
15021
15021
  fromIni: () => fromIni
15022
15022
  });
15023
15023
  var resolveCredentialSource, setNamedProvider, isAssumeRoleProfile, isAssumeRoleWithSourceProfile, isCredentialSourceProfile, resolveAssumeRoleCredentials, isCredentialSourceWithoutRoleArn, isLoginProfile, resolveLoginCredentials, isProcessProfile, resolveProcessCredentials2, resolveSsoCredentials, isSsoProfile2, isStaticCredsProfile, resolveStaticCredentials, isWebIdentityProfile, resolveWebIdentityCredentials, resolveProfileData, fromIni;
15024
- var init_dist_es_QGKOUWAV = __esm({
15025
- "../core/dist/dist-es-QGKOUWAV.js"() {
15024
+ var init_dist_es_VEUWLPOI = __esm({
15025
+ "../core/dist/dist-es-VEUWLPOI.js"() {
15026
15026
  "use strict";
15027
15027
  init_esm_shims();
15028
15028
  init_chunk_VEAA7R3K();
@@ -15076,7 +15076,7 @@ var init_dist_es_QGKOUWAV = __esm({
15076
15076
  const profileData = profiles[profileName];
15077
15077
  const { source_profile, region } = profileData;
15078
15078
  if (!options.roleAssumer) {
15079
- const { getDefaultRoleAssumer: getDefaultRoleAssumer3 } = await Promise.resolve().then(() => (init_sts_CUYV6JJF(), sts_CUYV6JJF_exports));
15079
+ const { getDefaultRoleAssumer: getDefaultRoleAssumer3 } = await Promise.resolve().then(() => (init_sts_M53DV675(), sts_M53DV675_exports));
15080
15080
  options.roleAssumer = getDefaultRoleAssumer3({
15081
15081
  ...options.clientConfig,
15082
15082
  credentialProviderLogger: options.logger,
@@ -15140,7 +15140,7 @@ var init_dist_es_QGKOUWAV = __esm({
15140
15140
  return setCredentialFeature(credentials, "CREDENTIALS_PROFILE_PROCESS", "v");
15141
15141
  };
15142
15142
  resolveSsoCredentials = async (profile, profileData, options = {}, callerClientConfig) => {
15143
- const { fromSSO: fromSSO2 } = await Promise.resolve().then(() => (init_dist_es_IGT2EBTC(), dist_es_IGT2EBTC_exports));
15143
+ const { fromSSO: fromSSO2 } = await Promise.resolve().then(() => (init_dist_es_NT54JC6T(), dist_es_NT54JC6T_exports));
15144
15144
  return fromSSO2({
15145
15145
  profile,
15146
15146
  logger: options.logger,
@@ -15171,7 +15171,7 @@ var init_dist_es_QGKOUWAV = __esm({
15171
15171
  };
15172
15172
  isWebIdentityProfile = (arg) => Boolean(arg) && typeof arg === "object" && typeof arg.web_identity_token_file === "string" && typeof arg.role_arn === "string" && ["undefined", "string"].indexOf(typeof arg.role_session_name) > -1;
15173
15173
  resolveWebIdentityCredentials = async (profile, options, callerClientConfig) => {
15174
- const { fromTokenFile: fromTokenFile2 } = await Promise.resolve().then(() => (init_dist_es_FHTOZU7I(), dist_es_FHTOZU7I_exports));
15174
+ const { fromTokenFile: fromTokenFile2 } = await Promise.resolve().then(() => (init_dist_es_STWOPB6S(), dist_es_STWOPB6S_exports));
15175
15175
  const credentials = await fromTokenFile2({
15176
15176
  webIdentityTokenFile: profile.web_identity_token_file,
15177
15177
  roleArn: profile.role_arn,
@@ -15741,9 +15741,9 @@ var init_dist = __esm({
15741
15741
  "use strict";
15742
15742
  init_esm_shims();
15743
15743
  init_chunk_HXLHAPSY();
15744
- init_chunk_2E2TCHT5();
15745
15744
  init_chunk_66V6LKQ4();
15746
15745
  init_chunk_OD44264Z();
15746
+ init_chunk_2E2TCHT5();
15747
15747
  init_chunk_TS237RHU();
15748
15748
  init_chunk_VEAA7R3K();
15749
15749
  init_chunk_U4QICZVS();
@@ -16310,12 +16310,12 @@ This email was sent by Wraps.`,
16310
16310
  if (!ssoStartUrl && !ssoAccountId && !ssoRegion && !ssoRoleName && !ssoSession) {
16311
16311
  throw new CredentialsProviderError("Skipping SSO provider in default chain (inputs do not include SSO fields).", { logger: init4.logger });
16312
16312
  }
16313
- const { fromSSO: fromSSO2 } = await Promise.resolve().then(() => (init_dist_es_IGT2EBTC(), dist_es_IGT2EBTC_exports));
16313
+ const { fromSSO: fromSSO2 } = await Promise.resolve().then(() => (init_dist_es_NT54JC6T(), dist_es_NT54JC6T_exports));
16314
16314
  return fromSSO2(init4)(awsIdentityProperties);
16315
16315
  },
16316
16316
  async (awsIdentityProperties) => {
16317
16317
  init4.logger?.debug("@aws-sdk/credential-provider-node - defaultProvider::fromIni");
16318
- const { fromIni: fromIni2 } = await Promise.resolve().then(() => (init_dist_es_QGKOUWAV(), dist_es_QGKOUWAV_exports));
16318
+ const { fromIni: fromIni2 } = await Promise.resolve().then(() => (init_dist_es_VEUWLPOI(), dist_es_VEUWLPOI_exports));
16319
16319
  return fromIni2(init4)(awsIdentityProperties);
16320
16320
  },
16321
16321
  async (awsIdentityProperties) => {
@@ -16325,7 +16325,7 @@ This email was sent by Wraps.`,
16325
16325
  },
16326
16326
  async (awsIdentityProperties) => {
16327
16327
  init4.logger?.debug("@aws-sdk/credential-provider-node - defaultProvider::fromTokenFile");
16328
- const { fromTokenFile: fromTokenFile2 } = await Promise.resolve().then(() => (init_dist_es_FHTOZU7I(), dist_es_FHTOZU7I_exports));
16328
+ const { fromTokenFile: fromTokenFile2 } = await Promise.resolve().then(() => (init_dist_es_STWOPB6S(), dist_es_STWOPB6S_exports));
16329
16329
  return fromTokenFile2(init4)(awsIdentityProperties);
16330
16330
  },
16331
16331
  async () => {
@@ -24886,7 +24886,7 @@ function calculateUserWebhookCost(config2, emailsPerMonth) {
24886
24886
  description: "User webhook (API Destination invocations)"
24887
24887
  };
24888
24888
  }
24889
- function calculateCosts(config2, emailsPerMonth = 1e4) {
24889
+ function calculateCosts(config2, emailsPerMonth = 1e4, sesPlan = DEFAULT_SES_PLAN) {
24890
24890
  const tracking = calculateTrackingCost(config2);
24891
24891
  const reputationMetrics = calculateReputationMetricsCost(config2);
24892
24892
  const eventTracking = calculateEventTrackingCost(config2, emailsPerMonth);
@@ -24897,7 +24897,7 @@ function calculateCosts(config2, emailsPerMonth = 1e4) {
24897
24897
  const smtpCredentials = calculateSMTPCredentialsCost(config2);
24898
24898
  const alerts = calculateAlertingCost(config2);
24899
24899
  const userWebhook = calculateUserWebhookCost(config2, emailsPerMonth);
24900
- const sesEmailCost = Math.max(0, emailsPerMonth - FREE_TIER.SES_EMAILS) * AWS_PRICING.SES_PER_EMAIL;
24900
+ const sesEmailCost = monthlyCostForPlan(sesPlan, emailsPerMonth);
24901
24901
  const totalMonthlyCost = sesEmailCost + (tracking?.monthly || 0) + (reputationMetrics?.monthly || 0) + (eventTracking?.monthly || 0) + (dynamoDBHistory?.monthly || 0) + (emailArchiving?.monthly || 0) + (dedicatedIp?.monthly || 0) + (waf?.monthly || 0) + (smtpCredentials?.monthly || 0) + (alerts?.monthly || 0) + (userWebhook?.monthly || 0);
24902
24902
  return {
24903
24903
  tracking,
@@ -24912,7 +24912,7 @@ function calculateCosts(config2, emailsPerMonth = 1e4) {
24912
24912
  userWebhook,
24913
24913
  total: {
24914
24914
  monthly: totalMonthlyCost,
24915
- perEmail: AWS_PRICING.SES_PER_EMAIL,
24915
+ perEmail: SES_PLAN_RATES[sesPlan].tiers[0].per1K / 1e3,
24916
24916
  description: `Total estimated cost for ${emailsPerMonth.toLocaleString()} emails/month`
24917
24917
  }
24918
24918
  };
@@ -24926,14 +24926,14 @@ function formatCost(cost) {
24926
24926
  }
24927
24927
  return `$${cost.toFixed(2)}`;
24928
24928
  }
24929
- function getCostSummary(config2, emailsPerMonth = 1e4) {
24930
- const costs = calculateCosts(config2, emailsPerMonth);
24929
+ function getCostSummary(config2, emailsPerMonth = 1e4, sesPlan = DEFAULT_SES_PLAN) {
24930
+ const costs = calculateCosts(config2, emailsPerMonth, sesPlan);
24931
24931
  const lines = [];
24932
24932
  lines.push(
24933
24933
  `Estimated cost for ${emailsPerMonth.toLocaleString()} emails/month: ${formatCost(costs.total.monthly)}/mo`
24934
24934
  );
24935
24935
  lines.push(
24936
- ` (${formatCost((costs.total.perEmail ?? 0) * 1e3)}/1k emails + infrastructure)`
24936
+ ` (${formatCost((costs.total.perEmail ?? 0) * 1e3)}/1k emails on the SES ${SES_PLAN_RATES[sesPlan].label} plan + infrastructure)`
24937
24937
  );
24938
24938
  if (costs.tracking) {
24939
24939
  lines.push(
@@ -24987,15 +24987,15 @@ function getCostSummary(config2, emailsPerMonth = 1e4) {
24987
24987
  }
24988
24988
  return lines.join("\n");
24989
24989
  }
24990
- var AWS_PRICING, FREE_TIER;
24990
+ var DEFAULT_SES_PLAN, AWS_PRICING, FREE_TIER;
24991
24991
  var init_costs = __esm({
24992
24992
  "src/utils/email/costs.ts"() {
24993
24993
  "use strict";
24994
24994
  init_esm_shims();
24995
+ init_ses_plans2();
24996
+ DEFAULT_SES_PLAN = "ESSENTIALS";
24995
24997
  AWS_PRICING = {
24996
24998
  // SES pricing
24997
- SES_PER_EMAIL: 1e-4,
24998
- // $0.10 per 1,000 emails (outbound)
24999
24999
  SES_ATTACHMENT_PER_GB: 0.12,
25000
25000
  // $0.12 per GB of attachments
25001
25001
  // DynamoDB pricing (on-demand, Standard table class)
@@ -25042,9 +25042,6 @@ var init_costs = __esm({
25042
25042
  // $0.20 per million API Destination invocations
25043
25043
  };
25044
25044
  FREE_TIER = {
25045
- // SES: no free sending tier (the 3,000/mo-for-12-months offer was retired
25046
- // 2026-07-21; new accounts get generic $200 AWS credits instead)
25047
- SES_EMAILS: 0,
25048
25045
  // Lambda: Permanently free tier
25049
25046
  LAMBDA_REQUESTS: 1e6,
25050
25047
  // 1M requests per month (always free)
@@ -29548,11 +29545,7 @@ var init_constants = __esm({
29548
29545
  }
29549
29546
  });
29550
29547
 
29551
- // src/utils/email/config-set-slug.ts
29552
- var config_set_slug_exports = {};
29553
- __export(config_set_slug_exports, {
29554
- domainToConfigSetName: () => domainToConfigSetName
29555
- });
29548
+ // ../core/dist/config-set-name.js
29556
29549
  import { createHash as createHash4 } from "crypto";
29557
29550
  function domainToConfigSetName(domain) {
29558
29551
  const slug = domain.toLowerCase().replace(/\./g, "-");
@@ -29565,15 +29558,41 @@ function domainToConfigSetName(domain) {
29565
29558
  const slugPart = rawSlugPart.replace(/-+$/, "");
29566
29559
  return `${PREFIX}${slugPart}-${hash}`;
29567
29560
  }
29568
- var PREFIX, MAX_LENGTH, MAX_SLUG, MAX_SLUG_WITH_HASH;
29569
- var init_config_set_slug = __esm({
29570
- "src/utils/email/config-set-slug.ts"() {
29561
+ var PREFIX, MAX_LENGTH, MAX_SLUG, MAX_SLUG_WITH_HASH, DOMAIN_CONFIG_SET_EVENT_TYPES, DOMAIN_EVENT_DESTINATION_NAME;
29562
+ var init_config_set_name = __esm({
29563
+ "../core/dist/config-set-name.js"() {
29571
29564
  "use strict";
29572
29565
  init_esm_shims();
29573
29566
  PREFIX = "wraps-email-";
29574
29567
  MAX_LENGTH = 64;
29575
29568
  MAX_SLUG = MAX_LENGTH - PREFIX.length;
29576
29569
  MAX_SLUG_WITH_HASH = MAX_SLUG - 9;
29570
+ DOMAIN_CONFIG_SET_EVENT_TYPES = [
29571
+ "SEND",
29572
+ "DELIVERY",
29573
+ "OPEN",
29574
+ "CLICK",
29575
+ "BOUNCE",
29576
+ "COMPLAINT",
29577
+ "REJECT",
29578
+ "RENDERING_FAILURE",
29579
+ "DELIVERY_DELAY",
29580
+ "SUBSCRIPTION"
29581
+ ];
29582
+ DOMAIN_EVENT_DESTINATION_NAME = "wraps-email-eventbridge";
29583
+ }
29584
+ });
29585
+
29586
+ // src/utils/email/config-set-slug.ts
29587
+ var config_set_slug_exports = {};
29588
+ __export(config_set_slug_exports, {
29589
+ domainToConfigSetName: () => domainToConfigSetName
29590
+ });
29591
+ var init_config_set_slug = __esm({
29592
+ "src/utils/email/config-set-slug.ts"() {
29593
+ "use strict";
29594
+ init_esm_shims();
29595
+ init_config_set_name();
29577
29596
  }
29578
29597
  });
29579
29598
 
@@ -38781,7 +38800,9 @@ function buildConsolePolicyDocument(emailConfig, smsConfig) {
38781
38800
  // Write, deliberately. verifyOwnEmailIdentity in
38782
38801
  // apps/web/src/actions/ses-onboarding.ts creates the operator's own
38783
38802
  // address as an SES identity so a sandboxed account can complete a
38784
- // real first send. This is the ONLY identity write the role grants.
38803
+ // real first send. CreateEmailIdentity and
38804
+ // PutEmailIdentityConfigurationSetAttributes (statement below) are the
38805
+ // only identity writes the role grants.
38785
38806
  "ses:CreateEmailIdentity",
38786
38807
  // SES v2 API for configuration set scanning (needed by dashboard).
38787
38808
  // List is what makes Get reachable — Get takes a name only List can find.
@@ -38800,6 +38821,19 @@ function buildConsolePolicyDocument(emailConfig, smsConfig) {
38800
38821
  ],
38801
38822
  Resource: "*"
38802
38823
  });
38824
+ statements.push({
38825
+ Effect: "Allow",
38826
+ Action: [
38827
+ "ses:CreateConfigurationSet",
38828
+ "ses:CreateConfigurationSetEventDestination"
38829
+ ],
38830
+ Resource: "arn:aws:ses:*:*:configuration-set/wraps-email-*"
38831
+ });
38832
+ statements.push({
38833
+ Effect: "Allow",
38834
+ Action: ["ses:PutEmailIdentityConfigurationSetAttributes"],
38835
+ Resource: "*"
38836
+ });
38803
38837
  statements.push({
38804
38838
  Effect: "Allow",
38805
38839
  Action: ["s3:ListBucket"],
@@ -46661,6 +46695,7 @@ Run ${pc24.cyan("wraps email init")} to deploy infrastructure again.
46661
46695
 
46662
46696
  // src/commands/email/domains.ts
46663
46697
  init_esm_shims();
46698
+ init_config_set_name();
46664
46699
  init_client();
46665
46700
  init_events();
46666
46701
  init_dns();
@@ -49179,18 +49214,7 @@ Run ${pc27.cyan("wraps email init")} first to deploy email infrastructure.
49179
49214
  opens: purpose === "marketing" || purpose === "notifications",
49180
49215
  clicks: purpose === "marketing" || purpose === "notifications"
49181
49216
  };
49182
- const matchingEventTypes = [
49183
- "SEND",
49184
- "DELIVERY",
49185
- "OPEN",
49186
- "CLICK",
49187
- "BOUNCE",
49188
- "COMPLAINT",
49189
- "REJECT",
49190
- "RENDERING_FAILURE",
49191
- "DELIVERY_DELAY",
49192
- "SUBSCRIPTION"
49193
- ];
49217
+ const matchingEventTypes = [...DOMAIN_CONFIG_SET_EVENT_TYPES];
49194
49218
  const eventBusArn = `arn:aws:events:${region}:${identity.accountId}:event-bus/default`;
49195
49219
  await progress.execute("Creating tracking configuration", async () => {
49196
49220
  try {
@@ -49208,7 +49232,7 @@ Run ${pc27.cyan("wraps email init")} first to deploy email infrastructure.
49208
49232
  await sesClient.send(
49209
49233
  new CreateConfigurationSetEventDestinationCommand({
49210
49234
  ConfigurationSetName: configSetName,
49211
- EventDestinationName: "wraps-email-eventbridge",
49235
+ EventDestinationName: DOMAIN_EVENT_DESTINATION_NAME,
49212
49236
  EventDestination: {
49213
49237
  Enabled: true,
49214
49238
  MatchingEventTypes: matchingEventTypes,