@wraps.dev/cli 2.2.3 → 2.2.6
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 +208 -20
- package/dist/cli.js.map +1 -1
- package/package.json +3 -3
package/dist/cli.js
CHANGED
|
@@ -147,7 +147,7 @@ var require_package = __commonJS({
|
|
|
147
147
|
"package.json"(exports, module) {
|
|
148
148
|
module.exports = {
|
|
149
149
|
name: "@wraps.dev/cli",
|
|
150
|
-
version: "2.2.
|
|
150
|
+
version: "2.2.6",
|
|
151
151
|
description: "CLI for deploying Wraps email infrastructure to your AWS account",
|
|
152
152
|
type: "module",
|
|
153
153
|
main: "./dist/cli.js",
|
|
@@ -194,7 +194,6 @@ var require_package = __commonJS({
|
|
|
194
194
|
author: "Wraps",
|
|
195
195
|
license: "AGPL-3.0-or-later",
|
|
196
196
|
dependencies: {
|
|
197
|
-
"@wraps.dev/core": "workspace:*",
|
|
198
197
|
"@aws-sdk/client-acm": "3.933.0",
|
|
199
198
|
"@aws-sdk/client-cloudformation": "^3.490.0",
|
|
200
199
|
"@aws-sdk/client-cloudfront": "3.933.0",
|
|
@@ -231,6 +230,7 @@ var require_package = __commonJS({
|
|
|
231
230
|
uuid: "^11.0.3"
|
|
232
231
|
},
|
|
233
232
|
devDependencies: {
|
|
233
|
+
"@wraps/core": "workspace:*",
|
|
234
234
|
"@types/args": "5.0.4",
|
|
235
235
|
"@types/express": "^5.0.0",
|
|
236
236
|
"@types/mailparser": "3.4.6",
|
|
@@ -3021,6 +3021,197 @@ var init_metadata = __esm({
|
|
|
3021
3021
|
}
|
|
3022
3022
|
});
|
|
3023
3023
|
|
|
3024
|
+
// ../core/dist/index.js
|
|
3025
|
+
var dist_exports = {};
|
|
3026
|
+
__export(dist_exports, {
|
|
3027
|
+
ALL_EVENT_TYPES: () => ALL_EVENT_TYPES,
|
|
3028
|
+
DEFAULT_CONFIG_SET_NAME: () => DEFAULT_CONFIG_SET_NAME,
|
|
3029
|
+
DEFAULT_EVENT_TYPES: () => DEFAULT_EVENT_TYPES,
|
|
3030
|
+
DEFAULT_HISTORY_RETENTION: () => DEFAULT_HISTORY_RETENTION,
|
|
3031
|
+
DEFAULT_MAIL_FROM_SUBDOMAIN: () => DEFAULT_MAIL_FROM_SUBDOMAIN,
|
|
3032
|
+
DEFAULT_SUPPRESSION_REASONS: () => DEFAULT_SUPPRESSION_REASONS,
|
|
3033
|
+
DEFAULT_TAGS: () => DEFAULT_TAGS,
|
|
3034
|
+
LAMBDA_EVENT_PROCESSOR_PATH: () => LAMBDA_EVENT_PROCESSOR_PATH,
|
|
3035
|
+
LAMBDA_SMS_EVENT_PROCESSOR_PATH: () => LAMBDA_SMS_EVENT_PROCESSOR_PATH,
|
|
3036
|
+
RESOURCE_PREFIX: () => RESOURCE_PREFIX,
|
|
3037
|
+
VERCEL_OIDC_THUMBPRINT: () => VERCEL_OIDC_THUMBPRINT,
|
|
3038
|
+
VERCEL_OIDC_URL: () => VERCEL_OIDC_URL,
|
|
3039
|
+
calculateTTL: () => calculateTTL,
|
|
3040
|
+
convertToSMTPPassword: () => convertToSMTPPassword,
|
|
3041
|
+
getSMTPConnectionDetails: () => getSMTPConnectionDetails,
|
|
3042
|
+
getSMTPEndpoint: () => getSMTPEndpoint,
|
|
3043
|
+
retentionToAWSPeriod: () => retentionToAWSPeriod,
|
|
3044
|
+
retentionToDays: () => retentionToDays2
|
|
3045
|
+
});
|
|
3046
|
+
import { createHmac } from "crypto";
|
|
3047
|
+
function retentionToDays2(retention) {
|
|
3048
|
+
switch (retention) {
|
|
3049
|
+
case "7days":
|
|
3050
|
+
return 7;
|
|
3051
|
+
case "30days":
|
|
3052
|
+
return 30;
|
|
3053
|
+
case "90days":
|
|
3054
|
+
case "3months":
|
|
3055
|
+
return 90;
|
|
3056
|
+
case "6months":
|
|
3057
|
+
return 180;
|
|
3058
|
+
case "9months":
|
|
3059
|
+
return 270;
|
|
3060
|
+
case "1year":
|
|
3061
|
+
return 365;
|
|
3062
|
+
case "18months":
|
|
3063
|
+
return 548;
|
|
3064
|
+
case "2years":
|
|
3065
|
+
return 730;
|
|
3066
|
+
case "30months":
|
|
3067
|
+
return 913;
|
|
3068
|
+
case "3years":
|
|
3069
|
+
return 1095;
|
|
3070
|
+
case "4years":
|
|
3071
|
+
return 1460;
|
|
3072
|
+
case "5years":
|
|
3073
|
+
return 1825;
|
|
3074
|
+
case "6years":
|
|
3075
|
+
return 2190;
|
|
3076
|
+
case "7years":
|
|
3077
|
+
return 2555;
|
|
3078
|
+
case "8years":
|
|
3079
|
+
return 2920;
|
|
3080
|
+
case "9years":
|
|
3081
|
+
return 3285;
|
|
3082
|
+
case "10years":
|
|
3083
|
+
return 3650;
|
|
3084
|
+
case "indefinite":
|
|
3085
|
+
case "permanent":
|
|
3086
|
+
return -1;
|
|
3087
|
+
// No TTL / permanent
|
|
3088
|
+
default:
|
|
3089
|
+
return 90;
|
|
3090
|
+
}
|
|
3091
|
+
}
|
|
3092
|
+
function retentionToAWSPeriod(retention) {
|
|
3093
|
+
switch (retention) {
|
|
3094
|
+
case "3months":
|
|
3095
|
+
return "THREE_MONTHS";
|
|
3096
|
+
case "6months":
|
|
3097
|
+
return "SIX_MONTHS";
|
|
3098
|
+
case "9months":
|
|
3099
|
+
return "NINE_MONTHS";
|
|
3100
|
+
case "1year":
|
|
3101
|
+
return "ONE_YEAR";
|
|
3102
|
+
case "18months":
|
|
3103
|
+
return "EIGHTEEN_MONTHS";
|
|
3104
|
+
case "2years":
|
|
3105
|
+
return "TWO_YEARS";
|
|
3106
|
+
case "30months":
|
|
3107
|
+
return "THIRTY_MONTHS";
|
|
3108
|
+
case "3years":
|
|
3109
|
+
return "THREE_YEARS";
|
|
3110
|
+
case "4years":
|
|
3111
|
+
return "FOUR_YEARS";
|
|
3112
|
+
case "5years":
|
|
3113
|
+
return "FIVE_YEARS";
|
|
3114
|
+
case "6years":
|
|
3115
|
+
return "SIX_YEARS";
|
|
3116
|
+
case "7years":
|
|
3117
|
+
return "SEVEN_YEARS";
|
|
3118
|
+
case "8years":
|
|
3119
|
+
return "EIGHT_YEARS";
|
|
3120
|
+
case "9years":
|
|
3121
|
+
return "NINE_YEARS";
|
|
3122
|
+
case "10years":
|
|
3123
|
+
return "TEN_YEARS";
|
|
3124
|
+
case "permanent":
|
|
3125
|
+
case "indefinite":
|
|
3126
|
+
return "PERMANENT";
|
|
3127
|
+
default:
|
|
3128
|
+
return "THREE_MONTHS";
|
|
3129
|
+
}
|
|
3130
|
+
}
|
|
3131
|
+
function calculateTTL(retentionDays) {
|
|
3132
|
+
if (retentionDays < 0) {
|
|
3133
|
+
return;
|
|
3134
|
+
}
|
|
3135
|
+
return Math.floor(Date.now() / 1e3) + retentionDays * 24 * 60 * 60;
|
|
3136
|
+
}
|
|
3137
|
+
function convertToSMTPPassword(secretAccessKey, region) {
|
|
3138
|
+
const DATE = "11111111";
|
|
3139
|
+
const SERVICE = "ses";
|
|
3140
|
+
const MESSAGE = "SendRawEmail";
|
|
3141
|
+
const TERMINAL = "aws4_request";
|
|
3142
|
+
const VERSION2 = 4;
|
|
3143
|
+
const kDate = createHmac("sha256", `AWS4${secretAccessKey}`).update(DATE).digest();
|
|
3144
|
+
const kRegion = createHmac("sha256", kDate).update(region).digest();
|
|
3145
|
+
const kService = createHmac("sha256", kRegion).update(SERVICE).digest();
|
|
3146
|
+
const kTerminal = createHmac("sha256", kService).update(TERMINAL).digest();
|
|
3147
|
+
const kMessage = createHmac("sha256", kTerminal).update(MESSAGE).digest();
|
|
3148
|
+
const signatureWithVersion = Buffer.concat([
|
|
3149
|
+
Buffer.from([VERSION2]),
|
|
3150
|
+
kMessage
|
|
3151
|
+
]);
|
|
3152
|
+
return signatureWithVersion.toString("base64");
|
|
3153
|
+
}
|
|
3154
|
+
function getSMTPEndpoint(region) {
|
|
3155
|
+
return `email-smtp.${region}.amazonaws.com`;
|
|
3156
|
+
}
|
|
3157
|
+
function getSMTPConnectionDetails(region) {
|
|
3158
|
+
return {
|
|
3159
|
+
host: getSMTPEndpoint(region),
|
|
3160
|
+
port: 587,
|
|
3161
|
+
// STARTTLS
|
|
3162
|
+
secure: false
|
|
3163
|
+
// Use STARTTLS
|
|
3164
|
+
};
|
|
3165
|
+
}
|
|
3166
|
+
var DEFAULT_EVENT_TYPES, ALL_EVENT_TYPES, DEFAULT_SUPPRESSION_REASONS, DEFAULT_CONFIG_SET_NAME, DEFAULT_MAIL_FROM_SUBDOMAIN, DEFAULT_HISTORY_RETENTION, VERCEL_OIDC_URL, VERCEL_OIDC_THUMBPRINT, RESOURCE_PREFIX, DEFAULT_TAGS, LAMBDA_EVENT_PROCESSOR_PATH, LAMBDA_SMS_EVENT_PROCESSOR_PATH;
|
|
3167
|
+
var init_dist = __esm({
|
|
3168
|
+
"../core/dist/index.js"() {
|
|
3169
|
+
"use strict";
|
|
3170
|
+
init_esm_shims();
|
|
3171
|
+
DEFAULT_EVENT_TYPES = [
|
|
3172
|
+
"SEND",
|
|
3173
|
+
"DELIVERY",
|
|
3174
|
+
"BOUNCE",
|
|
3175
|
+
"COMPLAINT",
|
|
3176
|
+
"OPEN",
|
|
3177
|
+
"CLICK"
|
|
3178
|
+
];
|
|
3179
|
+
ALL_EVENT_TYPES = [
|
|
3180
|
+
"SEND",
|
|
3181
|
+
"DELIVERY",
|
|
3182
|
+
"OPEN",
|
|
3183
|
+
"CLICK",
|
|
3184
|
+
"BOUNCE",
|
|
3185
|
+
"COMPLAINT",
|
|
3186
|
+
"REJECT",
|
|
3187
|
+
"RENDERING_FAILURE",
|
|
3188
|
+
"DELIVERY_DELAY",
|
|
3189
|
+
"SUBSCRIPTION"
|
|
3190
|
+
];
|
|
3191
|
+
DEFAULT_SUPPRESSION_REASONS = [
|
|
3192
|
+
"BOUNCE",
|
|
3193
|
+
"COMPLAINT"
|
|
3194
|
+
];
|
|
3195
|
+
DEFAULT_CONFIG_SET_NAME = "wraps-email-tracking";
|
|
3196
|
+
DEFAULT_MAIL_FROM_SUBDOMAIN = "mail";
|
|
3197
|
+
DEFAULT_HISTORY_RETENTION = "90days";
|
|
3198
|
+
VERCEL_OIDC_URL = "https://oidc.vercel.com";
|
|
3199
|
+
VERCEL_OIDC_THUMBPRINT = "a031c46782e6e6c662c2c87c76da9aa62ccabd8e";
|
|
3200
|
+
RESOURCE_PREFIX = "wraps-email";
|
|
3201
|
+
DEFAULT_TAGS = {
|
|
3202
|
+
ManagedBy: "wraps"
|
|
3203
|
+
};
|
|
3204
|
+
LAMBDA_EVENT_PROCESSOR_PATH = new URL(
|
|
3205
|
+
"../lambda/event-processor",
|
|
3206
|
+
import.meta.url
|
|
3207
|
+
).pathname;
|
|
3208
|
+
LAMBDA_SMS_EVENT_PROCESSOR_PATH = new URL(
|
|
3209
|
+
"../lambda/sms-event-processor",
|
|
3210
|
+
import.meta.url
|
|
3211
|
+
).pathname;
|
|
3212
|
+
}
|
|
3213
|
+
});
|
|
3214
|
+
|
|
3024
3215
|
// src/infrastructure/resources/lambda.ts
|
|
3025
3216
|
var lambda_exports = {};
|
|
3026
3217
|
__export(lambda_exports, {
|
|
@@ -3034,10 +3225,6 @@ import { dirname, join as join4 } from "path";
|
|
|
3034
3225
|
import { fileURLToPath as fileURLToPath2 } from "url";
|
|
3035
3226
|
import * as aws7 from "@pulumi/aws";
|
|
3036
3227
|
import * as pulumi11 from "@pulumi/pulumi";
|
|
3037
|
-
import {
|
|
3038
|
-
LAMBDA_EVENT_PROCESSOR_PATH,
|
|
3039
|
-
LAMBDA_SMS_EVENT_PROCESSOR_PATH
|
|
3040
|
-
} from "@wraps.dev/core";
|
|
3041
3228
|
import { build } from "esbuild";
|
|
3042
3229
|
function getPackageRoot() {
|
|
3043
3230
|
const currentFile = fileURLToPath2(import.meta.url);
|
|
@@ -3271,6 +3458,7 @@ var init_lambda = __esm({
|
|
|
3271
3458
|
"src/infrastructure/resources/lambda.ts"() {
|
|
3272
3459
|
"use strict";
|
|
3273
3460
|
init_esm_shims();
|
|
3461
|
+
init_dist();
|
|
3274
3462
|
}
|
|
3275
3463
|
});
|
|
3276
3464
|
|
|
@@ -3519,7 +3707,7 @@ import {
|
|
|
3519
3707
|
PutConfigurationSetArchivingOptionsCommand,
|
|
3520
3708
|
SESv2Client as SESv2Client2
|
|
3521
3709
|
} from "@aws-sdk/client-sesv2";
|
|
3522
|
-
function
|
|
3710
|
+
function retentionToAWSPeriod2(retention) {
|
|
3523
3711
|
switch (retention) {
|
|
3524
3712
|
case "3months":
|
|
3525
3713
|
return "THREE_MONTHS";
|
|
@@ -3565,7 +3753,7 @@ async function createMailManagerArchive(config2) {
|
|
|
3565
3753
|
const kmsKeyArn = config2.kmsKeyArn;
|
|
3566
3754
|
if (!kmsKeyArn) {
|
|
3567
3755
|
}
|
|
3568
|
-
const awsRetention =
|
|
3756
|
+
const awsRetention = retentionToAWSPeriod2(config2.retention);
|
|
3569
3757
|
let archiveId;
|
|
3570
3758
|
let archiveArn;
|
|
3571
3759
|
try {
|
|
@@ -8458,7 +8646,7 @@ import * as clack12 from "@clack/prompts";
|
|
|
8458
8646
|
// ../email-check/dist/index.js
|
|
8459
8647
|
init_esm_shims();
|
|
8460
8648
|
import { promises as dns, Resolver } from "dns";
|
|
8461
|
-
import { URL } from "url";
|
|
8649
|
+
import { URL as URL2 } from "url";
|
|
8462
8650
|
import * as net from "net";
|
|
8463
8651
|
import * as tls from "tls";
|
|
8464
8652
|
var QUICK_DKIM_SELECTORS = [
|
|
@@ -8936,7 +9124,7 @@ async function batchDnsQuery(items, queryFn, concurrency = 10) {
|
|
|
8936
9124
|
}
|
|
8937
9125
|
function toAsciiDomain(domain) {
|
|
8938
9126
|
try {
|
|
8939
|
-
const url = new
|
|
9127
|
+
const url = new URL2(`http://${domain.toLowerCase()}`);
|
|
8940
9128
|
return url.hostname;
|
|
8941
9129
|
} catch {
|
|
8942
9130
|
return domain.toLowerCase();
|
|
@@ -11435,9 +11623,9 @@ import pc14 from "picocolors";
|
|
|
11435
11623
|
|
|
11436
11624
|
// src/infrastructure/email-stack.ts
|
|
11437
11625
|
init_esm_shims();
|
|
11626
|
+
init_dist();
|
|
11438
11627
|
import * as aws13 from "@pulumi/aws";
|
|
11439
11628
|
import * as pulumi12 from "@pulumi/pulumi";
|
|
11440
|
-
import { retentionToDays as retentionToDays2 } from "@wraps.dev/core";
|
|
11441
11629
|
|
|
11442
11630
|
// src/infrastructure/resources/dynamodb.ts
|
|
11443
11631
|
init_esm_shims();
|
|
@@ -12023,19 +12211,19 @@ async function createSESResources(config2) {
|
|
|
12023
12211
|
|
|
12024
12212
|
// src/infrastructure/resources/smtp-credentials.ts
|
|
12025
12213
|
init_esm_shims();
|
|
12026
|
-
import { createHmac } from "crypto";
|
|
12214
|
+
import { createHmac as createHmac2 } from "crypto";
|
|
12027
12215
|
import * as aws9 from "@pulumi/aws";
|
|
12028
|
-
function
|
|
12216
|
+
function convertToSMTPPassword2(secretAccessKey, region) {
|
|
12029
12217
|
const DATE = "11111111";
|
|
12030
12218
|
const SERVICE = "ses";
|
|
12031
12219
|
const MESSAGE = "SendRawEmail";
|
|
12032
12220
|
const TERMINAL = "aws4_request";
|
|
12033
12221
|
const VERSION2 = 4;
|
|
12034
|
-
const kDate =
|
|
12035
|
-
const kRegion =
|
|
12036
|
-
const kService =
|
|
12037
|
-
const kTerminal =
|
|
12038
|
-
const kMessage =
|
|
12222
|
+
const kDate = createHmac2("sha256", `AWS4${secretAccessKey}`).update(DATE).digest();
|
|
12223
|
+
const kRegion = createHmac2("sha256", kDate).update(region).digest();
|
|
12224
|
+
const kService = createHmac2("sha256", kRegion).update(SERVICE).digest();
|
|
12225
|
+
const kTerminal = createHmac2("sha256", kService).update(TERMINAL).digest();
|
|
12226
|
+
const kMessage = createHmac2("sha256", kTerminal).update(MESSAGE).digest();
|
|
12039
12227
|
const signatureWithVersion = Buffer.concat([
|
|
12040
12228
|
Buffer.from([VERSION2]),
|
|
12041
12229
|
kMessage
|
|
@@ -12099,7 +12287,7 @@ async function createSMTPCredentials(config2) {
|
|
|
12099
12287
|
user: iamUser.name
|
|
12100
12288
|
});
|
|
12101
12289
|
const smtpPassword = accessKey.secret.apply(
|
|
12102
|
-
(secret) =>
|
|
12290
|
+
(secret) => convertToSMTPPassword2(secret, config2.region)
|
|
12103
12291
|
);
|
|
12104
12292
|
return {
|
|
12105
12293
|
iamUser,
|
|
@@ -19554,7 +19742,7 @@ async function deploySMSStack(config2) {
|
|
|
19554
19742
|
}
|
|
19555
19743
|
let lambdaFunction;
|
|
19556
19744
|
if (smsConfig.eventTracking?.dynamoDBHistory && dynamoTable && sqsResources) {
|
|
19557
|
-
const { retentionToDays: retentionToDays3 } = await
|
|
19745
|
+
const { retentionToDays: retentionToDays3 } = await Promise.resolve().then(() => (init_dist(), dist_exports));
|
|
19558
19746
|
const retentionDays = retentionToDays3(
|
|
19559
19747
|
smsConfig.eventTracking.archiveRetention ?? "90days"
|
|
19560
19748
|
);
|