@effortless-aws/cli 0.5.0 → 1.0.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/index.js +61 -28
- package/package.json +3 -3
package/dist/cli/index.js
CHANGED
|
@@ -3832,6 +3832,7 @@ var ensureFifoQueue = (input) => Effect22.gen(function* () {
|
|
|
3832
3832
|
name,
|
|
3833
3833
|
visibilityTimeout = 30,
|
|
3834
3834
|
retentionPeriod = 345600,
|
|
3835
|
+
delay = 0,
|
|
3835
3836
|
contentBasedDeduplication = true,
|
|
3836
3837
|
tags
|
|
3837
3838
|
} = input;
|
|
@@ -3854,7 +3855,8 @@ var ensureFifoQueue = (input) => Effect22.gen(function* () {
|
|
|
3854
3855
|
FifoQueue: "true",
|
|
3855
3856
|
ContentBasedDeduplication: String(contentBasedDeduplication),
|
|
3856
3857
|
VisibilityTimeout: String(visibilityTimeout),
|
|
3857
|
-
MessageRetentionPeriod: String(retentionPeriod)
|
|
3858
|
+
MessageRetentionPeriod: String(retentionPeriod),
|
|
3859
|
+
DelaySeconds: String(delay)
|
|
3858
3860
|
},
|
|
3859
3861
|
...tags ? { tags } : {}
|
|
3860
3862
|
});
|
|
@@ -3867,7 +3869,8 @@ var ensureFifoQueue = (input) => Effect22.gen(function* () {
|
|
|
3867
3869
|
Attributes: {
|
|
3868
3870
|
ContentBasedDeduplication: String(contentBasedDeduplication),
|
|
3869
3871
|
VisibilityTimeout: String(visibilityTimeout),
|
|
3870
|
-
MessageRetentionPeriod: String(retentionPeriod)
|
|
3872
|
+
MessageRetentionPeriod: String(retentionPeriod),
|
|
3873
|
+
DelaySeconds: String(delay)
|
|
3871
3874
|
}
|
|
3872
3875
|
});
|
|
3873
3876
|
if (tags) {
|
|
@@ -4434,6 +4437,7 @@ var checkMissingParams = (params) => Effect25.gen(function* () {
|
|
|
4434
4437
|
|
|
4435
4438
|
// src/deploy/deploy-table.ts
|
|
4436
4439
|
import { Effect as Effect27 } from "effect";
|
|
4440
|
+
import { toSeconds } from "effortless-aws";
|
|
4437
4441
|
|
|
4438
4442
|
// src/deploy/shared.ts
|
|
4439
4443
|
import { Effect as Effect26 } from "effect";
|
|
@@ -4554,9 +4558,9 @@ var deployTableFunction = ({ input, fn: fn13, layerArn, external, depsEnv, depsP
|
|
|
4554
4558
|
handlerName,
|
|
4555
4559
|
defaultPermissions: TABLE_DEFAULT_PERMISSIONS,
|
|
4556
4560
|
bundleType: "table",
|
|
4557
|
-
...config.permissions ? { permissions: config.permissions } : {},
|
|
4558
|
-
...config.memory ? { memory: config.memory } : {},
|
|
4559
|
-
...config.timeout ? { timeout: config.timeout } : {},
|
|
4561
|
+
...config.lambda?.permissions ? { permissions: config.lambda.permissions } : {},
|
|
4562
|
+
...config.lambda?.memory ? { memory: config.lambda.memory } : {},
|
|
4563
|
+
...config.lambda?.timeout ? { timeout: toSeconds(config.lambda.timeout) } : {},
|
|
4560
4564
|
...layerArn ? { layerArn } : {},
|
|
4561
4565
|
...external ? { external } : {},
|
|
4562
4566
|
depsEnv: selfEnv,
|
|
@@ -4568,7 +4572,7 @@ var deployTableFunction = ({ input, fn: fn13, layerArn, external, depsEnv, depsP
|
|
|
4568
4572
|
functionArn,
|
|
4569
4573
|
streamArn,
|
|
4570
4574
|
batchSize: config.batchSize ?? 100,
|
|
4571
|
-
batchWindow: config.batchWindow ?? 2,
|
|
4575
|
+
batchWindow: toSeconds(config.batchWindow ?? 2),
|
|
4572
4576
|
startingPosition: config.startingPosition ?? "LATEST"
|
|
4573
4577
|
});
|
|
4574
4578
|
yield* Effect27.logDebug(`Table deployment complete! Table: ${tableArn}`);
|
|
@@ -4646,6 +4650,7 @@ var deployAllTables = (input) => Effect27.gen(function* () {
|
|
|
4646
4650
|
|
|
4647
4651
|
// src/deploy/deploy-api.ts
|
|
4648
4652
|
import { Effect as Effect28 } from "effect";
|
|
4653
|
+
import { toSeconds as toSeconds2 } from "effortless-aws";
|
|
4649
4654
|
var deployApiFunction = ({ input, fn: fn13, layerArn, external, depsEnv, depsPermissions, staticGlobs }) => Effect28.gen(function* () {
|
|
4650
4655
|
const { exportName, config } = fn13;
|
|
4651
4656
|
const handlerName = exportName;
|
|
@@ -4654,9 +4659,9 @@ var deployApiFunction = ({ input, fn: fn13, layerArn, external, depsEnv, depsPer
|
|
|
4654
4659
|
exportName,
|
|
4655
4660
|
handlerName,
|
|
4656
4661
|
bundleType: "api",
|
|
4657
|
-
...config.permissions ? { permissions: config.permissions } : {},
|
|
4658
|
-
...config.memory ? { memory: config.memory } : {},
|
|
4659
|
-
...config.timeout ? { timeout: config.timeout } : {},
|
|
4662
|
+
...config.lambda?.permissions ? { permissions: config.lambda.permissions } : {},
|
|
4663
|
+
...config.lambda?.memory ? { memory: config.lambda.memory } : {},
|
|
4664
|
+
...config.lambda?.timeout ? { timeout: toSeconds2(config.lambda.timeout) } : {},
|
|
4660
4665
|
...layerArn ? { layerArn } : {},
|
|
4661
4666
|
...external ? { external } : {},
|
|
4662
4667
|
...depsEnv ? { depsEnv } : {},
|
|
@@ -4712,6 +4717,7 @@ var deploy = (input) => Effect28.gen(function* () {
|
|
|
4712
4717
|
|
|
4713
4718
|
// src/deploy/deploy-app.ts
|
|
4714
4719
|
import { Effect as Effect29 } from "effect";
|
|
4720
|
+
import { toSeconds as toSeconds3 } from "effortless-aws";
|
|
4715
4721
|
import { execSync } from "child_process";
|
|
4716
4722
|
import * as path5 from "path";
|
|
4717
4723
|
var deployApp = (input) => Effect29.gen(function* () {
|
|
@@ -4749,7 +4755,7 @@ var deployApp = (input) => Effect29.gen(function* () {
|
|
|
4749
4755
|
const serverDir = path5.resolve(projectDir, config.server);
|
|
4750
4756
|
yield* Effect29.logDebug(`Zipping server directory: ${serverDir}`);
|
|
4751
4757
|
const code = yield* zipDirectory(serverDir);
|
|
4752
|
-
const permissions = config.permissions ?? [];
|
|
4758
|
+
const permissions = config.lambda?.permissions ?? [];
|
|
4753
4759
|
const roleArn = yield* ensureRole(
|
|
4754
4760
|
project,
|
|
4755
4761
|
stage,
|
|
@@ -4765,8 +4771,8 @@ var deployApp = (input) => Effect29.gen(function* () {
|
|
|
4765
4771
|
roleArn,
|
|
4766
4772
|
code,
|
|
4767
4773
|
handler: "index.handler",
|
|
4768
|
-
memory: config.memory ?? 1024,
|
|
4769
|
-
timeout: config.timeout ?? 30,
|
|
4774
|
+
memory: config.lambda?.memory ?? 1024,
|
|
4775
|
+
timeout: toSeconds3(config.lambda?.timeout ?? 30),
|
|
4770
4776
|
tags: makeTags(tagCtx, "lambda"),
|
|
4771
4777
|
environment: {
|
|
4772
4778
|
EFF_PROJECT: project,
|
|
@@ -5282,6 +5288,7 @@ var deployStaticSite = (input) => Effect31.gen(function* () {
|
|
|
5282
5288
|
|
|
5283
5289
|
// src/deploy/deploy-fifo-queue.ts
|
|
5284
5290
|
import { Effect as Effect32 } from "effect";
|
|
5291
|
+
import { toSeconds as toSeconds4 } from "effortless-aws";
|
|
5285
5292
|
var FIFO_QUEUE_DEFAULT_PERMISSIONS = ["sqs:*", "logs:*"];
|
|
5286
5293
|
var deployFifoQueueFunction = ({ input, fn: fn13, layerArn, external, depsEnv, depsPermissions, staticGlobs }) => Effect32.gen(function* () {
|
|
5287
5294
|
const { exportName, config } = fn13;
|
|
@@ -5293,11 +5300,12 @@ var deployFifoQueueFunction = ({ input, fn: fn13, layerArn, external, depsEnv, d
|
|
|
5293
5300
|
};
|
|
5294
5301
|
yield* Effect32.logDebug("Creating SQS FIFO queue...");
|
|
5295
5302
|
const queueName = `${input.project}-${tagCtx.stage}-${handlerName}`;
|
|
5296
|
-
const timeout = config.timeout ?? 30;
|
|
5303
|
+
const timeout = toSeconds4(config.lambda?.timeout ?? 30);
|
|
5297
5304
|
const { queueUrl, queueArn } = yield* ensureFifoQueue({
|
|
5298
5305
|
name: queueName,
|
|
5299
|
-
visibilityTimeout: Math.max(config.visibilityTimeout
|
|
5300
|
-
retentionPeriod: config.retentionPeriod,
|
|
5306
|
+
visibilityTimeout: Math.max(config.visibilityTimeout ? toSeconds4(config.visibilityTimeout) : timeout, timeout),
|
|
5307
|
+
retentionPeriod: config.retentionPeriod ? toSeconds4(config.retentionPeriod) : void 0,
|
|
5308
|
+
delay: config.delay ? toSeconds4(config.delay) : void 0,
|
|
5301
5309
|
contentBasedDeduplication: config.contentBasedDeduplication ?? true,
|
|
5302
5310
|
tags: makeTags(tagCtx, "sqs")
|
|
5303
5311
|
});
|
|
@@ -5312,9 +5320,9 @@ var deployFifoQueueFunction = ({ input, fn: fn13, layerArn, external, depsEnv, d
|
|
|
5312
5320
|
handlerName,
|
|
5313
5321
|
defaultPermissions: FIFO_QUEUE_DEFAULT_PERMISSIONS,
|
|
5314
5322
|
bundleType: "fifoQueue",
|
|
5315
|
-
...config.permissions ? { permissions: config.permissions } : {},
|
|
5316
|
-
...config.memory ? { memory: config.memory } : {},
|
|
5317
|
-
...config.timeout ? { timeout: config.timeout } : {},
|
|
5323
|
+
...config.lambda?.permissions ? { permissions: config.lambda.permissions } : {},
|
|
5324
|
+
...config.lambda?.memory ? { memory: config.lambda.memory } : {},
|
|
5325
|
+
...config.lambda?.timeout ? { timeout: toSeconds4(config.lambda.timeout) } : {},
|
|
5318
5326
|
...layerArn ? { layerArn } : {},
|
|
5319
5327
|
...external ? { external } : {},
|
|
5320
5328
|
depsEnv: queueEnv,
|
|
@@ -5326,7 +5334,7 @@ var deployFifoQueueFunction = ({ input, fn: fn13, layerArn, external, depsEnv, d
|
|
|
5326
5334
|
functionArn,
|
|
5327
5335
|
queueArn,
|
|
5328
5336
|
batchSize: config.batchSize ?? 10,
|
|
5329
|
-
batchWindow: config.batchWindow
|
|
5337
|
+
batchWindow: config.batchWindow ? toSeconds4(config.batchWindow) : void 0
|
|
5330
5338
|
});
|
|
5331
5339
|
yield* Effect32.logDebug(`FIFO queue deployment complete! Queue: ${queueUrl}`);
|
|
5332
5340
|
return {
|
|
@@ -5340,6 +5348,7 @@ var deployFifoQueueFunction = ({ input, fn: fn13, layerArn, external, depsEnv, d
|
|
|
5340
5348
|
|
|
5341
5349
|
// src/deploy/deploy-bucket.ts
|
|
5342
5350
|
import { Effect as Effect33 } from "effect";
|
|
5351
|
+
import { toSeconds as toSeconds5 } from "effortless-aws";
|
|
5343
5352
|
var BUCKET_DEFAULT_PERMISSIONS = ["s3:*", "logs:*"];
|
|
5344
5353
|
var deployBucketFunction = ({ input, fn: fn13, layerArn, external, depsEnv, depsPermissions, staticGlobs }) => Effect33.gen(function* () {
|
|
5345
5354
|
const { exportName, config, hasHandler } = fn13;
|
|
@@ -5372,9 +5381,9 @@ var deployBucketFunction = ({ input, fn: fn13, layerArn, external, depsEnv, deps
|
|
|
5372
5381
|
handlerName,
|
|
5373
5382
|
defaultPermissions: BUCKET_DEFAULT_PERMISSIONS,
|
|
5374
5383
|
bundleType: "bucket",
|
|
5375
|
-
...config.permissions ? { permissions: config.permissions } : {},
|
|
5376
|
-
...config.memory ? { memory: config.memory } : {},
|
|
5377
|
-
...config.timeout ? { timeout: config.timeout } : {},
|
|
5384
|
+
...config.lambda?.permissions ? { permissions: config.lambda.permissions } : {},
|
|
5385
|
+
...config.lambda?.memory ? { memory: config.lambda.memory } : {},
|
|
5386
|
+
...config.lambda?.timeout ? { timeout: toSeconds5(config.lambda.timeout) } : {},
|
|
5378
5387
|
...layerArn ? { layerArn } : {},
|
|
5379
5388
|
...external ? { external } : {},
|
|
5380
5389
|
depsEnv: selfEnv,
|
|
@@ -5541,6 +5550,11 @@ var SES_PERMISSIONS = [
|
|
|
5541
5550
|
"ses:SendEmail",
|
|
5542
5551
|
"ses:SendRawEmail"
|
|
5543
5552
|
];
|
|
5553
|
+
var QUEUE_CLIENT_PERMISSIONS = [
|
|
5554
|
+
"sqs:SendMessage",
|
|
5555
|
+
"sqs:SendMessageBatch",
|
|
5556
|
+
"sqs:GetQueueUrl"
|
|
5557
|
+
];
|
|
5544
5558
|
var buildMailerDomainMap = (mailerHandlers) => {
|
|
5545
5559
|
const map = /* @__PURE__ */ new Map();
|
|
5546
5560
|
for (const { exports } of mailerHandlers) {
|
|
@@ -5570,7 +5584,16 @@ var buildBucketNameMap = (bucketHandlers, project, stage) => {
|
|
|
5570
5584
|
}
|
|
5571
5585
|
return map;
|
|
5572
5586
|
};
|
|
5573
|
-
var
|
|
5587
|
+
var buildQueueNameMap = (fifoQueueHandlers, project, stage) => {
|
|
5588
|
+
const map = /* @__PURE__ */ new Map();
|
|
5589
|
+
for (const { exports } of fifoQueueHandlers) {
|
|
5590
|
+
for (const fn13 of exports) {
|
|
5591
|
+
map.set(fn13.exportName, `${project}-${stage}-${fn13.exportName}`);
|
|
5592
|
+
}
|
|
5593
|
+
}
|
|
5594
|
+
return map;
|
|
5595
|
+
};
|
|
5596
|
+
var validateDeps = (discovered, tableNameMap, bucketNameMap, mailerDomainMap, queueNameMap) => {
|
|
5574
5597
|
const errors = [];
|
|
5575
5598
|
const allGroups = [
|
|
5576
5599
|
...discovered.apiHandlers,
|
|
@@ -5584,9 +5607,9 @@ var validateDeps = (discovered, tableNameMap, bucketNameMap, mailerDomainMap) =>
|
|
|
5584
5607
|
for (const { exports } of allGroups) {
|
|
5585
5608
|
for (const fn13 of exports) {
|
|
5586
5609
|
for (const key of fn13.depsKeys) {
|
|
5587
|
-
if (!tableNameMap.has(key) && !bucketNameMap.has(key) && !mailerDomainMap.has(key)) {
|
|
5610
|
+
if (!tableNameMap.has(key) && !bucketNameMap.has(key) && !mailerDomainMap.has(key) && !queueNameMap.has(key)) {
|
|
5588
5611
|
errors.push(
|
|
5589
|
-
`Handler "${fn13.exportName}" depends on "${key}", but no matching table, bucket, or
|
|
5612
|
+
`Handler "${fn13.exportName}" depends on "${key}", but no matching table, bucket, mailer, or queue handler was found. Make sure it is exported.`
|
|
5590
5613
|
);
|
|
5591
5614
|
}
|
|
5592
5615
|
}
|
|
@@ -5594,12 +5617,13 @@ var validateDeps = (discovered, tableNameMap, bucketNameMap, mailerDomainMap) =>
|
|
|
5594
5617
|
}
|
|
5595
5618
|
return errors;
|
|
5596
5619
|
};
|
|
5597
|
-
var resolveDeps = (depsKeys, tableNameMap, bucketNameMap, mailerDomainMap) => {
|
|
5620
|
+
var resolveDeps = (depsKeys, tableNameMap, bucketNameMap, mailerDomainMap, queueNameMap) => {
|
|
5598
5621
|
if (depsKeys.length === 0) return void 0;
|
|
5599
5622
|
const depsEnv = {};
|
|
5600
5623
|
let hasTable = false;
|
|
5601
5624
|
let hasBucket = false;
|
|
5602
5625
|
let hasMailer = false;
|
|
5626
|
+
let hasQueue = false;
|
|
5603
5627
|
for (const key of depsKeys) {
|
|
5604
5628
|
const tableName = tableNameMap.get(key);
|
|
5605
5629
|
if (tableName) {
|
|
@@ -5617,6 +5641,12 @@ var resolveDeps = (depsKeys, tableNameMap, bucketNameMap, mailerDomainMap) => {
|
|
|
5617
5641
|
if (mailerDomain) {
|
|
5618
5642
|
depsEnv[`EFF_DEP_${key}`] = `mailer:${mailerDomain}`;
|
|
5619
5643
|
hasMailer = true;
|
|
5644
|
+
continue;
|
|
5645
|
+
}
|
|
5646
|
+
const queueName = queueNameMap.get(key);
|
|
5647
|
+
if (queueName) {
|
|
5648
|
+
depsEnv[`EFF_DEP_${key}`] = `queue:${queueName}`;
|
|
5649
|
+
hasQueue = true;
|
|
5620
5650
|
}
|
|
5621
5651
|
}
|
|
5622
5652
|
if (Object.keys(depsEnv).length === 0) return void 0;
|
|
@@ -5624,6 +5654,7 @@ var resolveDeps = (depsKeys, tableNameMap, bucketNameMap, mailerDomainMap) => {
|
|
|
5624
5654
|
if (hasTable) permissions.push(...TABLE_CLIENT_PERMISSIONS);
|
|
5625
5655
|
if (hasBucket) permissions.push(...BUCKET_CLIENT_PERMISSIONS);
|
|
5626
5656
|
if (hasMailer) permissions.push(...SES_PERMISSIONS);
|
|
5657
|
+
if (hasQueue) permissions.push(...QUEUE_CLIENT_PERMISSIONS);
|
|
5627
5658
|
return { depsEnv, depsPermissions: permissions };
|
|
5628
5659
|
};
|
|
5629
5660
|
var SSM_PERMISSIONS = [
|
|
@@ -5654,7 +5685,7 @@ var makeDeployInput = (ctx, file) => ({
|
|
|
5654
5685
|
});
|
|
5655
5686
|
var resolveHandlerEnv = (depsKeys, paramEntries, ctx) => {
|
|
5656
5687
|
const resolved = mergeResolved(
|
|
5657
|
-
resolveDeps(depsKeys, ctx.tableNameMap, ctx.bucketNameMap, ctx.mailerDomainMap),
|
|
5688
|
+
resolveDeps(depsKeys, ctx.tableNameMap, ctx.bucketNameMap, ctx.mailerDomainMap, ctx.queueNameMap),
|
|
5658
5689
|
resolveParams(paramEntries, ctx.input.project, ctx.stage)
|
|
5659
5690
|
);
|
|
5660
5691
|
return {
|
|
@@ -5901,7 +5932,8 @@ var deployProject = (input) => Effect35.gen(function* () {
|
|
|
5901
5932
|
const tableNameMap = buildTableNameMap(tableHandlers, input.project, stage);
|
|
5902
5933
|
const bucketNameMap = buildBucketNameMap(bucketHandlers, input.project, stage);
|
|
5903
5934
|
const mailerDomainMap = buildMailerDomainMap(mailerHandlers);
|
|
5904
|
-
const
|
|
5935
|
+
const queueNameMap = buildQueueNameMap(fifoQueueHandlers, input.project, stage);
|
|
5936
|
+
const depsErrors = validateDeps(discovered, tableNameMap, bucketNameMap, mailerDomainMap, queueNameMap);
|
|
5905
5937
|
if (depsErrors.length > 0) {
|
|
5906
5938
|
yield* Console2.log("");
|
|
5907
5939
|
for (const err of depsErrors) {
|
|
@@ -5948,6 +5980,7 @@ var deployProject = (input) => Effect35.gen(function* () {
|
|
|
5948
5980
|
tableNameMap,
|
|
5949
5981
|
bucketNameMap,
|
|
5950
5982
|
mailerDomainMap,
|
|
5983
|
+
queueNameMap,
|
|
5951
5984
|
logComplete
|
|
5952
5985
|
};
|
|
5953
5986
|
const tableResults = [];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effortless-aws/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "CLI and deploy tooling for effortless-aws",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"@aws-sdk/client-resource-groups-tagging-api": "^3.975.0",
|
|
29
29
|
"@aws-sdk/client-s3": "^3.989.0",
|
|
30
30
|
"@aws-sdk/client-sesv2": "^3.994.0",
|
|
31
|
-
"@aws-sdk/client-sqs": "
|
|
31
|
+
"@aws-sdk/client-sqs": "3.989.0",
|
|
32
32
|
"@aws-sdk/client-ssm": "^3.985.0",
|
|
33
33
|
"@aws-sdk/util-dynamodb": "^3.975.0",
|
|
34
34
|
"@effect/cli": "^0.73.1",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"esbuild": "^0.25.0",
|
|
40
40
|
"glob": "^13.0.0",
|
|
41
41
|
"ts-morph": "^27.0.2",
|
|
42
|
-
"effortless-aws": "0.
|
|
42
|
+
"effortless-aws": "1.0.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@effect-ak/aws-sdk": "1.0.0-rc.3",
|