@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 +87 -63
- package/dist/cli.js.map +1 -1
- package/dist/lambda/agent-enforcer/.bundled +1 -1
- package/dist/lambda/event-processor/.bundled +1 -1
- package/dist/lambda/event-processor/cloudformation-parity.test.ts +230 -0
- package/dist/lambda/event-processor/index.js +7 -7
- package/dist/lambda/event-processor/index.test.ts +223 -0
- package/dist/lambda/event-processor/index.ts +117 -1
- package/dist/lambda/inbound-processor/.bundled +1 -1
- package/dist/lambda/sms-event-processor/.bundled +1 -1
- package/package.json +2 -2
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-
|
|
12542
|
-
var
|
|
12543
|
-
__export(
|
|
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
|
|
12551
|
-
"../core/dist/dist-es-
|
|
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-
|
|
12858
|
-
var
|
|
12859
|
-
__export(
|
|
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
|
|
12935
|
-
"../core/dist/sts-
|
|
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-
|
|
14952
|
-
var
|
|
14953
|
-
__export(
|
|
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
|
|
14960
|
-
"../core/dist/dist-es-
|
|
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(() => (
|
|
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-
|
|
15019
|
-
var
|
|
15020
|
-
__export(
|
|
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
|
|
15025
|
-
"../core/dist/dist-es-
|
|
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(() => (
|
|
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(() => (
|
|
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(() => (
|
|
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(() => (
|
|
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(() => (
|
|
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(() => (
|
|
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 =
|
|
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:
|
|
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
|
-
//
|
|
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
|
|
29570
|
-
"
|
|
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.
|
|
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:
|
|
49235
|
+
EventDestinationName: DOMAIN_EVENT_DESTINATION_NAME,
|
|
49212
49236
|
EventDestination: {
|
|
49213
49237
|
Enabled: true,
|
|
49214
49238
|
MatchingEventTypes: matchingEventTypes,
|