@kirschbaum-development/sst-laravel 0.2.9 → 0.2.11
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/bin/commands/deploy.js +1 -43
- package/dist/bin/commands/deploy.js.map +1 -1
- package/dist/bin/commands/init.js +1 -1
- package/dist/bin/commands/init.js.map +1 -1
- package/dist/bin/utils/secrets-manager.d.ts +4 -0
- package/dist/bin/utils/secrets-manager.js +21 -0
- package/dist/bin/utils/secrets-manager.js.map +1 -1
- package/laravel-sst.ts +68 -43
- package/package.json +1 -1
- package/src/laravel-env-manager.ts +1 -1
- package/src/remote-env-file.ts +151 -0
- package/src/secrets-manager.ts +544 -0
|
@@ -1,54 +1,12 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import { spawn } from 'child_process';
|
|
3
|
-
import
|
|
4
|
-
import * as path from 'path';
|
|
5
|
-
import { validateDeployment, findSstConfig, extractSstProjectName, extractSecretsConfig, getPackageRoot } from '../utils/sst-config.js';
|
|
6
|
-
import { pullSecrets, getSecretPath, getSecretInfo, toEnvFileContent } from '../utils/secrets-manager.js';
|
|
3
|
+
import { validateDeployment, getPackageRoot } from '../utils/sst-config.js';
|
|
7
4
|
export const deployCommand = new Command('deploy')
|
|
8
5
|
.description('Deploy the application using SST')
|
|
9
6
|
.requiredOption('-s, --stage <stage>', 'SST stage name')
|
|
10
7
|
.action(async (options) => {
|
|
11
8
|
try {
|
|
12
9
|
validateDeployment(options.stage);
|
|
13
|
-
const configPath = findSstConfig();
|
|
14
|
-
if (configPath) {
|
|
15
|
-
const appName = extractSstProjectName(configPath);
|
|
16
|
-
const secretsConfig = extractSecretsConfig(configPath);
|
|
17
|
-
if (appName && secretsConfig) {
|
|
18
|
-
console.log('RemoteEnvVault detected, fetching secrets from AWS Secrets Manager...');
|
|
19
|
-
// Determine the secret path
|
|
20
|
-
const secretPath = secretsConfig.path || getSecretPath(appName, options.stage);
|
|
21
|
-
try {
|
|
22
|
-
// Get info about the secret structure first
|
|
23
|
-
const secretInfo = await getSecretInfo(secretPath);
|
|
24
|
-
if (!secretInfo) {
|
|
25
|
-
console.warn(`Warning: No secrets found at ${secretPath}`);
|
|
26
|
-
console.log('Continuing with deployment without secrets...');
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
if (secretInfo.chunked) {
|
|
30
|
-
console.log(`Found ${secretInfo.totalKeys} variables in ${secretInfo.chunks} chunks`);
|
|
31
|
-
}
|
|
32
|
-
const secrets = await pullSecrets(secretPath);
|
|
33
|
-
if (secrets) {
|
|
34
|
-
// Ensure the .sst/laravel/deploy directory exists
|
|
35
|
-
const deployDir = path.join(process.cwd(), '.sst', 'laravel', 'deploy');
|
|
36
|
-
fs.mkdirSync(deployDir, { recursive: true });
|
|
37
|
-
// Write secrets to .env file
|
|
38
|
-
const envFilePath = path.join(deployDir, '.env');
|
|
39
|
-
const envContent = toEnvFileContent(secrets);
|
|
40
|
-
fs.writeFileSync(envFilePath, envContent + '\n');
|
|
41
|
-
fs.chmodSync(envFilePath, 0o755);
|
|
42
|
-
console.log(`Fetched ${Object.keys(secrets).length} variables from ${secretPath}`);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
catch (error) {
|
|
47
|
-
console.error(`Warning: Failed to fetch secrets from ${secretPath}:`, error.message);
|
|
48
|
-
console.log('Continuing with deployment without secrets...');
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
10
|
const deployProcess = spawn('npx', ['sst', 'deploy', '--stage', options.stage], {
|
|
53
11
|
cwd: process.cwd(),
|
|
54
12
|
stdio: 'inherit',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../bin/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../bin/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE5E,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,kCAAkC,CAAC;KAC/C,cAAc,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;KACvD,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE;IAC3C,IAAI,CAAC;QACH,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAElC,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;YAC9E,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,IAAI;YACX,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,wBAAwB,EAAE,cAAc,EAAE;aAC3C;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC,CAAC,CAAC;YACH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -220,7 +220,7 @@ export const initCommand = new Command('init')
|
|
|
220
220
|
console.log('\n');
|
|
221
221
|
console.log('A deploy.sh script has been created with example deployment tasks (migrations, caching, etc.). Customize it as needed.');
|
|
222
222
|
console.log('\n');
|
|
223
|
-
console.log('Run `npx sst
|
|
223
|
+
console.log('Run `npx sst deploy --stage {stage}` to deploy your application.');
|
|
224
224
|
}
|
|
225
225
|
catch (error) {
|
|
226
226
|
console.error('Error:', error.message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../bin/commands/init.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../bin/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,10 @@ export declare function needsChunking(vars: Record<string, string>): boolean;
|
|
|
28
28
|
* Handles both legacy single secrets and chunked secrets.
|
|
29
29
|
*/
|
|
30
30
|
export declare function pullSecrets(secretPath: string, region?: string): Promise<Record<string, string> | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Get a deterministic fingerprint for the current secret contents.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getSecretsFingerprint(secretPath: string, region?: string): Promise<string>;
|
|
31
35
|
/**
|
|
32
36
|
* Check if a secret exists in AWS Secrets Manager.
|
|
33
37
|
*/
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SecretsManagerClient, GetSecretValueCommand, PutSecretValueCommand, CreateSecretCommand, DeleteSecretCommand, ResourceNotFoundException, DescribeSecretCommand, ListSecretsCommand, } from '@aws-sdk/client-secrets-manager';
|
|
2
|
+
import { createHash } from 'crypto';
|
|
2
3
|
/**
|
|
3
4
|
* AWS Secrets Manager limit is 65,536 bytes.
|
|
4
5
|
* We use 60KB as our threshold to leave some buffer.
|
|
@@ -212,6 +213,26 @@ async function pullChunkedSecrets(client, basePath, chunkCount) {
|
|
|
212
213
|
}
|
|
213
214
|
return allVars;
|
|
214
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Get a deterministic fingerprint for the current secret contents.
|
|
218
|
+
*/
|
|
219
|
+
export async function getSecretsFingerprint(secretPath, region) {
|
|
220
|
+
const secrets = await pullSecrets(secretPath, region);
|
|
221
|
+
if (!secrets) {
|
|
222
|
+
return 'missing';
|
|
223
|
+
}
|
|
224
|
+
return createHash('sha256')
|
|
225
|
+
.update(JSON.stringify(sortObjectKeys(secrets)), 'utf8')
|
|
226
|
+
.digest('hex');
|
|
227
|
+
}
|
|
228
|
+
function sortObjectKeys(vars) {
|
|
229
|
+
return Object.keys(vars)
|
|
230
|
+
.sort()
|
|
231
|
+
.reduce((result, key) => {
|
|
232
|
+
result[key] = vars[key];
|
|
233
|
+
return result;
|
|
234
|
+
}, {});
|
|
235
|
+
}
|
|
215
236
|
/**
|
|
216
237
|
* Check if a secret exists in AWS Secrets Manager.
|
|
217
238
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets-manager.js","sourceRoot":"","sources":["../../../bin/utils/secrets-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"secrets-manager.js","sourceRoot":"","sources":["../../../bin/utils/secrets-manager.ts"],"names":[],"mappings":"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"}
|
package/laravel-sst.ts
CHANGED
|
@@ -4,7 +4,7 @@ import * as path from 'path';
|
|
|
4
4
|
import * as fs from 'fs';
|
|
5
5
|
import { Component } from "../../../.sst/platform/src/components/component.js";
|
|
6
6
|
import { FunctionArgs } from "../../../.sst/platform/src/components/aws/function.js";;
|
|
7
|
-
import { ComponentResourceOptions, Output, all, output } from "@pulumi/pulumi";
|
|
7
|
+
import { ComponentResourceOptions, Input as PulumiInput, Output, all, output } from "@pulumi/pulumi";
|
|
8
8
|
import { Input } from "../../../.sst/platform/src/components/input.js";
|
|
9
9
|
import { ClusterArgs } from "../../../.sst/platform/src/components/aws/cluster.js";
|
|
10
10
|
import { ServiceArgs } from "../../../.sst/platform/src/components/aws/service.js";
|
|
@@ -12,6 +12,8 @@ import { Dns } from "../../../.sst/platform/src/components/dns.js";
|
|
|
12
12
|
import { applyLinkedResourcesEnv, EnvCallback, EnvCallbacks, extractSecrets } from "./src/laravel-env";
|
|
13
13
|
import { RemoteEnvVault, RemoteEnvVaultArgs } from "./src/laravel-env-manager";
|
|
14
14
|
import { getPackagePath } from "./src/config";
|
|
15
|
+
import { RemoteEnvFile } from "./src/remote-env-file";
|
|
16
|
+
import { getSecretsFingerprint } from "./src/secrets-manager";
|
|
15
17
|
|
|
16
18
|
// Re-export RemoteEnvVault for external use
|
|
17
19
|
export { RemoteEnvVault, RemoteEnvVaultArgs };
|
|
@@ -281,7 +283,7 @@ export class LaravelService extends Component {
|
|
|
281
283
|
envFileSetVariable(variableName, value);
|
|
282
284
|
}
|
|
283
285
|
|
|
284
|
-
prepareEnvironmentFile();
|
|
286
|
+
const environmentFileDependency = prepareEnvironmentFile();
|
|
285
287
|
prepareDeploymentScript();
|
|
286
288
|
|
|
287
289
|
const cluster = new sst.aws.Cluster(`${name}-Cluster`, {
|
|
@@ -324,6 +326,8 @@ export class LaravelService extends Component {
|
|
|
324
326
|
})
|
|
325
327
|
}
|
|
326
328
|
}
|
|
329
|
+
}, {
|
|
330
|
+
dependsOn: environmentFileDependency ? [environmentFileDependency] : [],
|
|
327
331
|
});
|
|
328
332
|
}
|
|
329
333
|
|
|
@@ -397,7 +401,7 @@ export class LaravelService extends Component {
|
|
|
397
401
|
}
|
|
398
402
|
}
|
|
399
403
|
}, {
|
|
400
|
-
dependsOn: [],
|
|
404
|
+
dependsOn: environmentFileDependency ? [environmentFileDependency] : [],
|
|
401
405
|
});
|
|
402
406
|
}
|
|
403
407
|
|
|
@@ -509,7 +513,7 @@ export class LaravelService extends Component {
|
|
|
509
513
|
return env;
|
|
510
514
|
}
|
|
511
515
|
|
|
512
|
-
function
|
|
516
|
+
function getLinkedEnvironmentData() {
|
|
513
517
|
const links = (args.link || []);
|
|
514
518
|
const resources: any[] = [];
|
|
515
519
|
const customEnv: Record<string, string | Output<string>> = {};
|
|
@@ -520,8 +524,10 @@ export class LaravelService extends Component {
|
|
|
520
524
|
resources.push(link.resource);
|
|
521
525
|
|
|
522
526
|
// If there's an envCallback, call it and merge the result
|
|
523
|
-
|
|
524
|
-
|
|
527
|
+
const callback = (link as { environment?: EnvCallback; envCallback?: EnvCallback }).environment
|
|
528
|
+
|| (link as { environment?: EnvCallback; envCallback?: EnvCallback }).envCallback;
|
|
529
|
+
if (callback) {
|
|
530
|
+
const callbackResult = callback(link.resource);
|
|
525
531
|
Object.assign(customEnv, callbackResult);
|
|
526
532
|
}
|
|
527
533
|
} else {
|
|
@@ -530,21 +536,31 @@ export class LaravelService extends Component {
|
|
|
530
536
|
}
|
|
531
537
|
});
|
|
532
538
|
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
if (!args.config.environment) args.config.environment = {};
|
|
536
|
-
|
|
537
|
-
const resourcesEnvVars = {
|
|
539
|
+
return {
|
|
540
|
+
linkedEnvironment: {
|
|
538
541
|
...applyLinkedResourcesEnv(resources),
|
|
539
542
|
...customEnv,
|
|
543
|
+
},
|
|
544
|
+
linkedSecrets: extractSecrets(resources).map(secret => ({
|
|
545
|
+
name: secret.name,
|
|
546
|
+
value: secret.value,
|
|
547
|
+
})),
|
|
540
548
|
};
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
function applyLinkedResourcesToEnvironment() {
|
|
552
|
+
const { linkedEnvironment, linkedSecrets } = getLinkedEnvironmentData();
|
|
553
|
+
|
|
554
|
+
// Apply default environment variables for all resources
|
|
555
|
+
if (!args.config) args.config = {};
|
|
556
|
+
if (!args.config.environment) args.config.environment = {};
|
|
541
557
|
|
|
542
558
|
fs.appendFileSync(envFilePath, '\n' + "# --- SST-LARAVEL AUTO-INJECTED VARIABLES ---" + '\n');
|
|
543
559
|
|
|
544
560
|
addAppUrlIfMissing();
|
|
545
561
|
envFileSetVariableIfMissing('LOG_CHANNEL', 'stderr');
|
|
546
562
|
|
|
547
|
-
all(Object.entries(
|
|
563
|
+
all(Object.entries(linkedEnvironment)).apply(entries => {
|
|
548
564
|
const envContent = entries
|
|
549
565
|
.map(([key, value]) => `${key}=${value}`)
|
|
550
566
|
.join('\n');
|
|
@@ -554,8 +570,7 @@ export class LaravelService extends Component {
|
|
|
554
570
|
}
|
|
555
571
|
});
|
|
556
572
|
|
|
557
|
-
|
|
558
|
-
secrets.forEach(secret => {
|
|
573
|
+
linkedSecrets.forEach(secret => {
|
|
559
574
|
all([secret.name, secret.value]).apply(([name, value]) => {
|
|
560
575
|
fs.appendFileSync(envFilePath, `\n${name}=${value}`);
|
|
561
576
|
});
|
|
@@ -579,25 +594,8 @@ export class LaravelService extends Component {
|
|
|
579
594
|
const envFile = args.config?.environment?.file as string | undefined;
|
|
580
595
|
const secrets = args.config?.environment?.secrets;
|
|
581
596
|
|
|
582
|
-
// If secrets are configured, the deploy command will have already
|
|
583
|
-
// fetched them and created the .env file in .sst/laravel/deploy/
|
|
584
597
|
if (secrets) {
|
|
585
|
-
|
|
586
|
-
if (fs.existsSync(envFilePath)) {
|
|
587
|
-
// Secrets were fetched, append auto-inject variables
|
|
588
|
-
if (args.config?.environment?.autoInject !== false) {
|
|
589
|
-
applyLinkedResourcesToEnvironment();
|
|
590
|
-
}
|
|
591
|
-
} else {
|
|
592
|
-
// Secrets not fetched yet - this happens during `sst dev` or direct `sst deploy`
|
|
593
|
-
// Create an empty file and add a warning comment
|
|
594
|
-
fs.writeFileSync(envFilePath, '# WARNING: RemoteEnvVault secrets not loaded. Use `sst-laravel deploy` to fetch secrets.\n');
|
|
595
|
-
|
|
596
|
-
if (args.config?.environment?.autoInject !== false) {
|
|
597
|
-
applyLinkedResourcesToEnvironment();
|
|
598
|
-
}
|
|
599
|
-
}
|
|
600
|
-
return;
|
|
598
|
+
return prepareRemoteEnvironmentFile(secrets);
|
|
601
599
|
}
|
|
602
600
|
|
|
603
601
|
// Handle traditional env file configuration
|
|
@@ -619,29 +617,56 @@ export class LaravelService extends Component {
|
|
|
619
617
|
}
|
|
620
618
|
}
|
|
621
619
|
|
|
622
|
-
function
|
|
623
|
-
|
|
620
|
+
function prepareRemoteEnvironmentFile(secrets: RemoteEnvVault) {
|
|
621
|
+
fs.writeFileSync(envFilePath, '# WARNING: RemoteEnvVault secrets are loaded during deployment. Preview uses a placeholder file.\n');
|
|
622
|
+
fs.chmodSync(envFilePath, 0o755);
|
|
623
|
+
|
|
624
|
+
if ($cli.command !== 'deploy') {
|
|
624
625
|
return;
|
|
625
626
|
}
|
|
626
627
|
|
|
628
|
+
const { linkedEnvironment, linkedSecrets } = getLinkedEnvironmentData();
|
|
629
|
+
|
|
630
|
+
return new RemoteEnvFile(`${name}-RemoteEnv`, {
|
|
631
|
+
secretPath: secrets.path,
|
|
632
|
+
envFilePath,
|
|
633
|
+
fingerprint: output(secrets.path).apply((secretPath) => getSecretsFingerprint(secretPath)),
|
|
634
|
+
autoInject: args.config?.environment?.autoInject !== false,
|
|
635
|
+
appUrl: getAppUrl(),
|
|
636
|
+
linkedEnvironment,
|
|
637
|
+
linkedSecrets,
|
|
638
|
+
}, {
|
|
639
|
+
parent: this,
|
|
640
|
+
});
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
function addAppUrlIfMissing() {
|
|
627
644
|
if (envFileHasVariable('APP_URL')) {
|
|
628
645
|
return;
|
|
629
646
|
}
|
|
630
647
|
|
|
631
|
-
|
|
648
|
+
const appUrl = getAppUrl();
|
|
649
|
+
|
|
650
|
+
if (typeof appUrl === 'string') {
|
|
651
|
+
envFileSetVariable('APP_URL', appUrl);
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
function getAppUrl(): PulumiInput<string | undefined> | undefined {
|
|
656
|
+
if (!args.web?.domain) {
|
|
657
|
+
return undefined;
|
|
658
|
+
}
|
|
632
659
|
|
|
633
660
|
if (typeof args.web.domain === 'string') {
|
|
634
|
-
|
|
635
|
-
} else if (typeof args.web.domain === 'object' && 'name' in args.web.domain) {
|
|
636
|
-
const name = (args.web.domain as { name: Input<string> }).name;
|
|
637
|
-
if (typeof name === 'string') {
|
|
638
|
-
domainName = name;
|
|
639
|
-
}
|
|
661
|
+
return `https://${args.web.domain}`;
|
|
640
662
|
}
|
|
641
663
|
|
|
642
|
-
if (
|
|
643
|
-
|
|
664
|
+
if (typeof args.web.domain === 'object' && 'name' in args.web.domain) {
|
|
665
|
+
return output((args.web.domain as { name: Input<string> }).name)
|
|
666
|
+
.apply(domainName => domainName ? `https://${domainName}` : undefined);
|
|
644
667
|
}
|
|
668
|
+
|
|
669
|
+
return undefined;
|
|
645
670
|
}
|
|
646
671
|
|
|
647
672
|
function prepareDeploymentScript() {
|
package/package.json
CHANGED
|
@@ -62,7 +62,7 @@ export interface RemoteEnvVaultArgs {
|
|
|
62
62
|
* sst-laravel env:pull --stage production
|
|
63
63
|
*
|
|
64
64
|
* # Deploy (automatically fetches secrets)
|
|
65
|
-
* sst
|
|
65
|
+
* sst deploy --stage production
|
|
66
66
|
* ```
|
|
67
67
|
*/
|
|
68
68
|
export class RemoteEnvVault extends Component {
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { CustomResourceOptions, Input, dynamic } from '@pulumi/pulumi';
|
|
4
|
+
import { pullSecrets, toEnvFileContent } from './secrets-manager';
|
|
5
|
+
|
|
6
|
+
export interface RemoteEnvFileLinkedSecret {
|
|
7
|
+
name: Input<string>;
|
|
8
|
+
value: Input<string>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface RemoteEnvFileInputs {
|
|
12
|
+
secretPath: Input<string>;
|
|
13
|
+
envFilePath: Input<string>;
|
|
14
|
+
fingerprint: Input<string>;
|
|
15
|
+
autoInject?: Input<boolean>;
|
|
16
|
+
appUrl?: Input<string | undefined>;
|
|
17
|
+
linkedEnvironment?: Input<Record<string, Input<string | undefined> | undefined>>;
|
|
18
|
+
linkedSecrets?: Input<RemoteEnvFileLinkedSecret[]>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface ResolvedRemoteEnvFileInputs {
|
|
22
|
+
secretPath: string;
|
|
23
|
+
envFilePath: string;
|
|
24
|
+
fingerprint: string;
|
|
25
|
+
autoInject?: boolean;
|
|
26
|
+
appUrl?: string;
|
|
27
|
+
linkedEnvironment?: Record<string, string | undefined>;
|
|
28
|
+
linkedSecrets?: Array<{
|
|
29
|
+
name: string;
|
|
30
|
+
value: string;
|
|
31
|
+
}>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const provider: dynamic.ResourceProvider<ResolvedRemoteEnvFileInputs, ResolvedRemoteEnvFileInputs> = {
|
|
35
|
+
async create(inputs) {
|
|
36
|
+
const outs = await writeRemoteEnvironmentFile(inputs);
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
id: `${inputs.secretPath}:${inputs.envFilePath}`,
|
|
40
|
+
outs,
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
async diff(_, olds, news) {
|
|
45
|
+
return {
|
|
46
|
+
changes: stableStringify(olds) !== stableStringify(news),
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
async update(_, __, news) {
|
|
51
|
+
const outs = await writeRemoteEnvironmentFile(news);
|
|
52
|
+
|
|
53
|
+
return {
|
|
54
|
+
outs,
|
|
55
|
+
};
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export class RemoteEnvFile extends dynamic.Resource {
|
|
60
|
+
constructor(
|
|
61
|
+
name: string,
|
|
62
|
+
args: RemoteEnvFileInputs,
|
|
63
|
+
opts?: CustomResourceOptions,
|
|
64
|
+
) {
|
|
65
|
+
super(provider, `${name}.sst.aws.RemoteEnvFile`, args, opts);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async function writeRemoteEnvironmentFile(inputs: ResolvedRemoteEnvFileInputs) {
|
|
70
|
+
const secrets = await pullSecrets(inputs.secretPath);
|
|
71
|
+
|
|
72
|
+
if (!secrets) {
|
|
73
|
+
throw new Error(`RemoteEnvVault secret not found at ${inputs.secretPath}.`);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const envContent = buildEnvFileContent(secrets, inputs);
|
|
77
|
+
|
|
78
|
+
fs.mkdirSync(path.dirname(inputs.envFilePath), { recursive: true });
|
|
79
|
+
fs.writeFileSync(inputs.envFilePath, envContent + '\n');
|
|
80
|
+
fs.chmodSync(inputs.envFilePath, 0o755);
|
|
81
|
+
|
|
82
|
+
return {
|
|
83
|
+
...inputs,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function buildEnvFileContent(
|
|
88
|
+
secrets: Record<string, string>,
|
|
89
|
+
inputs: ResolvedRemoteEnvFileInputs,
|
|
90
|
+
) {
|
|
91
|
+
const baseEnv = toEnvFileContent(secrets);
|
|
92
|
+
|
|
93
|
+
if (inputs.autoInject === false) {
|
|
94
|
+
return baseEnv;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const autoInjected: Record<string, string> = {};
|
|
98
|
+
|
|
99
|
+
if (!hasOwnVariable(secrets, 'APP_URL') && inputs.appUrl) {
|
|
100
|
+
autoInjected.APP_URL = inputs.appUrl;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (!hasOwnVariable(secrets, 'LOG_CHANNEL')) {
|
|
104
|
+
autoInjected.LOG_CHANNEL = 'stderr';
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
Object.entries(inputs.linkedEnvironment || {}).forEach(([key, value]) => {
|
|
108
|
+
if (typeof value === 'string') {
|
|
109
|
+
autoInjected[key] = value;
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
(inputs.linkedSecrets || []).forEach((secret) => {
|
|
114
|
+
autoInjected[secret.name] = secret.value;
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
if (Object.keys(autoInjected).length === 0) {
|
|
118
|
+
return baseEnv;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return [
|
|
122
|
+
baseEnv,
|
|
123
|
+
'# --- SST-LARAVEL AUTO-INJECTED VARIABLES ---',
|
|
124
|
+
toEnvFileContent(autoInjected),
|
|
125
|
+
].filter(Boolean).join('\n\n');
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function hasOwnVariable(vars: Record<string, string>, key: string) {
|
|
129
|
+
return Object.prototype.hasOwnProperty.call(vars, key);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function stableStringify(value: unknown): string {
|
|
133
|
+
return JSON.stringify(sortValue(value));
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function sortValue(value: unknown): unknown {
|
|
137
|
+
if (Array.isArray(value)) {
|
|
138
|
+
return value.map(sortValue);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (value && typeof value === 'object') {
|
|
142
|
+
return Object.keys(value as Record<string, unknown>)
|
|
143
|
+
.sort()
|
|
144
|
+
.reduce((result, key) => {
|
|
145
|
+
result[key] = sortValue((value as Record<string, unknown>)[key]);
|
|
146
|
+
return result;
|
|
147
|
+
}, {} as Record<string, unknown>);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return value;
|
|
151
|
+
}
|
|
@@ -0,0 +1,544 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SecretsManagerClient,
|
|
3
|
+
GetSecretValueCommand,
|
|
4
|
+
PutSecretValueCommand,
|
|
5
|
+
CreateSecretCommand,
|
|
6
|
+
DeleteSecretCommand,
|
|
7
|
+
ResourceNotFoundException,
|
|
8
|
+
DescribeSecretCommand,
|
|
9
|
+
ListSecretsCommand,
|
|
10
|
+
} from '@aws-sdk/client-secrets-manager';
|
|
11
|
+
import { createHash } from 'crypto';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* AWS Secrets Manager limit is 65,536 bytes.
|
|
15
|
+
* We use 60KB as our threshold to leave some buffer.
|
|
16
|
+
*/
|
|
17
|
+
const MAX_SECRET_SIZE_BYTES = 60 * 1024;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Metadata structure for chunked secrets.
|
|
21
|
+
*/
|
|
22
|
+
interface ChunkedSecretMetadata {
|
|
23
|
+
version: number;
|
|
24
|
+
chunked: boolean;
|
|
25
|
+
chunks: number;
|
|
26
|
+
totalKeys: number;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Get the secret path for a given app and stage.
|
|
31
|
+
* Format: /{app-name}/{stage}/env
|
|
32
|
+
*/
|
|
33
|
+
export function getSecretPath(appName: string, stage: string): string {
|
|
34
|
+
return `/${appName}/${stage}/env`;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* List available stages for an app by inspecting Secrets Manager paths.
|
|
39
|
+
*/
|
|
40
|
+
export async function listAvailableStages(appName: string, region?: string): Promise<string[]> {
|
|
41
|
+
const client = new SecretsManagerClient({ region });
|
|
42
|
+
const stages = new Set<string>();
|
|
43
|
+
const prefix = `/${appName}/`;
|
|
44
|
+
const suffix = '/env';
|
|
45
|
+
let nextToken: string | undefined;
|
|
46
|
+
|
|
47
|
+
do {
|
|
48
|
+
const command = new ListSecretsCommand({
|
|
49
|
+
NextToken: nextToken,
|
|
50
|
+
Filters: [
|
|
51
|
+
{
|
|
52
|
+
Key: 'name',
|
|
53
|
+
Values: [prefix],
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
const response = await client.send(command);
|
|
59
|
+
|
|
60
|
+
if (response.SecretList) {
|
|
61
|
+
for (const secret of response.SecretList) {
|
|
62
|
+
if (!secret.Name) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (!secret.Name.startsWith(prefix) || !secret.Name.endsWith(suffix)) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const parts = secret.Name.split('/');
|
|
71
|
+
// Secrets are stored as /{app}/{stage}/env
|
|
72
|
+
if (parts.length >= 4 && parts[2]) {
|
|
73
|
+
stages.add(parts[2]);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
nextToken = response.NextToken;
|
|
79
|
+
} while (nextToken);
|
|
80
|
+
|
|
81
|
+
return Array.from(stages).sort();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Get the chunk path for a given secret path and chunk index.
|
|
86
|
+
*/
|
|
87
|
+
function getChunkPath(basePath: string, chunkIndex: number): string {
|
|
88
|
+
return `${basePath}/${chunkIndex}`;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Parse an .env file content into a key-value object.
|
|
93
|
+
*/
|
|
94
|
+
export function parseEnvFile(content: string): Record<string, string> {
|
|
95
|
+
const result: Record<string, string> = {};
|
|
96
|
+
const lines = content.split('\n');
|
|
97
|
+
|
|
98
|
+
for (const line of lines) {
|
|
99
|
+
const trimmed = line.trim();
|
|
100
|
+
|
|
101
|
+
// Skip empty lines and comments
|
|
102
|
+
if (!trimmed || trimmed.startsWith('#')) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Find the first = sign
|
|
107
|
+
const equalIndex = trimmed.indexOf('=');
|
|
108
|
+
if (equalIndex === -1) {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const key = trimmed.substring(0, equalIndex).trim();
|
|
113
|
+
let value = trimmed.substring(equalIndex + 1);
|
|
114
|
+
|
|
115
|
+
// Handle quoted values
|
|
116
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
117
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
118
|
+
value = value.slice(1, -1);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (key) {
|
|
122
|
+
result[key] = value;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Convert a key-value object to .env file content.
|
|
131
|
+
*/
|
|
132
|
+
export function toEnvFileContent(vars: Record<string, string>): string {
|
|
133
|
+
// Sort keys alphabetically for consistent output
|
|
134
|
+
const sortedKeys = Object.keys(vars).sort();
|
|
135
|
+
|
|
136
|
+
return sortedKeys
|
|
137
|
+
.map((key) => {
|
|
138
|
+
const value = vars[key];
|
|
139
|
+
// Quote values that contain spaces, quotes, or special characters
|
|
140
|
+
if (value.includes(' ') || value.includes('"') || value.includes("'") || value.includes('\n')) {
|
|
141
|
+
// Escape existing double quotes and wrap in double quotes
|
|
142
|
+
const escaped = value.replace(/"/g, '\\"');
|
|
143
|
+
return `${key}="${escaped}"`;
|
|
144
|
+
}
|
|
145
|
+
return `${key}=${value}`;
|
|
146
|
+
})
|
|
147
|
+
.join('\n');
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Calculate the byte size of a JSON string.
|
|
152
|
+
*/
|
|
153
|
+
function getJsonByteSize(obj: Record<string, string>): number {
|
|
154
|
+
return Buffer.byteLength(JSON.stringify(obj), 'utf8');
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Split variables into chunks that fit within the AWS Secrets Manager limit.
|
|
159
|
+
*/
|
|
160
|
+
export function splitIntoChunks(vars: Record<string, string>): Record<string, string>[] {
|
|
161
|
+
const sortedKeys = Object.keys(vars).sort();
|
|
162
|
+
const chunks: Record<string, string>[] = [];
|
|
163
|
+
let currentChunk: Record<string, string> = {};
|
|
164
|
+
|
|
165
|
+
for (const key of sortedKeys) {
|
|
166
|
+
const testChunk = { ...currentChunk, [key]: vars[key] };
|
|
167
|
+
|
|
168
|
+
if (getJsonByteSize(testChunk) > MAX_SECRET_SIZE_BYTES) {
|
|
169
|
+
// Current chunk is full, start a new one
|
|
170
|
+
if (Object.keys(currentChunk).length > 0) {
|
|
171
|
+
chunks.push(currentChunk);
|
|
172
|
+
currentChunk = { [key]: vars[key] };
|
|
173
|
+
} else {
|
|
174
|
+
// Single variable exceeds limit - this is an edge case
|
|
175
|
+
// We still add it, but it may fail on AWS side
|
|
176
|
+
console.warn(`Warning: Variable "${key}" alone exceeds the secret size limit.`);
|
|
177
|
+
chunks.push({ [key]: vars[key] });
|
|
178
|
+
currentChunk = {};
|
|
179
|
+
}
|
|
180
|
+
} else {
|
|
181
|
+
currentChunk = testChunk;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Don't forget the last chunk
|
|
186
|
+
if (Object.keys(currentChunk).length > 0) {
|
|
187
|
+
chunks.push(currentChunk);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return chunks;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Check if variables need to be chunked.
|
|
195
|
+
*/
|
|
196
|
+
export function needsChunking(vars: Record<string, string>): boolean {
|
|
197
|
+
return getJsonByteSize(vars) > MAX_SECRET_SIZE_BYTES;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Get a secret value from AWS Secrets Manager.
|
|
202
|
+
*/
|
|
203
|
+
async function getSecretValue(
|
|
204
|
+
client: SecretsManagerClient,
|
|
205
|
+
secretPath: string
|
|
206
|
+
): Promise<string | null> {
|
|
207
|
+
try {
|
|
208
|
+
const command = new GetSecretValueCommand({
|
|
209
|
+
SecretId: secretPath,
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
const response = await client.send(command);
|
|
213
|
+
return response.SecretString || null;
|
|
214
|
+
} catch (error) {
|
|
215
|
+
if (error instanceof ResourceNotFoundException) {
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
throw error;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Check if a secret is using the chunked format.
|
|
224
|
+
*/
|
|
225
|
+
function isChunkedSecret(data: any): data is ChunkedSecretMetadata {
|
|
226
|
+
return data && typeof data === 'object' && data.chunked === true && typeof data.chunks === 'number';
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Pull environment variables from AWS Secrets Manager.
|
|
231
|
+
* Handles both legacy single secrets and chunked secrets.
|
|
232
|
+
*/
|
|
233
|
+
export async function pullSecrets(
|
|
234
|
+
secretPath: string,
|
|
235
|
+
region?: string
|
|
236
|
+
): Promise<Record<string, string> | null> {
|
|
237
|
+
const client = new SecretsManagerClient({ region });
|
|
238
|
+
|
|
239
|
+
const secretValue = await getSecretValue(client, secretPath);
|
|
240
|
+
|
|
241
|
+
if (!secretValue) {
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
const data = JSON.parse(secretValue);
|
|
246
|
+
|
|
247
|
+
// Check if this is a chunked secret
|
|
248
|
+
if (isChunkedSecret(data)) {
|
|
249
|
+
return await pullChunkedSecrets(client, secretPath, data.chunks);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// Legacy format - direct key-value pairs
|
|
253
|
+
return data;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Pull and merge all chunks of a chunked secret.
|
|
258
|
+
*/
|
|
259
|
+
async function pullChunkedSecrets(
|
|
260
|
+
client: SecretsManagerClient,
|
|
261
|
+
basePath: string,
|
|
262
|
+
chunkCount: number
|
|
263
|
+
): Promise<Record<string, string>> {
|
|
264
|
+
const allVars: Record<string, string> = {};
|
|
265
|
+
|
|
266
|
+
// Fetch all chunks in parallel
|
|
267
|
+
const chunkPromises = Array.from({ length: chunkCount }, (_, i) =>
|
|
268
|
+
getSecretValue(client, getChunkPath(basePath, i + 1))
|
|
269
|
+
);
|
|
270
|
+
|
|
271
|
+
const chunkValues = await Promise.all(chunkPromises);
|
|
272
|
+
|
|
273
|
+
for (let i = 0; i < chunkValues.length; i++) {
|
|
274
|
+
const chunkValue = chunkValues[i];
|
|
275
|
+
if (chunkValue) {
|
|
276
|
+
const chunkData = JSON.parse(chunkValue);
|
|
277
|
+
Object.assign(allVars, chunkData);
|
|
278
|
+
} else {
|
|
279
|
+
console.warn(`Warning: Chunk ${i + 1} not found at ${getChunkPath(basePath, i + 1)}`);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
return allVars;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Get a deterministic fingerprint for the current secret contents.
|
|
288
|
+
*/
|
|
289
|
+
export async function getSecretsFingerprint(secretPath: string, region?: string): Promise<string> {
|
|
290
|
+
const secrets = await pullSecrets(secretPath, region);
|
|
291
|
+
|
|
292
|
+
if (!secrets) {
|
|
293
|
+
return 'missing';
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
return createHash('sha256')
|
|
297
|
+
.update(JSON.stringify(sortObjectKeys(secrets)), 'utf8')
|
|
298
|
+
.digest('hex');
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
function sortObjectKeys(vars: Record<string, string>): Record<string, string> {
|
|
302
|
+
return Object.keys(vars)
|
|
303
|
+
.sort()
|
|
304
|
+
.reduce((result, key) => {
|
|
305
|
+
result[key] = vars[key];
|
|
306
|
+
return result;
|
|
307
|
+
}, {} as Record<string, string>);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Check if a secret exists in AWS Secrets Manager.
|
|
312
|
+
*/
|
|
313
|
+
export async function secretExists(
|
|
314
|
+
secretPath: string,
|
|
315
|
+
region?: string
|
|
316
|
+
): Promise<boolean> {
|
|
317
|
+
const client = new SecretsManagerClient({ region });
|
|
318
|
+
|
|
319
|
+
try {
|
|
320
|
+
const command = new DescribeSecretCommand({
|
|
321
|
+
SecretId: secretPath,
|
|
322
|
+
});
|
|
323
|
+
|
|
324
|
+
await client.send(command);
|
|
325
|
+
return true;
|
|
326
|
+
} catch (error) {
|
|
327
|
+
if (error instanceof ResourceNotFoundException) {
|
|
328
|
+
return false;
|
|
329
|
+
}
|
|
330
|
+
throw error;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* Create or update a secret in AWS Secrets Manager.
|
|
336
|
+
*/
|
|
337
|
+
async function upsertSecret(
|
|
338
|
+
client: SecretsManagerClient,
|
|
339
|
+
secretPath: string,
|
|
340
|
+
secretValue: string,
|
|
341
|
+
description: string,
|
|
342
|
+
region?: string
|
|
343
|
+
): Promise<void> {
|
|
344
|
+
const exists = await secretExists(secretPath, region);
|
|
345
|
+
|
|
346
|
+
if (exists) {
|
|
347
|
+
const command = new PutSecretValueCommand({
|
|
348
|
+
SecretId: secretPath,
|
|
349
|
+
SecretString: secretValue,
|
|
350
|
+
});
|
|
351
|
+
await client.send(command);
|
|
352
|
+
} else {
|
|
353
|
+
const command = new CreateSecretCommand({
|
|
354
|
+
Name: secretPath,
|
|
355
|
+
SecretString: secretValue,
|
|
356
|
+
Description: description,
|
|
357
|
+
});
|
|
358
|
+
await client.send(command);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Delete a secret from AWS Secrets Manager.
|
|
364
|
+
*/
|
|
365
|
+
async function deleteSecret(
|
|
366
|
+
client: SecretsManagerClient,
|
|
367
|
+
secretPath: string
|
|
368
|
+
): Promise<void> {
|
|
369
|
+
try {
|
|
370
|
+
const command = new DeleteSecretCommand({
|
|
371
|
+
SecretId: secretPath,
|
|
372
|
+
ForceDeleteWithoutRecovery: true,
|
|
373
|
+
});
|
|
374
|
+
await client.send(command);
|
|
375
|
+
} catch (error) {
|
|
376
|
+
if (error instanceof ResourceNotFoundException) {
|
|
377
|
+
// Secret doesn't exist, that's fine
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
throw error;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* Find existing chunk secrets for a given base path.
|
|
386
|
+
*/
|
|
387
|
+
async function findExistingChunks(
|
|
388
|
+
client: SecretsManagerClient,
|
|
389
|
+
basePath: string
|
|
390
|
+
): Promise<string[]> {
|
|
391
|
+
const chunks: string[] = [];
|
|
392
|
+
|
|
393
|
+
try {
|
|
394
|
+
// List secrets that match the chunk pattern
|
|
395
|
+
const command = new ListSecretsCommand({
|
|
396
|
+
Filters: [
|
|
397
|
+
{
|
|
398
|
+
Key: 'name',
|
|
399
|
+
Values: [`${basePath}/`],
|
|
400
|
+
},
|
|
401
|
+
],
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
const response = await client.send(command);
|
|
405
|
+
|
|
406
|
+
if (response.SecretList) {
|
|
407
|
+
for (const secret of response.SecretList) {
|
|
408
|
+
if (secret.Name && secret.Name.startsWith(`${basePath}/`)) {
|
|
409
|
+
chunks.push(secret.Name);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
} catch (error) {
|
|
414
|
+
// If listing fails, we'll just proceed without cleanup
|
|
415
|
+
console.warn('Warning: Could not list existing chunks for cleanup.');
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
return chunks;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
/**
|
|
422
|
+
* Clean up old chunks that are no longer needed.
|
|
423
|
+
*/
|
|
424
|
+
async function cleanupOldChunks(
|
|
425
|
+
client: SecretsManagerClient,
|
|
426
|
+
basePath: string,
|
|
427
|
+
newChunkCount: number
|
|
428
|
+
): Promise<void> {
|
|
429
|
+
const existingChunks = await findExistingChunks(client, basePath);
|
|
430
|
+
|
|
431
|
+
for (const chunkPath of existingChunks) {
|
|
432
|
+
// Extract chunk number from path
|
|
433
|
+
const match = chunkPath.match(/\/(\d+)$/);
|
|
434
|
+
if (match) {
|
|
435
|
+
const chunkNum = parseInt(match[1], 10);
|
|
436
|
+
if (chunkNum > newChunkCount) {
|
|
437
|
+
console.log(`Cleaning up old chunk: ${chunkPath}`);
|
|
438
|
+
await deleteSecret(client, chunkPath);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* Push environment variables to AWS Secrets Manager.
|
|
446
|
+
* Automatically handles chunking for large env files.
|
|
447
|
+
*/
|
|
448
|
+
export async function pushSecrets(
|
|
449
|
+
secretPath: string,
|
|
450
|
+
vars: Record<string, string>,
|
|
451
|
+
region?: string
|
|
452
|
+
): Promise<{ chunked: boolean; chunks: number }> {
|
|
453
|
+
const client = new SecretsManagerClient({ region });
|
|
454
|
+
|
|
455
|
+
if (!needsChunking(vars)) {
|
|
456
|
+
// Small enough for a single secret - use legacy format for simplicity
|
|
457
|
+
await upsertSecret(
|
|
458
|
+
client,
|
|
459
|
+
secretPath,
|
|
460
|
+
JSON.stringify(vars),
|
|
461
|
+
'Laravel environment variables',
|
|
462
|
+
region
|
|
463
|
+
);
|
|
464
|
+
|
|
465
|
+
// Clean up any old chunks if we're switching from chunked to single
|
|
466
|
+
await cleanupOldChunks(client, secretPath, 0);
|
|
467
|
+
|
|
468
|
+
return { chunked: false, chunks: 1 };
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
// Need to chunk the secrets
|
|
472
|
+
const chunks = splitIntoChunks(vars);
|
|
473
|
+
|
|
474
|
+
console.log(`Environment file exceeds size limit. Splitting into ${chunks.length} chunks...`);
|
|
475
|
+
|
|
476
|
+
// Create metadata secret
|
|
477
|
+
const metadata: ChunkedSecretMetadata = {
|
|
478
|
+
version: 1,
|
|
479
|
+
chunked: true,
|
|
480
|
+
chunks: chunks.length,
|
|
481
|
+
totalKeys: Object.keys(vars).length,
|
|
482
|
+
};
|
|
483
|
+
|
|
484
|
+
await upsertSecret(
|
|
485
|
+
client,
|
|
486
|
+
secretPath,
|
|
487
|
+
JSON.stringify(metadata),
|
|
488
|
+
'Laravel environment variables (chunked metadata)',
|
|
489
|
+
region
|
|
490
|
+
);
|
|
491
|
+
|
|
492
|
+
// Create chunk secrets in parallel
|
|
493
|
+
const chunkPromises = chunks.map((chunk, index) =>
|
|
494
|
+
upsertSecret(
|
|
495
|
+
client,
|
|
496
|
+
getChunkPath(secretPath, index + 1),
|
|
497
|
+
JSON.stringify(chunk),
|
|
498
|
+
`Laravel environment variables (chunk ${index + 1}/${chunks.length})`,
|
|
499
|
+
region
|
|
500
|
+
)
|
|
501
|
+
);
|
|
502
|
+
|
|
503
|
+
await Promise.all(chunkPromises);
|
|
504
|
+
|
|
505
|
+
// Clean up any old chunks beyond the new count
|
|
506
|
+
await cleanupOldChunks(client, secretPath, chunks.length);
|
|
507
|
+
|
|
508
|
+
return { chunked: true, chunks: chunks.length };
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
/**
|
|
512
|
+
* Get info about the current secret structure.
|
|
513
|
+
*/
|
|
514
|
+
export async function getSecretInfo(
|
|
515
|
+
secretPath: string,
|
|
516
|
+
region?: string
|
|
517
|
+
): Promise<{ exists: boolean; chunked: boolean; chunks: number; totalKeys: number } | null> {
|
|
518
|
+
const client = new SecretsManagerClient({ region });
|
|
519
|
+
|
|
520
|
+
const secretValue = await getSecretValue(client, secretPath);
|
|
521
|
+
|
|
522
|
+
if (!secretValue) {
|
|
523
|
+
return null;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
const data = JSON.parse(secretValue);
|
|
527
|
+
|
|
528
|
+
if (isChunkedSecret(data)) {
|
|
529
|
+
return {
|
|
530
|
+
exists: true,
|
|
531
|
+
chunked: true,
|
|
532
|
+
chunks: data.chunks,
|
|
533
|
+
totalKeys: data.totalKeys,
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
// Legacy format
|
|
538
|
+
return {
|
|
539
|
+
exists: true,
|
|
540
|
+
chunked: false,
|
|
541
|
+
chunks: 1,
|
|
542
|
+
totalKeys: Object.keys(data).length,
|
|
543
|
+
};
|
|
544
|
+
}
|