@kirschbaum-development/sst-laravel 0.1.5 → 0.2.7

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.
@@ -1,8 +1,106 @@
1
1
  import { Command } from 'commander';
2
- import { spawn } from 'child_process';
2
+ import { spawn, execSync } from 'child_process';
3
3
  import * as fs from 'fs';
4
4
  import * as path from 'path';
5
- import { getTemplatePath } from '../utils/sst-config.js';
5
+ import { fileURLToPath } from 'url';
6
+ import { confirm } from '@inquirer/prompts';
7
+ import { getTemplatePath, getPackageRoot } from '../utils/sst-config.js';
8
+ const SKILL_FILE_PATH = fileURLToPath(new URL('../../skills/laravel-initial-setup/SKILL.md', import.meta.url));
9
+ const runProcess = (command, args, cwd) => {
10
+ return new Promise((resolve, reject) => {
11
+ const child = spawn(command, args, {
12
+ cwd,
13
+ stdio: 'inherit',
14
+ shell: true
15
+ });
16
+ child.on('exit', (code) => {
17
+ if (code === 0) {
18
+ resolve();
19
+ }
20
+ else {
21
+ reject(new Error(`${command} ${args.join(' ')} exited with code ${code}`));
22
+ }
23
+ });
24
+ child.on('error', reject);
25
+ });
26
+ };
27
+ const detectLaravelBoostVersion = (cwd) => {
28
+ try {
29
+ const output = execSync('composer show laravel/boost --no-ansi --no-interaction', {
30
+ cwd,
31
+ stdio: ['ignore', 'pipe', 'pipe']
32
+ }).toString();
33
+ const versionMatch = output.match(/versions?\s*:\s*\*?\s*v?([0-9][^\s]*)/i);
34
+ if (!versionMatch) {
35
+ return null;
36
+ }
37
+ return versionMatch[1].replace(/^v/, '');
38
+ }
39
+ catch (error) {
40
+ return null;
41
+ }
42
+ };
43
+ const isVersionAtLeast = (version, minimum) => {
44
+ const normalize = (input) => input.split('.').map((segment) => parseInt(segment, 10) || 0);
45
+ const versionParts = normalize(version);
46
+ const minParts = normalize(minimum);
47
+ for (let i = 0; i < Math.max(versionParts.length, minParts.length); i++) {
48
+ const current = versionParts[i] ?? 0;
49
+ const min = minParts[i] ?? 0;
50
+ if (current > min)
51
+ return true;
52
+ if (current < min)
53
+ return false;
54
+ }
55
+ return true;
56
+ };
57
+ const installSkillWithBoost = async (cwd) => {
58
+ const aiSkillsDir = path.join(cwd, '.ai', 'skills', 'sst-laravel-initial-setup');
59
+ fs.mkdirSync(aiSkillsDir, { recursive: true });
60
+ const targetPath = path.join(aiSkillsDir, 'SKILL.md');
61
+ fs.copyFileSync(SKILL_FILE_PATH, targetPath);
62
+ console.log(`Copied skill file to ${path.relative(cwd, targetPath)}`);
63
+ console.log('Running boost:update to refresh Laravel Boost skills...');
64
+ await runProcess('php', ['artisan', 'boost:update'], cwd);
65
+ };
66
+ const installSkillViaNpx = async (cwd) => {
67
+ console.log('Installing skill via `npx skills add`...');
68
+ await runProcess('npx', ['skills', 'add', SKILL_FILE_PATH], cwd);
69
+ };
70
+ const maybeInstallSkill = async (cwd) => {
71
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
72
+ console.log('Skipping AI skill installation prompt (non-interactive terminal).');
73
+ return;
74
+ }
75
+ const shouldInstallSkill = await confirm({
76
+ message: 'Install the SST Laravel Initial Setup AI skill in this project?',
77
+ default: true
78
+ });
79
+ if (!shouldInstallSkill) {
80
+ console.log('Skipping AI skill installation. You can add it later from skills/laravel-initial-setup.');
81
+ return;
82
+ }
83
+ const boostVersion = detectLaravelBoostVersion(cwd);
84
+ if (boostVersion) {
85
+ console.log(`Detected laravel/boost version ${boostVersion}`);
86
+ }
87
+ else {
88
+ console.log('laravel/boost package not detected or Composer unavailable.');
89
+ }
90
+ if (boostVersion && isVersionAtLeast(boostVersion, '2.0.0')) {
91
+ await installSkillWithBoost(cwd);
92
+ }
93
+ else {
94
+ if (boostVersion) {
95
+ console.log('laravel/boost version is below 2.0. Falling back to npx skills.');
96
+ }
97
+ await installSkillViaNpx(cwd);
98
+ }
99
+ console.log('\n');
100
+ console.log('\n');
101
+ console.log('🤖 SST Laravel skill installed successfully');
102
+ console.log('Run "Please help me set up the deployment config of my application using SST Laravel" in your AI agent to get started');
103
+ };
6
104
  export const initCommand = new Command('init')
7
105
  .description('Initialize SST and SST Laravel, creating a new sst.config.ts file to deploy your Laravel application')
8
106
  .action(async () => {
@@ -67,7 +165,11 @@ export const initCommand = new Command('init')
67
165
  const sstInstallProcess = spawn('npx', ['sst', 'install'], {
68
166
  cwd,
69
167
  stdio: 'inherit',
70
- shell: true
168
+ shell: true,
169
+ env: {
170
+ ...process.env,
171
+ SST_LARAVEL_PACKAGE_ROOT: getPackageRoot(),
172
+ },
71
173
  });
72
174
  await new Promise((resolve, reject) => {
73
175
  sstInstallProcess.on('exit', (code) => {
@@ -102,16 +204,23 @@ export const initCommand = new Command('init')
102
204
  fs.chmodSync(deployScriptPath, 0o755);
103
205
  console.log('Created infra/deploy.sh script');
104
206
  }
207
+ try {
208
+ await maybeInstallSkill(cwd);
209
+ }
210
+ catch (skillError) {
211
+ console.warn('Failed to install AI skill automatically:', skillError.message);
212
+ console.warn('You can manually add it later from skills/laravel-initial-setup.');
213
+ }
105
214
  console.log('\n');
106
215
  console.log('\n');
107
- console.log('Successfully configured sst.config.ts with Laravel boilerplate');
216
+ console.log('Successfully configured sst.config.ts with Laravel boilerplate');
108
217
  console.log('You can now customize the configuration for your own Laravel application.');
109
218
  console.log('\n');
110
219
  console.log('Your default configuration is set to look for a .env.{stage} file when deploying. You can customize this in the sst.config.ts file as needed.');
111
220
  console.log('\n');
112
221
  console.log('A deploy.sh script has been created with example deployment tasks (migrations, caching, etc.). Customize it as needed.');
113
222
  console.log('\n');
114
- console.log('Run `npx sst deploy --stage {stage}` to deploy your application.');
223
+ console.log('Run `npx sst-laravel deploy --stage {stage}` to deploy your application.');
115
224
  }
116
225
  catch (error) {
117
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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"}
@@ -2,7 +2,7 @@ import { Command } from 'commander';
2
2
  import { spawn } from 'child_process';
3
3
  import * as fs from 'fs';
4
4
  import * as path from 'path';
5
- import { findSstConfig, getTemplatePath } from '../utils/sst-config.js';
5
+ import { findSstConfig, getTemplatePath, getPackageRoot } from '../utils/sst-config.js';
6
6
  export const installCommand = new Command('install')
7
7
  .description('Run SST install, handling existing .sst folder by temporarily renaming sst.config.ts')
8
8
  .action(async () => {
@@ -33,7 +33,11 @@ export const installCommand = new Command('install')
33
33
  const installProcess = spawn('npx', ['sst', 'install'], {
34
34
  cwd,
35
35
  stdio: 'inherit',
36
- shell: true
36
+ shell: true,
37
+ env: {
38
+ ...process.env,
39
+ SST_LARAVEL_PACKAGE_ROOT: getPackageRoot(),
40
+ },
37
41
  });
38
42
  await new Promise((resolve, reject) => {
39
43
  installProcess.on('exit', (code) => {
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../bin/commands/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../bin/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Get the secret path for a given app and stage.
3
+ * Format: /{app-name}/{stage}/env
4
+ */
5
+ export declare function getSecretPath(appName: string, stage: string): string;
6
+ /**
7
+ * List available stages for an app by inspecting Secrets Manager paths.
8
+ */
9
+ export declare function listAvailableStages(appName: string, region?: string): Promise<string[]>;
10
+ /**
11
+ * Parse an .env file content into a key-value object.
12
+ */
13
+ export declare function parseEnvFile(content: string): Record<string, string>;
14
+ /**
15
+ * Convert a key-value object to .env file content.
16
+ */
17
+ export declare function toEnvFileContent(vars: Record<string, string>): string;
18
+ /**
19
+ * Split variables into chunks that fit within the AWS Secrets Manager limit.
20
+ */
21
+ export declare function splitIntoChunks(vars: Record<string, string>): Record<string, string>[];
22
+ /**
23
+ * Check if variables need to be chunked.
24
+ */
25
+ export declare function needsChunking(vars: Record<string, string>): boolean;
26
+ /**
27
+ * Pull environment variables from AWS Secrets Manager.
28
+ * Handles both legacy single secrets and chunked secrets.
29
+ */
30
+ export declare function pullSecrets(secretPath: string, region?: string): Promise<Record<string, string> | null>;
31
+ /**
32
+ * Check if a secret exists in AWS Secrets Manager.
33
+ */
34
+ export declare function secretExists(secretPath: string, region?: string): Promise<boolean>;
35
+ /**
36
+ * Push environment variables to AWS Secrets Manager.
37
+ * Automatically handles chunking for large env files.
38
+ */
39
+ export declare function pushSecrets(secretPath: string, vars: Record<string, string>, region?: string): Promise<{
40
+ chunked: boolean;
41
+ chunks: number;
42
+ }>;
43
+ /**
44
+ * Get info about the current secret structure.
45
+ */
46
+ export declare function getSecretInfo(secretPath: string, region?: string): Promise<{
47
+ exists: boolean;
48
+ chunked: boolean;
49
+ chunks: number;
50
+ totalKeys: number;
51
+ } | null>;
@@ -0,0 +1,378 @@
1
+ import { SecretsManagerClient, GetSecretValueCommand, PutSecretValueCommand, CreateSecretCommand, DeleteSecretCommand, ResourceNotFoundException, DescribeSecretCommand, ListSecretsCommand, } from '@aws-sdk/client-secrets-manager';
2
+ /**
3
+ * AWS Secrets Manager limit is 65,536 bytes.
4
+ * We use 60KB as our threshold to leave some buffer.
5
+ */
6
+ const MAX_SECRET_SIZE_BYTES = 60 * 1024;
7
+ /**
8
+ * Get the secret path for a given app and stage.
9
+ * Format: /{app-name}/{stage}/env
10
+ */
11
+ export function getSecretPath(appName, stage) {
12
+ return `/${appName}/${stage}/env`;
13
+ }
14
+ /**
15
+ * List available stages for an app by inspecting Secrets Manager paths.
16
+ */
17
+ export async function listAvailableStages(appName, region) {
18
+ const client = new SecretsManagerClient({ region });
19
+ const stages = new Set();
20
+ const prefix = `/${appName}/`;
21
+ const suffix = '/env';
22
+ let nextToken;
23
+ do {
24
+ const command = new ListSecretsCommand({
25
+ NextToken: nextToken,
26
+ Filters: [
27
+ {
28
+ Key: 'name',
29
+ Values: [prefix],
30
+ },
31
+ ],
32
+ });
33
+ const response = await client.send(command);
34
+ if (response.SecretList) {
35
+ for (const secret of response.SecretList) {
36
+ if (!secret.Name) {
37
+ continue;
38
+ }
39
+ if (!secret.Name.startsWith(prefix) || !secret.Name.endsWith(suffix)) {
40
+ continue;
41
+ }
42
+ const parts = secret.Name.split('/');
43
+ // Secrets are stored as /{app}/{stage}/env
44
+ if (parts.length >= 4 && parts[2]) {
45
+ stages.add(parts[2]);
46
+ }
47
+ }
48
+ }
49
+ nextToken = response.NextToken;
50
+ } while (nextToken);
51
+ return Array.from(stages).sort();
52
+ }
53
+ /**
54
+ * Get the chunk path for a given secret path and chunk index.
55
+ */
56
+ function getChunkPath(basePath, chunkIndex) {
57
+ return `${basePath}/${chunkIndex}`;
58
+ }
59
+ /**
60
+ * Parse an .env file content into a key-value object.
61
+ */
62
+ export function parseEnvFile(content) {
63
+ const result = {};
64
+ const lines = content.split('\n');
65
+ for (const line of lines) {
66
+ const trimmed = line.trim();
67
+ // Skip empty lines and comments
68
+ if (!trimmed || trimmed.startsWith('#')) {
69
+ continue;
70
+ }
71
+ // Find the first = sign
72
+ const equalIndex = trimmed.indexOf('=');
73
+ if (equalIndex === -1) {
74
+ continue;
75
+ }
76
+ const key = trimmed.substring(0, equalIndex).trim();
77
+ let value = trimmed.substring(equalIndex + 1);
78
+ // Handle quoted values
79
+ if ((value.startsWith('"') && value.endsWith('"')) ||
80
+ (value.startsWith("'") && value.endsWith("'"))) {
81
+ value = value.slice(1, -1);
82
+ }
83
+ if (key) {
84
+ result[key] = value;
85
+ }
86
+ }
87
+ return result;
88
+ }
89
+ /**
90
+ * Convert a key-value object to .env file content.
91
+ */
92
+ export function toEnvFileContent(vars) {
93
+ // Sort keys alphabetically for consistent output
94
+ const sortedKeys = Object.keys(vars).sort();
95
+ return sortedKeys
96
+ .map((key) => {
97
+ const value = vars[key];
98
+ // Quote values that contain spaces, quotes, or special characters
99
+ if (value.includes(' ') || value.includes('"') || value.includes("'") || value.includes('\n')) {
100
+ // Escape existing double quotes and wrap in double quotes
101
+ const escaped = value.replace(/"/g, '\\"');
102
+ return `${key}="${escaped}"`;
103
+ }
104
+ return `${key}=${value}`;
105
+ })
106
+ .join('\n');
107
+ }
108
+ /**
109
+ * Calculate the byte size of a JSON string.
110
+ */
111
+ function getJsonByteSize(obj) {
112
+ return Buffer.byteLength(JSON.stringify(obj), 'utf8');
113
+ }
114
+ /**
115
+ * Split variables into chunks that fit within the AWS Secrets Manager limit.
116
+ */
117
+ export function splitIntoChunks(vars) {
118
+ const sortedKeys = Object.keys(vars).sort();
119
+ const chunks = [];
120
+ let currentChunk = {};
121
+ for (const key of sortedKeys) {
122
+ const testChunk = { ...currentChunk, [key]: vars[key] };
123
+ if (getJsonByteSize(testChunk) > MAX_SECRET_SIZE_BYTES) {
124
+ // Current chunk is full, start a new one
125
+ if (Object.keys(currentChunk).length > 0) {
126
+ chunks.push(currentChunk);
127
+ currentChunk = { [key]: vars[key] };
128
+ }
129
+ else {
130
+ // Single variable exceeds limit - this is an edge case
131
+ // We still add it, but it may fail on AWS side
132
+ console.warn(`Warning: Variable "${key}" alone exceeds the secret size limit.`);
133
+ chunks.push({ [key]: vars[key] });
134
+ currentChunk = {};
135
+ }
136
+ }
137
+ else {
138
+ currentChunk = testChunk;
139
+ }
140
+ }
141
+ // Don't forget the last chunk
142
+ if (Object.keys(currentChunk).length > 0) {
143
+ chunks.push(currentChunk);
144
+ }
145
+ return chunks;
146
+ }
147
+ /**
148
+ * Check if variables need to be chunked.
149
+ */
150
+ export function needsChunking(vars) {
151
+ return getJsonByteSize(vars) > MAX_SECRET_SIZE_BYTES;
152
+ }
153
+ /**
154
+ * Get a secret value from AWS Secrets Manager.
155
+ */
156
+ async function getSecretValue(client, secretPath) {
157
+ try {
158
+ const command = new GetSecretValueCommand({
159
+ SecretId: secretPath,
160
+ });
161
+ const response = await client.send(command);
162
+ return response.SecretString || null;
163
+ }
164
+ catch (error) {
165
+ if (error instanceof ResourceNotFoundException) {
166
+ return null;
167
+ }
168
+ throw error;
169
+ }
170
+ }
171
+ /**
172
+ * Check if a secret is using the chunked format.
173
+ */
174
+ function isChunkedSecret(data) {
175
+ return data && typeof data === 'object' && data.chunked === true && typeof data.chunks === 'number';
176
+ }
177
+ /**
178
+ * Pull environment variables from AWS Secrets Manager.
179
+ * Handles both legacy single secrets and chunked secrets.
180
+ */
181
+ export async function pullSecrets(secretPath, region) {
182
+ const client = new SecretsManagerClient({ region });
183
+ const secretValue = await getSecretValue(client, secretPath);
184
+ if (!secretValue) {
185
+ return null;
186
+ }
187
+ const data = JSON.parse(secretValue);
188
+ // Check if this is a chunked secret
189
+ if (isChunkedSecret(data)) {
190
+ return await pullChunkedSecrets(client, secretPath, data.chunks);
191
+ }
192
+ // Legacy format - direct key-value pairs
193
+ return data;
194
+ }
195
+ /**
196
+ * Pull and merge all chunks of a chunked secret.
197
+ */
198
+ async function pullChunkedSecrets(client, basePath, chunkCount) {
199
+ const allVars = {};
200
+ // Fetch all chunks in parallel
201
+ const chunkPromises = Array.from({ length: chunkCount }, (_, i) => getSecretValue(client, getChunkPath(basePath, i + 1)));
202
+ const chunkValues = await Promise.all(chunkPromises);
203
+ for (let i = 0; i < chunkValues.length; i++) {
204
+ const chunkValue = chunkValues[i];
205
+ if (chunkValue) {
206
+ const chunkData = JSON.parse(chunkValue);
207
+ Object.assign(allVars, chunkData);
208
+ }
209
+ else {
210
+ console.warn(`Warning: Chunk ${i + 1} not found at ${getChunkPath(basePath, i + 1)}`);
211
+ }
212
+ }
213
+ return allVars;
214
+ }
215
+ /**
216
+ * Check if a secret exists in AWS Secrets Manager.
217
+ */
218
+ export async function secretExists(secretPath, region) {
219
+ const client = new SecretsManagerClient({ region });
220
+ try {
221
+ const command = new DescribeSecretCommand({
222
+ SecretId: secretPath,
223
+ });
224
+ await client.send(command);
225
+ return true;
226
+ }
227
+ catch (error) {
228
+ if (error instanceof ResourceNotFoundException) {
229
+ return false;
230
+ }
231
+ throw error;
232
+ }
233
+ }
234
+ /**
235
+ * Create or update a secret in AWS Secrets Manager.
236
+ */
237
+ async function upsertSecret(client, secretPath, secretValue, description, region) {
238
+ const exists = await secretExists(secretPath, region);
239
+ if (exists) {
240
+ const command = new PutSecretValueCommand({
241
+ SecretId: secretPath,
242
+ SecretString: secretValue,
243
+ });
244
+ await client.send(command);
245
+ }
246
+ else {
247
+ const command = new CreateSecretCommand({
248
+ Name: secretPath,
249
+ SecretString: secretValue,
250
+ Description: description,
251
+ });
252
+ await client.send(command);
253
+ }
254
+ }
255
+ /**
256
+ * Delete a secret from AWS Secrets Manager.
257
+ */
258
+ async function deleteSecret(client, secretPath) {
259
+ try {
260
+ const command = new DeleteSecretCommand({
261
+ SecretId: secretPath,
262
+ ForceDeleteWithoutRecovery: true,
263
+ });
264
+ await client.send(command);
265
+ }
266
+ catch (error) {
267
+ if (error instanceof ResourceNotFoundException) {
268
+ // Secret doesn't exist, that's fine
269
+ return;
270
+ }
271
+ throw error;
272
+ }
273
+ }
274
+ /**
275
+ * Find existing chunk secrets for a given base path.
276
+ */
277
+ async function findExistingChunks(client, basePath) {
278
+ const chunks = [];
279
+ try {
280
+ // List secrets that match the chunk pattern
281
+ const command = new ListSecretsCommand({
282
+ Filters: [
283
+ {
284
+ Key: 'name',
285
+ Values: [`${basePath}/`],
286
+ },
287
+ ],
288
+ });
289
+ const response = await client.send(command);
290
+ if (response.SecretList) {
291
+ for (const secret of response.SecretList) {
292
+ if (secret.Name && secret.Name.startsWith(`${basePath}/`)) {
293
+ chunks.push(secret.Name);
294
+ }
295
+ }
296
+ }
297
+ }
298
+ catch (error) {
299
+ // If listing fails, we'll just proceed without cleanup
300
+ console.warn('Warning: Could not list existing chunks for cleanup.');
301
+ }
302
+ return chunks;
303
+ }
304
+ /**
305
+ * Clean up old chunks that are no longer needed.
306
+ */
307
+ async function cleanupOldChunks(client, basePath, newChunkCount) {
308
+ const existingChunks = await findExistingChunks(client, basePath);
309
+ for (const chunkPath of existingChunks) {
310
+ // Extract chunk number from path
311
+ const match = chunkPath.match(/\/(\d+)$/);
312
+ if (match) {
313
+ const chunkNum = parseInt(match[1], 10);
314
+ if (chunkNum > newChunkCount) {
315
+ console.log(`Cleaning up old chunk: ${chunkPath}`);
316
+ await deleteSecret(client, chunkPath);
317
+ }
318
+ }
319
+ }
320
+ }
321
+ /**
322
+ * Push environment variables to AWS Secrets Manager.
323
+ * Automatically handles chunking for large env files.
324
+ */
325
+ export async function pushSecrets(secretPath, vars, region) {
326
+ const client = new SecretsManagerClient({ region });
327
+ if (!needsChunking(vars)) {
328
+ // Small enough for a single secret - use legacy format for simplicity
329
+ await upsertSecret(client, secretPath, JSON.stringify(vars), 'Laravel environment variables', region);
330
+ // Clean up any old chunks if we're switching from chunked to single
331
+ await cleanupOldChunks(client, secretPath, 0);
332
+ return { chunked: false, chunks: 1 };
333
+ }
334
+ // Need to chunk the secrets
335
+ const chunks = splitIntoChunks(vars);
336
+ console.log(`Environment file exceeds size limit. Splitting into ${chunks.length} chunks...`);
337
+ // Create metadata secret
338
+ const metadata = {
339
+ version: 1,
340
+ chunked: true,
341
+ chunks: chunks.length,
342
+ totalKeys: Object.keys(vars).length,
343
+ };
344
+ await upsertSecret(client, secretPath, JSON.stringify(metadata), 'Laravel environment variables (chunked metadata)', region);
345
+ // Create chunk secrets in parallel
346
+ const chunkPromises = chunks.map((chunk, index) => upsertSecret(client, getChunkPath(secretPath, index + 1), JSON.stringify(chunk), `Laravel environment variables (chunk ${index + 1}/${chunks.length})`, region));
347
+ await Promise.all(chunkPromises);
348
+ // Clean up any old chunks beyond the new count
349
+ await cleanupOldChunks(client, secretPath, chunks.length);
350
+ return { chunked: true, chunks: chunks.length };
351
+ }
352
+ /**
353
+ * Get info about the current secret structure.
354
+ */
355
+ export async function getSecretInfo(secretPath, region) {
356
+ const client = new SecretsManagerClient({ region });
357
+ const secretValue = await getSecretValue(client, secretPath);
358
+ if (!secretValue) {
359
+ return null;
360
+ }
361
+ const data = JSON.parse(secretValue);
362
+ if (isChunkedSecret(data)) {
363
+ return {
364
+ exists: true,
365
+ chunked: true,
366
+ chunks: data.chunks,
367
+ totalKeys: data.totalKeys,
368
+ };
369
+ }
370
+ // Legacy format
371
+ return {
372
+ exists: true,
373
+ chunked: false,
374
+ chunks: 1,
375
+ totalKeys: Object.keys(data).length,
376
+ };
377
+ }
378
+ //# sourceMappingURL=secrets-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets-manager.js","sourceRoot":"","sources":["../../../bin/utils/secrets-manager.ts"],"names":[],"mappings":"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"}