From 5f94ddab173899544233817955577674ab3467ea Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Tue, 17 Dec 2024 09:31:00 -0800 Subject: [PATCH 01/37] set up for seed secrets --- packages/backend-seed/.npmignore | 14 ++++++++++++++ packages/backend-seed/README.md | 3 +++ packages/backend-seed/api-extractor.json | 3 +++ packages/backend-seed/package.json | 20 ++++++++++++++++++++ packages/backend-seed/src/index.ts | 7 +++++++ packages/backend-seed/tsconfig.json | 7 +++++++ packages/backend-seed/typedoc.json | 3 +++ 7 files changed, 57 insertions(+) create mode 100644 packages/backend-seed/.npmignore create mode 100644 packages/backend-seed/README.md create mode 100644 packages/backend-seed/api-extractor.json create mode 100644 packages/backend-seed/package.json create mode 100644 packages/backend-seed/src/index.ts create mode 100644 packages/backend-seed/tsconfig.json create mode 100644 packages/backend-seed/typedoc.json diff --git a/packages/backend-seed/.npmignore b/packages/backend-seed/.npmignore new file mode 100644 index 00000000000..dbde1fb5dbc --- /dev/null +++ b/packages/backend-seed/.npmignore @@ -0,0 +1,14 @@ +# Be very careful editing this file. It is crafted to work around [this issue](https://github.com/npm/npm/issues/4479) + +# First ignore everything +**/* + +# Then add back in transpiled js and ts declaration files +!lib/**/*.js +!lib/**/*.d.ts + +# Then ignore test js and ts declaration files +*.test.js +*.test.d.ts + +# This leaves us with including only js and ts declaration files of functional code diff --git a/packages/backend-seed/README.md b/packages/backend-seed/README.md new file mode 100644 index 00000000000..793417be040 --- /dev/null +++ b/packages/backend-seed/README.md @@ -0,0 +1,3 @@ +# Description + +Replace with a description of this package diff --git a/packages/backend-seed/api-extractor.json b/packages/backend-seed/api-extractor.json new file mode 100644 index 00000000000..0f56de03f66 --- /dev/null +++ b/packages/backend-seed/api-extractor.json @@ -0,0 +1,3 @@ +{ + "extends": "../../api-extractor.base.json" +} diff --git a/packages/backend-seed/package.json b/packages/backend-seed/package.json new file mode 100644 index 00000000000..74105cbb4b5 --- /dev/null +++ b/packages/backend-seed/package.json @@ -0,0 +1,20 @@ +{ + "name": "@aws-amplify/backend-seed", + "version": "0.1.0", + "type": "module", + "publishConfig": { + "access": "public" + }, + "exports": { + ".": { + "types": "./lib/index.d.ts", + "import": "./lib/index.js", + "require": "./lib/index.js" + } + }, + "types": "lib/index.d.ts", + "scripts": { + "update:api": "api-extractor run --local" + }, + "license": "Apache-2.0" +} diff --git a/packages/backend-seed/src/index.ts b/packages/backend-seed/src/index.ts new file mode 100644 index 00000000000..e94945895f9 --- /dev/null +++ b/packages/backend-seed/src/index.ts @@ -0,0 +1,7 @@ +/*import { Secret } from '@aws-amplify/backend-secret'; + +//ultimatly want the API to look something like this: getSecret(secretID) +export const getSecret = (secretName: string): Promise => { + //somehow need to get the secret from the secret manager +}; +*/ diff --git a/packages/backend-seed/tsconfig.json b/packages/backend-seed/tsconfig.json new file mode 100644 index 00000000000..2b2102b20ec --- /dev/null +++ b/packages/backend-seed/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "lib" + } +} diff --git a/packages/backend-seed/typedoc.json b/packages/backend-seed/typedoc.json new file mode 100644 index 00000000000..35fed2c958c --- /dev/null +++ b/packages/backend-seed/typedoc.json @@ -0,0 +1,3 @@ +{ + "entryPoints": ["src/index.ts"] +} From 37eb2c9dd85837a989245733eb6082cf6e3ca299 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Tue, 17 Dec 2024 09:34:27 -0800 Subject: [PATCH 02/37] tsconfig update --- packages/backend-seed/tsconfig.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/backend-seed/tsconfig.json b/packages/backend-seed/tsconfig.json index 2b2102b20ec..2aab102e9b4 100644 --- a/packages/backend-seed/tsconfig.json +++ b/packages/backend-seed/tsconfig.json @@ -1,7 +1,5 @@ { "extends": "../../tsconfig.base.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "lib" - } + "compilerOptions": { "rootDir": "src", "outDir": "lib" }, + "references": [] } From 9b90d779e02b989253edea712d09675ca69848e5 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Tue, 17 Dec 2024 13:40:09 -0800 Subject: [PATCH 03/37] most things but backendId --- packages/backend-seed/package.json | 5 ++++- packages/backend-seed/src/index.ts | 18 +++++++++++++----- packages/backend-seed/tsconfig.json | 2 +- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/backend-seed/package.json b/packages/backend-seed/package.json index 74105cbb4b5..e4c8495718c 100644 --- a/packages/backend-seed/package.json +++ b/packages/backend-seed/package.json @@ -16,5 +16,8 @@ "scripts": { "update:api": "api-extractor run --local" }, - "license": "Apache-2.0" + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/backend-secret": "^1.1.5" + } } diff --git a/packages/backend-seed/src/index.ts b/packages/backend-seed/src/index.ts index e94945895f9..28588ec5809 100644 --- a/packages/backend-seed/src/index.ts +++ b/packages/backend-seed/src/index.ts @@ -1,7 +1,15 @@ -/*import { Secret } from '@aws-amplify/backend-secret'; +//import { BackendIdentifier } from '@aws-amplify/plugin-types'; +import { getSecretClientWithAmplifyErrorHandling } from '@aws-amplify/backend-secret'; -//ultimatly want the API to look something like this: getSecret(secretID) -export const getSecret = (secretName: string): Promise => { - //somehow need to get the secret from the secret manager +//ultimately want the API to look something like this: getSecret(secretID) +//eslint-disable-next-line jsdoc/require-description +/** + * + */ +export const getSecret = async (secretName: string): Promise => { + //need to get access to the BackendIdentifier + const backendId = new BackendIdResolver(); + const secretClient = getSecretClientWithAmplifyErrorHandling(); + const secret = await secretClient.getSecret(backendId, { name: secretName }); + return secret.value; }; -*/ diff --git a/packages/backend-seed/tsconfig.json b/packages/backend-seed/tsconfig.json index 2aab102e9b4..8b2050b24c0 100644 --- a/packages/backend-seed/tsconfig.json +++ b/packages/backend-seed/tsconfig.json @@ -1,5 +1,5 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { "rootDir": "src", "outDir": "lib" }, - "references": [] + "references": [{ "path": "../backend-secret" }] } From ade05b9a475f054a0875da8df9c62e3da67a2fe5 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Wed, 18 Dec 2024 11:20:49 -0800 Subject: [PATCH 04/37] new files --- packages/backend-seed/API.md | 12 ++++++++++++ packages/backend-seed/package.json | 3 ++- packages/backend-seed/src/get_secret_seed.ts | 15 +++++++++++++++ packages/backend-seed/src/index.ts | 16 +--------------- 4 files changed, 30 insertions(+), 16 deletions(-) create mode 100644 packages/backend-seed/API.md create mode 100644 packages/backend-seed/src/get_secret_seed.ts diff --git a/packages/backend-seed/API.md b/packages/backend-seed/API.md new file mode 100644 index 00000000000..f3ee8986498 --- /dev/null +++ b/packages/backend-seed/API.md @@ -0,0 +1,12 @@ +## API Report File for "@aws-amplify/backend-seed" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts + +// @public (undocumented) +export const getSecret: (secretName: string) => Promise; + +// (No @packageDocumentation comment for this package) + +``` diff --git a/packages/backend-seed/package.json b/packages/backend-seed/package.json index e4c8495718c..0d2596ce5b3 100644 --- a/packages/backend-seed/package.json +++ b/packages/backend-seed/package.json @@ -7,11 +7,12 @@ }, "exports": { ".": { - "types": "./lib/index.d.ts", + "types": "./lib/types.d.ts", "import": "./lib/index.js", "require": "./lib/index.js" } }, + "main": "lib/index.js", "types": "lib/index.d.ts", "scripts": { "update:api": "api-extractor run --local" diff --git a/packages/backend-seed/src/get_secret_seed.ts b/packages/backend-seed/src/get_secret_seed.ts new file mode 100644 index 00000000000..808146e5daf --- /dev/null +++ b/packages/backend-seed/src/get_secret_seed.ts @@ -0,0 +1,15 @@ +//import { BackendIdentifier } from '@aws-amplify/plugin-types'; +import { getSecretClientWithAmplifyErrorHandling } from '@aws-amplify/backend-secret'; + +//ultimately want the API to look something like this: getSecret(secretName) +//eslint-disable-next-line jsdoc/require-description +/** + * + */ +export const GetSeedSecret = async (secretName: string): Promise => { + //need to get access to the BackendIdentifier + const backendId = new BackendIdResolver(); //this does not work + const secretClient = getSecretClientWithAmplifyErrorHandling(); + const secret = await secretClient.getSecret(backendId, { name: secretName }); + return secret.value; +}; diff --git a/packages/backend-seed/src/index.ts b/packages/backend-seed/src/index.ts index 28588ec5809..349c5d17a17 100644 --- a/packages/backend-seed/src/index.ts +++ b/packages/backend-seed/src/index.ts @@ -1,15 +1 @@ -//import { BackendIdentifier } from '@aws-amplify/plugin-types'; -import { getSecretClientWithAmplifyErrorHandling } from '@aws-amplify/backend-secret'; - -//ultimately want the API to look something like this: getSecret(secretID) -//eslint-disable-next-line jsdoc/require-description -/** - * - */ -export const getSecret = async (secretName: string): Promise => { - //need to get access to the BackendIdentifier - const backendId = new BackendIdResolver(); - const secretClient = getSecretClientWithAmplifyErrorHandling(); - const secret = await secretClient.getSecret(backendId, { name: secretName }); - return secret.value; -}; +export * from './get_secret_seed.js'; From c1f745560f3e00ef98b41c320c6588e55a18ec1a Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Wed, 18 Dec 2024 11:56:04 -0800 Subject: [PATCH 05/37] temp sandbox Id resovler --- packages/backend-seed/package.json | 3 +- packages/backend-seed/src/get_secret_seed.ts | 8 +++-- .../backend-seed/src/namespace_resolver.ts | 34 +++++++++++++++++++ .../backend-seed/src/sandbox_id_resolver.ts | 32 +++++++++++++++++ 4 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 packages/backend-seed/src/namespace_resolver.ts create mode 100644 packages/backend-seed/src/sandbox_id_resolver.ts diff --git a/packages/backend-seed/package.json b/packages/backend-seed/package.json index 0d2596ce5b3..fc1238abf87 100644 --- a/packages/backend-seed/package.json +++ b/packages/backend-seed/package.json @@ -19,6 +19,7 @@ }, "license": "Apache-2.0", "dependencies": { - "@aws-amplify/backend-secret": "^1.1.5" + "@aws-amplify/backend-secret": "^1.1.5", + "@aws-amplify/platform-core": "^1.4.0" } } diff --git a/packages/backend-seed/src/get_secret_seed.ts b/packages/backend-seed/src/get_secret_seed.ts index 808146e5daf..82fa44d4367 100644 --- a/packages/backend-seed/src/get_secret_seed.ts +++ b/packages/backend-seed/src/get_secret_seed.ts @@ -1,4 +1,6 @@ -//import { BackendIdentifier } from '@aws-amplify/plugin-types'; +import { PackageJsonReader } from '@aws-amplify/platform-core'; +import { LocalNamespaceResolver } from './namespace_resolver.js'; +import { SandboxBackendIdResolver } from './sandbox_id_resolver.js'; import { getSecretClientWithAmplifyErrorHandling } from '@aws-amplify/backend-secret'; //ultimately want the API to look something like this: getSecret(secretName) @@ -8,7 +10,9 @@ import { getSecretClientWithAmplifyErrorHandling } from '@aws-amplify/backend-se */ export const GetSeedSecret = async (secretName: string): Promise => { //need to get access to the BackendIdentifier - const backendId = new BackendIdResolver(); //this does not work + const backendId = await new SandboxBackendIdResolver( + new LocalNamespaceResolver(new PackageJsonReader()) + ).resolve(); const secretClient = getSecretClientWithAmplifyErrorHandling(); const secret = await secretClient.getSecret(backendId, { name: secretName }); return secret.value; diff --git a/packages/backend-seed/src/namespace_resolver.ts b/packages/backend-seed/src/namespace_resolver.ts new file mode 100644 index 00000000000..a9d8a52c1b7 --- /dev/null +++ b/packages/backend-seed/src/namespace_resolver.ts @@ -0,0 +1,34 @@ +import { + AmplifyUserError, + PackageJsonReader, +} from '@aws-amplify/platform-core'; +import { EOL } from 'os'; + +//stole this from ../packages/cli/src/backend-identifier/local_namespace_resolver.ts for the POC + +export type NamespaceResolver = { + resolve: () => Promise; +}; + +/** + * Reads the local app name from package.json#name in the current directory + */ +export class LocalNamespaceResolver implements NamespaceResolver { + /** + * packageJsonReader is assigned to an instance member for testing. + * resolve is bound to this so that it can be passed as a function reference + */ + constructor(private readonly packageJsonReader: PackageJsonReader) {} + + /** + * Returns the value of package.json#name from the current working directory + */ + resolve = async () => { + const name = this.packageJsonReader.readFromCwd().name; + if (name) return name; + throw new AmplifyUserError('InvalidPackageJsonError', { + message: 'Cannot load name from the package.json', + resolution: `Ensure you are running ampx commands in root of your project (i.e. in the parent of the 'amplify' directory).${EOL}Also ensure that your root package.json file has a "name" field.`, + }); + }; +} diff --git a/packages/backend-seed/src/sandbox_id_resolver.ts b/packages/backend-seed/src/sandbox_id_resolver.ts new file mode 100644 index 00000000000..5117dab8d08 --- /dev/null +++ b/packages/backend-seed/src/sandbox_id_resolver.ts @@ -0,0 +1,32 @@ +import { userInfo as _userInfo } from 'os'; +import { NamespaceResolver } from './namespace_resolver.js'; +import { BackendIdentifier } from '@aws-amplify/plugin-types'; + +//stole this from ../packages/cli/src/commands/sandbox/sandbox_id_resolver.ts for the POC + +/** + * Resolves an ID that can be used to uniquely identify sandbox environments + */ +export class SandboxBackendIdResolver { + /** + * Initialize with an appName resolver + */ + constructor( + private readonly namespaceResolver: NamespaceResolver, + private readonly userInfo = _userInfo + ) {} + + /** + * Returns a concatenation of the resolved appName and the current username + */ + resolve = async (identifier?: string): Promise => { + const namespace = await this.namespaceResolver.resolve(); + const name = identifier || this.userInfo().username; + + return { + namespace, + name, + type: 'sandbox', + }; + }; +} From 38f50b4b4524bcae619964f586d6060fc264c13a Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Wed, 18 Dec 2024 12:29:11 -0800 Subject: [PATCH 06/37] tsconfig update --- packages/backend-seed/tsconfig.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/backend-seed/tsconfig.json b/packages/backend-seed/tsconfig.json index 8b2050b24c0..5954ab563d1 100644 --- a/packages/backend-seed/tsconfig.json +++ b/packages/backend-seed/tsconfig.json @@ -1,5 +1,8 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { "rootDir": "src", "outDir": "lib" }, - "references": [{ "path": "../backend-secret" }] + "references": [ + { "path": "../backend-secret" }, + { "path": "../platform-core" } + ] } From 7c307dcbb2957acb9447054ff3872b83d11d9463 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Wed, 18 Dec 2024 13:25:03 -0800 Subject: [PATCH 07/37] updating package.locks --- package-lock.json | 45 ++++++++++++++++++++++++++++++ packages/backend-seed/package.json | 2 +- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index c3fe5324670..a2875d6a3d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -616,6 +616,10 @@ "resolved": "packages/backend-secret", "link": true }, + "node_modules/@aws-amplify/backend-seed": { + "resolved": "packages/backend-seed", + "link": true + }, "node_modules/@aws-amplify/backend-storage": { "resolved": "packages/backend-storage", "link": true @@ -32073,6 +32077,47 @@ "@aws-sdk/types": "^3.609.0" } }, + "packages/backend-seed": { + "version": "0.1.0", + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/backend-secret": "^1.1.5", + "@aws-amplify/platform-core": "^1.4.0" + } + }, + "packages/backend-seed/node_modules/@aws-amplify/platform-core": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@aws-amplify/platform-core/-/platform-core-1.4.0.tgz", + "integrity": "sha512-MSkgt/A30kXsq93xEJmjlEKVOBA6lOg2pc8PUuCeDfsHEvRagrkZ60pH246MJPb1Ubm/ZwwaeDxT+aUbZ0zohw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-amplify/plugin-types": "^1.6.0", + "@aws-sdk/client-sts": "^3.624.0", + "is-ci": "^3.0.1", + "lodash.mergewith": "^4.6.2", + "lodash.snakecase": "^4.1.1", + "semver": "^7.6.3", + "uuid": "^9.0.1", + "zod": "^3.22.2" + }, + "peerDependencies": { + "aws-cdk-lib": "^2.168.0", + "constructs": "^10.0.0" + } + }, + "packages/backend-seed/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "packages/backend-storage": { "name": "@aws-amplify/backend-storage", "version": "1.2.4", diff --git a/packages/backend-seed/package.json b/packages/backend-seed/package.json index fc1238abf87..348d79f070f 100644 --- a/packages/backend-seed/package.json +++ b/packages/backend-seed/package.json @@ -7,7 +7,7 @@ }, "exports": { ".": { - "types": "./lib/types.d.ts", + "types": "./lib/index.d.ts", "import": "./lib/index.js", "require": "./lib/index.js" } From 521192d384011dbdbb30fd5b401dd66fd88377dc Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Wed, 18 Dec 2024 13:54:21 -0800 Subject: [PATCH 08/37] exporting seed secret export --- packages/backend-seed/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend-seed/src/index.ts b/packages/backend-seed/src/index.ts index 349c5d17a17..0cf4c4df172 100644 --- a/packages/backend-seed/src/index.ts +++ b/packages/backend-seed/src/index.ts @@ -1 +1 @@ -export * from './get_secret_seed.js'; +export { GetSeedSecret } from './get_secret_seed.js'; From 3a878569a1aaa8bbf27609ab402407ccbf8e966b Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Wed, 18 Dec 2024 13:58:49 -0800 Subject: [PATCH 09/37] more package.lock changes --- package-lock.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package-lock.json b/package-lock.json index a2875d6a3d9..d45601a033c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32078,6 +32078,7 @@ } }, "packages/backend-seed": { + "name": "@aws-amplify/backend-seed", "version": "0.1.0", "license": "Apache-2.0", "dependencies": { From 1a3f6ce81bc951a2d40f387d18e2d255705837fe Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Wed, 18 Dec 2024 14:07:28 -0800 Subject: [PATCH 10/37] export seed secret --- packages/backend-seed/src/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/backend-seed/src/index.ts b/packages/backend-seed/src/index.ts index 0cf4c4df172..9557b04eb75 100644 --- a/packages/backend-seed/src/index.ts +++ b/packages/backend-seed/src/index.ts @@ -1 +1,3 @@ -export { GetSeedSecret } from './get_secret_seed.js'; +import { GetSeedSecret } from './get_secret_seed.js'; + +export { GetSeedSecret }; From d599a9dfc397fa7ebf3ac148069f5b7f7b0f40c5 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Wed, 18 Dec 2024 14:14:05 -0800 Subject: [PATCH 11/37] updated API --- packages/backend-seed/API.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend-seed/API.md b/packages/backend-seed/API.md index f3ee8986498..4b6d717c3d4 100644 --- a/packages/backend-seed/API.md +++ b/packages/backend-seed/API.md @@ -5,7 +5,7 @@ ```ts // @public (undocumented) -export const getSecret: (secretName: string) => Promise; +export const GetSeedSecret: (secretName: string) => Promise; // (No @packageDocumentation comment for this package) From 460423fcf4947a75bffd8c2c4cd1f4309a7f42b0 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Wed, 18 Dec 2024 14:43:40 -0800 Subject: [PATCH 12/37] added types file --- packages/backend-seed/src/types.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/backend-seed/src/types.ts diff --git a/packages/backend-seed/src/types.ts b/packages/backend-seed/src/types.ts new file mode 100644 index 00000000000..e69de29bb2d From 7325c6551f2bc597ee26912612cf59110cb966b2 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Wed, 18 Dec 2024 14:59:35 -0800 Subject: [PATCH 13/37] removed comments --- packages/backend-seed/src/get_secret_seed.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/backend-seed/src/get_secret_seed.ts b/packages/backend-seed/src/get_secret_seed.ts index 82fa44d4367..795fdbbcfd6 100644 --- a/packages/backend-seed/src/get_secret_seed.ts +++ b/packages/backend-seed/src/get_secret_seed.ts @@ -3,13 +3,11 @@ import { LocalNamespaceResolver } from './namespace_resolver.js'; import { SandboxBackendIdResolver } from './sandbox_id_resolver.js'; import { getSecretClientWithAmplifyErrorHandling } from '@aws-amplify/backend-secret'; -//ultimately want the API to look something like this: getSecret(secretName) //eslint-disable-next-line jsdoc/require-description /** * */ export const GetSeedSecret = async (secretName: string): Promise => { - //need to get access to the BackendIdentifier const backendId = await new SandboxBackendIdResolver( new LocalNamespaceResolver(new PackageJsonReader()) ).resolve(); From 9ba08945942812dbe1073692d0a443de17b8b3e8 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Wed, 18 Dec 2024 15:51:03 -0800 Subject: [PATCH 14/37] sandbox seed command --- packages/backend-seed/src/get_secret_seed.ts | 13 ++++--- .../sandbox-seed/sandbox_seed_command.ts | 39 +++++++++++++++++++ 2 files changed, 46 insertions(+), 6 deletions(-) create mode 100644 packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts diff --git a/packages/backend-seed/src/get_secret_seed.ts b/packages/backend-seed/src/get_secret_seed.ts index 795fdbbcfd6..8e25ca0a466 100644 --- a/packages/backend-seed/src/get_secret_seed.ts +++ b/packages/backend-seed/src/get_secret_seed.ts @@ -1,6 +1,3 @@ -import { PackageJsonReader } from '@aws-amplify/platform-core'; -import { LocalNamespaceResolver } from './namespace_resolver.js'; -import { SandboxBackendIdResolver } from './sandbox_id_resolver.js'; import { getSecretClientWithAmplifyErrorHandling } from '@aws-amplify/backend-secret'; //eslint-disable-next-line jsdoc/require-description @@ -8,9 +5,13 @@ import { getSecretClientWithAmplifyErrorHandling } from '@aws-amplify/backend-se * */ export const GetSeedSecret = async (secretName: string): Promise => { - const backendId = await new SandboxBackendIdResolver( - new LocalNamespaceResolver(new PackageJsonReader()) - ).resolve(); + const serializedBackendId = process.env.SANDBOX_IDENTIFIER; + if (!serializedBackendId) { + throw new Error( + 'SANDBOX_IDENTIFIER is undefined. Have you run ampx sandbox seed yet?' + ); + } + const backendId = JSON.parse(process.env.SANDBOX_IDENTIFIER!); const secretClient = getSecretClientWithAmplifyErrorHandling(); const secret = await secretClient.getSecret(backendId, { name: secretName }); return secret.value; diff --git a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts new file mode 100644 index 00000000000..66bac504aff --- /dev/null +++ b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts @@ -0,0 +1,39 @@ +import { CommandModule } from 'yargs'; +import { SandboxSingletonFactory } from '@aws-amplify/sandbox'; +import { SandboxBackendIdResolver } from '../sandbox_id_resolver.js'; +import { LocalNamespaceResolver } from '../../../backend-identifier/local_namespace_resolver.js'; +import { PackageJsonReader } from '@aws-amplify/platform-core'; + +/** + * + */ +export class SandboxSeedCommand implements CommandModule { + /** + * @inheritDoc + */ + readonly command: string; + + /** + * @inheritDoc + */ + readonly describe: string; + + /** + * Deletes sandbox environment. + */ + constructor(private readonly sandboxFactory: SandboxSingletonFactory) { + this.command = 'seed'; + this.describe = 'Seeds sandbox environment'; + } + + /** + * @inheritDoc + */ + handler = async (): Promise => { + //this is where the resolver stuff should go + const sandboxID = await new SandboxBackendIdResolver( + new LocalNamespaceResolver(new PackageJsonReader()) + ).resolve(); + process.env.SANDBOX_IDENTIFIER = JSON.stringify(sandboxID); + }; +} From e2bf43d8bae6ddf13f8fb32f551b260d61bb3f98 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Thu, 19 Dec 2024 09:29:31 -0800 Subject: [PATCH 15/37] signal that seed command is running --- .../src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts index 66bac504aff..e4e90457774 100644 --- a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts +++ b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts @@ -35,5 +35,7 @@ export class SandboxSeedCommand implements CommandModule { new LocalNamespaceResolver(new PackageJsonReader()) ).resolve(); process.env.SANDBOX_IDENTIFIER = JSON.stringify(sandboxID); + //eslint-disable-next-line no-console + console.log('Seeding is happening...'); }; } From 6f347d6daf48707b71a300a7b193433a3014a8f0 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Thu, 19 Dec 2024 09:44:26 -0800 Subject: [PATCH 16/37] add seed command to sandbox --- .../commands/sandbox/sandbox-seed/sandbox_seed_command.ts | 2 +- .../cli/src/commands/sandbox/sandbox_command_factory.ts | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts index e4e90457774..0cf4b1bbbb6 100644 --- a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts +++ b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts @@ -19,7 +19,7 @@ export class SandboxSeedCommand implements CommandModule { readonly describe: string; /** - * Deletes sandbox environment. + * Seeds sandbox environment. */ constructor(private readonly sandboxFactory: SandboxSingletonFactory) { this.command = 'seed'; diff --git a/packages/cli/src/commands/sandbox/sandbox_command_factory.ts b/packages/cli/src/commands/sandbox/sandbox_command_factory.ts index ef5454a9319..2bbc1cb7dd3 100644 --- a/packages/cli/src/commands/sandbox/sandbox_command_factory.ts +++ b/packages/cli/src/commands/sandbox/sandbox_command_factory.ts @@ -10,6 +10,7 @@ import { SandboxBackendIdResolver } from './sandbox_id_resolver.js'; import { ClientConfigGeneratorAdapter } from '../../client-config/client_config_generator_adapter.js'; import { LocalNamespaceResolver } from '../../backend-identifier/local_namespace_resolver.js'; import { createSandboxSecretCommand } from './sandbox-secret/sandbox_secret_command_factory.js'; +import { SandboxSeedCommand } from './sandbox-seed/sandbox_seed_command.js'; import { PackageJsonReader, UsageDataEmitterFactory, @@ -63,7 +64,11 @@ export const createSandboxCommand = (): CommandModule< const commandMiddleWare = new CommandMiddleware(printer); return new SandboxCommand( sandboxFactory, - [new SandboxDeleteCommand(sandboxFactory), createSandboxSecretCommand()], + [ + new SandboxDeleteCommand(sandboxFactory), + createSandboxSecretCommand(), + new SandboxSeedCommand(sandboxFactory), + ], clientConfigGeneratorAdapter, commandMiddleWare, eventHandlerFactory.getSandboxEventHandlers From 20284b16de99be6f57b913f27a44de7ae8182518 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Thu, 19 Dec 2024 09:51:45 -0800 Subject: [PATCH 17/37] update seed console message --- .../src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts index 0cf4b1bbbb6..ef0e196bb08 100644 --- a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts +++ b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts @@ -36,6 +36,6 @@ export class SandboxSeedCommand implements CommandModule { ).resolve(); process.env.SANDBOX_IDENTIFIER = JSON.stringify(sandboxID); //eslint-disable-next-line no-console - console.log('Seeding is happening...'); + console.log(`Seeding is happening...\n${process.env.SANDBOX_IDENTIFIER}`); }; } From 964ed6eca0fda83f4f4ddc2ce002c538e649fee8 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Thu, 19 Dec 2024 09:58:37 -0800 Subject: [PATCH 18/37] explict undefined check --- packages/backend-seed/src/get_secret_seed.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend-seed/src/get_secret_seed.ts b/packages/backend-seed/src/get_secret_seed.ts index 8e25ca0a466..c5aa0375c7d 100644 --- a/packages/backend-seed/src/get_secret_seed.ts +++ b/packages/backend-seed/src/get_secret_seed.ts @@ -6,7 +6,7 @@ import { getSecretClientWithAmplifyErrorHandling } from '@aws-amplify/backend-se */ export const GetSeedSecret = async (secretName: string): Promise => { const serializedBackendId = process.env.SANDBOX_IDENTIFIER; - if (!serializedBackendId) { + if (serializedBackendId === undefined) { throw new Error( 'SANDBOX_IDENTIFIER is undefined. Have you run ampx sandbox seed yet?' ); From c38fb30f5f7a1c7b54dbf3d99be6c79e0803c967 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Thu, 19 Dec 2024 10:06:33 -0800 Subject: [PATCH 19/37] adjustments --- packages/backend-seed/src/get_secret_seed.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/backend-seed/src/get_secret_seed.ts b/packages/backend-seed/src/get_secret_seed.ts index c5aa0375c7d..9f6c50ca8c4 100644 --- a/packages/backend-seed/src/get_secret_seed.ts +++ b/packages/backend-seed/src/get_secret_seed.ts @@ -6,12 +6,12 @@ import { getSecretClientWithAmplifyErrorHandling } from '@aws-amplify/backend-se */ export const GetSeedSecret = async (secretName: string): Promise => { const serializedBackendId = process.env.SANDBOX_IDENTIFIER; - if (serializedBackendId === undefined) { + if (!serializedBackendId) { throw new Error( 'SANDBOX_IDENTIFIER is undefined. Have you run ampx sandbox seed yet?' ); } - const backendId = JSON.parse(process.env.SANDBOX_IDENTIFIER!); + const backendId = JSON.parse(serializedBackendId); const secretClient = getSecretClientWithAmplifyErrorHandling(); const secret = await secretClient.getSecret(backendId, { name: secretName }); return secret.value; From 7930f5c21e77a52e10b707d757ec7369bc42c7fd Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Thu, 19 Dec 2024 10:20:33 -0800 Subject: [PATCH 20/37] testing --- packages/backend-seed/src/get_secret_seed.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/backend-seed/src/get_secret_seed.ts b/packages/backend-seed/src/get_secret_seed.ts index 9f6c50ca8c4..4a0f81447a9 100644 --- a/packages/backend-seed/src/get_secret_seed.ts +++ b/packages/backend-seed/src/get_secret_seed.ts @@ -6,6 +6,8 @@ import { getSecretClientWithAmplifyErrorHandling } from '@aws-amplify/backend-se */ export const GetSeedSecret = async (secretName: string): Promise => { const serializedBackendId = process.env.SANDBOX_IDENTIFIER; + //eslint-disable-next-line no-console + console.log(serializedBackendId); if (!serializedBackendId) { throw new Error( 'SANDBOX_IDENTIFIER is undefined. Have you run ampx sandbox seed yet?' From 8f8c9a5a8173960ab93bf6c639ac965ff722e6d4 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Thu, 19 Dec 2024 10:40:46 -0800 Subject: [PATCH 21/37] testing --- packages/backend-seed/src/get_secret_seed.ts | 13 ++++++++----- .../sandbox/sandbox-seed/sandbox_seed_command.ts | 4 ++-- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/backend-seed/src/get_secret_seed.ts b/packages/backend-seed/src/get_secret_seed.ts index 4a0f81447a9..8ad71db8429 100644 --- a/packages/backend-seed/src/get_secret_seed.ts +++ b/packages/backend-seed/src/get_secret_seed.ts @@ -5,16 +5,19 @@ import { getSecretClientWithAmplifyErrorHandling } from '@aws-amplify/backend-se * */ export const GetSeedSecret = async (secretName: string): Promise => { - const serializedBackendId = process.env.SANDBOX_IDENTIFIER; + const envObject: string = JSON.parse( + process.env.AMPLIFY_SSM_ENV_CONFIG ?? '{}' + ); + //eslint-disable-next-line no-console - console.log(serializedBackendId); - if (!serializedBackendId) { + console.log(`Sandbox ID: ${envObject}`); + if (!envObject) { throw new Error( 'SANDBOX_IDENTIFIER is undefined. Have you run ampx sandbox seed yet?' ); } - const backendId = JSON.parse(serializedBackendId); + const secretClient = getSecretClientWithAmplifyErrorHandling(); - const secret = await secretClient.getSecret(backendId, { name: secretName }); + const secret = await secretClient.getSecret(envObject, { name: secretName }); return secret.value; }; diff --git a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts index ef0e196bb08..5e2442a4b24 100644 --- a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts +++ b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts @@ -34,8 +34,8 @@ export class SandboxSeedCommand implements CommandModule { const sandboxID = await new SandboxBackendIdResolver( new LocalNamespaceResolver(new PackageJsonReader()) ).resolve(); - process.env.SANDBOX_IDENTIFIER = JSON.stringify(sandboxID); + process.env.AMPLIFY_SSM_ENV_CONFIG = JSON.stringify(sandboxID); //eslint-disable-next-line no-console - console.log(`Seeding is happening...\n${process.env.SANDBOX_IDENTIFIER}`); + console.log(`Seeding is happening...`); }; } From 2e9d02bee9b8e84d0225f13afe6bf769b2492a45 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Thu, 19 Dec 2024 10:49:54 -0800 Subject: [PATCH 22/37] adjusting env vars --- packages/backend-seed/src/get_secret_seed.ts | 11 ++++++----- .../sandbox/sandbox-seed/sandbox_seed_command.ts | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/backend-seed/src/get_secret_seed.ts b/packages/backend-seed/src/get_secret_seed.ts index 8ad71db8429..04fc891ff9d 100644 --- a/packages/backend-seed/src/get_secret_seed.ts +++ b/packages/backend-seed/src/get_secret_seed.ts @@ -1,23 +1,24 @@ import { getSecretClientWithAmplifyErrorHandling } from '@aws-amplify/backend-secret'; +import { BackendIdentifier } from '@aws-amplify/plugin-types'; //eslint-disable-next-line jsdoc/require-description /** * */ export const GetSeedSecret = async (secretName: string): Promise => { - const envObject: string = JSON.parse( - process.env.AMPLIFY_SSM_ENV_CONFIG ?? '{}' + const backendId: BackendIdentifier = JSON.parse( + process.env.SANDBOX_IDENTIFIER ?? '{}' ); //eslint-disable-next-line no-console - console.log(`Sandbox ID: ${envObject}`); - if (!envObject) { + console.log(`Sandbox ID: ${backendId.name}`); + if (!backendId) { throw new Error( 'SANDBOX_IDENTIFIER is undefined. Have you run ampx sandbox seed yet?' ); } const secretClient = getSecretClientWithAmplifyErrorHandling(); - const secret = await secretClient.getSecret(envObject, { name: secretName }); + const secret = await secretClient.getSecret(backendId, { name: secretName }); return secret.value; }; diff --git a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts index 5e2442a4b24..3176c9d7d36 100644 --- a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts +++ b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts @@ -34,7 +34,7 @@ export class SandboxSeedCommand implements CommandModule { const sandboxID = await new SandboxBackendIdResolver( new LocalNamespaceResolver(new PackageJsonReader()) ).resolve(); - process.env.AMPLIFY_SSM_ENV_CONFIG = JSON.stringify(sandboxID); + process.env.SANDBOX_IDENTIFIER = JSON.stringify(sandboxID); //eslint-disable-next-line no-console console.log(`Seeding is happening...`); }; From 146a91ea5ae7e73283779a8d4d09f128eadafcba Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Thu, 19 Dec 2024 11:23:49 -0800 Subject: [PATCH 23/37] testing env vars stuff --- packages/backend-seed/src/get_secret_seed.ts | 12 ++++++------ packages/backend/src/environment_variables.ts | 1 + .../sandbox/sandbox-seed/sandbox_seed_command.ts | 6 ++++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/backend-seed/src/get_secret_seed.ts b/packages/backend-seed/src/get_secret_seed.ts index 04fc891ff9d..37207c7b909 100644 --- a/packages/backend-seed/src/get_secret_seed.ts +++ b/packages/backend-seed/src/get_secret_seed.ts @@ -6,17 +6,17 @@ import { BackendIdentifier } from '@aws-amplify/plugin-types'; * */ export const GetSeedSecret = async (secretName: string): Promise => { + if (!process.env.AMPLIFY_SANDBOX_IDENTIFIER) { + throw new Error( + 'SANDBOX_IDENTIFIER is undefined. Have you run ampx sandbox seed yet?' + ); + } const backendId: BackendIdentifier = JSON.parse( - process.env.SANDBOX_IDENTIFIER ?? '{}' + process.env.AMPLIFY_SANDBOX_IDENTIFIER ); //eslint-disable-next-line no-console console.log(`Sandbox ID: ${backendId.name}`); - if (!backendId) { - throw new Error( - 'SANDBOX_IDENTIFIER is undefined. Have you run ampx sandbox seed yet?' - ); - } const secretClient = getSecretClientWithAmplifyErrorHandling(); const secret = await secretClient.getSecret(backendId, { name: secretName }); diff --git a/packages/backend/src/environment_variables.ts b/packages/backend/src/environment_variables.ts index 86220738145..33209d6ffff 100644 --- a/packages/backend/src/environment_variables.ts +++ b/packages/backend/src/environment_variables.ts @@ -1,3 +1,4 @@ export enum BackendEnvironmentVariables { AWS_ENDPOINT_URL_AMPLIFY = 'AWS_ENDPOINT_URL_AMPLIFY', + AMPLIFY_SANDBOX_IDENTIFIER = 'AMPLIFY_SANDBOX_IDENTIFIER', } diff --git a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts index 3176c9d7d36..844b931a105 100644 --- a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts +++ b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts @@ -30,11 +30,13 @@ export class SandboxSeedCommand implements CommandModule { * @inheritDoc */ handler = async (): Promise => { - //this is where the resolver stuff should go const sandboxID = await new SandboxBackendIdResolver( new LocalNamespaceResolver(new PackageJsonReader()) ).resolve(); - process.env.SANDBOX_IDENTIFIER = JSON.stringify(sandboxID); + + process.env.AMPLIFY_SANDBOX_IDENTIFIER = JSON.stringify(sandboxID); + + //process.env.SANDBOX_IDENTIFIER = JSON.stringify(sandboxID); //eslint-disable-next-line no-console console.log(`Seeding is happening...`); }; From 6268d541c46183314338d60d6cda9fe30b11f495 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Thu, 19 Dec 2024 14:20:24 -0800 Subject: [PATCH 24/37] trying to use generators --- .../src/lambda-shims/resolve_ssm_params.ts | 18 +++-- packages/backend-seed/package.json | 5 +- packages/backend-seed/src/index.ts | 3 +- packages/backend-seed/src/seed_generator.ts | 71 +++++++++++++++++++ packages/backend/src/environment_variables.ts | 1 - .../sandbox-seed/sandbox_seed_command.ts | 10 ++- 6 files changed, 96 insertions(+), 12 deletions(-) create mode 100644 packages/backend-seed/src/seed_generator.ts diff --git a/packages/backend-function/src/lambda-shims/resolve_ssm_params.ts b/packages/backend-function/src/lambda-shims/resolve_ssm_params.ts index ccb2a9dd0f8..cb4b99c98cf 100644 --- a/packages/backend-function/src/lambda-shims/resolve_ssm_params.ts +++ b/packages/backend-function/src/lambda-shims/resolve_ssm_params.ts @@ -12,37 +12,43 @@ import type { SsmEnvVars } from '../function_env_translator.js'; export const internalAmplifyFunctionResolveSsmParams = async (client?: SSM) => { const envPathObject: SsmEnvVars = JSON.parse( process.env.AMPLIFY_SSM_ENV_CONFIG ?? '{}' - ); - const paths = Object.keys(envPathObject); + ); //these are the paths of the objects we are looking to reaolve + const paths = Object.keys(envPathObject); //alters the DS of the paths so they are easier to match later on if (paths.length === 0) { - return; + return; //if there are no paths, we don't do anything } let actualSsmClient: SSM; if (client) { + //if a client was passed to us, we assume the client actualSsmClient = client; } else { + //otherwise to make a new client const ssmSdk = await import('@aws-sdk/client-ssm'); actualSsmClient = new ssmSdk.SSM(); } - + //up to here, I can probably just take and reuse for my thingy + //here, onwards is going to be different const resolveSecrets = async (paths: string[]) => { + //we take in the paths as an array of strings const response = await actualSsmClient.getParameters({ Names: paths, WithDecryption: true, - }); + }); //get the paths the client knows about if (response.Parameters && response.Parameters.length > 0) { for (const parameter of response.Parameters) { + //go through all the responses if (parameter.Name) { + //if we have a name, try to find it in the envPathObjects const envKey = Object.keys(envPathObject).find( (key) => envPathObject[key].sharedPath === parameter.Name ); const envName = envKey ? envPathObject[envKey].name : envPathObject[parameter.Name]?.name; - process.env[envName] = parameter.Value; + process.env[envName] = parameter.Value; //set env var based on the object name we get } } } diff --git a/packages/backend-seed/package.json b/packages/backend-seed/package.json index 348d79f070f..2afcb56df12 100644 --- a/packages/backend-seed/package.json +++ b/packages/backend-seed/package.json @@ -20,6 +20,9 @@ "license": "Apache-2.0", "dependencies": { "@aws-amplify/backend-secret": "^1.1.5", - "@aws-amplify/platform-core": "^1.4.0" + "@aws-amplify/platform-core": "^1.4.0", + "aws-cdk-lib": "^2.173.2", + "constructs": "^10.4.2", + "lodash.snakecase": "^4.1.1" } } diff --git a/packages/backend-seed/src/index.ts b/packages/backend-seed/src/index.ts index 9557b04eb75..1a1baee202c 100644 --- a/packages/backend-seed/src/index.ts +++ b/packages/backend-seed/src/index.ts @@ -1,3 +1,4 @@ import { GetSeedSecret } from './get_secret_seed.js'; +import { BackendSeedIdScopedSsmEnvironmentEntriesGenerator } from './seed_generator.js'; -export { GetSeedSecret }; +export { GetSeedSecret, BackendSeedIdScopedSsmEnvironmentEntriesGenerator }; diff --git a/packages/backend-seed/src/seed_generator.ts b/packages/backend-seed/src/seed_generator.ts new file mode 100644 index 00000000000..8f7c5390a84 --- /dev/null +++ b/packages/backend-seed/src/seed_generator.ts @@ -0,0 +1,71 @@ +import { ParameterPathConversions } from '@aws-amplify/platform-core'; +import { + BackendIdentifier, + SsmEnvironmentEntriesGenerator, +} from '@aws-amplify/plugin-types'; +import { StringParameter } from 'aws-cdk-lib/aws-ssm'; +import { Construct } from 'constructs'; +import snakeCase from 'lodash.snakecase'; + +//stole this from /backend/src/engines +/** + * Generates SsmEnvironmentEntry[] with SSM parameters that are scoped to a specific backend identifier + */ +export class BackendSeedIdScopedSsmEnvironmentEntriesGenerator + implements SsmEnvironmentEntriesGenerator +{ + /** + * Initialize with the backend identifier + */ + constructor( + private readonly scope: Construct, + private readonly backendId: BackendIdentifier + ) {} + + /** + * Creates SSM parameters for CDK tokens in the scope provided to the constructor. + * This allows values in scopeContext to be fetched from SSM at runtime without a deploy-time dependency between resources. + * For this to work, the CDK tokens in scopeContext _must_ reside in the scope from the constructor. + * This method can be called multiple times but an attempt to insert the same contextKey twice will result in an error. + * + * The returned SsmEnvironmentEntries must _not_ contain CDK tokens to SSM parameters. + * Instead the SSM parameters are formatted with a naming convention and the literal string value of the parameter path is returned. + * @example + * Consider the following scopeContext input: + * { + * STORAGE_BUCKET_NAME: + * } + * + * This function will create an SSM parameter with a value that will resolve to the S3 bucket name at deploy time + * The SSM parameter will be placed in the provided CDK scope which _must_ be the same as the scope that the CDK tokens in scopeContext come from + * The return value will be + * [ + * { + * name: STORAGE_BUCKET_NAME + * path: /amplify/resource_reference///STORAGE_BUCKET_NAME + * } + * ] + * + * The value of this parameter can then be fetched anywhere else without an explicit deploy-time dependency on the storage bucket name + * @param scopeContext Key/value pairs of values from the scope that should be stored in SSM and retrievable using the key + */ + public generateSsmEnvironmentEntries = ( + scopeContext: Record + ) => + Object.entries(scopeContext).map(([contextKey, contextValue]) => { + const sanitizedContextKey = snakeCase(contextKey).toUpperCase(); + const parameterPath = + ParameterPathConversions.toResourceReferenceFullPath( + this.backendId, + sanitizedContextKey + ); + new StringParameter(this.scope, `${sanitizedContextKey}Parameter`, { + parameterName: parameterPath, + stringValue: contextValue, + }); + return { + name: sanitizedContextKey, + path: parameterPath, + }; + }); +} diff --git a/packages/backend/src/environment_variables.ts b/packages/backend/src/environment_variables.ts index 33209d6ffff..86220738145 100644 --- a/packages/backend/src/environment_variables.ts +++ b/packages/backend/src/environment_variables.ts @@ -1,4 +1,3 @@ export enum BackendEnvironmentVariables { AWS_ENDPOINT_URL_AMPLIFY = 'AWS_ENDPOINT_URL_AMPLIFY', - AMPLIFY_SANDBOX_IDENTIFIER = 'AMPLIFY_SANDBOX_IDENTIFIER', } diff --git a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts index 844b931a105..aa67afdded6 100644 --- a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts +++ b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts @@ -3,6 +3,7 @@ import { SandboxSingletonFactory } from '@aws-amplify/sandbox'; import { SandboxBackendIdResolver } from '../sandbox_id_resolver.js'; import { LocalNamespaceResolver } from '../../../backend-identifier/local_namespace_resolver.js'; import { PackageJsonReader } from '@aws-amplify/platform-core'; +//import { BackendSeedIdScopedSsmEnvironmentEntriesGenerator } from '@aws-amplify/backend-seed'; /** * @@ -34,9 +35,12 @@ export class SandboxSeedCommand implements CommandModule { new LocalNamespaceResolver(new PackageJsonReader()) ).resolve(); - process.env.AMPLIFY_SANDBOX_IDENTIFIER = JSON.stringify(sandboxID); - - //process.env.SANDBOX_IDENTIFIER = JSON.stringify(sandboxID); + /*const ssmEnvEntriesGenerator = new BackendSeedIdScopedSsmEnvironmentEntriesGenerator(); + ssmEnvEntriesGenerator.generateSsmEnvironmentEntries({ + ['SANDBOX_IDENTIFIER']: JSON.stringify(sandboxID), + }) + */ + process.env.SANDBOX_IDENTIFIER = JSON.stringify(sandboxID); //eslint-disable-next-line no-console console.log(`Seeding is happening...`); }; From 12d216278c3a0434adfd3b3a5cf3c5ef91098e2d Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Thu, 19 Dec 2024 15:29:47 -0800 Subject: [PATCH 25/37] stole some seed command stuff from the first POC --- packages/backend-seed/src/index.ts | 3 +- packages/backend-seed/src/seed_generator.ts | 71 --------------------- 2 files changed, 1 insertion(+), 73 deletions(-) diff --git a/packages/backend-seed/src/index.ts b/packages/backend-seed/src/index.ts index 1a1baee202c..9557b04eb75 100644 --- a/packages/backend-seed/src/index.ts +++ b/packages/backend-seed/src/index.ts @@ -1,4 +1,3 @@ import { GetSeedSecret } from './get_secret_seed.js'; -import { BackendSeedIdScopedSsmEnvironmentEntriesGenerator } from './seed_generator.js'; -export { GetSeedSecret, BackendSeedIdScopedSsmEnvironmentEntriesGenerator }; +export { GetSeedSecret }; diff --git a/packages/backend-seed/src/seed_generator.ts b/packages/backend-seed/src/seed_generator.ts index 8f7c5390a84..e69de29bb2d 100644 --- a/packages/backend-seed/src/seed_generator.ts +++ b/packages/backend-seed/src/seed_generator.ts @@ -1,71 +0,0 @@ -import { ParameterPathConversions } from '@aws-amplify/platform-core'; -import { - BackendIdentifier, - SsmEnvironmentEntriesGenerator, -} from '@aws-amplify/plugin-types'; -import { StringParameter } from 'aws-cdk-lib/aws-ssm'; -import { Construct } from 'constructs'; -import snakeCase from 'lodash.snakecase'; - -//stole this from /backend/src/engines -/** - * Generates SsmEnvironmentEntry[] with SSM parameters that are scoped to a specific backend identifier - */ -export class BackendSeedIdScopedSsmEnvironmentEntriesGenerator - implements SsmEnvironmentEntriesGenerator -{ - /** - * Initialize with the backend identifier - */ - constructor( - private readonly scope: Construct, - private readonly backendId: BackendIdentifier - ) {} - - /** - * Creates SSM parameters for CDK tokens in the scope provided to the constructor. - * This allows values in scopeContext to be fetched from SSM at runtime without a deploy-time dependency between resources. - * For this to work, the CDK tokens in scopeContext _must_ reside in the scope from the constructor. - * This method can be called multiple times but an attempt to insert the same contextKey twice will result in an error. - * - * The returned SsmEnvironmentEntries must _not_ contain CDK tokens to SSM parameters. - * Instead the SSM parameters are formatted with a naming convention and the literal string value of the parameter path is returned. - * @example - * Consider the following scopeContext input: - * { - * STORAGE_BUCKET_NAME: - * } - * - * This function will create an SSM parameter with a value that will resolve to the S3 bucket name at deploy time - * The SSM parameter will be placed in the provided CDK scope which _must_ be the same as the scope that the CDK tokens in scopeContext come from - * The return value will be - * [ - * { - * name: STORAGE_BUCKET_NAME - * path: /amplify/resource_reference///STORAGE_BUCKET_NAME - * } - * ] - * - * The value of this parameter can then be fetched anywhere else without an explicit deploy-time dependency on the storage bucket name - * @param scopeContext Key/value pairs of values from the scope that should be stored in SSM and retrievable using the key - */ - public generateSsmEnvironmentEntries = ( - scopeContext: Record - ) => - Object.entries(scopeContext).map(([contextKey, contextValue]) => { - const sanitizedContextKey = snakeCase(contextKey).toUpperCase(); - const parameterPath = - ParameterPathConversions.toResourceReferenceFullPath( - this.backendId, - sanitizedContextKey - ); - new StringParameter(this.scope, `${sanitizedContextKey}Parameter`, { - parameterName: parameterPath, - stringValue: contextValue, - }); - return { - name: sanitizedContextKey, - path: parameterPath, - }; - }); -} From cb8bf83f4755e96ec5c4e6e2aa862f0c28beeb1c Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Thu, 19 Dec 2024 15:31:21 -0800 Subject: [PATCH 26/37] stole some seed command stuff from the first POC --- .../sandbox-seed/sandbox_seed_command.ts | 42 ++++++++++++++----- .../sandbox/sandbox_command_factory.ts | 2 +- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts index aa67afdded6..4c628e588f3 100644 --- a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts +++ b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts @@ -1,8 +1,10 @@ -import { CommandModule } from 'yargs'; -import { SandboxSingletonFactory } from '@aws-amplify/sandbox'; +import { Argv, CommandModule } from 'yargs'; +import path from 'path'; +import { existsSync } from 'fs'; +import { execa } from 'execa'; import { SandboxBackendIdResolver } from '../sandbox_id_resolver.js'; -import { LocalNamespaceResolver } from '../../../backend-identifier/local_namespace_resolver.js'; import { PackageJsonReader } from '@aws-amplify/platform-core'; +import { LocalNamespaceResolver } from '../../../backend-identifier/local_namespace_resolver.js'; //import { BackendSeedIdScopedSsmEnvironmentEntriesGenerator } from '@aws-amplify/backend-seed'; /** @@ -22,7 +24,7 @@ export class SandboxSeedCommand implements CommandModule { /** * Seeds sandbox environment. */ - constructor(private readonly sandboxFactory: SandboxSingletonFactory) { + constructor() { this.command = 'seed'; this.describe = 'Seeds sandbox environment'; } @@ -35,13 +37,33 @@ export class SandboxSeedCommand implements CommandModule { new LocalNamespaceResolver(new PackageJsonReader()) ).resolve(); - /*const ssmEnvEntriesGenerator = new BackendSeedIdScopedSsmEnvironmentEntriesGenerator(); - ssmEnvEntriesGenerator.generateSsmEnvironmentEntries({ - ['SANDBOX_IDENTIFIER']: JSON.stringify(sandboxID), - }) - */ - process.env.SANDBOX_IDENTIFIER = JSON.stringify(sandboxID); + const seedPath = path.join('amplify', 'seed.ts'); + await execa('tsx', [seedPath], { + cwd: process.cwd(), + stdio: 'inherit', + env: { + AMPLIFY_SANDBOX_IDENTIFIER: JSON.stringify(sandboxID), + }, + }); + //eslint-disable-next-line no-console console.log(`Seeding is happening...`); }; + + /** + * @inheritDoc + */ + builder = (yargs: Argv) => { + return yargs + .option('local', { + type: 'boolean', + }) + .check(() => { + const seedPath = path.join(process.cwd(), 'amplify', 'seed.ts'); + if (!existsSync(seedPath)) { + throw new Error(`${seedPath} must exist`); + } + return true; + }); + }; } diff --git a/packages/cli/src/commands/sandbox/sandbox_command_factory.ts b/packages/cli/src/commands/sandbox/sandbox_command_factory.ts index 2bbc1cb7dd3..333338d8f94 100644 --- a/packages/cli/src/commands/sandbox/sandbox_command_factory.ts +++ b/packages/cli/src/commands/sandbox/sandbox_command_factory.ts @@ -67,7 +67,7 @@ export const createSandboxCommand = (): CommandModule< [ new SandboxDeleteCommand(sandboxFactory), createSandboxSecretCommand(), - new SandboxSeedCommand(sandboxFactory), + new SandboxSeedCommand(), ], clientConfigGeneratorAdapter, commandMiddleWare, From 0b715e95ff9e541c068f5a76135ccefc1c2bce02 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Thu, 19 Dec 2024 15:34:20 -0800 Subject: [PATCH 27/37] removed useless import --- .../src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts index 4c628e588f3..6415fb0615b 100644 --- a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts +++ b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts @@ -5,7 +5,6 @@ import { execa } from 'execa'; import { SandboxBackendIdResolver } from '../sandbox_id_resolver.js'; import { PackageJsonReader } from '@aws-amplify/platform-core'; import { LocalNamespaceResolver } from '../../../backend-identifier/local_namespace_resolver.js'; -//import { BackendSeedIdScopedSsmEnvironmentEntriesGenerator } from '@aws-amplify/backend-seed'; /** * From dcc0bed5938d728aa6f6bbbd96a860b24735f944 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Thu, 19 Dec 2024 15:38:33 -0800 Subject: [PATCH 28/37] removed console.logs - it works :D --- packages/backend-seed/src/get_secret_seed.ts | 3 --- .../src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts | 3 --- 2 files changed, 6 deletions(-) diff --git a/packages/backend-seed/src/get_secret_seed.ts b/packages/backend-seed/src/get_secret_seed.ts index 37207c7b909..02b8cc022ec 100644 --- a/packages/backend-seed/src/get_secret_seed.ts +++ b/packages/backend-seed/src/get_secret_seed.ts @@ -15,9 +15,6 @@ export const GetSeedSecret = async (secretName: string): Promise => { process.env.AMPLIFY_SANDBOX_IDENTIFIER ); - //eslint-disable-next-line no-console - console.log(`Sandbox ID: ${backendId.name}`); - const secretClient = getSecretClientWithAmplifyErrorHandling(); const secret = await secretClient.getSecret(backendId, { name: secretName }); return secret.value; diff --git a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts index 6415fb0615b..9dd4c0aa5b4 100644 --- a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts +++ b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts @@ -44,9 +44,6 @@ export class SandboxSeedCommand implements CommandModule { AMPLIFY_SANDBOX_IDENTIFIER: JSON.stringify(sandboxID), }, }); - - //eslint-disable-next-line no-console - console.log(`Seeding is happening...`); }; /** From fb48d382c6b205c36318b5d5fa7e27cf486da42b Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Thu, 19 Dec 2024 15:40:05 -0800 Subject: [PATCH 29/37] file clean up --- packages/backend-seed/src/namespace_resolver.ts | 1 + packages/backend-seed/src/sandbox_id_resolver.ts | 1 + packages/backend-seed/src/seed_generator.ts | 0 3 files changed, 2 insertions(+) delete mode 100644 packages/backend-seed/src/seed_generator.ts diff --git a/packages/backend-seed/src/namespace_resolver.ts b/packages/backend-seed/src/namespace_resolver.ts index a9d8a52c1b7..23bb5019a0e 100644 --- a/packages/backend-seed/src/namespace_resolver.ts +++ b/packages/backend-seed/src/namespace_resolver.ts @@ -4,6 +4,7 @@ import { } from '@aws-amplify/platform-core'; import { EOL } from 'os'; +//not using this anymore //stole this from ../packages/cli/src/backend-identifier/local_namespace_resolver.ts for the POC export type NamespaceResolver = { diff --git a/packages/backend-seed/src/sandbox_id_resolver.ts b/packages/backend-seed/src/sandbox_id_resolver.ts index 5117dab8d08..71f97a62f6c 100644 --- a/packages/backend-seed/src/sandbox_id_resolver.ts +++ b/packages/backend-seed/src/sandbox_id_resolver.ts @@ -2,6 +2,7 @@ import { userInfo as _userInfo } from 'os'; import { NamespaceResolver } from './namespace_resolver.js'; import { BackendIdentifier } from '@aws-amplify/plugin-types'; +//not using this anymore //stole this from ../packages/cli/src/commands/sandbox/sandbox_id_resolver.ts for the POC /** diff --git a/packages/backend-seed/src/seed_generator.ts b/packages/backend-seed/src/seed_generator.ts deleted file mode 100644 index e69de29bb2d..00000000000 From d4a5658f543b3fbe2910e3a10d98c8381c98dfb5 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Fri, 20 Dec 2024 08:44:28 -0800 Subject: [PATCH 30/37] move seed script out of Amplify folder --- .../src/lambda-shims/resolve_ssm_params.ts | 18 ++++++------------ .../sandbox-seed/sandbox_seed_command.ts | 4 ++-- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/packages/backend-function/src/lambda-shims/resolve_ssm_params.ts b/packages/backend-function/src/lambda-shims/resolve_ssm_params.ts index cb4b99c98cf..ccb2a9dd0f8 100644 --- a/packages/backend-function/src/lambda-shims/resolve_ssm_params.ts +++ b/packages/backend-function/src/lambda-shims/resolve_ssm_params.ts @@ -12,43 +12,37 @@ import type { SsmEnvVars } from '../function_env_translator.js'; export const internalAmplifyFunctionResolveSsmParams = async (client?: SSM) => { const envPathObject: SsmEnvVars = JSON.parse( process.env.AMPLIFY_SSM_ENV_CONFIG ?? '{}' - ); //these are the paths of the objects we are looking to reaolve - const paths = Object.keys(envPathObject); //alters the DS of the paths so they are easier to match later on + ); + const paths = Object.keys(envPathObject); if (paths.length === 0) { - return; //if there are no paths, we don't do anything + return; } let actualSsmClient: SSM; if (client) { - //if a client was passed to us, we assume the client actualSsmClient = client; } else { - //otherwise to make a new client const ssmSdk = await import('@aws-sdk/client-ssm'); actualSsmClient = new ssmSdk.SSM(); } - //up to here, I can probably just take and reuse for my thingy - //here, onwards is going to be different + const resolveSecrets = async (paths: string[]) => { - //we take in the paths as an array of strings const response = await actualSsmClient.getParameters({ Names: paths, WithDecryption: true, - }); //get the paths the client knows about + }); if (response.Parameters && response.Parameters.length > 0) { for (const parameter of response.Parameters) { - //go through all the responses if (parameter.Name) { - //if we have a name, try to find it in the envPathObjects const envKey = Object.keys(envPathObject).find( (key) => envPathObject[key].sharedPath === parameter.Name ); const envName = envKey ? envPathObject[envKey].name : envPathObject[parameter.Name]?.name; - process.env[envName] = parameter.Value; //set env var based on the object name we get + process.env[envName] = parameter.Value; } } } diff --git a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts index 9dd4c0aa5b4..b45e0997b07 100644 --- a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts +++ b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts @@ -36,7 +36,7 @@ export class SandboxSeedCommand implements CommandModule { new LocalNamespaceResolver(new PackageJsonReader()) ).resolve(); - const seedPath = path.join('amplify', 'seed.ts'); + const seedPath = path.join('seed.ts'); await execa('tsx', [seedPath], { cwd: process.cwd(), stdio: 'inherit', @@ -55,7 +55,7 @@ export class SandboxSeedCommand implements CommandModule { type: 'boolean', }) .check(() => { - const seedPath = path.join(process.cwd(), 'amplify', 'seed.ts'); + const seedPath = path.join(process.cwd(), 'seed.ts'); if (!existsSync(seedPath)) { throw new Error(`${seedPath} must exist`); } From ecc470c30b8d5332e6496e1aa8ccada61d981a07 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Fri, 20 Dec 2024 08:49:41 -0800 Subject: [PATCH 31/37] change to package-lock --- package-lock.json | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index d45601a033c..e1de1314e4c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19619,9 +19619,9 @@ } }, "node_modules/aws-cdk-lib": { - "version": "2.171.1", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.171.1.tgz", - "integrity": "sha512-BmXodHmeOWu7EZMwXFA+Mp+SnlZgIwhMxfOmqpdGa5dXF4BWOrs0cm4YgrzcJkg0XK713eXPj5IWGj8YeRIU3g==", + "version": "2.173.2", + "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.173.2.tgz", + "integrity": "sha512-cL9+z8Pl3VZGoO7BwdsrFAOeud/vSl3at7OvmhihbNprMN15XuFUx/rViAU5OI1m92NbV4NBzYSLbSeCwYLNyw==", "bundleDependencies": [ "@balena/dockerignore", "case", @@ -21298,12 +21298,10 @@ } }, "node_modules/constructs": { - "version": "10.3.2", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.3.2.tgz", - "integrity": "sha512-odjsmhoBKRWa2F/Z3edOSZCb7IgxAL5usXQMRKoINMJzcFfC1GvcbO6Dd/xMGLRv4J/tEsjSLwqLxRfJrjPsQw==", - "engines": { - "node": ">= 18.12.0" - } + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.4.2.tgz", + "integrity": "sha512-wsNxBlAott2qg8Zv87q3eYZYgheb9lchtBfjHzzLHtXbttwSrHPs1NNQbBrmbb1YZvYg2+Vh0Dor76w4mFxJkA==", + "license": "Apache-2.0" }, "node_modules/content-disposition": { "version": "0.5.4", @@ -32083,7 +32081,10 @@ "license": "Apache-2.0", "dependencies": { "@aws-amplify/backend-secret": "^1.1.5", - "@aws-amplify/platform-core": "^1.4.0" + "@aws-amplify/platform-core": "^1.4.0", + "aws-cdk-lib": "^2.173.2", + "constructs": "^10.4.2", + "lodash.snakecase": "^4.1.1" } }, "packages/backend-seed/node_modules/@aws-amplify/platform-core": { From 827e02ca23e0a5d54b75387c2852d67fd5950842 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Fri, 20 Dec 2024 11:22:01 -0800 Subject: [PATCH 32/37] adjusted comments and error message --- packages/backend-seed/package.json | 4 +--- packages/backend-seed/src/get_secret_seed.ts | 4 +--- packages/backend-seed/tsconfig.json | 3 ++- .../src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts | 2 ++ 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/backend-seed/package.json b/packages/backend-seed/package.json index 2afcb56df12..90a6feda2b9 100644 --- a/packages/backend-seed/package.json +++ b/packages/backend-seed/package.json @@ -21,8 +21,6 @@ "dependencies": { "@aws-amplify/backend-secret": "^1.1.5", "@aws-amplify/platform-core": "^1.4.0", - "aws-cdk-lib": "^2.173.2", - "constructs": "^10.4.2", - "lodash.snakecase": "^4.1.1" + "@aws-amplify/plugin-types": "^1.6.0" } } diff --git a/packages/backend-seed/src/get_secret_seed.ts b/packages/backend-seed/src/get_secret_seed.ts index 02b8cc022ec..2505f6187b1 100644 --- a/packages/backend-seed/src/get_secret_seed.ts +++ b/packages/backend-seed/src/get_secret_seed.ts @@ -7,9 +7,7 @@ import { BackendIdentifier } from '@aws-amplify/plugin-types'; */ export const GetSeedSecret = async (secretName: string): Promise => { if (!process.env.AMPLIFY_SANDBOX_IDENTIFIER) { - throw new Error( - 'SANDBOX_IDENTIFIER is undefined. Have you run ampx sandbox seed yet?' - ); + throw new Error('SANDBOX_IDENTIFIER is undefined.'); } const backendId: BackendIdentifier = JSON.parse( process.env.AMPLIFY_SANDBOX_IDENTIFIER diff --git a/packages/backend-seed/tsconfig.json b/packages/backend-seed/tsconfig.json index 5954ab563d1..c474c02476a 100644 --- a/packages/backend-seed/tsconfig.json +++ b/packages/backend-seed/tsconfig.json @@ -3,6 +3,7 @@ "compilerOptions": { "rootDir": "src", "outDir": "lib" }, "references": [ { "path": "../backend-secret" }, - { "path": "../platform-core" } + { "path": "../platform-core" }, + { "path": "../plugin-types" } ] } diff --git a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts index b45e0997b07..923847dd99e 100644 --- a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts +++ b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts @@ -36,6 +36,7 @@ export class SandboxSeedCommand implements CommandModule { new LocalNamespaceResolver(new PackageJsonReader()) ).resolve(); + //most of this comes from the initial POC for seed, changed filepath to be more inline with discussions that have happened since then const seedPath = path.join('seed.ts'); await execa('tsx', [seedPath], { cwd: process.cwd(), @@ -49,6 +50,7 @@ export class SandboxSeedCommand implements CommandModule { /** * @inheritDoc */ + //this section also comes from the initial POC for seed builder = (yargs: Argv) => { return yargs .option('local', { From a4cbf95d1657695eedd0a6661614fe8c058d82a7 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Fri, 20 Dec 2024 11:25:20 -0800 Subject: [PATCH 33/37] removed section that is no longer needed --- .../sandbox-seed/sandbox_seed_command.ts | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts index 923847dd99e..ecc3450b730 100644 --- a/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts +++ b/packages/cli/src/commands/sandbox/sandbox-seed/sandbox_seed_command.ts @@ -52,16 +52,12 @@ export class SandboxSeedCommand implements CommandModule { */ //this section also comes from the initial POC for seed builder = (yargs: Argv) => { - return yargs - .option('local', { - type: 'boolean', - }) - .check(() => { - const seedPath = path.join(process.cwd(), 'seed.ts'); - if (!existsSync(seedPath)) { - throw new Error(`${seedPath} must exist`); - } - return true; - }); + return yargs.check(() => { + const seedPath = path.join(process.cwd(), 'seed.ts'); + if (!existsSync(seedPath)) { + throw new Error(`${seedPath} must exist`); + } + return true; + }); }; } From a92defc178fe7aadb61e99f1600b42adc6deeee5 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Fri, 20 Dec 2024 11:31:06 -0800 Subject: [PATCH 34/37] update for package.json in seed package --- package-lock.json | 6 ++---- packages/backend-seed/package.json | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index e1de1314e4c..af08e8aa72a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32081,10 +32081,8 @@ "license": "Apache-2.0", "dependencies": { "@aws-amplify/backend-secret": "^1.1.5", - "@aws-amplify/platform-core": "^1.4.0", - "aws-cdk-lib": "^2.173.2", - "constructs": "^10.4.2", - "lodash.snakecase": "^4.1.1" + "@aws-amplify/platform-core": "^1.3.0", + "@aws-amplify/plugin-types": "^1.6.0" } }, "packages/backend-seed/node_modules/@aws-amplify/platform-core": { diff --git a/packages/backend-seed/package.json b/packages/backend-seed/package.json index 90a6feda2b9..ced4508f9f1 100644 --- a/packages/backend-seed/package.json +++ b/packages/backend-seed/package.json @@ -20,7 +20,7 @@ "license": "Apache-2.0", "dependencies": { "@aws-amplify/backend-secret": "^1.1.5", - "@aws-amplify/platform-core": "^1.4.0", + "@aws-amplify/platform-core": "^1.3.0", "@aws-amplify/plugin-types": "^1.6.0" } } From cbaf46900fe559164a2262f301ae3a8219443d7b Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Fri, 20 Dec 2024 11:35:22 -0800 Subject: [PATCH 35/37] added changeset --- .changeset/green-melons-jump.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .changeset/green-melons-jump.md diff --git a/.changeset/green-melons-jump.md b/.changeset/green-melons-jump.md new file mode 100644 index 00000000000..a845151cc84 --- /dev/null +++ b/.changeset/green-melons-jump.md @@ -0,0 +1,2 @@ +--- +--- From 79dfb1c39c1d61770776c4d85b5e1ee8160ca559 Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Fri, 20 Dec 2024 12:01:38 -0800 Subject: [PATCH 36/37] changed name of secert getter --- packages/backend-seed/src/get_secret_seed.ts | 2 +- packages/backend-seed/src/index.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/backend-seed/src/get_secret_seed.ts b/packages/backend-seed/src/get_secret_seed.ts index 2505f6187b1..fc462535a6c 100644 --- a/packages/backend-seed/src/get_secret_seed.ts +++ b/packages/backend-seed/src/get_secret_seed.ts @@ -5,7 +5,7 @@ import { BackendIdentifier } from '@aws-amplify/plugin-types'; /** * */ -export const GetSeedSecret = async (secretName: string): Promise => { +export const GetSecret = async (secretName: string): Promise => { if (!process.env.AMPLIFY_SANDBOX_IDENTIFIER) { throw new Error('SANDBOX_IDENTIFIER is undefined.'); } diff --git a/packages/backend-seed/src/index.ts b/packages/backend-seed/src/index.ts index 9557b04eb75..e1dc76f915a 100644 --- a/packages/backend-seed/src/index.ts +++ b/packages/backend-seed/src/index.ts @@ -1,3 +1,3 @@ -import { GetSeedSecret } from './get_secret_seed.js'; +import { GetSecret } from './get_secret_seed.js'; -export { GetSeedSecret }; +export { GetSecret }; From f8a9649848106a7d921bb15d352e8b0d9b7b6b5b Mon Sep 17 00:00:00 2001 From: Vieltojarvi Date: Fri, 20 Dec 2024 12:03:47 -0800 Subject: [PATCH 37/37] update api --- packages/backend-seed/API.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend-seed/API.md b/packages/backend-seed/API.md index 4b6d717c3d4..121684b6ad1 100644 --- a/packages/backend-seed/API.md +++ b/packages/backend-seed/API.md @@ -5,7 +5,7 @@ ```ts // @public (undocumented) -export const GetSeedSecret: (secretName: string) => Promise; +export const GetSecret: (secretName: string) => Promise; // (No @packageDocumentation comment for this package)