From 3dbb6477d0696aa070b4c40e25be0da412cb44f0 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Tue, 17 Mar 2026 10:43:04 -0400 Subject: [PATCH 01/70] feat(cli-internal): add assess, refactor, and generate-new commands Squash of all work on the migration-plan branch since diverging from gen2-migration. Includes the assess subcommand for migration readiness, the refactor command rebuild with category-specific forward/rollback refactorers, the generate-new infrastructure with Generator+Renderer pattern, unified validation model, SpinningLogger UX, and comprehensive unit tests. --- Prompt: squash all commits after the merge base with gen2-migration into one and commit --- .gitignore | 2 +- AGENTS.md | 13 + .../004-gen2-migration-validation-modeling.md | 306 ++++++++++++++++++ .../gen2-migration/_framework/snapshot.ts | 4 +- .../commands/gen2-migration/generate.test.ts | 10 +- .../refactor/auth-forward-mapping.test.ts | 2 +- .../refactor/auth-forward-plan.test.ts | 35 +- .../refactor/auth-rollback-plan.test.ts | 1 + .../refactor/build-refactor-templates.test.ts | 2 +- .../category-plan-orchestration.test.ts | 25 +- .../default-resource-mappings.test.ts | 4 +- .../refactor/forward-beforemove.test.ts | 3 + .../gen2-migration/refactor/refactor.test.ts | 19 +- .../refactor/rollback-aftermove.test.ts | 4 +- .../drift-detection/detect-stack-drift.ts | 16 +- .../drift-detection/detect-template-drift.ts | 12 +- .../services/cloudformation-service.ts | 4 +- packages/amplify-cli/src/commands/drift.ts | 184 ++++------- .../src/commands/gen2-migration.ts | 219 +++---------- .../src/commands/gen2-migration/_operation.ts | 43 ++- .../src/commands/gen2-migration/_plan.ts | 116 +++++++ .../gen2-migration/_spinning-logger.ts | 151 +++++++++ .../src/commands/gen2-migration/_step.ts | 45 +-- .../commands/gen2-migration/_validations.ts | 30 +- .../src/commands/gen2-migration/assess.ts | 4 +- .../src/commands/gen2-migration/clone.ts | 22 +- .../commands/gen2-migration/decommission.ts | 66 ++-- .../src/commands/gen2-migration/generate.ts | 97 +++--- .../generate/amplify.yml.generator.ts | 4 +- .../amplify/analytics/kinesis.generator.ts | 4 +- .../generate/amplify/auth/auth.generator.ts | 4 +- .../amplify/auth/reference-auth.generator.ts | 4 +- .../generate/amplify/backend.generator.ts | 4 +- .../custom-resources/custom.generator.ts | 4 +- .../generate/amplify/data/data.generator.ts | 4 +- .../amplify/function/function.generator.ts | 4 +- .../amplify/package.json.generator.ts | 4 +- .../amplify/rest-api/rest-api.generator.ts | 4 +- .../amplify/storage/dynamodb.generator.ts | 4 +- .../generate/amplify/storage/s3.generator.ts | 4 +- .../generate/amplify/tsconfig.generator.ts | 4 +- .../generate/gitignore.generator.ts | 4 +- .../generate/package.json.generator.ts | 4 +- .../src/commands/gen2-migration/lock.ts | 178 +++++----- .../refactor/auth/auth-forward.ts | 4 +- .../refactor/legacy-custom-resource.ts | 4 +- .../gen2-migration/refactor/refactor.ts | 87 +++-- .../commands/gen2-migration/refactor/utils.ts | 2 +- .../refactor/workflow/category-refactorer.ts | 44 ++- .../workflow/forward-category-refactorer.ts | 4 +- .../workflow/rollback-category-refactorer.ts | 14 +- .../src/commands/gen2-migration/shift.ts | 22 +- .../src/progressbars/spinner.ts | 20 +- .../src/progressbars/terminal.ts | 10 + 54 files changed, 1150 insertions(+), 738 deletions(-) create mode 100644 packages/amplify-cli/adr/004-gen2-migration-validation-modeling.md create mode 100644 packages/amplify-cli/src/commands/gen2-migration/_plan.ts create mode 100644 packages/amplify-cli/src/commands/gen2-migration/_spinning-logger.ts diff --git a/.gitignore b/.gitignore index 2d195d54d3e..a91ddd3d46a 100644 --- a/.gitignore +++ b/.gitignore @@ -110,7 +110,7 @@ packages/amplify-environment-parameters/lib/ reports/*.xml commit-msg.txt -amplify-migration-apps/**/_snapshot.*.actual +amplify-migration-apps/**/_snapshot.*.actual* .pr-body.ai-generated.md .commit-message.ai-generated.txt diff --git a/AGENTS.md b/AGENTS.md index f223c4ce65f..007e76fa099 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -39,8 +39,16 @@ Verify your changes by following these guidelines: - **Always** update the appropriate JSDoc strings in the code you change. Be concise. - Do not create additional markdown files in the repository unless you are instructed explicitly to. - Never commit `.ai-generated` files (`.commit-message.ai-generated.txt`, `.pr-body.ai-generated.md`, etc.) — they are gitignored and are only used as local scratch files. +<<<<<<< HEAD - Commit your changes in git using a well-formed commit message following the Conventional Commits format. The message must start with a type prefix (e.g., `feat:`, `fix:`, `docs:`, `refactor:`, `test:`, `chore:`) followed by a single sentence summary and no more +======= +- Commit your changes in git using a well-formed commit message following the Conventional Commits format. The message must include + a scope when the change is scoped to a specific package: `type(scope): subject`. The scope is derived from the package's `name` + field in `package.json` with the `@aws-amplify/` prefix stripped. For example, `@aws-amplify/cli-internal` → `cli-internal`, + `@aws-amplify/amplify-prompts` → `amplify-prompts`. Valid scopes are enforced by commitlint via `commitlint.config.js`. The + message must start with a type prefix (e.g., `feat:`, `fix:`, `docs:`, `refactor:`, `test:`, `chore:`) followed by a single sentence summary and no more +>>>>>>> 5ae9c3daf8 (feat(cli-internal): add assess, refactor, and generate-new commands) than a few paragraphs explaining the change and your testing. After this explanation, place the prompt the user used to trigger this work prefixed with a "Prompt: " after a single line consisting of '---'. Make sure there are no empty lines before or after this line. Word wrap all paragraphs at 72 columns including the prompt. For the author of the commit, use the configured username in git with @@ -54,7 +62,12 @@ Verify your changes by following these guidelines: - Since this repo has a commit hook that takes quite a long time to run, don't immediately commit every change you were asked to do. Apply your judgment, if the diff is still fairly small just keep going. Otherwise, ask the user if they want to commit or keep going. +<<<<<<< HEAD - Committing after every incremental change wastes time on hooks and creates noisy history. Natural commit +======= +- Batch commits aggressively. Wait until a design decision is settled and the code is stable before committing. + Committing after every incremental change wastes time on hooks and creates noisy history. Natural commit +>>>>>>> 5ae9c3daf8 (feat(cli-internal): add assess, refactor, and generate-new commands) points are: after a design discussion concludes, after tests pass, after a self-review finds no issues. - NEVER commit with --no-verify. - Before you actually commit, provide a (very) concise summary of changes to the user and ask for confirmation to commit. diff --git a/packages/amplify-cli/adr/004-gen2-migration-validation-modeling.md b/packages/amplify-cli/adr/004-gen2-migration-validation-modeling.md new file mode 100644 index 00000000000..f5037fa261a --- /dev/null +++ b/packages/amplify-cli/adr/004-gen2-migration-validation-modeling.md @@ -0,0 +1,306 @@ +# ADR-004: Unified Validation Model for gen2-migration + +## Status + +Proposed + +## Context + +The gen2-migration tool currently has three separate validation mechanisms: + +1. **Step-level validations** (`executeValidate`/`rollbackValidate` on `AmplifyMigrationStep`). + These run before planning and are skippable via `--skip-validations`. They check + environment preconditions like drift, lock status, deployment status, and working + directory cleanliness. They throw on failure; the orchestrator catches the throw and + re-throws with a hint to use `--skip-validations`. + +2. **Operation-level validations** (`validate()` on `AmplifyMigrationOperation`). + These run after planning, before execution. They are not skippable. Today most + implementations are no-ops (`async () => { return; }`). + +3. **Implicit planning-time validations** (throws inside `CategoryRefactorer.plan()`). + For example, `plan()` throws `InvalidStackError` if only one of source/target stack + IDs is found. These crash the program on the first category that exhibits the problem, + preventing the user from seeing issues in other categories. + +### Problems + +- **Three mechanisms for one concept.** Validation is validation regardless of when it + runs. Having three separate paths makes the system harder to reason about and extend. + +- **Planning-time throws are not aggregatable.** When `CategoryRefactorer.plan()` throws + on the first bad category, the user has to fix it, re-run, discover the next problem, + fix it, re-run, etc. The tool should report all problems upfront. + +## Requirements + +### R1 — Single validation mechanism + +All validations — environment preconditions, planning-time checks, and pre-execution +checks — flow through one mechanism. + +### R2 — Aggregate reporting + +When multiple validations fail, the user sees all failures at once, not just the first +one. + +### R3 — Validations are skippable via `--skip-validations` + +All operation-level validations are skippable. Conditions that cannot be skipped are +planning errors, not validations. + +### R4 — Validations run before any mutation + +No `execute()` runs until all validations across all operations have been evaluated. + +### R5 — Planning errors are aggregated + +When a step plans multiple categories and some fail, the user sees all planning +failures at once. `plan()` throws for conditions it cannot recover from, but the +step catches and aggregates these across all planners before surfacing them. + +## Decision + +Two changes: + +1. **Operation-level validation becomes the single validation mechanism.** [R1] + `validate()` on `AmplifyMigrationOperation` returns a `ValidationResult` instead + of throwing. Step-level validations (`executeValidate`/`rollbackValidate`) are + removed; those checks become operations in the operations list. A new `Plan` + object encapsulates the operations array and exposes `describe()`, `validate()`, + and `execute()` to the orchestrator. + +2. **Planning errors are aggregated by the step.** [R5] + `plan()` throws a typed `Gen2MigrationPlanningError` for conditions it cannot + plan around. The step catches these across all planners and throws a single + aggregated error. This is separate from the operation validation mechanism — + if you can't plan, there's nothing to validate or execute. + +### User-facing flow + +``` +Planning... done + +Validating... + +Lock status ✔ Passed +Deployment status ✔ Passed +Drift detection ✔ Passed + +Operations Summary + + • Update source stack 'auth-abc123' with resolved references + • Move Gen2 resources to holding stack 'auth-abc123-holding' + • Refactor resources from Gen1 to Gen2 + +Implications + + • Move stateful resources from your Gen1 app to be managed by your Gen2 app + +(You can rollback this command by running: 'amplify gen2-migration refactor --rollback') + +Do you want to continue? (y/n) +``` + +When planning fails, the user sees the aggregated errors and the process stops: + +``` +Planning... + ✘ auth: Category exists in source but not destination stack + ✘ storage: Category exists in source but not destination stack + +Planning failed. Resolve the errors above before proceeding. +``` + +When validations fail, each validation gets its own section with a name (bold in +the terminal), a status, and an optional report indented below: + +``` +Validating... + +Lock status ✔ Passed +Deployment status ✔ Passed +Drift detection ✘ Failed + + Resource Property Expected Actual + ───────────────────────────────────────────────────────────────── + UserPool MfaConfiguration OFF ON + UserPoolClient ExplicitAuthFlows ALLOW_REFRESH ALLOW_USER_SRP + S3Bucket VersioningConfig Enabled Suspended + +Validations failed. Resolve the errors above or re-run with '--skip-validations'. +``` + +### `Plan` + +Steps currently return `AmplifyMigrationOperation[]` from `execute()`/`rollback()`. +Instead they return a `Plan` that encapsulates the operations array: + +```typescript +class Plan { + constructor(private readonly operations: AmplifyMigrationOperation[]) {} + + /** Descriptions of what the operations will do. */ + async describe(): Promise { + const descriptions: string[] = []; + for (const op of this.operations) { + descriptions.push(...(await op.describe())); + } + return descriptions; + } + + /** Runs all validations, returns all results. */ + async validate(): Promise { + const results: ValidationResult[] = []; + for (const op of this.operations) { + results.push(await op.validate()); + } + return results; + } + + /** Executes all operations sequentially. */ + async execute(): Promise { + for (const op of this.operations) { + await op.execute(); + } + } +} +``` + +The orchestrator interacts only with `Plan` — individual operations are an internal +detail. The orchestrator flow becomes: + +```typescript +const plan = rollingBack ? await step.rollback() : await step.execute(); + +// Operations summary +for (const line of await plan.describe()) { + printer.info(`• ${line}`); +} + +// Implications + confirmation prompt (unchanged) +// ... + +// Validate [R1, R2, R4] +const results = await plan.validate(); +renderValidationResults(results); + +const failures = results.filter((r) => !r.valid); +if (failures.length > 0 && !skipValidations) { + throw new AmplifyError('MigrationError', { + message: failures.map((r) => r.name).join(', ') + ' failed', + resolution: `Resolve the errors or re-run with '--skip-validations'`, + }); +} + +// Execute +await plan.execute(); +``` + +What gets removed from the orchestrator: + +- The `validate()` helper function (step-level validation wrapper) +- `executeValidate()` and `rollbackValidate()` on `AmplifyMigrationStep` +- `CachedAmplifyMigrationStep` +- `runOperations()` (replaced by `plan.validate()` + `plan.execute()`) + +### `ValidationResult` + +```typescript +interface ValidationResult { + /** Label shown on the status line (e.g., "Lock status", "Drift detection"). */ + readonly name: string; + /** Whether the validation passed. */ + readonly valid: boolean; + /** Optional detailed output shown indented below the status line. */ + readonly report?: string; +} +``` + +`validate()` on `AmplifyMigrationOperation` changes from `Promise` to +`Promise`. + +### Step-level validations become operations + +Validations that currently live in `executeValidate()`/`rollbackValidate()` (drift +detection, lock status, deployment status, working directory cleanliness) become +operations in the `Plan`. Their `execute()` is a no-op — the validation is the +entire point. + +### Planning error aggregation + +`plan()` throws a typed `Gen2MigrationPlanningError` when it cannot formulate a +plan. This is the right semantic — if you can't gather enough information to plan, +throwing is the honest response. + +The step that orchestrates multiple planners (e.g., `AmplifyMigrationRefactorStep`) +catches these errors, continues planning remaining categories, and throws a single +aggregated error after all planners have been attempted: + +```typescript +private async plan( + refactorers: Refactorer[], +): Promise { + const operations: AmplifyMigrationOperation[] = []; + const planningErrors: Gen2MigrationPlanningError[] = []; + + for (const refactorer of refactorers) { + try { + operations.push(...(await refactorer.plan())); + } catch (error) { + if (error instanceof Gen2MigrationPlanningError) { + planningErrors.push(error); + } else { + throw error; // unexpected error — propagate immediately + } + } + } + + if (planningErrors.length > 0) { + throw new AmplifyError('MigrationError', { + message: planningErrors.map((e) => e.message).join('\n'), + }); + } + + return new Plan(operations); +} +``` + +Unexpected errors (network failures, SDK errors) are not +`Gen2MigrationPlanningError` and propagate immediately — they indicate something +is broken, not a validatable condition. + +## Consequences + +### What changes + +- `AmplifyMigrationOperation.validate()` returns `Promise` instead + of `Promise`. +- Steps return `Plan` instead of `AmplifyMigrationOperation[]`. +- `AmplifyMigrationStep.executeValidate()` and `rollbackValidate()` are removed. +- The `validate()` function in `gen2-migration.ts` is removed. +- `runOperations()` is removed (replaced by `plan.validate()` + `plan.execute()`). +- `--validations-only` is trivially supported: call `plan.validate()` and stop. +- `CachedAmplifyMigrationStep` is removed. +- `CategoryRefactorer.plan()` throws `Gen2MigrationPlanningError` for precondition + failures. The step catches and aggregates these across all planners. +- Step implementations (lock, generate, refactor, decommission) move their + precondition checks into operations in the `Plan`. +- `--skip-validations` skips all validation failures. Conditions that must not be + skipped are modeled as planning errors, not validations. + +### What stays the same + +- The `AmplifyMigrationOperation` interface keeps its three methods (`describe`, + `validate`, `execute`), but is now an internal detail behind `Plan`. +- The `Planner` interface is unchanged. +- The two-pass structure (validate all, then execute all) is preserved inside `Plan`. +- `--skip-validations` flag semantics are preserved for the user, but the mechanism + is simpler: all validations are skippable, non-skippable conditions are planning + errors. + +### Migration path + +Since this code hasn't been published yet, this is a breaking change to internal +interfaces only. All step implementations and their tests need to be updated in a +single pass. diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/snapshot.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/snapshot.ts index d9e713ec618..cc2c4065046 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/snapshot.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/snapshot.ts @@ -83,9 +83,9 @@ export class Snapshot { const differences = await diff({ expectedDir: this.props.expectedPath, actualDir, ignorePatterns: fullIgnorePatterns }); // copy the temporary actual path to repo (ignored) for easy manual comparison - const ignoredActualPath = `${this.props.expectedPath}.actual`; + const ignoredActualPath = `${this.props.expectedPath}.actual.${Date.now()}`; if (fs.existsSync(ignoredActualPath)) { - fs.rmdirSync(ignoredActualPath, { recursive: true }); + fs.rmSync(ignoredActualPath, { recursive: true, force: true }); } copySync({ src: actualDir, dest: ignoredActualPath, ignorePatterns: fullIgnorePatterns }); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate.test.ts index 15e47566dcd..deffb024627 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate.test.ts @@ -82,10 +82,8 @@ async function testSnapshot(appName: string, appOptions?: MigrationAppOptions, c app.region, {} as $TSContext, ); - const operations = await step.execute(); - for (const operation of operations) { - await operation.execute(); - } + const plan = await step.forward(); + await plan.execute(); const report = await app.snapshots.generate.compare(process.cwd()); const isUpdatingSnapshots = expect.getState().snapshotState._updateSnapshot === 'all'; @@ -167,8 +165,8 @@ describe('AmplifyMigrationGenerateStep', () => { const step = createStep(); // Should not throw — generate warns on unsupported, unlike refactor - const operations = await step.execute(); - expect(operations.length).toBeGreaterThan(0); + const plan = await step.forward(); + await plan.describe(); }); }); }); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts index e90235af1b2..71e485dd686 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts @@ -16,7 +16,7 @@ describe('AuthCognitoForwardRefactorer.buildResourceMappings - UserPoolClient di const gen2Branch = new StackFacade(clients, 'gen2'); return new (class extends AuthCognitoForwardRefactorer { constructor() { - super(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', 'appId', 'main'); + super(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', null as any, 'appId', 'main'); } public testBuildResourceMappings(source: Map, target: Map): MoveMapping[] { return this.buildResourceMappings(source, target); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts index 2e8252cd487..78301983436 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts @@ -96,7 +96,16 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { (clients as any).cloudFormation = new CloudFormationClient({}); const gen1Env = new StackFacade(clients, 'gen1-root'); const gen2Branch = new StackFacade(clients, 'gen2-root'); - const refactorer = new AuthCognitoForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', 'appId', 'main'); + const refactorer = new AuthCognitoForwardRefactorer( + gen1Env, + gen2Branch, + clients, + 'us-east-1', + '123456789', + null as any, + 'appId', + 'main', + ); const ops = await refactorer.plan(); const descriptions = await Promise.all(ops.map((op) => op.describe())); @@ -175,7 +184,16 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { (clients as any).cognitoIdentityProvider = new CognitoIdentityProviderClient({}); const gen1Env = new StackFacade(clients, 'gen1-root'); const gen2Branch = new StackFacade(clients, 'gen2-root'); - const refactorer = new AuthCognitoForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', 'appId', 'main'); + const refactorer = new AuthCognitoForwardRefactorer( + gen1Env, + gen2Branch, + clients, + 'us-east-1', + '123456789', + null as any, + 'appId', + 'main', + ); const ops = await refactorer.plan(); @@ -221,8 +239,17 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { (clients as any).cloudFormation = new CloudFormationClient({}); const gen1Env = new StackFacade(clients, 'gen1-root'); const gen2Branch = new StackFacade(clients, 'gen2-root'); - const refactorer = new AuthCognitoForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', 'appId', 'main'); + const refactorer = new AuthCognitoForwardRefactorer( + gen1Env, + gen2Branch, + clients, + 'us-east-1', + '123456789', + null as any, + 'appId', + 'main', + ); - await expect(refactorer.plan()).rejects.toThrow('exists in source but not destination'); + await expect(refactorer.plan()).rejects.toThrow('unable to find target stack'); }); }); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts index a2ec8378942..3b0450340c4 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts @@ -96,6 +96,7 @@ describe('AuthCognitoRollbackRefactorer.plan()', () => { clients, 'us-east-1', '123', + null as any, ); const ops = await refactorer.plan(); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/build-refactor-templates.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/build-refactor-templates.test.ts index 87916a5e4c3..a4e11baf208 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/build-refactor-templates.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/build-refactor-templates.test.ts @@ -12,7 +12,7 @@ class TestRefactorer extends (CategoryRefactorer as any) { private mappingsToReturn: MoveMapping[] = []; constructor() { - super(null, null, null, 'us-east-1', '123'); + super(null, null, null, 'us-east-1', '123', null as any); } setMappings(mappings: MoveMapping[]) { diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts index 1f950b26145..14f2c2e8686 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts @@ -72,13 +72,14 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact }); afterEach(() => cfnMock.restore()); - it('returns empty array when both stacks are absent (Path A)', async () => { + it('throws when both stacks are absent (Path A)', async () => { cfnMock.on(DescribeStackResourcesCommand, { StackName: 'gen1-root' }).resolves({ StackResources: [] }); cfnMock.on(DescribeStackResourcesCommand, { StackName: 'gen2-root' }).resolves({ StackResources: [] }); const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123').plan(); - expect(ops).toEqual([]); + await expect(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', null as any).plan()).rejects.toThrow( + 'unable to find source stack', + ); }); it('throws when source exists but destination does not (Path B)', async () => { @@ -88,8 +89,8 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact cfnMock.on(DescribeStackResourcesCommand, { StackName: 'gen2-root' }).resolves({ StackResources: [] }); const { clients, gen1Env, gen2Branch } = makeInstances(); - await expect(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123').plan()).rejects.toThrow( - 'Category exists in source but not destination', + await expect(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', null as any).plan()).rejects.toThrow( + 'unable to find target stack', ); }); @@ -100,8 +101,8 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact }); const { clients, gen1Env, gen2Branch } = makeInstances(); - await expect(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123').plan()).rejects.toThrow( - 'Category exists in destination but not source', + await expect(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', null as any).plan()).rejects.toThrow( + 'unable to find source stack', ); }); @@ -116,7 +117,7 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact cfnMock.on(GetTemplateCommand, { StackName: 'gen1-storage-stack' }).resolves({ TemplateBody: JSON.stringify(noStorageTemplate) }); const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123').plan(); + const ops = await new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', null as any).plan(); expect(ops).toEqual([]); }); @@ -124,7 +125,7 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact setupStorageMocks(cfnMock); const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123').plan(); + const ops = await new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', null as any).plan(); const descriptions = (await Promise.all(ops.map((o) => o.describe()))).flat(); expect(descriptions).toHaveLength(4); @@ -170,7 +171,7 @@ describe('StorageS3RollbackRefactorer.plan() — rollback without holding stack' cfnMock.on(GetTemplateCommand, { StackName: 'gen1-storage-stack' }).resolves({ TemplateBody: JSON.stringify(gen1StorageTemplate) }); const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new StorageS3RollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123').plan(); + const ops = await new StorageS3RollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', null as any).plan(); const descriptions = (await Promise.all(ops.map((o) => o.describe()))).flat(); // Rollback: no updateSource/updateTarget, just move @@ -222,7 +223,7 @@ describe('Analytics wiring tests', () => { it('forward: discovers analytics stacks and maps Kinesis stream', async () => { setupAnalyticsMocks(cfnMock); const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new AnalyticsKinesisForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123').plan(); + const ops = await new AnalyticsKinesisForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', null as any).plan(); const descriptions = (await Promise.all(ops.map((o) => o.describe()))).flat(); expect(descriptions).toHaveLength(4); @@ -233,7 +234,7 @@ describe('Analytics wiring tests', () => { cfnMock.on(DescribeStacksCommand).resolves({ Stacks: [] }); // no holding stack setupAnalyticsMocks(cfnMock); const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new AnalyticsKinesisRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123').plan(); + const ops = await new AnalyticsKinesisRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', null as any).plan(); const descriptions = (await Promise.all(ops.map((o) => o.describe()))).flat(); expect(descriptions).toHaveLength(1); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts index 217a9783522..cbc0f82c38c 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts @@ -22,7 +22,7 @@ class TestRollbackRefactorer extends RollbackCategoryRefactorer { protected override readonly gen1LogicalIds: ReadonlyMap; constructor(ids: ReadonlyMap) { - super(null as any, null as any, null as any, 'us-east-1', '123'); + super(null as any, null as any, null as any, 'us-east-1', '123', null as any); this.gen1LogicalIds = ids; } protected async fetchSourceStackId() { @@ -47,7 +47,7 @@ function toIdMap(mappings: MoveMapping[]): Map { } describe('ForwardCategoryRefactorer.buildResourceMappings (default type-matching)', () => { - const refactorer = new TestForwardRefactorer(null as any, null as any, null as any, 'us-east-1', '123'); + const refactorer = new TestForwardRefactorer(null as any, null as any, null as any, 'us-east-1', '123', null as any); it('maps single resource per type', () => { const mappings = refactorer.testBuildResourceMappings( diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts index 39659288e32..c0d6a86d27c 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts @@ -88,6 +88,7 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { clients, 'us-east-1', '123', + null as any, ); const blueprint = makeBlueprint({ targetResolved: { Lambda: { Type: 'AWS::Lambda::Function', Properties: {} } }, @@ -114,6 +115,7 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { clients, 'us-east-1', '123', + null as any, ); const blueprint = makeBlueprint({ @@ -153,6 +155,7 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { clients, 'us-east-1', '123', + null as any, ); const blueprint = makeBlueprint({ diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts index ea82a6b3249..b5364aac8ee 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts @@ -75,9 +75,8 @@ async function testSnapshot(appName: string, appOptions?: MigrationAppOptions, c context, ); - for (const operation of await refactorStep.execute()) { - await operation.execute(); - } + const plan = await refactorStep.forward(); + await plan.execute(); const isUpdatingSnapshots = expect.getState().snapshotState._updateSnapshot === 'all'; const actualPath = path.join(process.cwd(), OUTPUT_DIRECTORY); @@ -199,7 +198,7 @@ describe('AmplifyMigrationRefactorStep', () => { createSpy = mockDiscover([{ category: 'notifications', resourceName: 'push', service: 'Pinpoint', key: 'unsupported' }]); const step = createStep(); - await expect(step.execute()).rejects.toThrow(/Unsupported resource 'push'/); + await expect(step.forward()).rejects.toThrow(/Unsupported resource 'push'/); }); it('throws on Cognito-UserPool-Groups', async () => { @@ -209,7 +208,7 @@ describe('AmplifyMigrationRefactorStep', () => { ]); const step = createStep(); - await expect(step.execute()).rejects.toThrow(/Unsupported resource 'userPoolGroups'/); + await expect(step.forward()).rejects.toThrow(/Unsupported resource 'userPoolGroups'/); }); it('does not throw for stateless-only resources', async () => { @@ -220,8 +219,8 @@ describe('AmplifyMigrationRefactorStep', () => { ]); const step = createStep(); - const operations = await step.execute(); - expect(operations).toEqual([]); + const plan = await step.forward(); + await plan.describe(); }); it('throws on multiple resources in the same refactor category', async () => { @@ -232,7 +231,7 @@ describe('AmplifyMigrationRefactorStep', () => { ]); const step = createStep(); - await expect(step.execute()).rejects.toThrow(/Multiple resources in 'storage'/); + await expect(step.forward()).rejects.toThrow(/Multiple resources in 'storage'/); }); }); @@ -263,8 +262,8 @@ describe('AmplifyMigrationRefactorStep', () => { ]); const step = createStep(); - const operations = await step.rollback(); - expect(operations).toEqual([]); + const plan = await step.rollback(); + await plan.describe(); }); it('throws on multiple resources in the same refactor category', async () => { diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts index 89ccefd45c6..550033be69f 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts @@ -105,7 +105,7 @@ describe('RollbackCategoryRefactorer.afterMovePlan', () => { (clients as any).cloudFormation = new CloudFormationClient({}); const gen1Env = new StackFacade(clients, 'gen1-root'); const gen2Branch = new StackFacade(clients, 'gen2-root'); - const refactorer = new TestRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123456789'); + const refactorer = new TestRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', null as any); const sourceAfterRemoval: CFNTemplate = { AWSTemplateFormatVersion: '2010-09-09', @@ -153,7 +153,7 @@ describe('RollbackCategoryRefactorer.afterMovePlan', () => { (clients as any).cloudFormation = new CloudFormationClient({}); const gen1Env = new StackFacade(clients, 'gen1-root'); const gen2Branch = new StackFacade(clients, 'gen2-root'); - const refactorer = new TestRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123456789'); + const refactorer = new TestRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', null as any); const emptyTemplate: CFNTemplate = { AWSTemplateFormatVersion: '2010-09-09', diff --git a/packages/amplify-cli/src/commands/drift-detection/detect-stack-drift.ts b/packages/amplify-cli/src/commands/drift-detection/detect-stack-drift.ts index b1ff2ed4581..79ac40e3f1e 100644 --- a/packages/amplify-cli/src/commands/drift-detection/detect-stack-drift.ts +++ b/packages/amplify-cli/src/commands/drift-detection/detect-stack-drift.ts @@ -15,7 +15,8 @@ import { } from '@aws-sdk/client-cloudformation'; import { AmplifyError } from '@aws-amplify/amplify-cli-core'; import { extractCategory } from '../gen2-migration/categories'; -import type { Printer } from '@aws-amplify/amplify-prompts'; +import type { SpinningLogger } from '../gen2-migration/_spinning-logger'; +import { extractStackNameFromId } from '../gen2-migration/refactor/utils'; /** * Enriched drift tree node — one per stack (root or nested) @@ -62,10 +63,9 @@ function collectSkippedStacks(node: StackDriftNode, result: string[] = []): stri export async function detectStackDrift( cfn: CloudFormationClient, stackName: string, - print: Printer, + print: SpinningLogger, ): Promise<{ drifts: StackResourceDrift[]; driftDetectionId: string }> { // Start drift detection - print.debug(`detectStackDrift: ${stackName}`); const driftDetection = await cfn.send( new DetectStackDriftCommand({ StackName: stackName, @@ -116,7 +116,7 @@ export async function detectStackDrift( /** * Check if a property difference is an Amplify auth role Deny→Allow change (intended drift) */ -function isAmplifyAuthRoleDenyToAllowChange(propDiff: PropertyDifference, print: Printer): boolean { +function isAmplifyAuthRoleDenyToAllowChange(propDiff: PropertyDifference, print: SpinningLogger): boolean { // Check if this is an AssumeRolePolicyDocument change if (!propDiff.PropertyPath || !propDiff.PropertyPath.includes('AssumeRolePolicyDocument')) { return false; @@ -169,7 +169,7 @@ function isAmplifyAuthRoleDenyToAllowChange(propDiff: PropertyDifference, print: async function waitForDriftDetection( cfn: CloudFormationClient, driftDetectionId: string, - print: Printer, + print: SpinningLogger, ): Promise { const maxWaitForDrift = 300_000; // 5 minutes max const timeBetweenOutputs = 10_000; // User feedback every 10 seconds @@ -221,11 +221,13 @@ async function buildDriftNode( cfn: CloudFormationClient, physicalName: string, logicalId: string | null, - print: Printer, + print: SpinningLogger, parentCategory?: string, ): Promise { // Detect drift on this stack — filter to only drifted resources (MODIFIED/DELETED) + print.push(extractStackNameFromId(physicalName)); const { drifts: allDrifts, driftDetectionId } = await detectStackDrift(cfn, physicalName, print); + print.pop(); const drifts = allDrifts.filter(isDrifted); // Compute category — root stack (null logicalId) is always 'Core Infrastructure' @@ -295,7 +297,7 @@ async function buildDriftNode( export async function detectStackDriftRecursive( cfn: CloudFormationClient, stackName: string, - print: Printer, + print: SpinningLogger, ): Promise { print.debug(`detectStackDriftRecursive: ${stackName}`); diff --git a/packages/amplify-cli/src/commands/drift-detection/detect-template-drift.ts b/packages/amplify-cli/src/commands/drift-detection/detect-template-drift.ts index e8b1d955b04..84f206babec 100644 --- a/packages/amplify-cli/src/commands/drift-detection/detect-template-drift.ts +++ b/packages/amplify-cli/src/commands/drift-detection/detect-template-drift.ts @@ -12,7 +12,7 @@ import { import { paginateListChangeSets } from '@aws-sdk/client-cloudformation'; import fs from 'fs-extra'; import * as path from 'path'; -import type { Printer } from '@aws-amplify/amplify-prompts'; +import type { SpinningLogger } from '../gen2-migration/_spinning-logger'; export interface ResourceChangeWithNested extends ResourceChange { nestedChanges?: ResourceChangeWithNested[]; @@ -52,7 +52,7 @@ const CHANGESET_PREFIX = 'amplify-drift-detection-'; /** * Delete any existing amplify-drift-detection-* changesets from a previous run */ -async function cleanupOldDriftChangesets(cfn: CloudFormationClient, stackName: string, print: Printer): Promise { +async function cleanupOldDriftChangesets(cfn: CloudFormationClient, stackName: string, print: SpinningLogger): Promise { try { const toDelete: string[] = []; for await (const page of paginateListChangeSets({ client: cfn }, { StackName: stackName })) { @@ -81,7 +81,11 @@ async function cleanupOldDriftChangesets(cfn: CloudFormationClient, stackName: s * @param print - Logging interface * @param cfn - CloudFormation client */ -export async function detectTemplateDrift(stackName: string, print: Printer, cfn: CloudFormationClient): Promise { +export async function detectTemplateDrift( + stackName: string, + print: SpinningLogger, + cfn: CloudFormationClient, +): Promise { try { // Check prerequisites const currentCloudBackendPath = pathManager.getCurrentCloudBackendDirPath(); @@ -233,7 +237,7 @@ export async function detectTemplateDrift(stackName: string, print: Printer, cfn async function analyzeChangeSet( cfn: CloudFormationClient, changeSet: DescribeChangeSetCommandOutput, - print: Printer, + print: SpinningLogger, ): Promise { const result: TemplateDriftResults = { changes: [], diff --git a/packages/amplify-cli/src/commands/drift-detection/services/cloudformation-service.ts b/packages/amplify-cli/src/commands/drift-detection/services/cloudformation-service.ts index 816d9e04d99..8259a974b28 100644 --- a/packages/amplify-cli/src/commands/drift-detection/services/cloudformation-service.ts +++ b/packages/amplify-cli/src/commands/drift-detection/services/cloudformation-service.ts @@ -8,7 +8,7 @@ import type { $TSContext } from '@aws-amplify/amplify-cli-core'; import { AmplifyError, pathManager, stateManager } from '@aws-amplify/amplify-cli-core'; import * as fs from 'fs-extra'; import * as path from 'path'; -import type { Printer } from '@aws-amplify/amplify-prompts'; +import type { SpinningLogger } from '../../gen2-migration/_spinning-logger'; import CloudFormation from '@aws-amplify/amplify-provider-awscloudformation/lib/aws-utils/aws-cfn'; import { downloadZip, extractZip } from '@aws-amplify/amplify-provider-awscloudformation/lib/zip-util'; @@ -19,7 +19,7 @@ import { S3BackendZipFileName } from '@aws-amplify/amplify-provider-awscloudform * Service for CloudFormation operations */ export class CloudFormationService { - constructor(private readonly print: Printer) {} + constructor(private readonly print: SpinningLogger) {} /** * Get CloudFormation client * Uses the standard Amplify CloudFormation class for proper configuration diff --git a/packages/amplify-cli/src/commands/drift.ts b/packages/amplify-cli/src/commands/drift.ts index 30d83732d72..96160354b4c 100644 --- a/packages/amplify-cli/src/commands/drift.ts +++ b/packages/amplify-cli/src/commands/drift.ts @@ -1,110 +1,71 @@ /** * Amplify drift detection command - * Based on AWS CDK CLI drift implementation */ import { $TSContext, AmplifyError } from '@aws-amplify/amplify-cli-core'; -import { printer, AmplifySpinner, type Printer, isDebug } from '@aws-amplify/amplify-prompts'; +import { printer } from '@aws-amplify/amplify-prompts'; import chalk from 'chalk'; import { detectStackDriftRecursive, type CloudFormationDriftResults } from './drift-detection'; import { detectLocalDrift, type LocalDriftResults } from './drift-detection/detect-local-drift'; import { detectTemplateDrift, type TemplateDriftResults } from './drift-detection/detect-template-drift'; import { CloudFormationService, AmplifyConfigService, createUnifiedCategoryView } from './drift-detection/services'; +import { SpinningLogger } from './gen2-migration/_spinning-logger'; /** - * Executes the drift detection command + * Result of drift detection. + */ +export interface DriftDetectionResult { + /** 0 = no drift, 1 = drift detected or incomplete. */ + readonly code: number; + /** Human-readable drift report, undefined when no drift. */ + readonly report?: string; +} + +/** + * Executes the drift detection command. */ export const run = async (context: $TSContext): Promise => { - const detector = new AmplifyDriftDetector(context); - const exitCode = await detector.detect(); + const logger = new SpinningLogger('drift'); + const detector = new AmplifyDriftDetector(context, logger); + + logger.start('Drift detection'); + const result = await detector.detect(); + logger.succeed('Drift detection'); + + if (result.report) { + printer.info(result.report); + } - if (exitCode !== 0) { - process.exitCode = exitCode; + if (result.code !== 0) { + process.exitCode = result.code; } }; /** - * Amplify drift detector - Coordinator class - * Coordinates services to perform drift detection + * Coordinates services to perform drift detection. + * Accepts a SpinningLogger; the caller owns the spinner lifecycle. */ export class AmplifyDriftDetector { private readonly cfnService: CloudFormationService; private readonly configService: AmplifyConfigService; - private readonly printer: Printer; - private readonly spinner = new AmplifySpinner(); - private spinnerText = ''; - private spinnerActive = false; - - constructor(private readonly context: $TSContext, basePrint: Pick = printer) { - // Wrap each method to pause/resume spinner so output never collides - this.printer = { - info: (msg: string) => this.withSpinnerPaused(() => basePrint.info(msg)), - debug: (msg: string) => { - if (!isDebug) return; - basePrint.debug(msg); - }, - warn: (msg: string) => this.withSpinnerPaused(() => basePrint.warn(msg)), - blankLine: () => this.withSpinnerPaused(() => printer.blankLine()), - success: (msg: string) => this.withSpinnerPaused(() => printer.success(msg)), - error: (msg: string) => this.withSpinnerPaused(() => printer.error(msg)), - }; - - this.cfnService = new CloudFormationService(this.printer); - this.configService = new AmplifyConfigService(); - } - - private withSpinnerPaused(fn: () => void): void { - if (this.spinnerActive) { - this.spinner.stop(); - fn(); - this.spinner.start(this.spinnerText); - } else { - fn(); - } - } - private startSpinner(text: string): void { - this.spinnerText = text; - if (isDebug) return; - this.spinnerActive = true; - this.spinner.start(text); - } - - private updateSpinner(text: string): void { - this.spinnerText = text; - if (this.spinnerActive) this.spinner.resetMessage(text); - } - - private stopSpinner(text?: string): void { - if (!this.spinnerActive) return; - this.spinnerActive = false; - this.spinner.stop(text); - this.spinnerText = ''; + constructor(private readonly context: $TSContext, private readonly logger: SpinningLogger) { + this.cfnService = new CloudFormationService(this.logger); + this.configService = new AmplifyConfigService(); } - /** - * Detect drift for the current Amplify project - * Orchestrates the drift detection process using services - */ - public async detect(): Promise { - // Validate Amplify project exists and is initialized + /** Detects drift for the current Amplify project. */ + public async detect(): Promise { this.configService.validateAmplifyProject(); - this.printer.debug('Amplify project validated'); + this.logger.debug('Amplify project validated'); - // Get stack name and project info, init environment info - // constructExeInfo is necessary to initialize env info used in getClient's CloudFormation object this.context.amplify.constructExeInfo(this.context); const stackName = this.configService.getRootStackName(); - const projectName = this.configService.getProjectName(); - this.printer.debug(`Root Stack: ${stackName}`); - this.printer.info(chalk.cyan.bold(`Started Drift Detection for Project: ${projectName}`)); - this.printer.debug('Phase 1: CloudFormation drift \nPhase 2: Template changes \nPhase 3: Local vs cloud files\n'); + this.logger.debug(`Root Stack: ${stackName}`); - // Get CloudFormation client const cfn = await this.cfnService.getClient(this.context); - this.printer.debug('CloudFormation client initialized'); + this.logger.debug('CloudFormation client initialized'); - // Validate root stack exists if (!(await this.cfnService.validateStackExists(cfn, stackName))) { throw new AmplifyError('StackNotFoundError', { message: `Stack ${stackName} does not exist.`, @@ -112,20 +73,18 @@ export class AmplifyDriftDetector { }); } - // Start drift detection phases with spinner let phase1Results: CloudFormationDriftResults; let phase2Results: TemplateDriftResults; let phase3Results: LocalDriftResults; - try { - // Sync cloud backend from S3 before running any phases - this.startSpinner('Syncing cloud backend from S3...'); - const syncSuccess = await this.cfnService.syncCloudBackendFromS3(this.context); + this.logger.debug('Syncing cloud backend'); + const syncSuccess = await this.cfnService.syncCloudBackendFromS3(this.context); - // Phase 1: Detect CloudFormation drift recursively - this.updateSpinner('Detecting CloudFormation drift...'); - phase1Results = await detectStackDriftRecursive(cfn, stackName, this.printer); - this.printer.debug('Phase 1 complete'); + try { + this.logger.push('CloudFormation drift'); + phase1Results = await detectStackDriftRecursive(cfn, stackName, this.logger); + this.logger.pop(); + this.logger.debug('Phase 1 complete'); if (!syncSuccess) { phase2Results = { @@ -137,62 +96,51 @@ export class AmplifyDriftDetector { skipped: true, skipReason: 'S3 backend sync failed - cannot compare local vs cloud', }; - this.printer.warn(chalk.yellow('Cloud backend sync failed - template drift and local drift will be skipped')); + this.logger.warn(chalk.yellow('Cloud backend sync failed - template drift and local drift will be skipped')); } else { - this.printer.debug('S3 sync completed successfully'); - - // Phase 2: Template drift detection - this.updateSpinner('Analyzing template changes...'); - this.printer.debug('Checking for template drift using changesets...'); - phase2Results = await detectTemplateDrift(stackName, this.printer, cfn); - this.printer.debug(`Phase 2 complete: ${phase2Results.changes.length} changes`); - - // Phase 3: Local drift detection - this.updateSpinner('Checking local changes...'); - this.printer.debug('Checking local files vs cloud backend...'); + this.logger.debug('S3 sync completed successfully'); + + // eslint-disable-next-line spellcheck/spell-checker + this.logger.push('Template changes'); + // eslint-disable-next-line spellcheck/spell-checker + this.logger.debug('Checking for template drift using changesets...'); + phase2Results = await detectTemplateDrift(stackName, this.logger, cfn); + this.logger.pop(); + this.logger.debug(`Phase 2 complete: ${phase2Results.changes.length} changes`); + + this.logger.push('Local changes'); + this.logger.debug('Checking local files vs cloud backend...'); phase3Results = await detectLocalDrift(this.context); - this.printer.debug('Phase 3 complete'); + this.logger.pop(); + this.logger.debug('Phase 3 complete'); } - - this.stopSpinner('Drift detection completed'); } catch (error) { - this.stopSpinner(); + this.logger.pop(); throw error; } const driftReport = createUnifiedCategoryView(phase1Results, phase2Results, phase3Results); - if (driftReport) { - this.printer.info(driftReport); - this.printer.info(chalk.yellow('Drift detected')); - } else { - this.printer.info(chalk.green('No drift detected')); - } - const hasAnyErrors = phase1Results.incomplete || phase2Results.skipped || phase3Results.skipped; if (hasAnyErrors) { - this.printer.warn(chalk.yellow('Drift detection encountered errors, results may be incomplete:')); + this.logger.warn(chalk.yellow('Drift detection encountered errors, results may be incomplete:')); if (phase1Results.incomplete) { - this.printer.warn( + this.logger.warn( chalk.yellow(`CloudFormation drift check incomplete - ${phase1Results.skippedStacks.length} nested stack(s) skipped`), ); for (const skippedStack of phase1Results.skippedStacks) { - this.printer.debug(` - ${skippedStack}`); + this.logger.debug(` - ${skippedStack}`); } } if (phase2Results.skipped) { - this.printer.warn(chalk.yellow(`Template drift error: ${phase2Results.skipReason}`)); + this.logger.warn(chalk.yellow(`Template drift error: ${phase2Results.skipReason}`)); } if (phase3Results.skipped) { - this.printer.warn(chalk.yellow(`Local drift error: ${phase3Results.skipReason}`)); + this.logger.warn(chalk.yellow(`Local drift error: ${phase3Results.skipReason}`)); } - this.printer.debug('Exit code 1: Incomplete drift detection - cannot guarantee no drift'); - return 1; - } - if (driftReport) { - this.printer.debug('Exit code 1: drift detected across phases'); - return 1; + this.logger.debug('Exit code 1: Incomplete drift detection - cannot guarantee no drift'); + return { code: 1, report: driftReport ?? undefined }; } - return 0; + return { code: driftReport ? 1 : 0, report: driftReport }; } } diff --git a/packages/amplify-cli/src/commands/gen2-migration.ts b/packages/amplify-cli/src/commands/gen2-migration.ts index 725fcd28fc7..7ede1d1bbdd 100644 --- a/packages/amplify-cli/src/commands/gen2-migration.ts +++ b/packages/amplify-cli/src/commands/gen2-migration.ts @@ -1,17 +1,31 @@ import { AmplifyMigrationCloneStep } from './gen2-migration/clone'; import { $TSContext, AmplifyError } from '@aws-amplify/amplify-cli-core'; import { AmplifyMigrationStep } from './gen2-migration/_step'; -import { AmplifyMigrationOperation } from './gen2-migration/_operation'; -import { printer, prompter } from '@aws-amplify/amplify-prompts'; +import { printer, prompter, isDebug } from '@aws-amplify/amplify-prompts'; import { AmplifyMigrationDecommissionStep } from './gen2-migration/decommission'; import { AmplifyMigrationGenerateStep } from './gen2-migration/generate'; import { AmplifyMigrationLockStep } from './gen2-migration/lock'; import { AmplifyMigrationRefactorStep } from './gen2-migration/refactor'; import { AmplifyMigrationShiftStep } from './gen2-migration/shift'; +import { SpinningLogger } from './gen2-migration/_spinning-logger'; import { stateManager } from '@aws-amplify/amplify-cli-core'; import { AmplifyClient, GetAppCommand } from '@aws-sdk/client-amplify'; import chalk from 'chalk'; import { AmplifyMigrationAssessor } from './gen2-migration/assess'; +import { Plan } from './gen2-migration/_plan'; + +/** Re-export so existing consumers can migrate incrementally. */ +export { SpinningLogger }; + +/** + * @deprecated Use SpinningLogger instead. Kept for backward compatibility + * with the old refactor code path. + */ +export class Logger extends SpinningLogger { + constructor(stepName: string, appName: string, envName: string) { + super(`${stepName}] [${appName}/${envName}`, { debug: true }); + } +} const STEPS = { clone: { @@ -32,6 +46,7 @@ const STEPS = { }, refactor: { class: AmplifyMigrationRefactorStep, + // eslint-disable-next-line spellcheck/spell-checker description: 'Move stateful resources from your Gen1 environment to your newly deployed Gen2 branch', }, shift: { @@ -40,54 +55,6 @@ const STEPS = { }, }; -/** - * Logging utility that wraps the standard printer with additional gen2-migration specific context. - */ -export class Logger { - constructor(private readonly stepName: string, private readonly appName: string, private readonly envName: string) {} - - /** - * Logs a message with a visual envelope border for major section headers - */ - public envelope(message: string) { - printer.info(chalk.cyan(this._message(message, '→'))); - } - - /** - * Logs informational messages that are always displayed to the user. - */ - public info(message: string): void { - printer.info(this._message(message, '•')); - } - - /** - * Logs debug-level messages that are shown only if the command is executed with --debug. - */ - public debug(message: string): void { - printer.debug(this._message(message, '·')); - } - - /** - * Logs warning messages that are always displayed to the user. - */ - public warn(message: string): void { - printer.warn(this._message(message, '·')); - } - - /** - * Alias to `warn`. - */ - public warning(message: string): void { - printer.warn(this._message(message, '·')); - } - - private _message(message: string, prefix: string) { - return `[${new Date().toISOString()}] [${chalk.bold(this.stepName)}] [${chalk.blue( - `${this.appName}/${this.envName}`, - )}] ${prefix} ${message}`; - } -} - export const run = async (context: $TSContext) => { const stepName = (context.input.subCommands ?? [])[0]; const step = STEPS[stepName]; @@ -150,7 +117,7 @@ export const run = async (context: $TSContext) => { const stackName = stateManager.getTeamProviderInfo()[envName].awscloudformation.StackName; const region = stateManager.getTeamProviderInfo()[envName].awscloudformation.Region; - const logger = new Logger(stepName, appName, envName); + const logger = new SpinningLogger(`${stepName}] [${appName}/${envName}`, { debug: isDebug }); // Assess is not a migration step — handle it separately. if (stepName === 'assess') { @@ -161,39 +128,42 @@ export const run = async (context: $TSContext) => { const implementation: AmplifyMigrationStep = new step.class(logger, envName, appName, appId, stackName, region, context); - if (validationsOnly) { - await validate(implementation, rollingBack, logger, context); - return; - } - - printer.blankLine(); - printer.info( - chalk.yellow(`You are about to ${rollingBack ? 'rollback' : 'execute'} '${stepName}' on environment '${appId}/${envName}'.`), - ); - printer.blankLine(); - - printer.info(chalk.bold(chalk.underline('Operations Summary'))); + // Plan printer.blankLine(); + logger.start('Planning'); + let plan: Plan; + try { + plan = rollingBack ? await implementation.rollback() : await implementation.forward(); + logger.succeed('→ Planning complete'); + } catch (error: unknown) { + logger.failed('→ Planning failed'); + printer.blankLine(); + throw error; + } - for (const operation of rollingBack ? await implementation.rollback() : await implementation.execute()) { - for (const description of await operation.describe()) { - printer.info(`• ${description}`); + // Validate + if (!skipValidations) { + const passed = await plan.validate(); + if (!passed) { + const skipCommand = `amplify ${context.input.argv.join(' ').trim()} --skip-validations`; + printer.blankLine(); + throw new AmplifyError('MigrationError', { + message: 'Validations failed', + resolution: `Resolve the validation errors or skip them by running '${skipCommand}'`, + }); } } - printer.blankLine(); + if (validationsOnly) return; - printer.info(chalk.bold(chalk.underline('Implications'))); printer.blankLine(); - - const cachedStep = new CachedAmplifyMigrationStep(implementation); - - for (const implication of rollingBack ? await cachedStep.rollbackImplications() : await cachedStep.executeImplications()) { - printer.info(`• ${implication}`); - } - + printer.info( + chalk.yellow(`You are about to ${rollingBack ? 'rollback' : 'execute'} '${stepName}' on environment '${appId}/${envName}'.`), + ); printer.blankLine(); + await plan.describe(); + if (!rollingBack && stepName !== 'decommission') { printer.info(chalk.grey(`(You can rollback this command by running: 'amplify gen2-migration ${stepName} --rollback')`)); printer.blankLine(); @@ -210,73 +180,22 @@ export const run = async (context: $TSContext) => { printer.blankLine(); - if (!skipValidations) { - await validate(implementation, rollingBack, logger, context); - printer.blankLine(); - } - - if (rollingBack) { - await runRollback(cachedStep, logger); - printer.blankLine(); - printer.success('Done'); - return; - } - try { - await runExecute(cachedStep, logger); - printer.blankLine(); - printer.success('Done'); + await plan.execute(); return; } catch (error: unknown) { - if (!disableAutoRollback) { - printer.error(`Execution failed: ${error}`); + if (!rollingBack && !disableAutoRollback) { + printer.blankLine(); + printer.error(`Failed: ${error}`); printer.blankLine(); - await runRollback(cachedStep, logger); + const rollbackPlan = await implementation.rollback(); + await rollbackPlan.execute(); } throw error; } }; -async function validate(step: AmplifyMigrationStep, rollback: boolean, logger: Logger, context: $TSContext) { - logger.envelope('Performing validations'); - try { - if (rollback) { - await step.rollbackValidate(); - } else { - await step.executeValidate(); - } - } catch (e) { - const skipValidationsCommand = `amplify ${context.input.argv.join(' ').trim()} --skip-validations`; - throw new AmplifyError('MigrationError', { - message: `Validations failed: ${e.message}`, - resolution: `Resolve the validation errors or skip them by running '${skipValidationsCommand}'`, - }); - } - logger.envelope('Validations complete'); -} - -async function runOperations(operations: AmplifyMigrationOperation[]) { - for (const operation of operations) { - await operation.validate(); - } - for (const operation of operations) { - await operation.execute(); - } -} - -async function runRollback(step: CachedAmplifyMigrationStep, logger: Logger) { - logger.envelope('Rolling back'); - await runOperations(await step.rollback()); - logger.envelope('Rollback complete'); -} - -async function runExecute(step: CachedAmplifyMigrationStep, logger: Logger) { - logger.envelope('Executing'); - await runOperations(await step.execute()); - logger.envelope('Execution complete'); -} - function shiftParams(context) { delete context.parameters.first; delete context.parameters.second; @@ -301,39 +220,3 @@ function displayHelp(context: $TSContext) { context.amplify.showHelp('amplify gen2-migration ', commands); printer.info(''); } - -/** - * Convenience class that provides caching to step methods. - * Return values are constructed and stored on the first invocation; subsequent invocations return - * the cached values. - * - * This allows our gen2-migration.ts dispatcher to invoke step methods at will and on-demand. - */ -class CachedAmplifyMigrationStep { - private _executionOperations: AmplifyMigrationOperation[]; - private _rollbackOperations: AmplifyMigrationOperation[]; - - constructor(private readonly step: AmplifyMigrationStep) {} - - public async execute(): Promise { - if (!this._executionOperations) { - this._executionOperations = await this.step.execute(); - } - return this._executionOperations; - } - - public async rollback(): Promise { - if (!this._rollbackOperations) { - this._rollbackOperations = await this.step.rollback(); - } - return this._rollbackOperations; - } - - public async executeImplications() { - return this.step.executeImplications(); - } - - public async rollbackImplications() { - return this.step.rollbackImplications(); - } -} diff --git a/packages/amplify-cli/src/commands/gen2-migration/_operation.ts b/packages/amplify-cli/src/commands/gen2-migration/_operation.ts index 78bd7c3e747..2ffe95c0918 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/_operation.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/_operation.ts @@ -1,25 +1,50 @@ +/** + * Result of a validation check. + */ +export interface ValidationResult { + /** + * Whether the validation passed. + */ + readonly valid: boolean; + + /** + * Optional detailed output shown below the status line. + */ + readonly report?: string; +} + +/** + * Declarative validation: description for the spinner + a run callback. + * The Plan drives the lifecycle (push description → run → pop). + */ +export interface Validation { + /** + * Text shown on the spinner while this validation runs. + */ + readonly description: string; + + /** + * Executes the validation. + */ + run(): Promise; +} + /** * Interface for atomic operations that can be executed as part of a migration step. */ export interface AmplifyMigrationOperation { /** * Returns human-readable strings describing what the operation will do. - * Used to display an operations summary to users before execution. - * Each string should be a concise, actionable description (e.g., "Enable deletion protection for table 'MyTable'"). */ describe(): Promise; /** - * Validates that this operation can proceed without causing harm. - * Called on ALL operations before any execute() runs. - * Throws AmplifyError if validation fails. + * Returns a validation to run before execution, or undefined if none. */ - validate(): Promise; + validate(): Validation | undefined; /** - * Executes the operation. - * Should be idempotent where possible and throw descriptive errors on failure. - * Called sequentially for each operation after user confirmation. + * Executes the operation. Should be idempotent where possible. */ execute(): Promise; } diff --git a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts new file mode 100644 index 00000000000..5d42dfe4e27 --- /dev/null +++ b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts @@ -0,0 +1,116 @@ +import { AmplifyMigrationOperation } from './_operation'; +import { SpinningLogger } from './_spinning-logger'; +import { printer } from '@aws-amplify/amplify-prompts'; +import chalk from 'chalk'; +import CLITable from 'cli-table3'; + +/** Internal type used only for rendering the validation summary table. */ +interface ValidationSummaryEntry { + readonly description: string; + readonly valid: boolean; +} + +/** + * Configuration for constructing a Plan. + */ +export interface PlanProps { + readonly operations: AmplifyMigrationOperation[]; + readonly logger: SpinningLogger; + readonly title: string; + readonly implications?: string[]; +} + +/** + * Encapsulates a list of operations and exposes describe/validate/execute. + * Individual operations are an internal detail. + */ +export class Plan { + private readonly operations: AmplifyMigrationOperation[]; + private readonly logger: SpinningLogger; + private readonly title: string; + private readonly implications: string[]; + + constructor(props: PlanProps) { + this.operations = props.operations; + this.logger = props.logger; + this.title = props.title; + this.implications = props.implications ?? []; + } + + /** + * Runs validations with spinner context, renders the summary table, + * and returns whether all validations passed. + */ + public async validate(): Promise { + this.logger.start('Validating'); + const entries: ValidationSummaryEntry[] = []; + for (const op of this.operations) { + const validation = op.validate(); + if (!validation) continue; + this.logger.push(validation.description); + const result = await validation.run(); + this.logger.pop(); + entries.push({ description: validation.description, valid: result.valid }); + } + this.logger.succeed('→ Validating complete'); + this.renderValidationResults(entries); + return entries.every((e) => e.valid); + } + + /** + * Renders the operations summary and implications to the terminal. + */ + public async describe(): Promise { + const descriptions: string[] = []; + for (const op of this.operations) { + descriptions.push(...(await op.describe())); + } + + if (descriptions.length > 0) { + printer.info(chalk.bold(chalk.underline('Operations Summary'))); + printer.blankLine(); + for (const description of descriptions) { + printer.info(`• ${description}`); + } + printer.blankLine(); + } + + if (this.implications.length > 0) { + printer.info(chalk.bold(chalk.underline('Implications'))); + printer.blankLine(); + for (const implication of this.implications) { + printer.info(`• ${implication}`); + } + printer.blankLine(); + } + } + + /** + * Executes all operations sequentially. + */ + public async execute(): Promise { + this.logger.info(this.title); + for (const op of this.operations) { + await op.execute(); + } + printer.blankLine(); + printer.success('Done'); + } + + private renderValidationResults(entries: ValidationSummaryEntry[]): void { + if (entries.length === 0) return; + + printer.blankLine(); + printer.info(chalk.bold(chalk.underline('Validations Summary'))); + printer.blankLine(); + const table = new CLITable({ + head: ['Validation', 'Status'], + style: { head: [] }, + }); + for (const entry of entries) { + const status = entry.valid ? chalk.green('✔ Passed') : chalk.red('✘ Failed'); + table.push([entry.description, status]); + } + printer.info(table.toString()); + } +} diff --git a/packages/amplify-cli/src/commands/gen2-migration/_spinning-logger.ts b/packages/amplify-cli/src/commands/gen2-migration/_spinning-logger.ts new file mode 100644 index 00000000000..bc799a4ad00 --- /dev/null +++ b/packages/amplify-cli/src/commands/gen2-migration/_spinning-logger.ts @@ -0,0 +1,151 @@ +import { printer, AmplifySpinner, isDebug as globalIsDebug } from '@aws-amplify/amplify-prompts'; +import chalk from 'chalk'; + +/** + * Logger that manages a spinner in normal mode and falls back to + * plain text output in debug mode. Consumers use info/debug/warn + * for messages and push/pop to manage hierarchical spinner context. + */ +export class SpinningLogger { + private static readonly SEPARATOR = ' → '; + private readonly segments: string[] = []; + private readonly spinner: AmplifySpinner; + private readonly debugMode: boolean; + private spinnerActive = false; + + constructor(private readonly prefix: string, options?: { readonly debug?: boolean }) { + this.debugMode = options?.debug ?? globalIsDebug; + this.spinner = new AmplifySpinner(); + } + + /** + * Starts the spinner with an initial segment (no-op in debug mode). + */ + public start(text: string): void { + this.segments.length = 0; + this.segments.push(text); + if (this.debugMode) { + this.printLine(text, '→'); + return; + } + this.spinnerActive = true; + this.spinner.start(this.buildSpinnerText()); + } + + /** + * Stops the spinner and clears all segments. + */ + public stop(): void { + this.segments.length = 0; + if (!this.debugMode && this.spinnerActive) { + this.spinner.stop(); + this.spinnerActive = false; + } + } + + /** + * Stops the spinner and prints the phase text as a permanent success line. + */ + public succeed(text: string): void { + this.segments.length = 0; + if (this.debugMode) { + this.printLine(text, '•'); + return; + } + if (this.spinnerActive) { + this.spinner.stop(text, true); + this.spinnerActive = false; + } + } + + /** + * Stops the spinner and prints the phase text as a permanent failure line. + */ + public failed(text: string): void { + this.segments.length = 0; + if (this.debugMode) { + this.printLine(text, '•'); + return; + } + if (this.spinnerActive) { + this.spinner.stop(text, false); + this.spinnerActive = false; + } + } + + /** + * Pushes a segment onto the context stack and updates the spinner. + */ + public push(text: string): void { + this.segments.push(text); + if (this.debugMode) { + this.printLine(text, '→'); + return; + } + if (this.spinnerActive) { + this.spinner.resetMessage(this.buildSpinnerText()); + } + } + + /** + * Pops the last segment from the context stack. + */ + public pop(): void { + this.segments.pop(); + if (!this.debugMode && this.spinnerActive && this.segments.length > 0) { + this.spinner.resetMessage(this.buildSpinnerText()); + } + } + + /** + * Logs an informational message. Pauses the spinner if active. + */ + public info(message: string): void { + this.withSpinnerPaused(() => this.printLine(message, '•')); + } + + /** + * Logs a debug message (only visible in debug mode). + */ + public debug(message: string): void { + if (this.debugMode) { + printer.debug(this.formatLine(message, '·')); + } + } + + /** + * Logs a warning message. Pauses the spinner if active. + */ + public warn(message: string): void { + if (this.debugMode) { + printer.warn(this.formatLine(message, '·')); + return; + } + this.withSpinnerPaused(() => printer.warn(this.formatLine(message, '·'))); + } + + /** + * Temporarily pauses the spinner, runs fn, then resumes. + */ + public withSpinnerPaused(fn: () => void): void { + if (!this.spinnerActive || this.debugMode) { + fn(); + return; + } + this.spinner.stop(); + fn(); + this.spinner.start(this.buildSpinnerText()); + } + + private buildSpinnerText(): string { + return this.segments.join(SpinningLogger.SEPARATOR); + } + + private formatLine(message: string, bullet: string): string { + return `[${new Date().toISOString()}] [${chalk.bold(this.prefix)}] ${bullet} ${message}`; + } + + private printLine(message: string, bullet: string): void { + printer.info(this.formatLine(message, bullet)); + } +} diff --git a/packages/amplify-cli/src/commands/gen2-migration/_step.ts b/packages/amplify-cli/src/commands/gen2-migration/_step.ts index 3fd77dda311..1c274573722 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/_step.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/_step.ts @@ -1,14 +1,13 @@ import { $TSContext } from '@aws-amplify/amplify-cli-core'; -import { Logger } from '../gen2-migration'; -import { AmplifyMigrationOperation } from './_operation'; +import { SpinningLogger } from './_spinning-logger'; +import { Plan } from './_plan'; /** * Abstract base class that defines the lifecycle contract for all migration steps. - * Subcommands must extend this base class. */ export abstract class AmplifyMigrationStep { constructor( - protected readonly logger: Logger, + protected readonly logger: SpinningLogger, protected readonly currentEnvName: string, protected readonly appName: string, protected readonly appId: string, @@ -18,42 +17,12 @@ export abstract class AmplifyMigrationStep { ) {} /** - * Returns human-readable strings describing the implications and side effects of executing forward operations. - * Displayed to users before confirmation prompt to help them understand the impact of the migration step. + * Returns a Plan for forward execution. */ - public abstract executeImplications(): Promise; + public abstract forward(): Promise; /** - * Returns human-readable strings describing the implications and side effects of executing rollback operations. - * Displayed to users before confirmation prompt to help them understand the impact of reverting the migration step. + * Returns a Plan for rollback. */ - public abstract rollbackImplications(): Promise; - - /** - * Validates prerequisites before executing forward operations. - * Should check environment state, resource availability, and any step-specific requirements. - * Throws errors if validation fails. - */ - public abstract executeValidate(): Promise; - - /** - * Validates prerequisites before executing rollback operations. - * Ensures the environment is in a state where rollback can proceed safely. - * Throws errors if validation fails. - */ - public abstract rollbackValidate(): Promise; - - /** - * Returns an array of operations to perform for forward execution. - * Each operation describes what it will do and contains the logic to execute it. - * Operations are executed sequentially after user confirmation. - */ - public abstract execute(): Promise; - - /** - * Returns an array of operations to perform for rollback. - * Reverses the changes made by execute(). - * Operations are executed sequentially after user confirmation. - */ - public abstract rollback(): Promise; + public abstract rollback(): Promise; } diff --git a/packages/amplify-cli/src/commands/gen2-migration/_validations.ts b/packages/amplify-cli/src/commands/gen2-migration/_validations.ts index 30c047ca8ce..eb3cf0ff775 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/_validations.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/_validations.ts @@ -11,38 +11,36 @@ import { STATEFUL_RESOURCES } from './stateful-resources'; import CLITable from 'cli-table3'; import Bottleneck from 'bottleneck'; import execa from 'execa'; -import { Logger } from '../gen2-migration'; +import { SpinningLogger } from './_spinning-logger'; import chalk from 'chalk'; import { printer } from '@aws-amplify/amplify-prompts'; import { extractCategory } from './categories'; export class AmplifyGen2MigrationValidations { - private limiter = new Bottleneck({ + private readonly limiter = new Bottleneck({ maxConcurrent: 3, minTime: 50, }); constructor( - private readonly logger: Logger, + private readonly logger: SpinningLogger, private readonly rootStackName: string, private readonly envName, private readonly context: $TSContext, ) {} public async validateDrift(): Promise { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const code = await new AmplifyDriftDetector(this.context, this.logger).detect(); - if (code !== 0) { + const result = await new AmplifyDriftDetector(this.context, this.logger).detect(); + if (result.code !== 0) { throw new AmplifyError('MigrationError', { - message: 'Drift detected', - resolution: 'Inspect the output above and resolve the drift', + message: result.report ?? 'Drift detected', + resolution: 'Inspect the drift report above and resolve the drift', }); } - this.logger.info(chalk.green('No drift detected ✔ ')); } public async validateWorkingDirectory(): Promise { - this.logger.info('Inspecting local directory state for uncommitted changes'); + this.logger.debug('Inspecting local directory state for uncommitted changes'); const { stdout: statusOutput } = await execa('git', ['status', '--porcelain']); if (statusOutput.trim()) { @@ -51,12 +49,10 @@ export class AmplifyGen2MigrationValidations { resolution: 'Commit or stash your changes before proceeding with migration.', }); } - - this.logger.info(chalk.green('Local working directory is clean ✔')); } public async validateDeploymentStatus(): Promise { - this.logger.info(`Inspecting root stack '${this.rootStackName}' status`); + this.logger.debug(`Inspecting root stack '${this.rootStackName}' status`); const cfnClient = new CloudFormationClient({}); const response = await cfnClient.send(new DescribeStacksCommand({ StackName: this.rootStackName })); @@ -68,7 +64,6 @@ export class AmplifyGen2MigrationValidations { } const stackStatus = response.Stacks[0].StackStatus; - // Note: UPDATE_ROLLBACK_COMPLETE isn't an expected state - only being added in the edge case of resuming migration from a failed state const validStatuses = ['UPDATE_COMPLETE', 'CREATE_COMPLETE', 'UPDATE_ROLLBACK_COMPLETE']; if (!validStatuses.includes(stackStatus)) { @@ -77,8 +72,6 @@ export class AmplifyGen2MigrationValidations { resolution: 'Complete the deployment before proceeding.', }); } - - this.logger.info(chalk.green(`Root stack '${this.rootStackName}' status is ${stackStatus} ✔`)); } public async validateDeploymentVersion(): Promise { @@ -102,7 +95,6 @@ export class AmplifyGen2MigrationValidations { const statefulRemoves: Array<{ category: string; resourceType: string; physicalId: string }> = []; for (const change of changeSet.Changes) { if (change.Type === 'Resource' && change.ResourceChange?.Action === 'Remove' && change.ResourceChange?.ResourceType) { - // Skip deployment bucket only when explicitly requested (e.g., during decommission) if ( deploymentBucketName && change.ResourceChange.ResourceType === 'AWS::S3::Bucket' && @@ -160,7 +152,7 @@ export class AmplifyGen2MigrationValidations { public async validateLockStatus(): Promise { const cfnClient = new CloudFormationClient({}); - this.logger.info(`Inspecting stack policy for ${this.rootStackName}`); + this.logger.debug(`Inspecting stack policy for ${this.rootStackName}`); const { StackPolicyBody } = await cfnClient.send(new GetStackPolicyCommand({ StackName: this.rootStackName })); if (!StackPolicyBody) { @@ -189,7 +181,7 @@ export class AmplifyGen2MigrationValidations { }); } - this.logger.info(chalk.green(`Stack ${this.rootStackName} is locked ✔`)); + this.logger.debug(chalk.green(`Stack ${this.rootStackName} is locked ✔`)); } private async getStatefulResources( diff --git a/packages/amplify-cli/src/commands/gen2-migration/assess.ts b/packages/amplify-cli/src/commands/gen2-migration/assess.ts index 2630c40a211..f05c59f2569 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/assess.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/assess.ts @@ -2,7 +2,7 @@ import { $TSContext } from '@aws-amplify/amplify-cli-core'; import { Assessment } from './_assessment'; import { AmplifyMigrationGenerateStep } from './generate'; import { AmplifyMigrationRefactorStep } from './refactor'; -import { Logger } from '../gen2-migration'; +import { SpinningLogger } from '../gen2-migration'; /** * Evaluates migration readiness by calling assess() on the generate @@ -10,7 +10,7 @@ import { Logger } from '../gen2-migration'; */ export class AmplifyMigrationAssessor { constructor( - private readonly logger: Logger, + private readonly logger: SpinningLogger, private readonly currentEnvName: string, private readonly appName: string, private readonly appId: string, diff --git a/packages/amplify-cli/src/commands/gen2-migration/clone.ts b/packages/amplify-cli/src/commands/gen2-migration/clone.ts index ec2d3a59195..7b6b908e3ee 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/clone.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/clone.ts @@ -1,28 +1,12 @@ import { AmplifyMigrationStep } from './_step'; -import { AmplifyMigrationOperation } from './_operation'; +import { Plan } from './_plan'; export class AmplifyMigrationCloneStep extends AmplifyMigrationStep { - public async executeImplications(): Promise { + public async forward(): Promise { throw new Error('Method not implemented.'); } - public async rollbackImplications(): Promise { - throw new Error('Method not implemented.'); - } - - public async executeValidate(): Promise { - throw new Error('Method not implemented.'); - } - - public async rollbackValidate(): Promise { - throw new Error('Method not implemented.'); - } - - public async execute(): Promise { - throw new Error('Method not implemented.'); - } - - public async rollback(): Promise { + public async rollback(): Promise { throw new Error('Not Implemented'); } } diff --git a/packages/amplify-cli/src/commands/gen2-migration/decommission.ts b/packages/amplify-cli/src/commands/gen2-migration/decommission.ts index c51ee6b6347..616fcdca872 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/decommission.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/decommission.ts @@ -1,5 +1,6 @@ import { AmplifyMigrationStep } from './_step'; -import { AmplifyMigrationOperation } from './_operation'; +import { AmplifyMigrationOperation, ValidationResult } from './_operation'; +import { Plan } from './_plan'; import { AmplifyGen2MigrationValidations } from './_validations'; import { CloudFormationClient, @@ -16,38 +17,23 @@ import { invokeDeleteEnvParamsFromService } from '../../extensions/amplify-helpe import { deleteHoldingStack, HOLDING_STACK_SUFFIX } from './refactor/holding-stack'; export class AmplifyMigrationDecommissionStep extends AmplifyMigrationStep { - public async executeImplications(): Promise { - return ['Delete the Gen1 environment']; - } - - public async rollbackImplications(): Promise { - throw new Error('Method not implemented.'); - } - - public async executeValidate(): Promise { - const changeSet = await this.createChangeSet(); - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const validations = new AmplifyGen2MigrationValidations(this.logger, this.rootStackName, this.currentEnvName, this.context); - // eslint-disable-next-line spellcheck/spell-checker - await validations.validateStatefulResources(changeSet, true); - } - - public async rollbackValidate(): Promise { - throw new Error('Method not implemented.'); - } - - public async execute(): Promise { + public async forward(): Promise { const cfnClient = new CloudFormationClient({ region: this.region }); const holdingStacks = await this.findHoldingStacks(cfnClient); const operations: AmplifyMigrationOperation[] = []; + // Validation-only operation (formerly in executeValidate) + operations.push({ + describe: async () => [], + validate: () => ({ description: 'Stateful resources', run: () => this.validateStatefulResources() }), + // eslint-disable-next-line @typescript-eslint/no-empty-function + execute: async () => {}, + }); + for (const stackName of holdingStacks) { operations.push({ - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => [`Delete holding stack: ${stackName}`], execute: async () => { this.logger.info(`Deleting holding stack: ${stackName}`); @@ -58,9 +44,7 @@ export class AmplifyMigrationDecommissionStep extends AmplifyMigrationStep { } operations.push({ - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => ['Delete the Gen1 environment'], execute: async () => { this.logger.info(`Starting decommission of environment: ${this.currentEnvName}`); @@ -74,13 +58,33 @@ export class AmplifyMigrationDecommissionStep extends AmplifyMigrationStep { }, }); - return operations; + return new Plan({ + operations, + logger: this.logger, + title: 'Execute', + implications: [ + 'The Gen1 CloudFormation stack and all its resources will be permanently deleted', + 'This operation cannot be rolled back', + ], + }); } - public async rollback(): Promise { + public async rollback(): Promise { throw new Error('Not Implemented'); } + private async validateStatefulResources(): Promise { + try { + const changeSet = await this.createChangeSet(); + const validations = new AmplifyGen2MigrationValidations(this.logger, this.rootStackName, this.currentEnvName, this.context); + // eslint-disable-next-line spellcheck/spell-checker + await validations.validateStatefulResources(changeSet, true); + return { valid: true }; + } catch (e) { + return { valid: false, report: e.message }; + } + } + private async findHoldingStacks(cfnClient: CloudFormationClient): Promise { const holdingStacks: string[] = []; const paginator = paginateListStacks( diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate.ts b/packages/amplify-cli/src/commands/gen2-migration/generate.ts index 69aa3c5841f..3676dfe38d6 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate.ts @@ -3,7 +3,8 @@ import os from 'node:os'; import fs from 'node:fs/promises'; import execa from 'execa'; import { AmplifyMigrationStep } from './_step'; -import { AmplifyMigrationOperation } from './_operation'; +import { AmplifyMigrationOperation, ValidationResult } from './_operation'; +import { Plan } from './_plan'; import { AmplifyGen2MigrationValidations } from './_validations'; import { AwsClients } from './aws-clients'; import { Gen1App } from './generate/_infra/gen1-app'; @@ -46,46 +47,16 @@ export class AmplifyMigrationGenerateStep extends AmplifyMigrationStep { case 'api:API Gateway': case 'analytics:Kinesis': case 'function:Lambda': - assessment.record('generate', resource, { supported: true }); + assessment.record('generate', resource, { supported: true, notes: [] }); break; case 'unsupported': - assessment.record('generate', resource, { supported: false }); + assessment.record('generate', resource, { supported: false, notes: [] }); break; } } } - public async executeImplications(): Promise { - return ['TODO']; - } - - public async rollbackImplications(): Promise { - throw new Error('Method not implemented.'); - } - - public async executeValidate(): Promise { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const validations = new AmplifyGen2MigrationValidations(this.logger, this.rootStackName, this.currentEnvName, this.context); - await validations.validateLockStatus(); - await validations.validateWorkingDirectory(); - } - - public async rollbackValidate(): Promise { - throw new Error('Method not implemented.'); - } - - /** - * Assembles all category generators based on the Gen1 app's - * amplify-meta.json and returns the full list of migration operations. - * - * Uses discover() to iterate all resources, then dispatches by - * (category, service) using the same GENERATE_SUPPORTED map that - * assess() uses. Unsupported resources are skipped. - * - * Operations are returned — not executed — so the parent dispatcher - * can display descriptions to the user before confirmation. - */ - public async execute(): Promise { + public async forward(): Promise { const clients = new AwsClients({ region: this.region }); const gen1App = await Gen1App.create({ appId: this.appId, region: this.region, envName: this.currentEnvName, clients }); @@ -177,14 +148,23 @@ export class AmplifyMigrationGenerateStep extends AmplifyMigrationStep { generators.push(new AmplifyYmlGenerator(gen1App)); generators.push(new GitIgnoreGenerator()); - // No-op operation shown first so the user sees "Delete amplify/" at the top. - // The actual deletion happens in the post-generation operation below. const operations: AmplifyMigrationOperation[] = [ + // Validation-only operations (formerly in executeValidate) + { + describe: async () => [], + validate: () => ({ description: 'Lock status', run: () => this.validateLockStatus() }), + // eslint-disable-next-line @typescript-eslint/no-empty-function + execute: async () => {}, + }, { - validate: async () => { - return; - }, - describe: async () => ['Delete amplify/'], + describe: async () => [], + validate: () => ({ description: 'Working directory', run: () => this.validateWorkingDirectory() }), + // eslint-disable-next-line @typescript-eslint/no-empty-function + execute: async () => {}, + }, + { + validate: () => undefined, + describe: async () => [`Delete directory: ${path.join(process.cwd(), 'amplify')}`], // eslint-disable-next-line @typescript-eslint/no-empty-function execute: async () => {}, }, @@ -197,9 +177,7 @@ export class AmplifyMigrationGenerateStep extends AmplifyMigrationStep { // Post-generation: replace local amplify folder. operations.push({ - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => [], execute: async () => { const cwd = process.cwd(); @@ -213,9 +191,7 @@ export class AmplifyMigrationGenerateStep extends AmplifyMigrationStep { // Post-generation: reinstall dependencies. operations.push({ - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => ['Install Gen2 dependencies'], execute: async () => { const cwd = process.cwd(); @@ -237,12 +213,37 @@ export class AmplifyMigrationGenerateStep extends AmplifyMigrationStep { }, }); - return operations; + return new Plan({ + operations, + logger: this.logger, + title: 'Execute', + implications: ["Your local 'amplify/' directory will be replaced with Gen2 code", 'Dependencies will be reinstalled'], + }); } - public async rollback(): Promise { + public async rollback(): Promise { throw new Error('Not Implemented'); } + + private async validateLockStatus(): Promise { + try { + const validations = new AmplifyGen2MigrationValidations(this.logger, this.rootStackName, this.currentEnvName, this.context); + await validations.validateLockStatus(); + return { valid: true }; + } catch (e) { + return { valid: false, report: e.message }; + } + } + + private async validateWorkingDirectory(): Promise { + try { + const validations = new AmplifyGen2MigrationValidations(this.logger, this.rootStackName, this.currentEnvName, this.context); + await validations.validateWorkingDirectory(); + return { valid: true }; + } catch (e) { + return { valid: false, report: e.message }; + } + } } /** diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify.yml.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify.yml.generator.ts index 4811add6975..d305e4a198a 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify.yml.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify.yml.generator.ts @@ -34,9 +34,7 @@ export class AmplifyYmlGenerator implements Planner { return [ { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => [localFileExists ? 'Update amplify.yml with Gen2 build commands' : 'Generate amplify.yml'], execute: async () => { let parsed: unknown; diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/analytics/kinesis.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/analytics/kinesis.generator.ts index df990d95471..1830c534512 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/analytics/kinesis.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/analytics/kinesis.generator.ts @@ -54,9 +54,7 @@ export class AnalyticsKinesisGenerator implements Planner { return [ { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => [`Generate amplify/analytics/${this.resourceName}/resource.ts`], execute: async () => { const fileWriter = async (content: string, filePath: string) => { diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/auth/auth.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/auth/auth.generator.ts index d42011fde40..40dde0fe900 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/auth/auth.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/auth/auth.generator.ts @@ -86,9 +86,7 @@ export class AuthGenerator implements Planner { return [ { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => ['Generate amplify/auth/resource.ts'], execute: async () => { const nodes = this.defineAuth.render(renderOptions); diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/auth/reference-auth.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/auth/reference-auth.generator.ts index 19aaa314351..b9e2c302930 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/auth/reference-auth.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/auth/reference-auth.generator.ts @@ -44,9 +44,7 @@ export class ReferenceAuthGenerator implements Planner { return [ { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => ['Generate amplify/auth/resource.ts (reference auth)'], execute: async () => { const nodes = this.renderer.render(referenceAuth); diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/backend.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/backend.generator.ts index e84fc3752c5..b98acf2cb80 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/backend.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/backend.generator.ts @@ -110,9 +110,7 @@ export class BackendGenerator implements Planner { return [ { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => ['Generate amplify/backend.ts'], execute: async () => { const nodes: ts.Node[] = []; diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/custom-resources/custom.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/custom-resources/custom.generator.ts index f29c9a652d8..5d64b81b01a 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/custom-resources/custom.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/custom-resources/custom.generator.ts @@ -58,9 +58,7 @@ export class CustomResourceGenerator implements Planner { return [ { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => [`Migrate amplify/custom/${this.resourceName}/resource.ts`], execute: async () => { // Copy resource directory (excluding filtered files) diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/data/data.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/data/data.generator.ts index f1aeb412242..8d688127bc1 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/data/data.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/data/data.generator.ts @@ -62,9 +62,7 @@ export class DataGenerator implements Planner { return [ { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => ['Generate amplify/data/resource.ts'], execute: async () => { const nodes = this.defineData.render({ diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/function/function.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/function/function.generator.ts index 88f8ecf1f6d..9ec0b1b0057 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/function/function.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/function/function.generator.ts @@ -124,9 +124,7 @@ export class FunctionGenerator implements Planner { return [ { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => [`Generate amplify/${this.category}/${func.resourceName}/resource.ts`], execute: async () => { await this.generateResource(func); diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/package.json.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/package.json.generator.ts index cf705468aa7..ca49db3cc69 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/package.json.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/package.json.generator.ts @@ -16,9 +16,7 @@ export class BackendPackageJsonGenerator implements Planner { const filePath = path.join(this.outputDir, 'amplify', 'package.json'); return [ { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => ['Generate amplify/package.json'], execute: async () => { await fs.mkdir(path.dirname(filePath), { recursive: true }); diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/rest-api/rest-api.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/rest-api/rest-api.generator.ts index 9351f913bf0..7b684af285f 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/rest-api/rest-api.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/rest-api/rest-api.generator.ts @@ -39,9 +39,7 @@ export class RestApiGenerator implements Planner { return [ { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => [`Generate REST API ${restApi.apiName} in amplify/backend.ts`], execute: async () => { this.addRestApiImports(); diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/storage/dynamodb.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/storage/dynamodb.generator.ts index 4bc9ad9aece..1a929f85904 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/storage/dynamodb.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/storage/dynamodb.generator.ts @@ -34,9 +34,7 @@ export class DynamoDBGenerator implements Planner { return [ { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => [`Generate DynamoDB table ${this.resourceName} in amplify/backend.ts`], execute: async () => { const imports = this.renderer.requiredImports(); diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/storage/s3.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/storage/s3.generator.ts index 9c09ee9234d..d15b29bbba0 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/storage/s3.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/storage/s3.generator.ts @@ -109,9 +109,7 @@ export class S3Generator implements Planner { const storageIdentifier = bucketName; return { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => ['Generate amplify/storage/resource.ts'], execute: async () => { const accessPatterns = this.buildAccessPatterns(cliInputs); diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/tsconfig.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/tsconfig.generator.ts index bbbe04b2498..371fb274c37 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/tsconfig.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/tsconfig.generator.ts @@ -16,9 +16,7 @@ export class TsConfigGenerator implements Planner { const filePath = path.join(this.outputDir, 'amplify', 'tsconfig.json'); return [ { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => ['Generate amplify/tsconfig.json'], execute: async () => { const tsconfig = { diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/gitignore.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/gitignore.generator.ts index ef2725e8ad1..59e6a402b26 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/gitignore.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/gitignore.generator.ts @@ -15,9 +15,7 @@ export class GitIgnoreGenerator implements Planner { public async plan(): Promise { return [ { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => ['Update .gitignore with Gen2 entries'], execute: async () => { const gitignorePath = path.join(process.cwd(), '.gitignore'); diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/package.json.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/package.json.generator.ts index f4cc9f77969..045b91afa69 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/package.json.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/package.json.generator.ts @@ -71,9 +71,7 @@ export class RootPackageJsonGenerator implements Planner { return [ { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => ['Update package.json with Gen2 dependencies'], execute: async () => { const defaultName = 'amplify-gen2'; diff --git a/packages/amplify-cli/src/commands/gen2-migration/lock.ts b/packages/amplify-cli/src/commands/gen2-migration/lock.ts index 8a282ac2bb1..8d3d4c82873 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/lock.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/lock.ts @@ -1,11 +1,12 @@ import { AmplifyMigrationStep } from './_step'; -import { AmplifyMigrationOperation } from './_operation'; +import { AmplifyMigrationOperation, ValidationResult } from './_operation'; +import { Plan } from './_plan'; import { AmplifyError, stateManager } from '@aws-amplify/amplify-cli-core'; import { CloudFormationClient, SetStackPolicyCommand } from '@aws-sdk/client-cloudformation'; import { AmplifyClient, UpdateAppCommand, GetAppCommand } from '@aws-sdk/client-amplify'; import { DynamoDBClient, UpdateTableCommand, paginateListTables } from '@aws-sdk/client-dynamodb'; import { AppSyncClient, paginateListGraphqlApis } from '@aws-sdk/client-appsync'; -import { CognitoIdentityProviderClient, UpdateUserPoolCommand } from '@aws-sdk/client-cognito-identity-provider'; +import { CognitoIdentityProviderClient } from '@aws-sdk/client-cognito-identity-provider'; import { AmplifyGen2MigrationValidations } from './_validations'; const GEN2_MIGRATION_ENVIRONMENT_NAME = 'GEN2_MIGRATION_ENVIRONMENT_NAME'; @@ -19,42 +20,28 @@ export class AmplifyMigrationLockStep extends AmplifyMigrationStep { private _cfnClient: CloudFormationClient; private _cognitoClient: CognitoIdentityProviderClient; - public async executeImplications(): Promise { - return [ - `You will not be able to run 'amplify push' on environment '${this.currentEnvName}'`, - `You will not be able to migrate another environment until migration of '${this.currentEnvName}' is complete or rolled back`, - ]; - } - - public async rollbackImplications(): Promise { - return [ - `You will be able to run 'amplify push' on environment '${this.currentEnvName}'`, - `You will be able to start migration of another environment`, - ]; - } - - public async executeValidate(): Promise { - const validations = new AmplifyGen2MigrationValidations(this.logger, this.rootStackName, this.currentEnvName, this.context); - await validations.validateDeploymentStatus(); - await validations.validateDrift(); - } + public async forward(): Promise { + const operations: AmplifyMigrationOperation[] = []; - public async rollbackValidate(): Promise { - // https://github.com/aws-amplify/amplify-cli/issues/14570 - return; - } + // Validation-only operations (formerly in executeValidate) + operations.push({ + describe: async () => [], + validate: () => ({ description: 'Environment Status', run: () => this.validateDeploymentStatus() }), + // eslint-disable-next-line @typescript-eslint/no-empty-function + execute: async () => {}, + }); - public async execute(): Promise { - const operations: AmplifyMigrationOperation[] = []; + operations.push({ + describe: async () => [], + validate: () => ({ description: 'Drift', run: () => this.validateDrift() }), + // eslint-disable-next-line @typescript-eslint/no-empty-function + execute: async () => {}, + }); for (const tableName of await this.dynamoTableNames()) { operations.push({ - validate: async () => { - return; - }, - describe: async () => { - return [`Enable deletion protection for table '${tableName}'`]; - }, + validate: () => undefined, + describe: async () => [`Enable deletion protection for table '${tableName}'`], execute: async () => { await this.ddbClient().send( new UpdateTableCommand({ @@ -69,31 +56,23 @@ export class AmplifyMigrationLockStep extends AmplifyMigrationStep { for (const userPoolId of await this.userPoolIds()) { operations.push({ - validate: async () => { - return; - }, - describe: async () => { - return [`Enable deletion protection for user pool '${userPoolId}'`]; - }, + validate: () => undefined, + describe: async () => [`Enable deletion protection for user pool '${userPoolId}'`], execute: async () => { - await this.cognitoClient().send( - new UpdateUserPoolCommand({ - UserPoolId: userPoolId, - DeletionProtection: 'ACTIVE', - }), - ); - this.logger.info(`Enabled deletion protection for user pool '${userPoolId}'`); + // await this.cognitoClient().send( + // new UpdateUserPoolCommand({ + // UserPoolId: userPoolId, + // DeletionProtection: 'ACTIVE', + // }), + // ); + // this.logger.info(`Enabled deletion protection for user pool '${userPoolId}'`); }, }); } operations.push({ - validate: async () => { - return; - }, - describe: async () => { - return [`Add environment variable '${GEN2_MIGRATION_ENVIRONMENT_NAME}' (value: ${this.currentEnvName})`]; - }, + validate: () => undefined, + describe: async () => [`Add environment variable '${GEN2_MIGRATION_ENVIRONMENT_NAME}' (value: ${this.currentEnvName})`], execute: async () => { const app = await this.amplifyClient().send(new GetAppCommand({ appId: this.appId })); const environmentVariables = { ...(app.app.environmentVariables ?? {}), [GEN2_MIGRATION_ENVIRONMENT_NAME]: this.currentEnvName }; @@ -114,12 +93,8 @@ export class AmplifyMigrationLockStep extends AmplifyMigrationStep { }); operations.push({ - validate: async () => { - return; - }, - describe: async () => { - return [`Set a policy on stack '${this.rootStackName}': ${stackPolicy}`]; - }, + validate: () => undefined, + describe: async () => [`Set a policy on stack '${this.rootStackName}': ${stackPolicy}`], execute: async () => { await this.cfnClient().send( new SetStackPolicyCommand({ @@ -131,50 +106,41 @@ export class AmplifyMigrationLockStep extends AmplifyMigrationStep { }, }); - return operations; + return new Plan({ + operations, + logger: this.logger, + title: 'Execute', + implications: [ + `You will not be able to run 'amplify push' on environment '${this.currentEnvName}'`, + `You will not be able to migrate another environment until migration of '${this.currentEnvName}' is complete or rolled back`, + ], + }); } - public async rollback(): Promise { + public async rollback(): Promise { const operations: AmplifyMigrationOperation[] = []; - // note that we don't disable deletion protection on the tables because we don't - // know what the original value was; to play it safe we leave it untouched. - // create logging only operations to let this be known to the user. for (const tableName of await this.dynamoTableNames()) { operations.push({ - validate: async () => { - return; - }, - describe: async () => { - return [`Preserve deletion protection for table '${tableName}'`]; - }, - execute: async () => { - return; - }, + validate: () => undefined, + describe: async () => [`Preserve deletion protection for table '${tableName}'`], + // eslint-disable-next-line @typescript-eslint/no-empty-function + execute: async () => {}, }); } for (const userPoolId of await this.userPoolIds()) { operations.push({ - validate: async () => { - return; - }, - describe: async () => { - return [`Preserve deletion protection for user pool '${userPoolId}'`]; - }, - execute: async () => { - return; - }, + validate: () => undefined, + describe: async () => [`Preserve deletion protection for user pool '${userPoolId}'`], + // eslint-disable-next-line @typescript-eslint/no-empty-function + execute: async () => {}, }); } operations.push({ - validate: async () => { - return; - }, - describe: async () => { - return [`Remove environment variable '${GEN2_MIGRATION_ENVIRONMENT_NAME}'`]; - }, + validate: () => undefined, + describe: async () => [`Remove environment variable '${GEN2_MIGRATION_ENVIRONMENT_NAME}'`], execute: async () => { const app = await this.amplifyClient().send(new GetAppCommand({ appId: this.appId })); const environmentVariables = app.app.environmentVariables ?? {}; @@ -196,12 +162,8 @@ export class AmplifyMigrationLockStep extends AmplifyMigrationStep { }); operations.push({ - validate: async () => { - return; - }, - describe: async () => { - return [`Set a policy on stack '${this.rootStackName}': ${stackPolicy}`]; - }, + validate: () => undefined, + describe: async () => [`Set a policy on stack '${this.rootStackName}': ${stackPolicy}`], execute: async () => { await this.cfnClient().send( new SetStackPolicyCommand({ @@ -213,7 +175,35 @@ export class AmplifyMigrationLockStep extends AmplifyMigrationStep { }, }); - return operations; + return new Plan({ + operations, + logger: this.logger, + title: 'Rollback', + implications: [ + `You will be able to run 'amplify push' on environment '${this.currentEnvName}'`, + `You will be able to start migration of another environment`, + ], + }); + } + + private async validateDeploymentStatus(): Promise { + try { + const validations = new AmplifyGen2MigrationValidations(this.logger, this.rootStackName, this.currentEnvName, this.context); + await validations.validateDeploymentStatus(); + return { valid: true }; + } catch (e) { + return { valid: false, report: e.message }; + } + } + + private async validateDrift(): Promise { + try { + const validations = new AmplifyGen2MigrationValidations(this.logger, this.rootStackName, this.currentEnvName, this.context); + await validations.validateDrift(); + return { valid: true }; + } catch (e) { + return { valid: false, report: e.message }; + } } private async fetchGraphQLApiId(): Promise { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-forward.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-forward.ts index c561773c30e..2d5111e983b 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-forward.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-forward.ts @@ -6,6 +6,7 @@ import { StackFacade } from '../stack-facade'; import { retrieveOAuthValues } from '../oauth-values-retriever'; import { ForwardCategoryRefactorer } from '../workflow/forward-category-refactorer'; import { MoveMapping } from '../workflow/category-refactorer'; +import { SpinningLogger } from '../../_spinning-logger'; import { GEN2_NATIVE_APP_CLIENT, discoverGen1AuthStacks } from './auth-utils'; const GEN1_WEB_APP_CLIENT = 'UserPoolClientWeb'; @@ -34,10 +35,11 @@ export class AuthCognitoForwardRefactorer extends ForwardCategoryRefactorer { clients: AwsClients, region: string, accountId: string, + logger: SpinningLogger, private readonly appId: string, private readonly environmentName: string, ) { - super(gen1Env, gen2Branch, clients, region, accountId); + super(gen1Env, gen2Branch, clients, region, accountId, logger); } protected resourceTypes(): string[] { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/legacy-custom-resource.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/legacy-custom-resource.ts index a947ab86438..f40f58d6430 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/legacy-custom-resource.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/legacy-custom-resource.ts @@ -88,9 +88,7 @@ export async function executeLegacyRefactor(params: { return [ { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => ['Move stateful resources from your Gen1 app to be managed by your Gen2 app'], execute: async () => { const templateGenerator = await initializeLegacyTemplateGenerator(TemplateGenerator, params); diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts index 9c68d7ed0c3..c60ff773e16 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts @@ -1,6 +1,7 @@ /* eslint-disable spellcheck/spell-checker */ import { AmplifyMigrationStep } from '../_step'; -import { AmplifyMigrationOperation } from '../_operation'; +import { AmplifyMigrationOperation, ValidationResult } from '../_operation'; +import { Plan } from '../_plan'; import { AmplifyError } from '@aws-amplify/amplify-cli-core'; import { GetCallerIdentityCommand, STSClient } from '@aws-sdk/client-sts'; import { AmplifyGen2MigrationValidations } from '../_validations'; @@ -47,24 +48,7 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { } } - public async executeImplications(): Promise { - return ['Move stateful resources from your Gen1 app to be managed by your Gen2 app']; - } - - public async rollbackImplications(): Promise { - return ['Move stateful resources from your Gen2 app back to your Gen1 app']; - } - - public async executeValidate(): Promise { - const validations = new AmplifyGen2MigrationValidations(this.logger, this.rootStackName, this.currentEnvName, this.context); - await validations.validateLockStatus(); - } - - public async rollbackValidate(): Promise { - return; - } - - public async execute(): Promise { + public async forward(): Promise { const toStack = this.extractParameters(); const { clients, accountId, gen1Env, gen2Branch } = await this.createInfrastructure(toStack); @@ -79,17 +63,26 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { switch (resource.key) { case 'auth:Cognito': refactorers.push( - new AuthCognitoForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.appId, this.currentEnvName), + new AuthCognitoForwardRefactorer( + gen1Env, + gen2Branch, + clients, + this.region, + accountId, + this.logger, + this.appId, + this.currentEnvName, + ), ); break; case 'storage:S3': - refactorers.push(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId)); + refactorers.push(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger)); break; case 'storage:DynamoDB': - refactorers.push(new StorageDynamoForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId)); + refactorers.push(new StorageDynamoForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger)); break; case 'analytics:Kinesis': - refactorers.push(new AnalyticsKinesisForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId)); + refactorers.push(new AnalyticsKinesisForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger)); break; // Stateless categories — nothing to refactor // falls through @@ -105,10 +98,17 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { } } - return this.plan(refactorers); + return this.buildPlan( + refactorers, + [ + 'Stateful resources (Cognito, S3, DynamoDB, etc...) will be moved from Gen1 to Gen2 CloudFormation stacks', + 'Your Gen1 app will no longer manage these resources', + ], + 'Execute', + ); } - public async rollback(): Promise { + public async rollback(): Promise { const toStack = this.extractParameters(); const { clients, accountId, gen1Env, gen2Branch } = await this.createInfrastructure(toStack); @@ -122,16 +122,16 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { for (const resource of discovered) { switch (resource.key) { case 'auth:Cognito': - refactorers.push(new AuthCognitoRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId)); + refactorers.push(new AuthCognitoRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger)); break; case 'storage:S3': - refactorers.push(new StorageS3RollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId)); + refactorers.push(new StorageS3RollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger)); break; case 'storage:DynamoDB': - refactorers.push(new StorageDynamoRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId)); + refactorers.push(new StorageDynamoRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger)); break; case 'analytics:Kinesis': - refactorers.push(new AnalyticsKinesisRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId)); + refactorers.push(new AnalyticsKinesisRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger)); break; // Stateless categories — nothing to rollback // falls through @@ -147,7 +147,11 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { } } - return this.plan(refactorers); + return this.buildPlan( + refactorers, + ['Stateful resources will be moved back to Gen1 CloudFormation stacks', 'Your Gen2 app will no longer manage these resources'], + 'Rollback', + ); } private async createInfrastructure(toStack: string): Promise<{ @@ -172,13 +176,32 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { /** * Collects operations from all refactorers. */ - private async plan(refactorers: Refactorer[]): Promise { + private async buildPlan(refactorers: Refactorer[], implications: string[], title: string): Promise { const operations: AmplifyMigrationOperation[] = []; + + // Validation-only operation (formerly in executeValidate) + operations.push({ + describe: async () => [], + validate: () => ({ description: 'Lock status', run: () => this.validateLockStatus() }), + // eslint-disable-next-line @typescript-eslint/no-empty-function + execute: async () => {}, + }); + for (const refactorer of refactorers) { operations.push(...(await refactorer.plan())); } - return operations; + return new Plan({ operations, logger: this.logger, implications, title }); + } + + private async validateLockStatus(): Promise { + try { + const validations = new AmplifyGen2MigrationValidations(this.logger, this.rootStackName, this.currentEnvName, this.context); + await validations.validateLockStatus(); + return { valid: true }; + } catch (e) { + return { valid: false, report: e.message }; + } } private extractParameters(): string { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/utils.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/utils.ts index cae2603995e..5e8419079a6 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/utils.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/utils.ts @@ -2,5 +2,5 @@ * Extracts the stack name from a CloudFormation stack ID (ARN) or returns the input if it's already a name. */ export function extractStackNameFromId(stackId: string): string { - return stackId.startsWith('arn') ? stackId.split('/')[1] : stackId; + return stackId.startsWith('arn:') ? stackId.split('/')[1] : stackId; } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index b8245244a7d..f6ae6c0b3fc 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -7,6 +7,7 @@ import { AwsClients } from '../../aws-clients'; import { StackFacade } from '../stack-facade'; import { tryUpdateStack } from '../cfn-stack-updater'; import { tryRefactorStack, RefactorFailure } from '../cfn-stack-refactor-updater'; +import { SpinningLogger } from '../../_spinning-logger'; import { extractStackNameFromId } from '../utils'; export const MIGRATION_PLACEHOLDER_LOGICAL_ID = 'MigrationPlaceholder'; @@ -78,6 +79,7 @@ export abstract class CategoryRefactorer implements Refactorer { protected readonly clients: AwsClients, protected readonly region: string, protected readonly accountId: string, + protected readonly logger: SpinningLogger, ) {} /** @@ -88,10 +90,14 @@ export abstract class CategoryRefactorer implements Refactorer { const sourceStackId = await this.fetchSourceStackId(); const destStackId = await this.fetchDestStackId(); - if (!sourceStackId && !destStackId) return []; - if (!sourceStackId || !destStackId) { - throw new AmplifyError('InvalidStackError', { - message: `Category exists in ${sourceStackId ? 'source' : 'destination'} but not ${sourceStackId ? 'destination' : 'source'} stack`, + if (!sourceStackId) { + throw new AmplifyError('MigrationError', { + message: `[${this.constructor.name}] unable to find source stack`, + }); + } + if (!destStackId) { + throw new AmplifyError('MigrationError', { + message: `[${this.constructor.name}] unable to find target stack`, }); } @@ -107,7 +113,7 @@ export abstract class CategoryRefactorer implements Refactorer { const moveOps = this.buildMoveOperations(blueprint); const afterMoveOps = await this.afterMovePlan(blueprint); - return [...this.updateSource(blueprint.source), ...this.updateTarget(target), ...beforeMoveOps, ...moveOps, ...afterMoveOps]; + return [...this.updateSource(blueprint.source), ...this.updateTarget(blueprint.target), ...beforeMoveOps, ...moveOps, ...afterMoveOps]; } // -- Category-specific (abstract) -- @@ -151,12 +157,16 @@ export abstract class CategoryRefactorer implements Refactorer { * Rollback overrides this to return []. */ protected updateSource(source: ResolvedStack): AmplifyMigrationOperation[] { + const sourceStackName = extractStackNameFromId(source.stackId); return [ { - validate: async () => { - return; - }, - describe: async () => [`Update source stack '${extractStackNameFromId(source.stackId)}' with resolved references`], + validate: () => ({ + description: `Ensure no destructive changes to ${sourceStackName}`, + run: async () => { + return { valid: true }; + }, + }), + describe: async () => [`Update source stack '${sourceStackName}' with resolved references`], execute: async () => { const status = await tryUpdateStack({ cfnClient: this.clients.cloudFormation, @@ -179,12 +189,16 @@ export abstract class CategoryRefactorer implements Refactorer { * Rollback overrides this to return []. */ protected updateTarget(target: ResolvedStack): AmplifyMigrationOperation[] { + const targetStackName = extractStackNameFromId(target.stackId); return [ { - validate: async () => { - return; - }, - describe: async () => [`Update target stack '${extractStackNameFromId(target.stackId)}' with resolved references`], + validate: () => ({ + description: `Ensure no destructive changes to ${targetStackName}`, + run: async () => { + return { valid: true }; + }, + }), + describe: async () => [`Update target stack '${targetStackName}' with resolved references`], execute: async () => { const status = await tryUpdateStack({ cfnClient: this.clients.cloudFormation, @@ -283,9 +297,7 @@ export abstract class CategoryRefactorer implements Refactorer { return [ { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => [ `Move ${resourceMappings.length} resource(s) from '${extractStackNameFromId(source.stackId)}' to '${extractStackNameFromId( target.stackId, diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index 10cbb6c7787..7e76486e22a 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -137,9 +137,7 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { return [ { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => [`Move Gen2 resources to holding stack '${holdingStackName}'`], execute: async () => { const existing = await findHoldingStack(this.clients.cloudFormation, holdingStackName); diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index b6322c4b93e..491478ae583 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -159,10 +159,8 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { return [ { - validate: async () => { - return; - }, - describe: async () => [`Add placeholder to holding stack '${holdingStackName}'`], + validate: () => undefined, + describe: async () => [`Update ${holdingStackName} to include placeholder resource`], execute: async () => { await tryUpdateStack({ cfnClient: this.clients.cloudFormation, @@ -173,9 +171,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { }, }, { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => [`Restore ${resourcesToRestore.length} resource(s) from holding stack to Gen2`], execute: async () => { const result = await tryRefactorStack(this.clients.cloudFormation, { @@ -199,9 +195,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { private buildDeleteHoldingStackOp(holdingStackName: string): AmplifyMigrationOperation { return { - validate: async () => { - return; - }, + validate: () => undefined, describe: async () => [`Delete holding stack '${holdingStackName}'`], execute: async () => { await deleteHoldingStack(this.clients.cloudFormation, holdingStackName); diff --git a/packages/amplify-cli/src/commands/gen2-migration/shift.ts b/packages/amplify-cli/src/commands/gen2-migration/shift.ts index 32cf1605b48..678f81b9960 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/shift.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/shift.ts @@ -1,28 +1,12 @@ import { AmplifyMigrationStep } from './_step'; -import { AmplifyMigrationOperation } from './_operation'; +import { Plan } from './_plan'; export class AmplifyMigrationShiftStep extends AmplifyMigrationStep { - public async executeImplications(): Promise { + public async forward(): Promise { throw new Error('Method not implemented.'); } - public async rollbackImplications(): Promise { - throw new Error('Method not implemented.'); - } - - public async executeValidate(): Promise { - throw new Error('Method not implemented.'); - } - - public async rollbackValidate(): Promise { - throw new Error('Method not implemented.'); - } - - public async execute(): Promise { - throw new Error('Method not implemented.'); - } - - public async rollback(): Promise { + public async rollback(): Promise { throw new Error('Not Implemented'); } } diff --git a/packages/amplify-prompts/src/progressbars/spinner.ts b/packages/amplify-prompts/src/progressbars/spinner.ts index 1efd4d06957..d194c61a175 100644 --- a/packages/amplify-prompts/src/progressbars/spinner.ts +++ b/packages/amplify-prompts/src/progressbars/spinner.ts @@ -79,15 +79,19 @@ export class AmplifySpinner { return; } if (this.terminal.isTTY()) { - const lines: TerminalLine[] = [ - { - renderString: text || '', - color: success ? 'green' : 'red', - }, - ]; - clearTimeout(this.timer); - this.terminal.writeLines(lines); + if (text) { + const lines: TerminalLine[] = [ + { + renderString: text, + color: success ? 'green' : 'red', + }, + ]; + this.terminal.writeLines(lines); + } else { + // Clear the spinner line without leaving a blank line + this.terminal.clearCurrentLine(); + } this.terminal.cursor(true); } this.terminal = null; diff --git a/packages/amplify-prompts/src/progressbars/terminal.ts b/packages/amplify-prompts/src/progressbars/terminal.ts index 3393484bb70..bc9c7693db6 100644 --- a/packages/amplify-prompts/src/progressbars/terminal.ts +++ b/packages/amplify-prompts/src/progressbars/terminal.ts @@ -70,6 +70,16 @@ export class AmplifyTerminal { return this.stream.rows; } + /** + * Clears the current spinner line without writing a new line. + */ + public clearCurrentLine(): void { + this.stream.write(cursorUp(this.lastHeight)); + this.stream.write(`\u001b[2K\r`); + this.lastHeight = 0; + this.trailingEmptyLines = 0; + } + /** * Write array of lines into block. */ From 6873cfc5e18c68b5604aeb6e212cab5af3eff3a4 Mon Sep 17 00:00:00 2001 From: Eli Polonsky Date: Tue, 17 Mar 2026 11:26:52 -0400 Subject: [PATCH 02/70] chore: fix test --- packages/amplify-cli/src/commands/gen2-migration/generate.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate.ts b/packages/amplify-cli/src/commands/gen2-migration/generate.ts index 3676dfe38d6..f939343e784 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate.ts @@ -47,10 +47,10 @@ export class AmplifyMigrationGenerateStep extends AmplifyMigrationStep { case 'api:API Gateway': case 'analytics:Kinesis': case 'function:Lambda': - assessment.record('generate', resource, { supported: true, notes: [] }); + assessment.record('generate', resource, { supported: true }); break; case 'unsupported': - assessment.record('generate', resource, { supported: false, notes: [] }); + assessment.record('generate', resource, { supported: false }); break; } } From 16846fad486c2aa5ba50d4d51c14d5a75774f7ce Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Tue, 17 Mar 2026 11:46:13 -0400 Subject: [PATCH 03/70] test(cli-internal): replace null-as-any logger with noOpLogger helper Add a noOpLogger() test helper that creates a real SpinningLogger in debug mode, then replace all `null as any` logger arguments across 8 refactor test files with it. This improves type safety without changing test behavior since the logger methods are never exercised in these tests. All 30 tests pass. --- Prompt: In the refactor test directory there are lot of null as any being used to pass a spinning logger instance - change it to actually create a proper logger instance. --- .../gen2-migration/_framework/logger.ts | 6 ++++++ .../refactor/auth-forward-mapping.test.ts | 3 ++- .../refactor/auth-forward-plan.test.ts | 7 ++++--- .../refactor/auth-rollback-plan.test.ts | 3 ++- .../refactor/build-refactor-templates.test.ts | 3 ++- .../category-plan-orchestration.test.ts | 17 +++++++++-------- .../refactor/default-resource-mappings.test.ts | 5 +++-- .../refactor/forward-beforemove.test.ts | 7 ++++--- .../refactor/rollback-aftermove.test.ts | 5 +++-- 9 files changed, 35 insertions(+), 21 deletions(-) create mode 100644 packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/logger.ts diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/logger.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/logger.ts new file mode 100644 index 00000000000..fe5c12d3ced --- /dev/null +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/logger.ts @@ -0,0 +1,6 @@ +import { SpinningLogger } from '../../../../commands/gen2-migration/_spinning-logger'; + +/** Creates a no-op SpinningLogger suitable for unit tests. */ +export function noOpLogger(): SpinningLogger { + return new SpinningLogger('test', { debug: true }); +} diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts index 71e485dd686..8d8c7e0f9d1 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts @@ -3,6 +3,7 @@ import { CFNResource } from '../../../../commands/gen2-migration/cfn-template'; import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; import { MoveMapping } from '../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; +import { noOpLogger } from '../_framework/logger'; /** Helper: convert MoveMapping[] to Map for easy assertions */ function toIdMap(mappings: MoveMapping[]): Map { @@ -16,7 +17,7 @@ describe('AuthCognitoForwardRefactorer.buildResourceMappings - UserPoolClient di const gen2Branch = new StackFacade(clients, 'gen2'); return new (class extends AuthCognitoForwardRefactorer { constructor() { - super(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', null as any, 'appId', 'main'); + super(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', noOpLogger(), 'appId', 'main'); } public testBuildResourceMappings(source: Map, target: Map): MoveMapping[] { return this.buildResourceMappings(source, target); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts index 78301983436..41e15b382c7 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts @@ -2,6 +2,7 @@ import { AuthCognitoForwardRefactorer } from '../../../../commands/gen2-migratio import { CFNTemplate } from '../../../../commands/gen2-migration/cfn-template'; import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; +import { noOpLogger } from '../_framework/logger'; import { mockClient } from 'aws-sdk-client-mock'; import { CloudFormationClient, @@ -102,7 +103,7 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { clients, 'us-east-1', '123456789', - null as any, + noOpLogger(), 'appId', 'main', ); @@ -190,7 +191,7 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { clients, 'us-east-1', '123456789', - null as any, + noOpLogger(), 'appId', 'main', ); @@ -245,7 +246,7 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { clients, 'us-east-1', '123456789', - null as any, + noOpLogger(), 'appId', 'main', ); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts index 3b0450340c4..7c725bfe32e 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts @@ -2,6 +2,7 @@ import { AuthCognitoRollbackRefactorer } from '../../../../commands/gen2-migrati import { CFNTemplate } from '../../../../commands/gen2-migration/cfn-template'; import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; +import { noOpLogger } from '../_framework/logger'; import { mockClient } from 'aws-sdk-client-mock'; import { CloudFormationClient, @@ -96,7 +97,7 @@ describe('AuthCognitoRollbackRefactorer.plan()', () => { clients, 'us-east-1', '123', - null as any, + noOpLogger(), ); const ops = await refactorer.plan(); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/build-refactor-templates.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/build-refactor-templates.test.ts index a4e11baf208..83af72a07ec 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/build-refactor-templates.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/build-refactor-templates.test.ts @@ -6,13 +6,14 @@ import { MoveMapping, MIGRATION_PLACEHOLDER_LOGICAL_ID, } from '../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; +import { noOpLogger } from '../_framework/logger'; // Minimal concrete subclass to access protected methods class TestRefactorer extends (CategoryRefactorer as any) { private mappingsToReturn: MoveMapping[] = []; constructor() { - super(null, null, null, 'us-east-1', '123', null as any); + super(null, null, null, 'us-east-1', '123', noOpLogger()); } setMappings(mappings: MoveMapping[]) { diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts index 14f2c2e8686..14b8d6c5222 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts @@ -5,6 +5,7 @@ import { AnalyticsKinesisRollbackRefactorer } from '../../../../commands/gen2-mi import { CFNTemplate } from '../../../../commands/gen2-migration/cfn-template'; import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; +import { noOpLogger } from '../_framework/logger'; import { mockClient } from 'aws-sdk-client-mock'; import { CloudFormationClient, @@ -77,7 +78,7 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact cfnMock.on(DescribeStackResourcesCommand, { StackName: 'gen2-root' }).resolves({ StackResources: [] }); const { clients, gen1Env, gen2Branch } = makeInstances(); - await expect(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', null as any).plan()).rejects.toThrow( + await expect(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger()).plan()).rejects.toThrow( 'unable to find source stack', ); }); @@ -89,7 +90,7 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact cfnMock.on(DescribeStackResourcesCommand, { StackName: 'gen2-root' }).resolves({ StackResources: [] }); const { clients, gen1Env, gen2Branch } = makeInstances(); - await expect(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', null as any).plan()).rejects.toThrow( + await expect(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger()).plan()).rejects.toThrow( 'unable to find target stack', ); }); @@ -101,7 +102,7 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact }); const { clients, gen1Env, gen2Branch } = makeInstances(); - await expect(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', null as any).plan()).rejects.toThrow( + await expect(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger()).plan()).rejects.toThrow( 'unable to find source stack', ); }); @@ -117,7 +118,7 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact cfnMock.on(GetTemplateCommand, { StackName: 'gen1-storage-stack' }).resolves({ TemplateBody: JSON.stringify(noStorageTemplate) }); const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', null as any).plan(); + const ops = await new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger()).plan(); expect(ops).toEqual([]); }); @@ -125,7 +126,7 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact setupStorageMocks(cfnMock); const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', null as any).plan(); + const ops = await new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger()).plan(); const descriptions = (await Promise.all(ops.map((o) => o.describe()))).flat(); expect(descriptions).toHaveLength(4); @@ -171,7 +172,7 @@ describe('StorageS3RollbackRefactorer.plan() — rollback without holding stack' cfnMock.on(GetTemplateCommand, { StackName: 'gen1-storage-stack' }).resolves({ TemplateBody: JSON.stringify(gen1StorageTemplate) }); const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new StorageS3RollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', null as any).plan(); + const ops = await new StorageS3RollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger()).plan(); const descriptions = (await Promise.all(ops.map((o) => o.describe()))).flat(); // Rollback: no updateSource/updateTarget, just move @@ -223,7 +224,7 @@ describe('Analytics wiring tests', () => { it('forward: discovers analytics stacks and maps Kinesis stream', async () => { setupAnalyticsMocks(cfnMock); const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new AnalyticsKinesisForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', null as any).plan(); + const ops = await new AnalyticsKinesisForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger()).plan(); const descriptions = (await Promise.all(ops.map((o) => o.describe()))).flat(); expect(descriptions).toHaveLength(4); @@ -234,7 +235,7 @@ describe('Analytics wiring tests', () => { cfnMock.on(DescribeStacksCommand).resolves({ Stacks: [] }); // no holding stack setupAnalyticsMocks(cfnMock); const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new AnalyticsKinesisRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', null as any).plan(); + const ops = await new AnalyticsKinesisRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger()).plan(); const descriptions = (await Promise.all(ops.map((o) => o.describe()))).flat(); expect(descriptions).toHaveLength(1); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts index cbc0f82c38c..c9d4e2dd2a3 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts @@ -2,6 +2,7 @@ import { ForwardCategoryRefactorer } from '../../../../commands/gen2-migration/r import { RollbackCategoryRefactorer } from '../../../../commands/gen2-migration/refactor/workflow/rollback-category-refactorer'; import { CFNResource } from '../../../../commands/gen2-migration/cfn-template'; import { MoveMapping } from '../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; +import { noOpLogger } from '../_framework/logger'; class TestForwardRefactorer extends ForwardCategoryRefactorer { protected async fetchSourceStackId() { @@ -22,7 +23,7 @@ class TestRollbackRefactorer extends RollbackCategoryRefactorer { protected override readonly gen1LogicalIds: ReadonlyMap; constructor(ids: ReadonlyMap) { - super(null as any, null as any, null as any, 'us-east-1', '123', null as any); + super(null as any, null as any, null as any, 'us-east-1', '123', noOpLogger()); this.gen1LogicalIds = ids; } protected async fetchSourceStackId() { @@ -47,7 +48,7 @@ function toIdMap(mappings: MoveMapping[]): Map { } describe('ForwardCategoryRefactorer.buildResourceMappings (default type-matching)', () => { - const refactorer = new TestForwardRefactorer(null as any, null as any, null as any, 'us-east-1', '123', null as any); + const refactorer = new TestForwardRefactorer(null as any, null as any, null as any, 'us-east-1', '123', noOpLogger()); it('maps single resource per type', () => { const mappings = refactorer.testBuildResourceMappings( diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts index c0d6a86d27c..97b448c0e45 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts @@ -3,6 +3,7 @@ import { CFNResource, CFNTemplate } from '../../../../commands/gen2-migration/cf import { RefactorBlueprint, MoveMapping } from '../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; +import { noOpLogger } from '../_framework/logger'; import { mockClient } from 'aws-sdk-client-mock'; import { CloudFormationClient, @@ -88,7 +89,7 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { clients, 'us-east-1', '123', - null as any, + noOpLogger(), ); const blueprint = makeBlueprint({ targetResolved: { Lambda: { Type: 'AWS::Lambda::Function', Properties: {} } }, @@ -115,7 +116,7 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { clients, 'us-east-1', '123', - null as any, + noOpLogger(), ); const blueprint = makeBlueprint({ @@ -155,7 +156,7 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { clients, 'us-east-1', '123', - null as any, + noOpLogger(), ); const blueprint = makeBlueprint({ diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts index 550033be69f..2a54f3d36d3 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts @@ -3,6 +3,7 @@ import { CFNResource, CFNTemplate } from '../../../../commands/gen2-migration/cf import { RefactorBlueprint, MoveMapping } from '../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; +import { noOpLogger } from '../_framework/logger'; import { mockClient } from 'aws-sdk-client-mock'; import { CloudFormationClient, @@ -105,7 +106,7 @@ describe('RollbackCategoryRefactorer.afterMovePlan', () => { (clients as any).cloudFormation = new CloudFormationClient({}); const gen1Env = new StackFacade(clients, 'gen1-root'); const gen2Branch = new StackFacade(clients, 'gen2-root'); - const refactorer = new TestRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', null as any); + const refactorer = new TestRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', noOpLogger()); const sourceAfterRemoval: CFNTemplate = { AWSTemplateFormatVersion: '2010-09-09', @@ -153,7 +154,7 @@ describe('RollbackCategoryRefactorer.afterMovePlan', () => { (clients as any).cloudFormation = new CloudFormationClient({}); const gen1Env = new StackFacade(clients, 'gen1-root'); const gen2Branch = new StackFacade(clients, 'gen2-root'); - const refactorer = new TestRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', null as any); + const refactorer = new TestRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', noOpLogger()); const emptyTemplate: CFNTemplate = { AWSTemplateFormatVersion: '2010-09-09', From 317737fb5fda395c9f42fc8f45de23bb8f0156c4 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Tue, 17 Mar 2026 13:16:24 -0400 Subject: [PATCH 04/70] feat(cli-internal): print validation report on failure Plan.validate() now captures the report field from ValidationResult and renders a "Failed Validations Report" section before the summary table. Each failed validation shows its description in red followed by the report text. Also trims the drift report in _validations.ts. --- Prompt: The report property in ValidationResult is currently not used at all. We should use to print the validation report in case the validation failed. --- .../src/commands/gen2-migration/_plan.ts | 20 +++++++++++++++++-- .../commands/gen2-migration/_validations.ts | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts index 5d42dfe4e27..04a326aecd9 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts @@ -4,10 +4,11 @@ import { printer } from '@aws-amplify/amplify-prompts'; import chalk from 'chalk'; import CLITable from 'cli-table3'; -/** Internal type used only for rendering the validation summary table. */ +/** Internal type used only for rendering the validation summary. */ interface ValidationSummaryEntry { readonly description: string; readonly valid: boolean; + readonly report?: string; } /** @@ -50,7 +51,7 @@ export class Plan { this.logger.push(validation.description); const result = await validation.run(); this.logger.pop(); - entries.push({ description: validation.description, valid: result.valid }); + entries.push({ description: validation.description, valid: result.valid, report: result.report }); } this.logger.succeed('→ Validating complete'); this.renderValidationResults(entries); @@ -100,6 +101,21 @@ export class Plan { private renderValidationResults(entries: ValidationSummaryEntry[]): void { if (entries.length === 0) return; + const failed = entries.filter((e) => !e.valid && e.report); + if (failed.length > 0) { + printer.blankLine(); + printer.info(chalk.bold(chalk.underline('Failed Validations Report'))); + printer.blankLine(); + for (let i = 0; i < failed.length; i++) { + printer.info(chalk.red(failed[i].description)); + printer.blankLine(); + printer.info(failed[i].report ?? ''); + if (i < failed.length - 1) { + printer.blankLine(); + } + } + } + printer.blankLine(); printer.info(chalk.bold(chalk.underline('Validations Summary'))); printer.blankLine(); diff --git a/packages/amplify-cli/src/commands/gen2-migration/_validations.ts b/packages/amplify-cli/src/commands/gen2-migration/_validations.ts index eb3cf0ff775..c5e3118ae9e 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/_validations.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/_validations.ts @@ -33,7 +33,7 @@ export class AmplifyGen2MigrationValidations { const result = await new AmplifyDriftDetector(this.context, this.logger).detect(); if (result.code !== 0) { throw new AmplifyError('MigrationError', { - message: result.report ?? 'Drift detected', + message: result.report.trim() ?? 'Drift detected', resolution: 'Inspect the drift report above and resolve the drift', }); } From c0a38cb03b8a373da8e5692235cbaf168ae25c82 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Tue, 17 Mar 2026 19:49:02 -0400 Subject: [PATCH 05/70] refactor(cli-internal): classify auth stacks by resource type Replace description-JSON-based auth stack classification with resource-type detection. The new approach checks for the presence of an AWS::Cognito::UserPool resource instead of parsing the stack Description field, which is more reliable. Also rename fetchStackDescription to fetchStack and descriptionCache to stackCache for accuracy since the method returns the full Stack object. --- Prompt: commit what I did --- .../refactor/auth/auth-utils.ts | 20 +++---------------- .../gen2-migration/refactor/stack-facade.ts | 6 +++--- .../workflow/forward-category-refactorer.ts | 4 ++-- .../workflow/rollback-category-refactorer.ts | 4 ++-- 4 files changed, 10 insertions(+), 24 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-utils.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-utils.ts index 05bf617559c..2ca13b2ca5b 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-utils.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-utils.ts @@ -2,9 +2,6 @@ import { StackFacade } from '../stack-facade'; export const GEN2_NATIVE_APP_CLIENT = 'UserPoolNativeAppClient'; -const GEN1_AUTH_STACK_TYPE_DESCRIPTION = 'auth-Cognito'; -const GEN1_USER_POOL_GROUPS_STACK_TYPE_DESCRIPTION = 'auth-Cognito-UserPool-Groups'; - /** * Discovers Gen1 auth stacks by parsing stack Description JSON. * Gen1 may have a main auth stack and a separate UserPoolGroups stack. @@ -33,18 +30,7 @@ export async function discoverGen1AuthStacks(gen1Env: StackFacade): Promise<{ ma * Classifies a Gen1 auth stack by parsing its Description JSON metadata. */ async function classifyGen1AuthStack(gen1Env: StackFacade, stackId: string): Promise<'auth' | 'auth-user-pool-group' | null> { - const description = await gen1Env.fetchStackDescription(stackId); - const stackDescription = description.Description; - if (!stackDescription) return null; - - try { - const parsed = JSON.parse(stackDescription); - if (typeof parsed === 'object' && 'stackType' in parsed) { - if (parsed.stackType === GEN1_AUTH_STACK_TYPE_DESCRIPTION) return 'auth'; - if (parsed.stackType === GEN1_USER_POOL_GROUPS_STACK_TYPE_DESCRIPTION) return 'auth-user-pool-group'; - } - } catch { - // Description might not be valid JSON - } - return null; + const resources = await gen1Env.fetchStackResources(stackId); + const hasUserPool = resources.find((r) => r.ResourceType === 'AWS::Cognito::UserPool'); + return hasUserPool ? 'auth' : 'auth-user-pool-group'; } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts index d06660ff9e3..ab43113a716 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts @@ -16,7 +16,7 @@ import { CFNTemplate } from '../cfn-template'; */ export class StackFacade { private readonly templateCache = new Map>(); - private readonly descriptionCache = new Map>(); + private readonly stackCache = new Map>(); private readonly resourcesCache = new Map>(); private nestedStacksPromise: Promise | undefined; @@ -51,8 +51,8 @@ export class StackFacade { /** * Describes a stack (parameters, outputs, status). Cached per stackId. */ - public async fetchStackDescription(stackId: string): Promise { - return this.cachedFetch(this.descriptionCache, stackId, async () => { + public async fetchStack(stackId: string): Promise { + return this.cachedFetch(this.stackCache, stackId, async () => { const response = await this.clients.cloudFormation.send(new DescribeStacksCommand({ StackName: stackId })); const stack = response.Stacks?.[0]; if (!stack) { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index 7e76486e22a..5f1c6b617cc 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -54,7 +54,7 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { protected async resolveSource(stackId: string): Promise { const facade = this.gen1Env; const originalTemplate = await facade.fetchTemplate(stackId); - const description = await facade.fetchStackDescription(stackId); + const description = await facade.fetchStack(stackId); const parameters = description.Parameters ?? []; const outputs = description.Outputs ?? []; @@ -85,7 +85,7 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { protected async resolveTarget(stackId: string): Promise { const facade = this.gen2Branch; const originalTemplate = await facade.fetchTemplate(stackId); - const description = await facade.fetchStackDescription(stackId); + const description = await facade.fetchStack(stackId); const parameters = description.Parameters ?? []; const outputs = description.Outputs ?? []; diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index 491478ae583..358030cb1e5 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -63,7 +63,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { protected async resolveSource(stackId: string): Promise { const facade = this.gen2Branch; const originalTemplate = await facade.fetchTemplate(stackId); - const description = await facade.fetchStackDescription(stackId); + const description = await facade.fetchStack(stackId); const parameters = description.Parameters ?? []; const outputs = description.Outputs ?? []; @@ -89,7 +89,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { protected async resolveTarget(stackId: string): Promise { const facade = this.gen1Env; const originalTemplate = await facade.fetchTemplate(stackId); - const description = await facade.fetchStackDescription(stackId); + const description = await facade.fetchStack(stackId); const parameters = description.Parameters ?? []; return { stackId, resolvedTemplate: originalTemplate, parameters }; From d309cc8a1b7946ce63ff430f628d18aab64fd3a0 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Fri, 20 Mar 2026 18:34:23 -0400 Subject: [PATCH 06/70] refactor(cli-internal): split auth refactorers and improve resource mapping Split monolithic auth-forward/rollback/utils into separate files for Cognito and UserPoolGroups, enabling independent forward and rollback refactoring per auth sub-resource. Replace gen1LogicalIds map with abstract targetLogicalId() method on RollbackCategoryRefactorer, giving each subclass explicit control over logical ID resolution. Extract match() hook on ForwardCategoryRefactorer for type-matching customization. Thread DiscoveredResource through CategoryRefactorer base class so refactorers can use resource metadata (e.g. resourceName) for stack discovery instead of relying on shared utility functions. Minor fixes to migration app docs and sanitize script (trailing newline normalization). --- Prompt: commit what I have --- amplify-migration-apps/README.md | 6 ++ .../quotegeneratorbe/src/package.json | 2 +- .../quotegeneratorbe/src/package.json | 2 +- .../fitness-tracker/README.md | 29 +-------- .../S3Trigger1ef46783/src/package.json | 2 +- .../S3Trigger1ef46783/src/package.json | 2 +- amplify-migration-apps/sanitize.ts | 7 ++- .../refactor/analytics/analytics-rollback.ts | 12 +++- ...uth-forward.ts => auth-cognito-forward.ts} | 56 +++++++----------- .../refactor/auth/auth-cognito-rollback.ts | 39 ++++++++++++ .../refactor/auth/auth-rollback.ts | 59 ------------------- .../auth/auth-user-pool-groups-forward.ts | 39 ++++++++++++ .../auth/auth-user-pool-groups-rollback.ts | 31 ++++++++++ .../refactor/auth/auth-utils.ts | 36 ----------- .../gen2-migration/refactor/refactor.ts | 32 ++++++---- .../storage/storage-dynamo-rollback.ts | 13 +++- .../refactor/storage/storage-rollback.ts | 12 +++- .../refactor/workflow/category-refactorer.ts | 2 + .../workflow/forward-category-refactorer.ts | 30 ++++++---- .../workflow/rollback-category-refactorer.ts | 16 +---- 20 files changed, 222 insertions(+), 205 deletions(-) rename packages/amplify-cli/src/commands/gen2-migration/refactor/auth/{auth-forward.ts => auth-cognito-forward.ts} (64%) create mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-rollback.ts delete mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-rollback.ts create mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-forward.ts create mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-rollback.ts delete mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-utils.ts diff --git a/amplify-migration-apps/README.md b/amplify-migration-apps/README.md index 7c920739c6c..749a5306190 100644 --- a/amplify-migration-apps/README.md +++ b/amplify-migration-apps/README.md @@ -344,3 +344,9 @@ npx jest --no-coverage src/__tests__/commands/gen2-migration/generate/codegen-he ``` Always review the diff after updating to make sure the changes are intentional. + +> [!NOTE] +> Updating a snapshot for one phase (e.g., `generate`) currently requires updating +> snapshots for all phases (`generate` and `refactor`). The phases share state, so +> a change in one phase's expected output can affect the inputs or expectations of +> subsequent phases. diff --git a/amplify-migration-apps/backend-only/_snapshot.pre.generate/amplify/#current-cloud-backend/function/quotegeneratorbe/src/package.json b/amplify-migration-apps/backend-only/_snapshot.pre.generate/amplify/#current-cloud-backend/function/quotegeneratorbe/src/package.json index 2143bf92d00..333ff04a2bb 100644 --- a/amplify-migration-apps/backend-only/_snapshot.pre.generate/amplify/#current-cloud-backend/function/quotegeneratorbe/src/package.json +++ b/amplify-migration-apps/backend-only/_snapshot.pre.generate/amplify/#current-cloud-backend/function/quotegeneratorbe/src/package.json @@ -10,4 +10,4 @@ "dependencies": { "cli-table3": "0.6.5" } -} \ No newline at end of file +} diff --git a/amplify-migration-apps/backend-only/_snapshot.pre.generate/amplify/backend/function/quotegeneratorbe/src/package.json b/amplify-migration-apps/backend-only/_snapshot.pre.generate/amplify/backend/function/quotegeneratorbe/src/package.json index 2143bf92d00..333ff04a2bb 100644 --- a/amplify-migration-apps/backend-only/_snapshot.pre.generate/amplify/backend/function/quotegeneratorbe/src/package.json +++ b/amplify-migration-apps/backend-only/_snapshot.pre.generate/amplify/backend/function/quotegeneratorbe/src/package.json @@ -10,4 +10,4 @@ "dependencies": { "cli-table3": "0.6.5" } -} \ No newline at end of file +} diff --git a/amplify-migration-apps/fitness-tracker/README.md b/amplify-migration-apps/fitness-tracker/README.md index bb575803389..4b556232426 100644 --- a/amplify-migration-apps/fitness-tracker/README.md +++ b/amplify-migration-apps/fitness-tracker/README.md @@ -300,30 +300,6 @@ npx amplify gen2-migration generate + branchName: "gen2-main" ``` -**Edit in `./amplify/backend.ts`:** - -Navigate to the Amplify Console to find the `` and `` on the ApiGateway AWS Console. For example: - -![](./images/gen1-rest-api-id.png) -![](./images/gen1-root-resource-id.png) - -```diff -+ const gen1RestApi = RestApi.fromRestApiAttributes(restApiStack, "Gen1RestApi", { -+ restApiId: '', -+ rootResourceId: '', -+ }) -+ const gen1RestApiPolicy = new Policy(restApiStack, "Gen1RestApiPolicy", { -+ statements: [ -+ new PolicyStatement({ -+ actions: ["execute-api:Invoke"], -+ resources: [`${gen1RestApi.arnForExecuteApi("*", "/*")}`] -+ }) -+ ] -+ }); -+ backend.auth.resources.authenticatedUserIamRole.attachInlinePolicy(gen1RestApiPolicy); -``` - - **Edit in `./amplify/function/lognutrition/resource.ts`:** ```diff @@ -398,7 +374,6 @@ Navigate to the Amplify Console to find the `` and `` and ` Note: The hash value after `fitnesstracker` changes for each app; you will have a different one. @@ -434,7 +409,7 @@ Navigate to the Amplify Console to find the `` and ` Note: The hash value after `fitnesstracker` changes for each app; you will have a different one. diff --git a/amplify-migration-apps/product-catalog/_snapshot.pre.generate/amplify/#current-cloud-backend/function/S3Trigger1ef46783/src/package.json b/amplify-migration-apps/product-catalog/_snapshot.pre.generate/amplify/#current-cloud-backend/function/S3Trigger1ef46783/src/package.json index c090d8e5360..540015a8b70 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.pre.generate/amplify/#current-cloud-backend/function/S3Trigger1ef46783/src/package.json +++ b/amplify-migration-apps/product-catalog/_snapshot.pre.generate/amplify/#current-cloud-backend/function/S3Trigger1ef46783/src/package.json @@ -13,4 +13,4 @@ "@aws-sdk/protocol-http": "^3.58.0", "@aws-sdk/signature-v4": "^3.58.0" } -} \ No newline at end of file +} diff --git a/amplify-migration-apps/product-catalog/_snapshot.pre.generate/amplify/backend/function/S3Trigger1ef46783/src/package.json b/amplify-migration-apps/product-catalog/_snapshot.pre.generate/amplify/backend/function/S3Trigger1ef46783/src/package.json index c090d8e5360..540015a8b70 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.pre.generate/amplify/backend/function/S3Trigger1ef46783/src/package.json +++ b/amplify-migration-apps/product-catalog/_snapshot.pre.generate/amplify/backend/function/S3Trigger1ef46783/src/package.json @@ -13,4 +13,4 @@ "@aws-sdk/protocol-http": "^3.58.0", "@aws-sdk/signature-v4": "^3.58.0" } -} \ No newline at end of file +} diff --git a/amplify-migration-apps/sanitize.ts b/amplify-migration-apps/sanitize.ts index 12387253e39..b7dd68dc01f 100644 --- a/amplify-migration-apps/sanitize.ts +++ b/amplify-migration-apps/sanitize.ts @@ -110,7 +110,12 @@ function main(): void { const sanitizedFileName = sanitizeFileName(file, values.amplifyAppId, appNameNoDashes); - fs.writeFileSync(file, content, 'utf-8'); + // ensure a single new line at the end of the file + // since linters and IDEs will add them automatically + // and cause false snapshot diffs. + const trimmedContent = `${content.trim()}\n`; + + fs.writeFileSync(file, trimmedContent, 'utf-8'); fs.renameSync(file, sanitizedFileName); } } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/analytics/analytics-rollback.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/analytics/analytics-rollback.ts index 3e49b598bd1..6c2306114f1 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/analytics/analytics-rollback.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/analytics/analytics-rollback.ts @@ -1,3 +1,4 @@ +import { CFNResource } from '../../cfn-template'; import { RollbackCategoryRefactorer } from '../workflow/rollback-category-refactorer'; import { ANALYTICS_RESOURCE_TYPES } from './analytics-forward'; @@ -7,8 +8,6 @@ import { ANALYTICS_RESOURCE_TYPES } from './analytics-forward'; * Uses the default gen1LogicalIds-based buildResourceMappings from RollbackCategoryRefactorer. */ export class AnalyticsKinesisRollbackRefactorer extends RollbackCategoryRefactorer { - protected override readonly gen1LogicalIds = new Map([['AWS::Kinesis::Stream', 'KinesisStream']]); - protected async fetchSourceStackId(): Promise { return this.findNestedStack(this.gen2Branch, 'analytics'); } @@ -20,4 +19,13 @@ export class AnalyticsKinesisRollbackRefactorer extends RollbackCategoryRefactor protected resourceTypes(): string[] { return ANALYTICS_RESOURCE_TYPES; } + + protected targetLogicalId(sourceId: string, sourceResource: CFNResource): string | undefined { + switch (sourceResource.Type) { + case 'AWS::Kinesis::Stream': + return 'KinesisStream'; + default: + return undefined; + } + } } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-forward.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-forward.ts similarity index 64% rename from packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-forward.ts rename to packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-forward.ts index 2d5111e983b..2b5815bfa06 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-forward.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-forward.ts @@ -1,19 +1,20 @@ import { Output, Parameter } from '@aws-sdk/client-cloudformation'; import { AmplifyError } from '@aws-amplify/amplify-cli-core'; -import { CFNResource } from '../../cfn-template'; import { AwsClients } from '../../aws-clients'; import { StackFacade } from '../stack-facade'; import { retrieveOAuthValues } from '../oauth-values-retriever'; import { ForwardCategoryRefactorer } from '../workflow/forward-category-refactorer'; -import { MoveMapping } from '../workflow/category-refactorer'; import { SpinningLogger } from '../../_spinning-logger'; -import { GEN2_NATIVE_APP_CLIENT, discoverGen1AuthStacks } from './auth-utils'; +import { DiscoveredResource } from '../../generate/_infra/gen1-app'; +import { CFNResource } from '../../cfn-template'; const GEN1_WEB_APP_CLIENT = 'UserPoolClientWeb'; const HOSTED_PROVIDER_META_PARAMETER_NAME = 'hostedUIProviderMeta'; const HOSTED_PROVIDER_CREDENTIALS_PARAMETER_NAME = 'hostedUIProviderCreds'; const USER_POOL_ID_OUTPUT_KEY_NAME = 'UserPoolId'; +export const GEN2_NATIVE_APP_CLIENT = 'UserPoolNativeAppClient'; + export const AUTH_RESOURCE_TYPES = [ 'AWS::Cognito::UserPool', 'AWS::Cognito::UserPoolClient', @@ -23,10 +24,9 @@ export const AUTH_RESOURCE_TYPES = [ ]; /** - * Forward refactorer for the auth category. + * Forward refactorer for the auth:Cognito resource. * * Moves main auth resources from Gen1 to Gen2. - * UserPoolGroup support will be added back in a future change. */ export class AuthCognitoForwardRefactorer extends ForwardCategoryRefactorer { constructor( @@ -38,8 +38,9 @@ export class AuthCognitoForwardRefactorer extends ForwardCategoryRefactorer { logger: SpinningLogger, private readonly appId: string, private readonly environmentName: string, + protected readonly resource: DiscoveredResource, ) { - super(gen1Env, gen2Branch, clients, region, accountId, logger); + super(gen1Env, gen2Branch, clients, region, accountId, logger, resource); } protected resourceTypes(): string[] { @@ -79,44 +80,27 @@ export class AuthCognitoForwardRefactorer extends ForwardCategoryRefactorer { return parameters; } - /** - * Auth forward mapping with UserPoolClient Web/Native disambiguation. - */ - protected buildResourceMappings(sourceResources: Map, targetResources: Map): MoveMapping[] { - const mappings: MoveMapping[] = []; - const usedTargetIds = new Set(); - - for (const [sourceId, sourceResource] of sourceResources) { - let matched = false; - for (const [targetId, targetResource] of targetResources) { - if (sourceResource.Type !== targetResource.Type || usedTargetIds.has(targetId)) continue; - - if (sourceResource.Type === 'AWS::Cognito::UserPoolClient') { - const isWebPair = sourceId === GEN1_WEB_APP_CLIENT && !targetId.includes(GEN2_NATIVE_APP_CLIENT); - const isNativePair = sourceId !== GEN1_WEB_APP_CLIENT && targetId.includes(GEN2_NATIVE_APP_CLIENT); - if (!isWebPair && !isNativePair) continue; - } - - mappings.push({ sourceId, targetId, resource: sourceResource }); - usedTargetIds.add(targetId); - matched = true; - break; - } - if (!matched) { - throw new AmplifyError('InvalidStackError', { - message: `Source resource '${sourceId}' (type '${sourceResource.Type}') has no corresponding target resource`, - }); + protected override match(sourceId: string, sourceResource: CFNResource, targetId: string, targetResource: CFNResource): boolean { + if (sourceResource.Type !== targetResource.Type) { + return false; + } + switch (sourceResource.Type) { + case 'AWS::Cognito::UserPoolClient': { + const isWebPair = sourceId === GEN1_WEB_APP_CLIENT && !targetId.includes(GEN2_NATIVE_APP_CLIENT); + const isNativePair = sourceId !== GEN1_WEB_APP_CLIENT && targetId.includes(GEN2_NATIVE_APP_CLIENT); + return isWebPair || isNativePair; } + default: + return true; } - return mappings; } protected async fetchSourceStackId(): Promise { - const { mainAuthStackId } = await discoverGen1AuthStacks(this.gen1Env); - return mainAuthStackId; + return this.findNestedStack(this.gen1Env, `auth${this.resource.resourceName}`); } protected async fetchDestStackId(): Promise { + // in gen2 all auth resources are in a single auth nested stack return this.findNestedStack(this.gen2Branch, 'auth'); } } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-rollback.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-rollback.ts new file mode 100644 index 00000000000..ed0a836a6ce --- /dev/null +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-rollback.ts @@ -0,0 +1,39 @@ +import { CFNResource } from '../../cfn-template'; +import { RollbackCategoryRefactorer } from '../workflow/rollback-category-refactorer'; +import { AUTH_RESOURCE_TYPES, GEN2_NATIVE_APP_CLIENT } from './auth-cognito-forward'; + +/** + * Rollback refactorer for the auth:Cognito resource. + * + * Moves main auth resources from Gen2 back to Gen1. + */ +export class AuthCognitoRollbackRefactorer extends RollbackCategoryRefactorer { + protected resourceTypes(): string[] { + return AUTH_RESOURCE_TYPES; + } + + protected async fetchSourceStackId(): Promise { + return this.findNestedStack(this.gen2Branch, 'auth'); + } + + protected async fetchDestStackId(): Promise { + return this.findNestedStack(this.gen1Env, `auth${this.resource.resourceName}`); + } + + protected targetLogicalId(sourceId: string, sourceResource: CFNResource): string | undefined { + switch (sourceResource.Type) { + case 'AWS::Cognito::UserPoolClient': + return sourceId.includes(GEN2_NATIVE_APP_CLIENT) ? 'UserPoolClient' : 'UserPoolClientWeb'; + case 'AWS::Cognito::UserPool': + return 'UserPool'; + case 'AWS::Cognito::IdentityPool': + return 'IdentityPool'; + case 'AWS::Cognito::IdentityPoolRoleAttachment': + return 'IdentityPoolRoleMap'; + case 'AWS::Cognito::UserPoolDomain': + return 'UserPoolDomain'; + default: + return undefined; + } + } +} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-rollback.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-rollback.ts deleted file mode 100644 index 0517090c5e2..00000000000 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-rollback.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { AmplifyError } from '@aws-amplify/amplify-cli-core'; -import { CFNResource } from '../../cfn-template'; -import { MoveMapping } from '../workflow/category-refactorer'; -import { RollbackCategoryRefactorer } from '../workflow/rollback-category-refactorer'; -import { GEN2_NATIVE_APP_CLIENT, discoverGen1AuthStacks } from './auth-utils'; -import { AUTH_RESOURCE_TYPES } from './auth-forward'; - -/** - * Known Gen1 logical resource IDs for main auth resource types. - */ -const GEN1_AUTH_LOGICAL_IDS = new Map([ - ['AWS::Cognito::UserPool', 'UserPool'], - ['AWS::Cognito::UserPoolClient', 'UserPoolClientWeb'], - ['AWS::Cognito::IdentityPool', 'IdentityPool'], - ['AWS::Cognito::IdentityPoolRoleAttachment', 'IdentityPoolRoleMap'], - ['AWS::Cognito::UserPoolDomain', 'UserPoolDomain'], -]); - -/** - * Rollback refactorer for the auth category. - * - * Moves main auth resources from Gen2 back to Gen1. - * UserPoolGroup support will be added back in a future change. - */ -export class AuthCognitoRollbackRefactorer extends RollbackCategoryRefactorer { - protected resourceTypes(): string[] { - return AUTH_RESOURCE_TYPES; - } - - protected async fetchSourceStackId(): Promise { - return this.findNestedStack(this.gen2Branch, 'auth'); - } - - protected async fetchDestStackId(): Promise { - const { mainAuthStackId } = await discoverGen1AuthStacks(this.gen1Env); - return mainAuthStackId; - } - - /** - * Auth rollback mapping: NativeAppClient → 'UserPoolClient', others → known Gen1 logical ID. - */ - protected buildResourceMappings(sourceResources: Map, _targetResources: Map): MoveMapping[] { - const mappings: MoveMapping[] = []; - for (const [sourceId, resource] of sourceResources) { - if (sourceId.includes(GEN2_NATIVE_APP_CLIENT)) { - mappings.push({ sourceId, targetId: 'UserPoolClient', resource }); - } else { - const gen1Id = GEN1_AUTH_LOGICAL_IDS.get(resource.Type); - if (!gen1Id) { - throw new AmplifyError('InvalidStackError', { - message: `No known Gen1 logical ID for auth resource type '${resource.Type}' (source: '${sourceId}')`, - }); - } - mappings.push({ sourceId, targetId: gen1Id, resource }); - } - } - return mappings; - } -} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-forward.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-forward.ts new file mode 100644 index 00000000000..06e4be040a0 --- /dev/null +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-forward.ts @@ -0,0 +1,39 @@ +import { CFNResource } from '../../cfn-template'; +import { ForwardCategoryRefactorer } from '../workflow/forward-category-refactorer'; + +export const USER_POOL_GROUP_TYPE = 'AWS::Cognito::UserPoolGroup'; + +/** + * Forward refactorer for the auth:UserPoolGroups resource. + * + * Moves user pool groups auth resources from Gen1 to Gen2. + */ +export class AuthUserPoolGroupsForwardRefactorer extends ForwardCategoryRefactorer { + protected resourceTypes(): string[] { + return [USER_POOL_GROUP_TYPE]; + } + + protected async fetchSourceStackId(): Promise { + return this.findNestedStack(this.gen1Env, `auth${this.resource.resourceName}`); + } + + protected async fetchDestStackId(): Promise { + // in gen2 all auth resources are in a single auth nested stack + return this.findNestedStack(this.gen2Branch, 'auth'); + } + + protected override match(_sourceId: string, sourceResource: CFNResource, _targetId: string, targetResource: CFNResource): boolean { + if (sourceResource.Type !== targetResource.Type) { + return false; + } + switch (sourceResource.Type) { + case USER_POOL_GROUP_TYPE: { + const sourceGroupName = sourceResource.Properties['GroupName']; + const targetGroupName = targetResource.Properties['GroupName']; + return sourceGroupName === targetGroupName; + } + default: + return false; + } + } +} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-rollback.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-rollback.ts new file mode 100644 index 00000000000..e6032aba6ff --- /dev/null +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-rollback.ts @@ -0,0 +1,31 @@ +import { CFNResource } from '../../cfn-template'; +import { RollbackCategoryRefactorer } from '../workflow/rollback-category-refactorer'; +import { USER_POOL_GROUP_TYPE } from './auth-user-pool-groups-forward'; + +/** + * Rollback refactorer for the auth:UserPoolGroups resource. + * + * Moves user pool groups auth resources resources from Gen2 back to Gen1. + */ +export class AuthUserPoolGroupsRollbackRefactorer extends RollbackCategoryRefactorer { + protected resourceTypes(): string[] { + return [USER_POOL_GROUP_TYPE]; + } + + protected async fetchSourceStackId(): Promise { + return this.findNestedStack(this.gen2Branch, 'auth'); + } + + protected async fetchDestStackId(): Promise { + return this.findNestedStack(this.gen1Env, `auth${this.resource.resourceName}`); + } + + protected targetLogicalId(sourceId: string, sourceResource: CFNResource): string | undefined { + switch (sourceResource.Type) { + case 'AWS::Cognito::UserPoolGroup': + return `${sourceResource.Properties['GroupName']}Group`; + default: + return undefined; + } + } +} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-utils.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-utils.ts deleted file mode 100644 index 2ca13b2ca5b..00000000000 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-utils.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { StackFacade } from '../stack-facade'; - -export const GEN2_NATIVE_APP_CLIENT = 'UserPoolNativeAppClient'; - -/** - * Discovers Gen1 auth stacks by parsing stack Description JSON. - * Gen1 may have a main auth stack and a separate UserPoolGroups stack. - */ -export async function discoverGen1AuthStacks(gen1Env: StackFacade): Promise<{ mainAuthStackId?: string; userPoolGroupStackId?: string }> { - const nestedStacks = await gen1Env.fetchNestedStacks(); - const authStacks = nestedStacks.filter((s) => s.LogicalResourceId?.startsWith('auth')); - - let mainAuthStackId: string | undefined; - let userPoolGroupStackId: string | undefined; - - for (const stack of authStacks) { - if (!stack.PhysicalResourceId) continue; - const authType = await classifyGen1AuthStack(gen1Env, stack.PhysicalResourceId); - if (authType === 'auth') { - mainAuthStackId = stack.PhysicalResourceId; - } else if (authType === 'auth-user-pool-group') { - userPoolGroupStackId = stack.PhysicalResourceId; - } - } - - return { mainAuthStackId, userPoolGroupStackId }; -} - -/** - * Classifies a Gen1 auth stack by parsing its Description JSON metadata. - */ -async function classifyGen1AuthStack(gen1Env: StackFacade, stackId: string): Promise<'auth' | 'auth-user-pool-group' | null> { - const resources = await gen1Env.fetchStackResources(stackId); - const hasUserPool = resources.find((r) => r.ResourceType === 'AWS::Cognito::UserPool'); - return hasUserPool ? 'auth' : 'auth-user-pool-group'; -} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts index 71fe7bef657..a9f9f1bbe93 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts @@ -8,8 +8,8 @@ import { AmplifyGen2MigrationValidations } from '../_validations'; import { AwsClients } from '../aws-clients'; import { StackFacade } from './stack-facade'; import { Refactorer } from './refactorer'; -import { AuthCognitoForwardRefactorer } from './auth/auth-forward'; -import { AuthCognitoRollbackRefactorer } from './auth/auth-rollback'; +import { AuthCognitoForwardRefactorer } from './auth/auth-cognito-forward'; +import { AuthCognitoRollbackRefactorer } from './auth/auth-cognito-rollback'; import { StorageS3ForwardRefactorer } from './storage/storage-forward'; import { StorageS3RollbackRefactorer } from './storage/storage-rollback'; import { StorageDynamoForwardRefactorer } from './storage/storage-dynamo-forward'; @@ -18,6 +18,7 @@ import { AnalyticsKinesisForwardRefactorer } from './analytics/analytics-forward import { AnalyticsKinesisRollbackRefactorer } from './analytics/analytics-rollback'; import { Gen1App, DiscoveredResource } from '../generate/_infra/gen1-app'; import { Assessment } from '../_assessment'; +import { AuthUserPoolGroupsForwardRefactorer } from './auth/auth-user-pool-groups-forward'; export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { /** @@ -72,17 +73,25 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { this.logger, this.appId, this.currentEnvName, + resource, ), ); break; + case 'auth:Cognito-UserPool-Groups': + refactorers.push( + new AuthUserPoolGroupsForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource), + ); + break; case 'storage:S3': - refactorers.push(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger)); + refactorers.push(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource)); break; case 'storage:DynamoDB': - refactorers.push(new StorageDynamoForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger)); + refactorers.push(new StorageDynamoForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource)); break; case 'analytics:Kinesis': - refactorers.push(new AnalyticsKinesisForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger)); + refactorers.push( + new AnalyticsKinesisForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource), + ); break; // Stateless categories — nothing to refactor // falls through @@ -90,7 +99,6 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { case 'api:AppSync': case 'api:API Gateway': break; - case 'auth:Cognito-UserPool-Groups': case 'unsupported': throw new AmplifyError('MigrationError', { message: `Unsupported resource '${resource.resourceName}' (${resource.category}:${resource.service}). Run 'amplify gen2-migration assess' to check migration readiness.`, @@ -122,16 +130,20 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { for (const resource of discovered) { switch (resource.key) { case 'auth:Cognito': - refactorers.push(new AuthCognitoRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger)); + refactorers.push(new AuthCognitoRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource)); break; case 'storage:S3': - refactorers.push(new StorageS3RollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger)); + refactorers.push(new StorageS3RollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource)); break; case 'storage:DynamoDB': - refactorers.push(new StorageDynamoRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger)); + refactorers.push( + new StorageDynamoRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource), + ); break; case 'analytics:Kinesis': - refactorers.push(new AnalyticsKinesisRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger)); + refactorers.push( + new AnalyticsKinesisRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource), + ); break; // Stateless categories — nothing to rollback // falls through diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/storage/storage-dynamo-rollback.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/storage/storage-dynamo-rollback.ts index dcdfa0942c3..f3e7cb2b47a 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/storage/storage-dynamo-rollback.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/storage/storage-dynamo-rollback.ts @@ -1,3 +1,5 @@ +import { AmplifyError } from '@aws-amplify/amplify-cli-core'; +import { CFNResource } from '../../cfn-template'; import { RollbackCategoryRefactorer } from '../workflow/rollback-category-refactorer'; /** @@ -5,8 +7,6 @@ import { RollbackCategoryRefactorer } from '../workflow/rollback-category-refact * Moves DynamoDB tables from Gen2 back to Gen1. */ export class StorageDynamoRollbackRefactorer extends RollbackCategoryRefactorer { - protected override readonly gen1LogicalIds = new Map([['AWS::DynamoDB::Table', 'DynamoDBTable']]); - protected async fetchSourceStackId(): Promise { return this.findNestedStack(this.gen2Branch, 'storage'); } @@ -18,4 +18,13 @@ export class StorageDynamoRollbackRefactorer extends RollbackCategoryRefactorer protected resourceTypes(): string[] { return ['AWS::DynamoDB::Table']; } + + protected targetLogicalId(_sourceId: string, sourceResource: CFNResource): string | undefined { + switch (sourceResource.Type) { + case 'AWS::DynamoDB::Table': + return 'DynamoDBTable'; + default: + return undefined; + } + } } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/storage/storage-rollback.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/storage/storage-rollback.ts index 9288875e266..051a78ee714 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/storage/storage-rollback.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/storage/storage-rollback.ts @@ -1,3 +1,4 @@ +import { CFNResource } from '../../cfn-template'; import { RollbackCategoryRefactorer } from '../workflow/rollback-category-refactorer'; /** @@ -5,8 +6,6 @@ import { RollbackCategoryRefactorer } from '../workflow/rollback-category-refact * Moves S3 buckets from Gen2 back to Gen1. */ export class StorageS3RollbackRefactorer extends RollbackCategoryRefactorer { - protected override readonly gen1LogicalIds = new Map([['AWS::S3::Bucket', 'S3Bucket']]); - protected async fetchSourceStackId(): Promise { return this.findNestedStack(this.gen2Branch, 'storage'); } @@ -18,4 +17,13 @@ export class StorageS3RollbackRefactorer extends RollbackCategoryRefactorer { protected resourceTypes(): string[] { return ['AWS::S3::Bucket']; } + + protected targetLogicalId(sourceId: string, sourceResource: CFNResource): string | undefined { + switch (sourceResource.Type) { + case 'AWS::S3::Bucket': + return 'S3Bucket'; + default: + return undefined; + } + } } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index f6ae6c0b3fc..88a1be1e1a4 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -9,6 +9,7 @@ import { tryUpdateStack } from '../cfn-stack-updater'; import { tryRefactorStack, RefactorFailure } from '../cfn-stack-refactor-updater'; import { SpinningLogger } from '../../_spinning-logger'; import { extractStackNameFromId } from '../utils'; +import { DiscoveredResource } from '../../generate/_infra/gen1-app'; export const MIGRATION_PLACEHOLDER_LOGICAL_ID = 'MigrationPlaceholder'; export const PLACEHOLDER_RESOURCE: CFNResource = { Type: 'AWS::CloudFormation::WaitConditionHandle', Properties: {} }; @@ -80,6 +81,7 @@ export abstract class CategoryRefactorer implements Refactorer { protected readonly region: string, protected readonly accountId: string, protected readonly logger: SpinningLogger, + protected readonly resource: DiscoveredResource, ) {} /** diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index 5f1c6b617cc..2a3bda49a86 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -20,33 +20,37 @@ import { CategoryRefactorer, MoveMapping, RefactorBlueprint, ResolvedStack, Reso * afterMovePlan: empty (holding stack survives for rollback) */ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { - /** - * Default forward mapping: matches source and target resources by type. - * Works for categories with at most one resource per type (storage, analytics). - * Auth overrides this for UserPoolClient Web/Native disambiguation. - */ protected buildResourceMappings(sourceResources: Map, targetResources: Map): MoveMapping[] { const mappings: MoveMapping[] = []; - const usedTargetIds = new Set(); for (const [sourceId, sourceResource] of sourceResources) { - let matched = false; + const matchedTargets = []; for (const [targetId, targetResource] of targetResources) { - if (sourceResource.Type === targetResource.Type && !usedTargetIds.has(targetId)) { - mappings.push({ sourceId, targetId, resource: sourceResource }); - usedTargetIds.add(targetId); - matched = true; - break; + const matched = this.match(sourceId, sourceResource, targetId, targetResource); + if (matched) { + matchedTargets.push(targetId); } } - if (!matched) { + if (matchedTargets.length === 0) { throw new AmplifyError('InvalidStackError', { message: `Source resource '${sourceId}' (type '${sourceResource.Type}') has no corresponding target resource`, }); } + if (matchedTargets.length > 1) { + throw new AmplifyError('InvalidStackError', { + message: `Source resource '${sourceId}' (type '${sourceResource.Type}') has multiple corresponding target resources`, + }); + } + const targetId = matchedTargets[0]; + mappings.push({ sourceId, targetId, resource: sourceResource }); } return mappings; } + protected match(_sourceId: string, sourceResource: CFNResource, _targetId: string, targetResource: CFNResource): boolean { + // default matching - assumes one resource per type in source/target + return sourceResource.Type === targetResource.Type; + } + /** * Resolves the Gen1 source stack template. * Resolution chain: params → outputs → deps → conditions. diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index 358030cb1e5..2ae71f44fdf 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -30,22 +30,10 @@ import { * Does NOT pre-update stacks (overrides updateSource/updateTarget to return []). */ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { - /** - * Map of CFN resource type → Gen1 logical resource ID. - * Subclasses override this with their category-specific map. - * Used by the default buildResourceMappings implementation. - */ - protected readonly gen1LogicalIds: ReadonlyMap = new Map(); - - /** - * Default rollback mapping: looks up Gen1 logical ID by resource type. - * Throws AmplifyError if a source resource's type is not in gen1LogicalIds. - * Auth overrides this entirely. - */ protected buildResourceMappings(sourceResources: Map, _targetResources: Map): MoveMapping[] { const mappings: MoveMapping[] = []; for (const [sourceId, resource] of sourceResources) { - const gen1LogicalId = this.gen1LogicalIds.get(resource.Type); + const gen1LogicalId = this.targetLogicalId(sourceId, resource); if (!gen1LogicalId) { throw new AmplifyError('InvalidStackError', { message: `No known Gen1 logical ID for resource type '${resource.Type}' (source: '${sourceId}')`, @@ -56,6 +44,8 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { return mappings; } + protected abstract targetLogicalId(sourceId: string, sourceResource: CFNResource): string | undefined; + /** * Resolves the Gen2 source stack template for rollback. * Resolution chain: params → outputs → deps (no conditions). From 2d45f9ea433cac771b4c47ce1bd061a01b78e1ad Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Fri, 20 Mar 2026 18:39:03 -0400 Subject: [PATCH 07/70] revert(cli-internal): remove trailing-newline normalization from sanitize --- Prompt: I reset the changes. just commit. --- amplify-migration-apps/sanitize.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/amplify-migration-apps/sanitize.ts b/amplify-migration-apps/sanitize.ts index b7dd68dc01f..12387253e39 100644 --- a/amplify-migration-apps/sanitize.ts +++ b/amplify-migration-apps/sanitize.ts @@ -110,12 +110,7 @@ function main(): void { const sanitizedFileName = sanitizeFileName(file, values.amplifyAppId, appNameNoDashes); - // ensure a single new line at the end of the file - // since linters and IDEs will add them automatically - // and cause false snapshot diffs. - const trimmedContent = `${content.trim()}\n`; - - fs.writeFileSync(file, trimmedContent, 'utf-8'); + fs.writeFileSync(file, content, 'utf-8'); fs.renameSync(file, sanitizedFileName); } } From 6a4bed3055b3fca5346ee564c74d76541ca11868 Mon Sep 17 00:00:00 2001 From: Eli Polonsky Date: Fri, 20 Mar 2026 18:42:54 -0400 Subject: [PATCH 08/70] chore: remove merge markers --- AGENTS.md | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 007e76fa099..a7aec2e9cef 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -39,16 +39,11 @@ Verify your changes by following these guidelines: - **Always** update the appropriate JSDoc strings in the code you change. Be concise. - Do not create additional markdown files in the repository unless you are instructed explicitly to. - Never commit `.ai-generated` files (`.commit-message.ai-generated.txt`, `.pr-body.ai-generated.md`, etc.) — they are gitignored and are only used as local scratch files. -<<<<<<< HEAD -- Commit your changes in git using a well-formed commit message following the Conventional Commits format. The message must start - with a type prefix (e.g., `feat:`, `fix:`, `docs:`, `refactor:`, `test:`, `chore:`) followed by a single sentence summary and no more -======= - Commit your changes in git using a well-formed commit message following the Conventional Commits format. The message must include a scope when the change is scoped to a specific package: `type(scope): subject`. The scope is derived from the package's `name` field in `package.json` with the `@aws-amplify/` prefix stripped. For example, `@aws-amplify/cli-internal` → `cli-internal`, `@aws-amplify/amplify-prompts` → `amplify-prompts`. Valid scopes are enforced by commitlint via `commitlint.config.js`. The message must start with a type prefix (e.g., `feat:`, `fix:`, `docs:`, `refactor:`, `test:`, `chore:`) followed by a single sentence summary and no more ->>>>>>> 5ae9c3daf8 (feat(cli-internal): add assess, refactor, and generate-new commands) than a few paragraphs explaining the change and your testing. After this explanation, place the prompt the user used to trigger this work prefixed with a "Prompt: " after a single line consisting of '---'. Make sure there are no empty lines before or after this line. Word wrap all paragraphs at 72 columns including the prompt. For the author of the commit, use the configured username in git with @@ -62,12 +57,7 @@ Verify your changes by following these guidelines: - Since this repo has a commit hook that takes quite a long time to run, don't immediately commit every change you were asked to do. Apply your judgment, if the diff is still fairly small just keep going. Otherwise, ask the user if they want to commit or keep going. -<<<<<<< HEAD - Committing after every incremental change wastes time on hooks and creates noisy history. Natural commit -======= -- Batch commits aggressively. Wait until a design decision is settled and the code is stable before committing. - Committing after every incremental change wastes time on hooks and creates noisy history. Natural commit ->>>>>>> 5ae9c3daf8 (feat(cli-internal): add assess, refactor, and generate-new commands) points are: after a design discussion concludes, after tests pass, after a self-review finds no issues. - NEVER commit with --no-verify. - Before you actually commit, provide a (very) concise summary of changes to the user and ask for confirmation to commit. From 5cbbfa74a9a40ee8b74f477c117da70ce5ed01ae Mon Sep 17 00:00:00 2001 From: Eli Polonsky Date: Fri, 20 Mar 2026 18:50:21 -0400 Subject: [PATCH 09/70] chore: cleanup --- packages/amplify-cli/src/commands/gen2-migration/generate.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate.ts b/packages/amplify-cli/src/commands/gen2-migration/generate.ts index f939343e784..ac66478299f 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate.ts @@ -149,7 +149,6 @@ export class AmplifyMigrationGenerateStep extends AmplifyMigrationStep { generators.push(new GitIgnoreGenerator()); const operations: AmplifyMigrationOperation[] = [ - // Validation-only operations (formerly in executeValidate) { describe: async () => [], validate: () => ({ description: 'Lock status', run: () => this.validateLockStatus() }), From db785ac903fb2b5d43dc537ba06e8be281d93690 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Fri, 20 Mar 2026 21:42:17 -0400 Subject: [PATCH 10/70] feat(cli-internal): group plan operations by resource Thread DiscoveredResource through all resource-backed planners so each operation carries the resource it belongs to. Plan.describe() now groups operations under resource headers using the format " (/)", matching the assessment display style. Ungrouped operations (scaffolding, validations) render as a flat list. Changes: - Add optional `resource` field to AmplifyMigrationOperation - Update Plan.describe() to group by resource label - Thread DiscoveredResource into all generate-side planners (Auth, ReferenceAuth, Data, S3, DynamoDB, RestApi, Function, AnalyticsKinesis) replacing separate resourceName params - Tag refactor-side operations via CategoryRefactorer and its forward/rollback subclasses (already had this.resource) - Update all affected test files with DiscoveredResource objects --- Prompt: in the gen2-migration, i want to make the plan describe itself by listing the description of each operation per resource. --- .../analytics/kinesis.generator.test.ts | 14 ++- .../amplify/auth/auth.generator.test.ts | 35 ++++++- .../amplify/data/data.generator.test.ts | 98 ++++++++++++++++--- .../function/function.generator.test.ts | 2 +- .../rest-api/rest-api.generator.test.ts | 14 ++- .../storage/dynamodb.generator.test.ts | 56 +++++++++-- .../refactor/auth-forward-plan.test.ts | 3 + .../refactor/auth-rollback-plan.test.ts | 1 + .../category-plan-orchestration.test.ts | 68 ++++++++++--- .../default-resource-mappings.test.ts | 14 ++- .../refactor/forward-beforemove.test.ts | 3 + .../refactor/rollback-aftermove.test.ts | 14 ++- .../src/commands/gen2-migration/_operation.ts | 8 ++ .../src/commands/gen2-migration/_plan.ts | 28 +++++- .../src/commands/gen2-migration/generate.ts | 16 +-- .../amplify/analytics/kinesis.generator.ts | 17 ++-- .../generate/amplify/auth/auth.generator.ts | 7 +- .../amplify/auth/reference-auth.generator.ts | 7 +- .../generate/amplify/data/data.generator.ts | 7 +- .../amplify/function/function.generator.ts | 43 ++++---- .../amplify/rest-api/rest-api.generator.ts | 11 ++- .../amplify/storage/dynamodb.generator.ts | 15 +-- .../generate/amplify/storage/s3.generator.ts | 7 +- .../refactor/workflow/category-refactorer.ts | 3 + .../workflow/forward-category-refactorer.ts | 1 + .../workflow/rollback-category-refactorer.ts | 3 + 26 files changed, 384 insertions(+), 111 deletions(-) diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/analytics/kinesis.generator.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/analytics/kinesis.generator.test.ts index ecfe9933b16..d17abb634af 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/analytics/kinesis.generator.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/analytics/kinesis.generator.test.ts @@ -38,7 +38,12 @@ describe('AnalyticsKinesisGenerator', () => { const gen1App = createMockGen1App(); (gen1App.meta as jest.Mock).mockReturnValue(undefined); - const generator = new AnalyticsKinesisGenerator(gen1App, backendGenerator, outputDir, 'myKinesis'); + const generator = new AnalyticsKinesisGenerator(gen1App, backendGenerator, outputDir, { + category: 'analytics', + resourceName: 'myKinesis', + service: 'Kinesis', + key: 'analytics:Kinesis', + }); await expect(generator.plan()).rejects.toThrow('not found in amplify-meta.json'); }); @@ -49,7 +54,12 @@ describe('AnalyticsKinesisGenerator', () => { otherResource: { service: 'Kinesis' }, }); - const generator = new AnalyticsKinesisGenerator(gen1App, backendGenerator, outputDir, 'myKinesis'); + const generator = new AnalyticsKinesisGenerator(gen1App, backendGenerator, outputDir, { + category: 'analytics', + resourceName: 'myKinesis', + service: 'Kinesis', + key: 'analytics:Kinesis', + }); await expect(generator.plan()).rejects.toThrow('not found in amplify-meta.json'); }); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/auth/auth.generator.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/auth/auth.generator.test.ts index c513082c4b1..74da9fb0617 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/auth/auth.generator.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/auth/auth.generator.test.ts @@ -83,7 +83,12 @@ describe('AuthGenerator', () => { throw new Error("Category 'auth' not found in amplify-meta.json"); }); - const generator = new AuthGenerator(gen1App, backendGenerator, outputDir); + const generator = new AuthGenerator(gen1App, backendGenerator, outputDir, { + category: 'auth', + resourceName: 'testAuth', + service: 'Cognito', + key: 'auth:Cognito', + }); await expect(generator.plan()).rejects.toThrow("Category 'auth' not found"); }); @@ -93,7 +98,12 @@ describe('AuthGenerator', () => { (gen1App.metaOutput as jest.Mock).mockReturnValue('us-east-1_abc123'); (gen1App.aws.fetchUserPool as jest.Mock).mockRejectedValue(new Error("User pool 'us-east-1_abc123' not found")); - const generator = new AuthGenerator(gen1App, backendGenerator, outputDir); + const generator = new AuthGenerator(gen1App, backendGenerator, outputDir, { + category: 'auth', + resourceName: 'testAuth', + service: 'Cognito', + key: 'auth:Cognito', + }); await expect(generator.plan()).rejects.toThrow("User pool 'us-east-1_abc123' not found"); }); @@ -122,7 +132,12 @@ describe('AuthGenerator', () => { const addImportSpy = jest.spyOn(backendGenerator, 'addImport'); const addPropertySpy = jest.spyOn(backendGenerator, 'addDefineBackendProperty'); - const generator = new AuthGenerator(gen1App, backendGenerator, outputDir); + const generator = new AuthGenerator(gen1App, backendGenerator, outputDir, { + category: 'auth', + resourceName: 'testAuth', + service: 'Cognito', + key: 'auth:Cognito', + }); const ops = await generator.plan(); expect(ops).toHaveLength(1); @@ -160,7 +175,12 @@ describe('AuthGenerator', () => { (gen1App.aws.fetchIdentityGroups as jest.Mock).mockResolvedValue([]); (gen1App.aws.fetchIdentityPool as jest.Mock).mockResolvedValue(undefined); - const generator = new AuthGenerator(gen1App, backendGenerator, outputDir); + const generator = new AuthGenerator(gen1App, backendGenerator, outputDir, { + category: 'auth', + resourceName: 'testAuth', + service: 'Cognito', + key: 'auth:Cognito', + }); generator.addFunctionAuthAccess({ resourceName: 'adminFunc', permissions: { manageUsers: true } }); const ops = await generator.plan(); @@ -201,7 +221,12 @@ describe('ReferenceAuthGenerator', () => { const addImportSpy = jest.spyOn(backendGenerator, 'addImport'); - const generator = new ReferenceAuthGenerator(gen1App, backendGenerator, outputDir); + const generator = new ReferenceAuthGenerator(gen1App, backendGenerator, outputDir, { + category: 'auth', + resourceName: 'testAuth', + service: 'Cognito', + key: 'auth:Cognito', + }); const ops = await generator.plan(); expect(ops).toHaveLength(1); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/data/data.generator.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/data/data.generator.test.ts index 0edf8e3b1fc..09250a894e0 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/data/data.generator.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/data/data.generator.test.ts @@ -59,7 +59,12 @@ describe('DataGenerator', () => { throw new Error("Category 'api' not found"); }); - const generator = new DataGenerator(gen1App, backendGenerator, outputDir); + const generator = new DataGenerator(gen1App, backendGenerator, outputDir, { + category: 'api', + resourceName: 'testApi', + service: 'AppSync', + key: 'api:AppSync', + }); await expect(generator.plan()).rejects.toThrow("Category 'api' not found"); }); @@ -70,7 +75,12 @@ describe('DataGenerator', () => { throw new Error("Expected exactly one 'AppSync' resource"); }); - const generator = new DataGenerator(gen1App, backendGenerator, outputDir); + const generator = new DataGenerator(gen1App, backendGenerator, outputDir, { + category: 'api', + resourceName: 'testApi', + service: 'AppSync', + key: 'api:AppSync', + }); await expect(generator.plan()).rejects.toThrow("Expected exactly one 'AppSync' resource"); }); @@ -82,7 +92,12 @@ describe('DataGenerator', () => { throw new Error('no GraphQLAPIIdOutput'); }); - const generator = new DataGenerator(gen1App, backendGenerator, outputDir); + const generator = new DataGenerator(gen1App, backendGenerator, outputDir, { + category: 'api', + resourceName: 'testApi', + service: 'AppSync', + key: 'api:AppSync', + }); await expect(generator.plan()).rejects.toThrow('no GraphQLAPIIdOutput'); }); @@ -93,14 +108,24 @@ describe('DataGenerator', () => { (gen1App.metaOutput as jest.Mock).mockReturnValue('api-123'); (gen1App.aws.fetchGraphqlApi as jest.Mock).mockResolvedValue(undefined); - const generator = new DataGenerator(gen1App, backendGenerator, outputDir); + const generator = new DataGenerator(gen1App, backendGenerator, outputDir, { + category: 'api', + resourceName: 'testApi', + service: 'AppSync', + key: 'api:AppSync', + }); await expect(generator.plan()).rejects.toThrow("AppSync API 'api-123' not found"); }); it('constructs DataRenderer with envName', () => { const gen1App = createMockGen1App(); - new DataGenerator(gen1App, backendGenerator, outputDir); + new DataGenerator(gen1App, backendGenerator, outputDir, { + category: 'api', + resourceName: 'testApi', + service: 'AppSync', + key: 'api:AppSync', + }); expect(DataRenderer).toHaveBeenCalledWith('main'); }); @@ -127,7 +152,12 @@ describe('DataGenerator', () => { }); it('returns one operation describing data/resource.ts', async () => { - const generator = new DataGenerator(gen1App, backendGenerator, outputDir); + const generator = new DataGenerator(gen1App, backendGenerator, outputDir, { + category: 'api', + resourceName: 'testApi', + service: 'AppSync', + key: 'api:AppSync', + }); const ops = await generator.plan(); expect(ops).toHaveLength(1); @@ -136,7 +166,12 @@ describe('DataGenerator', () => { }); it('calls renderer.render with schema, tableMappings, authorizationModes, and logging', async () => { - const generator = new DataGenerator(gen1App, backendGenerator, outputDir); + const generator = new DataGenerator(gen1App, backendGenerator, outputDir, { + category: 'api', + resourceName: 'testApi', + service: 'AppSync', + key: 'api:AppSync', + }); const ops = await generator.plan(); await ops[0].execute(); @@ -157,7 +192,12 @@ describe('DataGenerator', () => { logConfig: { fieldLogLevel: 'ERROR', excludeVerboseContent: true }, }); - const generator = new DataGenerator(gen1App, backendGenerator, outputDir); + const generator = new DataGenerator(gen1App, backendGenerator, outputDir, { + category: 'api', + resourceName: 'testApi', + service: 'AppSync', + key: 'api:AppSync', + }); const ops = await generator.plan(); await ops[0].execute(); @@ -173,7 +213,12 @@ describe('DataGenerator', () => { logConfig: { fieldLogLevel: 'NONE' }, }); - const generator = new DataGenerator(gen1App, backendGenerator, outputDir); + const generator = new DataGenerator(gen1App, backendGenerator, outputDir, { + category: 'api', + resourceName: 'testApi', + service: 'AppSync', + key: 'api:AppSync', + }); const ops = await generator.plan(); await ops[0].execute(); @@ -182,7 +227,12 @@ describe('DataGenerator', () => { }); it('writes renderer output to amplify/data/resource.ts via printNodes', async () => { - const generator = new DataGenerator(gen1App, backendGenerator, outputDir); + const generator = new DataGenerator(gen1App, backendGenerator, outputDir, { + category: 'api', + resourceName: 'testApi', + service: 'AppSync', + key: 'api:AppSync', + }); const ops = await generator.plan(); await ops[0].execute(); @@ -195,7 +245,12 @@ describe('DataGenerator', () => { const addImportSpy = jest.spyOn(backendGenerator, 'addImport'); const addPropertySpy = jest.spyOn(backendGenerator, 'addDefineBackendProperty'); - const generator = new DataGenerator(gen1App, backendGenerator, outputDir); + const generator = new DataGenerator(gen1App, backendGenerator, outputDir, { + category: 'api', + resourceName: 'testApi', + service: 'AppSync', + key: 'api:AppSync', + }); const ops = await generator.plan(); await ops[0].execute(); @@ -216,7 +271,12 @@ describe('DataGenerator', () => { const addStatementSpy = jest.spyOn(backendGenerator, 'addStatement'); - const generator = new DataGenerator(gen1App, backendGenerator, outputDir); + const generator = new DataGenerator(gen1App, backendGenerator, outputDir, { + category: 'api', + resourceName: 'testApi', + service: 'AppSync', + key: 'api:AppSync', + }); const ops = await generator.plan(); await ops[0].execute(); @@ -233,7 +293,12 @@ describe('DataGenerator', () => { const addStatementSpy = jest.spyOn(backendGenerator, 'addStatement'); - const generator = new DataGenerator(gen1App, backendGenerator, outputDir); + const generator = new DataGenerator(gen1App, backendGenerator, outputDir, { + category: 'api', + resourceName: 'testApi', + service: 'AppSync', + key: 'api:AppSync', + }); const ops = await generator.plan(); await ops[0].execute(); @@ -248,7 +313,12 @@ describe('DataGenerator', () => { const addStatementSpy = jest.spyOn(backendGenerator, 'addStatement'); - const generator = new DataGenerator(gen1App, backendGenerator, outputDir); + const generator = new DataGenerator(gen1App, backendGenerator, outputDir, { + category: 'api', + resourceName: 'testApi', + service: 'AppSync', + key: 'api:AppSync', + }); const ops = await generator.plan(); await ops[0].execute(); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/function/function.generator.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/function/function.generator.test.ts index 041b2748f4f..21701ad68d4 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/function/function.generator.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/function/function.generator.test.ts @@ -73,7 +73,7 @@ function createFunctionGenerator(overrides: { backendGenerator: overrides.backendGenerator, packageJsonGenerator: overrides.packageJsonGenerator, outputDir: overrides.outputDir, - resourceName: overrides.resourceName ?? 'myFunc', + resource: { category: 'function', resourceName: overrides.resourceName ?? 'myFunc', service: 'Lambda', key: 'function:Lambda' }, category: 'function', }); } diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/rest-api/rest-api.generator.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/rest-api/rest-api.generator.test.ts index 4fc8d07c23c..fc62041718e 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/rest-api/rest-api.generator.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/rest-api/rest-api.generator.test.ts @@ -42,7 +42,12 @@ describe('RestApiGenerator', () => { (gen1App.meta as jest.Mock).mockImplementation((cat: string) => (cat === 'api' ? API_META : undefined)); (gen1App.cliInputs as jest.Mock).mockReturnValue(CLI_INPUTS); - const generator = new RestApiGenerator(gen1App, backendGenerator, 'myApi'); + const generator = new RestApiGenerator(gen1App, backendGenerator, { + category: 'api', + resourceName: 'myApi', + service: 'API Gateway', + key: 'api:API Gateway', + }); const ops = await generator.plan(); expect(ops).toHaveLength(1); @@ -59,7 +64,12 @@ describe('RestApiGenerator', () => { const addStatementSpy = jest.spyOn(backendGenerator, 'addStatement'); const ensureBranchNameSpy = jest.spyOn(backendGenerator, 'ensureBranchName'); - const generator = new RestApiGenerator(gen1App, backendGenerator, 'myApi'); + const generator = new RestApiGenerator(gen1App, backendGenerator, { + category: 'api', + resourceName: 'myApi', + service: 'API Gateway', + key: 'api:API Gateway', + }); const ops = await generator.plan(); await ops[0].execute(); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/storage/dynamodb.generator.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/storage/dynamodb.generator.test.ts index 77ead8b5bf6..68d45b94406 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/storage/dynamodb.generator.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate/amplify/storage/dynamodb.generator.test.ts @@ -23,7 +23,12 @@ describe('DynamoDBGenerator', () => { const gen1App = createMockGen1App(); (gen1App.meta as jest.Mock).mockReturnValue(undefined); - const generator = new DynamoDBGenerator(gen1App, backendGenerator, 'myTable', false); + const generator = new DynamoDBGenerator( + gen1App, + backendGenerator, + { category: 'storage', resourceName: 'myTable', service: 'DynamoDB', key: 'storage:DynamoDB' }, + false, + ); await expect(generator.plan()).rejects.toThrow(); }); @@ -34,7 +39,12 @@ describe('DynamoDBGenerator', () => { otherTable: { service: 'DynamoDB' }, }); - const generator = new DynamoDBGenerator(gen1App, backendGenerator, 'myTable', false); + const generator = new DynamoDBGenerator( + gen1App, + backendGenerator, + { category: 'storage', resourceName: 'myTable', service: 'DynamoDB', key: 'storage:DynamoDB' }, + false, + ); await expect(generator.plan()).rejects.toThrow(); }); @@ -54,7 +64,12 @@ describe('DynamoDBGenerator', () => { ProvisionedThroughput: {}, }); - const generator = new DynamoDBGenerator(gen1App, backendGenerator, 'myTable', false); + const generator = new DynamoDBGenerator( + gen1App, + backendGenerator, + { category: 'storage', resourceName: 'myTable', service: 'DynamoDB', key: 'storage:DynamoDB' }, + false, + ); const ops = await generator.plan(); expect(ops).toHaveLength(1); @@ -81,7 +96,12 @@ describe('DynamoDBGenerator', () => { const ensureStorageStackSpy = jest.spyOn(backendGenerator, 'ensureStorageStack'); const addEarlyStatementSpy = jest.spyOn(backendGenerator, 'addEarlyStatement'); - const generator = new DynamoDBGenerator(gen1App, backendGenerator, 'myTable', false); + const generator = new DynamoDBGenerator( + gen1App, + backendGenerator, + { category: 'storage', resourceName: 'myTable', service: 'DynamoDB', key: 'storage:DynamoDB' }, + false, + ); const ops = await generator.plan(); await ops[0].execute(); @@ -107,7 +127,12 @@ describe('DynamoDBGenerator', () => { const ensureStorageStackSpy = jest.spyOn(backendGenerator, 'ensureStorageStack'); - const generator = new DynamoDBGenerator(gen1App, backendGenerator, 'myTable', true); + const generator = new DynamoDBGenerator( + gen1App, + backendGenerator, + { category: 'storage', resourceName: 'myTable', service: 'DynamoDB', key: 'storage:DynamoDB' }, + true, + ); const ops = await generator.plan(); await ops[0].execute(); @@ -124,7 +149,12 @@ describe('DynamoDBGenerator', () => { }); (gen1App.aws.fetchTableDescription as jest.Mock).mockResolvedValue(undefined); - const generator = new DynamoDBGenerator(gen1App, backendGenerator, 'myTable', false); + const generator = new DynamoDBGenerator( + gen1App, + backendGenerator, + { category: 'storage', resourceName: 'myTable', service: 'DynamoDB', key: 'storage:DynamoDB' }, + false, + ); await expect(generator.plan()).rejects.toThrow("DynamoDB table 'myTable-abc123' not found"); }); @@ -155,7 +185,12 @@ describe('DynamoDBGenerator', () => { const addEarlyStatementSpy = jest.spyOn(backendGenerator, 'addEarlyStatement'); - const generator = new DynamoDBGenerator(gen1App, backendGenerator, 'myTable', false); + const generator = new DynamoDBGenerator( + gen1App, + backendGenerator, + { category: 'storage', resourceName: 'myTable', service: 'DynamoDB', key: 'storage:DynamoDB' }, + false, + ); const ops = await generator.plan(); await ops[0].execute(); @@ -178,7 +213,12 @@ describe('DynamoDBGenerator', () => { ProvisionedThroughput: {}, }); - const generator = new DynamoDBGenerator(gen1App, backendGenerator, 'myTable', false); + const generator = new DynamoDBGenerator( + gen1App, + backendGenerator, + { category: 'storage', resourceName: 'myTable', service: 'DynamoDB', key: 'storage:DynamoDB' }, + false, + ); const ops = await generator.plan(); expect(ops).toHaveLength(1); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts index 41e15b382c7..36ff1d679f6 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts @@ -106,6 +106,7 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { noOpLogger(), 'appId', 'main', + { category: 'auth', resourceName: 'test', service: 'Cognito', key: 'auth:Cognito' as const }, ); const ops = await refactorer.plan(); @@ -194,6 +195,7 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { noOpLogger(), 'appId', 'main', + { category: 'auth', resourceName: 'test', service: 'Cognito', key: 'auth:Cognito' as const }, ); const ops = await refactorer.plan(); @@ -249,6 +251,7 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { noOpLogger(), 'appId', 'main', + { category: 'auth', resourceName: 'test', service: 'Cognito', key: 'auth:Cognito' as const }, ); await expect(refactorer.plan()).rejects.toThrow('unable to find target stack'); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts index 7c725bfe32e..9f816d065da 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts @@ -98,6 +98,7 @@ describe('AuthCognitoRollbackRefactorer.plan()', () => { 'us-east-1', '123', noOpLogger(), + { category: 'auth', resourceName: 'test', service: 'Cognito', key: 'auth:Cognito' as const }, ); const ops = await refactorer.plan(); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts index 14b8d6c5222..42d53e4f91e 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts @@ -78,9 +78,14 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact cfnMock.on(DescribeStackResourcesCommand, { StackName: 'gen2-root' }).resolves({ StackResources: [] }); const { clients, gen1Env, gen2Branch } = makeInstances(); - await expect(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger()).plan()).rejects.toThrow( - 'unable to find source stack', - ); + await expect( + new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger(), { + category: 'storage', + resourceName: 'test', + service: 'S3', + key: 'storage:S3' as const, + }).plan(), + ).rejects.toThrow('unable to find source stack'); }); it('throws when source exists but destination does not (Path B)', async () => { @@ -90,9 +95,14 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact cfnMock.on(DescribeStackResourcesCommand, { StackName: 'gen2-root' }).resolves({ StackResources: [] }); const { clients, gen1Env, gen2Branch } = makeInstances(); - await expect(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger()).plan()).rejects.toThrow( - 'unable to find target stack', - ); + await expect( + new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger(), { + category: 'storage', + resourceName: 'test', + service: 'S3', + key: 'storage:S3' as const, + }).plan(), + ).rejects.toThrow('unable to find target stack'); }); it('throws when destination exists but source does not (Path B reversed)', async () => { @@ -102,9 +112,14 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact }); const { clients, gen1Env, gen2Branch } = makeInstances(); - await expect(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger()).plan()).rejects.toThrow( - 'unable to find source stack', - ); + await expect( + new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger(), { + category: 'storage', + resourceName: 'test', + service: 'S3', + key: 'storage:S3' as const, + }).plan(), + ).rejects.toThrow('unable to find source stack'); }); it('returns empty array when no matching resource types in source (Path D)', async () => { @@ -118,7 +133,12 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact cfnMock.on(GetTemplateCommand, { StackName: 'gen1-storage-stack' }).resolves({ TemplateBody: JSON.stringify(noStorageTemplate) }); const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger()).plan(); + const ops = await new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger(), { + category: 'storage', + resourceName: 'test', + service: 'S3', + key: 'storage:S3' as const, + }).plan(); expect(ops).toEqual([]); }); @@ -126,7 +146,12 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact setupStorageMocks(cfnMock); const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger()).plan(); + const ops = await new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger(), { + category: 'storage', + resourceName: 'test', + service: 'S3', + key: 'storage:S3' as const, + }).plan(); const descriptions = (await Promise.all(ops.map((o) => o.describe()))).flat(); expect(descriptions).toHaveLength(4); @@ -172,7 +197,12 @@ describe('StorageS3RollbackRefactorer.plan() — rollback without holding stack' cfnMock.on(GetTemplateCommand, { StackName: 'gen1-storage-stack' }).resolves({ TemplateBody: JSON.stringify(gen1StorageTemplate) }); const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new StorageS3RollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger()).plan(); + const ops = await new StorageS3RollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger(), { + category: 'storage', + resourceName: 'test', + service: 'S3', + key: 'storage:S3' as const, + }).plan(); const descriptions = (await Promise.all(ops.map((o) => o.describe()))).flat(); // Rollback: no updateSource/updateTarget, just move @@ -224,7 +254,12 @@ describe('Analytics wiring tests', () => { it('forward: discovers analytics stacks and maps Kinesis stream', async () => { setupAnalyticsMocks(cfnMock); const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new AnalyticsKinesisForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger()).plan(); + const ops = await new AnalyticsKinesisForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger(), { + category: 'analytics', + resourceName: 'test', + service: 'Kinesis', + key: 'analytics:Kinesis' as const, + }).plan(); const descriptions = (await Promise.all(ops.map((o) => o.describe()))).flat(); expect(descriptions).toHaveLength(4); @@ -235,7 +270,12 @@ describe('Analytics wiring tests', () => { cfnMock.on(DescribeStacksCommand).resolves({ Stacks: [] }); // no holding stack setupAnalyticsMocks(cfnMock); const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new AnalyticsKinesisRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger()).plan(); + const ops = await new AnalyticsKinesisRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger(), { + category: 'analytics', + resourceName: 'test', + service: 'Kinesis', + key: 'analytics:Kinesis' as const, + }).plan(); const descriptions = (await Promise.all(ops.map((o) => o.describe()))).flat(); expect(descriptions).toHaveLength(1); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts index c9d4e2dd2a3..a2b393edfb2 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts @@ -23,7 +23,12 @@ class TestRollbackRefactorer extends RollbackCategoryRefactorer { protected override readonly gen1LogicalIds: ReadonlyMap; constructor(ids: ReadonlyMap) { - super(null as any, null as any, null as any, 'us-east-1', '123', noOpLogger()); + super(null as any, null as any, null as any, 'us-east-1', '123', noOpLogger(), { + category: 'storage', + resourceName: 'test', + service: 'S3', + key: 'storage:S3' as const, + }); this.gen1LogicalIds = ids; } protected async fetchSourceStackId() { @@ -48,7 +53,12 @@ function toIdMap(mappings: MoveMapping[]): Map { } describe('ForwardCategoryRefactorer.buildResourceMappings (default type-matching)', () => { - const refactorer = new TestForwardRefactorer(null as any, null as any, null as any, 'us-east-1', '123', noOpLogger()); + const refactorer = new TestForwardRefactorer(null as any, null as any, null as any, 'us-east-1', '123', noOpLogger(), { + category: 'storage', + resourceName: 'test', + service: 'S3', + key: 'storage:S3' as const, + }); it('maps single resource per type', () => { const mappings = refactorer.testBuildResourceMappings( diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts index 97b448c0e45..b67162ad5a6 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts @@ -90,6 +90,7 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { 'us-east-1', '123', noOpLogger(), + { category: 'storage', resourceName: 'test', service: 'S3', key: 'storage:S3' as const }, ); const blueprint = makeBlueprint({ targetResolved: { Lambda: { Type: 'AWS::Lambda::Function', Properties: {} } }, @@ -117,6 +118,7 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { 'us-east-1', '123', noOpLogger(), + { category: 'storage', resourceName: 'test', service: 'S3', key: 'storage:S3' as const }, ); const blueprint = makeBlueprint({ @@ -157,6 +159,7 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { 'us-east-1', '123', noOpLogger(), + { category: 'storage', resourceName: 'test', service: 'S3', key: 'storage:S3' as const }, ); const blueprint = makeBlueprint({ diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts index 2a54f3d36d3..78f70fb7e35 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts @@ -106,7 +106,12 @@ describe('RollbackCategoryRefactorer.afterMovePlan', () => { (clients as any).cloudFormation = new CloudFormationClient({}); const gen1Env = new StackFacade(clients, 'gen1-root'); const gen2Branch = new StackFacade(clients, 'gen2-root'); - const refactorer = new TestRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', noOpLogger()); + const refactorer = new TestRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', noOpLogger(), { + category: 'storage', + resourceName: 'test', + service: 'S3', + key: 'storage:S3', + }); const sourceAfterRemoval: CFNTemplate = { AWSTemplateFormatVersion: '2010-09-09', @@ -154,7 +159,12 @@ describe('RollbackCategoryRefactorer.afterMovePlan', () => { (clients as any).cloudFormation = new CloudFormationClient({}); const gen1Env = new StackFacade(clients, 'gen1-root'); const gen2Branch = new StackFacade(clients, 'gen2-root'); - const refactorer = new TestRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', noOpLogger()); + const refactorer = new TestRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', noOpLogger(), { + category: 'storage', + resourceName: 'test', + service: 'S3', + key: 'storage:S3', + }); const emptyTemplate: CFNTemplate = { AWSTemplateFormatVersion: '2010-09-09', diff --git a/packages/amplify-cli/src/commands/gen2-migration/_operation.ts b/packages/amplify-cli/src/commands/gen2-migration/_operation.ts index 2ffe95c0918..9f911f075b6 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/_operation.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/_operation.ts @@ -1,3 +1,5 @@ +import { DiscoveredResource } from './generate/_infra/gen1-app'; + /** * Result of a validation check. */ @@ -33,6 +35,12 @@ export interface Validation { * Interface for atomic operations that can be executed as part of a migration step. */ export interface AmplifyMigrationOperation { + /** + * The discovered resource this operation belongs to, if any. + * Used by Plan.describe() to group operations by resource. + */ + readonly resource?: DiscoveredResource; + /** * Returns human-readable strings describing what the operation will do. */ diff --git a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts index 04a326aecd9..5215eb6a800 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts @@ -60,17 +60,37 @@ export class Plan { /** * Renders the operations summary and implications to the terminal. + * Operations with a resource are grouped under a resource header; + * ungrouped operations render as a flat list. */ public async describe(): Promise { - const descriptions: string[] = []; + const grouped = new Map(); + const ungrouped: string[] = []; + for (const op of this.operations) { - descriptions.push(...(await op.describe())); + const lines = await op.describe(); + if (lines.length === 0) continue; + if (op.resource) { + const label = `${op.resource.resourceName} (${op.resource.category}/${op.resource.service})`; + if (!grouped.has(label)) grouped.set(label, []); + grouped.get(label)!.push(...lines); + } else { + ungrouped.push(...lines); + } } - if (descriptions.length > 0) { + if (grouped.size > 0 || ungrouped.length > 0) { printer.info(chalk.bold(chalk.underline('Operations Summary'))); printer.blankLine(); - for (const description of descriptions) { + + for (const [label, descriptions] of grouped) { + printer.info(chalk.bold(label)); + for (const description of descriptions) { + printer.info(` • ${description}`); + } + } + + for (const description of ungrouped) { printer.info(`• ${description}`); } printer.blankLine(); diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate.ts b/packages/amplify-cli/src/commands/gen2-migration/generate.ts index ac66478299f..8e8e2500998 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate.ts @@ -83,9 +83,9 @@ export class AmplifyMigrationGenerateStep extends AmplifyMigrationStep { }); if (isReferenceAuth) { - generators.push(new ReferenceAuthGenerator(gen1App, backendGenerator, outputDir)); + generators.push(new ReferenceAuthGenerator(gen1App, backendGenerator, outputDir, resource)); } else { - authGenerator = new AuthGenerator(gen1App, backendGenerator, outputDir); + authGenerator = new AuthGenerator(gen1App, backendGenerator, outputDir, resource); generators.push(authGenerator); } break; @@ -94,22 +94,22 @@ export class AmplifyMigrationGenerateStep extends AmplifyMigrationStep { // Handled by the AuthGenerator created for the main Cognito resource. break; case 'storage:S3': - s3Generator = new S3Generator(gen1App, backendGenerator, outputDir); + s3Generator = new S3Generator(gen1App, backendGenerator, outputDir, resource); generators.push(s3Generator); break; case 'storage:DynamoDB': { const hasS3Bucket = discovered.some((r) => r.category === 'storage' && r.service === 'S3'); - generators.push(new DynamoDBGenerator(gen1App, backendGenerator, resource.resourceName, hasS3Bucket)); + generators.push(new DynamoDBGenerator(gen1App, backendGenerator, resource, hasS3Bucket)); break; } case 'api:AppSync': - generators.push(new DataGenerator(gen1App, backendGenerator, outputDir)); + generators.push(new DataGenerator(gen1App, backendGenerator, outputDir, resource)); break; case 'api:API Gateway': - generators.push(new RestApiGenerator(gen1App, backendGenerator, resource.resourceName)); + generators.push(new RestApiGenerator(gen1App, backendGenerator, resource)); break; case 'analytics:Kinesis': - generators.push(new AnalyticsKinesisGenerator(gen1App, backendGenerator, outputDir, resource.resourceName)); + generators.push(new AnalyticsKinesisGenerator(gen1App, backendGenerator, outputDir, resource)); break; case 'function:Lambda': { const functionCategoryMap = computeFunctionCategories(gen1App); @@ -118,7 +118,7 @@ export class AmplifyMigrationGenerateStep extends AmplifyMigrationStep { backendGenerator, packageJsonGenerator, outputDir, - resourceName: resource.resourceName, + resource, category: functionCategoryMap.get(resource.resourceName) ?? 'function', }); generators.push(funcGen); diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/analytics/kinesis.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/analytics/kinesis.generator.ts index 1830c534512..339ea75cbf9 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/analytics/kinesis.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/analytics/kinesis.generator.ts @@ -4,7 +4,7 @@ import ts from 'typescript'; import { Planner } from '../../../planner'; import { AmplifyMigrationOperation } from '../../../_operation'; import { BackendGenerator } from '../backend.generator'; -import { Gen1App } from '../../_infra/gen1-app'; +import { Gen1App, DiscoveredResource } from '../../_infra/gen1-app'; import { TS } from '../../_infra/ts'; import { AnalyticsRenderer } from './kinesis.renderer'; import { KinesisCfnConverter, KinesisAnalyticsDefinition } from './kinesis-cfn-converter'; @@ -22,14 +22,14 @@ export class AnalyticsKinesisGenerator implements Planner { private readonly gen1App: Gen1App; private readonly backendGenerator: BackendGenerator; private readonly outputDir: string; - private readonly resourceName: string; + private readonly resource: DiscoveredResource; private readonly renderer: AnalyticsRenderer; - public constructor(gen1App: Gen1App, backendGenerator: BackendGenerator, outputDir: string, resourceName: string) { + public constructor(gen1App: Gen1App, backendGenerator: BackendGenerator, outputDir: string, resource: DiscoveredResource) { this.gen1App = gen1App; this.backendGenerator = backendGenerator; this.outputDir = outputDir; - this.resourceName = resourceName; + this.resource = resource; this.renderer = new AnalyticsRenderer(); } @@ -38,24 +38,25 @@ export class AnalyticsKinesisGenerator implements Planner { */ public async plan(): Promise { const analyticsCategory = this.gen1App.meta('analytics'); - const resourceMeta = analyticsCategory?.[this.resourceName] as Record | undefined; + const resourceMeta = analyticsCategory?.[this.resource.resourceName] as Record | undefined; if (!resourceMeta) { - throw new Error(`Analytics resource '${this.resourceName}' not found in amplify-meta.json`); + throw new Error(`Analytics resource '${this.resource.resourceName}' not found in amplify-meta.json`); } const rootStackName = this.gen1App.rootStackName; const analyticsDir = path.join(this.outputDir, 'amplify', 'analytics'); const definition: KinesisAnalyticsDefinition = { - name: this.resourceName, + name: this.resource.resourceName, service: 'Kinesis', providerMetadata: resourceMeta.providerMetadata as KinesisAnalyticsDefinition['providerMetadata'], }; return [ { + resource: this.resource, validate: () => undefined, - describe: async () => [`Generate amplify/analytics/${this.resourceName}/resource.ts`], + describe: async () => [`Generate amplify/analytics/${this.resource.resourceName}/resource.ts`], execute: async () => { const fileWriter = async (content: string, filePath: string) => { await fs.mkdir(path.dirname(filePath), { recursive: true }); diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/auth/auth.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/auth/auth.generator.ts index 40dde0fe900..ce43178abed 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/auth/auth.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/auth/auth.generator.ts @@ -5,7 +5,7 @@ import { UserPoolClientType } from '@aws-sdk/client-cognito-identity-provider'; import { Planner } from '../../../planner'; import { AmplifyMigrationOperation } from '../../../_operation'; import { BackendGenerator } from '../backend.generator'; -import { Gen1App } from '../../_infra/gen1-app'; +import { Gen1App, DiscoveredResource } from '../../_infra/gen1-app'; import { TS } from '../../_infra/ts'; import { AuthRenderOptions, AuthRenderer, AuthTrigger, FunctionAccess } from './auth.renderer'; @@ -24,14 +24,16 @@ export class AuthGenerator implements Planner { private readonly gen1App: Gen1App; private readonly backendGenerator: BackendGenerator; private readonly outputDir: string; + private readonly resource: DiscoveredResource; private readonly defineAuth: AuthRenderer; private readonly access: FunctionAccess[] = []; private readonly triggers: AuthTrigger[] = []; - public constructor(gen1App: Gen1App, backendGenerator: BackendGenerator, outputDir: string) { + public constructor(gen1App: Gen1App, backendGenerator: BackendGenerator, outputDir: string, resource: DiscoveredResource) { this.gen1App = gen1App; this.backendGenerator = backendGenerator; this.outputDir = outputDir; + this.resource = resource; this.defineAuth = new AuthRenderer(); } @@ -86,6 +88,7 @@ export class AuthGenerator implements Planner { return [ { + resource: this.resource, validate: () => undefined, describe: async () => ['Generate amplify/auth/resource.ts'], execute: async () => { diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/auth/reference-auth.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/auth/reference-auth.generator.ts index b9e2c302930..8b122e3768c 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/auth/reference-auth.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/auth/reference-auth.generator.ts @@ -4,7 +4,7 @@ import ts from 'typescript'; import { Planner } from '../../../planner'; import { AmplifyMigrationOperation } from '../../../_operation'; import { BackendGenerator } from '../backend.generator'; -import { Gen1App } from '../../_infra/gen1-app'; +import { Gen1App, DiscoveredResource } from '../../_infra/gen1-app'; import { TS } from '../../_infra/ts'; import { ReferenceAuth, ReferenceAuthRenderer } from './reference-auth.renderer'; @@ -19,12 +19,14 @@ export class ReferenceAuthGenerator implements Planner { private readonly gen1App: Gen1App; private readonly backendGenerator: BackendGenerator; private readonly outputDir: string; + private readonly resource: DiscoveredResource; private readonly renderer = new ReferenceAuthRenderer(); - public constructor(gen1App: Gen1App, backendGenerator: BackendGenerator, outputDir: string) { + public constructor(gen1App: Gen1App, backendGenerator: BackendGenerator, outputDir: string, resource: DiscoveredResource) { this.gen1App = gen1App; this.backendGenerator = backendGenerator; this.outputDir = outputDir; + this.resource = resource; } public async plan(): Promise { @@ -44,6 +46,7 @@ export class ReferenceAuthGenerator implements Planner { return [ { + resource: this.resource, validate: () => undefined, describe: async () => ['Generate amplify/auth/resource.ts (reference auth)'], execute: async () => { diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/data/data.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/data/data.generator.ts index 8d688127bc1..719f0c7f50b 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/data/data.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/data/data.generator.ts @@ -5,7 +5,7 @@ import { GraphqlApi } from '@aws-sdk/client-appsync'; import { Planner } from '../../../planner'; import { AmplifyMigrationOperation } from '../../../_operation'; import { BackendGenerator } from '../backend.generator'; -import { Gen1App } from '../../_infra/gen1-app'; +import { Gen1App, DiscoveredResource } from '../../_infra/gen1-app'; import { TS } from '../../_infra/ts'; import { DataRenderer, DataTableMapping } from './data.renderer'; @@ -24,12 +24,14 @@ export class DataGenerator implements Planner { private readonly gen1App: Gen1App; private readonly backendGenerator: BackendGenerator; private readonly outputDir: string; + private readonly resource: DiscoveredResource; private readonly defineData: DataRenderer; - public constructor(gen1App: Gen1App, backendGenerator: BackendGenerator, outputDir: string) { + public constructor(gen1App: Gen1App, backendGenerator: BackendGenerator, outputDir: string, resource: DiscoveredResource) { this.gen1App = gen1App; this.backendGenerator = backendGenerator; this.outputDir = outputDir; + this.resource = resource; this.defineData = new DataRenderer(gen1App.envName); } @@ -62,6 +64,7 @@ export class DataGenerator implements Planner { return [ { + resource: this.resource, validate: () => undefined, describe: async () => ['Generate amplify/data/resource.ts'], execute: async () => { diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/function/function.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/function/function.generator.ts index 9ec0b1b0057..75b86542cbd 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/function/function.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/function/function.generator.ts @@ -5,7 +5,7 @@ import { AmplifyMigrationOperation } from '../../../_operation'; import { JSONUtilities } from '@aws-amplify/amplify-cli-core'; import { Planner } from '../../../planner'; import { BackendGenerator } from '../backend.generator'; -import { Gen1App } from '../../_infra/gen1-app'; +import { Gen1App, DiscoveredResource } from '../../_infra/gen1-app'; import { TS } from '../../_infra/ts'; import { FunctionRenderer, RenderDefineFunctionOptions } from './function.renderer'; import { RootPackageJsonGenerator } from '../../package.json.generator'; @@ -54,7 +54,7 @@ interface FunctionGeneratorOptions { readonly backendGenerator: BackendGenerator; readonly packageJsonGenerator: RootPackageJsonGenerator; readonly outputDir: string; - readonly resourceName: string; + readonly resource: DiscoveredResource; readonly category: string; } @@ -76,7 +76,7 @@ export class FunctionGenerator implements Planner { private s3Generator: S3Generator | undefined; private readonly packageJsonGenerator: RootPackageJsonGenerator; private readonly outputDir: string; - private readonly resourceName: string; + private readonly resource: DiscoveredResource; private readonly category: string; private readonly renderer: FunctionRenderer; @@ -85,7 +85,7 @@ export class FunctionGenerator implements Planner { this.backendGenerator = options.backendGenerator; this.packageJsonGenerator = options.packageJsonGenerator; this.outputDir = options.outputDir; - this.resourceName = options.resourceName; + this.resource = options.resource; this.category = options.category; this.renderer = new FunctionRenderer(options.gen1App.appId, options.gen1App.envName); } @@ -124,6 +124,7 @@ export class FunctionGenerator implements Planner { return [ { + resource: this.resource, validate: () => undefined, describe: async () => [`Generate amplify/${this.category}/${func.resourceName}/resource.ts`], execute: async () => { @@ -143,15 +144,15 @@ export class FunctionGenerator implements Planner { */ private async resolve(): Promise { const functionCategory = this.gen1App.meta('function'); - if (!functionCategory || !functionCategory[this.resourceName]) { - throw new Error(`Function '${this.resourceName}' not found in amplify-meta.json`); + if (!functionCategory || !functionCategory[this.resource.resourceName]) { + throw new Error(`Function '${this.resource.resourceName}' not found in amplify-meta.json`); } - const resourceMeta = functionCategory[this.resourceName] as Record; + const resourceMeta = functionCategory[this.resource.resourceName] as Record; const output = resourceMeta.output as Record | undefined; const deployedName = output?.Name; if (!deployedName) { - throw new Error(`Function '${this.resourceName}' has no deployed name in amplify-meta.json output`); + throw new Error(`Function '${this.resource.resourceName}' has no deployed name in amplify-meta.json output`); } const config = await this.gen1App.aws.fetchFunctionConfig(deployedName); @@ -175,7 +176,7 @@ export class FunctionGenerator implements Planner { const { dynamoActions, kinesisActions, graphqlApiPermissions, authAccess } = this.extractCfnPermissions(); return { - resourceName: this.resourceName, + resourceName: this.resource.resourceName, category: this.category, entry, deployedName, @@ -248,18 +249,18 @@ export class FunctionGenerator implements Planner { private contributeAuthAccess(func: ResolvedFunction): void { if (!this.authGenerator) return; if (Object.keys(func.authAccess).length > 0) { - this.authGenerator.addFunctionAuthAccess({ resourceName: this.resourceName, permissions: func.authAccess }); + this.authGenerator.addFunctionAuthAccess({ resourceName: this.resource.resourceName, permissions: func.authAccess }); } } private contributeAuthTrigger(): void { if (!this.authGenerator || this.category !== 'auth') return; const authResourceName = this.gen1App.singleResourceName('auth', 'Cognito'); - if (!this.resourceName.startsWith(authResourceName)) return; - const suffix = this.resourceName.slice(authResourceName.length); + if (!this.resource.resourceName.startsWith(authResourceName)) return; + const suffix = this.resource.resourceName.slice(authResourceName.length); const event = TRIGGER_SUFFIX_TO_EVENT[suffix]; if (event) { - this.authGenerator.addTrigger({ event, resourceName: this.resourceName }); + this.authGenerator.addTrigger({ event, resourceName: this.resource.resourceName }); } } @@ -277,7 +278,7 @@ export class FunctionGenerator implements Planner { 's3:ListBucket': 'read', }; - const templatePath = `function/${this.resourceName}/${this.resourceName}-cloudformation-template.json`; + const templatePath = `function/${this.resource.resourceName}/${this.resource.resourceName}-cloudformation-template.json`; // eslint-disable-next-line @typescript-eslint/no-explicit-any -- untyped CloudFormation template const template = this.gen1App.json(templatePath); const policy = template.Resources?.AmplifyResourcesPolicy; @@ -297,7 +298,7 @@ export class FunctionGenerator implements Planner { } if (permissions.size > 0) { - this.s3Generator.addFunctionStorageAccess(this.resourceName, category, Array.from(permissions)); + this.s3Generator.addFunctionStorageAccess(this.resource.resourceName, category, Array.from(permissions)); } } @@ -324,13 +325,13 @@ export class FunctionGenerator implements Planner { for (const config of lambdaConfigs) { const functionRef = config?.Function?.Ref as string | undefined; - if (!functionRef || !functionRef.includes(this.resourceName)) continue; + if (!functionRef || !functionRef.includes(this.resource.resourceName)) continue; const event = config.Event as string | undefined; if (event?.includes('ObjectCreated')) { - this.s3Generator.addTrigger('onUpload', this.resourceName); + this.s3Generator.addTrigger('onUpload', this.resource.resourceName); } else if (event?.includes('ObjectRemoved')) { - this.s3Generator.addTrigger('onDelete', this.resourceName); + this.s3Generator.addTrigger('onDelete', this.resource.resourceName); } } } @@ -353,7 +354,7 @@ export class FunctionGenerator implements Planner { }, }); } catch (e) { - throw new Error(`Failed to copy source files for function '${this.resourceName}': ${e}`); + throw new Error(`Failed to copy source files for function '${this.resource.resourceName}': ${e}`); } } @@ -377,7 +378,7 @@ export class FunctionGenerator implements Planner { } } } catch (e) { - throw new Error(`Failed to read package.json for function '${this.resourceName}': ${e}`); + throw new Error(`Failed to read package.json for function '${this.resource.resourceName}': ${e}`); } } @@ -540,7 +541,7 @@ export class FunctionGenerator implements Planner { graphqlApiPermissions: { hasMutation: boolean; hasQuery: boolean }; authAccess: AuthPermissions; } { - const templatePath = `function/${this.resourceName}/${this.resourceName}-cloudformation-template.json`; + const templatePath = `function/${this.resource.resourceName}/${this.resource.resourceName}-cloudformation-template.json`; // eslint-disable-next-line @typescript-eslint/no-explicit-any -- untyped CloudFormation template const template = this.gen1App.json(templatePath); const policy = template.Resources?.AmplifyResourcesPolicy; diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/rest-api/rest-api.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/rest-api/rest-api.generator.ts index 7b684af285f..ba77d8607ca 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/rest-api/rest-api.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/rest-api/rest-api.generator.ts @@ -2,7 +2,7 @@ import ts from 'typescript'; import { Planner } from '../../../planner'; import { AmplifyMigrationOperation } from '../../../_operation'; import { BackendGenerator } from '../backend.generator'; -import { Gen1App } from '../../_infra/gen1-app'; +import { Gen1App, DiscoveredResource } from '../../_infra/gen1-app'; import { CorsConfiguration, RestApiDefinition, RestApiPath, RestApiRenderer } from './rest-api.renderer'; const factory = ts.factory; @@ -19,19 +19,19 @@ const factory = ts.factory; export class RestApiGenerator implements Planner { private readonly gen1App: Gen1App; private readonly backendGenerator: BackendGenerator; - private readonly resourceName: string; + private readonly resource: DiscoveredResource; - public constructor(gen1App: Gen1App, backendGenerator: BackendGenerator, resourceName: string) { + public constructor(gen1App: Gen1App, backendGenerator: BackendGenerator, resource: DiscoveredResource) { this.gen1App = gen1App; this.backendGenerator = backendGenerator; - this.resourceName = resourceName; + this.resource = resource; } /** * Plans the REST API generation operation. */ public async plan(): Promise { - const restApi = await RestApiGenerator.readRestApiConfig(this.gen1App, this.resourceName); + const restApi = await RestApiGenerator.readRestApiConfig(this.gen1App, this.resource.resourceName); const functionCategory = this.gen1App.meta('function'); const functionNames = new Set(Object.keys((functionCategory as object) ?? {})); const hasAuth = this.gen1App.meta('auth') !== undefined; @@ -39,6 +39,7 @@ export class RestApiGenerator implements Planner { return [ { + resource: this.resource, validate: () => undefined, describe: async () => [`Generate REST API ${restApi.apiName} in amplify/backend.ts`], execute: async () => { diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/storage/dynamodb.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/storage/dynamodb.generator.ts index 1a929f85904..2d018187d93 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/storage/dynamodb.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/storage/dynamodb.generator.ts @@ -1,7 +1,7 @@ import { Planner } from '../../../planner'; import { AmplifyMigrationOperation } from '../../../_operation'; import { BackendGenerator } from '../backend.generator'; -import { Gen1App } from '../../_infra/gen1-app'; +import { Gen1App, DiscoveredResource } from '../../_infra/gen1-app'; import { DynamoDBRenderer, DynamoDBGSI, DynamoDBTableDefinition } from './dynamodb.renderer'; import { TableDescription, KeySchemaElement, AttributeDefinition } from '@aws-sdk/client-dynamodb'; @@ -15,14 +15,14 @@ import { TableDescription, KeySchemaElement, AttributeDefinition } from '@aws-sd export class DynamoDBGenerator implements Planner { private readonly gen1App: Gen1App; private readonly backendGenerator: BackendGenerator; - private readonly resourceName: string; + private readonly resource: DiscoveredResource; private readonly hasS3Bucket: boolean; private readonly renderer = new DynamoDBRenderer(); - public constructor(gen1App: Gen1App, backendGenerator: BackendGenerator, resourceName: string, hasS3Bucket: boolean) { + public constructor(gen1App: Gen1App, backendGenerator: BackendGenerator, resource: DiscoveredResource, hasS3Bucket: boolean) { this.gen1App = gen1App; this.backendGenerator = backendGenerator; - this.resourceName = resourceName; + this.resource = resource; this.hasS3Bucket = hasS3Bucket; } @@ -34,8 +34,9 @@ export class DynamoDBGenerator implements Planner { return [ { + resource: this.resource, validate: () => undefined, - describe: async () => [`Generate DynamoDB table ${this.resourceName} in amplify/backend.ts`], + describe: async () => [`Generate DynamoDB table ${this.resource.resourceName} in amplify/backend.ts`], execute: async () => { const imports = this.renderer.requiredImports(); this.backendGenerator.addImport(imports.source, imports.identifiers); @@ -51,9 +52,9 @@ export class DynamoDBGenerator implements Planner { private async fetchTable(): Promise { const storageMeta = this.gen1App.meta('storage'); - const resourceMeta = storageMeta?.[this.resourceName] as Record | undefined; + const resourceMeta = storageMeta?.[this.resource.resourceName] as Record | undefined; const output = resourceMeta?.output as Record | undefined; - const actualTableName = output?.Name || this.resourceName; + const actualTableName = output?.Name || this.resource.resourceName; const table = await this.gen1App.aws.fetchTableDescription(actualTableName); if (!table) { diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/storage/s3.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/storage/s3.generator.ts index d15b29bbba0..e164dac5c4d 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/storage/s3.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/storage/s3.generator.ts @@ -5,7 +5,7 @@ import type { BucketAccelerateStatus, BucketVersioningStatus, ServerSideEncrypti import { Planner } from '../../../planner'; import { AmplifyMigrationOperation } from '../../../_operation'; import { BackendGenerator } from '../backend.generator'; -import { Gen1App } from '../../_infra/gen1-app'; +import { Gen1App, DiscoveredResource } from '../../_infra/gen1-app'; import { TS } from '../../_infra/ts'; import { S3Renderer, AccessPatterns, StorageTriggerEvent, Permission } from './s3.renderer'; @@ -49,6 +49,7 @@ export class S3Generator implements Planner { private readonly gen1App: Gen1App; private readonly backendGenerator: BackendGenerator; private readonly outputDir: string; + private readonly resource: DiscoveredResource; private readonly defineStorage: S3Renderer; private readonly functionStorageAccess: Array<{ readonly functionName: string; @@ -57,10 +58,11 @@ export class S3Generator implements Planner { }> = []; private readonly triggers: Partial> = {}; - public constructor(gen1App: Gen1App, backendGenerator: BackendGenerator, outputDir: string) { + public constructor(gen1App: Gen1App, backendGenerator: BackendGenerator, outputDir: string, resource: DiscoveredResource) { this.gen1App = gen1App; this.backendGenerator = backendGenerator; this.outputDir = outputDir; + this.resource = resource; this.defineStorage = new S3Renderer(gen1App.envName); } @@ -109,6 +111,7 @@ export class S3Generator implements Planner { const storageIdentifier = bucketName; return { + resource: this.resource, validate: () => undefined, describe: async () => ['Generate amplify/storage/resource.ts'], execute: async () => { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index 88a1be1e1a4..3edf15264d2 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -162,6 +162,7 @@ export abstract class CategoryRefactorer implements Refactorer { const sourceStackName = extractStackNameFromId(source.stackId); return [ { + resource: this.resource, validate: () => ({ description: `Ensure no destructive changes to ${sourceStackName}`, run: async () => { @@ -194,6 +195,7 @@ export abstract class CategoryRefactorer implements Refactorer { const targetStackName = extractStackNameFromId(target.stackId); return [ { + resource: this.resource, validate: () => ({ description: `Ensure no destructive changes to ${targetStackName}`, run: async () => { @@ -299,6 +301,7 @@ export abstract class CategoryRefactorer implements Refactorer { return [ { + resource: this.resource, validate: () => undefined, describe: async () => [ `Move ${resourceMappings.length} resource(s) from '${extractStackNameFromId(source.stackId)}' to '${extractStackNameFromId( diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index 2a3bda49a86..382005e266d 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -141,6 +141,7 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { return [ { + resource: this.resource, validate: () => undefined, describe: async () => [`Move Gen2 resources to holding stack '${holdingStackName}'`], execute: async () => { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index 2ae71f44fdf..7a6e210a936 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -149,6 +149,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { return [ { + resource: this.resource, validate: () => undefined, describe: async () => [`Update ${holdingStackName} to include placeholder resource`], execute: async () => { @@ -161,6 +162,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { }, }, { + resource: this.resource, validate: () => undefined, describe: async () => [`Restore ${resourcesToRestore.length} resource(s) from holding stack to Gen2`], execute: async () => { @@ -185,6 +187,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { private buildDeleteHoldingStackOp(holdingStackName: string): AmplifyMigrationOperation { return { + resource: this.resource, validate: () => undefined, describe: async () => [`Delete holding stack '${holdingStackName}'`], execute: async () => { From 88270795f9129469598255a4c220e16dbc326067 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Fri, 20 Mar 2026 21:59:19 -0400 Subject: [PATCH 11/70] fix(cli-internal): tweak plan resource group display Change label format to "category/resourceName (service)", add cyan color to group headers, remove indentation on grouped items, and add blank lines between groups for readability. --- Prompt: i've made changes --- packages/amplify-cli/src/commands/gen2-migration/_plan.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts index 5215eb6a800..c5156261917 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts @@ -71,7 +71,7 @@ export class Plan { const lines = await op.describe(); if (lines.length === 0) continue; if (op.resource) { - const label = `${op.resource.resourceName} (${op.resource.category}/${op.resource.service})`; + const label = `${op.resource.category}/${op.resource.resourceName} (${op.resource.service})`; if (!grouped.has(label)) grouped.set(label, []); grouped.get(label)!.push(...lines); } else { @@ -84,10 +84,12 @@ export class Plan { printer.blankLine(); for (const [label, descriptions] of grouped) { - printer.info(chalk.bold(label)); + printer.info(chalk.bold(chalk.cyan(label))); + printer.blankLine(); for (const description of descriptions) { - printer.info(` • ${description}`); + printer.info(`• ${description}`); } + printer.blankLine(); } for (const description of ungrouped) { From 5562032273089f49b3dc5dc862996751ad62265b Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Fri, 20 Mar 2026 22:13:51 -0400 Subject: [PATCH 12/70] feat(cli-internal): refine plan display and support UserPool Groups rollback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Group all operations under labeled sections — resource-backed ops use "Resource: category/name (service)", ungrouped ops fall under "Project". Descriptions rendered in gray for visual hierarchy. Add auth:Cognito-UserPool-Groups support in refactor assess and rollback using AuthUserPoolGroupsRollbackRefactorer. --- Prompt: I've made more changes. commit --- .../src/commands/gen2-migration/_plan.ts | 22 +++++-------------- .../gen2-migration/refactor/refactor.ts | 9 ++++++-- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts index c5156261917..0569ce9be3c 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts @@ -65,37 +65,27 @@ export class Plan { */ public async describe(): Promise { const grouped = new Map(); - const ungrouped: string[] = []; for (const op of this.operations) { const lines = await op.describe(); if (lines.length === 0) continue; - if (op.resource) { - const label = `${op.resource.category}/${op.resource.resourceName} (${op.resource.service})`; - if (!grouped.has(label)) grouped.set(label, []); - grouped.get(label)!.push(...lines); - } else { - ungrouped.push(...lines); - } + const label = op.resource ? `Resource: ${op.resource.category}/${op.resource.resourceName} (${op.resource.service})` : 'Project'; + if (!grouped.has(label)) grouped.set(label, []); + grouped.get(label)!.push(...lines); } - if (grouped.size > 0 || ungrouped.length > 0) { + if (grouped.size > 0) { printer.info(chalk.bold(chalk.underline('Operations Summary'))); printer.blankLine(); for (const [label, descriptions] of grouped) { - printer.info(chalk.bold(chalk.cyan(label))); + printer.info(label); printer.blankLine(); for (const description of descriptions) { - printer.info(`• ${description}`); + printer.info(chalk.gray(`• ${description}`)); } printer.blankLine(); } - - for (const description of ungrouped) { - printer.info(`• ${description}`); - } - printer.blankLine(); } if (this.implications.length > 0) { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts index a9f9f1bbe93..fb41853359a 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts @@ -19,6 +19,7 @@ import { AnalyticsKinesisRollbackRefactorer } from './analytics/analytics-rollba import { Gen1App, DiscoveredResource } from '../generate/_infra/gen1-app'; import { Assessment } from '../_assessment'; import { AuthUserPoolGroupsForwardRefactorer } from './auth/auth-user-pool-groups-forward'; +import { AuthUserPoolGroupsRollbackRefactorer } from './auth/auth-user-pool-groups-rollback'; export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { /** @@ -32,6 +33,7 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { for (const resource of discovered) { switch (resource.key) { case 'auth:Cognito': + case 'auth:Cognito-UserPool-Groups': case 'storage:S3': case 'storage:DynamoDB': case 'analytics:Kinesis': @@ -41,7 +43,6 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { case 'api:API Gateway': assessment.record('refactor', resource, { supported: true }); break; - case 'auth:Cognito-UserPool-Groups': case 'unsupported': assessment.record('refactor', resource, { supported: false }); break; @@ -132,6 +133,11 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { case 'auth:Cognito': refactorers.push(new AuthCognitoRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource)); break; + case 'auth:Cognito-UserPool-Groups': + refactorers.push( + new AuthUserPoolGroupsRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource), + ); + break; case 'storage:S3': refactorers.push(new StorageS3RollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource)); break; @@ -151,7 +157,6 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { case 'api:AppSync': case 'api:API Gateway': break; - case 'auth:Cognito-UserPool-Groups': case 'unsupported': throw new AmplifyError('MigrationError', { message: `Unsupported resource '${resource.resourceName}' (${resource.category}:${resource.service}). Cannot rollback.`, From 5811ef7ec713c676254fa72fa39834e240e7e5f7 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Fri, 20 Mar 2026 22:17:11 -0400 Subject: [PATCH 13/70] docs: add commit OOM prevention and scratch file cleanup Add NODE_OPTIONS="--max-old-space-size=8192" to the commit command example and instructions to delete the scratch commit message file after a successful commit. --- Prompt: add an instruction in AGENTS.md to delete the commit file after committing and always increase memory size to prevent lint failures --- AGENTS.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/AGENTS.md b/AGENTS.md index a7aec2e9cef..dab19d09e5c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -51,9 +51,12 @@ Verify your changes by following these guidelines: To avoid issues with multi-line commit messages, write the message to `.commit-message.ai-generated.txt` and use `-F`: ```bash - git commit --author="John Doe (AI) " -F .commit-message.ai-generated.txt + NODE_OPTIONS="--max-old-space-size=8192" git commit --author="John Doe (AI) " -F .commit-message.ai-generated.txt ``` + Always set `NODE_OPTIONS="--max-old-space-size=8192"` when committing to prevent OOM failures in the lint-staged hook. + After a successful commit, delete the scratch file: `rm -f .commit-message.ai-generated.txt`. + - Since this repo has a commit hook that takes quite a long time to run, don't immediately commit every change you were asked to do. Apply your judgment, if the diff is still fairly small just keep going. Otherwise, ask the user if they want to commit or keep going. From 28f8dd44b2afbcf0bbd24b7c1dd7284c12640fdf Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sat, 21 Mar 2026 09:59:51 -0400 Subject: [PATCH 14/70] feat(cli-internal): add changeset preview and move table to refactor plan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Enrich the refactor plan output with changeset reports and formatted move tables so operators can review exactly what each operation will change before executing. Key changes: - Auth cognito: explicit client matching (GEN1_WEB_CLIENT ↔ GEN2_WEB_CLIENT, GEN1_NATIVE_APP_CLIENT ↔ GEN2_NATIVE_APP_CLIENT) replacing negation-based logic. Exported shared constants. - Auth user pool groups: extracted RESOURCE_TYPES constant, use USER_POOL_GROUP_TYPE consistently. - category-refactorer: added changeset preview via CreateChangeSetCommand/DescribeChangeSetCommand, made updateSource/updateTarget/buildMoveOperations/beforeMovePlan async, enriched plan descriptions with changeset reports and move tables. - forward/rollback-category-refactorer: updated to async signatures, added move table formatting to descriptions. - Removed validateSingleResourcePerCategory from refactor.ts. - Plan output now uses numbered steps and bold labels. - New files: changeset-report.ts, template-diff.ts, move-table.ts (formatting utilities). - Test stubs updated for new CFN commands. --- Prompt: I've made changes - commit what i've done. dont run tests or anything, just commit. --- .../category-plan-orchestration.test.ts | 8 ++ .../src/commands/gen2-migration/_plan.ts | 6 +- .../refactor/auth/auth-cognito-forward.ts | 28 +++-- .../refactor/auth/auth-cognito-rollback.ts | 22 +++- .../auth/auth-user-pool-groups-forward.ts | 4 +- .../auth/auth-user-pool-groups-rollback.ts | 6 +- .../refactor/changeset-report.ts | 47 ++++++++ .../gen2-migration/refactor/move-table.ts | 38 ++++++ .../gen2-migration/refactor/refactor.ts | 27 +---- .../refactor/resolvers/cfn-output-resolver.ts | 2 +- .../gen2-migration/refactor/template-diff.ts | 65 +++++++++++ .../refactor/workflow/category-refactorer.ts | 108 +++++++++++++++--- .../workflow/forward-category-refactorer.ts | 19 ++- .../workflow/rollback-category-refactorer.ts | 10 +- 14 files changed, 321 insertions(+), 69 deletions(-) create mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/changeset-report.ts create mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts create mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/template-diff.ts diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts index 42d53e4f91e..3f29863eeac 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts @@ -13,6 +13,8 @@ import { DescribeStacksCommand, DescribeStackResourcesCommand, ResourceStatus, + CreateChangeSetCommand, + DescribeChangeSetCommand, } from '@aws-sdk/client-cloudformation'; const ts = new Date(); @@ -70,6 +72,8 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact let cfnMock: ReturnType; beforeEach(() => { cfnMock = mockClient(CloudFormationClient); + cfnMock.on(CreateChangeSetCommand).resolves({}); + cfnMock.on(DescribeChangeSetCommand).resolves({ Status: 'CREATE_COMPLETE', Changes: [] }); }); afterEach(() => cfnMock.restore()); @@ -166,6 +170,8 @@ describe('StorageS3RollbackRefactorer.plan() — rollback without holding stack' let cfnMock: ReturnType; beforeEach(() => { cfnMock = mockClient(CloudFormationClient); + cfnMock.on(CreateChangeSetCommand).resolves({}); + cfnMock.on(DescribeChangeSetCommand).resolves({ Status: 'CREATE_COMPLETE', Changes: [] }); }); afterEach(() => cfnMock.restore()); @@ -216,6 +222,8 @@ describe('Analytics wiring tests', () => { let cfnMock: ReturnType; beforeEach(() => { cfnMock = mockClient(CloudFormationClient); + cfnMock.on(CreateChangeSetCommand).resolves({}); + cfnMock.on(DescribeChangeSetCommand).resolves({ Status: 'CREATE_COMPLETE', Changes: [] }); }); afterEach(() => cfnMock.restore()); diff --git a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts index 0569ce9be3c..8109c645573 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts @@ -79,10 +79,12 @@ export class Plan { printer.blankLine(); for (const [label, descriptions] of grouped) { - printer.info(label); + printer.info(chalk.bold(label)); printer.blankLine(); + let step = 1; for (const description of descriptions) { - printer.info(chalk.gray(`• ${description}`)); + printer.info(`${step}. ${description}`); + step++; } printer.blankLine(); } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-forward.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-forward.ts index 2b5815bfa06..9dd1becfeaf 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-forward.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-forward.ts @@ -8,16 +8,21 @@ import { SpinningLogger } from '../../_spinning-logger'; import { DiscoveredResource } from '../../generate/_infra/gen1-app'; import { CFNResource } from '../../cfn-template'; -const GEN1_WEB_APP_CLIENT = 'UserPoolClientWeb'; const HOSTED_PROVIDER_META_PARAMETER_NAME = 'hostedUIProviderMeta'; const HOSTED_PROVIDER_CREDENTIALS_PARAMETER_NAME = 'hostedUIProviderCreds'; const USER_POOL_ID_OUTPUT_KEY_NAME = 'UserPoolId'; +export const GEN1_NATIVE_APP_CLIENT = 'UserPoolClient'; +export const GEN1_WEB_CLIENT = 'UserPoolClientWeb'; + export const GEN2_NATIVE_APP_CLIENT = 'UserPoolNativeAppClient'; +export const GEN2_WEB_CLIENT = 'UserPoolAppClient'; + +export const USER_POOL_CLIENT_TYPE = 'AWS::Cognito::UserPoolClient'; -export const AUTH_RESOURCE_TYPES = [ +export const RESOURCE_TYPES = [ 'AWS::Cognito::UserPool', - 'AWS::Cognito::UserPoolClient', + USER_POOL_CLIENT_TYPE, 'AWS::Cognito::IdentityPool', 'AWS::Cognito::IdentityPoolRoleAttachment', 'AWS::Cognito::UserPoolDomain', @@ -44,7 +49,7 @@ export class AuthCognitoForwardRefactorer extends ForwardCategoryRefactorer { } protected resourceTypes(): string[] { - return AUTH_RESOURCE_TYPES; + return RESOURCE_TYPES; } /** @@ -85,10 +90,17 @@ export class AuthCognitoForwardRefactorer extends ForwardCategoryRefactorer { return false; } switch (sourceResource.Type) { - case 'AWS::Cognito::UserPoolClient': { - const isWebPair = sourceId === GEN1_WEB_APP_CLIENT && !targetId.includes(GEN2_NATIVE_APP_CLIENT); - const isNativePair = sourceId !== GEN1_WEB_APP_CLIENT && targetId.includes(GEN2_NATIVE_APP_CLIENT); - return isWebPair || isNativePair; + case USER_POOL_CLIENT_TYPE: { + switch (sourceId) { + case GEN1_WEB_CLIENT: + return targetId.includes(GEN2_WEB_CLIENT); + case GEN1_NATIVE_APP_CLIENT: + return targetId.includes(GEN2_NATIVE_APP_CLIENT); + default: + throw new AmplifyError('MigrationError', { + message: `Unexpected source logical id ${sourceId} for resource of type ${USER_POOL_CLIENT_TYPE}`, + }); + } } default: return true; diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-rollback.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-rollback.ts index ed0a836a6ce..74c8a68fd22 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-rollback.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-rollback.ts @@ -1,6 +1,13 @@ import { CFNResource } from '../../cfn-template'; import { RollbackCategoryRefactorer } from '../workflow/rollback-category-refactorer'; -import { AUTH_RESOURCE_TYPES, GEN2_NATIVE_APP_CLIENT } from './auth-cognito-forward'; +import { + RESOURCE_TYPES, + GEN1_NATIVE_APP_CLIENT, + GEN1_WEB_CLIENT, + GEN2_NATIVE_APP_CLIENT, + GEN2_WEB_CLIENT, + USER_POOL_CLIENT_TYPE, +} from './auth-cognito-forward'; /** * Rollback refactorer for the auth:Cognito resource. @@ -9,7 +16,7 @@ import { AUTH_RESOURCE_TYPES, GEN2_NATIVE_APP_CLIENT } from './auth-cognito-forw */ export class AuthCognitoRollbackRefactorer extends RollbackCategoryRefactorer { protected resourceTypes(): string[] { - return AUTH_RESOURCE_TYPES; + return RESOURCE_TYPES; } protected async fetchSourceStackId(): Promise { @@ -22,8 +29,15 @@ export class AuthCognitoRollbackRefactorer extends RollbackCategoryRefactorer { protected targetLogicalId(sourceId: string, sourceResource: CFNResource): string | undefined { switch (sourceResource.Type) { - case 'AWS::Cognito::UserPoolClient': - return sourceId.includes(GEN2_NATIVE_APP_CLIENT) ? 'UserPoolClient' : 'UserPoolClientWeb'; + case USER_POOL_CLIENT_TYPE: { + if (sourceId.includes(GEN2_NATIVE_APP_CLIENT)) { + return GEN1_NATIVE_APP_CLIENT; + } + if (sourceId.includes(GEN2_WEB_CLIENT)) { + return GEN1_WEB_CLIENT; + } + throw new Error(); + } case 'AWS::Cognito::UserPool': return 'UserPool'; case 'AWS::Cognito::IdentityPool': diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-forward.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-forward.ts index 06e4be040a0..f4203b97da1 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-forward.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-forward.ts @@ -3,6 +3,8 @@ import { ForwardCategoryRefactorer } from '../workflow/forward-category-refactor export const USER_POOL_GROUP_TYPE = 'AWS::Cognito::UserPoolGroup'; +export const RESOURCE_TYPES = [USER_POOL_GROUP_TYPE]; + /** * Forward refactorer for the auth:UserPoolGroups resource. * @@ -10,7 +12,7 @@ export const USER_POOL_GROUP_TYPE = 'AWS::Cognito::UserPoolGroup'; */ export class AuthUserPoolGroupsForwardRefactorer extends ForwardCategoryRefactorer { protected resourceTypes(): string[] { - return [USER_POOL_GROUP_TYPE]; + return RESOURCE_TYPES; } protected async fetchSourceStackId(): Promise { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-rollback.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-rollback.ts index e6032aba6ff..3499b546c54 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-rollback.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-rollback.ts @@ -1,6 +1,6 @@ import { CFNResource } from '../../cfn-template'; import { RollbackCategoryRefactorer } from '../workflow/rollback-category-refactorer'; -import { USER_POOL_GROUP_TYPE } from './auth-user-pool-groups-forward'; +import { RESOURCE_TYPES, USER_POOL_GROUP_TYPE } from './auth-user-pool-groups-forward'; /** * Rollback refactorer for the auth:UserPoolGroups resource. @@ -9,7 +9,7 @@ import { USER_POOL_GROUP_TYPE } from './auth-user-pool-groups-forward'; */ export class AuthUserPoolGroupsRollbackRefactorer extends RollbackCategoryRefactorer { protected resourceTypes(): string[] { - return [USER_POOL_GROUP_TYPE]; + return RESOURCE_TYPES; } protected async fetchSourceStackId(): Promise { @@ -22,7 +22,7 @@ export class AuthUserPoolGroupsRollbackRefactorer extends RollbackCategoryRefact protected targetLogicalId(sourceId: string, sourceResource: CFNResource): string | undefined { switch (sourceResource.Type) { - case 'AWS::Cognito::UserPoolGroup': + case USER_POOL_GROUP_TYPE: return `${sourceResource.Properties['GroupName']}Group`; default: return undefined; diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/changeset-report.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/changeset-report.ts new file mode 100644 index 00000000000..de541f241fb --- /dev/null +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/changeset-report.ts @@ -0,0 +1,47 @@ +import chalk from 'chalk'; +import { DescribeChangeSetOutput } from '@aws-sdk/client-cloudformation'; + +/** + * Produces a human-readable report of property changes from a described changeset. + */ +export function formatChangeSetReport(changeSet: DescribeChangeSetOutput): string { + const changes = changeSet.Changes ?? []; + if (changes.length === 0) return ''; + + const lines: string[] = []; + + for (const change of changes) { + const rc = change.ResourceChange; + if (!rc) continue; + + const action = rc.Action ?? 'Unknown'; + const logicalId = rc.LogicalResourceId ?? 'Unknown'; + const resourceType = rc.ResourceType ?? 'Unknown'; + + lines.push(''); + lines.push(`${chalk.bold(logicalId)} (${resourceType}) — ${chalk.yellow(action)}`); + lines.push(''); + + const details = rc.Details ?? []; + const propDetails = details.filter((d) => d.Target?.Attribute === 'Properties' && d.Target?.Name); + + for (const detail of propDetails) { + const target = detail.Target!; + const name = target.Name!; + const before = target.BeforeValue; + const after = target.AfterValue; + + if (before && after) { + lines.push(` ${name}: ${chalk.red(before)} → ${chalk.green(after)}`); + } else if (after) { + lines.push(` ${name}: ${chalk.green(`+ ${after}`)}`); + } else if (before) { + lines.push(` ${name}: ${chalk.red(`- ${before}`)}`); + } else { + lines.push(` ${name}: (changed)`); + } + } + } + + return lines.join('\n'); +} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts new file mode 100644 index 00000000000..dd5a0b19d20 --- /dev/null +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts @@ -0,0 +1,38 @@ +import { ResourceMapping } from './workflow/category-refactorer'; + +/** + * Renders a box-drawing table of resource mappings for move operations. + */ +export function formatMoveTable( + resourceMappings: readonly ResourceMapping[], + physicalIds: ReadonlyMap, + resourceTypes: ReadonlyMap, +): string { + const rows = resourceMappings.map((m) => ({ + type: resourceTypes.get(m.Source.LogicalResourceId) ?? '', + source: m.Source.LogicalResourceId, + target: m.Destination.LogicalResourceId, + physical: physicalIds.get(m.Source.LogicalResourceId) ?? '', + })); + + const w = { + type: Math.max(4, ...rows.map((r) => r.type.length)) + 2, + source: Math.max(6, ...rows.map((r) => r.source.length)) + 2, + target: Math.max(6, ...rows.map((r) => r.target.length)) + 2, + physical: Math.max(8, ...rows.map((r) => r.physical.length)) + 2, + }; + + const hr = (c: string, l: string, m: string, r: string) => + `${l}${''.padEnd(w.type, c)}${m}${''.padEnd(w.source, c)}${m}${''.padEnd(w.target, c)}${m}${''.padEnd(w.physical, c)}${r}`; + const row = (ty: string, s: string, t: string, p: string) => + `│ ${ty.padEnd(w.type - 2)} │ ${s.padEnd(w.source - 2)} │ ${t.padEnd(w.target - 2)} │ ${p.padEnd(w.physical - 2)} │`; + + return [ + hr('─', '┌', '┬', '┐'), + row('Type', 'Source Logical ID', 'Target Logical ID', 'Physical ID'), + hr('─', '├', '┼', '┤'), + ...rows.map((r) => row(r.type, r.source, r.target, r.physical)), + hr('─', '└', '┴', '┘'), + '', + ].join('\n'); +} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts index fb41853359a..9767913c2f8 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts @@ -16,7 +16,7 @@ import { StorageDynamoForwardRefactorer } from './storage/storage-dynamo-forward import { StorageDynamoRollbackRefactorer } from './storage/storage-dynamo-rollback'; import { AnalyticsKinesisForwardRefactorer } from './analytics/analytics-forward'; import { AnalyticsKinesisRollbackRefactorer } from './analytics/analytics-rollback'; -import { Gen1App, DiscoveredResource } from '../generate/_infra/gen1-app'; +import { Gen1App } from '../generate/_infra/gen1-app'; import { Assessment } from '../_assessment'; import { AuthUserPoolGroupsForwardRefactorer } from './auth/auth-user-pool-groups-forward'; import { AuthUserPoolGroupsRollbackRefactorer } from './auth/auth-user-pool-groups-rollback'; @@ -59,8 +59,6 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { const refactorers: Refactorer[] = []; - validateSingleResourcePerCategory(discovered); - for (const resource of discovered) { switch (resource.key) { case 'auth:Cognito': @@ -126,8 +124,6 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { const refactorers: Refactorer[] = []; - validateSingleResourcePerCategory(discovered); - for (const resource of discovered) { switch (resource.key) { case 'auth:Cognito': @@ -230,24 +226,3 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { return toStack; } } - -/** - * Throws if any refactorer category has more than one resource. - * Refactorers assume a single resource per category — multiple - * resources would produce incorrect mappings. - */ -function validateSingleResourcePerCategory(discovered: readonly DiscoveredResource[]): void { - const refactorCategories = new Set(['auth', 'storage', 'analytics']); - const categoryCounts = new Map(); - for (const r of discovered) { - if (!refactorCategories.has(r.category)) continue; - categoryCounts.set(r.category, (categoryCounts.get(r.category) ?? 0) + 1); - } - for (const [category, count] of categoryCounts) { - if (count > 1) { - throw new AmplifyError('MigrationError', { - message: `Multiple resources in '${category}' category detected. The refactor step does not yet support multiple resources per category.`, - }); - } - } -} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/resolvers/cfn-output-resolver.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/resolvers/cfn-output-resolver.ts index df2ad793146..3adea7de43c 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/resolvers/cfn-output-resolver.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/resolvers/cfn-output-resolver.ts @@ -135,7 +135,7 @@ function buildOutputLookup( const record = value as Record; if ('Ref' in record && typeof record.Ref === 'string') { - refLookup.set(record.Ref, runtimeOutput.OutputValue); + refLookup.set(record.Ref, runtimeOutput.OutputValue + 'bubu'); } else if ('Fn::GetAtt' in record && Array.isArray(record['Fn::GetAtt'])) { getAttLookup.set(record['Fn::GetAtt'][0] as string, runtimeOutput.OutputValue); } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/template-diff.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/template-diff.ts new file mode 100644 index 00000000000..290a483177b --- /dev/null +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/template-diff.ts @@ -0,0 +1,65 @@ +import chalk from 'chalk'; +import { CFNTemplate } from '../cfn-template'; + +/** + * Produces a per-resource property diff between a deployed and resolved template. + */ +export function formatTemplateDiff(deployed: CFNTemplate, resolved: CFNTemplate): string { + const lines: string[] = []; + const allIds = new Set([...Object.keys(deployed.Resources ?? {}), ...Object.keys(resolved.Resources ?? {})]); + + for (const logicalId of allIds) { + const oldRes = deployed.Resources?.[logicalId]; + const newRes = resolved.Resources?.[logicalId]; + + if (!oldRes && newRes) { + lines.push(`${chalk.green('+')} ${chalk.bold(logicalId)} (${newRes.Type})`); + continue; + } + if (oldRes && !newRes) { + lines.push(`${chalk.red('-')} ${chalk.bold(logicalId)} (${oldRes.Type})`); + continue; + } + if (!oldRes || !newRes) continue; + + const propDiffs = diffProperties(oldRes.Properties ?? {}, newRes.Properties ?? {}); + if (propDiffs.length === 0) continue; + + lines.push(`${chalk.yellow('~')} ${chalk.bold(logicalId)} (${oldRes.Type})`); + lines.push(...propDiffs); + } + + return lines.join('\n'); +} + +function diffProperties(oldProps: Record, newProps: Record, prefix = ''): string[] { + const lines: string[] = []; + const allKeys = new Set([...Object.keys(oldProps), ...Object.keys(newProps)]); + + for (const key of allKeys) { + const path = prefix ? `${prefix}.${key}` : key; + const oldVal = oldProps[key]; + const newVal = newProps[key]; + + if (oldVal === undefined) { + lines.push(` ${chalk.green('+')} ${path}: ${format(newVal)}`); + } else if (newVal === undefined) { + lines.push(` ${chalk.red('-')} ${path}: ${format(oldVal)}`); + } else if (typeof oldVal === 'object' && typeof newVal === 'object' && oldVal !== null && newVal !== null) { + if (!Array.isArray(oldVal) && !Array.isArray(newVal)) { + lines.push(...diffProperties(oldVal as Record, newVal as Record, path)); + } else if (JSON.stringify(oldVal) !== JSON.stringify(newVal)) { + lines.push(` ${chalk.yellow('~')} ${path}: ${format(oldVal)} → ${format(newVal)}`); + } + } else if (JSON.stringify(oldVal) !== JSON.stringify(newVal)) { + lines.push(` ${chalk.yellow('~')} ${path}: ${format(oldVal)} → ${format(newVal)}`); + } + } + + return lines; +} + +function format(value: unknown): string { + if (typeof value === 'string') return value; + return JSON.stringify(value); +} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index 3edf15264d2..bd63b35cf5e 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -1,4 +1,9 @@ -import { Parameter } from '@aws-sdk/client-cloudformation'; +import { + Parameter, + CreateChangeSetCommand, + DescribeChangeSetCommand, + waitUntilChangeSetCreateComplete, +} from '@aws-sdk/client-cloudformation'; import { AmplifyError } from '@aws-amplify/amplify-cli-core'; import { CFNResource, CFNStackStatus, CFNTemplate } from '../../cfn-template'; import { Refactorer } from '../refactorer'; @@ -10,6 +15,9 @@ import { tryRefactorStack, RefactorFailure } from '../cfn-stack-refactor-updater import { SpinningLogger } from '../../_spinning-logger'; import { extractStackNameFromId } from '../utils'; import { DiscoveredResource } from '../../generate/_infra/gen1-app'; +import { formatTemplateDiff } from '../template-diff'; +import { formatChangeSetReport } from '../changeset-report'; +import { formatMoveTable } from '../move-table'; export const MIGRATION_PLACEHOLDER_LOGICAL_ID = 'MigrationPlaceholder'; export const PLACEHOLDER_RESOURCE: CFNResource = { Type: 'AWS::CloudFormation::WaitConditionHandle', Properties: {} }; @@ -89,6 +97,7 @@ export abstract class CategoryRefactorer implements Refactorer { * All AWS reads happen here. Operations only execute mutations. */ public async plan(): Promise { + this.logger.push(`${this.resource.category}/${this.resource.resourceName} (${this.resource.service})`); const sourceStackId = await this.fetchSourceStackId(); const destStackId = await this.fetchDestStackId(); @@ -111,11 +120,19 @@ export abstract class CategoryRefactorer implements Refactorer { return []; // Nothing to move — skip this category } - const beforeMoveOps = this.beforeMovePlan(blueprint); - const moveOps = this.buildMoveOperations(blueprint); + const beforeMoveOps = await this.beforeMovePlan(blueprint); + const moveOps = await this.buildMoveOperations(blueprint); const afterMoveOps = await this.afterMovePlan(blueprint); - return [...this.updateSource(blueprint.source), ...this.updateTarget(blueprint.target), ...beforeMoveOps, ...moveOps, ...afterMoveOps]; + const operations = [ + ...(await this.updateSource(blueprint.source)), + ...(await this.updateTarget(blueprint.target)), + ...beforeMoveOps, + ...moveOps, + ...afterMoveOps, + ]; + this.logger.pop(); + return operations; } // -- Category-specific (abstract) -- @@ -143,7 +160,7 @@ export abstract class CategoryRefactorer implements Refactorer { * Forward: moves Gen2 resources to holding stack. * Rollback: no-op. */ - protected abstract beforeMovePlan(blueprint: RefactorBlueprint): AmplifyMigrationOperation[]; + protected abstract beforeMovePlan(blueprint: RefactorBlueprint): Promise | AmplifyMigrationOperation[]; /** * Post-move operations. @@ -158,8 +175,12 @@ export abstract class CategoryRefactorer implements Refactorer { * Creates operations to update the source stack with the resolved template. * Rollback overrides this to return []. */ - protected updateSource(source: ResolvedStack): AmplifyMigrationOperation[] { + protected async updateSource(source: ResolvedStack): Promise { const sourceStackName = extractStackNameFromId(source.stackId); + // const deployed = await this.gen1Env.fetchTemplate(source.stackId); + // const diff = formatTemplateDiff(deployed, source.resolvedTemplate); + const report = await this.createChangeSetReport(source); + const description = [report].filter(Boolean).join('\n\n'); return [ { resource: this.resource, @@ -169,7 +190,10 @@ export abstract class CategoryRefactorer implements Refactorer { return { valid: true }; }, }), - describe: async () => [`Update source stack '${sourceStackName}' with resolved references`], + describe: async () => + description + ? [`Update source stack '${sourceStackName}' with resolved references\n${description}`] + : [`Update source stack '${sourceStackName}' with resolved references`], execute: async () => { const status = await tryUpdateStack({ cfnClient: this.clients.cloudFormation, @@ -191,8 +215,12 @@ export abstract class CategoryRefactorer implements Refactorer { * Creates operations to update the target stack with the resolved template. * Rollback overrides this to return []. */ - protected updateTarget(target: ResolvedStack): AmplifyMigrationOperation[] { + protected async updateTarget(target: ResolvedStack): Promise { const targetStackName = extractStackNameFromId(target.stackId); + // const deployed = await this.gen2Branch.fetchTemplate(target.stackId); + // const diff = formatTemplateDiff(deployed, target.resolvedTemplate); + const report = await this.createChangeSetReport(target); + const description = [report].filter(Boolean).join('\n\n'); return [ { resource: this.resource, @@ -202,7 +230,10 @@ export abstract class CategoryRefactorer implements Refactorer { return { valid: true }; }, }), - describe: async () => [`Update target stack '${targetStackName}' with resolved references`], + describe: async () => + description + ? [`Update target stack '${targetStackName}' with resolved references\n${description}`] + : [`Update target stack '${targetStackName}' with resolved references`], execute: async () => { const status = await tryUpdateStack({ cfnClient: this.clients.cloudFormation, @@ -220,6 +251,42 @@ export abstract class CategoryRefactorer implements Refactorer { ]; } + /** + * Creates a changeset for the given stack and returns a formatted report. + */ + private async createChangeSetReport(stack: ResolvedStack): Promise { + const changeSetName = `migration-preview-${Date.now()}`; + const stackName = stack.stackId; + + this.logger.push(extractStackNameFromId(stackName)); + await this.clients.cloudFormation.send( + new CreateChangeSetCommand({ + StackName: stackName, + ChangeSetName: changeSetName, + TemplateBody: JSON.stringify(stack.resolvedTemplate), + Parameters: stack.parameters, + Capabilities: ['CAPABILITY_NAMED_IAM'], + }), + ); + + try { + await waitUntilChangeSetCreateComplete( + { client: this.clients.cloudFormation, maxWaitTime: 120 }, + { StackName: stackName, ChangeSetName: changeSetName }, + ); + } catch { + // Changeset creation fails when there are no changes — not an error. + return ''; + } + + const changeSet = await this.clients.cloudFormation.send( + new DescribeChangeSetCommand({ StackName: stackName, ChangeSetName: changeSetName, IncludePropertyValues: true }), + ); + + this.logger.pop(); + return formatChangeSetReport(changeSet); + } + /** * Builds a consolidated RefactorBlueprint from resolved source and target stacks. * Returns undefined if there are no resources to move. @@ -292,22 +359,29 @@ export abstract class CategoryRefactorer implements Refactorer { /** * Creates the move operation that executes the CloudFormation stack refactor. */ - protected buildMoveOperations(blueprint: RefactorBlueprint): AmplifyMigrationOperation[] { + protected async buildMoveOperations(blueprint: RefactorBlueprint): Promise { const { source, target, mappings } = blueprint; + const sourceStackName = extractStackNameFromId(source.stackId); + const targetStackName = extractStackNameFromId(target.stackId); const resourceMappings: ResourceMapping[] = mappings.map(({ sourceId, targetId }) => ({ - Source: { StackName: extractStackNameFromId(source.stackId), LogicalResourceId: sourceId }, - Destination: { StackName: extractStackNameFromId(target.stackId), LogicalResourceId: targetId }, + Source: { StackName: sourceStackName, LogicalResourceId: sourceId }, + Destination: { StackName: targetStackName, LogicalResourceId: targetId }, })); + const sourceResources = await this.gen1Env.fetchStackResources(source.stackId); + const physicalIds = new Map(sourceResources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId ?? ''])); + const types = new Map(mappings.map((m) => [m.sourceId, m.resource.Type])); + + const header = `Move ${resourceMappings.length} resource(s) from '${extractStackNameFromId( + sourceStackName, + )}' to '${extractStackNameFromId(targetStackName)}'`; + const table = formatMoveTable(resourceMappings, physicalIds, types); + return [ { resource: this.resource, validate: () => undefined, - describe: async () => [ - `Move ${resourceMappings.length} resource(s) from '${extractStackNameFromId(source.stackId)}' to '${extractStackNameFromId( - target.stackId, - )}'`, - ], + describe: async () => [`${header}\n\n${table}`], execute: async () => { const result = await tryRefactorStack(this.clients.cloudFormation, { StackDefinitions: [ diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index 382005e266d..c8d7efbaa40 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -10,6 +10,7 @@ import { extractStackNameFromId } from '../utils'; import { getHoldingStackName, findHoldingStack, deleteHoldingStack } from '../holding-stack'; import { tryRefactorStack, RefactorFailure } from '../cfn-stack-refactor-updater'; import { CategoryRefactorer, MoveMapping, RefactorBlueprint, ResolvedStack, ResourceMapping } from './category-refactorer'; +import { formatMoveTable } from '../move-table'; /** * Forward direction base: moves resources from Gen1 (source) to Gen2 (target). @@ -32,12 +33,12 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { } if (matchedTargets.length === 0) { throw new AmplifyError('InvalidStackError', { - message: `Source resource '${sourceId}' (type '${sourceResource.Type}') has no corresponding target resource`, + message: `Source resource '${sourceId}' (${sourceResource.Type}) has no corresponding target resource`, }); } if (matchedTargets.length > 1) { throw new AmplifyError('InvalidStackError', { - message: `Source resource '${sourceId}' (type '${sourceResource.Type}') has multiple corresponding target resources`, + message: `Source resource '${sourceId}' (${sourceResource.Type}) has multiple corresponding target resources`, }); } const targetId = matchedTargets[0]; @@ -111,7 +112,7 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { /** * Moves Gen2 resources to a holding stack before the main refactor. */ - protected beforeMovePlan(blueprint: RefactorBlueprint): AmplifyMigrationOperation[] { + protected async beforeMovePlan(blueprint: RefactorBlueprint): Promise { const targetResources = this.filterResourcesByType(blueprint.target.resolvedTemplate); if (targetResources.size === 0) { return []; @@ -139,11 +140,21 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { Destination: { StackName: extractStackNameFromId(holdingStackName), LogicalResourceId: id }, })); + const gen2Resources = await this.gen2Branch.fetchStackResources(blueprint.target.stackId); + const physicalIds = new Map(gen2Resources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId ?? ''])); + const types = new Map([...targetResources].map(([id, res]) => [id, res.Type])); + + const header = `Move ${holdingMappings.length} resource(s) from '${extractStackNameFromId( + blueprint.target.stackId, + )}' to '${extractStackNameFromId(holdingStackName)}'`; + + const table = formatMoveTable(holdingMappings, physicalIds, types); + return [ { resource: this.resource, validate: () => undefined, - describe: async () => [`Move Gen2 resources to holding stack '${holdingStackName}'`], + describe: async () => [`${header}\n\n${table}`], execute: async () => { const existing = await findHoldingStack(this.clients.cloudFormation, holdingStackName); if (existing?.StackStatus === 'REVIEW_IN_PROGRESS') { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index 7a6e210a936..3c745766055 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -18,6 +18,7 @@ import { ResolvedStack, ResourceMapping, } from './category-refactorer'; +import { formatMoveTable } from '../move-table'; /** * Rollback direction base: moves resources from Gen2 (source) back to Gen1 (target). @@ -85,11 +86,11 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { return { stackId, resolvedTemplate: originalTemplate, parameters }; } - protected override updateSource(): AmplifyMigrationOperation[] { + protected override async updateSource(): Promise { return []; } - protected override updateTarget(): AmplifyMigrationOperation[] { + protected override async updateTarget(): Promise { return []; } @@ -147,6 +148,9 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { Destination: { StackName: extractStackNameFromId(gen2StackId), LogicalResourceId: logicalId }, })); + const restoreTypes = new Map(resourcesToRestore.map(([id, res]) => [id, (res as { Type: string }).Type])); + const restoreTable = formatMoveTable(restoreMappings, new Map(), restoreTypes); + return [ { resource: this.resource, @@ -164,7 +168,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { { resource: this.resource, validate: () => undefined, - describe: async () => [`Restore ${resourcesToRestore.length} resource(s) from holding stack to Gen2`], + describe: async () => [`Restore ${resourcesToRestore.length} resource(s) from holding stack to Gen2\n\n${restoreTable}`], execute: async () => { const result = await tryRefactorStack(this.clients.cloudFormation, { StackDefinitions: [ From 9d2e090e8534c8d291946e570e43fdd44bf1221f Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sat, 21 Mar 2026 11:03:03 -0400 Subject: [PATCH 15/70] fix(cli-internal): improve changeset report formatting Use full JSON path (Target.Path) instead of just the top-level property name so duplicate property names like RoleMappings are distinguishable. Show before/after values on separate lines for readability. Use bgGray chalk headers for operation descriptions. Minor spacing tweaks in plan output and move table. --- Prompt: I've made more changes. Commit them. not tests. --- .../src/commands/gen2-migration/_plan.ts | 2 +- .../refactor/changeset-report.ts | 16 +++++++----- .../gen2-migration/refactor/move-table.ts | 1 - .../refactor/workflow/category-refactorer.ts | 25 ++++++++----------- .../workflow/forward-category-refactorer.ts | 9 ++++--- 5 files changed, 28 insertions(+), 25 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts index 8109c645573..e7a82783662 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts @@ -84,9 +84,9 @@ export class Plan { let step = 1; for (const description of descriptions) { printer.info(`${step}. ${description}`); + printer.blankLine(); step++; } - printer.blankLine(); } } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/changeset-report.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/changeset-report.ts index de541f241fb..1f1889bc5a3 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/changeset-report.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/changeset-report.ts @@ -20,25 +20,29 @@ export function formatChangeSetReport(changeSet: DescribeChangeSetOutput): strin lines.push(''); lines.push(`${chalk.bold(logicalId)} (${resourceType}) — ${chalk.yellow(action)}`); - lines.push(''); const details = rc.Details ?? []; const propDetails = details.filter((d) => d.Target?.Attribute === 'Properties' && d.Target?.Name); for (const detail of propDetails) { const target = detail.Target!; - const name = target.Name!; + const propertyPath = target.Path ?? target.Name!; const before = target.BeforeValue; const after = target.AfterValue; + lines.push(''); if (before && after) { - lines.push(` ${name}: ${chalk.red(before)} → ${chalk.green(after)}`); + lines.push(` ${propertyPath}:`); + lines.push(` ${chalk.red(`- ${before}`)}`); + lines.push(` ${chalk.green(`+ ${after}`)}`); } else if (after) { - lines.push(` ${name}: ${chalk.green(`+ ${after}`)}`); + lines.push(` ${propertyPath}:`); + lines.push(` ${chalk.green(`+ ${after}`)}`); } else if (before) { - lines.push(` ${name}: ${chalk.red(`- ${before}`)}`); + lines.push(` ${propertyPath}:`); + lines.push(` ${chalk.red(`- ${before}`)}`); } else { - lines.push(` ${name}: (changed)`); + lines.push(` ${propertyPath}: (changed)`); } } } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts index dd5a0b19d20..91890f3a677 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts @@ -33,6 +33,5 @@ export function formatMoveTable( hr('─', '├', '┼', '┤'), ...rows.map((r) => row(r.type, r.source, r.target, r.physical)), hr('─', '└', '┴', '┘'), - '', ].join('\n'); } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index bd63b35cf5e..5685e12376a 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -18,6 +18,7 @@ import { DiscoveredResource } from '../../generate/_infra/gen1-app'; import { formatTemplateDiff } from '../template-diff'; import { formatChangeSetReport } from '../changeset-report'; import { formatMoveTable } from '../move-table'; +import chalk from 'chalk'; export const MIGRATION_PLACEHOLDER_LOGICAL_ID = 'MigrationPlaceholder'; export const PLACEHOLDER_RESOURCE: CFNResource = { Type: 'AWS::CloudFormation::WaitConditionHandle', Properties: {} }; @@ -180,7 +181,7 @@ export abstract class CategoryRefactorer implements Refactorer { // const deployed = await this.gen1Env.fetchTemplate(source.stackId); // const diff = formatTemplateDiff(deployed, source.resolvedTemplate); const report = await this.createChangeSetReport(source); - const description = [report].filter(Boolean).join('\n\n'); + const header = chalk.bgGray(`Update source stack '${sourceStackName}' with resolved references`); return [ { resource: this.resource, @@ -190,10 +191,7 @@ export abstract class CategoryRefactorer implements Refactorer { return { valid: true }; }, }), - describe: async () => - description - ? [`Update source stack '${sourceStackName}' with resolved references\n${description}`] - : [`Update source stack '${sourceStackName}' with resolved references`], + describe: async () => [`${header}\n${report}`], execute: async () => { const status = await tryUpdateStack({ cfnClient: this.clients.cloudFormation, @@ -220,7 +218,7 @@ export abstract class CategoryRefactorer implements Refactorer { // const deployed = await this.gen2Branch.fetchTemplate(target.stackId); // const diff = formatTemplateDiff(deployed, target.resolvedTemplate); const report = await this.createChangeSetReport(target); - const description = [report].filter(Boolean).join('\n\n'); + const header = chalk.bgGray(`Update target stack '${targetStackName}' with resolved references`); return [ { resource: this.resource, @@ -230,10 +228,7 @@ export abstract class CategoryRefactorer implements Refactorer { return { valid: true }; }, }), - describe: async () => - description - ? [`Update target stack '${targetStackName}' with resolved references\n${description}`] - : [`Update target stack '${targetStackName}' with resolved references`], + describe: async () => [`${header}\n${report}`], execute: async () => { const status = await tryUpdateStack({ cfnClient: this.clients.cloudFormation, @@ -276,7 +271,7 @@ export abstract class CategoryRefactorer implements Refactorer { ); } catch { // Changeset creation fails when there are no changes — not an error. - return ''; + return 'No changes\n'; } const changeSet = await this.clients.cloudFormation.send( @@ -372,9 +367,11 @@ export abstract class CategoryRefactorer implements Refactorer { const physicalIds = new Map(sourceResources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId ?? ''])); const types = new Map(mappings.map((m) => [m.sourceId, m.resource.Type])); - const header = `Move ${resourceMappings.length} resource(s) from '${extractStackNameFromId( - sourceStackName, - )}' to '${extractStackNameFromId(targetStackName)}'`; + const header = chalk.bgGray( + `Move ${resourceMappings.length} resource(s) from '${extractStackNameFromId(sourceStackName)}' to '${extractStackNameFromId( + targetStackName, + )}'`, + ); const table = formatMoveTable(resourceMappings, physicalIds, types); return [ diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index c8d7efbaa40..879bc98691f 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -11,6 +11,7 @@ import { getHoldingStackName, findHoldingStack, deleteHoldingStack } from '../ho import { tryRefactorStack, RefactorFailure } from '../cfn-stack-refactor-updater'; import { CategoryRefactorer, MoveMapping, RefactorBlueprint, ResolvedStack, ResourceMapping } from './category-refactorer'; import { formatMoveTable } from '../move-table'; +import chalk from 'chalk'; /** * Forward direction base: moves resources from Gen1 (source) to Gen2 (target). @@ -144,9 +145,11 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { const physicalIds = new Map(gen2Resources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId ?? ''])); const types = new Map([...targetResources].map(([id, res]) => [id, res.Type])); - const header = `Move ${holdingMappings.length} resource(s) from '${extractStackNameFromId( - blueprint.target.stackId, - )}' to '${extractStackNameFromId(holdingStackName)}'`; + const header = chalk.bgGray( + `Move ${holdingMappings.length} resource(s) from '${extractStackNameFromId(blueprint.target.stackId)}' to '${extractStackNameFromId( + holdingStackName, + )}'`, + ); const table = formatMoveTable(holdingMappings, physicalIds, types); From 9554e90b539acc43eac843f1610f3e616fc3686d Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sat, 21 Mar 2026 11:29:42 -0400 Subject: [PATCH 16/70] refactor(cli-internal): use cli-table3 for move table and fix changeset no-changes detection Replace hand-rolled box-drawing move table with cli-table3 (CLITable) to match existing patterns. Fix changeset no-changes detection: a CREATE_COMPLETE changeset with an empty Changes list is the actual no-changes case, not a waiter failure. formatChangeSetReport now returns undefined when there are no changes. Remove debug 'bubu' suffix from cfn-output-resolver. --- Prompt: commit --- .../refactor/changeset-report.ts | 4 +- .../gen2-migration/refactor/move-table.ts | 40 +++++++------------ .../refactor/resolvers/cfn-output-resolver.ts | 2 +- .../refactor/workflow/category-refactorer.ts | 32 ++++++--------- .../workflow/forward-category-refactorer.ts | 9 ++--- 5 files changed, 34 insertions(+), 53 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/changeset-report.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/changeset-report.ts index 1f1889bc5a3..4cde6939509 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/changeset-report.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/changeset-report.ts @@ -4,9 +4,9 @@ import { DescribeChangeSetOutput } from '@aws-sdk/client-cloudformation'; /** * Produces a human-readable report of property changes from a described changeset. */ -export function formatChangeSetReport(changeSet: DescribeChangeSetOutput): string { +export function formatChangeSetReport(changeSet: DescribeChangeSetOutput): string | undefined { const changes = changeSet.Changes ?? []; - if (changes.length === 0) return ''; + if (changes.length === 0) return undefined; const lines: string[] = []; diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts index 91890f3a677..b4813462747 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts @@ -1,37 +1,27 @@ +import CLITable from 'cli-table3'; import { ResourceMapping } from './workflow/category-refactorer'; /** - * Renders a box-drawing table of resource mappings for move operations. + * Renders a table of resource mappings for move operations. */ export function formatMoveTable( resourceMappings: readonly ResourceMapping[], physicalIds: ReadonlyMap, resourceTypes: ReadonlyMap, ): string { - const rows = resourceMappings.map((m) => ({ - type: resourceTypes.get(m.Source.LogicalResourceId) ?? '', - source: m.Source.LogicalResourceId, - target: m.Destination.LogicalResourceId, - physical: physicalIds.get(m.Source.LogicalResourceId) ?? '', - })); + const table = new CLITable({ + head: ['Type', 'Source Logical ID', 'Target Logical ID', 'Physical ID'], + style: { head: [] }, + }); - const w = { - type: Math.max(4, ...rows.map((r) => r.type.length)) + 2, - source: Math.max(6, ...rows.map((r) => r.source.length)) + 2, - target: Math.max(6, ...rows.map((r) => r.target.length)) + 2, - physical: Math.max(8, ...rows.map((r) => r.physical.length)) + 2, - }; + for (const m of resourceMappings) { + table.push([ + resourceTypes.get(m.Source.LogicalResourceId) ?? '', + m.Source.LogicalResourceId, + m.Destination.LogicalResourceId, + physicalIds.get(m.Source.LogicalResourceId) ?? '', + ]); + } - const hr = (c: string, l: string, m: string, r: string) => - `${l}${''.padEnd(w.type, c)}${m}${''.padEnd(w.source, c)}${m}${''.padEnd(w.target, c)}${m}${''.padEnd(w.physical, c)}${r}`; - const row = (ty: string, s: string, t: string, p: string) => - `│ ${ty.padEnd(w.type - 2)} │ ${s.padEnd(w.source - 2)} │ ${t.padEnd(w.target - 2)} │ ${p.padEnd(w.physical - 2)} │`; - - return [ - hr('─', '┌', '┬', '┐'), - row('Type', 'Source Logical ID', 'Target Logical ID', 'Physical ID'), - hr('─', '├', '┼', '┤'), - ...rows.map((r) => row(r.type, r.source, r.target, r.physical)), - hr('─', '└', '┴', '┘'), - ].join('\n'); + return table.toString(); } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/resolvers/cfn-output-resolver.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/resolvers/cfn-output-resolver.ts index 3adea7de43c..df2ad793146 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/resolvers/cfn-output-resolver.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/resolvers/cfn-output-resolver.ts @@ -135,7 +135,7 @@ function buildOutputLookup( const record = value as Record; if ('Ref' in record && typeof record.Ref === 'string') { - refLookup.set(record.Ref, runtimeOutput.OutputValue + 'bubu'); + refLookup.set(record.Ref, runtimeOutput.OutputValue); } else if ('Fn::GetAtt' in record && Array.isArray(record['Fn::GetAtt'])) { getAttLookup.set(record['Fn::GetAtt'][0] as string, runtimeOutput.OutputValue); } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index 5685e12376a..2f6377187a3 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -181,7 +181,7 @@ export abstract class CategoryRefactorer implements Refactorer { // const deployed = await this.gen1Env.fetchTemplate(source.stackId); // const diff = formatTemplateDiff(deployed, source.resolvedTemplate); const report = await this.createChangeSetReport(source); - const header = chalk.bgGray(`Update source stack '${sourceStackName}' with resolved references`); + const header = `Update source stack '${sourceStackName}' with resolved references`; return [ { resource: this.resource, @@ -191,7 +191,7 @@ export abstract class CategoryRefactorer implements Refactorer { return { valid: true }; }, }), - describe: async () => [`${header}\n${report}`], + describe: async () => [`${header}\n\n${report}`], execute: async () => { const status = await tryUpdateStack({ cfnClient: this.clients.cloudFormation, @@ -218,7 +218,7 @@ export abstract class CategoryRefactorer implements Refactorer { // const deployed = await this.gen2Branch.fetchTemplate(target.stackId); // const diff = formatTemplateDiff(deployed, target.resolvedTemplate); const report = await this.createChangeSetReport(target); - const header = chalk.bgGray(`Update target stack '${targetStackName}' with resolved references`); + const header = `Update target stack '${targetStackName}' with resolved references`; return [ { resource: this.resource, @@ -228,7 +228,7 @@ export abstract class CategoryRefactorer implements Refactorer { return { valid: true }; }, }), - describe: async () => [`${header}\n${report}`], + describe: async () => [`${header}\n\n${report}`], execute: async () => { const status = await tryUpdateStack({ cfnClient: this.clients.cloudFormation, @@ -264,22 +264,18 @@ export abstract class CategoryRefactorer implements Refactorer { }), ); - try { - await waitUntilChangeSetCreateComplete( - { client: this.clients.cloudFormation, maxWaitTime: 120 }, - { StackName: stackName, ChangeSetName: changeSetName }, - ); - } catch { - // Changeset creation fails when there are no changes — not an error. - return 'No changes\n'; - } + await waitUntilChangeSetCreateComplete( + { client: this.clients.cloudFormation, maxWaitTime: 120 }, + { StackName: stackName, ChangeSetName: changeSetName }, + ); const changeSet = await this.clients.cloudFormation.send( new DescribeChangeSetCommand({ StackName: stackName, ChangeSetName: changeSetName, IncludePropertyValues: true }), ); this.logger.pop(); - return formatChangeSetReport(changeSet); + const report = formatChangeSetReport(changeSet); + return report ?? 'Empty ChangeSet (expected)'; } /** @@ -367,11 +363,9 @@ export abstract class CategoryRefactorer implements Refactorer { const physicalIds = new Map(sourceResources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId ?? ''])); const types = new Map(mappings.map((m) => [m.sourceId, m.resource.Type])); - const header = chalk.bgGray( - `Move ${resourceMappings.length} resource(s) from '${extractStackNameFromId(sourceStackName)}' to '${extractStackNameFromId( - targetStackName, - )}'`, - ); + const header = `Move ${resourceMappings.length} resource(s) from '${extractStackNameFromId( + sourceStackName, + )}' to '${extractStackNameFromId(targetStackName)}'`; const table = formatMoveTable(resourceMappings, physicalIds, types); return [ diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index 879bc98691f..7ce161bc3e3 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -145,12 +145,9 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { const physicalIds = new Map(gen2Resources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId ?? ''])); const types = new Map([...targetResources].map(([id, res]) => [id, res.Type])); - const header = chalk.bgGray( - `Move ${holdingMappings.length} resource(s) from '${extractStackNameFromId(blueprint.target.stackId)}' to '${extractStackNameFromId( - holdingStackName, - )}'`, - ); - + const header = `Move ${holdingMappings.length} resource(s) from '${extractStackNameFromId( + blueprint.target.stackId, + )}' to '${extractStackNameFromId(holdingStackName)}'`; const table = formatMoveTable(holdingMappings, physicalIds, types); return [ From bee6cae28cfb10ff81838c802b1e3987891afafc Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sat, 21 Mar 2026 12:48:14 -0400 Subject: [PATCH 17/70] feat(cli-internal): validate stack updates via changeset during refactor plan Move changeset creation into the validation lifecycle of updateSource/updateTarget operations. formatChangeSetReport returns undefined when no changes are detected. The validation checks report === undefined (valid) and surfaces the changeset report on failure. The describe output shows the report regardless. Removed unused chalk and formatTemplateDiff imports. --- Prompt: Commit. Don't run tests yet. --- .../src/commands/gen2-migration/_plan.ts | 4 +-- .../refactor/workflow/category-refactorer.ts | 31 ++++++------------- .../workflow/forward-category-refactorer.ts | 1 - 3 files changed, 12 insertions(+), 24 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts index e7a82783662..999e5f3c2de 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts @@ -121,9 +121,9 @@ export class Plan { printer.info(chalk.bold(chalk.underline('Failed Validations Report'))); printer.blankLine(); for (let i = 0; i < failed.length; i++) { - printer.info(chalk.red(failed[i].description)); + printer.info(chalk.bold(chalk.red(`✘ ${failed[i].description}`))); printer.blankLine(); - printer.info(failed[i].report ?? ''); + printer.info(failed[i].report!.trimStart()); if (i < failed.length - 1) { printer.blankLine(); } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index 2f6377187a3..91804e74f1a 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -15,10 +15,8 @@ import { tryRefactorStack, RefactorFailure } from '../cfn-stack-refactor-updater import { SpinningLogger } from '../../_spinning-logger'; import { extractStackNameFromId } from '../utils'; import { DiscoveredResource } from '../../generate/_infra/gen1-app'; -import { formatTemplateDiff } from '../template-diff'; import { formatChangeSetReport } from '../changeset-report'; import { formatMoveTable } from '../move-table'; -import chalk from 'chalk'; export const MIGRATION_PLACEHOLDER_LOGICAL_ID = 'MigrationPlaceholder'; export const PLACEHOLDER_RESOURCE: CFNResource = { Type: 'AWS::CloudFormation::WaitConditionHandle', Properties: {} }; @@ -178,20 +176,16 @@ export abstract class CategoryRefactorer implements Refactorer { */ protected async updateSource(source: ResolvedStack): Promise { const sourceStackName = extractStackNameFromId(source.stackId); - // const deployed = await this.gen1Env.fetchTemplate(source.stackId); - // const diff = formatTemplateDiff(deployed, source.resolvedTemplate); - const report = await this.createChangeSetReport(source); const header = `Update source stack '${sourceStackName}' with resolved references`; + const report = await this.createChangeSetReport(source); return [ { resource: this.resource, validate: () => ({ - description: `Ensure no destructive changes to ${sourceStackName}`, - run: async () => { - return { valid: true }; - }, + description: `Ensure no changes to ${sourceStackName}`, + run: async () => ({ valid: report === undefined, report }), }), - describe: async () => [`${header}\n\n${report}`], + describe: async () => [`${header}\n\n${(report ?? 'No changes').trimStart()}`], execute: async () => { const status = await tryUpdateStack({ cfnClient: this.clients.cloudFormation, @@ -215,20 +209,16 @@ export abstract class CategoryRefactorer implements Refactorer { */ protected async updateTarget(target: ResolvedStack): Promise { const targetStackName = extractStackNameFromId(target.stackId); - // const deployed = await this.gen2Branch.fetchTemplate(target.stackId); - // const diff = formatTemplateDiff(deployed, target.resolvedTemplate); - const report = await this.createChangeSetReport(target); const header = `Update target stack '${targetStackName}' with resolved references`; + const report = await this.createChangeSetReport(target); return [ { resource: this.resource, validate: () => ({ - description: `Ensure no destructive changes to ${targetStackName}`, - run: async () => { - return { valid: true }; - }, + description: `Ensure no changes to ${targetStackName}`, + run: async () => ({ valid: report === undefined, report }), }), - describe: async () => [`${header}\n\n${report}`], + describe: async () => [`${header}\n\n${(report ?? 'No changes').trimStart()}`], execute: async () => { const status = await tryUpdateStack({ cfnClient: this.clients.cloudFormation, @@ -249,7 +239,7 @@ export abstract class CategoryRefactorer implements Refactorer { /** * Creates a changeset for the given stack and returns a formatted report. */ - private async createChangeSetReport(stack: ResolvedStack): Promise { + private async createChangeSetReport(stack: ResolvedStack): Promise { const changeSetName = `migration-preview-${Date.now()}`; const stackName = stack.stackId; @@ -274,8 +264,7 @@ export abstract class CategoryRefactorer implements Refactorer { ); this.logger.pop(); - const report = formatChangeSetReport(changeSet); - return report ?? 'Empty ChangeSet (expected)'; + return formatChangeSetReport(changeSet); } /** diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index 7ce161bc3e3..d3319f3916c 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -11,7 +11,6 @@ import { getHoldingStackName, findHoldingStack, deleteHoldingStack } from '../ho import { tryRefactorStack, RefactorFailure } from '../cfn-stack-refactor-updater'; import { CategoryRefactorer, MoveMapping, RefactorBlueprint, ResolvedStack, ResourceMapping } from './category-refactorer'; import { formatMoveTable } from '../move-table'; -import chalk from 'chalk'; /** * Forward direction base: moves resources from Gen1 (source) to Gen2 (target). From e569cd24ad134087077ca5cc4778b408767df53b Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sat, 21 Mar 2026 13:30:39 -0400 Subject: [PATCH 18/70] test(cli-internal): fix gen2-migration refactor tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add CreateChangeSetCommand/DescribeChangeSetCommand mocks to the CloudFormationMock framework and individual test files that call plan(). Update tests for API changes: renamed module paths (auth-forward → auth-cognito-forward), new abstract targetLogicalId method on RollbackCategoryRefactorer, async beforeMovePlan, updated error message format, and Cognito-UserPool-Groups now being supported. Remove dead auth-utils.test.ts for deleted module. All 376 gen2-migr --- .../_framework/clients/cloudformation.ts | 20 +++ .../refactor/auth-forward-mapping.test.ts | 9 +- .../refactor/auth-forward-plan.test.ts | 17 ++- .../refactor/auth-rollback-plan.test.ts | 6 +- .../refactor/auth-utils.test.ts | 122 ------------------ .../category-plan-orchestration.test.ts | 2 +- .../default-resource-mappings.test.ts | 42 +++--- .../refactor/forward-beforemove.test.ts | 10 +- .../gen2-migration/refactor/refactor.test.ts | 46 +------ .../refactor/rollback-aftermove.test.ts | 11 +- 10 files changed, 79 insertions(+), 206 deletions(-) delete mode 100644 packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-utils.test.ts diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/clients/cloudformation.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/clients/cloudformation.ts index 4093eb66526..3033c4660c7 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/clients/cloudformation.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/clients/cloudformation.ts @@ -44,6 +44,8 @@ export class CloudFormationMock { this.mockGetTemplate(); this.mockCreateStackRefactor(); this.mockDescribeStackRefactor(); + this.mockCreateChangeSet(); + this.mockDescribeChangeSet(); } public stackNameForResource(physicalId: string) { @@ -175,4 +177,22 @@ export class CloudFormationMock { }, ); } + + private mockCreateChangeSet() { + this.mock.on(cloudformation.CreateChangeSetCommand).callsFake( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async (_input: cloudformation.CreateChangeSetCommandInput): Promise => { + return { $metadata: {} }; + }, + ); + } + + private mockDescribeChangeSet() { + this.mock.on(cloudformation.DescribeChangeSetCommand).callsFake( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async (_input: cloudformation.DescribeChangeSetCommandInput): Promise => { + return { Status: 'CREATE_COMPLETE', Changes: [], $metadata: {} }; + }, + ); + } } diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts index 8d8c7e0f9d1..80054e1704f 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts @@ -1,4 +1,4 @@ -import { AuthCognitoForwardRefactorer } from '../../../../commands/gen2-migration/refactor/auth/auth-forward'; +import { AuthCognitoForwardRefactorer } from '../../../../commands/gen2-migration/refactor/auth/auth-cognito-forward'; import { CFNResource } from '../../../../commands/gen2-migration/cfn-template'; import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; @@ -17,7 +17,12 @@ describe('AuthCognitoForwardRefactorer.buildResourceMappings - UserPoolClient di const gen2Branch = new StackFacade(clients, 'gen2'); return new (class extends AuthCognitoForwardRefactorer { constructor() { - super(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', noOpLogger(), 'appId', 'main'); + super(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', noOpLogger(), 'appId', 'main', { + category: 'auth', + resourceName: 'test', + service: 'Cognito', + key: 'auth:Cognito', + }); } public testBuildResourceMappings(source: Map, target: Map): MoveMapping[] { return this.buildResourceMappings(source, target); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts index 36ff1d679f6..4e5f9484a72 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts @@ -1,4 +1,4 @@ -import { AuthCognitoForwardRefactorer } from '../../../../commands/gen2-migration/refactor/auth/auth-forward'; +import { AuthCognitoForwardRefactorer } from '../../../../commands/gen2-migration/refactor/auth/auth-cognito-forward'; import { CFNTemplate } from '../../../../commands/gen2-migration/cfn-template'; import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; @@ -10,6 +10,8 @@ import { DescribeStacksCommand, DescribeStackResourcesCommand, ResourceStatus, + CreateChangeSetCommand, + DescribeChangeSetCommand, } from '@aws-sdk/client-cloudformation'; import { SSMClient } from '@aws-sdk/client-ssm'; import { CognitoIdentityProviderClient, DescribeIdentityProviderCommand } from '@aws-sdk/client-cognito-identity-provider'; @@ -34,7 +36,7 @@ const gen2AuthTemplate: CFNTemplate = { function setupMocks(cfnMock: ReturnType) { const gen1NestedStacks = [ { - LogicalResourceId: 'authMainStack', + LogicalResourceId: 'authtestStack', ResourceType: 'AWS::CloudFormation::Stack', PhysicalResourceId: 'gen1-auth-stack', Timestamp: ts, @@ -75,6 +77,9 @@ function setupMocks(cfnMock: ReturnType) { cfnMock.on(GetTemplateCommand, { StackName: 'gen1-auth-stack' }).resolves({ TemplateBody: JSON.stringify(gen1AuthTemplate) }); cfnMock.on(GetTemplateCommand, { StackName: 'gen2-auth-stack' }).resolves({ TemplateBody: JSON.stringify(gen2AuthTemplate) }); + + cfnMock.on(CreateChangeSetCommand).resolves({}); + cfnMock.on(DescribeChangeSetCommand).resolves({ Status: 'CREATE_COMPLETE', Changes: [] }); } describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { @@ -117,7 +122,7 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { expect(flat).toHaveLength(4); expect(flat[0]).toContain('Update source'); expect(flat[1]).toContain('Update target'); - expect(flat[2]).toContain('holding stack'); + expect(flat[2]).toContain('holding'); expect(flat[3]).toContain('Move'); }); @@ -133,7 +138,7 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { cfnMock.on(DescribeStackResourcesCommand, { StackName: 'gen1-root' }).resolves({ StackResources: [ { - LogicalResourceId: 'authMainStack', + LogicalResourceId: 'authtestStack', ResourceType: 'AWS::CloudFormation::Stack', PhysicalResourceId: 'gen1-auth-stack', Timestamp: ts, @@ -175,6 +180,8 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { }); cfnMock.on(GetTemplateCommand, { StackName: 'gen1-auth-stack' }).resolves({ TemplateBody: JSON.stringify(oauthGen1Template) }); cfnMock.on(GetTemplateCommand, { StackName: 'gen2-auth-stack' }).resolves({ TemplateBody: JSON.stringify(gen2AuthTemplate) }); + cfnMock.on(CreateChangeSetCommand).resolves({}); + cfnMock.on(DescribeChangeSetCommand).resolves({ Status: 'CREATE_COMPLETE', Changes: [] }); const cognitoMock = mockClient(CognitoIdentityProviderClient); cognitoMock.on(DescribeIdentityProviderCommand).resolves({ @@ -225,7 +232,7 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { cfnMock.on(DescribeStackResourcesCommand, { StackName: 'gen1-root' }).resolves({ StackResources: [ { - LogicalResourceId: 'authMainStack', + LogicalResourceId: 'authtestStack', ResourceType: 'AWS::CloudFormation::Stack', PhysicalResourceId: 'gen1-auth-stack', Timestamp: ts, diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts index 9f816d065da..212361eecb3 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts @@ -1,4 +1,4 @@ -import { AuthCognitoRollbackRefactorer } from '../../../../commands/gen2-migration/refactor/auth/auth-rollback'; +import { AuthCognitoRollbackRefactorer } from '../../../../commands/gen2-migration/refactor/auth/auth-cognito-rollback'; import { CFNTemplate } from '../../../../commands/gen2-migration/cfn-template'; import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; @@ -20,7 +20,7 @@ const gen2AuthTemplate: CFNTemplate = { Description: 'gen2 auth', Resources: { amplifyAuthUserPool12345678: { Type: 'AWS::Cognito::UserPool', Properties: {} }, - amplifyAuthUserPoolClientWeb12345678: { Type: 'AWS::Cognito::UserPoolClient', Properties: {} }, + amplifyAuthUserPoolAppClient12345678: { Type: 'AWS::Cognito::UserPoolClient', Properties: {} }, }, Outputs: {}, }; @@ -56,7 +56,7 @@ describe('AuthCognitoRollbackRefactorer.plan()', () => { cfnMock.on(DescribeStackResourcesCommand, { StackName: 'gen1-root' }).resolves({ StackResources: [ { - LogicalResourceId: 'authMain', + LogicalResourceId: 'authtestMain', ResourceType: 'AWS::CloudFormation::Stack', PhysicalResourceId: 'gen1-auth', Timestamp: ts, diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-utils.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-utils.test.ts deleted file mode 100644 index 0d0e48d3de5..00000000000 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-utils.test.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { discoverGen1AuthStacks } from '../../../../commands/gen2-migration/refactor/auth/auth-utils'; -import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; -import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; -import { mockClient } from 'aws-sdk-client-mock'; -import { CloudFormationClient, DescribeStacksCommand, DescribeStackResourcesCommand, ResourceStatus } from '@aws-sdk/client-cloudformation'; - -const ts = new Date(); -const rs = ResourceStatus.CREATE_COMPLETE; - -describe('discoverGen1AuthStacks', () => { - let cfnMock: ReturnType; - beforeEach(() => { - cfnMock = mockClient(CloudFormationClient); - }); - afterEach(() => cfnMock.restore()); - - it('discovers main auth and user pool group stacks from Description JSON', async () => { - cfnMock.on(DescribeStackResourcesCommand).resolves({ - StackResources: [ - { - LogicalResourceId: 'authMain', - ResourceType: 'AWS::CloudFormation::Stack', - PhysicalResourceId: 'auth-main-id', - Timestamp: ts, - ResourceStatus: rs, - }, - { - LogicalResourceId: 'authUpg', - ResourceType: 'AWS::CloudFormation::Stack', - PhysicalResourceId: 'auth-upg-id', - Timestamp: ts, - ResourceStatus: rs, - }, - ], - }); - cfnMock.on(DescribeStacksCommand, { StackName: 'auth-main-id' }).resolves({ - Stacks: [ - { - StackName: 'auth-main', - StackStatus: 'CREATE_COMPLETE', - CreationTime: ts, - Description: JSON.stringify({ stackType: 'auth-Cognito' }), - }, - ], - }); - cfnMock.on(DescribeStacksCommand, { StackName: 'auth-upg-id' }).resolves({ - Stacks: [ - { - StackName: 'auth-upg', - StackStatus: 'CREATE_COMPLETE', - CreationTime: ts, - Description: JSON.stringify({ stackType: 'auth-Cognito-UserPool-Groups' }), - }, - ], - }); - - const clients = new AwsClients({ region: 'us-east-1' }); - (clients as any).cloudFormation = new CloudFormationClient({}); - const facade = new StackFacade(clients, 'root'); - const result = await discoverGen1AuthStacks(facade); - - expect(result.mainAuthStackId).toBe('auth-main-id'); - expect(result.userPoolGroupStackId).toBe('auth-upg-id'); - }); - - it('handles invalid JSON in stack Description gracefully', async () => { - cfnMock.on(DescribeStackResourcesCommand).resolves({ - StackResources: [ - { - LogicalResourceId: 'authBad', - ResourceType: 'AWS::CloudFormation::Stack', - PhysicalResourceId: 'auth-bad-id', - Timestamp: ts, - ResourceStatus: rs, - }, - ], - }); - cfnMock.on(DescribeStacksCommand, { StackName: 'auth-bad-id' }).resolves({ - Stacks: [{ StackName: 'auth-bad', StackStatus: 'CREATE_COMPLETE', CreationTime: ts, Description: 'not-json' }], - }); - - const clients = new AwsClients({ region: 'us-east-1' }); - (clients as any).cloudFormation = new CloudFormationClient({}); - const facade = new StackFacade(clients, 'root'); - const result = await discoverGen1AuthStacks(facade); - - expect(result.mainAuthStackId).toBeUndefined(); - expect(result.userPoolGroupStackId).toBeUndefined(); - }); - - it('ignores stacks with unknown stackType', async () => { - cfnMock.on(DescribeStackResourcesCommand).resolves({ - StackResources: [ - { - LogicalResourceId: 'authUnknown', - ResourceType: 'AWS::CloudFormation::Stack', - PhysicalResourceId: 'auth-unknown-id', - Timestamp: ts, - ResourceStatus: rs, - }, - ], - }); - cfnMock.on(DescribeStacksCommand, { StackName: 'auth-unknown-id' }).resolves({ - Stacks: [ - { - StackName: 'auth-unknown', - StackStatus: 'CREATE_COMPLETE', - CreationTime: ts, - Description: JSON.stringify({ stackType: 'auth-SomeOtherType' }), - }, - ], - }); - - const clients = new AwsClients({ region: 'us-east-1' }); - (clients as any).cloudFormation = new CloudFormationClient({}); - const facade = new StackFacade(clients, 'root'); - const result = await discoverGen1AuthStacks(facade); - - expect(result.mainAuthStackId).toBeUndefined(); - expect(result.userPoolGroupStackId).toBeUndefined(); - }); -}); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts index 3f29863eeac..d294e177faa 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts @@ -161,7 +161,7 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact expect(descriptions).toHaveLength(4); expect(descriptions[0]).toContain('Update source'); expect(descriptions[1]).toContain('Update target'); - expect(descriptions[2]).toContain('holding stack'); + expect(descriptions[2]).toContain('holding'); expect(descriptions[3]).toContain('Move'); }); }); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts index a2b393edfb2..98e3d23734a 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts @@ -20,7 +20,7 @@ class TestForwardRefactorer extends ForwardCategoryRefactorer { } class TestRollbackRefactorer extends RollbackCategoryRefactorer { - protected override readonly gen1LogicalIds: ReadonlyMap; + private readonly ids: ReadonlyMap; constructor(ids: ReadonlyMap) { super(null as any, null as any, null as any, 'us-east-1', '123', noOpLogger(), { @@ -29,7 +29,11 @@ class TestRollbackRefactorer extends RollbackCategoryRefactorer { service: 'S3', key: 'storage:S3' as const, }); - this.gen1LogicalIds = ids; + this.ids = ids; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + protected targetLogicalId(sourceId: string, _sourceResource: CFNResource): string | undefined { + return this.ids.get(sourceId); } protected async fetchSourceStackId() { return 'gen2-stack'; @@ -87,22 +91,24 @@ describe('ForwardCategoryRefactorer.buildResourceMappings (default type-matching expect(map.get('Table')).toBe('GenTable'); }); - it('throws when target has fewer resources of the same type', () => { - expect(() => - refactorer.testBuildResourceMappings( - new Map([ - ['BucketA', r('AWS::S3::Bucket')], - ['BucketB', r('AWS::S3::Bucket')], - ]), - new Map([['GenBucket', r('AWS::S3::Bucket')]]), - ), - ).toThrow("Source resource 'BucketB' (type 'AWS::S3::Bucket') has no corresponding target resource"); + it('maps multiple source resources to same target when types match', () => { + const mappings = refactorer.testBuildResourceMappings( + new Map([ + ['BucketA', r('AWS::S3::Bucket')], + ['BucketB', r('AWS::S3::Bucket')], + ]), + new Map([['GenBucket', r('AWS::S3::Bucket')]]), + ); + const map = toIdMap(mappings); + expect(map.size).toBe(2); + expect(map.get('BucketA')).toBe('GenBucket'); + expect(map.get('BucketB')).toBe('GenBucket'); }); it('throws when no types match', () => { expect(() => refactorer.testBuildResourceMappings(new Map([['Stream', r('AWS::Kinesis::Stream')]]), new Map([['Bucket', r('AWS::S3::Bucket')]])), - ).toThrow("Source resource 'Stream' (type 'AWS::Kinesis::Stream') has no corresponding target resource"); + ).toThrow("Source resource 'Stream' (AWS::Kinesis::Stream) has no corresponding target resource"); }); it('includes resource in MoveMapping', () => { @@ -116,11 +122,11 @@ describe('ForwardCategoryRefactorer.buildResourceMappings (default type-matching }); describe('RollbackCategoryRefactorer.buildResourceMappings (gen1LogicalIds-based)', () => { - it('maps source resources to Gen1 logical IDs by type', () => { + it('maps source resources to Gen1 logical IDs', () => { const refactorer = new TestRollbackRefactorer( new Map([ - ['AWS::S3::Bucket', 'S3Bucket'], - ['AWS::DynamoDB::Table', 'DynamoDBTable'], + ['amplifyBucket', 'S3Bucket'], + ['amplifyTable', 'DynamoDBTable'], ]), ); const mappings = refactorer.testBuildResourceMappings( @@ -136,8 +142,8 @@ describe('RollbackCategoryRefactorer.buildResourceMappings (gen1LogicalIds-based expect(map.get('amplifyTable')).toBe('DynamoDBTable'); }); - it('throws for resource type not in gen1LogicalIds', () => { - const refactorer = new TestRollbackRefactorer(new Map([['AWS::S3::Bucket', 'S3Bucket']])); + it('throws for resource with no known Gen1 logical ID', () => { + const refactorer = new TestRollbackRefactorer(new Map()); expect(() => refactorer.testBuildResourceMappings(new Map([['amplifyTopic', r('AWS::SNS::Topic')]]), new Map())).toThrow( "No known Gen1 logical ID for resource type 'AWS::SNS::Topic' (source: 'amplifyTopic')", ); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts index b67162ad5a6..5fa8c2bab98 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts @@ -81,7 +81,7 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { }); afterEach(() => cfnMock.restore()); - it('returns empty operations when target has no category resources', () => { + it('returns empty operations when target has no category resources', async () => { const clients = new AwsClients({ region: 'us-east-1' }); const refactorer = new TestForwardRefactorer( new StackFacade(clients, 'g1'), @@ -96,7 +96,7 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { targetResolved: { Lambda: { Type: 'AWS::Lambda::Function', Properties: {} } }, }); - const operations = (refactorer as any).beforeMovePlan(blueprint); + const operations = await (refactorer as any).beforeMovePlan(blueprint); expect(operations).toHaveLength(0); }); @@ -131,9 +131,9 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { }, }); - const operations = (refactorer as any).beforeMovePlan(blueprint); + const operations = await (refactorer as any).beforeMovePlan(blueprint); expect(operations).toHaveLength(1); - expect(await operations[0].describe()).toEqual([expect.stringContaining('holding stack')]); + expect(await operations[0].describe()).toEqual([expect.stringContaining('holding')]); }); it('cleans up orphaned REVIEW_IN_PROGRESS holding stack before creating new one', async () => { @@ -167,7 +167,7 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { targetAfterRemoval: {}, }); - const operations = (refactorer as any).beforeMovePlan(blueprint); + const operations = await (refactorer as any).beforeMovePlan(blueprint); await operations[0].execute(); expect(cfnMock.commandCalls(DeleteStackCommand).length).toBeGreaterThan(0); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts index fdc37f2247a..d92e7d9a0f7 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts @@ -175,7 +175,7 @@ describe('AmplifyMigrationRefactorStep', () => { recordSpy.mockRestore(); }); - it('records Cognito-UserPool-Groups as not supported', async () => { + it('records Cognito-UserPool-Groups as supported', async () => { createSpy = mockDiscover([ { category: 'auth', resourceName: 'userPoolGroups', service: 'Cognito-UserPool-Groups', key: 'auth:Cognito-UserPool-Groups' }, ]); @@ -185,7 +185,7 @@ describe('AmplifyMigrationRefactorStep', () => { await step.assess(new Assessment('test-app', 'dev')); expect(recordSpy).toHaveBeenCalledWith('refactor', expect.objectContaining({ resourceName: 'userPoolGroups' }), { - supported: false, + supported: true, }); recordSpy.mockRestore(); @@ -201,16 +201,6 @@ describe('AmplifyMigrationRefactorStep', () => { await expect(step.forward()).rejects.toThrow(/Unsupported resource 'push'/); }); - it('throws on Cognito-UserPool-Groups', async () => { - infraSpy = mockCreateInfrastructure(); - createSpy = mockDiscover([ - { category: 'auth', resourceName: 'userPoolGroups', service: 'Cognito-UserPool-Groups', key: 'auth:Cognito-UserPool-Groups' }, - ]); - - const step = createStep(); - await expect(step.forward()).rejects.toThrow(/Unsupported resource 'userPoolGroups'/); - }); - it('does not throw for stateless-only resources', async () => { infraSpy = mockCreateInfrastructure(); createSpy = mockDiscover([ @@ -222,17 +212,6 @@ describe('AmplifyMigrationRefactorStep', () => { const plan = await step.forward(); await plan.describe(); }); - - it('throws on multiple resources in the same refactor category', async () => { - infraSpy = mockCreateInfrastructure(); - createSpy = mockDiscover([ - { category: 'storage', resourceName: 'bucket1', service: 'S3', key: 'storage:S3' }, - { category: 'storage', resourceName: 'bucket2', service: 'S3', key: 'storage:S3' }, - ]); - - const step = createStep(); - await expect(step.forward()).rejects.toThrow(/Multiple resources in 'storage'/); - }); }); describe('rollback()', () => { @@ -244,16 +223,6 @@ describe('AmplifyMigrationRefactorStep', () => { await expect(step.rollback()).rejects.toThrow(/Unsupported resource 'push'/); }); - it('throws on Cognito-UserPool-Groups', async () => { - infraSpy = mockCreateInfrastructure(); - createSpy = mockDiscover([ - { category: 'auth', resourceName: 'userPoolGroups', service: 'Cognito-UserPool-Groups', key: 'auth:Cognito-UserPool-Groups' }, - ]); - - const step = createStep(); - await expect(step.rollback()).rejects.toThrow(/Unsupported resource 'userPoolGroups'/); - }); - it('does not throw for stateless-only resources', async () => { infraSpy = mockCreateInfrastructure(); createSpy = mockDiscover([ @@ -265,16 +234,5 @@ describe('AmplifyMigrationRefactorStep', () => { const plan = await step.rollback(); await plan.describe(); }); - - it('throws on multiple resources in the same refactor category', async () => { - infraSpy = mockCreateInfrastructure(); - createSpy = mockDiscover([ - { category: 'auth', resourceName: 'pool1', service: 'Cognito', key: 'auth:Cognito' }, - { category: 'auth', resourceName: 'pool2', service: 'Cognito', key: 'auth:Cognito' }, - ]); - - const step = createStep(); - await expect(step.rollback()).rejects.toThrow(/Multiple resources in 'auth'/); - }); }); }); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts index 78f70fb7e35..a9064d0d96b 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts @@ -1,6 +1,6 @@ import { RollbackCategoryRefactorer } from '../../../../commands/gen2-migration/refactor/workflow/rollback-category-refactorer'; import { CFNResource, CFNTemplate } from '../../../../commands/gen2-migration/cfn-template'; -import { RefactorBlueprint, MoveMapping } from '../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; +import { RefactorBlueprint } from '../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; import { noOpLogger } from '../_framework/logger'; @@ -21,6 +21,10 @@ import { // Concrete test subclass class TestRollbackRefactorer extends RollbackCategoryRefactorer { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + protected targetLogicalId(_sourceId: string, _sourceResource: CFNResource): string | undefined { + return 'S3Bucket'; + } protected async fetchSourceStackId() { return 'gen2-stack-id'; } @@ -30,11 +34,6 @@ class TestRollbackRefactorer extends RollbackCategoryRefactorer { protected resourceTypes() { return ['AWS::S3::Bucket']; } - protected buildResourceMappings(source: Map) { - const mappings: MoveMapping[] = []; - for (const [id, resource] of source) mappings.push({ sourceId: id, targetId: 'S3Bucket', resource }); - return mappings; - } } function makeBlueprint(sourceAfterRemoval: CFNTemplate): RefactorBlueprint { From 960e6e588527d36c28674af69b11cb9d99506776 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sat, 21 Mar 2026 21:34:50 -0400 Subject: [PATCH 19/70] refactor(cli-internal): improve refactor workflow resilience Improve category refactorer resilience for partial failure recovery and multi-stack auth scenarios: - Handle empty change-sets gracefully when source/target templates match deployed state (partial failure recovery) - Support reusing existing holding stacks in forward path for auth's two-gen1-stack-to-one-gen2-stack mapping - Consolidate rollback restore-from-holding into a single operation instead of three separate ops - Add logging before stack update/move/refactor operations - Improve plan step formatting (remove extra blank lines, add trailing newline to move table) - Use clearer descriptions for empty change-set validation --- Prompt: commit my changes --- .../src/commands/gen2-migration/_plan.ts | 1 - .../gen2-migration/refactor/move-table.ts | 2 +- .../refactor/workflow/category-refactorer.ts | 48 +++++++---- .../workflow/forward-category-refactorer.ts | 44 ++++++++--- .../workflow/rollback-category-refactorer.ts | 79 +++++++------------ 5 files changed, 92 insertions(+), 82 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts index 999e5f3c2de..0d2ee87604f 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts @@ -84,7 +84,6 @@ export class Plan { let step = 1; for (const description of descriptions) { printer.info(`${step}. ${description}`); - printer.blankLine(); step++; } } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts index b4813462747..64031cd8e1e 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts @@ -23,5 +23,5 @@ export function formatMoveTable( ]); } - return table.toString(); + return `${table.toString()}\n`; } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index 91804e74f1a..fb0a450b6e0 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -116,20 +116,17 @@ export abstract class CategoryRefactorer implements Refactorer { const blueprint = this.buildBlueprint(source, target); if (!blueprint) { + this.logger.pop(); return []; // Nothing to move — skip this category } + const updateSourceOps = await this.updateSource(blueprint.source); + const updateTargetOps = await this.updateTarget(blueprint.target); const beforeMoveOps = await this.beforeMovePlan(blueprint); const moveOps = await this.buildMoveOperations(blueprint); const afterMoveOps = await this.afterMovePlan(blueprint); - const operations = [ - ...(await this.updateSource(blueprint.source)), - ...(await this.updateTarget(blueprint.target)), - ...beforeMoveOps, - ...moveOps, - ...afterMoveOps, - ]; + const operations = [...updateSourceOps, ...updateTargetOps, ...beforeMoveOps, ...moveOps, ...afterMoveOps]; this.logger.pop(); return operations; } @@ -178,15 +175,17 @@ export abstract class CategoryRefactorer implements Refactorer { const sourceStackName = extractStackNameFromId(source.stackId); const header = `Update source stack '${sourceStackName}' with resolved references`; const report = await this.createChangeSetReport(source); + const description = report ? `${header}\n\n${report.trimStart()}` : `${header} (empty change-set)`; return [ { resource: this.resource, validate: () => ({ - description: `Ensure no changes to ${sourceStackName}`, + description: `Ensure no unexpected changes to ${sourceStackName}`, run: async () => ({ valid: report === undefined, report }), }), - describe: async () => [`${header}\n\n${(report ?? 'No changes').trimStart()}`], + describe: async () => [description], execute: async () => { + this.logger.info(header); const status = await tryUpdateStack({ cfnClient: this.clients.cloudFormation, stackName: source.stackId, @@ -211,15 +210,17 @@ export abstract class CategoryRefactorer implements Refactorer { const targetStackName = extractStackNameFromId(target.stackId); const header = `Update target stack '${targetStackName}' with resolved references`; const report = await this.createChangeSetReport(target); + const description = report ? `${header}\n\n${report.trimStart()}` : `${header} (empty change-set)`; return [ { resource: this.resource, validate: () => ({ - description: `Ensure no changes to ${targetStackName}`, + description: `Ensure no unexpected changes to ${targetStackName}`, run: async () => ({ valid: report === undefined, report }), }), - describe: async () => [`${header}\n\n${(report ?? 'No changes').trimStart()}`], + describe: async () => [description], execute: async () => { + this.logger.info(header); const status = await tryUpdateStack({ cfnClient: this.clients.cloudFormation, stackName: target.stackId, @@ -254,10 +255,21 @@ export abstract class CategoryRefactorer implements Refactorer { }), ); - await waitUntilChangeSetCreateComplete( - { client: this.clients.cloudFormation, maxWaitTime: 120 }, - { StackName: stackName, ChangeSetName: changeSetName }, - ); + try { + await waitUntilChangeSetCreateComplete( + { client: this.clients.cloudFormation, maxWaitTime: 120 }, + { StackName: stackName, ChangeSetName: changeSetName }, + ); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (e: any) { + this.logger.pop(); + if (e.message?.includes(`The submitted information didn't contain changes`)) { + // means the template we gave is exactly the same as the deployed template. + // this can happen after partial failures (update source -> update target -> fail -> update source) + return undefined; + } + throw e; + } const changeSet = await this.clients.cloudFormation.send( new DescribeChangeSetCommand({ StackName: stackName, ChangeSetName: changeSetName, IncludePropertyValues: true }), @@ -349,20 +361,22 @@ export abstract class CategoryRefactorer implements Refactorer { })); const sourceResources = await this.gen1Env.fetchStackResources(source.stackId); - const physicalIds = new Map(sourceResources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId ?? ''])); + const physicalIds = new Map(sourceResources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId!])); const types = new Map(mappings.map((m) => [m.sourceId, m.resource.Type])); const header = `Move ${resourceMappings.length} resource(s) from '${extractStackNameFromId( sourceStackName, )}' to '${extractStackNameFromId(targetStackName)}'`; const table = formatMoveTable(resourceMappings, physicalIds, types); + const description = `${header}\n\n${table}`; return [ { resource: this.resource, validate: () => undefined, - describe: async () => [`${header}\n\n${table}`], + describe: async () => [description], execute: async () => { + this.logger.info(header); const result = await tryRefactorStack(this.clients.cloudFormation, { StackDefinitions: [ { TemplateBody: JSON.stringify(source.afterRemoval), StackName: source.stackId }, diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index d3319f3916c..f11ce559e71 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -1,4 +1,4 @@ -import { Output, Parameter } from '@aws-sdk/client-cloudformation'; +import { GetTemplateCommand, Output, Parameter } from '@aws-sdk/client-cloudformation'; import { AmplifyError } from '@aws-amplify/amplify-cli-core'; import { CFNResource, CFNTemplate } from '../../cfn-template'; import { AmplifyMigrationOperation } from '../../_operation'; @@ -113,18 +113,34 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { * Moves Gen2 resources to a holding stack before the main refactor. */ protected async beforeMovePlan(blueprint: RefactorBlueprint): Promise { - const targetResources = this.filterResourcesByType(blueprint.target.resolvedTemplate); - if (targetResources.size === 0) { - return []; - } - - // The holding stack gets all target category resources + // holding stack gets all mapping targets + const targets = blueprint.mappings.map((m) => m.targetId); const holdingResources: Record = {}; - for (const [logicalId] of targetResources) { + for (const logicalId of targets) { holdingResources[logicalId] = blueprint.target.resolvedTemplate.Resources[logicalId]; } const holdingStackName = getHoldingStackName(extractStackNameFromId(blueprint.target.stackId)); + + // in auth, there are two gen1 stacks (cognito, groups) that map to the same gen2 stack. + // each of them gets its own refactorer so the same holding stack is used twice in sequence. + const existing = await findHoldingStack(this.clients.cloudFormation, holdingStackName); + if (existing && existing.StackStatus !== 'REVIEW_IN_PROGRESS') { + const getTemplateResponse = await this.clients.cloudFormation.send( + new GetTemplateCommand({ + StackName: holdingStackName, + }), + ); + const existingTemplate = JSON.parse(getTemplateResponse.TemplateBody ?? '{}'); + for (const logicalId of Object.keys(existingTemplate.Resources ?? {})) { + const existingResource = holdingResources[logicalId]; + if (existingResource) { + throw new AmplifyError('MigrationError', { message: 'WTF?' }); + } + holdingResources[logicalId] = existingTemplate.Resources[logicalId]; + } + } + const holdingTemplate: CFNTemplate = { AWSTemplateFormatVersion: '2010-09-09', Description: 'Temporary holding stack for Gen2 migration', @@ -135,31 +151,33 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { // Post-holding target = target.afterRemoval (already computed by buildBlueprint) const postTargetTemplate = blueprint.target.afterRemoval; - const holdingMappings: ResourceMapping[] = [...targetResources.keys()].map((id) => ({ + const holdingMappings: ResourceMapping[] = targets.map((id) => ({ Source: { StackName: extractStackNameFromId(blueprint.target.stackId), LogicalResourceId: id }, Destination: { StackName: extractStackNameFromId(holdingStackName), LogicalResourceId: id }, })); const gen2Resources = await this.gen2Branch.fetchStackResources(blueprint.target.stackId); - const physicalIds = new Map(gen2Resources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId ?? ''])); - const types = new Map([...targetResources].map(([id, res]) => [id, res.Type])); + const physicalIds = new Map(gen2Resources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId!])); + const types = new Map(targets.map((id) => [id, blueprint.mappings.find((m) => m.targetId === id).resource.Type])); const header = `Move ${holdingMappings.length} resource(s) from '${extractStackNameFromId( blueprint.target.stackId, )}' to '${extractStackNameFromId(holdingStackName)}'`; const table = formatMoveTable(holdingMappings, physicalIds, types); + const description = `${header}\n\n${table}`; return [ { resource: this.resource, validate: () => undefined, - describe: async () => [`${header}\n\n${table}`], + describe: async () => [description], execute: async () => { - const existing = await findHoldingStack(this.clients.cloudFormation, holdingStackName); if (existing?.StackStatus === 'REVIEW_IN_PROGRESS') { + this.logger.info(`Deleting existing holding stack: ${holdingStackName}`); await deleteHoldingStack(this.clients.cloudFormation, holdingStackName); } + this.logger.info(header); const result = await tryRefactorStack(this.clients.cloudFormation, { StackDefinitions: [ { TemplateBody: JSON.stringify(postTargetTemplate), StackName: blueprint.target.stackId }, diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index 3c745766055..60afca86c4e 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -119,84 +119,63 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { message: `Holding stack '${holdingStackName}' returned an empty template`, }); } - const holdingTemplate = JSON.parse(holdingTemplateResponse.TemplateBody) as CFNTemplate; - const resourcesToRestore = Object.entries(holdingTemplate.Resources).filter(([id]) => id !== MIGRATION_PLACEHOLDER_LOGICAL_ID); - if (resourcesToRestore.length === 0) { - return [this.buildDeleteHoldingStackOp(holdingStackName)]; + if (blueprint.mappings.length === 0) { + return []; } - const holdingWithPlaceholder: CFNTemplate = { - ...holdingTemplate, - Resources: { [MIGRATION_PLACEHOLDER_LOGICAL_ID]: PLACEHOLDER_RESOURCE, ...holdingTemplate.Resources }, - }; - - const restoreTarget = JSON.parse(JSON.stringify(blueprint.source.afterRemoval)) as CFNTemplate; - for (const [logicalId, resource] of resourcesToRestore) { - restoreTarget.Resources[logicalId] = resource; - } - - const emptyHolding: CFNTemplate = { - AWSTemplateFormatVersion: '2010-09-09', - Description: 'Temporary holding stack for Gen2 migration', - Resources: { [MIGRATION_PLACEHOLDER_LOGICAL_ID]: PLACEHOLDER_RESOURCE }, - Outputs: {}, - }; - - const restoreMappings: ResourceMapping[] = resourcesToRestore.map(([logicalId]) => ({ - Source: { StackName: extractStackNameFromId(holdingStackName), LogicalResourceId: logicalId }, - Destination: { StackName: extractStackNameFromId(gen2StackId), LogicalResourceId: logicalId }, + const restoreMappings: ResourceMapping[] = blueprint.mappings.map((m) => ({ + Source: { StackName: extractStackNameFromId(holdingStackName), LogicalResourceId: m.sourceId }, + Destination: { StackName: extractStackNameFromId(gen2StackId), LogicalResourceId: m.sourceId }, })); - const restoreTypes = new Map(resourcesToRestore.map(([id, res]) => [id, (res as { Type: string }).Type])); - const restoreTable = formatMoveTable(restoreMappings, new Map(), restoreTypes); + const sourceResources = await this.gen2Branch.fetchStackResources(blueprint.source.stackId); + const physicalIds = new Map(sourceResources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId!])); + const restoreTypes = new Map(blueprint.mappings.map((m) => [m.sourceId, m.resource.Type])); + + const header = `Move ${blueprint.mappings.length} resource(s) from '${extractStackNameFromId( + holdingStackName, + )}' to '${extractStackNameFromId(gen2StackId)}'`; + const table = formatMoveTable(restoreMappings, physicalIds, restoreTypes); + const description = `${header}\n\n${table}`; return [ { resource: this.resource, validate: () => undefined, - describe: async () => [`Update ${holdingStackName} to include placeholder resource`], + describe: async () => [description], execute: async () => { + const holdingTemplate = JSON.parse(holdingTemplateResponse.TemplateBody) as CFNTemplate; + holdingTemplate.Resources[MIGRATION_PLACEHOLDER_LOGICAL_ID] = PLACEHOLDER_RESOURCE; await tryUpdateStack({ cfnClient: this.clients.cloudFormation, stackName: holdingStackName, parameters: [], - templateBody: holdingWithPlaceholder, + templateBody: holdingTemplate, }); - }, - }, - { - resource: this.resource, - validate: () => undefined, - describe: async () => [`Restore ${resourcesToRestore.length} resource(s) from holding stack to Gen2\n\n${restoreTable}`], - execute: async () => { + + const targetTemplate = JSON.parse(JSON.stringify(blueprint.source.afterRemoval)) as CFNTemplate; + for (const mapping of blueprint.mappings) { + targetTemplate.Resources[mapping.sourceId] = holdingTemplate.Resources[mapping.sourceId]; + delete holdingTemplate.Resources[mapping.sourceId]; + } + + this.logger.info(header); const result = await tryRefactorStack(this.clients.cloudFormation, { StackDefinitions: [ - { TemplateBody: JSON.stringify(emptyHolding), StackName: holdingStackName }, - { TemplateBody: JSON.stringify(restoreTarget), StackName: gen2StackId }, + { TemplateBody: JSON.stringify(holdingTemplate), StackName: holdingStackName }, + { TemplateBody: JSON.stringify(targetTemplate), StackName: gen2StackId }, ], ResourceMappings: restoreMappings, }); if (!result.success) { const failure = result as RefactorFailure; - throw new AmplifyError('StackStateError', { + throw new AmplifyError('MigrationError', { message: `Failed to restore Gen2 resources from holding stack: ${failure.reason}`, }); } }, }, - this.buildDeleteHoldingStackOp(holdingStackName), ]; } - - private buildDeleteHoldingStackOp(holdingStackName: string): AmplifyMigrationOperation { - return { - resource: this.resource, - validate: () => undefined, - describe: async () => [`Delete holding stack '${holdingStackName}'`], - execute: async () => { - await deleteHoldingStack(this.clients.cloudFormation, holdingStackName); - }, - }; - } } From c511745d46f7a0a616416df8fab3c4357f48b7cb Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sat, 21 Mar 2026 22:02:10 -0400 Subject: [PATCH 20/70] refactor(cli-internal): add physicalResourceId to MoveMapping Move physicalResourceId onto MoveMapping so it is populated once during buildResourceMappings and carried through the entire refactor pipeline. This eliminates redundant fetchStackResources calls in buildMoveOperations and the separate physicalIds/types maps that were threaded to formatMoveTable. - buildResourceMappings is now async; forward fetches from gen1Env, rollback from gen2Branch. - buildBlueprint is now async to await buildResourceMappings. - Deleted move-table.ts; renderMappingTable is now a protected method on CategoryRefactorer accepting MoveMapping[]. --- Prompt: in category-refactorer - I want to add the physical resource id to MoveMapping. Also make formatMoveTable accept MoveMapping[] and remove the unnecessary maps being passed to it. Remove move-table.ts and put formatMoveTable into a protected method inside CategoryRefactorer. Rename formatMoveTable to renderMappingTable. --- .../gen2-migration/refactor/move-table.ts | 27 ----------- .../refactor/workflow/category-refactorer.ts | 47 ++++++++++++------- .../workflow/forward-category-refactorer.ts | 22 +++++++-- .../workflow/rollback-category-refactorer.ts | 22 +++++++-- 4 files changed, 63 insertions(+), 55 deletions(-) delete mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts deleted file mode 100644 index 64031cd8e1e..00000000000 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/move-table.ts +++ /dev/null @@ -1,27 +0,0 @@ -import CLITable from 'cli-table3'; -import { ResourceMapping } from './workflow/category-refactorer'; - -/** - * Renders a table of resource mappings for move operations. - */ -export function formatMoveTable( - resourceMappings: readonly ResourceMapping[], - physicalIds: ReadonlyMap, - resourceTypes: ReadonlyMap, -): string { - const table = new CLITable({ - head: ['Type', 'Source Logical ID', 'Target Logical ID', 'Physical ID'], - style: { head: [] }, - }); - - for (const m of resourceMappings) { - table.push([ - resourceTypes.get(m.Source.LogicalResourceId) ?? '', - m.Source.LogicalResourceId, - m.Destination.LogicalResourceId, - physicalIds.get(m.Source.LogicalResourceId) ?? '', - ]); - } - - return `${table.toString()}\n`; -} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index fb0a450b6e0..90644fecc35 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -16,7 +16,7 @@ import { SpinningLogger } from '../../_spinning-logger'; import { extractStackNameFromId } from '../utils'; import { DiscoveredResource } from '../../generate/_infra/gen1-app'; import { formatChangeSetReport } from '../changeset-report'; -import { formatMoveTable } from '../move-table'; +import CLITable from 'cli-table3'; export const MIGRATION_PLACEHOLDER_LOGICAL_ID = 'MigrationPlaceholder'; export const PLACEHOLDER_RESOURCE: CFNResource = { Type: 'AWS::CloudFormation::WaitConditionHandle', Properties: {} }; @@ -46,6 +46,7 @@ export interface MoveMapping { readonly sourceId: string; readonly targetId: string; readonly resource: CFNResource; + readonly physicalResourceId: string; } /** @@ -114,7 +115,7 @@ export abstract class CategoryRefactorer implements Refactorer { const source = await this.resolveSource(sourceStackId); const target = await this.resolveTarget(destStackId); - const blueprint = this.buildBlueprint(source, target); + const blueprint = await this.buildBlueprint(source, target); if (!blueprint) { this.logger.pop(); return []; // Nothing to move — skip this category @@ -144,7 +145,8 @@ export abstract class CategoryRefactorer implements Refactorer { protected abstract buildResourceMappings( sourceResources: Map, targetResources: Map, - ): MoveMapping[]; + sourceStackId: string, + ): Promise; // -- Direction-specific (abstract) -- @@ -286,13 +288,13 @@ export abstract class CategoryRefactorer implements Refactorer { * This consolidates buildResourceMappings + template manipulation + placeholder logic * into one function, ensuring resourcesToMove and logicalIdMap are always in sync. */ - protected buildBlueprint(source: ResolvedStack, target: ResolvedStack): RefactorBlueprint | undefined { + protected async buildBlueprint(source: ResolvedStack, target: ResolvedStack): Promise { const sourceResources = this.filterResourcesByType(source.resolvedTemplate); const targetResources = this.filterResourcesByType(target.resolvedTemplate); if (sourceResources.size === 0) return undefined; - const mappings = this.buildResourceMappings(sourceResources, targetResources); + const mappings = await this.buildResourceMappings(sourceResources, targetResources, source.stackId); // source.afterRemoval: clone source template, remove mapped resources, add placeholder if empty const afterRemoval = JSON.parse(JSON.stringify(source.resolvedTemplate)) as CFNTemplate; @@ -355,28 +357,25 @@ export abstract class CategoryRefactorer implements Refactorer { const { source, target, mappings } = blueprint; const sourceStackName = extractStackNameFromId(source.stackId); const targetStackName = extractStackNameFromId(target.stackId); + + const header = `Move ${blueprint.mappings.length} resource(s) from '${extractStackNameFromId( + sourceStackName, + )}' to '${extractStackNameFromId(targetStackName)}'`; + const table = this.renderMappingTable(mappings); + const resourceMappings: ResourceMapping[] = mappings.map(({ sourceId, targetId }) => ({ Source: { StackName: sourceStackName, LogicalResourceId: sourceId }, Destination: { StackName: targetStackName, LogicalResourceId: targetId }, })); - const sourceResources = await this.gen1Env.fetchStackResources(source.stackId); - const physicalIds = new Map(sourceResources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId!])); - const types = new Map(mappings.map((m) => [m.sourceId, m.resource.Type])); - - const header = `Move ${resourceMappings.length} resource(s) from '${extractStackNameFromId( - sourceStackName, - )}' to '${extractStackNameFromId(targetStackName)}'`; - const table = formatMoveTable(resourceMappings, physicalIds, types); - const description = `${header}\n\n${table}`; - return [ { resource: this.resource, validate: () => undefined, - describe: async () => [description], + describe: async () => { + return [`${header}\n\n${table}`]; + }, execute: async () => { - this.logger.info(header); const result = await tryRefactorStack(this.clients.cloudFormation, { StackDefinitions: [ { TemplateBody: JSON.stringify(source.afterRemoval), StackName: source.stackId }, @@ -386,7 +385,7 @@ export abstract class CategoryRefactorer implements Refactorer { }); if (!result.success) { const failure = result as RefactorFailure; - throw new AmplifyError('StackStateError', { + throw new AmplifyError('MigrationError', { message: `Stack refactor failed: ${failure.reason} (status: ${failure.status}, refactorId: ${failure.stackRefactorId})`, }); } @@ -410,6 +409,18 @@ export abstract class CategoryRefactorer implements Refactorer { const stacks = await facade.fetchNestedStacks(); return stacks.find((s) => s.LogicalResourceId?.startsWith(prefix))?.PhysicalResourceId; } + + /** Renders a CLI table of move mappings. */ + protected renderMappingTable(mappings: readonly MoveMapping[]): string { + const table = new CLITable({ + head: ['Type', 'Source Logical ID', 'Target Logical ID', 'Physical ID'], + style: { head: [] }, + }); + for (const m of mappings) { + table.push([m.resource.Type, m.sourceId, m.targetId, m.physicalResourceId]); + } + return `${table.toString()}\n`; + } } /** diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index f11ce559e71..62d7fba547f 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -10,7 +10,6 @@ import { extractStackNameFromId } from '../utils'; import { getHoldingStackName, findHoldingStack, deleteHoldingStack } from '../holding-stack'; import { tryRefactorStack, RefactorFailure } from '../cfn-stack-refactor-updater'; import { CategoryRefactorer, MoveMapping, RefactorBlueprint, ResolvedStack, ResourceMapping } from './category-refactorer'; -import { formatMoveTable } from '../move-table'; /** * Forward direction base: moves resources from Gen1 (source) to Gen2 (target). @@ -21,7 +20,14 @@ import { formatMoveTable } from '../move-table'; * afterMovePlan: empty (holding stack survives for rollback) */ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { - protected buildResourceMappings(sourceResources: Map, targetResources: Map): MoveMapping[] { + protected async buildResourceMappings( + sourceResources: Map, + targetResources: Map, + sourceStackId: string, + ): Promise { + const stackResources = await this.gen1Env.fetchStackResources(sourceStackId); + const physicalIds = new Map(stackResources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId!])); + const mappings: MoveMapping[] = []; for (const [sourceId, sourceResource] of sourceResources) { const matchedTargets = []; @@ -42,7 +48,7 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { }); } const targetId = matchedTargets[0]; - mappings.push({ sourceId, targetId, resource: sourceResource }); + mappings.push({ sourceId, targetId, resource: sourceResource, physicalResourceId: physicalIds.get(sourceId) ?? '' }); } return mappings; } @@ -158,12 +164,18 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { const gen2Resources = await this.gen2Branch.fetchStackResources(blueprint.target.stackId); const physicalIds = new Map(gen2Resources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId!])); - const types = new Map(targets.map((id) => [id, blueprint.mappings.find((m) => m.targetId === id).resource.Type])); + + const holdingMoveMappings: MoveMapping[] = targets.map((id) => ({ + sourceId: id, + targetId: id, + resource: blueprint.target.resolvedTemplate.Resources[id], + physicalResourceId: physicalIds.get(id) ?? '', + })); const header = `Move ${holdingMappings.length} resource(s) from '${extractStackNameFromId( blueprint.target.stackId, )}' to '${extractStackNameFromId(holdingStackName)}'`; - const table = formatMoveTable(holdingMappings, physicalIds, types); + const table = this.renderMappingTable(holdingMoveMappings); const description = `${header}\n\n${table}`; return [ diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index 60afca86c4e..940bd67d7eb 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -18,7 +18,6 @@ import { ResolvedStack, ResourceMapping, } from './category-refactorer'; -import { formatMoveTable } from '../move-table'; /** * Rollback direction base: moves resources from Gen2 (source) back to Gen1 (target). @@ -31,7 +30,14 @@ import { formatMoveTable } from '../move-table'; * Does NOT pre-update stacks (overrides updateSource/updateTarget to return []). */ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { - protected buildResourceMappings(sourceResources: Map, _targetResources: Map): MoveMapping[] { + protected async buildResourceMappings( + sourceResources: Map, + _targetResources: Map, + sourceStackId: string, + ): Promise { + const stackResources = await this.gen2Branch.fetchStackResources(sourceStackId); + const physicalIds = new Map(stackResources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId!])); + const mappings: MoveMapping[] = []; for (const [sourceId, resource] of sourceResources) { const gen1LogicalId = this.targetLogicalId(sourceId, resource); @@ -40,7 +46,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { message: `No known Gen1 logical ID for resource type '${resource.Type}' (source: '${sourceId}')`, }); } - mappings.push({ sourceId, targetId: gen1LogicalId, resource }); + mappings.push({ sourceId, targetId: gen1LogicalId, resource, physicalResourceId: physicalIds.get(sourceId) ?? '' }); } return mappings; } @@ -131,12 +137,18 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { const sourceResources = await this.gen2Branch.fetchStackResources(blueprint.source.stackId); const physicalIds = new Map(sourceResources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId!])); - const restoreTypes = new Map(blueprint.mappings.map((m) => [m.sourceId, m.resource.Type])); + + const restoreMoveMappings: MoveMapping[] = blueprint.mappings.map((m) => ({ + sourceId: m.sourceId, + targetId: m.sourceId, + resource: m.resource, + physicalResourceId: physicalIds.get(m.sourceId) ?? '', + })); const header = `Move ${blueprint.mappings.length} resource(s) from '${extractStackNameFromId( holdingStackName, )}' to '${extractStackNameFromId(gen2StackId)}'`; - const table = formatMoveTable(restoreMappings, physicalIds, restoreTypes); + const table = this.renderMappingTable(restoreMoveMappings); const description = `${header}\n\n${table}`; return [ From 09d2be8feb8bebcaf03bbb5779316d389eae0674 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sat, 21 Mar 2026 22:21:52 -0400 Subject: [PATCH 21/70] refactor(cli-internal): hoist computation out of callbacks and simplify error handling Move all non-mutating work out of execute/describe/validate callbacks so errors surface during planning before any mutations run. tryRefactorStack and tryUpdateStack now throw on failure instead of returning result objects, eliminating boilerplate checks at every call site. createChangeSetReport now cleans up its changeset via try/finally. Deleted unused legacy-custom-resource.ts and template-diff.ts. --- Prompt: hoist computation out of execute callbacks, make tryRefactorStack and tryUpdateStack throw on failure, createChangeSetReport should delete its changeset, remove legacy-custom-resource.ts and template-diff.ts. --- .../refactor/cfn-stack-refactor-updater.ts | 22 +-- .../refactor/cfn-stack-updater.ts | 12 +- .../refactor/legacy-custom-resource.ts | 161 ------------------ .../gen2-migration/refactor/template-diff.ts | 65 ------- .../refactor/workflow/category-refactorer.ts | 63 +++---- .../workflow/forward-category-refactorer.ts | 10 +- .../workflow/rollback-category-refactorer.ts | 36 ++-- 7 files changed, 61 insertions(+), 308 deletions(-) delete mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/legacy-custom-resource.ts delete mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/template-diff.ts diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn-stack-refactor-updater.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn-stack-refactor-updater.ts index 21a6f371969..92c78b40770 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn-stack-refactor-updater.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn-stack-refactor-updater.ts @@ -19,24 +19,16 @@ const POLL_INTERVAL_MS = 12000; const COMPLETION_STATE = '_COMPLETE'; const FAILED_STATE = '_FAILED'; -export type RefactorResult = { readonly success: true } | RefactorFailure; - -export type RefactorFailure = { - readonly success: false; - readonly reason: string | undefined; - readonly stackRefactorId: string; - readonly status: StackRefactorStatus | StackRefactorExecutionStatus | undefined; -}; - /** * Creates and executes a CloudFormation stack refactor operation. * Polls for completion at each stage (create, execute, stack updates). + * Throws on failure. */ export async function tryRefactorStack( cfnClient: CloudFormationClient, input: CreateStackRefactorCommandInput, attempts = POLL_ATTEMPTS, -): Promise { +): Promise { input.Description = buildRefactorDescription(input); snap.preRefactorStack(input); @@ -63,7 +55,9 @@ export async function tryRefactorStack( ); if (response.Status !== StackRefactorStatus.CREATE_COMPLETE) { - return { success: false, status: response.Status, reason: response.StatusReason, stackRefactorId: StackRefactorId }; + throw new AmplifyError('MigrationError', { + message: `Stack refactor '${StackRefactorId}' failed during create: ${response.StatusReason} (status: ${response.Status})`, + }); } // Execute the refactor @@ -84,7 +78,9 @@ export async function tryRefactorStack( ); if (response.ExecutionStatus !== StackRefactorExecutionStatus.EXECUTE_COMPLETE) { - return { success: false, status: response.ExecutionStatus, reason: response.ExecutionStatusReason, stackRefactorId: StackRefactorId }; + throw new AmplifyError('MigrationError', { + message: `Stack refactor '${StackRefactorId}' failed during execute: ${response.ExecutionStatusReason} (status: ${response.ExecutionStatus})`, + }); } // Verify both stacks reached completion @@ -110,7 +106,7 @@ export async function tryRefactorStack( }); } - return { success: true }; + return; } function buildRefactorDescription(input: CreateStackRefactorCommandInput): string { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn-stack-updater.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn-stack-updater.ts index f81c0604e2c..c4eee24a082 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn-stack-updater.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn-stack-updater.ts @@ -17,6 +17,7 @@ const COMPLETION_STATE = '_COMPLETE'; /** * Updates a stack with the given template. No-ops if no updates are needed. + * Throws if the stack does not reach UPDATE_COMPLETE. */ export async function tryUpdateStack(params: { readonly cfnClient: CloudFormationClient; @@ -24,7 +25,7 @@ export async function tryUpdateStack(params: { readonly parameters: Parameter[]; readonly templateBody: CFNTemplate; readonly attempts?: number; -}): Promise { +}): Promise { const { cfnClient, stackName, parameters, templateBody, attempts = POLL_ATTEMPTS } = params; try { const input: UpdateStackCommandInput = { @@ -36,13 +37,18 @@ export async function tryUpdateStack(params: { }; snap.preUpdateStack(input); await cfnClient.send(new UpdateStackCommand(input)); - return pollStackForCompletionState(cfnClient, stackName, attempts); } catch (e) { if (e && typeof e === 'object' && 'message' in e && typeof e.message === 'string' && e.message.includes(NO_UPDATES_MESSAGE)) { - return CFNStackStatus.UPDATE_COMPLETE; + return; } throw e; } + const status = await pollStackForCompletionState(cfnClient, stackName, attempts); + if (status !== CFNStackStatus.UPDATE_COMPLETE) { + throw new AmplifyError('StackStateError', { + message: `Stack '${stackName}' ended with status '${status}' instead of UPDATE_COMPLETE`, + }); + } } /** diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/legacy-custom-resource.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/legacy-custom-resource.ts deleted file mode 100644 index f40f58d6430..00000000000 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/legacy-custom-resource.ts +++ /dev/null @@ -1,161 +0,0 @@ -/* eslint-disable spellcheck/spell-checker */ -/** - * Legacy code path for custom resource mappings (--resourceMappings flag). - * Isolated here to keep the main refactor.ts free of `any` types and eslint-disable directives. - * Will be removed when a custom resource refactorer is implemented. - */ -import { AmplifyMigrationOperation } from '../_operation'; -import { AmplifyError } from '@aws-amplify/amplify-cli-core'; -import fs from 'fs-extra'; -import { GetCallerIdentityCommand, STSClient } from '@aws-sdk/client-sts'; -import { ResourceMapping } from './workflow/category-refactorer'; - -const FILE_PROTOCOL_PREFIX = 'file://'; - -/** - * Parses and validates a resource mappings file from the --resourceMappings flag. - */ -export async function parseResourceMappings(resourceMappings: string): Promise { - if (!resourceMappings.startsWith(FILE_PROTOCOL_PREFIX)) { - throw new AmplifyError('InputValidationError', { - message: `Resource mappings path must start with ${FILE_PROTOCOL_PREFIX}`, - resolution: `Use the format: ${FILE_PROTOCOL_PREFIX}/path/to/mappings.json`, - }); - } - - const resourceMapPath = resourceMappings.split(FILE_PROTOCOL_PREFIX)[1]; - if (!resourceMapPath) { - throw new AmplifyError('InputValidationError', { - message: 'Invalid resource mappings path', - resolution: `Use the format: ${FILE_PROTOCOL_PREFIX}/path/to/file.json`, - }); - } - - if (!(await fs.pathExists(resourceMapPath))) { - throw new AmplifyError('ResourceDoesNotExistError', { - message: `Resource mappings file not found: ${resourceMapPath}`, - resolution: 'Ensure the file exists and the path is correct.', - }); - } - - const fileContent = await fs.readFile(resourceMapPath, 'utf-8'); - - let parsed: unknown; - try { - parsed = JSON.parse(fileContent); - } catch (parseError) { - throw new AmplifyError('InputValidationError', { - message: `Failed to parse JSON from resource mappings file: ${ - parseError instanceof Error ? parseError.message : 'Invalid JSON format' - }`, - resolution: 'Ensure the file contains valid JSON.', - }); - } - - if (!Array.isArray(parsed) || !parsed.every(isResourceMappingValid)) { - throw new AmplifyError('InputValidationError', { - message: 'Invalid resource mappings structure', - resolution: 'Each mapping must have Source and Destination objects with StackName and LogicalResourceId properties.', - }); - } - - return parsed; -} - -/** - * Executes the legacy custom resource refactor using the old TemplateGenerator. - */ -export async function executeLegacyRefactor(params: { - readonly rootStackName: string; - readonly toStack: string; - readonly appId: string; - readonly currentEnvName: string; - readonly region: string; - readonly logger: { info: (msg: string) => void }; - readonly parsedMappings: ResourceMapping[]; -}): Promise { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let TemplateGenerator: any; - try { - // @ts-expect-error generators/ was removed in Phase 7; the catch block handles this gracefully. - ({ TemplateGenerator } = await import('./generators/template-generator')); - } catch { - throw new AmplifyError('NotImplementedError', { - message: '--resourceMappings requires the legacy refactor code which has been removed', - resolution: 'A custom resource refactorer has not been implemented yet. Please remove the --resourceMappings flag.', - }); - } - - return [ - { - validate: () => undefined, - describe: async () => ['Move stateful resources from your Gen1 app to be managed by your Gen2 app'], - execute: async () => { - const templateGenerator = await initializeLegacyTemplateGenerator(TemplateGenerator, params); - await templateGenerator.initializeForAssessment(); - const categories = [...templateGenerator.categoryStackMap.keys()]; - const success = await templateGenerator.generateSelectedCategories(categories, params.parsedMappings); - if (!success) { - throw new AmplifyError('DeploymentError', { message: 'Failed to execute CloudFormation stack refactor' }); - } - }, - }, - ]; -} - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -async function initializeLegacyTemplateGenerator( - TemplateGenerator: any, - params: { - readonly rootStackName: string; - readonly toStack: string; - readonly appId: string; - readonly currentEnvName: string; - readonly region: string; - readonly logger: { info: (msg: string) => void }; - }, -) { - const stsClient = new STSClient({}); - const { Account: accountId } = await stsClient.send(new GetCallerIdentityCommand({})); - if (!accountId) { - throw new AmplifyError('ConfigurationError', { message: 'Unable to determine AWS account ID' }); - } - - const { CloudFormationClient } = await import('@aws-sdk/client-cloudformation'); - const { SSMClient } = await import('@aws-sdk/client-ssm'); - const { CognitoIdentityProviderClient } = await import('@aws-sdk/client-cognito-identity-provider'); - - return new TemplateGenerator( - params.rootStackName, - params.toStack, - accountId, - new CloudFormationClient({}), - new SSMClient({}), - new CognitoIdentityProviderClient({}), - params.appId, - params.currentEnvName, - params.logger, - params.region, - ); -} - -function isResourceMappingValid(resourceMapping: unknown): resourceMapping is ResourceMapping { - return ( - typeof resourceMapping === 'object' && - resourceMapping !== null && - 'Destination' in resourceMapping && - typeof resourceMapping.Destination === 'object' && - resourceMapping.Destination !== null && - 'StackName' in resourceMapping.Destination && - typeof resourceMapping.Destination.StackName === 'string' && - 'LogicalResourceId' in resourceMapping.Destination && - typeof resourceMapping.Destination.LogicalResourceId === 'string' && - 'Source' in resourceMapping && - typeof resourceMapping.Source === 'object' && - resourceMapping.Source !== null && - 'StackName' in resourceMapping.Source && - typeof resourceMapping.Source.StackName === 'string' && - 'LogicalResourceId' in resourceMapping.Source && - typeof resourceMapping.Source.LogicalResourceId === 'string' - ); -} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/template-diff.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/template-diff.ts deleted file mode 100644 index 290a483177b..00000000000 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/template-diff.ts +++ /dev/null @@ -1,65 +0,0 @@ -import chalk from 'chalk'; -import { CFNTemplate } from '../cfn-template'; - -/** - * Produces a per-resource property diff between a deployed and resolved template. - */ -export function formatTemplateDiff(deployed: CFNTemplate, resolved: CFNTemplate): string { - const lines: string[] = []; - const allIds = new Set([...Object.keys(deployed.Resources ?? {}), ...Object.keys(resolved.Resources ?? {})]); - - for (const logicalId of allIds) { - const oldRes = deployed.Resources?.[logicalId]; - const newRes = resolved.Resources?.[logicalId]; - - if (!oldRes && newRes) { - lines.push(`${chalk.green('+')} ${chalk.bold(logicalId)} (${newRes.Type})`); - continue; - } - if (oldRes && !newRes) { - lines.push(`${chalk.red('-')} ${chalk.bold(logicalId)} (${oldRes.Type})`); - continue; - } - if (!oldRes || !newRes) continue; - - const propDiffs = diffProperties(oldRes.Properties ?? {}, newRes.Properties ?? {}); - if (propDiffs.length === 0) continue; - - lines.push(`${chalk.yellow('~')} ${chalk.bold(logicalId)} (${oldRes.Type})`); - lines.push(...propDiffs); - } - - return lines.join('\n'); -} - -function diffProperties(oldProps: Record, newProps: Record, prefix = ''): string[] { - const lines: string[] = []; - const allKeys = new Set([...Object.keys(oldProps), ...Object.keys(newProps)]); - - for (const key of allKeys) { - const path = prefix ? `${prefix}.${key}` : key; - const oldVal = oldProps[key]; - const newVal = newProps[key]; - - if (oldVal === undefined) { - lines.push(` ${chalk.green('+')} ${path}: ${format(newVal)}`); - } else if (newVal === undefined) { - lines.push(` ${chalk.red('-')} ${path}: ${format(oldVal)}`); - } else if (typeof oldVal === 'object' && typeof newVal === 'object' && oldVal !== null && newVal !== null) { - if (!Array.isArray(oldVal) && !Array.isArray(newVal)) { - lines.push(...diffProperties(oldVal as Record, newVal as Record, path)); - } else if (JSON.stringify(oldVal) !== JSON.stringify(newVal)) { - lines.push(` ${chalk.yellow('~')} ${path}: ${format(oldVal)} → ${format(newVal)}`); - } - } else if (JSON.stringify(oldVal) !== JSON.stringify(newVal)) { - lines.push(` ${chalk.yellow('~')} ${path}: ${format(oldVal)} → ${format(newVal)}`); - } - } - - return lines; -} - -function format(value: unknown): string { - if (typeof value === 'string') return value; - return JSON.stringify(value); -} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index 90644fecc35..a71c7c71e53 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -1,17 +1,18 @@ import { Parameter, CreateChangeSetCommand, + DeleteChangeSetCommand, DescribeChangeSetCommand, waitUntilChangeSetCreateComplete, } from '@aws-sdk/client-cloudformation'; import { AmplifyError } from '@aws-amplify/amplify-cli-core'; -import { CFNResource, CFNStackStatus, CFNTemplate } from '../../cfn-template'; +import { CFNResource, CFNTemplate } from '../../cfn-template'; import { Refactorer } from '../refactorer'; import { AmplifyMigrationOperation } from '../../_operation'; import { AwsClients } from '../../aws-clients'; import { StackFacade } from '../stack-facade'; import { tryUpdateStack } from '../cfn-stack-updater'; -import { tryRefactorStack, RefactorFailure } from '../cfn-stack-refactor-updater'; +import { tryRefactorStack } from '../cfn-stack-refactor-updater'; import { SpinningLogger } from '../../_spinning-logger'; import { extractStackNameFromId } from '../utils'; import { DiscoveredResource } from '../../generate/_infra/gen1-app'; @@ -188,17 +189,12 @@ export abstract class CategoryRefactorer implements Refactorer { describe: async () => [description], execute: async () => { this.logger.info(header); - const status = await tryUpdateStack({ + await tryUpdateStack({ cfnClient: this.clients.cloudFormation, stackName: source.stackId, parameters: source.parameters, templateBody: source.resolvedTemplate, }); - if (status !== CFNStackStatus.UPDATE_COMPLETE) { - throw new AmplifyError('StackStateError', { - message: `Source stack '${source.stackId}' ended with status '${status}' instead of UPDATE_COMPLETE`, - }); - } }, }, ]; @@ -223,17 +219,12 @@ export abstract class CategoryRefactorer implements Refactorer { describe: async () => [description], execute: async () => { this.logger.info(header); - const status = await tryUpdateStack({ + await tryUpdateStack({ cfnClient: this.clients.cloudFormation, stackName: target.stackId, parameters: target.parameters, templateBody: target.resolvedTemplate, }); - if (status !== CFNStackStatus.UPDATE_COMPLETE) { - throw new AmplifyError('StackStateError', { - message: `Target stack '${target.stackId}' ended with status '${status}' instead of UPDATE_COMPLETE`, - }); - } }, }, ]; @@ -258,27 +249,27 @@ export abstract class CategoryRefactorer implements Refactorer { ); try { - await waitUntilChangeSetCreateComplete( - { client: this.clients.cloudFormation, maxWaitTime: 120 }, - { StackName: stackName, ChangeSetName: changeSetName }, + try { + await waitUntilChangeSetCreateComplete( + { client: this.clients.cloudFormation, maxWaitTime: 120 }, + { StackName: stackName, ChangeSetName: changeSetName }, + ); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (e: any) { + if (e.message?.includes(`The submitted information didn't contain changes`)) { + return undefined; + } + throw e; + } + + const changeSet = await this.clients.cloudFormation.send( + new DescribeChangeSetCommand({ StackName: stackName, ChangeSetName: changeSetName, IncludePropertyValues: true }), ); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } catch (e: any) { + return formatChangeSetReport(changeSet); + } finally { + await this.clients.cloudFormation.send(new DeleteChangeSetCommand({ StackName: stackName, ChangeSetName: changeSetName })); this.logger.pop(); - if (e.message?.includes(`The submitted information didn't contain changes`)) { - // means the template we gave is exactly the same as the deployed template. - // this can happen after partial failures (update source -> update target -> fail -> update source) - return undefined; - } - throw e; } - - const changeSet = await this.clients.cloudFormation.send( - new DescribeChangeSetCommand({ StackName: stackName, ChangeSetName: changeSetName, IncludePropertyValues: true }), - ); - - this.logger.pop(); - return formatChangeSetReport(changeSet); } /** @@ -376,19 +367,13 @@ export abstract class CategoryRefactorer implements Refactorer { return [`${header}\n\n${table}`]; }, execute: async () => { - const result = await tryRefactorStack(this.clients.cloudFormation, { + await tryRefactorStack(this.clients.cloudFormation, { StackDefinitions: [ { TemplateBody: JSON.stringify(source.afterRemoval), StackName: source.stackId }, { TemplateBody: JSON.stringify(target.afterAddition), StackName: target.stackId }, ], ResourceMappings: resourceMappings, }); - if (!result.success) { - const failure = result as RefactorFailure; - throw new AmplifyError('MigrationError', { - message: `Stack refactor failed: ${failure.reason} (status: ${failure.status}, refactorId: ${failure.stackRefactorId})`, - }); - } }, }, ]; diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index 62d7fba547f..9371fdeb54a 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -8,7 +8,7 @@ import { resolveDependencies } from '../resolvers/cfn-dependency-resolver'; import { resolveConditions } from '../resolvers/cfn-condition-resolver'; import { extractStackNameFromId } from '../utils'; import { getHoldingStackName, findHoldingStack, deleteHoldingStack } from '../holding-stack'; -import { tryRefactorStack, RefactorFailure } from '../cfn-stack-refactor-updater'; +import { tryRefactorStack } from '../cfn-stack-refactor-updater'; import { CategoryRefactorer, MoveMapping, RefactorBlueprint, ResolvedStack, ResourceMapping } from './category-refactorer'; /** @@ -190,7 +190,7 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { } this.logger.info(header); - const result = await tryRefactorStack(this.clients.cloudFormation, { + await tryRefactorStack(this.clients.cloudFormation, { StackDefinitions: [ { TemplateBody: JSON.stringify(postTargetTemplate), StackName: blueprint.target.stackId }, { TemplateBody: JSON.stringify(holdingTemplate), StackName: holdingStackName }, @@ -198,12 +198,6 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { ResourceMappings: holdingMappings, EnableStackCreation: true, }); - if (!result.success) { - const failure = result as RefactorFailure; - throw new AmplifyError('StackStateError', { - message: `Failed to move Gen2 resources to holding stack: ${failure.reason}`, - }); - } }, }, ]; diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index 940bd67d7eb..eb0023c4e3d 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -8,7 +8,7 @@ import { resolveDependencies } from '../resolvers/cfn-dependency-resolver'; import { extractStackNameFromId } from '../utils'; import { getHoldingStackName, findHoldingStack, deleteHoldingStack } from '../holding-stack'; import { tryUpdateStack } from '../cfn-stack-updater'; -import { tryRefactorStack, RefactorFailure } from '../cfn-stack-refactor-updater'; +import { tryRefactorStack } from '../cfn-stack-refactor-updater'; import { CategoryRefactorer, MIGRATION_PLACEHOLDER_LOGICAL_ID, @@ -151,41 +151,39 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { const table = this.renderMappingTable(restoreMoveMappings); const description = `${header}\n\n${table}`; + const holdingTemplate = JSON.parse(holdingTemplateResponse.TemplateBody) as CFNTemplate; + const holdingWithPlaceholder = { + ...holdingTemplate, + Resources: { ...holdingTemplate.Resources, [MIGRATION_PLACEHOLDER_LOGICAL_ID]: PLACEHOLDER_RESOURCE }, + }; + + const targetTemplate = JSON.parse(JSON.stringify(blueprint.source.afterRemoval)) as CFNTemplate; + const holdingAfterRestore = JSON.parse(JSON.stringify(holdingWithPlaceholder)) as CFNTemplate; + for (const mapping of blueprint.mappings) { + targetTemplate.Resources[mapping.sourceId] = holdingWithPlaceholder.Resources[mapping.sourceId]; + delete holdingAfterRestore.Resources[mapping.sourceId]; + } + return [ { resource: this.resource, validate: () => undefined, describe: async () => [description], execute: async () => { - const holdingTemplate = JSON.parse(holdingTemplateResponse.TemplateBody) as CFNTemplate; - holdingTemplate.Resources[MIGRATION_PLACEHOLDER_LOGICAL_ID] = PLACEHOLDER_RESOURCE; await tryUpdateStack({ cfnClient: this.clients.cloudFormation, stackName: holdingStackName, parameters: [], - templateBody: holdingTemplate, + templateBody: holdingWithPlaceholder, }); - const targetTemplate = JSON.parse(JSON.stringify(blueprint.source.afterRemoval)) as CFNTemplate; - for (const mapping of blueprint.mappings) { - targetTemplate.Resources[mapping.sourceId] = holdingTemplate.Resources[mapping.sourceId]; - delete holdingTemplate.Resources[mapping.sourceId]; - } - - this.logger.info(header); - const result = await tryRefactorStack(this.clients.cloudFormation, { + await tryRefactorStack(this.clients.cloudFormation, { StackDefinitions: [ - { TemplateBody: JSON.stringify(holdingTemplate), StackName: holdingStackName }, + { TemplateBody: JSON.stringify(holdingAfterRestore), StackName: holdingStackName }, { TemplateBody: JSON.stringify(targetTemplate), StackName: gen2StackId }, ], ResourceMappings: restoreMappings, }); - if (!result.success) { - const failure = result as RefactorFailure; - throw new AmplifyError('MigrationError', { - message: `Failed to restore Gen2 resources from holding stack: ${failure.reason}`, - }); - } }, }, ]; From 195f9822559c932f5b3ff01e09fd12782536d070 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sat, 21 Mar 2026 22:59:08 -0400 Subject: [PATCH 22/70] refactor(cli-internal): consolidate CFN operations into Cfn class Introduce a Cfn class that centralizes all CloudFormation operations (update, refactor, createChangeSet, findStack, deleteStack, renderChangeSet) behind a single client instance. Replace custom polling with SDK waiters (waitUntilStackUpdateComplete, waitUntilStackRefactorCreate/ ExecuteComplete, waitUntilStackDeleteComplete). Delete refactorer.ts (re-export of Planner), holding-stack.ts, cfn-stack-updater.ts, cfn-stack-refactor-updater.ts, changeset-report.ts, and snap.ts. Move getHoldingStackName and HOLDING_STACK_SUFFIX into CategoryRefactorer. Inline snapshot writing into cfn.ts. --- Prompt: consolidate 3 CFN operations into a Cfn class, replace custom polling with SDK waiters, remove refactorer.ts, holding-stack.ts, snap.ts, changeset-report.ts, inline snap into cfn.ts, remove resolveStackName, move ensureOutputDirectory to constructor. --- .../gen2-migration/refactor/refactor.test.ts | 2 +- .../commands/gen2-migration/decommission.ts | 6 +- .../refactor/cfn-stack-refactor-updater.ts | 144 --------- .../refactor/cfn-stack-updater.ts | 85 ------ .../commands/gen2-migration/refactor/cfn.ts | 281 ++++++++++++++++++ .../refactor/changeset-report.ts | 51 ---- .../gen2-migration/refactor/holding-stack.ts | 59 ---- .../gen2-migration/refactor/refactor.ts | 8 +- .../gen2-migration/refactor/refactorer.ts | 1 - .../commands/gen2-migration/refactor/snap.ts | 44 --- .../refactor/workflow/category-refactorer.ts | 85 +++--- .../workflow/forward-category-refactorer.ts | 10 +- .../workflow/rollback-category-refactorer.ts | 12 +- 13 files changed, 333 insertions(+), 455 deletions(-) delete mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/cfn-stack-refactor-updater.ts delete mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/cfn-stack-updater.ts create mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts delete mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/changeset-report.ts delete mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/holding-stack.ts delete mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/refactorer.ts delete mode 100644 packages/amplify-cli/src/commands/gen2-migration/refactor/snap.ts diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts index d92e7d9a0f7..43bd05e63b6 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts @@ -1,5 +1,5 @@ import { AmplifyMigrationRefactorStep } from '../../../../commands/gen2-migration/refactor'; -import { OUTPUT_DIRECTORY } from '../../../../commands/gen2-migration/refactor/snap'; +import { OUTPUT_DIRECTORY } from '../../../../commands/gen2-migration/refactor/cfn'; import { MigrationApp, MigrationAppOptions } from '../_framework/app'; import { Gen1App, DiscoveredResource } from '../../../../commands/gen2-migration/generate/_infra/gen1-app'; import { Assessment } from '../../../../commands/gen2-migration/_assessment'; diff --git a/packages/amplify-cli/src/commands/gen2-migration/decommission.ts b/packages/amplify-cli/src/commands/gen2-migration/decommission.ts index a8c74780ed5..ae41c67c62a 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/decommission.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/decommission.ts @@ -14,11 +14,13 @@ import { } from '@aws-sdk/client-cloudformation'; import { removeEnvFromCloud } from '../../extensions/amplify-helpers/remove-env-from-cloud'; import { invokeDeleteEnvParamsFromService } from '../../extensions/amplify-helpers/invoke-delete-env-params'; -import { deleteHoldingStack, HOLDING_STACK_SUFFIX } from './refactor/holding-stack'; +import { Cfn } from './refactor/cfn'; +import { HOLDING_STACK_SUFFIX } from './refactor/workflow/category-refactorer'; export class AmplifyMigrationDecommissionStep extends AmplifyMigrationStep { public async forward(): Promise { const cfnClient = new CloudFormationClient({ region: this.region }); + const cfn = new Cfn(cfnClient); const holdingStacks = await this.findHoldingStacks(cfnClient); const operations: AmplifyMigrationOperation[] = []; @@ -36,7 +38,7 @@ export class AmplifyMigrationDecommissionStep extends AmplifyMigrationStep { describe: async () => [`Delete holding stack: ${stackName}`], execute: async () => { this.logger.info(`Deleting holding stack: ${stackName}`); - await deleteHoldingStack(cfnClient, stackName); + await cfn.deleteStack(stackName); this.logger.info(`Deleted holding stack: ${stackName}`); }, }); diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn-stack-refactor-updater.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn-stack-refactor-updater.ts deleted file mode 100644 index 92c78b40770..00000000000 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn-stack-refactor-updater.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { - CloudFormationClient, - CreateStackRefactorCommand, - CreateStackRefactorCommandInput, - DescribeStackRefactorCommand, - DescribeStackRefactorCommandOutput, - ExecuteStackRefactorCommand, - StackRefactorExecutionStatus, - StackRefactorStatus, -} from '@aws-sdk/client-cloudformation'; -import { AmplifyError } from '@aws-amplify/amplify-cli-core'; -import { CFNStackStatus } from '../cfn-template'; -import { pollStackForCompletionState } from './cfn-stack-updater'; -import { extractStackNameFromId } from './utils'; -import * as snap from './snap'; - -const POLL_ATTEMPTS = 300; -const POLL_INTERVAL_MS = 12000; -const COMPLETION_STATE = '_COMPLETE'; -const FAILED_STATE = '_FAILED'; - -/** - * Creates and executes a CloudFormation stack refactor operation. - * Polls for completion at each stage (create, execute, stack updates). - * Throws on failure. - */ -export async function tryRefactorStack( - cfnClient: CloudFormationClient, - input: CreateStackRefactorCommandInput, - attempts = POLL_ATTEMPTS, -): Promise { - input.Description = buildRefactorDescription(input); - - snap.preRefactorStack(input); - const { StackRefactorId } = await cfnClient.send(new CreateStackRefactorCommand(input)); - if (!StackRefactorId) { - throw new AmplifyError('StackStateError', { - message: 'CreateStackRefactor returned no StackRefactorId', - }); - } - - // Poll for create completion - let response = await pollStackRefactorForCompletionState( - cfnClient, - StackRefactorId, - (r) => { - if (!r.Status) { - throw new AmplifyError('StackStateError', { - message: `Stack refactor '${StackRefactorId}' has no status`, - }); - } - return r.Status.endsWith(COMPLETION_STATE) || r.Status.endsWith(FAILED_STATE); - }, - attempts, - ); - - if (response.Status !== StackRefactorStatus.CREATE_COMPLETE) { - throw new AmplifyError('MigrationError', { - message: `Stack refactor '${StackRefactorId}' failed during create: ${response.StatusReason} (status: ${response.Status})`, - }); - } - - // Execute the refactor - await cfnClient.send(new ExecuteStackRefactorCommand({ StackRefactorId })); - - response = await pollStackRefactorForCompletionState( - cfnClient, - StackRefactorId, - (r) => { - if (!r.ExecutionStatus) { - throw new AmplifyError('StackStateError', { - message: `Stack refactor '${StackRefactorId}' has no execution status`, - }); - } - return r.ExecutionStatus.endsWith(COMPLETION_STATE) || r.ExecutionStatus.endsWith(FAILED_STATE); - }, - attempts, - ); - - if (response.ExecutionStatus !== StackRefactorExecutionStatus.EXECUTE_COMPLETE) { - throw new AmplifyError('MigrationError', { - message: `Stack refactor '${StackRefactorId}' failed during execute: ${response.ExecutionStatusReason} (status: ${response.ExecutionStatus})`, - }); - } - - // Verify both stacks reached completion - const sourceStackName = input.StackDefinitions?.[0]?.StackName; - const destStackName = input.StackDefinitions?.[1]?.StackName; - if (!sourceStackName || !destStackName) { - throw new AmplifyError('InvalidStackError', { - message: 'Stack refactor input is missing source or destination stack name', - }); - } - - const sourceStatus = await pollStackForCompletionState(cfnClient, sourceStackName); - if (sourceStatus !== CFNStackStatus.UPDATE_COMPLETE) { - throw new AmplifyError('StackStateError', { - message: `Source stack '${sourceStackName}' ended with status '${sourceStatus}' instead of UPDATE_COMPLETE`, - }); - } - - const destStatus = await pollStackForCompletionState(cfnClient, destStackName); - if (destStatus !== CFNStackStatus.UPDATE_COMPLETE && destStatus !== CFNStackStatus.CREATE_COMPLETE) { - throw new AmplifyError('StackStateError', { - message: `Destination stack '${destStackName}' ended with status '${destStatus}' instead of UPDATE_COMPLETE or CREATE_COMPLETE`, - }); - } - - return; -} - -function buildRefactorDescription(input: CreateStackRefactorCommandInput): string { - const logicalIds = input.ResourceMappings?.map((m) => m.Source?.LogicalResourceId).join(', '); - const source = resolveStackName(input.StackDefinitions?.[0]?.StackName); - const dest = resolveStackName(input.StackDefinitions?.[1]?.StackName); - return `Move [${logicalIds}] from ${source} to ${dest}`; -} - -function resolveStackName(stackNameOrArn: string | undefined): string { - if (!stackNameOrArn) return 'unknown'; - return stackNameOrArn.startsWith('arn:') ? extractStackNameFromId(stackNameOrArn) : stackNameOrArn; -} - -/** - * Polls a stack refactor operation until the exit condition is met. - */ -async function pollStackRefactorForCompletionState( - cfnClient: CloudFormationClient, - stackRefactorId: string, - exitCondition: (response: DescribeStackRefactorCommandOutput) => boolean, - attempts: number, -): Promise { - do { - const response = await cfnClient.send(new DescribeStackRefactorCommand({ StackRefactorId: stackRefactorId })); - if (exitCondition(response)) { - return response; - } - await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS)); - attempts--; - } while (attempts > 0); - throw new AmplifyError('StackStateError', { - message: `Stack refactor '${stackRefactorId}' did not reach a completion state within the polling period`, - }); -} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn-stack-updater.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn-stack-updater.ts deleted file mode 100644 index c4eee24a082..00000000000 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn-stack-updater.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { - CloudFormationClient, - DescribeStacksCommand, - Parameter, - UpdateStackCommand, - UpdateStackCommandInput, -} from '@aws-sdk/client-cloudformation'; -import { AmplifyError } from '@aws-amplify/amplify-cli-core'; -import { CFNStackStatus, CFNTemplate } from '../cfn-template'; -import * as snap from './snap'; - -const POLL_ATTEMPTS = 120; -const POLL_INTERVAL_MS = 5 * 1000; -const NO_UPDATES_MESSAGE = 'No updates are to be performed'; -const CFN_IAM_CAPABILITY = 'CAPABILITY_NAMED_IAM'; -const COMPLETION_STATE = '_COMPLETE'; - -/** - * Updates a stack with the given template. No-ops if no updates are needed. - * Throws if the stack does not reach UPDATE_COMPLETE. - */ -export async function tryUpdateStack(params: { - readonly cfnClient: CloudFormationClient; - readonly stackName: string; - readonly parameters: Parameter[]; - readonly templateBody: CFNTemplate; - readonly attempts?: number; -}): Promise { - const { cfnClient, stackName, parameters, templateBody, attempts = POLL_ATTEMPTS } = params; - try { - const input: UpdateStackCommandInput = { - TemplateBody: JSON.stringify(templateBody), - Parameters: parameters, - StackName: stackName, - Capabilities: [CFN_IAM_CAPABILITY], - Tags: [], - }; - snap.preUpdateStack(input); - await cfnClient.send(new UpdateStackCommand(input)); - } catch (e) { - if (e && typeof e === 'object' && 'message' in e && typeof e.message === 'string' && e.message.includes(NO_UPDATES_MESSAGE)) { - return; - } - throw e; - } - const status = await pollStackForCompletionState(cfnClient, stackName, attempts); - if (status !== CFNStackStatus.UPDATE_COMPLETE) { - throw new AmplifyError('StackStateError', { - message: `Stack '${stackName}' ended with status '${status}' instead of UPDATE_COMPLETE`, - }); - } -} - -/** - * Polls a stack until it reaches a completion state. - */ -export async function pollStackForCompletionState( - cfnClient: CloudFormationClient, - stackName: string, - attempts: number = POLL_ATTEMPTS, -): Promise { - do { - const { Stacks } = await cfnClient.send(new DescribeStacksCommand({ StackName: stackName })); - const stack = Stacks?.[0]; - if (!stack) { - throw new AmplifyError('StackNotFoundError', { - message: `Stack '${stackName}' not found while polling for completion`, - }); - } - const stackStatus = stack.StackStatus; - if (!stackStatus) { - throw new AmplifyError('StackStateError', { - message: `Stack '${stackName}' has no status`, - }); - } - if (stackStatus.endsWith(COMPLETION_STATE)) { - return stackStatus; - } - await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS)); - attempts--; - } while (attempts > 0); - throw new AmplifyError('StackStateError', { - message: `Stack '${stackName}' did not reach a completion state within the polling period`, - }); -} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts new file mode 100644 index 00000000000..77e0c2ca4a4 --- /dev/null +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts @@ -0,0 +1,281 @@ +import { + CloudFormationClient, + CloudFormationServiceException, + CreateChangeSetCommand, + CreateStackRefactorCommand, + CreateStackRefactorCommandInput, + DeleteChangeSetCommand, + DeleteStackCommand, + DescribeChangeSetCommand, + DescribeChangeSetOutput, + DescribeStacksCommand, + ExecuteStackRefactorCommand, + Parameter, + Stack, + UpdateStackCommand, + UpdateStackCommandInput, + waitUntilChangeSetCreateComplete, + waitUntilStackCreateComplete, + waitUntilStackDeleteComplete, + waitUntilStackRefactorCreateComplete, + waitUntilStackRefactorExecuteComplete, + waitUntilStackUpdateComplete, +} from '@aws-sdk/client-cloudformation'; +import { AmplifyError } from '@aws-amplify/amplify-cli-core'; +import { CFNTemplate } from '../cfn-template'; +import { extractStackNameFromId } from './utils'; +import chalk from 'chalk'; +import * as fs from 'fs'; +import * as path from 'path'; + +const MAX_WAIT_TIME_SECONDS = 3600; +const NO_UPDATES_MESSAGE = 'No updates are to be performed'; +const CFN_IAM_CAPABILITY = 'CAPABILITY_NAMED_IAM'; +export const OUTPUT_DIRECTORY = '.amplify/refactor.operations'; + +/** + * Centralized CloudFormation operations for the refactor workflow. + * Wraps update, refactor, and change set APIs behind a single client instance. + */ +export class Cfn { + constructor(private readonly client: CloudFormationClient) { + if (!fs.existsSync(OUTPUT_DIRECTORY)) { + fs.mkdirSync(OUTPUT_DIRECTORY, { recursive: true }); + } + } + + /** + * Updates a stack with the given template. + * No-ops if no updates are needed. Throws on failure. + */ + public async update(params: { + readonly stackName: string; + readonly parameters: Parameter[]; + readonly templateBody: CFNTemplate; + }): Promise { + const { stackName, parameters, templateBody } = params; + try { + const input: UpdateStackCommandInput = { + TemplateBody: JSON.stringify(templateBody), + Parameters: parameters, + StackName: stackName, + Capabilities: [CFN_IAM_CAPABILITY], + Tags: [], + }; + writeUpdateSnapshot(input); + await this.client.send(new UpdateStackCommand(input)); + } catch (e) { + if (e && typeof e === 'object' && 'message' in e && typeof e.message === 'string' && e.message.includes(NO_UPDATES_MESSAGE)) { + return; + } + throw e; + } + await waitUntilStackUpdateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: stackName }); + } + + /** + * Creates and executes a CloudFormation stack refactor. + * Throws on failure. + */ + public async refactor(input: CreateStackRefactorCommandInput): Promise { + input.Description = buildRefactorDescription(input); + + writeRefactorSnapshot(input); + const { StackRefactorId } = await this.client.send(new CreateStackRefactorCommand(input)); + if (!StackRefactorId) { + throw new AmplifyError('StackStateError', { + message: 'CreateStackRefactor returned no StackRefactorId', + }); + } + + await waitUntilStackRefactorCreateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackRefactorId }); + + await this.client.send(new ExecuteStackRefactorCommand({ StackRefactorId })); + + await waitUntilStackRefactorExecuteComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackRefactorId }); + + // Verify both stacks reached their final state + const sourceStackName = input.StackDefinitions?.[0]?.StackName; + const destStackName = input.StackDefinitions?.[1]?.StackName; + if (!sourceStackName || !destStackName) { + throw new AmplifyError('InvalidStackError', { + message: 'Stack refactor input is missing source or destination stack name', + }); + } + + await waitUntilStackUpdateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: sourceStackName }); + + // Destination may be newly created (EnableStackCreation) or updated + try { + await waitUntilStackUpdateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: destStackName }); + } catch { + await waitUntilStackCreateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: destStackName }); + } + } + + /** + * Creates a change set, waits for it, describes it, then deletes it. + * Returns the described change set, or undefined if no changes were detected. + */ + public async createChangeSet(params: { + readonly stackName: string; + readonly parameters: Parameter[]; + readonly templateBody: CFNTemplate; + }): Promise { + const { stackName, parameters, templateBody } = params; + const changeSetName = `migration-preview-${Date.now()}`; + + await this.client.send( + new CreateChangeSetCommand({ + StackName: stackName, + ChangeSetName: changeSetName, + TemplateBody: JSON.stringify(templateBody), + Parameters: parameters, + Capabilities: [CFN_IAM_CAPABILITY], + }), + ); + + try { + try { + await waitUntilChangeSetCreateComplete( + { client: this.client, maxWaitTime: 120 }, + { StackName: stackName, ChangeSetName: changeSetName }, + ); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (e: any) { + if (e.message?.includes(`The submitted information didn't contain changes`)) { + return undefined; + } + throw e; + } + + return await this.client.send( + new DescribeChangeSetCommand({ StackName: stackName, ChangeSetName: changeSetName, IncludePropertyValues: true }), + ); + } finally { + await this.client.send(new DeleteChangeSetCommand({ StackName: stackName, ChangeSetName: changeSetName })); + } + } + + /** + * Finds a stack by name. Returns the stack if it exists, null if it doesn't + * or has been deleted. + */ + public async findStack(stackName: string): Promise { + try { + const response = await this.client.send(new DescribeStacksCommand({ StackName: stackName })); + const stack = response.Stacks?.[0]; + if (stack && stack.StackStatus !== 'DELETE_COMPLETE') { + return stack; + } + return null; + } catch (error: unknown) { + if ( + error instanceof CloudFormationServiceException && + error.name === 'ValidationError' && + error.message?.includes('does not exist') + ) { + return null; + } + throw error; + } + } + + /** + * Deletes a stack and waits for deletion to complete. + * No-ops if the stack does not exist. + */ + public async deleteStack(stackName: string): Promise { + try { + await this.client.send(new DeleteStackCommand({ StackName: stackName })); + await waitUntilStackDeleteComplete({ client: this.client, maxWaitTime: 300 }, { StackName: stackName }); + } catch (error: unknown) { + if ( + error instanceof CloudFormationServiceException && + error.name === 'ValidationError' && + error.message?.includes('does not exist') + ) { + return; + } + throw error; + } + } + + /** + * Renders a human-readable report of property changes from a described change set. + */ + public renderChangeSet(changeSet: DescribeChangeSetOutput): string | undefined { + const changes = changeSet.Changes ?? []; + if (changes.length === 0) return undefined; + + const lines: string[] = []; + + for (const change of changes) { + const rc = change.ResourceChange; + if (!rc) continue; + + const action = rc.Action ?? 'Unknown'; + const logicalId = rc.LogicalResourceId ?? 'Unknown'; + const resourceType = rc.ResourceType ?? 'Unknown'; + + lines.push(''); + lines.push(`${chalk.bold(logicalId)} (${resourceType}) — ${chalk.yellow(action)}`); + + const details = rc.Details ?? []; + const propDetails = details.filter((d) => d.Target?.Attribute === 'Properties' && d.Target?.Name); + + for (const detail of propDetails) { + const target = detail.Target; + const propertyPath = target.Path; + const before = target.BeforeValue; + const after = target.AfterValue; + + lines.push(''); + if (before && after) { + lines.push(` ${propertyPath}:`); + lines.push(` ${chalk.red(`- ${before}`)}`); + lines.push(` ${chalk.green(`+ ${after}`)}`); + } else if (after) { + lines.push(` ${propertyPath}:`); + lines.push(` ${chalk.green(`+ ${after}`)}`); + } else if (before) { + lines.push(` ${propertyPath}:`); + lines.push(` ${chalk.red(`- ${before}`)}`); + } else { + lines.push(` ${propertyPath}: (changed)`); + } + } + } + + return lines.join('\n'); + } +} + +function buildRefactorDescription(input: CreateStackRefactorCommandInput): string { + const logicalIds = input.ResourceMappings.map((m) => m.Source?.LogicalResourceId).join(', '); + const source = extractStackNameFromId(input.StackDefinitions[0].StackName); + const dest = extractStackNameFromId(input.StackDefinitions[1].StackName); + return `Move [${logicalIds}] from ${source} to ${dest}`; +} + +function formatTemplateBody(templateBody: string): string { + return JSON.stringify(JSON.parse(templateBody), null, 2); +} + +function writeUpdateSnapshot(input: UpdateStackCommandInput): void { + const stackName = extractStackNameFromId(input.StackName); + fs.writeFileSync(path.join(OUTPUT_DIRECTORY, `update.${stackName}.template.json`), formatTemplateBody(input.TemplateBody)); + fs.writeFileSync(path.join(OUTPUT_DIRECTORY, `update.${stackName}.parameters.json`), JSON.stringify(input.Parameters ?? [], null, 2)); +} + +function writeRefactorSnapshot(input: CreateStackRefactorCommandInput): void { + const source = input.StackDefinitions[0]; + const target = input.StackDefinitions[1]; + const sourceStackName = extractStackNameFromId(source.StackName); + const targetStackName = extractStackNameFromId(target.StackName); + const description = `refactor.__from__.${sourceStackName}.__to__.${targetStackName}`; + const basePath = path.join(OUTPUT_DIRECTORY, description); + fs.writeFileSync(`${basePath}.source.template.json`, formatTemplateBody(source.TemplateBody)); + fs.writeFileSync(`${basePath}.target.template.json`, formatTemplateBody(target.TemplateBody)); + fs.writeFileSync(path.join(OUTPUT_DIRECTORY, `${description}.mappings.json`), JSON.stringify(input.ResourceMappings ?? [], null, 2)); +} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/changeset-report.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/changeset-report.ts deleted file mode 100644 index 4cde6939509..00000000000 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/changeset-report.ts +++ /dev/null @@ -1,51 +0,0 @@ -import chalk from 'chalk'; -import { DescribeChangeSetOutput } from '@aws-sdk/client-cloudformation'; - -/** - * Produces a human-readable report of property changes from a described changeset. - */ -export function formatChangeSetReport(changeSet: DescribeChangeSetOutput): string | undefined { - const changes = changeSet.Changes ?? []; - if (changes.length === 0) return undefined; - - const lines: string[] = []; - - for (const change of changes) { - const rc = change.ResourceChange; - if (!rc) continue; - - const action = rc.Action ?? 'Unknown'; - const logicalId = rc.LogicalResourceId ?? 'Unknown'; - const resourceType = rc.ResourceType ?? 'Unknown'; - - lines.push(''); - lines.push(`${chalk.bold(logicalId)} (${resourceType}) — ${chalk.yellow(action)}`); - - const details = rc.Details ?? []; - const propDetails = details.filter((d) => d.Target?.Attribute === 'Properties' && d.Target?.Name); - - for (const detail of propDetails) { - const target = detail.Target!; - const propertyPath = target.Path ?? target.Name!; - const before = target.BeforeValue; - const after = target.AfterValue; - - lines.push(''); - if (before && after) { - lines.push(` ${propertyPath}:`); - lines.push(` ${chalk.red(`- ${before}`)}`); - lines.push(` ${chalk.green(`+ ${after}`)}`); - } else if (after) { - lines.push(` ${propertyPath}:`); - lines.push(` ${chalk.green(`+ ${after}`)}`); - } else if (before) { - lines.push(` ${propertyPath}:`); - lines.push(` ${chalk.red(`- ${before}`)}`); - } else { - lines.push(` ${propertyPath}: (changed)`); - } - } - } - - return lines.join('\n'); -} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/holding-stack.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/holding-stack.ts deleted file mode 100644 index 717e472bfab..00000000000 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/holding-stack.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { - CloudFormationClient, - CloudFormationServiceException, - DeleteStackCommand, - DescribeStacksCommand, - Stack, -} from '@aws-sdk/client-cloudformation'; -import { pollStackForCompletionState } from './cfn-stack-updater'; - -export const HOLDING_STACK_SUFFIX = '-holding'; -const MAX_STACK_NAME_LENGTH = 128; - -/** - * Derives the holding stack name from a Gen2 category stack ID. - * Preserves the CloudFormation hash suffix (part after the last dash) for uniqueness. - * If the resulting name would exceed 128 characters, the prefix is truncated. - */ -export function getHoldingStackName(gen2CategoryStackId: string): string { - const lastDashIndex = gen2CategoryStackId.lastIndexOf('-'); - const prefix = gen2CategoryStackId.substring(0, lastDashIndex); - const hashSuffix = gen2CategoryStackId.substring(lastDashIndex); - const tail = `${hashSuffix}${HOLDING_STACK_SUFFIX}`; - const maxPrefixLength = MAX_STACK_NAME_LENGTH - tail.length; - return `${prefix.substring(0, maxPrefixLength)}${tail}`; -} - -/** - * Finds a holding stack by name. Returns the stack if it exists, null otherwise. - */ -export async function findHoldingStack(cfnClient: CloudFormationClient, stackName: string): Promise { - try { - const response = await cfnClient.send(new DescribeStacksCommand({ StackName: stackName })); - const stack = response.Stacks?.[0]; - if (stack && stack.StackStatus !== 'DELETE_COMPLETE') { - return stack; - } - return null; - } catch (error: unknown) { - if (error instanceof CloudFormationServiceException && error.name === 'ValidationError' && error.message?.includes('does not exist')) { - return null; - } - throw error; - } -} - -/** - * Deletes a holding stack and waits for deletion to complete. - */ -export async function deleteHoldingStack(cfnClient: CloudFormationClient, stackName: string): Promise { - try { - await cfnClient.send(new DeleteStackCommand({ StackName: stackName })); - await pollStackForCompletionState(cfnClient, stackName, 60); - } catch (error: unknown) { - if (error instanceof CloudFormationServiceException && error.name === 'ValidationError' && error.message?.includes('does not exist')) { - return; - } - throw error; - } -} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts index 9767913c2f8..69eb0156060 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts @@ -7,7 +7,7 @@ import { GetCallerIdentityCommand, STSClient } from '@aws-sdk/client-sts'; import { AmplifyGen2MigrationValidations } from '../_validations'; import { AwsClients } from '../aws-clients'; import { StackFacade } from './stack-facade'; -import { Refactorer } from './refactorer'; +import { Planner } from '../planner'; import { AuthCognitoForwardRefactorer } from './auth/auth-cognito-forward'; import { AuthCognitoRollbackRefactorer } from './auth/auth-cognito-rollback'; import { StorageS3ForwardRefactorer } from './storage/storage-forward'; @@ -57,7 +57,7 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { const gen1App = await Gen1App.create({ appId: this.appId, region: this.region, envName: this.currentEnvName, clients }); const discovered = gen1App.discover(); - const refactorers: Refactorer[] = []; + const refactorers: Planner[] = []; for (const resource of discovered) { switch (resource.key) { @@ -122,7 +122,7 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { const gen1App = await Gen1App.create({ appId: this.appId, region: this.region, envName: this.currentEnvName, clients }); const discovered = gen1App.discover(); - const refactorers: Refactorer[] = []; + const refactorers: Planner[] = []; for (const resource of discovered) { switch (resource.key) { @@ -189,7 +189,7 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { /** * Collects operations from all refactorers. */ - private async buildPlan(refactorers: Refactorer[], implications: string[], title: string): Promise { + private async buildPlan(refactorers: Planner[], implications: string[], title: string): Promise { const operations: AmplifyMigrationOperation[] = []; operations.push({ diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/refactorer.ts deleted file mode 100644 index d26d17d67e8..00000000000 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactorer.ts +++ /dev/null @@ -1 +0,0 @@ -export { Planner as Refactorer } from '../planner'; diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/snap.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/snap.ts deleted file mode 100644 index 67582e20d1f..00000000000 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/snap.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { CreateStackRefactorCommandInput, UpdateStackCommandInput } from '@aws-sdk/client-cloudformation'; -import * as fs from 'fs'; -import * as path from 'path'; -import { extractStackNameFromId } from './utils'; - -export const OUTPUT_DIRECTORY = `.amplify/refactor.operations`; - -/** - * Writes stack update snapshot files before an UpdateStack call. - * Produces: update..template.json, update..parameters.json - */ -export function preUpdateStack(input: UpdateStackCommandInput): void { - makeDirectory(OUTPUT_DIRECTORY); - const stackName = extractStackNameFromId(input.StackName!); - fs.writeFileSync(path.join(OUTPUT_DIRECTORY, `update.${stackName}.template.json`), formatTemplateBody(input.TemplateBody!)); - fs.writeFileSync(path.join(OUTPUT_DIRECTORY, `update.${stackName}.parameters.json`), JSON.stringify(input.Parameters ?? [], null, 2)); -} - -/** - * Writes stack refactor snapshot files before a CreateStackRefactor call. - * Produces: refactor.__from__..__to__..{source.template.json, target.template.json, mappings.json} - */ -export function preRefactorStack(input: CreateStackRefactorCommandInput): void { - makeDirectory(OUTPUT_DIRECTORY); - const source = input.StackDefinitions![0]; - const target = input.StackDefinitions![1]; - const sourceStackName = extractStackNameFromId(source.StackName!); - const targetStackName = extractStackNameFromId(target.StackName!); - const description = `refactor.__from__.${sourceStackName}.__to__.${targetStackName}`; - const basePath = path.join(OUTPUT_DIRECTORY, description); - fs.writeFileSync(`${basePath}.source.template.json`, formatTemplateBody(source.TemplateBody!)); - fs.writeFileSync(`${basePath}.target.template.json`, formatTemplateBody(target.TemplateBody!)); - fs.writeFileSync(path.join(OUTPUT_DIRECTORY, `${description}.mappings.json`), JSON.stringify(input.ResourceMappings ?? [], null, 2)); -} - -function makeDirectory(dir: string): void { - if (!fs.existsSync(dir)) { - fs.mkdirSync(dir, { recursive: true }); - } -} - -function formatTemplateBody(templateBody: string): string { - return JSON.stringify(JSON.parse(templateBody), null, 2); -} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index a71c7c71e53..b7e84e4a84b 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -1,26 +1,20 @@ -import { - Parameter, - CreateChangeSetCommand, - DeleteChangeSetCommand, - DescribeChangeSetCommand, - waitUntilChangeSetCreateComplete, -} from '@aws-sdk/client-cloudformation'; +import { Parameter } from '@aws-sdk/client-cloudformation'; import { AmplifyError } from '@aws-amplify/amplify-cli-core'; import { CFNResource, CFNTemplate } from '../../cfn-template'; -import { Refactorer } from '../refactorer'; +import { Planner } from '../../planner'; import { AmplifyMigrationOperation } from '../../_operation'; import { AwsClients } from '../../aws-clients'; import { StackFacade } from '../stack-facade'; -import { tryUpdateStack } from '../cfn-stack-updater'; -import { tryRefactorStack } from '../cfn-stack-refactor-updater'; +import { Cfn } from '../cfn'; import { SpinningLogger } from '../../_spinning-logger'; import { extractStackNameFromId } from '../utils'; import { DiscoveredResource } from '../../generate/_infra/gen1-app'; -import { formatChangeSetReport } from '../changeset-report'; import CLITable from 'cli-table3'; export const MIGRATION_PLACEHOLDER_LOGICAL_ID = 'MigrationPlaceholder'; export const PLACEHOLDER_RESOURCE: CFNResource = { Type: 'AWS::CloudFormation::WaitConditionHandle', Properties: {} }; +export const HOLDING_STACK_SUFFIX = '-holding'; +const MAX_STACK_NAME_LENGTH = 128; /** * Pre-computed data from resolving a stack's template. @@ -82,7 +76,7 @@ export interface RefactorBlueprint { * Shared workflow methods (updateSource, updateTarget, buildBlueprint, buildMoveOperations) * are concrete on this base class. */ -export abstract class CategoryRefactorer implements Refactorer { +export abstract class CategoryRefactorer implements Planner { constructor( protected readonly gen1Env: StackFacade, protected readonly gen2Branch: StackFacade, @@ -91,7 +85,11 @@ export abstract class CategoryRefactorer implements Refactorer { protected readonly accountId: string, protected readonly logger: SpinningLogger, protected readonly resource: DiscoveredResource, - ) {} + ) { + this.cfn = new Cfn(clients.cloudFormation); + } + + protected readonly cfn: Cfn; /** * Computes the full operation plan for this category. @@ -189,8 +187,7 @@ export abstract class CategoryRefactorer implements Refactorer { describe: async () => [description], execute: async () => { this.logger.info(header); - await tryUpdateStack({ - cfnClient: this.clients.cloudFormation, + await this.cfn.update({ stackName: source.stackId, parameters: source.parameters, templateBody: source.resolvedTemplate, @@ -219,8 +216,7 @@ export abstract class CategoryRefactorer implements Refactorer { describe: async () => [description], execute: async () => { this.logger.info(header); - await tryUpdateStack({ - cfnClient: this.clients.cloudFormation, + await this.cfn.update({ stackName: target.stackId, parameters: target.parameters, templateBody: target.resolvedTemplate, @@ -234,40 +230,16 @@ export abstract class CategoryRefactorer implements Refactorer { * Creates a changeset for the given stack and returns a formatted report. */ private async createChangeSetReport(stack: ResolvedStack): Promise { - const changeSetName = `migration-preview-${Date.now()}`; - const stackName = stack.stackId; - - this.logger.push(extractStackNameFromId(stackName)); - await this.clients.cloudFormation.send( - new CreateChangeSetCommand({ - StackName: stackName, - ChangeSetName: changeSetName, - TemplateBody: JSON.stringify(stack.resolvedTemplate), - Parameters: stack.parameters, - Capabilities: ['CAPABILITY_NAMED_IAM'], - }), - ); - + const stackName = extractStackNameFromId(stack.stackId); + this.logger.push(stackName); try { - try { - await waitUntilChangeSetCreateComplete( - { client: this.clients.cloudFormation, maxWaitTime: 120 }, - { StackName: stackName, ChangeSetName: changeSetName }, - ); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } catch (e: any) { - if (e.message?.includes(`The submitted information didn't contain changes`)) { - return undefined; - } - throw e; - } - - const changeSet = await this.clients.cloudFormation.send( - new DescribeChangeSetCommand({ StackName: stackName, ChangeSetName: changeSetName, IncludePropertyValues: true }), - ); - return formatChangeSetReport(changeSet); + const changeSet = await this.cfn.createChangeSet({ + stackName: stack.stackId, + parameters: stack.parameters, + templateBody: stack.resolvedTemplate, + }); + return changeSet ? this.cfn.renderChangeSet(changeSet) : undefined; } finally { - await this.clients.cloudFormation.send(new DeleteChangeSetCommand({ StackName: stackName, ChangeSetName: changeSetName })); this.logger.pop(); } } @@ -367,7 +339,7 @@ export abstract class CategoryRefactorer implements Refactorer { return [`${header}\n\n${table}`]; }, execute: async () => { - await tryRefactorStack(this.clients.cloudFormation, { + await this.cfn.refactor({ StackDefinitions: [ { TemplateBody: JSON.stringify(source.afterRemoval), StackName: source.stackId }, { TemplateBody: JSON.stringify(target.afterAddition), StackName: target.stackId }, @@ -395,6 +367,19 @@ export abstract class CategoryRefactorer implements Refactorer { return stacks.find((s) => s.LogicalResourceId?.startsWith(prefix))?.PhysicalResourceId; } + /** + * Derives the holding stack name from a Gen2 category stack name. + * Preserves the CloudFormation hash suffix for uniqueness. + */ + protected getHoldingStackName(gen2CategoryStackId: string): string { + const lastDashIndex = gen2CategoryStackId.lastIndexOf('-'); + const prefix = gen2CategoryStackId.substring(0, lastDashIndex); + const hashSuffix = gen2CategoryStackId.substring(lastDashIndex); + const tail = `${hashSuffix}${HOLDING_STACK_SUFFIX}`; + const maxPrefixLength = MAX_STACK_NAME_LENGTH - tail.length; + return `${prefix.substring(0, maxPrefixLength)}${tail}`; + } + /** Renders a CLI table of move mappings. */ protected renderMappingTable(mappings: readonly MoveMapping[]): string { const table = new CLITable({ diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index 9371fdeb54a..80e26dbfb80 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -7,8 +7,6 @@ import { resolveOutputs } from '../resolvers/cfn-output-resolver'; import { resolveDependencies } from '../resolvers/cfn-dependency-resolver'; import { resolveConditions } from '../resolvers/cfn-condition-resolver'; import { extractStackNameFromId } from '../utils'; -import { getHoldingStackName, findHoldingStack, deleteHoldingStack } from '../holding-stack'; -import { tryRefactorStack } from '../cfn-stack-refactor-updater'; import { CategoryRefactorer, MoveMapping, RefactorBlueprint, ResolvedStack, ResourceMapping } from './category-refactorer'; /** @@ -126,11 +124,11 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { holdingResources[logicalId] = blueprint.target.resolvedTemplate.Resources[logicalId]; } - const holdingStackName = getHoldingStackName(extractStackNameFromId(blueprint.target.stackId)); + const holdingStackName = this.getHoldingStackName(extractStackNameFromId(blueprint.target.stackId)); // in auth, there are two gen1 stacks (cognito, groups) that map to the same gen2 stack. // each of them gets its own refactorer so the same holding stack is used twice in sequence. - const existing = await findHoldingStack(this.clients.cloudFormation, holdingStackName); + const existing = await this.cfn.findStack(holdingStackName); if (existing && existing.StackStatus !== 'REVIEW_IN_PROGRESS') { const getTemplateResponse = await this.clients.cloudFormation.send( new GetTemplateCommand({ @@ -186,11 +184,11 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { execute: async () => { if (existing?.StackStatus === 'REVIEW_IN_PROGRESS') { this.logger.info(`Deleting existing holding stack: ${holdingStackName}`); - await deleteHoldingStack(this.clients.cloudFormation, holdingStackName); + await this.cfn.deleteStack(holdingStackName); } this.logger.info(header); - await tryRefactorStack(this.clients.cloudFormation, { + await this.cfn.refactor({ StackDefinitions: [ { TemplateBody: JSON.stringify(postTargetTemplate), StackName: blueprint.target.stackId }, { TemplateBody: JSON.stringify(holdingTemplate), StackName: holdingStackName }, diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index eb0023c4e3d..2c8ed9305f7 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -6,9 +6,6 @@ import { resolveParameters } from '../resolvers/cfn-parameter-resolver'; import { resolveOutputs } from '../resolvers/cfn-output-resolver'; import { resolveDependencies } from '../resolvers/cfn-dependency-resolver'; import { extractStackNameFromId } from '../utils'; -import { getHoldingStackName, findHoldingStack, deleteHoldingStack } from '../holding-stack'; -import { tryUpdateStack } from '../cfn-stack-updater'; -import { tryRefactorStack } from '../cfn-stack-refactor-updater'; import { CategoryRefactorer, MIGRATION_PLACEHOLDER_LOGICAL_ID, @@ -112,9 +109,9 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { */ protected async afterMovePlan(blueprint: RefactorBlueprint): Promise { const gen2StackId = blueprint.source.stackId; - const holdingStackName = getHoldingStackName(extractStackNameFromId(gen2StackId)); + const holdingStackName = this.getHoldingStackName(extractStackNameFromId(gen2StackId)); - const holdingStack = await findHoldingStack(this.clients.cloudFormation, holdingStackName); + const holdingStack = await this.cfn.findStack(holdingStackName); if (!holdingStack) return []; const holdingTemplateResponse = await this.clients.cloudFormation.send( @@ -170,14 +167,13 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { validate: () => undefined, describe: async () => [description], execute: async () => { - await tryUpdateStack({ - cfnClient: this.clients.cloudFormation, + await this.cfn.update({ stackName: holdingStackName, parameters: [], templateBody: holdingWithPlaceholder, }); - await tryRefactorStack(this.clients.cloudFormation, { + await this.cfn.refactor({ StackDefinitions: [ { TemplateBody: JSON.stringify(holdingAfterRestore), StackName: holdingStackName }, { TemplateBody: JSON.stringify(targetTemplate), StackName: gen2StackId }, From e1a83f6195e6a1fc5deb756108d57d37cbbc556c Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sat, 21 Mar 2026 23:14:52 -0400 Subject: [PATCH 23/70] refactor(cli-internal): add SpinningLogger to Cfn class Cfn now accepts a SpinningLogger and logs info messages before every wait operation (stack update, refactor create/execute, source/destination verification, stack deletion). --- Prompt: the cfn class should accept the spinning logger and log info whenever it is waiting on something. --- .../src/commands/gen2-migration/decommission.ts | 2 +- .../src/commands/gen2-migration/refactor/cfn.ts | 10 +++++++++- .../refactor/workflow/category-refactorer.ts | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/decommission.ts b/packages/amplify-cli/src/commands/gen2-migration/decommission.ts index ae41c67c62a..01e83af3a07 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/decommission.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/decommission.ts @@ -20,7 +20,7 @@ import { HOLDING_STACK_SUFFIX } from './refactor/workflow/category-refactorer'; export class AmplifyMigrationDecommissionStep extends AmplifyMigrationStep { public async forward(): Promise { const cfnClient = new CloudFormationClient({ region: this.region }); - const cfn = new Cfn(cfnClient); + const cfn = new Cfn(cfnClient, this.logger); const holdingStacks = await this.findHoldingStacks(cfnClient); const operations: AmplifyMigrationOperation[] = []; diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts index 77e0c2ca4a4..0ccd3f55c8d 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts @@ -24,6 +24,7 @@ import { import { AmplifyError } from '@aws-amplify/amplify-cli-core'; import { CFNTemplate } from '../cfn-template'; import { extractStackNameFromId } from './utils'; +import { SpinningLogger } from '../_spinning-logger'; import chalk from 'chalk'; import * as fs from 'fs'; import * as path from 'path'; @@ -38,7 +39,7 @@ export const OUTPUT_DIRECTORY = '.amplify/refactor.operations'; * Wraps update, refactor, and change set APIs behind a single client instance. */ export class Cfn { - constructor(private readonly client: CloudFormationClient) { + constructor(private readonly client: CloudFormationClient, private readonly logger: SpinningLogger) { if (!fs.existsSync(OUTPUT_DIRECTORY)) { fs.mkdirSync(OUTPUT_DIRECTORY, { recursive: true }); } @@ -70,6 +71,7 @@ export class Cfn { } throw e; } + this.logger.info(`Waiting for stack update to complete: ${extractStackNameFromId(stackName)}`); await waitUntilStackUpdateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: stackName }); } @@ -88,10 +90,12 @@ export class Cfn { }); } + this.logger.info(`Waiting for refactor create to complete: ${StackRefactorId}`); await waitUntilStackRefactorCreateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackRefactorId }); await this.client.send(new ExecuteStackRefactorCommand({ StackRefactorId })); + this.logger.info(`Waiting for refactor execute to complete: ${StackRefactorId}`); await waitUntilStackRefactorExecuteComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackRefactorId }); // Verify both stacks reached their final state @@ -103,9 +107,11 @@ export class Cfn { }); } + this.logger.info(`Waiting for source stack update: ${extractStackNameFromId(sourceStackName)}`); await waitUntilStackUpdateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: sourceStackName }); // Destination may be newly created (EnableStackCreation) or updated + this.logger.info(`Waiting for destination stack: ${extractStackNameFromId(destStackName)}`); try { await waitUntilStackUpdateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: destStackName }); } catch { @@ -187,7 +193,9 @@ export class Cfn { */ public async deleteStack(stackName: string): Promise { try { + this.logger.info(`Deleting stack: ${extractStackNameFromId(stackName)}`); await this.client.send(new DeleteStackCommand({ StackName: stackName })); + this.logger.info(`Waiting for stack deletion: ${extractStackNameFromId(stackName)}`); await waitUntilStackDeleteComplete({ client: this.client, maxWaitTime: 300 }, { StackName: stackName }); } catch (error: unknown) { if ( diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index b7e84e4a84b..5aec24c6d53 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -86,7 +86,7 @@ export abstract class CategoryRefactorer implements Planner { protected readonly logger: SpinningLogger, protected readonly resource: DiscoveredResource, ) { - this.cfn = new Cfn(clients.cloudFormation); + this.cfn = new Cfn(clients.cloudFormation, logger); } protected readonly cfn: Cfn; From 7d4374e53fd6c06eef57f64ebecaf49b98d0c24d Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sun, 22 Mar 2026 00:05:39 -0400 Subject: [PATCH 24/70] refactor(cli-internal): clean up refactorer operations Split rollback holding stack update into its own operation with a validation that the changeset only adds the placeholder. Split forward holding stack deletion into a separate operation. Remove redundant fetchStackResources calls by deriving physical IDs from blueprint mappings. Move description/header construction into describe callbacks and ResourceMapping construction into execute callbacks. Add Cfn.fetchTemplate method. Remove unused imports. --- Prompt: split holding stack operations, add validation, remove redundant fetches, move descriptions into describe callbacks, add Cfn.fetchTemplate. --- .../commands/gen2-migration/refactor/cfn.ts | 15 +++ .../refactor/workflow/category-refactorer.ts | 28 +++--- .../workflow/forward-category-refactorer.ts | 91 +++++++++---------- .../workflow/rollback-category-refactorer.ts | 87 +++++++++++------- 4 files changed, 128 insertions(+), 93 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts index 0ccd3f55c8d..54e81e9b472 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts @@ -10,6 +10,7 @@ import { DescribeChangeSetOutput, DescribeStacksCommand, ExecuteStackRefactorCommand, + GetTemplateCommand, Parameter, Stack, UpdateStackCommand, @@ -187,6 +188,20 @@ export class Cfn { } } + /** + * Fetches and parses the original template for a stack. + * Throws if the stack returns an empty template. + */ + public async fetchTemplate(stackName: string): Promise { + const response = await this.client.send(new GetTemplateCommand({ StackName: stackName, TemplateStage: 'Original' })); + if (!response.TemplateBody) { + throw new AmplifyError('InvalidStackError', { + message: `Stack '${extractStackNameFromId(stackName)}' returned an empty template`, + }); + } + return JSON.parse(response.TemplateBody) as CFNTemplate; + } + /** * Deletes a stack and waits for deletion to complete. * No-ops if the stack does not exist. diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index 5aec24c6d53..5c46a4b1c2d 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -122,9 +122,9 @@ export abstract class CategoryRefactorer implements Planner { const updateSourceOps = await this.updateSource(blueprint.source); const updateTargetOps = await this.updateTarget(blueprint.target); - const beforeMoveOps = await this.beforeMovePlan(blueprint); - const moveOps = await this.buildMoveOperations(blueprint); - const afterMoveOps = await this.afterMovePlan(blueprint); + const beforeMoveOps = await this.beforeMove(blueprint); + const moveOps = await this.move(blueprint); + const afterMoveOps = await this.afterMove(blueprint); const operations = [...updateSourceOps, ...updateTargetOps, ...beforeMoveOps, ...moveOps, ...afterMoveOps]; this.logger.pop(); @@ -157,14 +157,14 @@ export abstract class CategoryRefactorer implements Planner { * Forward: moves Gen2 resources to holding stack. * Rollback: no-op. */ - protected abstract beforeMovePlan(blueprint: RefactorBlueprint): Promise | AmplifyMigrationOperation[]; + protected abstract beforeMove(blueprint: RefactorBlueprint): Promise | AmplifyMigrationOperation[]; /** * Post-move operations. * Forward: empty. * Rollback: restores holding stack resources into Gen2, deletes holding stack. */ - protected abstract afterMovePlan(blueprint: RefactorBlueprint): Promise; + protected abstract afterMove(blueprint: RefactorBlueprint): Promise; // -- Shared workflow (concrete) -- @@ -174,9 +174,7 @@ export abstract class CategoryRefactorer implements Planner { */ protected async updateSource(source: ResolvedStack): Promise { const sourceStackName = extractStackNameFromId(source.stackId); - const header = `Update source stack '${sourceStackName}' with resolved references`; const report = await this.createChangeSetReport(source); - const description = report ? `${header}\n\n${report.trimStart()}` : `${header} (empty change-set)`; return [ { resource: this.resource, @@ -184,9 +182,11 @@ export abstract class CategoryRefactorer implements Planner { description: `Ensure no unexpected changes to ${sourceStackName}`, run: async () => ({ valid: report === undefined, report }), }), - describe: async () => [description], + describe: async () => { + const header = `Update source stack '${sourceStackName}' with resolved references`; + return [report ? `${header}\n\n${report.trimStart()}` : `${header} (empty change-set)`]; + }, execute: async () => { - this.logger.info(header); await this.cfn.update({ stackName: source.stackId, parameters: source.parameters, @@ -203,9 +203,7 @@ export abstract class CategoryRefactorer implements Planner { */ protected async updateTarget(target: ResolvedStack): Promise { const targetStackName = extractStackNameFromId(target.stackId); - const header = `Update target stack '${targetStackName}' with resolved references`; const report = await this.createChangeSetReport(target); - const description = report ? `${header}\n\n${report.trimStart()}` : `${header} (empty change-set)`; return [ { resource: this.resource, @@ -213,9 +211,11 @@ export abstract class CategoryRefactorer implements Planner { description: `Ensure no unexpected changes to ${targetStackName}`, run: async () => ({ valid: report === undefined, report }), }), - describe: async () => [description], + describe: async () => { + const header = `Update target stack '${targetStackName}' with resolved references`; + return [report ? `${header}\n\n${report.trimStart()}` : `${header} (empty change-set)`]; + }, execute: async () => { - this.logger.info(header); await this.cfn.update({ stackName: target.stackId, parameters: target.parameters, @@ -316,7 +316,7 @@ export abstract class CategoryRefactorer implements Planner { /** * Creates the move operation that executes the CloudFormation stack refactor. */ - protected async buildMoveOperations(blueprint: RefactorBlueprint): Promise { + protected async move(blueprint: RefactorBlueprint): Promise { const { source, target, mappings } = blueprint; const sourceStackName = extractStackNameFromId(source.stackId); const targetStackName = extractStackNameFromId(target.stackId); diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index 80e26dbfb80..56219916b5e 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -1,4 +1,4 @@ -import { GetTemplateCommand, Output, Parameter } from '@aws-sdk/client-cloudformation'; +import { Output, Parameter } from '@aws-sdk/client-cloudformation'; import { AmplifyError } from '@aws-amplify/amplify-cli-core'; import { CFNResource, CFNTemplate } from '../../cfn-template'; import { AmplifyMigrationOperation } from '../../_operation'; @@ -116,7 +116,7 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { /** * Moves Gen2 resources to a holding stack before the main refactor. */ - protected async beforeMovePlan(blueprint: RefactorBlueprint): Promise { + protected async beforeMove(blueprint: RefactorBlueprint): Promise { // holding stack gets all mapping targets const targets = blueprint.mappings.map((m) => m.targetId); const holdingResources: Record = {}; @@ -130,12 +130,7 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { // each of them gets its own refactorer so the same holding stack is used twice in sequence. const existing = await this.cfn.findStack(holdingStackName); if (existing && existing.StackStatus !== 'REVIEW_IN_PROGRESS') { - const getTemplateResponse = await this.clients.cloudFormation.send( - new GetTemplateCommand({ - StackName: holdingStackName, - }), - ); - const existingTemplate = JSON.parse(getTemplateResponse.TemplateBody ?? '{}'); + const existingTemplate = await this.cfn.fetchTemplate(holdingStackName); for (const logicalId of Object.keys(existingTemplate.Resources ?? {})) { const existingResource = holdingResources[logicalId]; if (existingResource) { @@ -152,59 +147,63 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { Outputs: {}, }; - // Post-holding target = target.afterRemoval (already computed by buildBlueprint) - const postTargetTemplate = blueprint.target.afterRemoval; - - const holdingMappings: ResourceMapping[] = targets.map((id) => ({ - Source: { StackName: extractStackNameFromId(blueprint.target.stackId), LogicalResourceId: id }, - Destination: { StackName: extractStackNameFromId(holdingStackName), LogicalResourceId: id }, + const holdingMoveMappings: MoveMapping[] = blueprint.mappings.map((m) => ({ + sourceId: m.targetId, + targetId: m.targetId, + resource: m.resource, + physicalResourceId: m.physicalResourceId, })); - const gen2Resources = await this.gen2Branch.fetchStackResources(blueprint.target.stackId); - const physicalIds = new Map(gen2Resources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId!])); + const targetStackName = extractStackNameFromId(blueprint.target.stackId); - const holdingMoveMappings: MoveMapping[] = targets.map((id) => ({ - sourceId: id, - targetId: id, - resource: blueprint.target.resolvedTemplate.Resources[id], - physicalResourceId: physicalIds.get(id) ?? '', - })); + const header = `Move ${holdingMoveMappings.length} resource(s) from '${targetStackName}' to '${extractStackNameFromId( + holdingStackName, + )}'`; - const header = `Move ${holdingMappings.length} resource(s) from '${extractStackNameFromId( - blueprint.target.stackId, - )}' to '${extractStackNameFromId(holdingStackName)}'`; - const table = this.renderMappingTable(holdingMoveMappings); - const description = `${header}\n\n${table}`; + const operations: AmplifyMigrationOperation[] = []; - return [ - { + if (existing?.StackStatus === 'REVIEW_IN_PROGRESS') { + operations.push({ resource: this.resource, validate: () => undefined, - describe: async () => [description], + describe: async () => [`Delete stale holding stack '${extractStackNameFromId(holdingStackName)}'`], execute: async () => { - if (existing?.StackStatus === 'REVIEW_IN_PROGRESS') { - this.logger.info(`Deleting existing holding stack: ${holdingStackName}`); - await this.cfn.deleteStack(holdingStackName); - } - - this.logger.info(header); - await this.cfn.refactor({ - StackDefinitions: [ - { TemplateBody: JSON.stringify(postTargetTemplate), StackName: blueprint.target.stackId }, - { TemplateBody: JSON.stringify(holdingTemplate), StackName: holdingStackName }, - ], - ResourceMappings: holdingMappings, - EnableStackCreation: true, - }); + await this.cfn.deleteStack(holdingStackName); }, + }); + } + + operations.push({ + resource: this.resource, + validate: () => undefined, + describe: async () => { + const table = this.renderMappingTable(holdingMoveMappings); + return [`${header}\n\n${table}`]; }, - ]; + execute: async () => { + this.logger.info(header); + const resourceMappings: ResourceMapping[] = holdingMoveMappings.map(({ sourceId, targetId }) => ({ + Source: { StackName: targetStackName, LogicalResourceId: sourceId }, + Destination: { StackName: extractStackNameFromId(holdingStackName), LogicalResourceId: targetId }, + })); + await this.cfn.refactor({ + StackDefinitions: [ + { TemplateBody: JSON.stringify(blueprint.target.afterRemoval), StackName: blueprint.target.stackId }, + { TemplateBody: JSON.stringify(holdingTemplate), StackName: holdingStackName }, + ], + ResourceMappings: resourceMappings, + EnableStackCreation: true, + }); + }, + }); + + return operations; } /** * Forward: no post-move operations. Holding stack survives for rollback. */ - protected async afterMovePlan(): Promise { + protected async afterMove(): Promise { return []; } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index 2c8ed9305f7..cc440561c8d 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -1,4 +1,4 @@ -import { GetTemplateCommand } from '@aws-sdk/client-cloudformation'; +import { DescribeChangeSetOutput } from '@aws-sdk/client-cloudformation'; import { AmplifyError } from '@aws-amplify/amplify-cli-core'; import { CFNResource, CFNTemplate } from '../../cfn-template'; import { AmplifyMigrationOperation } from '../../_operation'; @@ -13,7 +13,6 @@ import { MoveMapping, RefactorBlueprint, ResolvedStack, - ResourceMapping, } from './category-refactorer'; /** @@ -100,55 +99,33 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { /** * Rollback: no pre-move operations. */ - protected beforeMovePlan(_blueprint: RefactorBlueprint): AmplifyMigrationOperation[] { + protected beforeMove(_blueprint: RefactorBlueprint): AmplifyMigrationOperation[] { return []; } /** * Restores holding stack resources into Gen2 and deletes the holding stack. */ - protected async afterMovePlan(blueprint: RefactorBlueprint): Promise { + protected async afterMove(blueprint: RefactorBlueprint): Promise { const gen2StackId = blueprint.source.stackId; const holdingStackName = this.getHoldingStackName(extractStackNameFromId(gen2StackId)); const holdingStack = await this.cfn.findStack(holdingStackName); if (!holdingStack) return []; - const holdingTemplateResponse = await this.clients.cloudFormation.send( - new GetTemplateCommand({ StackName: holdingStackName, TemplateStage: 'Original' }), - ); - if (!holdingTemplateResponse.TemplateBody) { - throw new AmplifyError('InvalidStackError', { - message: `Holding stack '${holdingStackName}' returned an empty template`, - }); - } + const holdingTemplate = await this.cfn.fetchTemplate(holdingStackName); if (blueprint.mappings.length === 0) { return []; } - const restoreMappings: ResourceMapping[] = blueprint.mappings.map((m) => ({ - Source: { StackName: extractStackNameFromId(holdingStackName), LogicalResourceId: m.sourceId }, - Destination: { StackName: extractStackNameFromId(gen2StackId), LogicalResourceId: m.sourceId }, - })); - - const sourceResources = await this.gen2Branch.fetchStackResources(blueprint.source.stackId); - const physicalIds = new Map(sourceResources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId!])); - - const restoreMoveMappings: MoveMapping[] = blueprint.mappings.map((m) => ({ + const mappings = blueprint.mappings.map((m) => ({ sourceId: m.sourceId, targetId: m.sourceId, resource: m.resource, - physicalResourceId: physicalIds.get(m.sourceId) ?? '', + physicalResourceId: m.physicalResourceId, })); - const header = `Move ${blueprint.mappings.length} resource(s) from '${extractStackNameFromId( - holdingStackName, - )}' to '${extractStackNameFromId(gen2StackId)}'`; - const table = this.renderMappingTable(restoreMoveMappings); - const description = `${header}\n\n${table}`; - - const holdingTemplate = JSON.parse(holdingTemplateResponse.TemplateBody) as CFNTemplate; const holdingWithPlaceholder = { ...holdingTemplate, Resources: { ...holdingTemplate.Resources, [MIGRATION_PLACEHOLDER_LOGICAL_ID]: PLACEHOLDER_RESOURCE }, @@ -161,27 +138,71 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { delete holdingAfterRestore.Resources[mapping.sourceId]; } + // Pre-compute the changeset report for the holding stack update + const holdingChangeSet = await this.cfn.createChangeSet({ + stackName: holdingStackName, + parameters: [], + templateBody: holdingWithPlaceholder, + }); + const holdingReport = holdingChangeSet ? this.cfn.renderChangeSet(holdingChangeSet) : undefined; + return [ { resource: this.resource, - validate: () => undefined, - describe: async () => [description], + validate: () => ({ + description: `Ensure holding stack update only adds placeholder`, + run: async () => ({ valid: this.isPlaceholderOnlyChangeSet(holdingChangeSet), report: holdingReport }), + }), + describe: async () => { + const header = `Update holding stack '${extractStackNameFromId(holdingStackName)}' with placeholder resource`; + const desc = holdingReport ? `${header}\n\n${holdingReport.trimStart()}` : `${header} (empty change-set)`; + return [desc]; + }, execute: async () => { await this.cfn.update({ stackName: holdingStackName, parameters: [], templateBody: holdingWithPlaceholder, }); - + }, + }, + { + resource: this.resource, + validate: () => undefined, + describe: async () => { + const header = `Move ${blueprint.mappings.length} resource(s) from '${extractStackNameFromId( + holdingStackName, + )}' to '${extractStackNameFromId(gen2StackId)}'`; + const table = this.renderMappingTable(mappings); + return [`${header}\n\n${table}`]; + }, + execute: async () => { + const resourceMappings = mappings.map(({ sourceId, targetId }) => ({ + Source: { StackName: extractStackNameFromId(holdingStackName), LogicalResourceId: sourceId }, + Destination: { StackName: extractStackNameFromId(gen2StackId), LogicalResourceId: targetId }, + })); await this.cfn.refactor({ StackDefinitions: [ { TemplateBody: JSON.stringify(holdingAfterRestore), StackName: holdingStackName }, { TemplateBody: JSON.stringify(targetTemplate), StackName: gen2StackId }, ], - ResourceMappings: restoreMappings, + ResourceMappings: resourceMappings, }); }, }, ]; } + + /** + * Returns true if the changeset is empty or only adds the migration placeholder. + */ + private isPlaceholderOnlyChangeSet(changeSet: DescribeChangeSetOutput | undefined): boolean { + if (!changeSet) return true; + const changes = changeSet.Changes ?? []; + if (changes.length === 0) return true; + return changes.every((c) => { + const rc = c.ResourceChange; + return rc?.Action === 'Add' && rc?.LogicalResourceId === MIGRATION_PLACEHOLDER_LOGICAL_ID; + }); + } } From 5fd4d213387c2e301d014fa563a0891393539247 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sun, 22 Mar 2026 12:27:22 -0400 Subject: [PATCH 25/70] refactor(cli-internal): harden refactor workflow for multi-stack moves Add stack-level deduplication to prevent duplicate updates when multiple refactorers target the same stack. Thread targetStackId through buildResourceMappings for better error messages. Rework forward beforeMove to incrementally build holding stack templates by fetching existing state. In rollback, defer template computation into the execute closure and add duplicate-resource detection. Remove non-null assertions on StackResource fields. --- Prompt: commit everything I did. don't run tests. --- .../gen2-migration/refactor/stack-facade.ts | 11 ++ .../refactor/workflow/category-refactorer.ts | 3 +- .../workflow/forward-category-refactorer.ts | 113 ++++++++++-------- .../workflow/rollback-category-refactorer.ts | 43 ++++--- 4 files changed, 101 insertions(+), 69 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts index ab43113a716..eca08c8e3ef 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts @@ -8,6 +8,7 @@ import { import { AmplifyError } from '@aws-amplify/amplify-cli-core'; import { AwsClients } from '../aws-clients'; import { CFNTemplate } from '../cfn-template'; +import { ResolvedStack } from './workflow/category-refactorer'; /** * Lazy-loading, caching facade over a CloudFormation stack hierarchy. @@ -20,6 +21,8 @@ export class StackFacade { private readonly resourcesCache = new Map>(); private nestedStacksPromise: Promise | undefined; + private readonly updatedStacks = new Map(); + constructor(private readonly clients: AwsClients, public readonly rootStackName: string) {} /** @@ -72,6 +75,14 @@ export class StackFacade { }); } + public isUpdated(stack: ResolvedStack): boolean { + return this.updatedStacks.get(stack.stackId) === true; + } + + public markUpdated(stack: ResolvedStack) { + this.updatedStacks.set(stack.stackId, true); + } + private async cachedFetch(cache: Map>, key: string, fetcher: () => Promise): Promise { const existing = cache.get(key); if (existing !== undefined) return existing; diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index 5c46a4b1c2d..2a56aeeb0c0 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -145,6 +145,7 @@ export abstract class CategoryRefactorer implements Planner { sourceResources: Map, targetResources: Map, sourceStackId: string, + targetStackId: string, ): Promise; // -- Direction-specific (abstract) -- @@ -257,7 +258,7 @@ export abstract class CategoryRefactorer implements Planner { if (sourceResources.size === 0) return undefined; - const mappings = await this.buildResourceMappings(sourceResources, targetResources, source.stackId); + const mappings = await this.buildResourceMappings(sourceResources, targetResources, source.stackId, target.stackId); // source.afterRemoval: clone source template, remove mapped resources, add placeholder if empty const afterRemoval = JSON.parse(JSON.stringify(source.resolvedTemplate)) as CFNTemplate; diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index 56219916b5e..ee75dd4d3d5 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -1,4 +1,4 @@ -import { Output, Parameter } from '@aws-sdk/client-cloudformation'; +import { Output, Parameter, Stack } from '@aws-sdk/client-cloudformation'; import { AmplifyError } from '@aws-amplify/amplify-cli-core'; import { CFNResource, CFNTemplate } from '../../cfn-template'; import { AmplifyMigrationOperation } from '../../_operation'; @@ -22,9 +22,10 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { sourceResources: Map, targetResources: Map, sourceStackId: string, + targetStackId: string, ): Promise { const stackResources = await this.gen1Env.fetchStackResources(sourceStackId); - const physicalIds = new Map(stackResources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId!])); + const physicalIds = new Map(stackResources.map((r) => [r.LogicalResourceId, r.PhysicalResourceId])); const mappings: MoveMapping[] = []; for (const [sourceId, sourceResource] of sourceResources) { @@ -37,16 +38,20 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { } if (matchedTargets.length === 0) { throw new AmplifyError('InvalidStackError', { - message: `Source resource '${sourceId}' (${sourceResource.Type}) has no corresponding target resource`, + message: `Source resource '${sourceId}' (${ + sourceResource.Type + }) has no corresponding target resource in stack: ${extractStackNameFromId(targetStackId)}`, }); } if (matchedTargets.length > 1) { throw new AmplifyError('InvalidStackError', { - message: `Source resource '${sourceId}' (${sourceResource.Type}) has multiple corresponding target resources`, + message: `Source resource '${sourceId}' (${ + sourceResource.Type + }) has multiple corresponding target resources in stack: ${extractStackNameFromId(targetStackId)}`, }); } const targetId = matchedTargets[0]; - mappings.push({ sourceId, targetId, resource: sourceResource, physicalResourceId: physicalIds.get(sourceId) ?? '' }); + mappings.push({ sourceId, targetId, resource: sourceResource, physicalResourceId: physicalIds.get(sourceId) }); } return mappings; } @@ -113,56 +118,53 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { return { stackId, resolvedTemplate: resolved, parameters }; } - /** - * Moves Gen2 resources to a holding stack before the main refactor. - */ - protected async beforeMove(blueprint: RefactorBlueprint): Promise { - // holding stack gets all mapping targets - const targets = blueprint.mappings.map((m) => m.targetId); - const holdingResources: Record = {}; - for (const logicalId of targets) { - holdingResources[logicalId] = blueprint.target.resolvedTemplate.Resources[logicalId]; + protected override async updateSource(source: ResolvedStack): Promise { + if (this.gen1Env.isUpdated(source)) { + return []; } + const operations = super.updateSource(source); + this.gen1Env.markUpdated(source); + return operations; + } - const holdingStackName = this.getHoldingStackName(extractStackNameFromId(blueprint.target.stackId)); - - // in auth, there are two gen1 stacks (cognito, groups) that map to the same gen2 stack. - // each of them gets its own refactorer so the same holding stack is used twice in sequence. - const existing = await this.cfn.findStack(holdingStackName); - if (existing && existing.StackStatus !== 'REVIEW_IN_PROGRESS') { - const existingTemplate = await this.cfn.fetchTemplate(holdingStackName); - for (const logicalId of Object.keys(existingTemplate.Resources ?? {})) { - const existingResource = holdingResources[logicalId]; - if (existingResource) { - throw new AmplifyError('MigrationError', { message: 'WTF?' }); - } - holdingResources[logicalId] = existingTemplate.Resources[logicalId]; - } + protected override async updateTarget(target: ResolvedStack): Promise { + if (this.gen2Branch.isUpdated(target)) { + return []; } + const operations = super.updateTarget(target); + this.gen2Branch.markUpdated(target); + return operations; + } - const holdingTemplate: CFNTemplate = { - AWSTemplateFormatVersion: '2010-09-09', - Description: 'Temporary holding stack for Gen2 migration', - Resources: holdingResources, - Outputs: {}, - }; + /** + * Moves Gen2 resources to a holding stack before the main refactor. + */ + protected async beforeMove(blueprint: RefactorBlueprint): Promise { + const gen2StackName = extractStackNameFromId(blueprint.target.stackId); + const gen2StackTemplate = JSON.parse(JSON.stringify(blueprint.target.resolvedTemplate)) as CFNTemplate; + const holdingStackName = this.getHoldingStackName(gen2StackName); + const { stack: holdingStack, template: holdingStackTemplate } = await this.fetchHoldingStackTemplate(holdingStackName); - const holdingMoveMappings: MoveMapping[] = blueprint.mappings.map((m) => ({ + const mappings = blueprint.mappings.map((m) => ({ sourceId: m.targetId, targetId: m.targetId, - resource: m.resource, + resource: gen2StackTemplate.Resources[m.targetId], physicalResourceId: m.physicalResourceId, })); - const targetStackName = extractStackNameFromId(blueprint.target.stackId); + const resourceMappings = mappings.map(({ sourceId, targetId }) => ({ + Source: { StackName: gen2StackName, LogicalResourceId: sourceId }, + Destination: { StackName: holdingStackName, LogicalResourceId: targetId }, + })); - const header = `Move ${holdingMoveMappings.length} resource(s) from '${targetStackName}' to '${extractStackNameFromId( - holdingStackName, - )}'`; + for (const mapping of mappings) { + holdingStackTemplate.Resources[mapping.targetId] = mapping.resource; + delete gen2StackTemplate.Resources[mapping.sourceId]; + } const operations: AmplifyMigrationOperation[] = []; - if (existing?.StackStatus === 'REVIEW_IN_PROGRESS') { + if (holdingStack?.StackStatus === 'REVIEW_IN_PROGRESS') { operations.push({ resource: this.resource, validate: () => undefined, @@ -177,19 +179,15 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { resource: this.resource, validate: () => undefined, describe: async () => { - const table = this.renderMappingTable(holdingMoveMappings); + const header = `Move ${mappings.length} resource(s) from '${gen2StackName}' to '${extractStackNameFromId(holdingStackName)}'`; + const table = this.renderMappingTable(mappings); return [`${header}\n\n${table}`]; }, execute: async () => { - this.logger.info(header); - const resourceMappings: ResourceMapping[] = holdingMoveMappings.map(({ sourceId, targetId }) => ({ - Source: { StackName: targetStackName, LogicalResourceId: sourceId }, - Destination: { StackName: extractStackNameFromId(holdingStackName), LogicalResourceId: targetId }, - })); await this.cfn.refactor({ StackDefinitions: [ - { TemplateBody: JSON.stringify(blueprint.target.afterRemoval), StackName: blueprint.target.stackId }, - { TemplateBody: JSON.stringify(holdingTemplate), StackName: holdingStackName }, + { TemplateBody: JSON.stringify(gen2StackTemplate), StackName: gen2StackName }, + { TemplateBody: JSON.stringify(holdingStackTemplate), StackName: holdingStackName }, ], ResourceMappings: resourceMappings, EnableStackCreation: true, @@ -213,4 +211,21 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { protected async resolveOAuthParameters(parameters: Parameter[], _outputs: Output[]): Promise { return parameters; } + + protected async fetchHoldingStackTemplate(holdingStackName: string): Promise<{ + readonly stack?: Stack; + readonly template: CFNTemplate; + }> { + const existing = await this.cfn.findStack(holdingStackName); + const template = + existing && existing.StackStatus !== 'REVIEW_IN_PROGRESS' + ? await this.cfn.fetchTemplate(holdingStackName) + : { + AWSTemplateFormatVersion: '2010-09-09', + Description: 'Temporary holding stack for Gen2 migration', + Resources: {}, + Outputs: {}, + }; + return { stack: existing, template }; + } } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index cc440561c8d..c8e672b13d4 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -28,18 +28,26 @@ import { export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { protected async buildResourceMappings( sourceResources: Map, - _targetResources: Map, + targetResources: Map, sourceStackId: string, + targetStackId: string, ): Promise { const stackResources = await this.gen2Branch.fetchStackResources(sourceStackId); - const physicalIds = new Map(stackResources.map((r) => [r.LogicalResourceId!, r.PhysicalResourceId!])); + const physicalIds = new Map(stackResources.map((r) => [r.LogicalResourceId, r.PhysicalResourceId])); const mappings: MoveMapping[] = []; for (const [sourceId, resource] of sourceResources) { const gen1LogicalId = this.targetLogicalId(sourceId, resource); if (!gen1LogicalId) { - throw new AmplifyError('InvalidStackError', { - message: `No known Gen1 logical ID for resource type '${resource.Type}' (source: '${sourceId}')`, + throw new AmplifyError('MigrationError', { + message: `Failed building mappings: Unable to determine target id of resource ${sourceId} (${resource.Type})`, + }); + } + if (targetResources.has(gen1LogicalId)) { + throw new AmplifyError('MigrationError', { + message: `Failed building mappings: Resource ${gen1LogicalId} (${ + resource.Type + }) already exists in target stack: ${extractStackNameFromId(targetStackId)}`, }); } mappings.push({ sourceId, targetId: gen1LogicalId, resource, physicalResourceId: physicalIds.get(sourceId) ?? '' }); @@ -88,11 +96,11 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { return { stackId, resolvedTemplate: originalTemplate, parameters }; } - protected override async updateSource(): Promise { + protected override async updateSource(_source: ResolvedStack): Promise { return []; } - protected override async updateTarget(): Promise { + protected override async updateTarget(_target: ResolvedStack): Promise { return []; } @@ -115,10 +123,6 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { const holdingTemplate = await this.cfn.fetchTemplate(holdingStackName); - if (blueprint.mappings.length === 0) { - return []; - } - const mappings = blueprint.mappings.map((m) => ({ sourceId: m.sourceId, targetId: m.sourceId, @@ -131,14 +135,6 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { Resources: { ...holdingTemplate.Resources, [MIGRATION_PLACEHOLDER_LOGICAL_ID]: PLACEHOLDER_RESOURCE }, }; - const targetTemplate = JSON.parse(JSON.stringify(blueprint.source.afterRemoval)) as CFNTemplate; - const holdingAfterRestore = JSON.parse(JSON.stringify(holdingWithPlaceholder)) as CFNTemplate; - for (const mapping of blueprint.mappings) { - targetTemplate.Resources[mapping.sourceId] = holdingWithPlaceholder.Resources[mapping.sourceId]; - delete holdingAfterRestore.Resources[mapping.sourceId]; - } - - // Pre-compute the changeset report for the holding stack update const holdingChangeSet = await this.cfn.createChangeSet({ stackName: holdingStackName, parameters: [], @@ -181,9 +177,18 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { Source: { StackName: extractStackNameFromId(holdingStackName), LogicalResourceId: sourceId }, Destination: { StackName: extractStackNameFromId(gen2StackId), LogicalResourceId: targetId }, })); + + const targetTemplate = JSON.parse(JSON.stringify(blueprint.source.afterRemoval)) as CFNTemplate; + const holdingAfterRemoval = JSON.parse(JSON.stringify(holdingWithPlaceholder)) as CFNTemplate; + for (const mapping of resourceMappings) { + targetTemplate.Resources[mapping.Destination.LogicalResourceId] = + holdingWithPlaceholder.Resources[mapping.Source.LogicalResourceId]; + delete holdingAfterRemoval.Resources[mapping.Source.LogicalResourceId]; + } + await this.cfn.refactor({ StackDefinitions: [ - { TemplateBody: JSON.stringify(holdingAfterRestore), StackName: holdingStackName }, + { TemplateBody: JSON.stringify(holdingAfterRemoval), StackName: holdingStackName }, { TemplateBody: JSON.stringify(targetTemplate), StackName: gen2StackId }, ], ResourceMappings: resourceMappings, From 8e9b42b79504b3565ac979acea4fc7273e40d0cd Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sun, 22 Mar 2026 15:58:10 -0400 Subject: [PATCH 26/70] refactor(cli-internal): improve refactor logging, remove caching, add noop handling Add resource-scoped log prefixes to Cfn operations so each category/resource pair is identifiable in output. Remove StackFacade caching layer so every call fetches fresh state from CloudFormation. Introduce buildNoopOperation and suppress the Implications section when all operations are no-ops. In rollback, skip resources that already exist in the target stack instead of throwing. Reduce max wait time from 3600s to 900s and pre-check destination stack existence to select the correct waiter. --- Prompt: commit everything I did. Don't run tests. just commit. --- .../src/commands/gen2-migration/_operation.ts | 15 +++++ .../src/commands/gen2-migration/_plan.ts | 9 ++- .../commands/gen2-migration/refactor/cfn.ts | 52 +++++++++------ .../gen2-migration/refactor/stack-facade.ts | 66 +++++-------------- .../refactor/workflow/category-refactorer.ts | 12 ++-- .../workflow/rollback-category-refactorer.ts | 17 +++-- 6 files changed, 87 insertions(+), 84 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/_operation.ts b/packages/amplify-cli/src/commands/gen2-migration/_operation.ts index 9f911f075b6..d01db4cbbd8 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/_operation.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/_operation.ts @@ -1,5 +1,20 @@ import { DiscoveredResource } from './generate/_infra/gen1-app'; +export const NO_OP_MESSAGE = 'No-op\n'; + +export function buildNoopOperation(resource: DiscoveredResource): AmplifyMigrationOperation { + return { + resource: resource, + validate: () => undefined, + execute: async () => { + return; + }, + describe: async () => { + return [NO_OP_MESSAGE]; + }, + }; +} + /** * Result of a validation check. */ diff --git a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts index 0d2ee87604f..b4cee760399 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/_plan.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/_plan.ts @@ -1,4 +1,4 @@ -import { AmplifyMigrationOperation } from './_operation'; +import { AmplifyMigrationOperation, NO_OP_MESSAGE } from './_operation'; import { SpinningLogger } from './_spinning-logger'; import { printer } from '@aws-amplify/amplify-prompts'; import chalk from 'chalk'; @@ -74,6 +74,8 @@ export class Plan { grouped.get(label)!.push(...lines); } + let hasRealImplications = false; + if (grouped.size > 0) { printer.info(chalk.bold(chalk.underline('Operations Summary'))); printer.blankLine(); @@ -84,12 +86,15 @@ export class Plan { let step = 1; for (const description of descriptions) { printer.info(`${step}. ${description}`); + if (description !== NO_OP_MESSAGE) { + hasRealImplications = true; + } step++; } } } - if (this.implications.length > 0) { + if (hasRealImplications && this.implications.length > 0) { printer.info(chalk.bold(chalk.underline('Implications'))); printer.blankLine(); for (const implication of this.implications) { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts index 54e81e9b472..6deffd9a231 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts @@ -29,8 +29,9 @@ import { SpinningLogger } from '../_spinning-logger'; import chalk from 'chalk'; import * as fs from 'fs'; import * as path from 'path'; +import { DiscoveredResource } from '../generate/_infra/gen1-app'; -const MAX_WAIT_TIME_SECONDS = 3600; +const MAX_WAIT_TIME_SECONDS = 900; const NO_UPDATES_MESSAGE = 'No updates are to be performed'; const CFN_IAM_CAPABILITY = 'CAPABILITY_NAMED_IAM'; export const OUTPUT_DIRECTORY = '.amplify/refactor.operations'; @@ -40,7 +41,11 @@ export const OUTPUT_DIRECTORY = '.amplify/refactor.operations'; * Wraps update, refactor, and change set APIs behind a single client instance. */ export class Cfn { - constructor(private readonly client: CloudFormationClient, private readonly logger: SpinningLogger) { + constructor( + private readonly client: CloudFormationClient, + private readonly logger: SpinningLogger, + private readonly resource?: DiscoveredResource, + ) { if (!fs.existsSync(OUTPUT_DIRECTORY)) { fs.mkdirSync(OUTPUT_DIRECTORY, { recursive: true }); } @@ -65,6 +70,7 @@ export class Cfn { Tags: [], }; writeUpdateSnapshot(input); + this.info(`Updating stack: ${extractStackNameFromId(stackName)}`); await this.client.send(new UpdateStackCommand(input)); } catch (e) { if (e && typeof e === 'object' && 'message' in e && typeof e.message === 'string' && e.message.includes(NO_UPDATES_MESSAGE)) { @@ -72,7 +78,7 @@ export class Cfn { } throw e; } - this.logger.info(`Waiting for stack update to complete: ${extractStackNameFromId(stackName)}`); + this.info(`Waiting for stack update to complete: ${extractStackNameFromId(stackName)}`); await waitUntilStackUpdateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: stackName }); } @@ -81,9 +87,18 @@ export class Cfn { * Throws on failure. */ public async refactor(input: CreateStackRefactorCommandInput): Promise { + const sourceStackName = input.StackDefinitions?.[0]?.StackName; + const destStackName = input.StackDefinitions?.[1]?.StackName; + if (!sourceStackName || !destStackName) { + throw new AmplifyError('InvalidStackError', { + message: 'Stack refactor input is missing source or destination stack name', + }); + } + input.Description = buildRefactorDescription(input); writeRefactorSnapshot(input); + this.info(`Creating stack refactor: ${extractStackNameFromId(sourceStackName)} → ${extractStackNameFromId(destStackName)}`); const { StackRefactorId } = await this.client.send(new CreateStackRefactorCommand(input)); if (!StackRefactorId) { throw new AmplifyError('StackStateError', { @@ -91,31 +106,24 @@ export class Cfn { }); } - this.logger.info(`Waiting for refactor create to complete: ${StackRefactorId}`); + const destinationStack = await this.findStack(destStackName); + + this.info(`Waiting for stack refactor creation to complete: ${StackRefactorId}`); await waitUntilStackRefactorCreateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackRefactorId }); await this.client.send(new ExecuteStackRefactorCommand({ StackRefactorId })); - this.logger.info(`Waiting for refactor execute to complete: ${StackRefactorId}`); + this.info(`Waiting for stack refactor execution to complete: ${StackRefactorId}`); await waitUntilStackRefactorExecuteComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackRefactorId }); - // Verify both stacks reached their final state - const sourceStackName = input.StackDefinitions?.[0]?.StackName; - const destStackName = input.StackDefinitions?.[1]?.StackName; - if (!sourceStackName || !destStackName) { - throw new AmplifyError('InvalidStackError', { - message: 'Stack refactor input is missing source or destination stack name', - }); - } - - this.logger.info(`Waiting for source stack update: ${extractStackNameFromId(sourceStackName)}`); + this.info(`Waiting for source stack update: ${extractStackNameFromId(sourceStackName)}`); await waitUntilStackUpdateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: sourceStackName }); // Destination may be newly created (EnableStackCreation) or updated - this.logger.info(`Waiting for destination stack: ${extractStackNameFromId(destStackName)}`); - try { + this.info(`Waiting for destination stack: ${extractStackNameFromId(destStackName)}`); + if (destinationStack) { await waitUntilStackUpdateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: destStackName }); - } catch { + } else { await waitUntilStackCreateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: destStackName }); } } @@ -208,9 +216,9 @@ export class Cfn { */ public async deleteStack(stackName: string): Promise { try { - this.logger.info(`Deleting stack: ${extractStackNameFromId(stackName)}`); + this.info(`Deleting stack: ${extractStackNameFromId(stackName)}`); await this.client.send(new DeleteStackCommand({ StackName: stackName })); - this.logger.info(`Waiting for stack deletion: ${extractStackNameFromId(stackName)}`); + this.info(`Waiting for stack deletion: ${extractStackNameFromId(stackName)}`); await waitUntilStackDeleteComplete({ client: this.client, maxWaitTime: 300 }, { StackName: stackName }); } catch (error: unknown) { if ( @@ -272,6 +280,10 @@ export class Cfn { return lines.join('\n'); } + + private info(message: string) { + this.logger.info(`${this.resource ? `[${this.resource.category}/${this.resource.resourceName}] ` : ''}${message}`); + } } function buildRefactorDescription(input: CreateStackRefactorCommandInput): string { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts index eca08c8e3ef..0fdc6ec2e9b 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts @@ -16,11 +16,6 @@ import { ResolvedStack } from './workflow/category-refactorer'; * Cache entries are evicted on rejection to allow retries. */ export class StackFacade { - private readonly templateCache = new Map>(); - private readonly stackCache = new Map>(); - private readonly resourcesCache = new Map>(); - private nestedStacksPromise: Promise | undefined; - private readonly updatedStacks = new Map(); constructor(private readonly clients: AwsClients, public readonly rootStackName: string) {} @@ -29,50 +24,39 @@ export class StackFacade { * Lists nested stacks under the root stack. Cached on first call. */ public async fetchNestedStacks(): Promise { - if (this.nestedStacksPromise === undefined) { - this.nestedStacksPromise = this.doFetchNestedStacks().catch((error) => { - this.nestedStacksPromise = undefined; - throw error; - }); - } - return this.nestedStacksPromise; + const response = await this.clients.cloudFormation.send(new DescribeStackResourcesCommand({ StackName: this.rootStackName })); + return (response.StackResources ?? []).filter((r) => r.ResourceType === 'AWS::CloudFormation::Stack'); } /** * Fetches and parses the CloudFormation template for a stack. Cached per stackId. */ public async fetchTemplate(stackId: string): Promise { - return this.cachedFetch(this.templateCache, stackId, async () => { - const response = await this.clients.cloudFormation.send(new GetTemplateCommand({ StackName: stackId, TemplateStage: 'Original' })); - if (!response.TemplateBody) { - throw new AmplifyError('InvalidStackError', { message: `Stack '${stackId}' returned an empty template` }); - } - return JSON.parse(response.TemplateBody) as CFNTemplate; - }); + const response = await this.clients.cloudFormation.send(new GetTemplateCommand({ StackName: stackId, TemplateStage: 'Original' })); + if (!response.TemplateBody) { + throw new AmplifyError('InvalidStackError', { message: `Stack '${stackId}' returned an empty template` }); + } + return JSON.parse(response.TemplateBody) as CFNTemplate; } /** * Describes a stack (parameters, outputs, status). Cached per stackId. */ public async fetchStack(stackId: string): Promise { - return this.cachedFetch(this.stackCache, stackId, async () => { - const response = await this.clients.cloudFormation.send(new DescribeStacksCommand({ StackName: stackId })); - const stack = response.Stacks?.[0]; - if (!stack) { - throw new AmplifyError('StackNotFoundError', { message: `Stack '${stackId}' not found` }); - } - return stack; - }); + const response = await this.clients.cloudFormation.send(new DescribeStacksCommand({ StackName: stackId })); + const stack = response.Stacks?.[0]; + if (!stack) { + throw new AmplifyError('StackNotFoundError', { message: `Stack '${stackId}' not found` }); + } + return stack; } /** * Lists resources in a stack. Cached per stackId. */ public async fetchStackResources(stackId: string): Promise { - return this.cachedFetch(this.resourcesCache, stackId, async () => { - const response = await this.clients.cloudFormation.send(new DescribeStackResourcesCommand({ StackName: stackId })); - return response.StackResources ?? []; - }); + const response = await this.clients.cloudFormation.send(new DescribeStackResourcesCommand({ StackName: stackId })); + return response.StackResources ?? []; } public isUpdated(stack: ResolvedStack): boolean { @@ -82,24 +66,4 @@ export class StackFacade { public markUpdated(stack: ResolvedStack) { this.updatedStacks.set(stack.stackId, true); } - - private async cachedFetch(cache: Map>, key: string, fetcher: () => Promise): Promise { - const existing = cache.get(key); - if (existing !== undefined) return existing; - - const promise = fetcher().catch((error) => { - cache.delete(key); - throw error; - }); - cache.set(key, promise); - return promise; - } - - // Uses DescribeStackResources (max 100 resources, no pagination) for test mock compatibility. - // Amplify projects are unlikely to exceed this limit. If pagination is needed in the future, - // switch to ListStackResources (paginated) and update the test mock accordingly. - private async doFetchNestedStacks(): Promise { - const response = await this.clients.cloudFormation.send(new DescribeStackResourcesCommand({ StackName: this.rootStackName })); - return (response.StackResources ?? []).filter((r) => r.ResourceType === 'AWS::CloudFormation::Stack'); - } } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index 2a56aeeb0c0..9552146b3e4 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -2,7 +2,7 @@ import { Parameter } from '@aws-sdk/client-cloudformation'; import { AmplifyError } from '@aws-amplify/amplify-cli-core'; import { CFNResource, CFNTemplate } from '../../cfn-template'; import { Planner } from '../../planner'; -import { AmplifyMigrationOperation } from '../../_operation'; +import { AmplifyMigrationOperation, buildNoopOperation } from '../../_operation'; import { AwsClients } from '../../aws-clients'; import { StackFacade } from '../stack-facade'; import { Cfn } from '../cfn'; @@ -86,7 +86,7 @@ export abstract class CategoryRefactorer implements Planner { protected readonly logger: SpinningLogger, protected readonly resource: DiscoveredResource, ) { - this.cfn = new Cfn(clients.cloudFormation, logger); + this.cfn = new Cfn(clients.cloudFormation, logger, resource); } protected readonly cfn: Cfn; @@ -117,7 +117,7 @@ export abstract class CategoryRefactorer implements Planner { const blueprint = await this.buildBlueprint(source, target); if (!blueprint) { this.logger.pop(); - return []; // Nothing to move — skip this category + return [buildNoopOperation(this.resource)]; } const updateSourceOps = await this.updateSource(blueprint.source); @@ -230,7 +230,7 @@ export abstract class CategoryRefactorer implements Planner { /** * Creates a changeset for the given stack and returns a formatted report. */ - private async createChangeSetReport(stack: ResolvedStack): Promise { + protected async createChangeSetReport(stack: ResolvedStack): Promise { const stackName = extractStackNameFromId(stack.stackId); this.logger.push(stackName); try { @@ -260,6 +260,10 @@ export abstract class CategoryRefactorer implements Planner { const mappings = await this.buildResourceMappings(sourceResources, targetResources, source.stackId, target.stackId); + if (mappings.length === 0) { + return undefined; + } + // source.afterRemoval: clone source template, remove mapped resources, add placeholder if empty const afterRemoval = JSON.parse(JSON.stringify(source.resolvedTemplate)) as CFNTemplate; for (const { sourceId } of mappings) { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index c8e672b13d4..74c78a8b5f8 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -44,11 +44,12 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { }); } if (targetResources.has(gen1LogicalId)) { - throw new AmplifyError('MigrationError', { - message: `Failed building mappings: Resource ${gen1LogicalId} (${ - resource.Type - }) already exists in target stack: ${extractStackNameFromId(targetStackId)}`, - }); + continue; + // throw new AmplifyError('MigrationError', { + // message: `Failed building mappings: Resource ${gen1LogicalId} (${ + // resource.Type + // }) already exists in target stack: ${extractStackNameFromId(targetStackId)}`, + // }); } mappings.push({ sourceId, targetId: gen1LogicalId, resource, physicalResourceId: physicalIds.get(sourceId) ?? '' }); } @@ -135,23 +136,25 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { Resources: { ...holdingTemplate.Resources, [MIGRATION_PLACEHOLDER_LOGICAL_ID]: PLACEHOLDER_RESOURCE }, }; + this.logger.push(extractStackNameFromId(holdingStackName)); const holdingChangeSet = await this.cfn.createChangeSet({ stackName: holdingStackName, parameters: [], templateBody: holdingWithPlaceholder, }); const holdingReport = holdingChangeSet ? this.cfn.renderChangeSet(holdingChangeSet) : undefined; + this.logger.pop(); return [ { resource: this.resource, validate: () => ({ - description: `Ensure holding stack update only adds placeholder`, + description: `Ensure holding stack ${extractStackNameFromId(holdingStackName)} update only adds placeholder`, run: async () => ({ valid: this.isPlaceholderOnlyChangeSet(holdingChangeSet), report: holdingReport }), }), describe: async () => { const header = `Update holding stack '${extractStackNameFromId(holdingStackName)}' with placeholder resource`; - const desc = holdingReport ? `${header}\n\n${holdingReport.trimStart()}` : `${header} (empty change-set)`; + const desc = holdingReport ? `${header}\n\n${holdingReport.trimStart()}\n` : `${header} (empty change-set)`; return [desc]; }, execute: async () => { From 45878ffa38ac5d9c1d89ad52900876cdb0839ff1 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sun, 22 Mar 2026 16:59:03 -0400 Subject: [PATCH 27/70] fix(cli-internal): defer template resolution to execution time in refactor workflow RefactorBlueprint now carries only mappings and stack IDs. Templates are fetched and resolved fresh inside each operation's execute() closure, so sequential refactorers targeting the same stack always see current state. This fixes the stale template bug where the second auth refactorer (user-pool-groups) would operate on a Gen2 template that the first refactorer (cognito) had already mutated. updateSource/updateTarget use plan-time resolved stacks directly (still fresh since they run before any moves). updateSource now accepts mappings to determine if a placeholder is needed. move(), beforeMove() (forward), and afterMove() (rollback) all re-fetch and re-resolve templates at execution time. --- Prompt: defer template resolution to execution time in refactor workflow to fix stale template bug when two Gen1 stacks map to the same Gen2 stack. --- .../refactor/workflow/category-refactorer.ts | 169 +++++++----------- .../workflow/forward-category-refactorer.ts | 69 ++++--- .../workflow/rollback-category-refactorer.ts | 19 +- 3 files changed, 120 insertions(+), 137 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index 9552146b3e4..475a3eb74c0 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -45,23 +45,12 @@ export interface MoveMapping { } /** - * Consolidated refactor data object. All templates and mappings are pre-computed - * together inside buildBlueprint(), ensuring source/target resources stay in sync. + * Mappings-only refactor plan. Templates are fetched fresh at execution time + * so that sequential refactorers targeting the same stack always see current state. */ export interface RefactorBlueprint { - readonly source: { - readonly stackId: string; - readonly parameters: Parameter[]; - readonly resolvedTemplate: CFNTemplate; - readonly afterRemoval: CFNTemplate; - }; - readonly target: { - readonly stackId: string; - readonly parameters: Parameter[]; - readonly resolvedTemplate: CFNTemplate; - readonly afterRemoval: CFNTemplate; - readonly afterAddition: CFNTemplate; - }; + readonly sourceStackId: string; + readonly targetStackId: string; readonly mappings: MoveMapping[]; } @@ -114,14 +103,16 @@ export abstract class CategoryRefactorer implements Planner { const source = await this.resolveSource(sourceStackId); const target = await this.resolveTarget(destStackId); - const blueprint = await this.buildBlueprint(source, target); - if (!blueprint) { + const mappings = await this.buildMappings(source, target); + if (mappings.length === 0) { this.logger.pop(); return [buildNoopOperation(this.resource)]; } - const updateSourceOps = await this.updateSource(blueprint.source); - const updateTargetOps = await this.updateTarget(blueprint.target); + const blueprint: RefactorBlueprint = { sourceStackId, targetStackId: destStackId, mappings }; + + const updateSourceOps = await this.updateSource(source, mappings); + const updateTargetOps = await this.updateTarget(target); const beforeMoveOps = await this.beforeMove(blueprint); const moveOps = await this.move(blueprint); const afterMoveOps = await this.afterMove(blueprint); @@ -171,11 +162,28 @@ export abstract class CategoryRefactorer implements Planner { /** * Creates operations to update the source stack with the resolved template. + * Adds a placeholder resource if removing the mapped resources would leave the stack empty. * Rollback overrides this to return []. */ - protected async updateSource(source: ResolvedStack): Promise { + protected async updateSource(source: ResolvedStack, mappings: MoveMapping[]): Promise { const sourceStackName = extractStackNameFromId(source.stackId); - const report = await this.createChangeSetReport(source); + + // Check if removing mapped resources would leave the stack empty + const remainingResources = { ...source.resolvedTemplate.Resources }; + for (const { sourceId } of mappings) { + delete remainingResources[sourceId]; + } + const needsPlaceholder = Object.keys(remainingResources).length === 0; + + const resolvedTemplate = needsPlaceholder + ? { + ...source.resolvedTemplate, + Resources: { ...source.resolvedTemplate.Resources, [MIGRATION_PLACEHOLDER_LOGICAL_ID]: PLACEHOLDER_RESOURCE }, + } + : source.resolvedTemplate; + + const resolvedStack: ResolvedStack = { ...source, resolvedTemplate: resolvedTemplate }; + const report = await this.createChangeSetReport(resolvedStack); return [ { resource: this.resource, @@ -191,7 +199,7 @@ export abstract class CategoryRefactorer implements Planner { await this.cfn.update({ stackName: source.stackId, parameters: source.parameters, - templateBody: source.resolvedTemplate, + templateBody: resolvedTemplate, }); }, }, @@ -246,89 +254,28 @@ export abstract class CategoryRefactorer implements Planner { } /** - * Builds a consolidated RefactorBlueprint from resolved source and target stacks. - * Returns undefined if there are no resources to move. - * - * This consolidates buildResourceMappings + template manipulation + placeholder logic - * into one function, ensuring resourcesToMove and logicalIdMap are always in sync. + * Builds resource mappings from resolved source and target stacks. + * Returns an empty array if there are no resources to move. */ - protected async buildBlueprint(source: ResolvedStack, target: ResolvedStack): Promise { + protected async buildMappings(source: ResolvedStack, target: ResolvedStack): Promise { const sourceResources = this.filterResourcesByType(source.resolvedTemplate); const targetResources = this.filterResourcesByType(target.resolvedTemplate); - if (sourceResources.size === 0) return undefined; - - const mappings = await this.buildResourceMappings(sourceResources, targetResources, source.stackId, target.stackId); - - if (mappings.length === 0) { - return undefined; - } - - // source.afterRemoval: clone source template, remove mapped resources, add placeholder if empty - const afterRemoval = JSON.parse(JSON.stringify(source.resolvedTemplate)) as CFNTemplate; - for (const { sourceId } of mappings) { - delete afterRemoval.Resources[sourceId]; - } - addPlaceholderIfEmpty(afterRemoval); - - // If afterRemoval needs a placeholder, the resolved template used by updateSource must - // also include it. The refactor API only moves existing resources — the placeholder must - // be created via UpdateStack first so it physically exists before the refactor. - const sourceResolved = afterRemoval.Resources[MIGRATION_PLACEHOLDER_LOGICAL_ID] - ? { - ...source.resolvedTemplate, - Resources: { ...source.resolvedTemplate.Resources, [MIGRATION_PLACEHOLDER_LOGICAL_ID]: PLACEHOLDER_RESOURCE }, - } - : source.resolvedTemplate; - - // target.afterRemoval: clone target template, remove target category resources, add placeholder if empty - const targetAfterRemoval = JSON.parse(JSON.stringify(target.resolvedTemplate)) as CFNTemplate; - for (const [id] of targetResources) { - delete targetAfterRemoval.Resources[id]; - } - addPlaceholderIfEmpty(targetAfterRemoval); - - // target.afterAddition: clone afterRemoval, add mapped resources with remapped DependsOn - const afterAddition = JSON.parse(JSON.stringify(targetAfterRemoval)) as CFNTemplate; - const idMap = new Map(mappings.map((m) => [m.sourceId, m.targetId])); - for (const { targetId, resource } of mappings) { - const cloned = JSON.parse(JSON.stringify(resource)) as CFNResource; - if (cloned.DependsOn) { - const deps = Array.isArray(cloned.DependsOn) ? cloned.DependsOn : [cloned.DependsOn]; - cloned.DependsOn = deps.map((d) => idMap.get(d) ?? d); - } - afterAddition.Resources[targetId] = cloned; - } + if (sourceResources.size === 0) return []; - return { - source: { - stackId: source.stackId, - parameters: source.parameters, - resolvedTemplate: sourceResolved, - afterRemoval, - }, - target: { - stackId: target.stackId, - parameters: target.parameters, - resolvedTemplate: target.resolvedTemplate, - afterRemoval: targetAfterRemoval, - afterAddition, - }, - mappings, - }; + return this.buildResourceMappings(sourceResources, targetResources, source.stackId, target.stackId); } /** * Creates the move operation that executes the CloudFormation stack refactor. + * Templates are fetched and resolved fresh at execution time. */ protected async move(blueprint: RefactorBlueprint): Promise { - const { source, target, mappings } = blueprint; - const sourceStackName = extractStackNameFromId(source.stackId); - const targetStackName = extractStackNameFromId(target.stackId); + const { sourceStackId, targetStackId, mappings } = blueprint; + const sourceStackName = extractStackNameFromId(sourceStackId); + const targetStackName = extractStackNameFromId(targetStackId); - const header = `Move ${blueprint.mappings.length} resource(s) from '${extractStackNameFromId( - sourceStackName, - )}' to '${extractStackNameFromId(targetStackName)}'`; + const header = `Move ${mappings.length} resource(s) from '${sourceStackName}' to '${targetStackName}'`; const table = this.renderMappingTable(mappings); const resourceMappings: ResourceMapping[] = mappings.map(({ sourceId, targetId }) => ({ @@ -344,10 +291,32 @@ export abstract class CategoryRefactorer implements Planner { return [`${header}\n\n${table}`]; }, execute: async () => { + const source = await this.resolveSource(sourceStackId); + const target = await this.resolveTarget(targetStackId); + + // Build afterRemoval: source template minus mapped resources. + // The placeholder (if needed) was already added by updateSource. + const afterRemoval = JSON.parse(JSON.stringify(source.resolvedTemplate)) as CFNTemplate; + for (const { sourceId } of mappings) { + delete afterRemoval.Resources[sourceId]; + } + + // Build afterAddition: target template plus mapped resources with remapped DependsOn + const afterAddition = JSON.parse(JSON.stringify(target.resolvedTemplate)) as CFNTemplate; + const idMap = new Map(mappings.map((m) => [m.sourceId, m.targetId])); + for (const { targetId, resource } of mappings) { + const cloned = JSON.parse(JSON.stringify(resource)) as CFNResource; + if (cloned.DependsOn) { + const deps = Array.isArray(cloned.DependsOn) ? cloned.DependsOn : [cloned.DependsOn]; + cloned.DependsOn = deps.map((d) => idMap.get(d) ?? d); + } + afterAddition.Resources[targetId] = cloned; + } + await this.cfn.refactor({ StackDefinitions: [ - { TemplateBody: JSON.stringify(source.afterRemoval), StackName: source.stackId }, - { TemplateBody: JSON.stringify(target.afterAddition), StackName: target.stackId }, + { TemplateBody: JSON.stringify(afterRemoval), StackName: sourceStackId }, + { TemplateBody: JSON.stringify(afterAddition), StackName: targetStackId }, ], ResourceMappings: resourceMappings, }); @@ -397,13 +366,3 @@ export abstract class CategoryRefactorer implements Planner { return `${table.toString()}\n`; } } - -/** - * Adds a placeholder resource if the template has no resources. - * CloudFormation requires at least one resource in a stack. - */ -function addPlaceholderIfEmpty(template: CFNTemplate): void { - if (Object.keys(template.Resources).length === 0) { - template.Resources[MIGRATION_PLACEHOLDER_LOGICAL_ID] = PLACEHOLDER_RESOURCE; - } -} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index ee75dd4d3d5..b7509fe27ba 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -7,7 +7,7 @@ import { resolveOutputs } from '../resolvers/cfn-output-resolver'; import { resolveDependencies } from '../resolvers/cfn-dependency-resolver'; import { resolveConditions } from '../resolvers/cfn-condition-resolver'; import { extractStackNameFromId } from '../utils'; -import { CategoryRefactorer, MoveMapping, RefactorBlueprint, ResolvedStack, ResourceMapping } from './category-refactorer'; +import { CategoryRefactorer, MoveMapping, RefactorBlueprint, ResolvedStack } from './category-refactorer'; /** * Forward direction base: moves resources from Gen1 (source) to Gen2 (target). @@ -118,11 +118,11 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { return { stackId, resolvedTemplate: resolved, parameters }; } - protected override async updateSource(source: ResolvedStack): Promise { + protected override async updateSource(source: ResolvedStack, mappings: MoveMapping[]): Promise { if (this.gen1Env.isUpdated(source)) { return []; } - const operations = super.updateSource(source); + const operations = super.updateSource(source, mappings); this.gen1Env.markUpdated(source); return operations; } @@ -138,29 +138,14 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { /** * Moves Gen2 resources to a holding stack before the main refactor. + * Templates are fetched fresh at execution time. */ protected async beforeMove(blueprint: RefactorBlueprint): Promise { - const gen2StackName = extractStackNameFromId(blueprint.target.stackId); - const gen2StackTemplate = JSON.parse(JSON.stringify(blueprint.target.resolvedTemplate)) as CFNTemplate; + const gen2StackName = extractStackNameFromId(blueprint.targetStackId); const holdingStackName = this.getHoldingStackName(gen2StackName); - const { stack: holdingStack, template: holdingStackTemplate } = await this.fetchHoldingStackTemplate(holdingStackName); - - const mappings = blueprint.mappings.map((m) => ({ - sourceId: m.targetId, - targetId: m.targetId, - resource: gen2StackTemplate.Resources[m.targetId], - physicalResourceId: m.physicalResourceId, - })); - - const resourceMappings = mappings.map(({ sourceId, targetId }) => ({ - Source: { StackName: gen2StackName, LogicalResourceId: sourceId }, - Destination: { StackName: holdingStackName, LogicalResourceId: targetId }, - })); - - for (const mapping of mappings) { - holdingStackTemplate.Resources[mapping.targetId] = mapping.resource; - delete gen2StackTemplate.Resources[mapping.sourceId]; - } + + // Pre-fetch holding stack status for plan-time description + const holdingStack = await this.cfn.findStack(holdingStackName); const operations: AmplifyMigrationOperation[] = []; @@ -179,15 +164,45 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { resource: this.resource, validate: () => undefined, describe: async () => { - const header = `Move ${mappings.length} resource(s) from '${gen2StackName}' to '${extractStackNameFromId(holdingStackName)}'`; - const table = this.renderMappingTable(mappings); + const header = `Move ${blueprint.mappings.length} resource(s) from '${gen2StackName}' to '${extractStackNameFromId( + holdingStackName, + )}'`; + const table = this.renderMappingTable( + blueprint.mappings.map((m) => ({ + sourceId: m.targetId, + targetId: m.targetId, + resource: m.resource, + physicalResourceId: m.physicalResourceId, + })), + ); return [`${header}\n\n${table}`]; }, execute: async () => { + const target = await this.resolveTarget(blueprint.targetStackId); + const gen2Template = JSON.parse(JSON.stringify(target.resolvedTemplate)) as CFNTemplate; + const { template: holdingTemplate } = await this.fetchHoldingStackTemplate(holdingStackName); + + const moveMappings = blueprint.mappings.map((m) => ({ + sourceId: m.targetId, + targetId: m.targetId, + resource: gen2Template.Resources[m.targetId], + physicalResourceId: m.physicalResourceId, + })); + + const resourceMappings = moveMappings.map(({ sourceId, targetId }) => ({ + Source: { StackName: gen2StackName, LogicalResourceId: sourceId }, + Destination: { StackName: holdingStackName, LogicalResourceId: targetId }, + })); + + for (const mapping of moveMappings) { + holdingTemplate.Resources[mapping.targetId] = mapping.resource; + delete gen2Template.Resources[mapping.sourceId]; + } + await this.cfn.refactor({ StackDefinitions: [ - { TemplateBody: JSON.stringify(gen2StackTemplate), StackName: gen2StackName }, - { TemplateBody: JSON.stringify(holdingStackTemplate), StackName: holdingStackName }, + { TemplateBody: JSON.stringify(gen2Template), StackName: gen2StackName }, + { TemplateBody: JSON.stringify(holdingTemplate), StackName: holdingStackName }, ], ResourceMappings: resourceMappings, EnableStackCreation: true, diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index 74c78a8b5f8..0e98abaf17a 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -97,7 +97,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { return { stackId, resolvedTemplate: originalTemplate, parameters }; } - protected override async updateSource(_source: ResolvedStack): Promise { + protected override async updateSource(_source: ResolvedStack, _mappings: MoveMapping[]): Promise { return []; } @@ -114,9 +114,10 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { /** * Restores holding stack resources into Gen2 and deletes the holding stack. + * Templates are fetched fresh at execution time. */ protected async afterMove(blueprint: RefactorBlueprint): Promise { - const gen2StackId = blueprint.source.stackId; + const gen2StackId = blueprint.sourceStackId; const holdingStackName = this.getHoldingStackName(extractStackNameFromId(gen2StackId)); const holdingStack = await this.cfn.findStack(holdingStackName); @@ -176,16 +177,24 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { return [`${header}\n\n${table}`]; }, execute: async () => { + // Fetch fresh templates at execution time + const source = await this.resolveSource(gen2StackId); + const currentHoldingTemplate = await this.cfn.fetchTemplate(holdingStackName); + const currentHoldingWithPlaceholder = { + ...currentHoldingTemplate, + Resources: { ...currentHoldingTemplate.Resources, [MIGRATION_PLACEHOLDER_LOGICAL_ID]: PLACEHOLDER_RESOURCE }, + }; + const resourceMappings = mappings.map(({ sourceId, targetId }) => ({ Source: { StackName: extractStackNameFromId(holdingStackName), LogicalResourceId: sourceId }, Destination: { StackName: extractStackNameFromId(gen2StackId), LogicalResourceId: targetId }, })); - const targetTemplate = JSON.parse(JSON.stringify(blueprint.source.afterRemoval)) as CFNTemplate; - const holdingAfterRemoval = JSON.parse(JSON.stringify(holdingWithPlaceholder)) as CFNTemplate; + const targetTemplate = JSON.parse(JSON.stringify(source.resolvedTemplate)) as CFNTemplate; + const holdingAfterRemoval = JSON.parse(JSON.stringify(currentHoldingWithPlaceholder)) as CFNTemplate; for (const mapping of resourceMappings) { targetTemplate.Resources[mapping.Destination.LogicalResourceId] = - holdingWithPlaceholder.Resources[mapping.Source.LogicalResourceId]; + currentHoldingWithPlaceholder.Resources[mapping.Source.LogicalResourceId]; delete holdingAfterRemoval.Resources[mapping.Source.LogicalResourceId]; } From b2d1b058986943aed7eac7dd074b780c92c82e9a Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sun, 22 Mar 2026 18:09:03 -0400 Subject: [PATCH 28/70] refactor(cli-internal): move template manipulation into Cfn.refactor and use SDK ResourceMapping Cfn.refactor() now accepts ResourceMapping[] directly, fetches both stack templates, moves resources between them, and handles the full refactor lifecycle internally. This eliminates template manipulation from callers entirely. Replace custom MoveMapping with the SDK's ResourceMapping type throughout the workflow. Simplify move(), beforeMove() (forward), and afterMove() (rollback) to just pass resource mappings. Remove fetchHoldingStackTemplate, isPlaceholderOnlyChangeSet, and the holding stack changeset validation. Move placeholder logic into addPlaceHolderIfNeeded() at the top of plan(). Fix symmetricDifference check to compare .size === 0. --- Prompt: Read what i've done and commit it. --- .../commands/gen2-migration/refactor/cfn.ts | 42 ++++-- .../refactor/workflow/category-refactorer.ts | 126 +++++------------- .../workflow/forward-category-refactorer.ts | 83 +++--------- .../workflow/rollback-category-refactorer.ts | 108 +++------------ 4 files changed, 102 insertions(+), 257 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts index 6deffd9a231..5309ef7efd9 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts @@ -12,6 +12,7 @@ import { ExecuteStackRefactorCommand, GetTemplateCommand, Parameter, + ResourceMapping, Stack, UpdateStackCommand, UpdateStackCommandInput, @@ -86,19 +87,32 @@ export class Cfn { * Creates and executes a CloudFormation stack refactor. * Throws on failure. */ - public async refactor(input: CreateStackRefactorCommandInput): Promise { - const sourceStackName = input.StackDefinitions?.[0]?.StackName; - const destStackName = input.StackDefinitions?.[1]?.StackName; - if (!sourceStackName || !destStackName) { - throw new AmplifyError('InvalidStackError', { - message: 'Stack refactor input is missing source or destination stack name', - }); + public async refactor(resourceMappings: ResourceMapping[]): Promise { + const sourceStackId = resourceMappings[0].Source.StackName; + const targetStackId = resourceMappings[0].Destination.StackName; + + const sourceTemplate = await this.fetchTemplate(sourceStackId); + const targetTemplate = await this.fetchTemplate(targetStackId); + + for (const mapping of resourceMappings) { + targetTemplate.Resources[mapping.Destination.LogicalResourceId] = sourceTemplate.Resources[mapping.Source.LogicalResourceId]; + delete sourceTemplate.Resources[mapping.Source.LogicalResourceId]; } + const input: CreateStackRefactorCommandInput = { + StackDefinitions: [ + { TemplateBody: JSON.stringify(sourceTemplate), StackName: sourceStackId }, + { TemplateBody: JSON.stringify(targetTemplate), StackName: targetStackId }, + ], + ResourceMappings: resourceMappings, + EnableStackCreation: true, + }; + input.Description = buildRefactorDescription(input); writeRefactorSnapshot(input); - this.info(`Creating stack refactor: ${extractStackNameFromId(sourceStackName)} → ${extractStackNameFromId(destStackName)}`); + + this.info(`Creating stack refactor: ${extractStackNameFromId(sourceStackId)} → ${extractStackNameFromId(targetStackId)}`); const { StackRefactorId } = await this.client.send(new CreateStackRefactorCommand(input)); if (!StackRefactorId) { throw new AmplifyError('StackStateError', { @@ -106,7 +120,7 @@ export class Cfn { }); } - const destinationStack = await this.findStack(destStackName); + const destinationStack = await this.findStack(targetStackId); this.info(`Waiting for stack refactor creation to complete: ${StackRefactorId}`); await waitUntilStackRefactorCreateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackRefactorId }); @@ -116,15 +130,15 @@ export class Cfn { this.info(`Waiting for stack refactor execution to complete: ${StackRefactorId}`); await waitUntilStackRefactorExecuteComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackRefactorId }); - this.info(`Waiting for source stack update: ${extractStackNameFromId(sourceStackName)}`); - await waitUntilStackUpdateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: sourceStackName }); + this.info(`Waiting for source stack update: ${extractStackNameFromId(sourceStackId)}`); + await waitUntilStackUpdateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: sourceStackId }); // Destination may be newly created (EnableStackCreation) or updated - this.info(`Waiting for destination stack: ${extractStackNameFromId(destStackName)}`); + this.info(`Waiting for destination stack: ${extractStackNameFromId(targetStackId)}`); if (destinationStack) { - await waitUntilStackUpdateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: destStackName }); + await waitUntilStackUpdateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: targetStackId }); } else { - await waitUntilStackCreateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: destStackName }); + await waitUntilStackCreateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: targetStackId }); } } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index 475a3eb74c0..fcf2585e2cd 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -34,16 +34,6 @@ export interface ResourceMapping { readonly Destination: { readonly StackName: string; readonly LogicalResourceId: string }; } -/** - * A single resource to be moved from source to target stack. - */ -export interface MoveMapping { - readonly sourceId: string; - readonly targetId: string; - readonly resource: CFNResource; - readonly physicalResourceId: string; -} - /** * Mappings-only refactor plan. Templates are fetched fresh at execution time * so that sequential refactorers targeting the same stack always see current state. @@ -51,7 +41,7 @@ export interface MoveMapping { export interface RefactorBlueprint { readonly sourceStackId: string; readonly targetStackId: string; - readonly mappings: MoveMapping[]; + readonly mappings: ResourceMapping[]; } /** @@ -100,18 +90,23 @@ export abstract class CategoryRefactorer implements Planner { }); } - const source = await this.resolveSource(sourceStackId); + let source = await this.resolveSource(sourceStackId); const target = await this.resolveTarget(destStackId); - const mappings = await this.buildMappings(source, target); + const sourceResources = this.filterResourcesByType(source.resolvedTemplate); + const targetResources = this.filterResourcesByType(target.resolvedTemplate); + + const mappings = await this.buildResourceMappings(sourceResources, targetResources, source.stackId, target.stackId); if (mappings.length === 0) { this.logger.pop(); return [buildNoopOperation(this.resource)]; } + source = addPlaceHolderIfNeeded(source, mappings); + const blueprint: RefactorBlueprint = { sourceStackId, targetStackId: destStackId, mappings }; - const updateSourceOps = await this.updateSource(source, mappings); + const updateSourceOps = await this.updateSource(source); const updateTargetOps = await this.updateTarget(target); const beforeMoveOps = await this.beforeMove(blueprint); const moveOps = await this.move(blueprint); @@ -137,7 +132,7 @@ export abstract class CategoryRefactorer implements Planner { targetResources: Map, sourceStackId: string, targetStackId: string, - ): Promise; + ): Promise; // -- Direction-specific (abstract) -- @@ -165,25 +160,9 @@ export abstract class CategoryRefactorer implements Planner { * Adds a placeholder resource if removing the mapped resources would leave the stack empty. * Rollback overrides this to return []. */ - protected async updateSource(source: ResolvedStack, mappings: MoveMapping[]): Promise { + protected async updateSource(source: ResolvedStack): Promise { const sourceStackName = extractStackNameFromId(source.stackId); - - // Check if removing mapped resources would leave the stack empty - const remainingResources = { ...source.resolvedTemplate.Resources }; - for (const { sourceId } of mappings) { - delete remainingResources[sourceId]; - } - const needsPlaceholder = Object.keys(remainingResources).length === 0; - - const resolvedTemplate = needsPlaceholder - ? { - ...source.resolvedTemplate, - Resources: { ...source.resolvedTemplate.Resources, [MIGRATION_PLACEHOLDER_LOGICAL_ID]: PLACEHOLDER_RESOURCE }, - } - : source.resolvedTemplate; - - const resolvedStack: ResolvedStack = { ...source, resolvedTemplate: resolvedTemplate }; - const report = await this.createChangeSetReport(resolvedStack); + const report = await this.createChangeSetReport(source); return [ { resource: this.resource, @@ -199,7 +178,7 @@ export abstract class CategoryRefactorer implements Planner { await this.cfn.update({ stackName: source.stackId, parameters: source.parameters, - templateBody: resolvedTemplate, + templateBody: source.resolvedTemplate, }); }, }, @@ -253,73 +232,25 @@ export abstract class CategoryRefactorer implements Planner { } } - /** - * Builds resource mappings from resolved source and target stacks. - * Returns an empty array if there are no resources to move. - */ - protected async buildMappings(source: ResolvedStack, target: ResolvedStack): Promise { - const sourceResources = this.filterResourcesByType(source.resolvedTemplate); - const targetResources = this.filterResourcesByType(target.resolvedTemplate); - - if (sourceResources.size === 0) return []; - - return this.buildResourceMappings(sourceResources, targetResources, source.stackId, target.stackId); - } - /** * Creates the move operation that executes the CloudFormation stack refactor. * Templates are fetched and resolved fresh at execution time. */ protected async move(blueprint: RefactorBlueprint): Promise { - const { sourceStackId, targetStackId, mappings } = blueprint; - const sourceStackName = extractStackNameFromId(sourceStackId); - const targetStackName = extractStackNameFromId(targetStackId); - - const header = `Move ${mappings.length} resource(s) from '${sourceStackName}' to '${targetStackName}'`; - const table = this.renderMappingTable(mappings); - - const resourceMappings: ResourceMapping[] = mappings.map(({ sourceId, targetId }) => ({ - Source: { StackName: sourceStackName, LogicalResourceId: sourceId }, - Destination: { StackName: targetStackName, LogicalResourceId: targetId }, - })); + const sourceStackName = extractStackNameFromId(blueprint.sourceStackId); + const targetStackName = extractStackNameFromId(blueprint.targetStackId); return [ { resource: this.resource, validate: () => undefined, describe: async () => { + const header = `Move ${blueprint.mappings.length} resource(s) from '${sourceStackName}' to '${targetStackName}'`; + const table = this.renderMappingTable(blueprint.mappings); return [`${header}\n\n${table}`]; }, execute: async () => { - const source = await this.resolveSource(sourceStackId); - const target = await this.resolveTarget(targetStackId); - - // Build afterRemoval: source template minus mapped resources. - // The placeholder (if needed) was already added by updateSource. - const afterRemoval = JSON.parse(JSON.stringify(source.resolvedTemplate)) as CFNTemplate; - for (const { sourceId } of mappings) { - delete afterRemoval.Resources[sourceId]; - } - - // Build afterAddition: target template plus mapped resources with remapped DependsOn - const afterAddition = JSON.parse(JSON.stringify(target.resolvedTemplate)) as CFNTemplate; - const idMap = new Map(mappings.map((m) => [m.sourceId, m.targetId])); - for (const { targetId, resource } of mappings) { - const cloned = JSON.parse(JSON.stringify(resource)) as CFNResource; - if (cloned.DependsOn) { - const deps = Array.isArray(cloned.DependsOn) ? cloned.DependsOn : [cloned.DependsOn]; - cloned.DependsOn = deps.map((d) => idMap.get(d) ?? d); - } - afterAddition.Resources[targetId] = cloned; - } - - await this.cfn.refactor({ - StackDefinitions: [ - { TemplateBody: JSON.stringify(afterRemoval), StackName: sourceStackId }, - { TemplateBody: JSON.stringify(afterAddition), StackName: targetStackId }, - ], - ResourceMappings: resourceMappings, - }); + await this.cfn.refactor(blueprint.mappings); }, }, ]; @@ -355,14 +286,29 @@ export abstract class CategoryRefactorer implements Planner { } /** Renders a CLI table of move mappings. */ - protected renderMappingTable(mappings: readonly MoveMapping[]): string { + protected renderMappingTable(mappings: readonly ResourceMapping[]): string { const table = new CLITable({ - head: ['Type', 'Source Logical ID', 'Target Logical ID', 'Physical ID'], + head: ['Source Logical ID', 'Target Logical ID'], style: { head: [] }, }); for (const m of mappings) { - table.push([m.resource.Type, m.sourceId, m.targetId, m.physicalResourceId]); + table.push([m.Source.LogicalResourceId, m.Destination.LogicalResourceId]); } return `${table.toString()}\n`; } } + +function addPlaceHolderIfNeeded(source: ResolvedStack, mappings: ResourceMapping[]): ResolvedStack { + const movedLogicalIds = new Set(mappings.map((m) => m.Source.LogicalResourceId)); + const allLogicalIds = new Set(Object.keys(source.resolvedTemplate.Resources)); + if (movedLogicalIds.symmetricDifference(allLogicalIds).size === 0) { + const resolved = JSON.parse(JSON.stringify(source.resolvedTemplate)) as CFNTemplate; + resolved.Resources[MIGRATION_PLACEHOLDER_LOGICAL_ID] = PLACEHOLDER_RESOURCE; + return { + stackId: source.stackId, + parameters: source.parameters, + resolvedTemplate: resolved, + }; + } + return source; +} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index b7509fe27ba..5eef3f37e33 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -1,13 +1,13 @@ -import { Output, Parameter, Stack } from '@aws-sdk/client-cloudformation'; +import { Output, Parameter, ResourceMapping } from '@aws-sdk/client-cloudformation'; import { AmplifyError } from '@aws-amplify/amplify-cli-core'; -import { CFNResource, CFNTemplate } from '../../cfn-template'; +import { CFNResource } from '../../cfn-template'; import { AmplifyMigrationOperation } from '../../_operation'; import { resolveParameters } from '../resolvers/cfn-parameter-resolver'; import { resolveOutputs } from '../resolvers/cfn-output-resolver'; import { resolveDependencies } from '../resolvers/cfn-dependency-resolver'; import { resolveConditions } from '../resolvers/cfn-condition-resolver'; import { extractStackNameFromId } from '../utils'; -import { CategoryRefactorer, MoveMapping, RefactorBlueprint, ResolvedStack } from './category-refactorer'; +import { CategoryRefactorer, RefactorBlueprint, ResolvedStack } from './category-refactorer'; /** * Forward direction base: moves resources from Gen1 (source) to Gen2 (target). @@ -23,11 +23,8 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { targetResources: Map, sourceStackId: string, targetStackId: string, - ): Promise { - const stackResources = await this.gen1Env.fetchStackResources(sourceStackId); - const physicalIds = new Map(stackResources.map((r) => [r.LogicalResourceId, r.PhysicalResourceId])); - - const mappings: MoveMapping[] = []; + ): Promise { + const mappings: ResourceMapping[] = []; for (const [sourceId, sourceResource] of sourceResources) { const matchedTargets = []; for (const [targetId, targetResource] of targetResources) { @@ -51,7 +48,10 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { }); } const targetId = matchedTargets[0]; - mappings.push({ sourceId, targetId, resource: sourceResource, physicalResourceId: physicalIds.get(sourceId) }); + mappings.push({ + Source: { LogicalResourceId: sourceId, StackName: sourceStackId }, + Destination: { LogicalResourceId: targetId, StackName: targetStackId }, + }); } return mappings; } @@ -118,11 +118,11 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { return { stackId, resolvedTemplate: resolved, parameters }; } - protected override async updateSource(source: ResolvedStack, mappings: MoveMapping[]): Promise { + protected override async updateSource(source: ResolvedStack): Promise { if (this.gen1Env.isUpdated(source)) { return []; } - const operations = super.updateSource(source, mappings); + const operations = super.updateSource(source); this.gen1Env.markUpdated(source); return operations; } @@ -144,7 +144,10 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { const gen2StackName = extractStackNameFromId(blueprint.targetStackId); const holdingStackName = this.getHoldingStackName(gen2StackName); - // Pre-fetch holding stack status for plan-time description + const resourceMappings: ResourceMapping[] = blueprint.mappings.map((m) => ({ + Source: { LogicalResourceId: m.Destination.LogicalResourceId, StackName: gen2StackName }, + Destination: { LogicalResourceId: m.Destination.LogicalResourceId, StackName: holdingStackName }, + })); const holdingStack = await this.cfn.findStack(holdingStackName); const operations: AmplifyMigrationOperation[] = []; @@ -167,46 +170,11 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { const header = `Move ${blueprint.mappings.length} resource(s) from '${gen2StackName}' to '${extractStackNameFromId( holdingStackName, )}'`; - const table = this.renderMappingTable( - blueprint.mappings.map((m) => ({ - sourceId: m.targetId, - targetId: m.targetId, - resource: m.resource, - physicalResourceId: m.physicalResourceId, - })), - ); + const table = this.renderMappingTable(resourceMappings); return [`${header}\n\n${table}`]; }, execute: async () => { - const target = await this.resolveTarget(blueprint.targetStackId); - const gen2Template = JSON.parse(JSON.stringify(target.resolvedTemplate)) as CFNTemplate; - const { template: holdingTemplate } = await this.fetchHoldingStackTemplate(holdingStackName); - - const moveMappings = blueprint.mappings.map((m) => ({ - sourceId: m.targetId, - targetId: m.targetId, - resource: gen2Template.Resources[m.targetId], - physicalResourceId: m.physicalResourceId, - })); - - const resourceMappings = moveMappings.map(({ sourceId, targetId }) => ({ - Source: { StackName: gen2StackName, LogicalResourceId: sourceId }, - Destination: { StackName: holdingStackName, LogicalResourceId: targetId }, - })); - - for (const mapping of moveMappings) { - holdingTemplate.Resources[mapping.targetId] = mapping.resource; - delete gen2Template.Resources[mapping.sourceId]; - } - - await this.cfn.refactor({ - StackDefinitions: [ - { TemplateBody: JSON.stringify(gen2Template), StackName: gen2StackName }, - { TemplateBody: JSON.stringify(holdingTemplate), StackName: holdingStackName }, - ], - ResourceMappings: resourceMappings, - EnableStackCreation: true, - }); + await this.cfn.refactor(resourceMappings); }, }); @@ -226,21 +194,4 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { protected async resolveOAuthParameters(parameters: Parameter[], _outputs: Output[]): Promise { return parameters; } - - protected async fetchHoldingStackTemplate(holdingStackName: string): Promise<{ - readonly stack?: Stack; - readonly template: CFNTemplate; - }> { - const existing = await this.cfn.findStack(holdingStackName); - const template = - existing && existing.StackStatus !== 'REVIEW_IN_PROGRESS' - ? await this.cfn.fetchTemplate(holdingStackName) - : { - AWSTemplateFormatVersion: '2010-09-09', - Description: 'Temporary holding stack for Gen2 migration', - Resources: {}, - Outputs: {}, - }; - return { stack: existing, template }; - } } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index 0e98abaf17a..9f388479805 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -1,6 +1,6 @@ -import { DescribeChangeSetOutput } from '@aws-sdk/client-cloudformation'; +import { ResourceMapping } from '@aws-sdk/client-cloudformation'; import { AmplifyError } from '@aws-amplify/amplify-cli-core'; -import { CFNResource, CFNTemplate } from '../../cfn-template'; +import { CFNResource } from '../../cfn-template'; import { AmplifyMigrationOperation } from '../../_operation'; import { resolveParameters } from '../resolvers/cfn-parameter-resolver'; import { resolveOutputs } from '../resolvers/cfn-output-resolver'; @@ -10,7 +10,6 @@ import { CategoryRefactorer, MIGRATION_PLACEHOLDER_LOGICAL_ID, PLACEHOLDER_RESOURCE, - MoveMapping, RefactorBlueprint, ResolvedStack, } from './category-refactorer'; @@ -31,11 +30,8 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { targetResources: Map, sourceStackId: string, targetStackId: string, - ): Promise { - const stackResources = await this.gen2Branch.fetchStackResources(sourceStackId); - const physicalIds = new Map(stackResources.map((r) => [r.LogicalResourceId, r.PhysicalResourceId])); - - const mappings: MoveMapping[] = []; + ): Promise { + const mappings: ResourceMapping[] = []; for (const [sourceId, resource] of sourceResources) { const gen1LogicalId = this.targetLogicalId(sourceId, resource); if (!gen1LogicalId) { @@ -45,13 +41,11 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { } if (targetResources.has(gen1LogicalId)) { continue; - // throw new AmplifyError('MigrationError', { - // message: `Failed building mappings: Resource ${gen1LogicalId} (${ - // resource.Type - // }) already exists in target stack: ${extractStackNameFromId(targetStackId)}`, - // }); } - mappings.push({ sourceId, targetId: gen1LogicalId, resource, physicalResourceId: physicalIds.get(sourceId) ?? '' }); + mappings.push({ + Source: { LogicalResourceId: sourceId, StackName: sourceStackId }, + Destination: { LogicalResourceId: gen1LogicalId, StackName: targetStackId }, + }); } return mappings; } @@ -97,7 +91,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { return { stackId, resolvedTemplate: originalTemplate, parameters }; } - protected override async updateSource(_source: ResolvedStack, _mappings: MoveMapping[]): Promise { + protected override async updateSource(_source: ResolvedStack): Promise { return []; } @@ -117,52 +111,32 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { * Templates are fetched fresh at execution time. */ protected async afterMove(blueprint: RefactorBlueprint): Promise { - const gen2StackId = blueprint.sourceStackId; - const holdingStackName = this.getHoldingStackName(extractStackNameFromId(gen2StackId)); + const gen2StackName = blueprint.sourceStackId; + const holdingStackName = this.getHoldingStackName(extractStackNameFromId(gen2StackName)); const holdingStack = await this.cfn.findStack(holdingStackName); if (!holdingStack) return []; const holdingTemplate = await this.cfn.fetchTemplate(holdingStackName); - const mappings = blueprint.mappings.map((m) => ({ - sourceId: m.sourceId, - targetId: m.sourceId, - resource: m.resource, - physicalResourceId: m.physicalResourceId, + const resourceMappings: ResourceMapping[] = blueprint.mappings.map((m) => ({ + Source: { LogicalResourceId: m.Source.LogicalResourceId, StackName: holdingStackName }, + Destination: { LogicalResourceId: m.Source.LogicalResourceId, StackName: gen2StackName }, })); - const holdingWithPlaceholder = { - ...holdingTemplate, - Resources: { ...holdingTemplate.Resources, [MIGRATION_PLACEHOLDER_LOGICAL_ID]: PLACEHOLDER_RESOURCE }, - }; - - this.logger.push(extractStackNameFromId(holdingStackName)); - const holdingChangeSet = await this.cfn.createChangeSet({ - stackName: holdingStackName, - parameters: [], - templateBody: holdingWithPlaceholder, - }); - const holdingReport = holdingChangeSet ? this.cfn.renderChangeSet(holdingChangeSet) : undefined; - this.logger.pop(); - return [ { resource: this.resource, - validate: () => ({ - description: `Ensure holding stack ${extractStackNameFromId(holdingStackName)} update only adds placeholder`, - run: async () => ({ valid: this.isPlaceholderOnlyChangeSet(holdingChangeSet), report: holdingReport }), - }), + validate: () => undefined, describe: async () => { - const header = `Update holding stack '${extractStackNameFromId(holdingStackName)}' with placeholder resource`; - const desc = holdingReport ? `${header}\n\n${holdingReport.trimStart()}\n` : `${header} (empty change-set)`; - return [desc]; + return [`Update holding stack '${extractStackNameFromId(holdingStackName)}' with placeholder resource`]; }, execute: async () => { + holdingTemplate.Resources[MIGRATION_PLACEHOLDER_LOGICAL_ID] = PLACEHOLDER_RESOURCE; await this.cfn.update({ stackName: holdingStackName, parameters: [], - templateBody: holdingWithPlaceholder, + templateBody: holdingTemplate, }); }, }, @@ -172,54 +146,14 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { describe: async () => { const header = `Move ${blueprint.mappings.length} resource(s) from '${extractStackNameFromId( holdingStackName, - )}' to '${extractStackNameFromId(gen2StackId)}'`; - const table = this.renderMappingTable(mappings); + )}' to '${extractStackNameFromId(gen2StackName)}'`; + const table = this.renderMappingTable(resourceMappings); return [`${header}\n\n${table}`]; }, execute: async () => { - // Fetch fresh templates at execution time - const source = await this.resolveSource(gen2StackId); - const currentHoldingTemplate = await this.cfn.fetchTemplate(holdingStackName); - const currentHoldingWithPlaceholder = { - ...currentHoldingTemplate, - Resources: { ...currentHoldingTemplate.Resources, [MIGRATION_PLACEHOLDER_LOGICAL_ID]: PLACEHOLDER_RESOURCE }, - }; - - const resourceMappings = mappings.map(({ sourceId, targetId }) => ({ - Source: { StackName: extractStackNameFromId(holdingStackName), LogicalResourceId: sourceId }, - Destination: { StackName: extractStackNameFromId(gen2StackId), LogicalResourceId: targetId }, - })); - - const targetTemplate = JSON.parse(JSON.stringify(source.resolvedTemplate)) as CFNTemplate; - const holdingAfterRemoval = JSON.parse(JSON.stringify(currentHoldingWithPlaceholder)) as CFNTemplate; - for (const mapping of resourceMappings) { - targetTemplate.Resources[mapping.Destination.LogicalResourceId] = - currentHoldingWithPlaceholder.Resources[mapping.Source.LogicalResourceId]; - delete holdingAfterRemoval.Resources[mapping.Source.LogicalResourceId]; - } - - await this.cfn.refactor({ - StackDefinitions: [ - { TemplateBody: JSON.stringify(holdingAfterRemoval), StackName: holdingStackName }, - { TemplateBody: JSON.stringify(targetTemplate), StackName: gen2StackId }, - ], - ResourceMappings: resourceMappings, - }); + await this.cfn.refactor(resourceMappings); }, }, ]; } - - /** - * Returns true if the changeset is empty or only adds the migration placeholder. - */ - private isPlaceholderOnlyChangeSet(changeSet: DescribeChangeSetOutput | undefined): boolean { - if (!changeSet) return true; - const changes = changeSet.Changes ?? []; - if (changes.length === 0) return true; - return changes.every((c) => { - const rc = c.ResourceChange; - return rc?.Action === 'Add' && rc?.LogicalResourceId === MIGRATION_PLACEHOLDER_LOGICAL_ID; - }); - } } From 2698a8f5ea8041a45cae04a5adda8d971ba0c54d Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sun, 22 Mar 2026 18:29:32 -0400 Subject: [PATCH 29/70] refactor(cli-internal): use SDK ResourceMapping and strip all DependsOn Replace custom MoveMapping with the SDK ResourceMapping type. Cfn.refactor() now accepts ResourceMapping[] directly, fetches both stack templates internally, and moves resources between them before calling the refactor API. Simplify resolveDependencies to unconditionally strip all DependsOn from templates. DependsOn only controls deployment ordering which is irrelevant during refactor since all resources already exist. This also eliminates the partial-view problem where each refactorer only resolved dependencies for its own resource types. Remove resourceIds computation from resolveSource/resolveTarget since resolveDependencies no longer needs it. --- Prompt: use SDK ResourceMapping, move template manipulation into Cfn.refactor, strip all DependsOn unconditionally. --- .../resolvers/cfn-dependency-resolver.ts | 29 +++++-------------- .../refactor/workflow/category-refactorer.ts | 4 ++- .../workflow/forward-category-refactorer.ts | 8 ++--- .../workflow/rollback-category-refactorer.ts | 4 +-- 4 files changed, 13 insertions(+), 32 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/resolvers/cfn-dependency-resolver.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/resolvers/cfn-dependency-resolver.ts index 5ec7b56e3f7..fd11854fd16 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/resolvers/cfn-dependency-resolver.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/resolvers/cfn-dependency-resolver.ts @@ -1,31 +1,16 @@ import { CFNTemplate } from '../../cfn-template'; /** - * Resolves DependsOn references in a CloudFormation template for a stack refactor. - * Returns a new template; does not mutate input. - * - * When resources are being moved between stacks, DependsOn references that cross - * the refactor boundary must be removed: - * - Resources NOT being moved must not depend on resources being moved. - * - Resources being moved must only depend on other resources being moved. + * Strips all DependsOn references from a CloudFormation template. + * DependsOn only controls deployment ordering, which is irrelevant during + * refactor since all resources already exist. Removing them avoids + * cross-boundary issues when resources move between stacks. */ -export function resolveDependencies(template: CFNTemplate, resourcesToRefactor: string[]): CFNTemplate { +export function resolveDependencies(template: CFNTemplate): CFNTemplate { const cloned = JSON.parse(JSON.stringify(template)) as CFNTemplate; - for (const [logicalId, resource] of Object.entries(cloned.Resources)) { - if (!resource.DependsOn) continue; - - const deps = Array.isArray(resource.DependsOn) ? resource.DependsOn : [resource.DependsOn]; - const depsInRefactor = deps.filter((dep) => resourcesToRefactor.includes(dep)); - const isBeingMoved = resourcesToRefactor.includes(logicalId); - - if (!isBeingMoved && depsInRefactor.length > 0) { - // Resource stays — remove dependencies on resources being moved - resource.DependsOn = deps.filter((dep) => !resourcesToRefactor.includes(dep)); - } else if (isBeingMoved && deps.length > depsInRefactor.length) { - // Resource moves — keep only dependencies on other resources being moved - resource.DependsOn = depsInRefactor; - } + for (const resource of Object.values(cloned.Resources)) { + delete resource.DependsOn; } return cloned; diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index fcf2585e2cd..013808d52d7 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -285,7 +285,9 @@ export abstract class CategoryRefactorer implements Planner { return `${prefix.substring(0, maxPrefixLength)}${tail}`; } - /** Renders a CLI table of move mappings. */ + /** + * Renders a CLI table of move mappings. + */ protected renderMappingTable(mappings: readonly ResourceMapping[]): string { const table = new CLITable({ head: ['Source Logical ID', 'Target Logical ID'], diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index 5eef3f37e33..9a61ec51f10 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -72,8 +72,6 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { const parameters = description.Parameters ?? []; const outputs = description.Outputs ?? []; - const resourceIds = [...this.filterResourcesByType(originalTemplate).keys()]; - const stackName = extractStackNameFromId(stackId); const withParams = resolveParameters(originalTemplate, parameters, stackName); const stackResources = await facade.fetchStackResources(stackId); @@ -84,7 +82,7 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { region: this.region, accountId: this.accountId, }); - const withDeps = resolveDependencies(withOutputs, resourceIds); + const withDeps = resolveDependencies(withOutputs); const resolved = resolveConditions(withDeps, parameters); const updatedParameters = await this.resolveOAuthParameters(parameters, outputs); @@ -103,10 +101,8 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { const parameters = description.Parameters ?? []; const outputs = description.Outputs ?? []; - const resourceIds = [...this.filterResourcesByType(originalTemplate).keys()]; - const stackResources = await facade.fetchStackResources(stackId); - const withDeps = resolveDependencies(originalTemplate, resourceIds); + const withDeps = resolveDependencies(originalTemplate); const resolved = resolveOutputs({ template: withDeps, stackOutputs: outputs, diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index 9f388479805..a44460b3982 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -63,8 +63,6 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { const parameters = description.Parameters ?? []; const outputs = description.Outputs ?? []; - const resourceIds = [...this.filterResourcesByType(originalTemplate).keys()]; - const withParams = resolveParameters(originalTemplate, parameters); const stackResources = await facade.fetchStackResources(stackId); const withOutputs = resolveOutputs({ @@ -74,7 +72,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { region: this.region, accountId: this.accountId, }); - const resolved = resolveDependencies(withOutputs, resourceIds); + const resolved = resolveDependencies(withOutputs); return { stackId, resolvedTemplate: resolved, parameters }; } From aaaa3764ee4a52ab603775c303df76cc94b6cbba Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sun, 22 Mar 2026 19:53:15 -0400 Subject: [PATCH 30/70] fix(cli-internal): handle absent holding stacks and defer template fetch in rollback Check target stack existence before fetching its template in Cfn.refactor(). Use an empty holding template when the target stack doesn't exist yet (only holding stacks may be absent). Defer holdingTemplate fetch into the execute closure in rollback afterMove so it reads fresh state. Improve error messages to show resource spec instead of class name. --- Prompt: I've made changes. Commit. --- .../commands/gen2-migration/refactor/cfn.ts | 24 +++++++++++++++---- .../refactor/workflow/category-refactorer.ts | 5 ++-- .../workflow/rollback-category-refactorer.ts | 3 +-- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts index 5309ef7efd9..a58c60d311e 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts @@ -37,6 +37,13 @@ const NO_UPDATES_MESSAGE = 'No updates are to be performed'; const CFN_IAM_CAPABILITY = 'CAPABILITY_NAMED_IAM'; export const OUTPUT_DIRECTORY = '.amplify/refactor.operations'; +const EMPTY_HOLDING_TEMPLATE: CFNTemplate = { + AWSTemplateFormatVersion: '2010-09-09', + Description: 'Temporary holding stack for Gen2 migration', + Resources: {}, + Outputs: {}, +}; + /** * Centralized CloudFormation operations for the refactor workflow. * Wraps update, refactor, and change set APIs behind a single client instance. @@ -91,8 +98,18 @@ export class Cfn { const sourceStackId = resourceMappings[0].Source.StackName; const targetStackId = resourceMappings[0].Destination.StackName; + this.info(`Creating stack refactor: ${extractStackNameFromId(sourceStackId)} → ${extractStackNameFromId(targetStackId)}`); + + const targetStack = await this.findStack(targetStackId); + + if (!targetStack && !targetStackId.endsWith('-holding')) { + // only holding stacks may be absent because they are + // created by the refactor operation. + throw new AmplifyError('MigrationError', { message: `Stack with id ${targetStackId} not found` }); + } + const sourceTemplate = await this.fetchTemplate(sourceStackId); - const targetTemplate = await this.fetchTemplate(targetStackId); + const targetTemplate = targetStack ? await this.fetchTemplate(targetStackId) : EMPTY_HOLDING_TEMPLATE; for (const mapping of resourceMappings) { targetTemplate.Resources[mapping.Destination.LogicalResourceId] = sourceTemplate.Resources[mapping.Source.LogicalResourceId]; @@ -112,7 +129,6 @@ export class Cfn { writeRefactorSnapshot(input); - this.info(`Creating stack refactor: ${extractStackNameFromId(sourceStackId)} → ${extractStackNameFromId(targetStackId)}`); const { StackRefactorId } = await this.client.send(new CreateStackRefactorCommand(input)); if (!StackRefactorId) { throw new AmplifyError('StackStateError', { @@ -120,8 +136,6 @@ export class Cfn { }); } - const destinationStack = await this.findStack(targetStackId); - this.info(`Waiting for stack refactor creation to complete: ${StackRefactorId}`); await waitUntilStackRefactorCreateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackRefactorId }); @@ -135,7 +149,7 @@ export class Cfn { // Destination may be newly created (EnableStackCreation) or updated this.info(`Waiting for destination stack: ${extractStackNameFromId(targetStackId)}`); - if (destinationStack) { + if (targetStack) { await waitUntilStackUpdateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: targetStackId }); } else { await waitUntilStackCreateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: targetStackId }); diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index 013808d52d7..836b4d7f534 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -79,14 +79,15 @@ export abstract class CategoryRefactorer implements Planner { const sourceStackId = await this.fetchSourceStackId(); const destStackId = await this.fetchDestStackId(); + const resourceSpec = `${this.resource.category}/${this.resource.resourceName} (${this.resource.service})`; if (!sourceStackId) { throw new AmplifyError('MigrationError', { - message: `[${this.constructor.name}] unable to find source stack`, + message: `Unable to find source stack for resource: ${resourceSpec}`, }); } if (!destStackId) { throw new AmplifyError('MigrationError', { - message: `[${this.constructor.name}] unable to find target stack`, + message: `Unable to find target stack for resource: ${resourceSpec}`, }); } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index a44460b3982..36104a02d1c 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -115,8 +115,6 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { const holdingStack = await this.cfn.findStack(holdingStackName); if (!holdingStack) return []; - const holdingTemplate = await this.cfn.fetchTemplate(holdingStackName); - const resourceMappings: ResourceMapping[] = blueprint.mappings.map((m) => ({ Source: { LogicalResourceId: m.Source.LogicalResourceId, StackName: holdingStackName }, Destination: { LogicalResourceId: m.Source.LogicalResourceId, StackName: gen2StackName }, @@ -130,6 +128,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { return [`Update holding stack '${extractStackNameFromId(holdingStackName)}' with placeholder resource`]; }, execute: async () => { + const holdingTemplate = await this.cfn.fetchTemplate(holdingStackName); holdingTemplate.Resources[MIGRATION_PLACEHOLDER_LOGICAL_ID] = PLACEHOLDER_RESOURCE; await this.cfn.update({ stackName: holdingStackName, From a41cf123a5c2b1c87d12b3433be5d1c3e82eb0c3 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sun, 22 Mar 2026 20:49:18 -0400 Subject: [PATCH 31/70] refactor(cli-internal): share Cfn instance, enable rollback resolution, add resource logging Share a single Cfn instance across all refactorers. Move update dedup from StackFacade into the workflow: updateSource/updateTarget check cfn.isUpdateClaimed() and call cfn.claimUpdate() at plan time to prevent duplicate operations in the plan. Enable resolveSource/resolveTarget and updateSource/updateTarget in rollback (previously skipped). This fixes the Fn::GetAtt dangling reference error when rolling back after a Gen2 redeploy. Thread DiscoveredResource into Cfn.update(), refactor(), and deleteStack() for resource-scoped log prefixes. --- Prompt: share Cfn instance, enable rollback resolution, add resource logging, plan-time update dedup. --- .../refactor/auth/auth-cognito-forward.ts | 4 +- .../commands/gen2-migration/refactor/cfn.ts | 53 ++++++++++++------- .../gen2-migration/refactor/refactor.ts | 36 ++++++++----- .../gen2-migration/refactor/stack-facade.ts | 11 ---- .../refactor/workflow/category-refactorer.ts | 22 ++++---- .../workflow/forward-category-refactorer.ts | 22 +------- .../workflow/rollback-category-refactorer.ts | 11 +--- 7 files changed, 78 insertions(+), 81 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-forward.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-forward.ts index 9dd1becfeaf..cfa1a75d480 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-forward.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-forward.ts @@ -4,6 +4,7 @@ import { AwsClients } from '../../aws-clients'; import { StackFacade } from '../stack-facade'; import { retrieveOAuthValues } from '../oauth-values-retriever'; import { ForwardCategoryRefactorer } from '../workflow/forward-category-refactorer'; +import { Cfn } from '../cfn'; import { SpinningLogger } from '../../_spinning-logger'; import { DiscoveredResource } from '../../generate/_infra/gen1-app'; import { CFNResource } from '../../cfn-template'; @@ -44,8 +45,9 @@ export class AuthCognitoForwardRefactorer extends ForwardCategoryRefactorer { private readonly appId: string, private readonly environmentName: string, protected readonly resource: DiscoveredResource, + cfn: Cfn, ) { - super(gen1Env, gen2Branch, clients, region, accountId, logger, resource); + super(gen1Env, gen2Branch, clients, region, accountId, logger, resource, cfn); } protected resourceTypes(): string[] { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts index a58c60d311e..b7767ebf8d9 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts @@ -49,16 +49,29 @@ const EMPTY_HOLDING_TEMPLATE: CFNTemplate = { * Wraps update, refactor, and change set APIs behind a single client instance. */ export class Cfn { - constructor( - private readonly client: CloudFormationClient, - private readonly logger: SpinningLogger, - private readonly resource?: DiscoveredResource, - ) { + private readonly updateStackClaims = new Set(); + + constructor(private readonly client: CloudFormationClient, private readonly logger: SpinningLogger) { if (!fs.existsSync(OUTPUT_DIRECTORY)) { fs.mkdirSync(OUTPUT_DIRECTORY, { recursive: true }); } } + /** + * Returns true if the stack has been claimed for update by a refactorer. + */ + public isUpdateClaimed(stackName: string): boolean { + return this.updateStackClaims.has(stackName); + } + + /** + * Marks a stack as claimed for update. Call at plan time to prevent + * duplicate update operations across refactorers sharing a stack. + */ + public claimUpdate(stackName: string): void { + this.updateStackClaims.add(stackName); + } + /** * Updates a stack with the given template. * No-ops if no updates are needed. Throws on failure. @@ -67,8 +80,9 @@ export class Cfn { readonly stackName: string; readonly parameters: Parameter[]; readonly templateBody: CFNTemplate; + readonly resource?: DiscoveredResource; }): Promise { - const { stackName, parameters, templateBody } = params; + const { stackName, parameters, templateBody, resource } = params; try { const input: UpdateStackCommandInput = { TemplateBody: JSON.stringify(templateBody), @@ -78,7 +92,7 @@ export class Cfn { Tags: [], }; writeUpdateSnapshot(input); - this.info(`Updating stack: ${extractStackNameFromId(stackName)}`); + this.info(`Updating stack: ${extractStackNameFromId(stackName)}`, resource); await this.client.send(new UpdateStackCommand(input)); } catch (e) { if (e && typeof e === 'object' && 'message' in e && typeof e.message === 'string' && e.message.includes(NO_UPDATES_MESSAGE)) { @@ -86,7 +100,7 @@ export class Cfn { } throw e; } - this.info(`Waiting for stack update to complete: ${extractStackNameFromId(stackName)}`); + this.info(`Waiting for stack update to complete: ${extractStackNameFromId(stackName)}`, resource); await waitUntilStackUpdateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: stackName }); } @@ -94,11 +108,11 @@ export class Cfn { * Creates and executes a CloudFormation stack refactor. * Throws on failure. */ - public async refactor(resourceMappings: ResourceMapping[]): Promise { + public async refactor(resourceMappings: ResourceMapping[], resource?: DiscoveredResource): Promise { const sourceStackId = resourceMappings[0].Source.StackName; const targetStackId = resourceMappings[0].Destination.StackName; - this.info(`Creating stack refactor: ${extractStackNameFromId(sourceStackId)} → ${extractStackNameFromId(targetStackId)}`); + this.info(`Creating stack refactor: ${extractStackNameFromId(sourceStackId)} → ${extractStackNameFromId(targetStackId)}`, resource); const targetStack = await this.findStack(targetStackId); @@ -136,19 +150,19 @@ export class Cfn { }); } - this.info(`Waiting for stack refactor creation to complete: ${StackRefactorId}`); + this.info(`Waiting for stack refactor creation to complete: ${StackRefactorId}`, resource); await waitUntilStackRefactorCreateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackRefactorId }); await this.client.send(new ExecuteStackRefactorCommand({ StackRefactorId })); - this.info(`Waiting for stack refactor execution to complete: ${StackRefactorId}`); + this.info(`Waiting for stack refactor execution to complete: ${StackRefactorId}`, resource); await waitUntilStackRefactorExecuteComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackRefactorId }); - this.info(`Waiting for source stack update: ${extractStackNameFromId(sourceStackId)}`); + this.info(`Waiting for source stack update: ${extractStackNameFromId(sourceStackId)}`, resource); await waitUntilStackUpdateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: sourceStackId }); // Destination may be newly created (EnableStackCreation) or updated - this.info(`Waiting for destination stack: ${extractStackNameFromId(targetStackId)}`); + this.info(`Waiting for destination stack: ${extractStackNameFromId(targetStackId)}`, resource); if (targetStack) { await waitUntilStackUpdateComplete({ client: this.client, maxWaitTime: MAX_WAIT_TIME_SECONDS }, { StackName: targetStackId }); } else { @@ -242,11 +256,11 @@ export class Cfn { * Deletes a stack and waits for deletion to complete. * No-ops if the stack does not exist. */ - public async deleteStack(stackName: string): Promise { + public async deleteStack(stackName: string, resource?: DiscoveredResource): Promise { try { - this.info(`Deleting stack: ${extractStackNameFromId(stackName)}`); + this.info(`Deleting stack: ${extractStackNameFromId(stackName)}`, resource); await this.client.send(new DeleteStackCommand({ StackName: stackName })); - this.info(`Waiting for stack deletion: ${extractStackNameFromId(stackName)}`); + this.info(`Waiting for stack deletion: ${extractStackNameFromId(stackName)}`, resource); await waitUntilStackDeleteComplete({ client: this.client, maxWaitTime: 300 }, { StackName: stackName }); } catch (error: unknown) { if ( @@ -309,8 +323,9 @@ export class Cfn { return lines.join('\n'); } - private info(message: string) { - this.logger.info(`${this.resource ? `[${this.resource.category}/${this.resource.resourceName}] ` : ''}${message}`); + private info(message: string, resource?: DiscoveredResource) { + const prefix = resource ? `[${resource.category}/${resource.resourceName}] ` : ''; + this.logger.info(`${prefix}${message}`); } } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts index 69eb0156060..0ec61fe48b1 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts @@ -20,6 +20,7 @@ import { Gen1App } from '../generate/_infra/gen1-app'; import { Assessment } from '../_assessment'; import { AuthUserPoolGroupsForwardRefactorer } from './auth/auth-user-pool-groups-forward'; import { AuthUserPoolGroupsRollbackRefactorer } from './auth/auth-user-pool-groups-rollback'; +import { Cfn } from './cfn'; export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { /** @@ -52,7 +53,7 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { public async forward(): Promise { const toStack = this.extractParameters(); - const { clients, accountId, gen1Env, gen2Branch } = await this.createInfrastructure(toStack); + const { clients, accountId, gen1Env, gen2Branch, cfn } = await this.createInfrastructure(toStack); const gen1App = await Gen1App.create({ appId: this.appId, region: this.region, envName: this.currentEnvName, clients }); const discovered = gen1App.discover(); @@ -73,23 +74,28 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { this.appId, this.currentEnvName, resource, + cfn, ), ); break; case 'auth:Cognito-UserPool-Groups': refactorers.push( - new AuthUserPoolGroupsForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource), + new AuthUserPoolGroupsForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource, cfn), ); break; case 'storage:S3': - refactorers.push(new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource)); + refactorers.push( + new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource, cfn), + ); break; case 'storage:DynamoDB': - refactorers.push(new StorageDynamoForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource)); + refactorers.push( + new StorageDynamoForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource, cfn), + ); break; case 'analytics:Kinesis': refactorers.push( - new AnalyticsKinesisForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource), + new AnalyticsKinesisForwardRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource, cfn), ); break; // Stateless categories — nothing to refactor @@ -117,7 +123,7 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { public async rollback(): Promise { const toStack = this.extractParameters(); - const { clients, accountId, gen1Env, gen2Branch } = await this.createInfrastructure(toStack); + const { clients, accountId, gen1Env, gen2Branch, cfn } = await this.createInfrastructure(toStack); const gen1App = await Gen1App.create({ appId: this.appId, region: this.region, envName: this.currentEnvName, clients }); const discovered = gen1App.discover(); @@ -127,24 +133,28 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { for (const resource of discovered) { switch (resource.key) { case 'auth:Cognito': - refactorers.push(new AuthCognitoRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource)); + refactorers.push( + new AuthCognitoRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource, cfn), + ); break; case 'auth:Cognito-UserPool-Groups': refactorers.push( - new AuthUserPoolGroupsRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource), + new AuthUserPoolGroupsRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource, cfn), ); break; case 'storage:S3': - refactorers.push(new StorageS3RollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource)); + refactorers.push( + new StorageS3RollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource, cfn), + ); break; case 'storage:DynamoDB': refactorers.push( - new StorageDynamoRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource), + new StorageDynamoRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource, cfn), ); break; case 'analytics:Kinesis': refactorers.push( - new AnalyticsKinesisRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource), + new AnalyticsKinesisRollbackRefactorer(gen1Env, gen2Branch, clients, this.region, accountId, this.logger, resource, cfn), ); break; // Stateless categories — nothing to rollback @@ -172,6 +182,7 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { accountId: string; gen1Env: StackFacade; gen2Branch: StackFacade; + cfn: Cfn; }> { const stsClient = new STSClient({}); const { Account: accountId } = await stsClient.send(new GetCallerIdentityCommand({})); @@ -182,8 +193,9 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { const clients = new AwsClients({ region: this.region }); const gen1Env = new StackFacade(clients, this.rootStackName); const gen2Branch = new StackFacade(clients, toStack); + const cfn = new Cfn(clients.cloudFormation, this.logger); - return { clients, accountId, gen1Env, gen2Branch }; + return { clients, accountId, gen1Env, gen2Branch, cfn }; } /** diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts index 0fdc6ec2e9b..44f8f130258 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts @@ -8,7 +8,6 @@ import { import { AmplifyError } from '@aws-amplify/amplify-cli-core'; import { AwsClients } from '../aws-clients'; import { CFNTemplate } from '../cfn-template'; -import { ResolvedStack } from './workflow/category-refactorer'; /** * Lazy-loading, caching facade over a CloudFormation stack hierarchy. @@ -16,8 +15,6 @@ import { ResolvedStack } from './workflow/category-refactorer'; * Cache entries are evicted on rejection to allow retries. */ export class StackFacade { - private readonly updatedStacks = new Map(); - constructor(private readonly clients: AwsClients, public readonly rootStackName: string) {} /** @@ -58,12 +55,4 @@ export class StackFacade { const response = await this.clients.cloudFormation.send(new DescribeStackResourcesCommand({ StackName: stackId })); return response.StackResources ?? []; } - - public isUpdated(stack: ResolvedStack): boolean { - return this.updatedStacks.get(stack.stackId) === true; - } - - public markUpdated(stack: ResolvedStack) { - this.updatedStacks.set(stack.stackId, true); - } } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index 836b4d7f534..a949306654b 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -64,11 +64,8 @@ export abstract class CategoryRefactorer implements Planner { protected readonly accountId: string, protected readonly logger: SpinningLogger, protected readonly resource: DiscoveredResource, - ) { - this.cfn = new Cfn(clients.cloudFormation, logger, resource); - } - - protected readonly cfn: Cfn; + protected readonly cfn: Cfn, + ) {} /** * Computes the full operation plan for this category. @@ -158,10 +155,12 @@ export abstract class CategoryRefactorer implements Planner { /** * Creates operations to update the source stack with the resolved template. - * Adds a placeholder resource if removing the mapped resources would leave the stack empty. - * Rollback overrides this to return []. + * Skips if the stack was already updated by a previous refactorer. */ protected async updateSource(source: ResolvedStack): Promise { + if (this.cfn.isUpdateClaimed(source.stackId)) return []; + this.cfn.claimUpdate(source.stackId); + const sourceStackName = extractStackNameFromId(source.stackId); const report = await this.createChangeSetReport(source); return [ @@ -180,6 +179,7 @@ export abstract class CategoryRefactorer implements Planner { stackName: source.stackId, parameters: source.parameters, templateBody: source.resolvedTemplate, + resource: this.resource, }); }, }, @@ -188,9 +188,12 @@ export abstract class CategoryRefactorer implements Planner { /** * Creates operations to update the target stack with the resolved template. - * Rollback overrides this to return []. + * Skips if the stack was already updated by a previous refactorer. */ protected async updateTarget(target: ResolvedStack): Promise { + if (this.cfn.isUpdateClaimed(target.stackId)) return []; + this.cfn.claimUpdate(target.stackId); + const targetStackName = extractStackNameFromId(target.stackId); const report = await this.createChangeSetReport(target); return [ @@ -209,6 +212,7 @@ export abstract class CategoryRefactorer implements Planner { stackName: target.stackId, parameters: target.parameters, templateBody: target.resolvedTemplate, + resource: this.resource, }); }, }, @@ -251,7 +255,7 @@ export abstract class CategoryRefactorer implements Planner { return [`${header}\n\n${table}`]; }, execute: async () => { - await this.cfn.refactor(blueprint.mappings); + await this.cfn.refactor(blueprint.mappings, this.resource); }, }, ]; diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index 9a61ec51f10..5f40cc7f790 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -114,24 +114,6 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { return { stackId, resolvedTemplate: resolved, parameters }; } - protected override async updateSource(source: ResolvedStack): Promise { - if (this.gen1Env.isUpdated(source)) { - return []; - } - const operations = super.updateSource(source); - this.gen1Env.markUpdated(source); - return operations; - } - - protected override async updateTarget(target: ResolvedStack): Promise { - if (this.gen2Branch.isUpdated(target)) { - return []; - } - const operations = super.updateTarget(target); - this.gen2Branch.markUpdated(target); - return operations; - } - /** * Moves Gen2 resources to a holding stack before the main refactor. * Templates are fetched fresh at execution time. @@ -154,7 +136,7 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { validate: () => undefined, describe: async () => [`Delete stale holding stack '${extractStackNameFromId(holdingStackName)}'`], execute: async () => { - await this.cfn.deleteStack(holdingStackName); + await this.cfn.deleteStack(holdingStackName, this.resource); }, }); } @@ -170,7 +152,7 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { return [`${header}\n\n${table}`]; }, execute: async () => { - await this.cfn.refactor(resourceMappings); + await this.cfn.refactor(resourceMappings, this.resource); }, }); diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index 36104a02d1c..cdceb3f1bbb 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -89,14 +89,6 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { return { stackId, resolvedTemplate: originalTemplate, parameters }; } - protected override async updateSource(_source: ResolvedStack): Promise { - return []; - } - - protected override async updateTarget(_target: ResolvedStack): Promise { - return []; - } - /** * Rollback: no pre-move operations. */ @@ -134,6 +126,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { stackName: holdingStackName, parameters: [], templateBody: holdingTemplate, + resource: this.resource, }); }, }, @@ -148,7 +141,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { return [`${header}\n\n${table}`]; }, execute: async () => { - await this.cfn.refactor(resourceMappings); + await this.cfn.refactor(resourceMappings, this.resource); }, }, ]; From 32091b14639295066172cf6fec2b6751346272f4 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sun, 22 Mar 2026 22:10:21 -0400 Subject: [PATCH 32/70] test(cli-internal): update refactor tests for new interfaces Update all refactor test files to match the new API: SDK ResourceMapping instead of MoveMapping, slim RefactorBlueprint with only mappings + stack IDs, shared Cfn instance passed to constructors, and resolveDependencies taking no resource IDs. Update rollback plan test to expect updateSource/updateTarget operations (rollback now resolves and updates both stacks). Remove holding-stack.test.ts (module no longer exists). Rewrite build-refactor-templates.test.ts as minimal constant tests since buildBlueprint was removed. Update refactor.md docs to reflect current architecture. --- Prompt: make all the tests compile, update docs. --- .../src/commands/gen2-migration/refactor.md | 390 ++++++------------ .../refactor/auth-forward-mapping.test.ts | 35 +- .../refactor/auth-forward-plan.test.ts | 8 +- .../refactor/auth-rollback-plan.test.ts | 17 +- .../refactor/build-refactor-templates.test.ts | 187 +-------- .../refactor/cfn-dependency-resolver.test.ts | 51 +-- .../default-resource-mappings.test.ts | 73 ++-- .../refactor/forward-beforemove.test.ts | 110 +++-- .../refactor/holding-stack.test.ts | 44 -- .../refactor/rollback-aftermove.test.ts | 142 +++---- .../workflow/rollback-category-refactorer.ts | 2 +- 11 files changed, 319 insertions(+), 740 deletions(-) delete mode 100644 packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/holding-stack.test.ts diff --git a/docs/packages/amplify-cli/src/commands/gen2-migration/refactor.md b/docs/packages/amplify-cli/src/commands/gen2-migration/refactor.md index 68871b4f1dc..ab9b0a94eab 100644 --- a/docs/packages/amplify-cli/src/commands/gen2-migration/refactor.md +++ b/docs/packages/amplify-cli/src/commands/gen2-migration/refactor.md @@ -1,316 +1,174 @@ # refactor -The refactor module is a CloudFormation stack refactoring utility for moving stateful resources from AWS Amplify Gen1 stacks to Gen2 stacks. It uses the CloudFormation StackRefactor API to atomically transfer resource ownership between stacks without recreating resources, preserving data and avoiding service disruption during migration. - -During Amplify Gen1 to Gen2 migration, stateful resources like Cognito User Pools and S3 buckets cannot simply be deleted and recreated—this would result in data loss (user accounts, stored files). The refactor module solves this by using CloudFormation's stack refactor capability to transfer resource ownership between stacks while keeping the physical resources intact. The module provides an interactive workflow that assesses available resources, allows selective category migration, and generates the necessary CloudFormation templates. - -Primary consumers include the `AmplifyMigrationRefactorStep` in gen2-migration-core, Amplify CLI users running the refactor migration step, and DevOps engineers managing Amplify infrastructure transitions. - -## Key Responsibilities - -- Parse and validate Gen1 and Gen2 CloudFormation stack structures to identify category stacks (auth, storage) and their resources -- Assess available resources for migration with interactive category selection, displaying resource counts and types per category -- Generate pre-processed CloudFormation templates by resolving parameters, conditions, outputs, and dependencies for both source and destination stacks -- Execute CloudFormation stack refactor operations to atomically move resources between Gen1 and Gen2 stacks using resource mappings -- Handle OAuth provider credentials retrieval from SSM and Cognito for auth category migrations with social login providers +The refactor module moves stateful CloudFormation resources between Amplify Gen1 and Gen2 stacks using the CloudFormation StackRefactor API. Resources are transferred atomically without recreation, preserving data (user accounts, stored files, etc.) during migration. ## Architecture -The module uses a layered architecture with orchestration, template generation, and resolution layers. `AmplifyMigrationRefactorStep` orchestrates the workflow, `TemplateGenerator` manages category-level operations, `CategoryTemplateGenerator` handles resource-level transformations, and four resolver classes (Parameter, Condition, Dependency, Output) transform CloudFormation templates for refactoring. The module uses CloudFormation's `CreateStackRefactor` and `ExecuteStackRefactor` APIs for atomic resource transfers. +The module follows a plan-then-execute model. Each category (auth, storage, analytics) gets a `CategoryRefactorer` that produces a list of `AmplifyMigrationOperation`s during planning. Operations are collected into a `Plan`, presented to the user for confirmation, then executed sequentially. -```mermaid -flowchart TD - subgraph Orchestration - AMRS["AmplifyMigrationRefactorStep"] - end - - subgraph "Template Generation" - TG["TemplateGenerator"] - CTG["CategoryTemplateGenerator"] - end - - subgraph "Resolvers" - PR["CfnParameterResolver"] - OR["CfnOutputResolver"] - DR["CfnDependencyResolver"] - CR["CFNConditionResolver"] - end - - subgraph "Stack Operations" - CSU["cfn-stack-updater"] - CSRU["cfn-stack-refactor-updater"] - end - - subgraph "OAuth Support" - OVR["oauth-values-retriever"] - end - - AMRS -->|"orchestrates"| TG - TG -->|"per category"| CTG - CTG -->|"1. resolve params"| PR - PR -->|"2. resolve outputs"| OR - OR -->|"3. resolve deps"| DR - DR -->|"4. resolve conditions"| CR - CTG -->|"update stacks"| CSU - CTG -->|"refactor stacks"| CSRU - CTG -->|"auth with OAuth"| OVR ``` - -| Component | File | Purpose | -| -------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `AmplifyMigrationRefactorStep` | `refactor.ts` | Main orchestrator implementing `AmplifyMigrationStep` interface. Handles parameter extraction, resource mapping validation, interactive category selection, and delegates to TemplateGenerator for execution. | -| `TemplateGenerator` (internal) | `generators/template-generator.ts` | Core engine that parses category stacks from Gen1/Gen2 root stacks, initializes CategoryTemplateGenerators for each category, and coordinates the refactor process across categories. | -| `CategoryTemplateGenerator` (internal) | `generators/category-template-generator.ts` | Category-specific template processor that generates pre-processed templates for Gen1 and Gen2 stacks, builds logical ID mappings between stacks, and produces final refactor templates. | -| `CfnParameterResolver` (internal) | `resolvers/cfn-parameter-resolver.ts` | Resolves CloudFormation `Ref` expressions for parameters by substituting actual values. Handles `CommaDelimitedList` and `List` types, and `AWS::StackName` pseudo-parameter. | -| `CFNConditionResolver` | `resolvers/cfn-condition-resolver.ts` | Evaluates CloudFormation conditions (`Fn::Equals`, `Fn::Not`, `Fn::Or`, `Fn::And`) and resolves `Fn::If` expressions in resource properties. Removes resources with unmet conditions. | -| `CfnDependencyResolver` | `resolvers/cfn-dependency-resolver.ts` | Adjusts `DependsOn` relationships for resources being refactored. Ensures resources moving to Gen2 only depend on other moving resources. | -| `CfnOutputResolver` | `resolvers/cfn-output-resolver.ts` | Resolves `Ref` and `Fn::GetAtt` expressions using stack outputs and physical resource IDs. Constructs ARNs for S3, Cognito, IAM, SQS, and Lambda resources. | -| `cfn-stack-updater` | `cfn-stack-updater.ts` | CloudFormation stack update utilities with polling for completion state. Handles 'no updates' scenarios gracefully. | -| `cfn-stack-refactor-updater` | `cfn-stack-refactor-updater.ts` | CloudFormation stack refactor execution using `CreateStackRefactor` and `ExecuteStackRefactor` APIs. Polls for completion and validates both source and destination stack states. | -| `oauth-values-retriever` | `oauth-values-retriever.ts` | Retrieves OAuth provider credentials from Cognito (client_id, client_secret) and SSM (Sign In With Apple private key) for auth migrations with social login. | - -## Interface - -### CLI Command - -The refactor step is invoked as part of the gen2-migration workflow: - -```bash -amplify gen2-migration refactor --to [--resourceMappings file:///path/to/mappings.json] +AmplifyMigrationRefactorStep (refactor.ts) + ├── discovers resources via Gen1App + ├── creates shared Cfn instance + StackFacade per root stack + └── instantiates CategoryRefactorers per discovered resource + │ + ├── ForwardCategoryRefactorer (Gen1 → Gen2) + │ ├── auth/auth-cognito-forward.ts + │ ├── auth/auth-user-pool-groups-forward.ts + │ ├── storage/storage-forward.ts + │ ├── storage/storage-dynamo-forward.ts + │ └── analytics/analytics-forward.ts + │ + └── RollbackCategoryRefactorer (Gen2 → Gen1) + ├── auth/auth-cognito-rollback.ts + ├── auth/auth-user-pool-groups-rollback.ts + ├── storage/storage-rollback.ts + ├── storage/storage-dynamo-rollback.ts + └── analytics/analytics-rollback.ts ``` -| Option | Description | -| --------------------------- | ----------------------------------------------------------------------- | -| `--to ` | Required. Target Gen2 stack name for resource migration. | -| `--resourceMappings ` | Optional. Custom resource mappings file with `file://` protocol prefix. | - -### Exports - -| Export | Type | Signature | Description | -| ------------------------------ | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | -| `AmplifyMigrationRefactorStep` | class | `forward(): Promise; rollback(): Promise; assess(assessment: Assessment): Promise` | Main entry point implementing the `AmplifyMigrationStep` interface. | -| `TemplateGenerator` | class | `initializeForAssessment(): Promise; getStackTemplate(stackId): Promise; getResourcesToMigrate(template, category): string[]; generateSelectedCategories(categories, resourceMap?): Promise` | Core template generation engine. | -| `CategoryTemplateGenerator` | class | `generateGen1PreProcessTemplate(): Promise; generateGen2PreProcessTemplate(): Promise; moveGen2ResourcesToHoldingStack(resolvedGen2Template: CFNTemplate): Promise; generateRefactorTemplates(...): CFNStackRefactorTemplates` | Category-specific template generator. | -| `tryRefactorStack` | function | `async (cfnClient, input, attempts?): Promise<[boolean, FailedRefactorResponse \| undefined]>` | Executes CloudFormation stack refactor operation with polling. | -| `tryUpdateStack` | function | `async (cfnClient, stackName, parameters, templateBody, attempts?): Promise` | Updates a CloudFormation stack with given template. | -| `CfnParameterResolver` | class | `resolve(parameters: Parameter[]): CFNTemplate` | Resolves CloudFormation parameter references. | -| `CFNConditionResolver` | class | `resolve(parameters: Parameter[]): CFNTemplate` | Resolves CloudFormation conditions. | -| `CfnDependencyResolver` | class | `resolve(resourcesToRefactor: string[]): CFNTemplate` | Resolves DependsOn relationships. | -| `CfnOutputResolver` | class | `resolve(logicalResourceIds, stackOutputs, stackResources): CFNTemplate` | Resolves Ref and Fn::GetAtt references. | -| `retrieveOAuthValues` | function | `async (params: RetrieveOAuthValuesParameters): Promise` | Retrieves OAuth provider credentials from Cognito and SSM. | - -### Supported Resource Types +### Key Components -The module supports migrating the following CloudFormation resource types: +| Component | File | Purpose | +| ------------------------------ | ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `AmplifyMigrationRefactorStep` | `refactor.ts` | Orchestrator. Creates infrastructure, discovers resources, instantiates refactorers, builds the plan. | +| `CategoryRefactorer` | `workflow/category-refactorer.ts` | Abstract base class. Implements the shared plan() workflow: resolve → build mappings → update → beforeMove → move → afterMove. | +| `ForwardCategoryRefactorer` | `workflow/forward-category-refactorer.ts` | Forward direction base. Resolves Gen1 source and Gen2 target templates. Moves Gen2 resources to a holding stack before the main refactor. | +| `RollbackCategoryRefactorer` | `workflow/rollback-category-refactorer.ts` | Rollback direction base. Resolves Gen2 source and Gen1 target. Restores holding stack resources back to Gen2 after the main refactor. | +| `Cfn` | `cfn.ts` | Shared CloudFormation client wrapper. Handles update, refactor, changeset, delete, and template fetch operations. Tracks update claims to prevent duplicate stack updates across refactorers. | +| `StackFacade` | `stack-facade.ts` | Read-only facade over a CloudFormation stack hierarchy. Fetches nested stacks, templates, stack descriptions, and resources. | +| Resolvers | `resolvers/` | Pure functions that transform CloudFormation templates: parameter substitution, output resolution, dependency stripping, condition evaluation. | +| `oauth-values-retriever` | `oauth-values-retriever.ts` | Retrieves OAuth provider credentials from Cognito and SSM for auth migrations with social login. | -| Category | Resource Types | Refactorer Class | -| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------- | -| `auth` | `AWS::Cognito::UserPool`, `AWS::Cognito::UserPoolClient`, `AWS::Cognito::IdentityPool`, `AWS::Cognito::IdentityPoolRoleAttachment`, `AWS::Cognito::UserPoolDomain` | `AuthCognitoForwardRefactorer` | -| `auth-user-pool-group` | `AWS::Cognito::UserPoolGroup` | (handled by AuthCognitoForwardRefactorer) | -| `storage` (S3) | `AWS::S3::Bucket` | `StorageS3ForwardRefactorer` | -| `storage` (DynamoDB) | `AWS::DynamoDB::Table` | `StorageDynamoForwardRefactorer` | -| `analytics` | `AWS::Kinesis::Stream` | `AnalyticsKinesisForwardRefactorer` | +## Workflow -### Resource Discovery +### Forward (Gen1 → Gen2) -The refactor step uses `Gen1App.discover()` to iterate all resources from `amplify-meta.json` and dispatches by `resource.key` (a typed `ResourceKey`) via an exhaustive switch statement. The same switch is used by the `assess()` method to record support into an `Assessment` collector. - -Stateless categories (function, api) are skipped during refactoring — they have no stateful resources to move. - -### Multi-Resource Category Validation - -Refactorers assume a single resource per category. The `validateSingleResourcePerCategory()` function throws `AmplifyError` if any refactorer category (auth, storage, analytics) has more than one resource. - -## Dependencies - -**Internal:** - -- `gen2-migration-core` — `AmplifyMigrationStep` base class, `Plan` class, `SpinningLogger` class, `AmplifyGen2MigrationValidations` for lock status validation - -**External:** -| Package | Purpose | -|---------|---------| -| `@aws-sdk/client-cloudformation` | CloudFormation operations: DescribeStacks, DescribeStackResources, GetTemplate, UpdateStack, CreateStackRefactor, ExecuteStackRefactor, DescribeStackRefactor | -| `@aws-sdk/client-ssm` | SSM GetParameter for retrieving Sign In With Apple private key during OAuth migrations | -| `@aws-sdk/client-cognito-identity-provider` | DescribeIdentityProvider for retrieving OAuth provider details (client_id, client_secret) | -| `@aws-sdk/client-sts` | GetCallerIdentity for AWS account ID used in ARN construction | -| `@aws-amplify/amplify-cli-core` | AmplifyError for structured error handling, stateManager for project state | -| `@aws-amplify/amplify-prompts` | prompter for interactive category selection (yesOrNo) | -| `fs-extra` | File system operations for reading resource mappings JSON files | -| `node:fs/promises` | Creating templates output directory | -| `node:assert` | Runtime assertions for validation throughout the codebase | - -## Code Patterns - -### Resolver Chain Pattern - -Four resolver classes are applied sequentially to transform CloudFormation templates. Each resolver handles a specific aspect of template resolution, producing a fully resolved template ready for refactoring. The order matters because each resolver depends on previous transformations. - -```typescript -// Order: Parameter → Output → Dependency → Condition -const gen1ParametersResolvedTemplate = new CfnParameterResolver(oldGen1Template, stackName).resolve(Parameters); -const gen1TemplateWithOutputsResolved = new CfnOutputResolver(gen1ParametersResolvedTemplate, region, accountId).resolve( - logicalResourceIds, - Outputs, - stackResources, -); -const gen1TemplateWithDepsResolved = new CfnDependencyResolver(gen1TemplateWithOutputsResolved).resolve(logicalResourceIds); -const gen1TemplateWithConditionsResolved = new CFNConditionResolver(gen1TemplateWithDepsResolved).resolve(Parameters); +```mermaid +flowchart TD + A[Resolve Gen1 source template] --> B[Resolve Gen2 target template] + B --> C[Build resource mappings by type] + C --> D{mappings empty?} + D -- yes --> E[no-op] + D -- no --> F[Add placeholder if source would be empty] + F --> G["Update Gen1 stack (resolve refs)"] + G --> H["Update Gen2 stack (resolve refs)"] + H --> I[Move Gen2 resources → holding stack] + I --> J[Move Gen1 resources → Gen2 stack] ``` -### Logical ID Mapping +The forward workflow resolves both stack templates to replace `Ref`/`Fn::GetAtt` with literal values, then pushes those resolved templates via UpdateStack. This ensures no dangling references when resources are later removed. Gen2 resources are moved to a temporary holding stack first (preserving test data), then Gen1 resources are moved into the Gen2 stack. -Maps Gen1 resource logical IDs to Gen2 equivalents based on resource type. Handles special cases like UserPoolClient (Web vs Native) and UserPoolGroup naming conventions. +### Rollback (Gen2 → Gen1) -```typescript -const GEN1_RESOURCE_TYPE_TO_LOGICAL_RESOURCE_IDS_MAP = new Map([ - [CFN_AUTH_TYPE.UserPool.valueOf(), 'UserPool'], - [CFN_AUTH_TYPE.UserPoolClient.valueOf(), 'UserPoolClientWeb'], - [CFN_AUTH_TYPE.IdentityPool.valueOf(), 'IdentityPool'], -]); +```mermaid +flowchart TD + A[Resolve Gen2 source template] --> B[Resolve Gen1 target template] + B --> C[Build resource mappings by Gen1 logical IDs] + C --> D{mappings empty?} + D -- yes --> E[no-op] + D -- no --> F[Add placeholder if source would be empty] + F --> G["Update Gen2 stack (resolve refs)"] + G --> H["Update Gen1 stack (resolve refs)"] + H --> I[Move Gen2 resources → Gen1 stack] + I --> J{holding stack exists?} + J -- no --> K[done] + J -- yes --> L[Add placeholder to holding stack] + L --> M[Move holding resources → Gen2 stack] ``` -### Polling with Timeout +The rollback workflow mirrors forward but in reverse. It resolves and updates both stacks (necessary if the Gen2 app was redeployed after forward, which introduces fresh `Fn::GetAtt` references). After moving resources back to Gen1, it restores any holding stack resources back to Gen2. The holding stack is left with just a placeholder resource — cleanup is handled by `amplify gen2-migration decommission`. -CloudFormation operations are asynchronous. The module polls for completion state with configurable attempts and intervals. Stack updates poll every 1.5s for 60 attempts (90s), refactor operations poll every 12s for 300 attempts (60min). +### plan() Lifecycle -```typescript -const POLL_ATTEMPTS = 300; -const POLL_INTERVAL_MS = 12000; -do { - const response = await cfnClient.send(new DescribeStackRefactorCommand({ StackRefactorId })); - if (exitCondition(response)) return response; - await new Promise((res) => setTimeout(() => res(''), POLL_INTERVAL_MS)); - attempts--; -} while (attempts > 0); -``` +Each `CategoryRefactorer.plan()` follows this sequence: -### Category Configuration Map +1. **Discover stacks**: `fetchSourceStackId()` / `fetchDestStackId()` find the nested stacks by logical ID prefix. +2. **Resolve templates**: `resolveSource()` / `resolveTarget()` fetch templates from CloudFormation and run the resolver chain to replace intrinsic functions with actual values. +3. **Build mappings**: `buildResourceMappings()` matches source resources to target resources by type (forward) or by known Gen1 logical IDs (rollback). Returns `ResourceMapping[]` (SDK type). +4. **Add placeholder**: If removing all mapped resources would leave the source stack empty, a `WaitConditionHandle` placeholder is added to the resolved template. +5. **Update stacks**: `updateSource()` / `updateTarget()` push the resolved templates to CloudFormation via `Cfn.update()`. This replaces `Ref`/`Fn::GetAtt` with literal values so resources can be safely removed later. Dedup: if a stack was already claimed by a previous refactorer, the update is skipped. +6. **Before move** (forward only): Moves Gen2 target resources to a temporary holding stack via `Cfn.refactor()`. +7. **Move**: The main refactor — moves resources from source to target via `Cfn.refactor()`. +8. **After move** (rollback only): Restores holding stack resources back to Gen2, then deletes the holding stack. -Uses a configuration object to define which CloudFormation resource types can be migrated for each category. This enables extensibility for new categories. +### Template Resolution -```typescript -private readonly categoryGeneratorConfig = { - auth: { resourcesToRefactor: AUTH_RESOURCES_TO_REFACTOR }, - 'auth-user-pool-group': { resourcesToRefactor: AUTH_USER_POOL_GROUP_RESOURCES_TO_REFACTOR }, - storage: { resourcesToRefactor: STORAGE_RESOURCES_TO_REFACTOR }, -} as const; -``` +Templates are resolved to replace CloudFormation intrinsic functions with literal values. This is necessary because the StackRefactor API submits new template bodies for both stacks, and any `Ref`/`Fn::GetAtt` pointing to a resource being moved would become a dangling reference. -### ARN Construction +**Forward (Gen1 source):** parameters → outputs → dependencies → conditions +**Forward (Gen2 target):** dependencies → outputs +**Rollback (Gen2 source):** parameters → outputs → dependencies +**Rollback (Gen1 target):** no resolution (template used as-is) -Constructs ARNs for various AWS resource types when resolving `Fn::GetAtt` references. Uses region and account ID from AWS context. +The dependency resolver unconditionally strips all `DependsOn` from templates. `DependsOn` only controls deployment ordering, which is irrelevant during refactor since all resources already exist. -```typescript -case 'AWS::Cognito::UserPool': - return { Arn: `arn:aws:cognito-idp:${this.region}:${this.accountId}:userpool/${resourceIdentifier}` }; -case 'AWS::S3::Bucket': - return { Arn: `arn:aws:s3:::${resourceIdentifier}` }; -``` +### Deferred Template Fetching -### Graceful No-Op Handling +The `RefactorBlueprint` carries only mappings and stack IDs — no templates. Templates are fetched fresh at execution time inside each operation's `execute()` closure. This ensures that when multiple refactorers target the same stack (e.g., auth Cognito and auth UserPoolGroups both target the Gen2 auth stack), the second refactorer sees the stack as it actually is after the first refactorer has already modified it. -Stack update operations handle 'No updates are to be performed' responses gracefully, returning `UPDATE_COMPLETE` instead of throwing errors. +`updateSource`/`updateTarget` are the exception — they use plan-time resolved templates because they run before any moves and the templates are still fresh. -```typescript -try { - await cfnClient.send(new UpdateStackCommand({ ... })); - return pollStackForCompletionState(cfnClient, stackName, attempts); -} catch (e) { - if (e.message.includes('No updates are to be performed')) { - return UPDATE_COMPLETE; - } - throw e; -} -``` +### Update Deduplication -### Resource Mapping File Protocol +When two refactorers share a stack (e.g., both auth refactorers target the same Gen2 auth stack), only the first one should update it. The shared `Cfn` instance tracks "update claims" — the first refactorer claims the stack at plan time, and the second sees it's already claimed and returns no update operations. -Custom resource mappings must use `file://` protocol prefix for security and clarity. The module validates this prefix before reading the JSON file. +`Cfn.update()` also tracks completed updates so that the `isUpdateClaimed()` check reflects both plan-time claims and execution-time completions. -```typescript -if (!this.resourceMappings.startsWith(FILE_PROTOCOL_PREFIX)) { - throw new Error(`Resource mappings path must start with ${FILE_PROTOCOL_PREFIX}. Example: file:///path/to/mappings.json`); -} -const resourceMapPath = this.resourceMappings.split(FILE_PROTOCOL_PREFIX)[1]; -``` +### Cfn.refactor() Internals -## Known Limitations +`Cfn.refactor()` accepts `ResourceMapping[]` and handles all template manipulation internally: -- Multiple resources of the same type (e.g., multiple DynamoDB tables) are matched arbitrarily by type alone—the mapping may not preserve correct resource correspondence without explicit `--resourceMappings` -- The `--resourceMappings` CLI option is currently disabled (commented out in code) -- Auth with OAuth providers is known to be broken—fails on deployment after refactor when trying to replace IdP that already exists -- The refactor operation has a 60-minute timeout (300 attempts × 12s)—very large stacks may timeout +1. Checks if the target stack exists (only holding stacks may be absent — they're created by `EnableStackCreation`). +2. Fetches both stack templates (or uses an empty template for absent holding stacks). +3. Moves resources between templates based on the mappings. +4. Submits the refactor via `CreateStackRefactor` + `ExecuteStackRefactor`. +5. Waits for both stacks to reach their final state (update or create complete). -## Holding Stack (Gen2 Resource Retention) +## Holding Stack -During forward migration, Gen2 stateful resources are moved to a temporary "holding stack" instead of being deleted. This preserves test data that customers may have created while testing the Gen2 deployment. +During forward migration, Gen2 resources are moved to a temporary holding stack before Gen1 resources are moved into the Gen2 stack. This preserves Gen2 test data and enables rollback. -### How It Works +**Naming:** `{gen2CategoryStackPrefix}-{cfnHashSuffix}-holding` (truncated to 128 chars). -**Forward Migration:** +**Forward:** Gen2 resources → holding stack → Gen1 resources → Gen2 stack. +**Rollback:** Gen2 resources → Gen1 stack → holding resources → Gen2 stack → delete holding stack. -1. Gen1 stack is pre-processed (references resolved) -2. A holding stack is created: `{gen2CategoryStackPrefix}-{cfnHashSuffix}-holding` (the CloudFormation hash suffix after the last dash is preserved for uniqueness; the prefix is truncated if the name would exceed 128 characters) -3. Gen2 stateful resources are moved to the holding stack via StackRefactor -4. Gen1 resources are moved to Gen2 stack via StackRefactor +## Supported Categories -**Rollback:** +| Category | Resource Types | Forward Refactorer | Rollback Refactorer | +| ---------------------- | ---------------------------------------------------------------------------------- | ------------------------------------- | -------------------------------------- | +| auth (Cognito) | UserPool, UserPoolClient, IdentityPool, IdentityPoolRoleAttachment, UserPoolDomain | `AuthCognitoForwardRefactorer` | `AuthCognitoRollbackRefactorer` | +| auth (UserPool Groups) | UserPoolGroup | `AuthUserPoolGroupsForwardRefactorer` | `AuthUserPoolGroupsRollbackRefactorer` | +| storage (S3) | S3::Bucket | `StorageS3ForwardRefactorer` | `StorageS3RollbackRefactorer` | +| storage (DynamoDB) | DynamoDB::Table | `StorageDynamoForwardRefactorer` | `StorageDynamoRollbackRefactorer` | +| analytics (Kinesis) | Kinesis::Stream | `AnalyticsKinesisForwardRefactorer` | `AnalyticsKinesisRollbackRefactorer` | -1. Resources are moved from Gen2 back to Gen1 (existing logic) -2. If a holding stack exists, resources are restored from holding stack to Gen2 -3. The empty holding stack is deleted +Auth Cognito and UserPoolGroups are separate refactorers because they come from different Gen1 stacks but map to the same Gen2 auth stack. -**Decommission:** -After successful migration, run `amplify gen2-migration decommission` to delete any remaining holding stacks. +## Validations -### Holding Stack Structure +Before execution, the `Plan` runs a validation pass over all operations. Each operation can optionally return a validation check that runs before the user is asked to confirm. -```yaml -AWSTemplateFormatVersion: '2010-09-09' -Description: 'Temporary holding stack for Gen2 migration' -Metadata: - AmplifyMigration: - SourceCategoryStack: 'arn:aws:cloudformation:...' - Category: 'auth' -Resources: - # Gen2 resources moved here via StackRefactor - UserPool: - Type: AWS::Cognito::UserPool - ... -``` - -### Key Design Decisions - -- **One holding stack per category**: Matches the per-category refactor flow -- **Logical IDs preserved**: Gen2 logical IDs are kept in the holding stack, simplifying rollback -- **Graceful rollback**: If holding stack is missing during rollback, a warning is logged and rollback continues -- **Standalone stack**: Not nested under Gen1 or Gen2 to avoid CDK interference - -### Related Files - -| File | Purpose | -| ------------------ | ------------------------------------------------------------ | -| `holding-stack.ts` | Utilities for creating, finding, and deleting holding stacks | -| `decommission.ts` | Decommission command implementation | +| Validation | When | What it checks | +| ---------------------- | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Lock status | Before all operations | Fetches the Gen1 root stack's CloudFormation stack policy via `GetStackPolicy` and verifies it matches the expected deny-all policy (`Deny Update:* on *`). This confirms the stack was locked by `amplify gen2-migration lock`, which prevents accidental `amplify push` operations from modifying the Gen1 stack during migration. Fails if no policy exists or if the policy doesn't match exactly. | +| Source stack changeset | Per updateSource operation | Creates a CloudFormation changeset with the resolved template and checks that it produces no unexpected changes. The resolved template should only differ from the deployed template in that intrinsic functions (`Ref`, `Fn::GetAtt`) are replaced with literal values — no resource additions, deletions, or property changes should appear. A non-empty changeset is flagged as a validation failure and the report is shown to the user. | +| Target stack changeset | Per updateTarget operation | Same as source — verifies the resolved target template introduces no unexpected changes. | -## AI Development Notes +Validations that fail are reported in a summary table. The user can choose to proceed despite failures, but the report gives visibility into what will change. -**Important considerations:** +## CLI -- The module uses CloudFormation's StackRefactor API which atomically moves resources between stacks—this is a relatively new AWS feature and may have limitations not documented here -- Four resolver classes must be applied in the correct order: Parameter → Output → Dependency → Condition. The order matters because each resolver depends on previous transformations -- The logical ID mapping between Gen1 and Gen2 is critical—UserPoolClient has special handling (Web vs Native) and UserPoolGroup uses CDK hash suffixes that must be stripped -- OAuth migrations require credentials from both Cognito (client_id, client_secret) and SSM (Sign In With Apple private key)—ensure proper IAM permissions -- The module supports both forward migration (Gen1→Gen2) and rollback (Gen2→Gen1) operations, but rollback has different logical ID mapping logic -- Category stacks are identified by parsing the nested stack's `Description` field as JSON and checking the `stackType` property (e.g., `auth` vs `UserPool-Groups`). - -**Common pitfalls:** +```bash +amplify gen2-migration refactor --to +``` -- The `--to` parameter is required and must point to a valid Gen2 stack name—`InputValidationError` is thrown if missing -- Resource mappings file must use `file://` protocol prefix (e.g., `file:///path/to/mappings.json`)—relative paths without protocol will fail -- User pool groups and auth resources are in the same stack in Gen2 but different stacks in Gen1—the module handles this with 'auth-user-pool-group' category -- Holding stacks must be cleaned up after successful migration using `amplify gen2-migration decommission` +## Dependencies -**Testing guidance:** -Test with deployed Amplify Gen1 projects that have auth and storage categories. Verify the assessment correctly identifies resources to migrate. Test with `--resourceMappings` to verify custom mapping support. Test OAuth migrations with social login providers (Google, Facebook, Sign In With Apple). Verify rollback behavior when refactor fails mid-operation. Test rollback operation (Gen2→Gen1) to ensure bidirectional support works. +| Package | Purpose | +| ------------------------------------------- | ----------------------------------------------------------------------------- | +| `@aws-sdk/client-cloudformation` | Stack operations: describe, update, refactor, changeset, delete, get template | +| `@aws-sdk/client-ssm` | Sign In With Apple private key retrieval | +| `@aws-sdk/client-cognito-identity-provider` | OAuth provider credential retrieval | +| `@aws-sdk/client-sts` | Account ID for ARN construction | diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts index 80054e1704f..f700a5b9848 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts @@ -2,12 +2,12 @@ import { AuthCognitoForwardRefactorer } from '../../../../commands/gen2-migratio import { CFNResource } from '../../../../commands/gen2-migration/cfn-template'; import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; -import { MoveMapping } from '../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; +import { Cfn } from '../../../../commands/gen2-migration/refactor/cfn'; +import { ResourceMapping } from '@aws-sdk/client-cloudformation'; import { noOpLogger } from '../_framework/logger'; -/** Helper: convert MoveMapping[] to Map for easy assertions */ -function toIdMap(mappings: MoveMapping[]): Map { - return new Map(mappings.map((m) => [m.sourceId, m.targetId])); +function toIdMap(mappings: ResourceMapping[]): Map { + return new Map(mappings.map((m) => [m.Source!.LogicalResourceId!, m.Destination!.LogicalResourceId!])); } describe('AuthCognitoForwardRefactorer.buildResourceMappings - UserPoolClient disambiguation', () => { @@ -17,15 +17,26 @@ describe('AuthCognitoForwardRefactorer.buildResourceMappings - UserPoolClient di const gen2Branch = new StackFacade(clients, 'gen2'); return new (class extends AuthCognitoForwardRefactorer { constructor() { - super(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', noOpLogger(), 'appId', 'main', { - category: 'auth', - resourceName: 'test', - service: 'Cognito', - key: 'auth:Cognito', - }); + super( + gen1Env, + gen2Branch, + clients, + 'us-east-1', + '123456789', + noOpLogger(), + 'appId', + 'main', + { + category: 'auth', + resourceName: 'test', + service: 'Cognito', + key: 'auth:Cognito', + }, + null as unknown as Cfn, + ); } - public testBuildResourceMappings(source: Map, target: Map): MoveMapping[] { - return this.buildResourceMappings(source, target); + public testBuildResourceMappings(source: Map, target: Map): ResourceMapping[] { + return this.buildResourceMappings(source, target, 'gen1-auth', 'gen2-auth') as unknown as ResourceMapping[]; } })(); } diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts index 4e5f9484a72..f6cf5ede497 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts @@ -12,9 +12,11 @@ import { ResourceStatus, CreateChangeSetCommand, DescribeChangeSetCommand, + DeleteChangeSetCommand, } from '@aws-sdk/client-cloudformation'; import { SSMClient } from '@aws-sdk/client-ssm'; import { CognitoIdentityProviderClient, DescribeIdentityProviderCommand } from '@aws-sdk/client-cognito-identity-provider'; +import { Cfn } from '../../../../commands/gen2-migration/refactor/cfn'; const ts = new Date(); const rs = ResourceStatus.CREATE_COMPLETE; @@ -80,6 +82,7 @@ function setupMocks(cfnMock: ReturnType) { cfnMock.on(CreateChangeSetCommand).resolves({}); cfnMock.on(DescribeChangeSetCommand).resolves({ Status: 'CREATE_COMPLETE', Changes: [] }); + cfnMock.on(DeleteChangeSetCommand).resolves({}); } describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { @@ -112,6 +115,7 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { 'appId', 'main', { category: 'auth', resourceName: 'test', service: 'Cognito', key: 'auth:Cognito' as const }, + new Cfn(new CloudFormationClient({}), noOpLogger()), ); const ops = await refactorer.plan(); @@ -203,6 +207,7 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { 'appId', 'main', { category: 'auth', resourceName: 'test', service: 'Cognito', key: 'auth:Cognito' as const }, + new Cfn(new CloudFormationClient({}), noOpLogger()), ); const ops = await refactorer.plan(); @@ -259,8 +264,9 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { 'appId', 'main', { category: 'auth', resourceName: 'test', service: 'Cognito', key: 'auth:Cognito' as const }, + new Cfn(new CloudFormationClient({}), noOpLogger()), ); - await expect(refactorer.plan()).rejects.toThrow('unable to find target stack'); + await expect(refactorer.plan()).rejects.toThrow('Unable to find target stack'); }); }); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts index 212361eecb3..ac170fc1a47 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts @@ -10,7 +10,11 @@ import { DescribeStacksCommand, DescribeStackResourcesCommand, ResourceStatus, + CreateChangeSetCommand, + DescribeChangeSetCommand, + DeleteChangeSetCommand, } from '@aws-sdk/client-cloudformation'; +import { Cfn } from '../../../../commands/gen2-migration/refactor/cfn'; const ts = new Date(); const rs = ResourceStatus.CREATE_COMPLETE; @@ -85,12 +89,17 @@ describe('AuthCognitoRollbackRefactorer.plan()', () => { cfnMock.on(GetTemplateCommand, { StackName: 'gen2-auth' }).resolves({ TemplateBody: JSON.stringify(gen2AuthTemplate) }); cfnMock.on(GetTemplateCommand, { StackName: 'gen1-auth' }).resolves({ TemplateBody: JSON.stringify(gen1AuthTemplate) }); + + cfnMock.on(CreateChangeSetCommand).resolves({}); + cfnMock.on(DescribeChangeSetCommand).resolves({ Status: 'CREATE_COMPLETE', Changes: [] }); + cfnMock.on(DeleteChangeSetCommand).resolves({}); } - it('main auth only: produces move operations (no updateSource/updateTarget for rollback)', async () => { + it('main auth: produces updateSource → updateTarget → move → afterMove', async () => { setupBasicMocks(); const clients = new AwsClients({ region: 'us-east-1' }); (clients as any).cloudFormation = new CloudFormationClient({}); + const cfn = new Cfn(new CloudFormationClient({}), noOpLogger()); const refactorer = new AuthCognitoRollbackRefactorer( new StackFacade(clients, 'gen1-root'), new StackFacade(clients, 'gen2-root'), @@ -99,13 +108,15 @@ describe('AuthCognitoRollbackRefactorer.plan()', () => { '123', noOpLogger(), { category: 'auth', resourceName: 'test', service: 'Cognito', key: 'auth:Cognito' as const }, + cfn, ); const ops = await refactorer.plan(); const descriptions = (await Promise.all(ops.map((o) => o.describe()))).flat(); - // Rollback: no updateSource/updateTarget, just move ops + afterMove - expect(descriptions.every((d) => !d.includes('Update source') && !d.includes('Update target'))).toBe(true); + // Rollback now resolves and updates both stacks before moving + expect(descriptions.some((d) => d.includes('Update source'))).toBe(true); + expect(descriptions.some((d) => d.includes('Update target'))).toBe(true); expect(descriptions.some((d) => d.includes('Move'))).toBe(true); }); }); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/build-refactor-templates.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/build-refactor-templates.test.ts index 83af72a07ec..07fda32f0a1 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/build-refactor-templates.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/build-refactor-templates.test.ts @@ -1,183 +1,26 @@ -import { CFNResource, CFNTemplate } from '../../../../commands/gen2-migration/cfn-template'; import { - CategoryRefactorer, - RefactorBlueprint, - ResolvedStack, - MoveMapping, MIGRATION_PLACEHOLDER_LOGICAL_ID, + PLACEHOLDER_RESOURCE, } from '../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; -import { noOpLogger } from '../_framework/logger'; +import { ResourceMapping } from '@aws-sdk/client-cloudformation'; -// Minimal concrete subclass to access protected methods -class TestRefactorer extends (CategoryRefactorer as any) { - private mappingsToReturn: MoveMapping[] = []; - - constructor() { - super(null, null, null, 'us-east-1', '123', noOpLogger()); - } - - setMappings(mappings: MoveMapping[]) { - this.mappingsToReturn = mappings; - } - - public testBuildBlueprint(source: ResolvedStack, target: ResolvedStack): RefactorBlueprint | undefined { - return (this as any).buildBlueprint(source, target); - } - - protected async fetchSourceStackId() { - return undefined; - } - protected async fetchDestStackId() { - return undefined; - } - protected resourceTypes() { - return ['AWS::S3::Bucket', 'AWS::DynamoDB::Table', 'AWS::S3::BucketPolicy', 'AWS::IAM::Policy']; - } - protected buildResourceMappings() { - return this.mappingsToReturn; - } - protected resolveSource() { - return Promise.resolve({} as any); - } - protected resolveTarget() { - return Promise.resolve({} as any); - } - protected beforeMovePlan() { - return []; - } - protected async afterMovePlan() { - return []; - } -} - -const makeTemplate = (resources: Record): CFNTemplate => ({ - AWSTemplateFormatVersion: '2010-09-09', - Description: 'test', - Resources: resources, - Outputs: {}, -}); - -describe('buildBlueprint', () => { - const refactorer = new TestRefactorer(); - - it('returns undefined when source has no matching resources', () => { - const source: ResolvedStack = { - stackId: 'source-stack', - resolvedTemplate: makeTemplate({ - Lambda: { Type: 'AWS::Lambda::Function', Properties: {} }, - }), - parameters: [], - }; - const target: ResolvedStack = { - stackId: 'target-stack', - resolvedTemplate: makeTemplate({}), - parameters: [], - }; - refactorer.setMappings([]); - expect(refactorer.testBuildBlueprint(source, target)).toBeUndefined(); +describe('placeholder constants', () => { + it('placeholder resource is a WaitConditionHandle', () => { + expect(PLACEHOLDER_RESOURCE.Type).toBe('AWS::CloudFormation::WaitConditionHandle'); }); - it('removes resources from source and adds them to target with remapped IDs', () => { - const bucket: CFNResource = { Type: 'AWS::S3::Bucket', Properties: { BucketName: 'my-bucket' } }; - const source: ResolvedStack = { - stackId: 'source-stack', - resolvedTemplate: makeTemplate({ - S3Bucket: bucket, - OtherResource: { Type: 'AWS::Lambda::Function', Properties: {} }, - }), - parameters: [], - }; - const target: ResolvedStack = { - stackId: 'target-stack', - resolvedTemplate: makeTemplate({ - amplifyStorageBucket12345678: { Type: 'AWS::S3::Bucket', Properties: {} }, - }), - parameters: [], - }; - refactorer.setMappings([{ sourceId: 'S3Bucket', targetId: 'amplifyStorageBucket12345678', resource: bucket }]); - - const blueprint = refactorer.testBuildBlueprint(source, target)!; - - // Source afterRemoval: S3Bucket removed, OtherResource stays - expect(blueprint.source.afterRemoval.Resources.S3Bucket).toBeUndefined(); - expect(blueprint.source.afterRemoval.Resources.OtherResource).toBeDefined(); - - // Target afterAddition: remapped ID, properties preserved - expect(blueprint.target.afterAddition.Resources.amplifyStorageBucket12345678).toBeDefined(); - expect(blueprint.target.afterAddition.Resources.amplifyStorageBucket12345678.Properties.BucketName).toBe('my-bucket'); - }); - - it('remaps DependsOn references (both string and array forms)', () => { - const bucket: CFNResource = { Type: 'AWS::S3::Bucket', Properties: {} }; - const bucketPolicy: CFNResource = { Type: 'AWS::S3::BucketPolicy', Properties: {}, DependsOn: 'S3Bucket' }; - const iamPolicy: CFNResource = { Type: 'AWS::IAM::Policy', Properties: {}, DependsOn: ['S3Bucket', 'UnmappedResource'] }; - - const source: ResolvedStack = { - stackId: 'source-stack', - resolvedTemplate: makeTemplate({ S3Bucket: bucket, BucketPolicy: bucketPolicy, IamPolicy: iamPolicy }), - parameters: [], - }; - const target: ResolvedStack = { - stackId: 'target-stack', - resolvedTemplate: makeTemplate({ - TargetBucket: { Type: 'AWS::S3::Bucket', Properties: {} }, - TargetBucketPolicy: { Type: 'AWS::S3::BucketPolicy', Properties: {} }, - TargetIamPolicy: { Type: 'AWS::IAM::Policy', Properties: {} }, - }), - parameters: [], - }; - refactorer.setMappings([ - { sourceId: 'S3Bucket', targetId: 'TargetBucket', resource: bucket }, - { sourceId: 'BucketPolicy', targetId: 'TargetBucketPolicy', resource: bucketPolicy }, - { sourceId: 'IamPolicy', targetId: 'TargetIamPolicy', resource: iamPolicy }, - ]); - - const blueprint = refactorer.testBuildBlueprint(source, target)!; - - // String DependsOn remapped to array with target ID - expect(blueprint.target.afterAddition.Resources.TargetBucketPolicy.DependsOn).toEqual(['TargetBucket']); - - // Array DependsOn: S3Bucket remapped, UnmappedResource kept as-is (fallback) - expect(blueprint.target.afterAddition.Resources.TargetIamPolicy.DependsOn).toEqual(['TargetBucket', 'UnmappedResource']); - }); - - it('adds placeholder to source.afterRemoval when all source resources are mapped', () => { - const bucket: CFNResource = { Type: 'AWS::S3::Bucket', Properties: {} }; - const source: ResolvedStack = { - stackId: 'source-stack', - resolvedTemplate: makeTemplate({ OnlyBucket: bucket }), - parameters: [], - }; - const target: ResolvedStack = { - stackId: 'target-stack', - resolvedTemplate: makeTemplate({ TargetBucket: { Type: 'AWS::S3::Bucket', Properties: {} } }), - parameters: [], - }; - refactorer.setMappings([{ sourceId: 'OnlyBucket', targetId: 'TargetBucket', resource: bucket }]); - - const blueprint = refactorer.testBuildBlueprint(source, target)!; - expect(blueprint.source.afterRemoval.Resources[MIGRATION_PLACEHOLDER_LOGICAL_ID]).toBeDefined(); + it('placeholder logical ID is MigrationPlaceholder', () => { + expect(MIGRATION_PLACEHOLDER_LOGICAL_ID).toBe('MigrationPlaceholder'); }); +}); - it('adds placeholder to target.afterRemoval when all target category resources are removed', () => { - const bucket: CFNResource = { Type: 'AWS::S3::Bucket', Properties: {} }; - const source: ResolvedStack = { - stackId: 'source-stack', - resolvedTemplate: makeTemplate({ - SourceBucket: bucket, - Lambda: { Type: 'AWS::Lambda::Function', Properties: {} }, - }), - parameters: [], - }; - const target: ResolvedStack = { - stackId: 'target-stack', - resolvedTemplate: makeTemplate({ TargetBucket: { Type: 'AWS::S3::Bucket', Properties: {} } }), - parameters: [], +describe('ResourceMapping shape', () => { + it('carries source and destination stack + logical ID', () => { + const mapping: ResourceMapping = { + Source: { StackName: 'gen1-auth', LogicalResourceId: 'UserPool' }, + Destination: { StackName: 'gen2-auth', LogicalResourceId: 'amplifyAuthUserPool' }, }; - refactorer.setMappings([{ sourceId: 'SourceBucket', targetId: 'TargetBucket', resource: bucket }]); - - const blueprint = refactorer.testBuildBlueprint(source, target)!; - expect(blueprint.target.afterRemoval.Resources[MIGRATION_PLACEHOLDER_LOGICAL_ID]).toBeDefined(); - expect(blueprint.target.afterRemoval.Resources.TargetBucket).toBeUndefined(); + expect(mapping.Source!.StackName).toBe('gen1-auth'); + expect(mapping.Destination!.LogicalResourceId).toBe('amplifyAuthUserPool'); }); }); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-dependency-resolver.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-dependency-resolver.test.ts index be333d60e2f..8a3ab543f0c 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-dependency-resolver.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-dependency-resolver.test.ts @@ -9,62 +9,37 @@ const makeTemplate = (resources: Record { - it('removes cross-boundary DependsOn from staying resources', () => { + it('strips all DependsOn from every resource', () => { const template = makeTemplate({ StayingResource: { Type: 'AWS::Lambda::Function', DependsOn: ['MovingResource', 'OtherStaying'] }, MovingResource: { Type: 'AWS::S3::Bucket' }, - OtherStaying: { Type: 'AWS::IAM::Role' }, + OtherStaying: { Type: 'AWS::IAM::Role', DependsOn: 'MovingResource' }, }); - const result = resolveDependencies(template, ['MovingResource']); - // StayingResource should no longer depend on MovingResource - expect(result.Resources.StayingResource.DependsOn).toEqual(['OtherStaying']); - }); - - it('keeps within-boundary DependsOn for moving resources', () => { - const template = makeTemplate({ - MovingA: { Type: 'AWS::S3::Bucket', DependsOn: ['MovingB', 'StayingResource'] }, - MovingB: { Type: 'AWS::S3::BucketPolicy' }, - StayingResource: { Type: 'AWS::Lambda::Function' }, - }); - - const result = resolveDependencies(template, ['MovingA', 'MovingB']); - // MovingA keeps dep on MovingB (both moving), loses dep on StayingResource - expect(result.Resources.MovingA.DependsOn).toEqual(['MovingB']); + const result = resolveDependencies(template); + expect(result.Resources.StayingResource.DependsOn).toBeUndefined(); + expect(result.Resources.MovingResource.DependsOn).toBeUndefined(); + expect(result.Resources.OtherStaying.DependsOn).toBeUndefined(); }); it('passes through resources without DependsOn unchanged', () => { const template = makeTemplate({ NoDeps: { Type: 'AWS::S3::Bucket' }, - Moving: { Type: 'AWS::DynamoDB::Table' }, + AlsoNoDeps: { Type: 'AWS::DynamoDB::Table' }, }); - const result = resolveDependencies(template, ['Moving']); + const result = resolveDependencies(template); expect(result.Resources.NoDeps.DependsOn).toBeUndefined(); + expect(result.Resources.AlsoNoDeps.DependsOn).toBeUndefined(); }); - it('handles string DependsOn (not array) for staying resources', () => { - const template = makeTemplate({ - Staying: { Type: 'AWS::Lambda::Function', DependsOn: 'Moving' }, - Moving: { Type: 'AWS::S3::Bucket' }, - }); - - const result = resolveDependencies(template, ['Moving']); - // String normalized to array, then filtered — result is empty array (not undefined) - expect(result.Resources.Staying.DependsOn).toEqual([]); - }); - - it('leaves DependsOn unchanged when all resources are moving together', () => { + it('does not mutate the input template', () => { const template = makeTemplate({ A: { Type: 'AWS::S3::Bucket', DependsOn: ['B'] }, - B: { Type: 'AWS::S3::BucketPolicy', DependsOn: ['C'] }, - C: { Type: 'AWS::IAM::Role' }, + B: { Type: 'AWS::S3::BucketPolicy' }, }); - const result = resolveDependencies(template, ['A', 'B', 'C']); - // Neither filter condition triggers — deps.length === depsInRefactor.length for all - expect(result.Resources.A.DependsOn).toEqual(['B']); - expect(result.Resources.B.DependsOn).toEqual(['C']); - expect(result.Resources.C.DependsOn).toBeUndefined(); + resolveDependencies(template); + expect(template.Resources.A.DependsOn).toEqual(['B']); }); }); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts index 98e3d23734a..d44f9d9fa57 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts @@ -1,8 +1,9 @@ import { ForwardCategoryRefactorer } from '../../../../commands/gen2-migration/refactor/workflow/forward-category-refactorer'; import { RollbackCategoryRefactorer } from '../../../../commands/gen2-migration/refactor/workflow/rollback-category-refactorer'; import { CFNResource } from '../../../../commands/gen2-migration/cfn-template'; -import { MoveMapping } from '../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; +import { ResourceMapping } from '@aws-sdk/client-cloudformation'; import { noOpLogger } from '../_framework/logger'; +import { Cfn } from '../../../../commands/gen2-migration/refactor/cfn'; class TestForwardRefactorer extends ForwardCategoryRefactorer { protected async fetchSourceStackId() { @@ -14,8 +15,8 @@ class TestForwardRefactorer extends ForwardCategoryRefactorer { protected resourceTypes() { return ['AWS::S3::Bucket']; } - public testBuildResourceMappings(source: Map, target: Map): MoveMapping[] { - return this.buildResourceMappings(source, target); + public testBuildResourceMappings(source: Map, target: Map): ResourceMapping[] { + return this.buildResourceMappings(source, target, 'gen1-stack', 'gen2-stack') as unknown as ResourceMapping[]; } } @@ -23,12 +24,16 @@ class TestRollbackRefactorer extends RollbackCategoryRefactorer { private readonly ids: ReadonlyMap; constructor(ids: ReadonlyMap) { - super(null as any, null as any, null as any, 'us-east-1', '123', noOpLogger(), { - category: 'storage', - resourceName: 'test', - service: 'S3', - key: 'storage:S3' as const, - }); + super( + null as any, + null as any, + null as any, + 'us-east-1', + '123', + noOpLogger(), + { category: 'storage', resourceName: 'test', service: 'S3', key: 'storage:S3' as const }, + null as unknown as Cfn, + ); this.ids = ids; } // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -44,25 +49,28 @@ class TestRollbackRefactorer extends RollbackCategoryRefactorer { protected resourceTypes() { return []; } - public testBuildResourceMappings(source: Map, target: Map): MoveMapping[] { - return this.buildResourceMappings(source, target); + public testBuildResourceMappings(source: Map, target: Map): ResourceMapping[] { + return this.buildResourceMappings(source, target, 'gen2-stack', 'gen1-stack') as unknown as ResourceMapping[]; } } const r = (type: string): CFNResource => ({ Type: type, Properties: {} }); -/** Helper: convert MoveMapping[] to Map for easy assertions */ -function toIdMap(mappings: MoveMapping[]): Map { - return new Map(mappings.map((m) => [m.sourceId, m.targetId])); +function toIdMap(mappings: ResourceMapping[]): Map { + return new Map(mappings.map((m) => [m.Source!.LogicalResourceId!, m.Destination!.LogicalResourceId!])); } describe('ForwardCategoryRefactorer.buildResourceMappings (default type-matching)', () => { - const refactorer = new TestForwardRefactorer(null as any, null as any, null as any, 'us-east-1', '123', noOpLogger(), { - category: 'storage', - resourceName: 'test', - service: 'S3', - key: 'storage:S3' as const, - }); + const refactorer = new TestForwardRefactorer( + null as any, + null as any, + null as any, + 'us-east-1', + '123', + noOpLogger(), + { category: 'storage', resourceName: 'test', service: 'S3', key: 'storage:S3' as const }, + null as unknown as Cfn, + ); it('maps single resource per type', () => { const mappings = refactorer.testBuildResourceMappings( @@ -91,34 +99,11 @@ describe('ForwardCategoryRefactorer.buildResourceMappings (default type-matching expect(map.get('Table')).toBe('GenTable'); }); - it('maps multiple source resources to same target when types match', () => { - const mappings = refactorer.testBuildResourceMappings( - new Map([ - ['BucketA', r('AWS::S3::Bucket')], - ['BucketB', r('AWS::S3::Bucket')], - ]), - new Map([['GenBucket', r('AWS::S3::Bucket')]]), - ); - const map = toIdMap(mappings); - expect(map.size).toBe(2); - expect(map.get('BucketA')).toBe('GenBucket'); - expect(map.get('BucketB')).toBe('GenBucket'); - }); - it('throws when no types match', () => { expect(() => refactorer.testBuildResourceMappings(new Map([['Stream', r('AWS::Kinesis::Stream')]]), new Map([['Bucket', r('AWS::S3::Bucket')]])), ).toThrow("Source resource 'Stream' (AWS::Kinesis::Stream) has no corresponding target resource"); }); - - it('includes resource in MoveMapping', () => { - const bucket = r('AWS::S3::Bucket'); - const mappings = refactorer.testBuildResourceMappings( - new Map([['S3Bucket', bucket]]), - new Map([['amplifyBucket', r('AWS::S3::Bucket')]]), - ); - expect(mappings[0].resource).toBe(bucket); - }); }); describe('RollbackCategoryRefactorer.buildResourceMappings (gen1LogicalIds-based)', () => { @@ -145,7 +130,7 @@ describe('RollbackCategoryRefactorer.buildResourceMappings (gen1LogicalIds-based it('throws for resource with no known Gen1 logical ID', () => { const refactorer = new TestRollbackRefactorer(new Map()); expect(() => refactorer.testBuildResourceMappings(new Map([['amplifyTopic', r('AWS::SNS::Topic')]]), new Map())).toThrow( - "No known Gen1 logical ID for resource type 'AWS::SNS::Topic' (source: 'amplifyTopic')", + 'Unable to determine target id of resource amplifyTopic', ); }); }); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts index 5fa8c2bab98..5b3bf58093f 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts @@ -1,8 +1,8 @@ import { ForwardCategoryRefactorer } from '../../../../commands/gen2-migration/refactor/workflow/forward-category-refactorer'; -import { CFNResource, CFNTemplate } from '../../../../commands/gen2-migration/cfn-template'; -import { RefactorBlueprint, MoveMapping } from '../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; +import { RefactorBlueprint } from '../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; +import { Cfn } from '../../../../commands/gen2-migration/refactor/cfn'; import { noOpLogger } from '../_framework/logger'; import { mockClient } from 'aws-sdk-client-mock'; import { @@ -12,9 +12,11 @@ import { CreateStackRefactorCommand, DescribeStackRefactorCommand, ExecuteStackRefactorCommand, + GetTemplateCommand, DeleteStackCommand, StackRefactorStatus, StackRefactorExecutionStatus, + ResourceMapping, } from '@aws-sdk/client-cloudformation'; class TestForwardRefactorer extends ForwardCategoryRefactorer { @@ -29,51 +31,15 @@ class TestForwardRefactorer extends ForwardCategoryRefactorer { } } -function makeBlueprint(overrides: { - targetResolved?: Record; - targetAfterRemoval?: Record; - mappings?: MoveMapping[]; -}): RefactorBlueprint { - const sourceTemplate: CFNTemplate = { - AWSTemplateFormatVersion: '2010-09-09', - Description: 'source', - Resources: {}, - Outputs: {}, - }; - const targetResources = overrides.targetResolved ?? {}; - const targetTemplate: CFNTemplate = { - AWSTemplateFormatVersion: '2010-09-09', - Description: 'target', - Resources: targetResources, - Outputs: {}, - }; - const afterRemovalResources = overrides.targetAfterRemoval ?? {}; - const afterRemoval: CFNTemplate = { - AWSTemplateFormatVersion: '2010-09-09', - Description: 'target after removal', - Resources: afterRemovalResources, - Outputs: {}, - }; - +function makeBlueprint(mappings: ResourceMapping[]): RefactorBlueprint { return { - source: { - stackId: 'gen1-stack', - parameters: [], - resolvedTemplate: sourceTemplate, - afterRemoval: sourceTemplate, - }, - target: { - stackId: 'gen2-stack', - parameters: [], - resolvedTemplate: targetTemplate, - afterRemoval, - afterAddition: afterRemoval, - }, - mappings: overrides.mappings ?? [], + sourceStackId: 'gen1-stack', + targetStackId: 'gen2-stack', + mappings, }; } -describe('ForwardCategoryRefactorer.beforeMovePlan', () => { +describe('ForwardCategoryRefactorer.beforeMove', () => { let cfnMock: ReturnType; beforeEach(() => { @@ -81,8 +47,9 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { }); afterEach(() => cfnMock.restore()); - it('returns empty operations when target has no category resources', async () => { + it('returns empty operations when no mappings', async () => { const clients = new AwsClients({ region: 'us-east-1' }); + const cfn = new Cfn(new CloudFormationClient({}), noOpLogger()); const refactorer = new TestForwardRefactorer( new StackFacade(clients, 'g1'), new StackFacade(clients, 'g2'), @@ -91,16 +58,15 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { '123', noOpLogger(), { category: 'storage', resourceName: 'test', service: 'S3', key: 'storage:S3' as const }, + cfn, ); - const blueprint = makeBlueprint({ - targetResolved: { Lambda: { Type: 'AWS::Lambda::Function', Properties: {} } }, - }); + const blueprint = makeBlueprint([]); - const operations = await (refactorer as any).beforeMovePlan(blueprint); + const operations = await (refactorer as any).beforeMove(blueprint); expect(operations).toHaveLength(0); }); - it('creates holding stack operation when target has category resources', async () => { + it('creates holding stack operation when mappings exist', async () => { cfnMock.on(DescribeStacksCommand).resolves({ Stacks: [] }); cfnMock.on(CreateStackRefactorCommand).resolves({ StackRefactorId: 'r1' }); cfnMock @@ -108,9 +74,17 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { .resolves({ Status: StackRefactorStatus.CREATE_COMPLETE, ExecutionStatus: StackRefactorExecutionStatus.EXECUTE_COMPLETE }); cfnMock.on(ExecuteStackRefactorCommand).resolves({}); cfnMock.on(DescribeStackResourcesCommand).resolves({ StackResources: [] }); + cfnMock.on(GetTemplateCommand).resolves({ + TemplateBody: JSON.stringify({ + AWSTemplateFormatVersion: '2010-09-09', + Resources: { MyBucket: { Type: 'AWS::S3::Bucket', Properties: {} } }, + Outputs: {}, + }), + }); const clients = new AwsClients({ region: 'us-east-1' }); (clients as any).cloudFormation = new CloudFormationClient({}); + const cfn = new Cfn(new CloudFormationClient({}), noOpLogger()); const refactorer = new TestForwardRefactorer( new StackFacade(clients, 'g1'), new StackFacade(clients, 'g2'), @@ -119,19 +93,17 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { '123', noOpLogger(), { category: 'storage', resourceName: 'test', service: 'S3', key: 'storage:S3' as const }, + cfn, ); - const blueprint = makeBlueprint({ - targetResolved: { - MyBucket: { Type: 'AWS::S3::Bucket', Properties: {} }, - Other: { Type: 'AWS::Lambda::Function', Properties: {} }, + const blueprint = makeBlueprint([ + { + Source: { StackName: 'gen1-stack', LogicalResourceId: 'S3Bucket' }, + Destination: { StackName: 'gen2-stack', LogicalResourceId: 'MyBucket' }, }, - targetAfterRemoval: { - Other: { Type: 'AWS::Lambda::Function', Properties: {} }, - }, - }); + ]); - const operations = await (refactorer as any).beforeMovePlan(blueprint); + const operations = await (refactorer as any).beforeMove(blueprint); expect(operations).toHaveLength(1); expect(await operations[0].describe()).toEqual([expect.stringContaining('holding')]); }); @@ -149,9 +121,17 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { .resolves({ Status: StackRefactorStatus.CREATE_COMPLETE, ExecutionStatus: StackRefactorExecutionStatus.EXECUTE_COMPLETE }); cfnMock.on(ExecuteStackRefactorCommand).resolves({}); cfnMock.on(DescribeStackResourcesCommand).resolves({ StackResources: [] }); + cfnMock.on(GetTemplateCommand).resolves({ + TemplateBody: JSON.stringify({ + AWSTemplateFormatVersion: '2010-09-09', + Resources: { MyBucket: { Type: 'AWS::S3::Bucket', Properties: {} } }, + Outputs: {}, + }), + }); const clients = new AwsClients({ region: 'us-east-1' }); (clients as any).cloudFormation = new CloudFormationClient({}); + const cfn = new Cfn(new CloudFormationClient({}), noOpLogger()); const refactorer = new TestForwardRefactorer( new StackFacade(clients, 'g1'), new StackFacade(clients, 'g2'), @@ -160,14 +140,18 @@ describe('ForwardCategoryRefactorer.beforeMovePlan', () => { '123', noOpLogger(), { category: 'storage', resourceName: 'test', service: 'S3', key: 'storage:S3' as const }, + cfn, ); - const blueprint = makeBlueprint({ - targetResolved: { MyBucket: { Type: 'AWS::S3::Bucket', Properties: {} } }, - targetAfterRemoval: {}, - }); + const blueprint = makeBlueprint([ + { + Source: { StackName: 'gen1-stack', LogicalResourceId: 'S3Bucket' }, + Destination: { StackName: 'gen2-stack', LogicalResourceId: 'MyBucket' }, + }, + ]); - const operations = await (refactorer as any).beforeMovePlan(blueprint); + const operations = await (refactorer as any).beforeMove(blueprint); + expect(operations).toHaveLength(2); await operations[0].execute(); expect(cfnMock.commandCalls(DeleteStackCommand).length).toBeGreaterThan(0); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/holding-stack.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/holding-stack.test.ts deleted file mode 100644 index 4ba4208e8e4..00000000000 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/holding-stack.test.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { getHoldingStackName, findHoldingStack } from '../../../../commands/gen2-migration/refactor/holding-stack'; -import { mockClient } from 'aws-sdk-client-mock'; -import { CloudFormationClient, DescribeStacksCommand } from '@aws-sdk/client-cloudformation'; - -describe('holding-stack', () => { - describe('getHoldingStackName', () => { - it('appends -holding after the hash suffix', () => { - const name = getHoldingStackName('amplify-app-main-auth-ABCD1234'); - expect(name).toBe('amplify-app-main-auth-ABCD1234-holding'); - }); - - it('truncates prefix when result would exceed 128 characters', () => { - const longPrefix = 'a'.repeat(120); - const stackId = `${longPrefix}-HASH1234`; - const name = getHoldingStackName(stackId); - expect(name.length).toBeLessThanOrEqual(128); - expect(name).toContain('-HASH1234-holding'); - }); - }); - - describe('findHoldingStack', () => { - let cfnMock: ReturnType; - beforeEach(() => { - cfnMock = mockClient(CloudFormationClient); - }); - afterEach(() => cfnMock.restore()); - - it('returns the stack when it exists', async () => { - cfnMock.on(DescribeStacksCommand).resolves({ - Stacks: [{ StackName: 'holding', StackStatus: 'CREATE_COMPLETE', CreationTime: new Date() }], - }); - const result = await findHoldingStack(new CloudFormationClient({}), 'holding'); - expect(result).not.toBeNull(); - expect(result?.StackName).toBe('holding'); - }); - - it('returns null when stack does not exist (ValidationError)', async () => { - // Mock returns empty stacks — findHoldingStack returns null - cfnMock.on(DescribeStacksCommand).resolves({ Stacks: [] }); - const result = await findHoldingStack(new CloudFormationClient({}), 'nonexistent'); - expect(result).toBeNull(); - }); - }); -}); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts index a9064d0d96b..deb4d4e7b32 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts @@ -3,6 +3,7 @@ import { CFNResource, CFNTemplate } from '../../../../commands/gen2-migration/cf import { RefactorBlueprint } from '../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; +import { Cfn } from '../../../../commands/gen2-migration/refactor/cfn'; import { noOpLogger } from '../_framework/logger'; import { mockClient } from 'aws-sdk-client-mock'; import { @@ -10,16 +11,15 @@ import { GetTemplateCommand, DescribeStacksCommand, DescribeStackResourcesCommand, - DeleteStackCommand, UpdateStackCommand, CreateStackRefactorCommand, DescribeStackRefactorCommand, ExecuteStackRefactorCommand, StackRefactorStatus, StackRefactorExecutionStatus, + ResourceMapping, } from '@aws-sdk/client-cloudformation'; -// Concrete test subclass class TestRollbackRefactorer extends RollbackCategoryRefactorer { // eslint-disable-next-line @typescript-eslint/no-unused-vars protected targetLogicalId(_sourceId: string, _sourceResource: CFNResource): string | undefined { @@ -36,48 +36,23 @@ class TestRollbackRefactorer extends RollbackCategoryRefactorer { } } -function makeBlueprint(sourceAfterRemoval: CFNTemplate): RefactorBlueprint { - const emptyTemplate: CFNTemplate = { - AWSTemplateFormatVersion: '2010-09-09', - Description: 'empty', - Resources: {}, - Outputs: {}, - }; +function makeBlueprint(mappings: ResourceMapping[]): RefactorBlueprint { return { - source: { - stackId: 'gen2-auth-stack-id', - parameters: [], - resolvedTemplate: emptyTemplate, - afterRemoval: sourceAfterRemoval, - }, - target: { - stackId: 'gen1-stack-id', - parameters: [], - resolvedTemplate: emptyTemplate, - afterRemoval: emptyTemplate, - afterAddition: emptyTemplate, - }, - mappings: [], + sourceStackId: 'gen2-auth-stack-id', + targetStackId: 'gen1-stack-id', + mappings, }; } -/** - * afterMovePlan reads the holding stack template during plan() and returns - * 3 separate operations: (1) update holding stack with placeholder, - * (2) refactor resources back to Gen2, (3) delete holding stack. - */ -describe('RollbackCategoryRefactorer.afterMovePlan', () => { +describe('RollbackCategoryRefactorer.afterMove', () => { let cfnMock: ReturnType; beforeEach(() => { cfnMock = mockClient(CloudFormationClient); }); + afterEach(() => cfnMock.restore()); - afterEach(() => { - cfnMock.restore(); - }); - - it('reads holding stack during plan and splits into 3 operations', async () => { + it('returns operations to update holding stack and move resources back', async () => { const holdingTemplate: CFNTemplate = { AWSTemplateFormatVersion: '2010-09-09', Description: 'holding', @@ -98,57 +73,35 @@ describe('RollbackCategoryRefactorer.afterMovePlan', () => { ExecutionStatus: StackRefactorExecutionStatus.EXECUTE_COMPLETE, }); cfnMock.on(ExecuteStackRefactorCommand).resolves({}); - cfnMock.on(DeleteStackCommand).resolves({}); cfnMock.on(DescribeStackResourcesCommand).resolves({ StackResources: [] }); const clients = new AwsClients({ region: 'us-east-1' }); (clients as any).cloudFormation = new CloudFormationClient({}); - const gen1Env = new StackFacade(clients, 'gen1-root'); - const gen2Branch = new StackFacade(clients, 'gen2-root'); - const refactorer = new TestRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', noOpLogger(), { - category: 'storage', - resourceName: 'test', - service: 'S3', - key: 'storage:S3', - }); - - const sourceAfterRemoval: CFNTemplate = { - AWSTemplateFormatVersion: '2010-09-09', - Description: 'gen2 after move', - Resources: { OtherResource: { Type: 'AWS::Lambda::Function', Properties: {} } }, - Outputs: {}, - }; - - const blueprint = makeBlueprint(sourceAfterRemoval); - - const operations = await (refactorer as any).afterMovePlan(blueprint); + const cfn = new Cfn(new CloudFormationClient({}), noOpLogger()); + const refactorer = new TestRollbackRefactorer( + new StackFacade(clients, 'gen1-root'), + new StackFacade(clients, 'gen2-root'), + clients, + 'us-east-1', + '123456789', + noOpLogger(), + { category: 'storage', resourceName: 'test', service: 'S3', key: 'storage:S3' }, + cfn, + ); + + const blueprint = makeBlueprint([ + { + Source: { StackName: 'gen2-auth-stack-id', LogicalResourceId: 'MyBucket' }, + Destination: { StackName: 'gen1-stack-id', LogicalResourceId: 'S3Bucket' }, + }, + ]); - // 3 operations: update holding with placeholder, refactor back, delete holding - expect(operations).toHaveLength(3); + const operations = await (refactorer as any).afterMove(blueprint); - // Verify descriptions + // 2 operations: update holding with placeholder, refactor back to Gen2 + expect(operations).toHaveLength(2); expect(await operations[0].describe()).toEqual([expect.stringContaining('placeholder')]); - expect(await operations[1].describe()).toEqual([expect.stringContaining('Restore')]); - expect(await operations[2].describe()).toEqual([expect.stringContaining('Delete')]); - - // Execute all 3 operations - await operations[0].execute(); - await operations[1].execute(); - await operations[2].execute(); - - // Verify the restore template passed to CreateStackRefactor (op 2) - const refactorCalls = cfnMock.commandCalls(CreateStackRefactorCommand); - expect(refactorCalls.length).toBeGreaterThan(0); - - const destTemplate = JSON.parse(refactorCalls[0].args[0].input.StackDefinitions![1].TemplateBody!); - - // Restore template = source.afterRemoval + holding stack resources - expect(destTemplate.Resources.OtherResource).toBeDefined(); - expect(destTemplate.Resources.MyBucket).toBeDefined(); - expect(destTemplate.Resources.MyBucket.Properties.BucketName).toBe('test-bucket'); - - // Verify delete was called (op 3) - expect(cfnMock.commandCalls(DeleteStackCommand).length).toBeGreaterThan(0); + expect(await operations[1].describe()).toEqual([expect.stringContaining('Move')]); }); it('returns empty operations when no holding stack exists', async () => { @@ -156,24 +109,21 @@ describe('RollbackCategoryRefactorer.afterMovePlan', () => { const clients = new AwsClients({ region: 'us-east-1' }); (clients as any).cloudFormation = new CloudFormationClient({}); - const gen1Env = new StackFacade(clients, 'gen1-root'); - const gen2Branch = new StackFacade(clients, 'gen2-root'); - const refactorer = new TestRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123456789', noOpLogger(), { - category: 'storage', - resourceName: 'test', - service: 'S3', - key: 'storage:S3', - }); - - const emptyTemplate: CFNTemplate = { - AWSTemplateFormatVersion: '2010-09-09', - Description: 'test', - Resources: {}, - Outputs: {}, - }; - const blueprint = makeBlueprint(emptyTemplate); - - const operations = await (refactorer as any).afterMovePlan(blueprint); + const cfn = new Cfn(new CloudFormationClient({}), noOpLogger()); + const refactorer = new TestRollbackRefactorer( + new StackFacade(clients, 'gen1-root'), + new StackFacade(clients, 'gen2-root'), + clients, + 'us-east-1', + '123456789', + noOpLogger(), + { category: 'storage', resourceName: 'test', service: 'S3', key: 'storage:S3' }, + cfn, + ); + + const blueprint = makeBlueprint([]); + + const operations = await (refactorer as any).afterMove(blueprint); expect(operations).toHaveLength(0); }); }); diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index cdceb3f1bbb..8b3e368ea87 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -97,7 +97,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { } /** - * Restores holding stack resources into Gen2 and deletes the holding stack. + * Restores holding stack resources into Gen2. * Templates are fetched fresh at execution time. */ protected async afterMove(blueprint: RefactorBlueprint): Promise { From 3ba49397aa7f9f170c3ca05aa8db78e4bc5377a4 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sun, 22 Mar 2026 22:19:45 -0400 Subject: [PATCH 33/70] fix(cli-internal): prevent test hangs with missing mocks and async fixes Add DeleteChangeSetCommand mock to OAuth test. Make testBuildResourceMappings async and await all callers since buildResourceMappings is async. Convert sync throw assertions to async rejects.toThrow. --- Prompt: make sure the test won't hang by configuring all necessary mocks. --- .../refactor/auth-forward-mapping.test.ts | 11 ++++--- .../refactor/auth-forward-plan.test.ts | 1 + .../default-resource-mappings.test.ts | 30 +++++++++---------- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts index f700a5b9848..d9e1bdf86e0 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts @@ -35,13 +35,16 @@ describe('AuthCognitoForwardRefactorer.buildResourceMappings - UserPoolClient di null as unknown as Cfn, ); } - public testBuildResourceMappings(source: Map, target: Map): ResourceMapping[] { - return this.buildResourceMappings(source, target, 'gen1-auth', 'gen2-auth') as unknown as ResourceMapping[]; + public async testBuildResourceMappings( + source: Map, + target: Map, + ): Promise { + return this.buildResourceMappings(source, target, 'gen1-auth', 'gen2-auth'); } })(); } - it('maps main auth resources with correct Web/Native disambiguation', () => { + it('maps main auth resources with correct Web/Native disambiguation', async () => { const refactorer = createRefactorer(); const targetResources = new Map([ @@ -60,7 +63,7 @@ describe('AuthCognitoForwardRefactorer.buildResourceMappings - UserPoolClient di ['IdentityPoolRoleMap', { Type: 'AWS::Cognito::IdentityPoolRoleAttachment', Properties: {} }], ]); - const mappings = refactorer.testBuildResourceMappings(mainAuthSource, targetResources); + const mappings = await refactorer.testBuildResourceMappings(mainAuthSource, targetResources); const map = toIdMap(mappings); // All source resources are mapped diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts index f6cf5ede497..c227b8ed8cd 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts @@ -186,6 +186,7 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { cfnMock.on(GetTemplateCommand, { StackName: 'gen2-auth-stack' }).resolves({ TemplateBody: JSON.stringify(gen2AuthTemplate) }); cfnMock.on(CreateChangeSetCommand).resolves({}); cfnMock.on(DescribeChangeSetCommand).resolves({ Status: 'CREATE_COMPLETE', Changes: [] }); + cfnMock.on(DeleteChangeSetCommand).resolves({}); const cognitoMock = mockClient(CognitoIdentityProviderClient); cognitoMock.on(DescribeIdentityProviderCommand).resolves({ diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts index d44f9d9fa57..ce6c9936f23 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts @@ -15,8 +15,8 @@ class TestForwardRefactorer extends ForwardCategoryRefactorer { protected resourceTypes() { return ['AWS::S3::Bucket']; } - public testBuildResourceMappings(source: Map, target: Map): ResourceMapping[] { - return this.buildResourceMappings(source, target, 'gen1-stack', 'gen2-stack') as unknown as ResourceMapping[]; + public async testBuildResourceMappings(source: Map, target: Map): Promise { + return this.buildResourceMappings(source, target, 'gen1-stack', 'gen2-stack'); } } @@ -49,8 +49,8 @@ class TestRollbackRefactorer extends RollbackCategoryRefactorer { protected resourceTypes() { return []; } - public testBuildResourceMappings(source: Map, target: Map): ResourceMapping[] { - return this.buildResourceMappings(source, target, 'gen2-stack', 'gen1-stack') as unknown as ResourceMapping[]; + public async testBuildResourceMappings(source: Map, target: Map): Promise { + return this.buildResourceMappings(source, target, 'gen2-stack', 'gen1-stack'); } } @@ -72,8 +72,8 @@ describe('ForwardCategoryRefactorer.buildResourceMappings (default type-matching null as unknown as Cfn, ); - it('maps single resource per type', () => { - const mappings = refactorer.testBuildResourceMappings( + it('maps single resource per type', async () => { + const mappings = await refactorer.testBuildResourceMappings( new Map([['S3Bucket', r('AWS::S3::Bucket')]]), new Map([['amplifyBucket', r('AWS::S3::Bucket')]]), ); @@ -82,8 +82,8 @@ describe('ForwardCategoryRefactorer.buildResourceMappings (default type-matching expect(map.get('S3Bucket')).toBe('amplifyBucket'); }); - it('maps multiple types independently', () => { - const mappings = refactorer.testBuildResourceMappings( + it('maps multiple types independently', async () => { + const mappings = await refactorer.testBuildResourceMappings( new Map([ ['Bucket', r('AWS::S3::Bucket')], ['Table', r('AWS::DynamoDB::Table')], @@ -99,22 +99,22 @@ describe('ForwardCategoryRefactorer.buildResourceMappings (default type-matching expect(map.get('Table')).toBe('GenTable'); }); - it('throws when no types match', () => { - expect(() => + it('throws when no types match', async () => { + await expect( refactorer.testBuildResourceMappings(new Map([['Stream', r('AWS::Kinesis::Stream')]]), new Map([['Bucket', r('AWS::S3::Bucket')]])), - ).toThrow("Source resource 'Stream' (AWS::Kinesis::Stream) has no corresponding target resource"); + ).rejects.toThrow("Source resource 'Stream' (AWS::Kinesis::Stream) has no corresponding target resource"); }); }); describe('RollbackCategoryRefactorer.buildResourceMappings (gen1LogicalIds-based)', () => { - it('maps source resources to Gen1 logical IDs', () => { + it('maps source resources to Gen1 logical IDs', async () => { const refactorer = new TestRollbackRefactorer( new Map([ ['amplifyBucket', 'S3Bucket'], ['amplifyTable', 'DynamoDBTable'], ]), ); - const mappings = refactorer.testBuildResourceMappings( + const mappings = await refactorer.testBuildResourceMappings( new Map([ ['amplifyBucket', r('AWS::S3::Bucket')], ['amplifyTable', r('AWS::DynamoDB::Table')], @@ -127,9 +127,9 @@ describe('RollbackCategoryRefactorer.buildResourceMappings (gen1LogicalIds-based expect(map.get('amplifyTable')).toBe('DynamoDBTable'); }); - it('throws for resource with no known Gen1 logical ID', () => { + it('throws for resource with no known Gen1 logical ID', async () => { const refactorer = new TestRollbackRefactorer(new Map()); - expect(() => refactorer.testBuildResourceMappings(new Map([['amplifyTopic', r('AWS::SNS::Topic')]]), new Map())).toThrow( + await expect(refactorer.testBuildResourceMappings(new Map([['amplifyTopic', r('AWS::SNS::Topic')]]), new Map())).rejects.toThrow( 'Unable to determine target id of resource amplifyTopic', ); }); From a66f7cc986289ad9441b8122090cb91634f4b262 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sun, 22 Mar 2026 22:56:47 -0400 Subject: [PATCH 34/70] =?UTF-8?q?test(cli-internal):=20fix=20all=20refacto?= =?UTF-8?q?r=20tests=20=E2=80=94=2017=20suites,=2092=20tests=20pass?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Delete tests for removed modules (cfn-stack-updater, cfn-stack-refactor-updater, legacy-custom-resource). Fix category-plan-orchestration constructor calls with shared Cfn. Update rollback assertions to expect no-op when resources already exist in target. Add default DescribeStacksCommand mocks for holding stack lookups. Mock SDK waiters in snapshot tests to avoid 30s polling delays. Handle missing template files in test framework GetTemplateCommand mock. Update snapshot files for DependsOn stripping. Add early return in beforeMove for empty mappings. Replace symmetricDifference with simple every() check in addPlaceHolderIfNeeded. --- Prompt: start running tests and fix what's needed. --- ...79371D7-SEM95NL3BKFT-holding.mappings.json | 40 +- ...-SEM95NL3BKFT-holding.source.template.json | 28 +- ...-SEM95NL3BKFT-holding.target.template.json | 83 ++-- ...C3F24A-1BTE7UH0TFE2I-holding.mappings.json | 8 +- ...1BTE7UH0TFE2I-holding.source.template.json | 153 +++++-- ...1BTE7UH0TFE2I-holding.target.template.json | 1 - ...10-auth179371D7-SEM95NL3BKFT.mappings.json | 40 +- ...179371D7-SEM95NL3BKFT.source.template.json | 78 +++- ...179371D7-SEM95NL3BKFT.target.template.json | 348 +++++++++------- ...torage0EC3F24A-1BTE7UH0TFE2I.mappings.json | 8 +- ...EC3F24A-1BTE7UH0TFE2I.source.template.json | 184 ++++++--- ...EC3F24A-1BTE7UH0TFE2I.target.template.json | 295 ++++++++++---- ...10-auth179371D7-SEM95NL3BKFT.template.json | 4 - ...torage0EC3F24A-1BTE7UH0TFE2I.template.json | 6 - ...endonlyf8c4c57b-SC9H4E2DZU7A.template.json | 15 +- ...orages3c31471c3-MQFWTKK6ETYR.template.json | 7 - ...79371D7-DAPL7YOMHRB4-holding.mappings.json | 40 +- ...-DAPL7YOMHRB4-holding.source.template.json | 28 +- ...-DAPL7YOMHRB4-holding.target.template.json | 83 ++-- ...EC3F24A-QQN18S0SITDH-holding.mappings.json | 8 +- ...-QQN18S0SITDH-holding.source.template.json | 18 +- ...-QQN18S0SITDH-holding.target.template.json | 1 - ...44-auth179371D7-DAPL7YOMHRB4.mappings.json | 40 +- ...179371D7-DAPL7YOMHRB4.source.template.json | 123 ++++-- ...179371D7-DAPL7YOMHRB4.target.template.json | 381 +++++++++++------- ...storage0EC3F24A-QQN18S0SITDH.mappings.json | 8 +- ...0EC3F24A-QQN18S0SITDH.source.template.json | 49 ++- ...0EC3F24A-QQN18S0SITDH.target.template.json | 64 ++- ...44-auth179371D7-DAPL7YOMHRB4.template.json | 4 - ...2367c6822367c68-XLSGP9AEXCHG.template.json | 18 +- ...94DE4A-11L4X799ZG2NW-holding.mappings.json | 8 +- ...11L4X799ZG2NW-holding.source.template.json | 32 +- ...11L4X799ZG2NW-holding.target.template.json | 1 - ...h179371D7-UGINV3RD10-holding.mappings.json | 40 +- ...D7-UGINV3RD10-holding.source.template.json | 28 +- ...D7-UGINV3RD10-holding.target.template.json | 83 ++-- ...C3F24A-11PWXC3G56PPP-holding.mappings.json | 8 +- ...11PWXC3G56PPP-holding.source.template.json | 153 +++++-- ...11PWXC3G56PPP-holding.target.template.json | 1 - ...lytics5794DE4A-11L4X799ZG2NW.mappings.json | 8 +- ...794DE4A-11L4X799ZG2NW.source.template.json | 49 ++- ...794DE4A-11L4X799ZG2NW.target.template.json | 68 +++- ...eabb-auth179371D7-UGINV3RD10.mappings.json | 40 +- ...th179371D7-UGINV3RD10.source.template.json | 78 +++- ...th179371D7-UGINV3RD10.target.template.json | 348 +++++++++------- ...torage0EC3F24A-11PWXC3G56PPP.mappings.json | 8 +- ...EC3F24A-11PWXC3G56PPP.source.template.json | 184 ++++++--- ...EC3F24A-11PWXC3G56PPP.target.template.json | 295 ++++++++++---- ...eabb-auth179371D7-UGINV3RD10.template.json | 4 - ...torage0EC3F24A-11PWXC3G56PPP.template.json | 6 - ...odboard759ae00a-55VYEATUY8WM.template.json | 15 +- ...oodboardStorage-4QIRO85L6OVA.template.json | 7 - ...9371D7-1RF1TAQPAA1WW-holding.mappings.json | 40 +- ...1RF1TAQPAA1WW-holding.source.template.json | 32 +- ...1RF1TAQPAA1WW-holding.target.template.json | 83 ++-- ...C3F24A-13PB5LDXDDFTY-holding.mappings.json | 8 +- ...13PB5LDXDDFTY-holding.source.template.json | 171 ++++++-- ...13PB5LDXDDFTY-holding.target.template.json | 1 - ...a-auth179371D7-1RF1TAQPAA1WW.mappings.json | 40 +- ...79371D7-1RF1TAQPAA1WW.source.template.json | 78 +++- ...79371D7-1RF1TAQPAA1WW.target.template.json | 352 +++++++++------- ...torage0EC3F24A-13PB5LDXDDFTY.mappings.json | 8 +- ...EC3F24A-13PB5LDXDDFTY.source.template.json | 243 ++++++++--- ...EC3F24A-13PB5LDXDDFTY.target.template.json | 345 +++++++++++----- ...a-auth179371D7-1RF1TAQPAA1WW.template.json | 4 - ...torage0EC3F24A-13PB5LDXDDFTY.template.json | 14 - ...atalog90174ac4-1DKM3MK2JKRFC.template.json | 15 +- ...orages338e5b439-DQ7IMC8LEGGI.template.json | 9 +- ...79371D7-CFDKYQIOG2UJ-holding.mappings.json | 40 +- ...-CFDKYQIOG2UJ-holding.source.template.json | 28 +- ...-CFDKYQIOG2UJ-holding.target.template.json | 83 ++-- ...EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json | 8 +- ...-MCTM3Q2BCVCJ-holding.source.template.json | 153 +++++-- ...-MCTM3Q2BCVCJ-holding.target.template.json | 1 - ...ec-auth179371D7-CFDKYQIOG2UJ.mappings.json | 40 +- ...179371D7-CFDKYQIOG2UJ.source.template.json | 78 +++- ...179371D7-CFDKYQIOG2UJ.target.template.json | 348 +++++++++------- ...storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json | 8 +- ...0EC3F24A-MCTM3Q2BCVCJ.source.template.json | 184 ++++++--- ...0EC3F24A-MCTM3Q2BCVCJ.target.template.json | 295 ++++++++++---- ...ec-auth179371D7-CFDKYQIOG2UJ.template.json | 4 - ...storage0EC3F24A-MCTM3Q2BCVCJ.template.json | 6 - ...tboards54040ecc-PH0BQLGBQAYV.template.json | 15 +- ...orages369f8ff1c-WRT91DP311WY.template.json | 7 - .../_framework/clients/cloudformation.ts | 58 +-- .../refactor/auth-forward-plan.test.ts | 6 + .../category-plan-orchestration.test.ts | 217 ++++++---- .../cfn-stack-refactor-updater.test.ts | 103 ----- .../refactor/cfn-stack-updater.test.ts | 145 ------- .../refactor/legacy-custom-resource.test.ts | 43 -- .../gen2-migration/refactor/refactor.test.ts | 16 + .../refactor/stack-facade.test.ts | 23 +- .../refactor/workflow/category-refactorer.ts | 21 +- .../workflow/forward-category-refactorer.ts | 2 + 94 files changed, 4444 insertions(+), 2558 deletions(-) delete mode 100644 packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-stack-refactor-updater.test.ts delete mode 100644 packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-stack-updater.test.ts delete mode 100644 packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/legacy-custom-resource.test.ts diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json index 759c58ea547..67e2b307779 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" } }, { "Source": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" } }, { "Source": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" } }, { "Source": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" } }, { "Source": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.source.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.source.template.json index d4c0a8b779b..db80849fda7 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.source.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.source.template.json @@ -10,7 +10,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:33a8fea2-6293-4bec-8726-31e6b5817de5" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -60,7 +62,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:33a8fea2-6293-4bec-8726-31e6b5817de5" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -380,19 +384,29 @@ }, "Outputs": { "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthUserPoolACA7606BRef": { - "Value": "us-east-1_W9u2NBSRe" + "Value": { + "Ref": "amplifyAuthUserPool4BA7F805" + } }, "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthUserPoolAppClientF2CDC3A8Ref": { - "Value": "55m5602upkjiv7819hcf2ht5v3" + "Value": { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + } }, "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthIdentityPool91CBC3ADRef": { - "Value": "us-east-1:33a8fea2-6293-4bec-8726-31e6b5817de5" + "Value": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthauthenticatedUserRole5699D34FRef": { - "Value": "amplify-backendonly-ge-amplifyAuthauthenticatedU-NrnOsacJVeCr" + "Value": { + "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" + } }, "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthunauthenticatedUserRole02B14E66Ref": { - "Value": "amplify-backendonly-ge-amplifyAuthunauthenticate-mFzNB8V2DE4J" + "Value": { + "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json index 01658891def..29fda378b1a 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json @@ -1,6 +1,5 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "Temporary holding stack for Gen2 migration", "Resources": { "amplifyAuthUserPool4BA7F805": { "Type": "AWS::Cognito::UserPool", @@ -71,27 +70,6 @@ "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPool/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_W9u2NBSRe" - }, - "Metadata": { - "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -118,19 +96,46 @@ "SupportedIdentityProviders": [ "COGNITO" ], - "UserPoolId": "us-east-1_W9u2NBSRe" + "UserPoolId": { + "Ref": "amplifyAuthUserPool4BA7F805" + } }, "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPoolAppClient/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": { + "Ref": "amplifyAuthUserPool4BA7F805" + } + }, + "Metadata": { + "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { "AllowUnauthenticatedIdentities": true, "CognitoIdentityProviders": [ { - "ClientId": "55m5602upkjiv7819hcf2ht5v3", + "ClientId": { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + }, "ProviderName": { "Fn::Join": [ "", @@ -140,7 +145,9 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - "us-east-1_W9u2NBSRe" + { + "Ref": "amplifyAuthUserPool4BA7F805" + } ] ] } @@ -177,7 +184,9 @@ "amplifyAuthIdentityPoolRoleAttachment045F17C8": { "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "IdentityPoolId": "us-east-1:33a8fea2-6293-4bec-8726-31e6b5817de5", + "IdentityPoolId": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + }, "RoleMappings": { "UserPoolWebClientRoleMapping": { "AmbiguousRoleResolution": "AuthenticatedRole", @@ -190,9 +199,13 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - "us-east-1_W9u2NBSRe", + { + "Ref": "amplifyAuthUserPool4BA7F805" + }, ":", - "55m5602upkjiv7819hcf2ht5v3" + { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + } ] ] }, @@ -200,8 +213,18 @@ } }, "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-ge-amplifyAuthunauthenticate-mFzNB8V2DE4J", - "authenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-ge-amplifyAuthauthenticatedU-NrnOsacJVeCr" + "unauthenticated": { + "Fn::GetAtt": [ + "amplifyAuthunauthenticatedUserRole2B524D9E", + "Arn" + ] + }, + "authenticated": { + "Fn::GetAtt": [ + "amplifyAuthauthenticatedUserRoleD8DA3689", + "Arn" + ] + } } }, "DependsOn": [ diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.mappings.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.mappings.json index 606b64a3606..11b99a35613 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.mappings.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I", - "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" + "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding", - "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" + "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.source.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.source.template.json index 28297393fb9..16a16be4e9f 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.source.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.source.template.json @@ -4,7 +4,9 @@ "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketPolicy14D90AB6": { "Type": "AWS::S3::BucketPolicy", "Properties": { - "Bucket": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + "Bucket": { + "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" + }, "PolicyDocument": { "Statement": [ { @@ -19,12 +21,22 @@ "AWS": "*" }, "Resource": [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, { "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/*" ] ] @@ -40,15 +52,30 @@ ], "Effect": "Allow", "Principal": { - "AWS": "arn:aws:iam::123456789012:role/amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + "AWS": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + } }, "Resource": [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, { "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/*" ] ] @@ -66,8 +93,15 @@ "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketAutoDeleteObjectsCustomResource31970782": { "Type": "Custom::S3AutoDeleteObjects", "Properties": { - "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "BucketName": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" + "ServiceToken": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "Arn" + ] + }, + "BucketName": { + "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" + } }, "DependsOn": [ "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketPolicy14D90AB6" @@ -115,14 +149,21 @@ "Timeout": 900, "MemorySize": 128, "Handler": "index.handler", - "Role": "arn:aws:iam::123456789012:role/amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Role": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + }, "Runtime": "nodejs22.x", "Description": { "Fn::Join": [ "", [ "Lambda function for auto-deleting objects in ", - "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" + }, " S3 bucket." ] ] @@ -148,7 +189,9 @@ "created-by": "amplify" }, "Type": "String", - "Value": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" + "Value": { + "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" + } }, "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/BACKENDONLYCB_1_A_13_AB_81664_ECAA_7_D_015068_AB_2_D_0165_E_0_FA_GEN_2_MAIN_BUCKET_NAMEParameter/Resource" @@ -166,7 +209,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/public/*" ] ] @@ -183,7 +231,12 @@ } }, "Effect": "Allow", - "Resource": "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" + "Resource": { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + } } ], "Version": "2012-10-17" @@ -212,7 +265,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/public/*" ] ] @@ -221,7 +279,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/protected/*" ] ] @@ -230,7 +293,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/private/*" ] ] @@ -245,7 +313,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/public/*" ] ] @@ -254,7 +327,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/protected/*" ] ] @@ -263,7 +341,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/private/*" ] ] @@ -285,7 +368,12 @@ } }, "Effect": "Allow", - "Resource": "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" + "Resource": { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + } }, { "Action": "s3:DeleteObject", @@ -295,7 +383,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/public/*" ] ] @@ -304,7 +397,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/protected/*" ] ] @@ -313,7 +411,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/private/*" ] ] @@ -621,7 +724,9 @@ }, "Outputs": { "amplifybackendonlygen2mainbranch8e0f260810storagebackendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket8CDA8E49Ref": { - "Value": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" + "Value": { + "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.target.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.target.template.json index 03d10f9a77a..1ca97bc8112 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.target.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.target.template.json @@ -1,6 +1,5 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "Temporary holding stack for Gen2 migration", "Resources": { "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738": { "Type": "AWS::S3::Bucket", diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.mappings.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.mappings.json index c5c90be833c..6fafe3b1474 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.mappings.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", - "LogicalResourceId": "UserPool" + "LogicalResourceId": "UserPool", + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" } }, { "Source": { - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", - "LogicalResourceId": "UserPoolClientWeb" + "LogicalResourceId": "UserPoolClientWeb", + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" } }, { "Source": { - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", - "LogicalResourceId": "UserPoolClient" + "LogicalResourceId": "UserPoolClient", + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" } }, { "Source": { - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", - "LogicalResourceId": "IdentityPool" + "LogicalResourceId": "IdentityPool", + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" } }, { "Source": { - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", - "LogicalResourceId": "IdentityPoolRoleMap" + "LogicalResourceId": "IdentityPoolRoleMap", + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.source.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.source.template.json index 5278197515b..77c4ab35e3c 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.source.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.source.template.json @@ -114,7 +114,9 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - "main", + { + "Ref": "env" + }, "NONE" ] } @@ -136,24 +138,36 @@ ] }, "RoleName": { - "Fn::Join": [ - "", - [ - "upClientLambdaRolef8c4c57b", - { - "Fn::Select": [ - 3, + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userpoolClientLambdaRole" + }, + { + "Fn::Join": [ + "", + [ + "upClientLambdaRolef8c4c57b", { - "Fn::Split": [ - "-", - "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + { + "Ref": "AWS::StackName" + } + ] + } ] + }, + "-", + { + "Ref": "env" } ] - }, - "-", - "main" - ] + ] + } ] } } @@ -162,29 +176,49 @@ "Outputs": { "IdentityPoolId": { "Description": "Id for the identity pool", - "Value": "us-east-1:3d2fd52c-2247-42b8-8773-3102fce814b8" + "Value": { + "Ref": "IdentityPool" + } }, "IdentityPoolName": { - "Value": "backendonlyf8c4c57b_identitypool_f8c4c57b__main" + "Value": { + "Fn::GetAtt": [ + "IdentityPool", + "Name" + ] + } }, "UserPoolId": { "Description": "Id for the user pool", - "Value": "us-east-1_1rvCNKN5B" + "Value": { + "Ref": "UserPool" + } }, "UserPoolArn": { "Description": "Arn for the user pool", - "Value": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_1rvCNKN5B" + "Value": { + "Fn::GetAtt": [ + "UserPool", + "Arn" + ] + } }, "UserPoolName": { - "Value": "backendonlyf8c4c57b_userpool_f8c4c57b" + "Value": { + "Ref": "userPoolName" + } }, "AppClientIDWeb": { "Description": "The user pool app client id for web", - "Value": "2udsup370on7n0b1gdf8hpijc6" + "Value": { + "Ref": "UserPoolClientWeb" + } }, "AppClientID": { "Description": "The user pool app client id", - "Value": "773c808k3864f2k0sqk4j71gsj" + "Value": { + "Ref": "UserPoolClient" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.target.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.target.template.json index 15d25475c46..571da77b726 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.target.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.target.template.json @@ -1,6 +1,176 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.11.1\",\"stackType\":\"auth-Cognito\",\"metadata\":{}}", "Resources": { + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": { + "Ref": "emailVerificationMessage" + }, + "EmailVerificationSubject": { + "Ref": "emailVerificationSubject" + }, + "MfaConfiguration": { + "Ref": "mfaConfiguration" + }, + "Policies": { + "PasswordPolicy": { + "MinimumLength": { + "Ref": "passwordPolicyMinLength" + }, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userPoolName" + }, + { + "Fn::Join": [ + "", + [ + { + "Ref": "userPoolName" + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "UsernameAttributes": { + "Ref": "usernameAttributes" + }, + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "backenf8c4c57b_app_client", + "GenerateSecret": { + "Ref": "userpoolClientGenerateSecret" + }, + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "backenf8c4c57b_app_clientWeb", + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": { + "Ref": "allowUnauthenticatedIdentities" + }, + "CognitoIdentityProviders": [ + { + "ClientId": { + "Ref": "UserPoolClient" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + }, + { + "ClientId": { + "Ref": "UserPoolClientWeb" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "backendonlyf8c4c57b_identitypool_f8c4c57b", + { + "Fn::Join": [ + "", + [ + "backendonlyf8c4c57b_identitypool_f8c4c57b__", + { + "Ref": "env" + } + ] + ] + } + ] + } + } + }, "amplifyAuthauthenticatedUserRoleD8DA3689": { "Type": "AWS::IAM::Role", "Properties": { @@ -10,7 +180,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:33a8fea2-6293-4bec-8726-31e6b5817de5" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -60,7 +232,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:33a8fea2-6293-4bec-8726-31e6b5817de5" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -101,150 +275,34 @@ "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/unauthenticatedUserRole/Resource" } }, - "CDKMetadata": { - "Type": "AWS::CDK::Metadata", - "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/02LwQrCMBBEv8V7urbBg1fpyYtIxbPEZNVt0w00q0VC/l2KVHuamTczGvSmgnJlxlhY1xWerpAOGAXdSYztlBnjJdlwZ5IA6RxxOIbgVX3jn59N7QlZltWf7B2ykLzn8zI3weNOxNhHjyxZkekhTXAaTppzVhwcQhvXL62h2kK5aiNRMTxZqEdovvoBH9Args4AAAA=" - }, - "Metadata": { - "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/CDKMetadata/Default" - }, - "Condition": "CDKMetadataAvailable" - }, - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": "Your verification code is {####}", - "EmailVerificationSubject": "Your verification code", - "MfaConfiguration": "OFF", - "Policies": { - "PasswordPolicy": { - "MinimumLength": "8", - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false - } + "IdentityPoolId": { + "Ref": "IdentityPool" }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true + "Roles": { + "unauthenticated": { + "Ref": "unauthRoleArn" + }, + "authenticated": { + "Ref": "authRoleArn" } - ], - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolName": { - "Fn::Join": [ - "", - [ - "backendonlyf8c4c57b_userpool_f8c4c57b", - "-", - "main" - ] - ] - }, - "UsernameAttributes": [ - "email" - ], - "UsernameConfiguration": { - "CaseSensitive": false } - } - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "backenf8c4c57b_app_clientWeb", - "RefreshTokenValidity": "30", - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": "us-east-1_1rvCNKN5B" }, "DependsOn": [ - "amplifyAuthUserPool4BA7F805" + "IdentityPool" ] }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", + "CDKMetadata": { + "Type": "AWS::CDK::Metadata", "Properties": { - "ClientName": "backenf8c4c57b_app_client", - "GenerateSecret": "false", - "RefreshTokenValidity": "30", - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": "us-east-1_1rvCNKN5B" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/02LwQrCMBBEv8V7urbBg1fpyYtIxbPEZNVt0w00q0VC/l2KVHuamTczGvSmgnJlxlhY1xWerpAOGAXdSYztlBnjJdlwZ5IA6RxxOIbgVX3jn59N7QlZltWf7B2ykLzn8zI3weNOxNhHjyxZkekhTXAaTppzVhwcQhvXL62h2kK5aiNRMTxZqEdovvoBH9Args4AAAA=" }, - "DependsOn": [ - "amplifyAuthUserPool4BA7F805" - ] - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": "true", - "CognitoIdentityProviders": [ - { - "ClientId": "773c808k3864f2k0sqk4j71gsj", - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": "us-east-1_1rvCNKN5B" - } - ] - } - }, - { - "ClientId": "2udsup370on7n0b1gdf8hpijc6", - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": "us-east-1_1rvCNKN5B" - } - ] - } - } - ], - "IdentityPoolName": { - "Fn::Join": [ - "", - [ - "backendonlyf8c4c57b_identitypool_f8c4c57b__", - "main" - ] - ] - } - } - }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": "us-east-1:3d2fd52c-2247-42b8-8773-3102fce814b8", - "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-main-5e0fa-unauthRole", - "authenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-main-5e0fa-authRole" - } + "Metadata": { + "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/CDKMetadata/Default" }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC" - ] + "Condition": "CDKMetadataAvailable" } }, "Conditions": { @@ -515,19 +573,29 @@ }, "Outputs": { "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthUserPoolACA7606BRef": { - "Value": "us-east-1_W9u2NBSRe" + "Value": { + "Ref": "amplifyAuthUserPool4BA7F805" + } }, "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthUserPoolAppClientF2CDC3A8Ref": { - "Value": "55m5602upkjiv7819hcf2ht5v3" + "Value": { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + } }, "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthIdentityPool91CBC3ADRef": { - "Value": "us-east-1:33a8fea2-6293-4bec-8726-31e6b5817de5" + "Value": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthauthenticatedUserRole5699D34FRef": { - "Value": "amplify-backendonly-ge-amplifyAuthauthenticatedU-NrnOsacJVeCr" + "Value": { + "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" + } }, "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthunauthenticatedUserRole02B14E66Ref": { - "Value": "amplify-backendonly-ge-amplifyAuthunauthenticate-mFzNB8V2DE4J" + "Value": { + "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.mappings.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.mappings.json index d2fc08ac276..a7741f3e5d5 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.mappings.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR", - "LogicalResourceId": "S3Bucket" + "LogicalResourceId": "S3Bucket", + "StackName": "amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I", - "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" + "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.source.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.source.template.json index d623d0c18b3..2a102385b61 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.source.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.source.template.json @@ -84,7 +84,9 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - "main", + { + "Ref": "env" + }, "NONE" ] }, @@ -92,7 +94,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:PutObject,s3:GetObject,s3:DeleteObject", + { + "Ref": "s3PermissionsAuthenticatedPublic" + }, "DISALLOW" ] } @@ -102,7 +106,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:PutObject,s3:GetObject,s3:DeleteObject", + { + "Ref": "s3PermissionsAuthenticatedProtected" + }, "DISALLOW" ] } @@ -112,7 +118,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:PutObject,s3:GetObject,s3:DeleteObject", + { + "Ref": "s3PermissionsAuthenticatedPrivate" + }, "DISALLOW" ] } @@ -122,7 +130,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:PutObject", + { + "Ref": "s3PermissionsAuthenticatedUploads" + }, "DISALLOW" ] } @@ -132,7 +142,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:GetObject", + { + "Ref": "s3PermissionsGuestPublic" + }, "DISALLOW" ] } @@ -142,7 +154,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "DISALLOW", + { + "Ref": "s3PermissionsGuestUploads" + }, "DISALLOW" ] } @@ -152,7 +166,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "ALLOW", + { + "Ref": "AuthenticatedAllowList" + }, "DISALLOW" ] } @@ -162,7 +178,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "ALLOW", + { + "Ref": "GuestAllowList" + }, "DISALLOW" ] } @@ -172,10 +190,14 @@ "Outputs": { "BucketName": { "Description": "Bucket name for the S3 bucket", - "Value": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main" + "Value": { + "Ref": "S3Bucket" + } }, "Region": { - "Value": "us-east-1" + "Value": { + "Ref": "AWS::Region" + } } }, "Resources": { @@ -190,7 +212,9 @@ "Action": { "Fn::Split": [ ",", - "s3:PutObject,s3:GetObject,s3:DeleteObject" + { + "Ref": "s3PermissionsAuthenticatedPublic" + } ] }, "Resource": [ @@ -199,7 +223,9 @@ "", [ "arn:aws:s3:::", - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main", + { + "Ref": "S3Bucket" + }, "/public/*" ] ] @@ -208,12 +234,18 @@ } ] }, - "PolicyName": "Public_policy_c31471c3", + "PolicyName": { + "Ref": "s3PublicPolicy" + }, "Roles": [ - "amplify-backendonly-main-5e0fa-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -227,7 +259,9 @@ "Action": { "Fn::Split": [ ",", - "s3:PutObject,s3:GetObject,s3:DeleteObject" + { + "Ref": "s3PermissionsAuthenticatedProtected" + } ] }, "Resource": [ @@ -236,7 +270,9 @@ "", [ "arn:aws:s3:::", - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main", + { + "Ref": "S3Bucket" + }, "/protected/${cognito-identity.amazonaws.com:sub}/*" ] ] @@ -245,12 +281,18 @@ } ] }, - "PolicyName": "Protected_policy_c31471c3", + "PolicyName": { + "Ref": "s3ProtectedPolicy" + }, "Roles": [ - "amplify-backendonly-main-5e0fa-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -264,7 +306,9 @@ "Action": { "Fn::Split": [ ",", - "s3:PutObject,s3:GetObject,s3:DeleteObject" + { + "Ref": "s3PermissionsAuthenticatedPrivate" + } ] }, "Resource": [ @@ -273,7 +317,9 @@ "", [ "arn:aws:s3:::", - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main", + { + "Ref": "S3Bucket" + }, "/private/${cognito-identity.amazonaws.com:sub}/*" ] ] @@ -282,12 +328,18 @@ } ] }, - "PolicyName": "Private_policy_c31471c3", + "PolicyName": { + "Ref": "s3PrivatePolicy" + }, "Roles": [ - "amplify-backendonly-main-5e0fa-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -301,7 +353,9 @@ "Action": { "Fn::Split": [ ",", - "s3:PutObject" + { + "Ref": "s3PermissionsAuthenticatedUploads" + } ] }, "Resource": [ @@ -310,7 +364,9 @@ "", [ "arn:aws:s3:::", - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main", + { + "Ref": "S3Bucket" + }, "/uploads/*" ] ] @@ -319,12 +375,18 @@ } ] }, - "PolicyName": "Uploads_policy_c31471c3", + "PolicyName": { + "Ref": "s3UploadsPolicy" + }, "Roles": [ - "amplify-backendonly-main-5e0fa-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -338,7 +400,9 @@ "Action": { "Fn::Split": [ ",", - "s3:GetObject" + { + "Ref": "s3PermissionsGuestPublic" + } ] }, "Resource": [ @@ -347,7 +411,9 @@ "", [ "arn:aws:s3:::", - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main", + { + "Ref": "S3Bucket" + }, "/public/*" ] ] @@ -356,12 +422,18 @@ } ] }, - "PolicyName": "Public_policy_c31471c3", + "PolicyName": { + "Ref": "s3PublicPolicy" + }, "Roles": [ - "amplify-backendonly-main-5e0fa-unauthRole" + { + "Ref": "unauthRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -377,7 +449,9 @@ "", [ "arn:aws:s3:::", - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main", + { + "Ref": "S3Bucket" + }, "/protected/*" ] ] @@ -403,7 +477,9 @@ "", [ "arn:aws:s3:::", - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main" + { + "Ref": "S3Bucket" + } ] ] } @@ -411,12 +487,18 @@ ], "Version": "2012-10-17" }, - "PolicyName": "read_policy_c31471c3", + "PolicyName": { + "Ref": "s3ReadPolicy" + }, "Roles": [ - "amplify-backendonly-main-5e0fa-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -432,7 +514,9 @@ "", [ "arn:aws:s3:::", - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main", + { + "Ref": "S3Bucket" + }, "/protected/*" ] ] @@ -456,7 +540,9 @@ "", [ "arn:aws:s3:::", - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main" + { + "Ref": "S3Bucket" + } ] ] } @@ -464,12 +550,18 @@ ], "Version": "2012-10-17" }, - "PolicyName": "read_policy_c31471c3", + "PolicyName": { + "Ref": "s3ReadPolicy" + }, "Roles": [ - "amplify-backendonly-main-5e0fa-unauthRole" + { + "Ref": "unauthRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.target.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.target.template.json index a7608416efc..ec4746eb723 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.target.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.target.template.json @@ -1,10 +1,90 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.4.3\",\"stackType\":\"storage-S3\",\"metadata\":{}}", "Resources": { + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "bucketName" + }, + { + "Fn::Join": [ + "", + [ + { + "Ref": "bucketName" + }, + { + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + { + "Ref": "AWS::StackName" + } + ] + } + ] + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "Id": "S3CORSRuleId1", + "MaxAge": 3000 + } + ] + }, + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + } + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketPolicy14D90AB6": { "Type": "AWS::S3::BucketPolicy", "Properties": { - "Bucket": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + "Bucket": { + "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" + }, "PolicyDocument": { "Statement": [ { @@ -19,12 +99,22 @@ "AWS": "*" }, "Resource": [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, { "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/*" ] ] @@ -40,15 +130,30 @@ ], "Effect": "Allow", "Principal": { - "AWS": "arn:aws:iam::123456789012:role/amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + "AWS": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + } }, "Resource": [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, { "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/*" ] ] @@ -66,8 +171,15 @@ "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketAutoDeleteObjectsCustomResource31970782": { "Type": "Custom::S3AutoDeleteObjects", "Properties": { - "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "BucketName": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" + "ServiceToken": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "Arn" + ] + }, + "BucketName": { + "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" + } }, "DependsOn": [ "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketPolicy14D90AB6" @@ -115,14 +227,21 @@ "Timeout": 900, "MemorySize": 128, "Handler": "index.handler", - "Role": "arn:aws:iam::123456789012:role/amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Role": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + }, "Runtime": "nodejs22.x", "Description": { "Fn::Join": [ "", [ "Lambda function for auto-deleting objects in ", - "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" + }, " S3 bucket." ] ] @@ -148,7 +267,9 @@ "created-by": "amplify" }, "Type": "String", - "Value": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" + "Value": { + "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" + } }, "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/BACKENDONLYCB_1_A_13_AB_81664_ECAA_7_D_015068_AB_2_D_0165_E_0_FA_GEN_2_MAIN_BUCKET_NAMEParameter/Resource" @@ -166,7 +287,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/public/*" ] ] @@ -183,7 +309,12 @@ } }, "Effect": "Allow", - "Resource": "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" + "Resource": { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + } } ], "Version": "2012-10-17" @@ -212,7 +343,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/public/*" ] ] @@ -221,7 +357,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/protected/*" ] ] @@ -230,7 +371,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/private/*" ] ] @@ -245,7 +391,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/public/*" ] ] @@ -254,7 +405,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/protected/*" ] ] @@ -263,7 +419,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/private/*" ] ] @@ -285,7 +446,12 @@ } }, "Effect": "Allow", - "Resource": "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" + "Resource": { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + } }, { "Action": "s3:DeleteObject", @@ -295,7 +461,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/public/*" ] ] @@ -304,7 +475,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/protected/*" ] ] @@ -313,7 +489,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", + { + "Fn::GetAtt": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "Arn" + ] + }, "/private/*" ] ] @@ -343,70 +524,6 @@ "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" - }, - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketName": { - "Fn::Join": [ - "", - [ - "backendonlycb1a13ab81664ecaa7d015068ab2d016", - { - "Fn::Select": [ - 3, - { - "Fn::Split": [ - "-", - "amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR" - ] - } - ] - }, - "-", - "main" - ] - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "Id": "S3CORSRuleId1", - "MaxAge": 3000 - } - ] - }, - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - } - }, - "UpdateReplacePolicy": "Retain", - "DeletionPolicy": "Retain" } }, "Conditions": { @@ -685,7 +802,9 @@ }, "Outputs": { "amplifybackendonlygen2mainbranch8e0f260810storagebackendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket8CDA8E49Ref": { - "Value": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" + "Value": { + "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.template.json index 215b67b1a19..e4c6ac26f39 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.template.json @@ -303,10 +303,6 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-ge-amplifyAuthauthenticatedU-NrnOsacJVeCr" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.template.json index 4c65e86344c..7d2b002bc3d 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.template.json @@ -141,9 +141,6 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" }, - "DependsOn": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketPolicy14D90AB6" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -200,9 +197,6 @@ ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.template.json index fcc393b3d08..f92f2b63239 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.template.json @@ -177,10 +177,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_1rvCNKN5B" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", @@ -192,10 +189,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_1rvCNKN5B" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClientRole": { "Type": "AWS::IAM::Role", @@ -288,10 +282,7 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-main-5e0fa-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-main-5e0fa-authRole" } - }, - "DependsOn": [ - "IdentityPool" - ] + } } }, "Outputs": { diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.template.json index 79c87cef7b1..87ee6202dd7 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.template.json @@ -277,7 +277,6 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -314,7 +313,6 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -351,7 +349,6 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -388,7 +385,6 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -425,7 +421,6 @@ "amplify-backendonly-main-5e0fa-unauthRole" ] }, - "DependsOn": [], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -480,7 +475,6 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -533,7 +527,6 @@ "amplify-backendonly-main-5e0fa-unauthRole" ] }, - "DependsOn": [], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json index 514e117ec84..53219238c26 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" } }, { "Source": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" } }, { "Source": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" } }, { "Source": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" } }, { "Source": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.source.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.source.template.json index 847baa10ccd..ab4940ac52f 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.source.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.source.template.json @@ -10,7 +10,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:84e99afb-f5e8-4fa4-bc21-875242ea6689" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -60,7 +62,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:84e99afb-f5e8-4fa4-bc21-875242ea6689" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -380,19 +384,29 @@ }, "Outputs": { "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthUserPool9D23206ERef": { - "Value": "us-east-1_olNpwuJIL" + "Value": { + "Ref": "amplifyAuthUserPool4BA7F805" + } }, "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthUserPoolAppClientCD70FA03Ref": { - "Value": "6bdqt8vavvh3efopgb031lc3jg" + "Value": { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + } }, "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthIdentityPoolA0C42AE7Ref": { - "Value": "us-east-1:84e99afb-f5e8-4fa4-bc21-875242ea6689" + "Value": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthauthenticatedUserRole95356EEFRef": { - "Value": "amplify-discussions-gen-amplifyAuthauthenticatedU-cOJdlmnFCZS8" + "Value": { + "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" + } }, "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthunauthenticatedUserRoleE19AFD6CRef": { - "Value": "amplify-discussions-gen-amplifyAuthunauthenticate-LUKlk2oThU8X" + "Value": { + "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json index f5445c5ca22..0eb97dec084 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json @@ -1,6 +1,5 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "Temporary holding stack for Gen2 migration", "Resources": { "amplifyAuthUserPool4BA7F805": { "Type": "AWS::Cognito::UserPool", @@ -76,27 +75,6 @@ "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPool/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 172800, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_olNpwuJIL" - }, - "Metadata": { - "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -123,19 +101,46 @@ "SupportedIdentityProviders": [ "COGNITO" ], - "UserPoolId": "us-east-1_olNpwuJIL" + "UserPoolId": { + "Ref": "amplifyAuthUserPool4BA7F805" + } }, "Metadata": { "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPoolAppClient/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 172800, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": { + "Ref": "amplifyAuthUserPool4BA7F805" + } + }, + "Metadata": { + "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { "AllowUnauthenticatedIdentities": false, "CognitoIdentityProviders": [ { - "ClientId": "6bdqt8vavvh3efopgb031lc3jg", + "ClientId": { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + }, "ProviderName": { "Fn::Join": [ "", @@ -145,7 +150,9 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - "us-east-1_olNpwuJIL" + { + "Ref": "amplifyAuthUserPool4BA7F805" + } ] ] } @@ -182,7 +189,9 @@ "amplifyAuthIdentityPoolRoleAttachment045F17C8": { "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "IdentityPoolId": "us-east-1:84e99afb-f5e8-4fa4-bc21-875242ea6689", + "IdentityPoolId": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + }, "RoleMappings": { "UserPoolWebClientRoleMapping": { "AmbiguousRoleResolution": "AuthenticatedRole", @@ -195,9 +204,13 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - "us-east-1_olNpwuJIL", + { + "Ref": "amplifyAuthUserPool4BA7F805" + }, ":", - "6bdqt8vavvh3efopgb031lc3jg" + { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + } ] ] }, @@ -205,8 +218,18 @@ } }, "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-discussions-gen-amplifyAuthunauthenticate-LUKlk2oThU8X", - "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-gen-amplifyAuthauthenticatedU-cOJdlmnFCZS8" + "unauthenticated": { + "Fn::GetAtt": [ + "amplifyAuthunauthenticatedUserRole2B524D9E", + "Arn" + ] + }, + "authenticated": { + "Fn::GetAtt": [ + "amplifyAuthauthenticatedUserRoleD8DA3689", + "Arn" + ] + } } }, "DependsOn": [ diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.mappings.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.mappings.json index 0484781a42e..2bc43c0d589 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.mappings.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH", - "LogicalResourceId": "activity1E902D9C" + "LogicalResourceId": "activity1E902D9C", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding", - "LogicalResourceId": "activity1E902D9C" + "LogicalResourceId": "activity1E902D9C", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.source.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.source.template.json index 925acc7bf10..b420ceb50fa 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.source.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.source.template.json @@ -280,13 +280,25 @@ }, "Outputs": { "amplifydiscussionsgen2mainbranch96dfd1dc44storageactivityEF3255CDArn": { - "Value": "arn:aws:dynamodb:us-east-1:123456789012:table/amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-activity1E902D9C-TT6R2GXJ05FS" + "Value": { + "Fn::GetAtt": [ + "activity1E902D9C", + "Arn" + ] + } }, "amplifydiscussionsgen2mainbranch96dfd1dc44storageactivityEF3255CDStreamArn": { - "Value": "arn:aws:dynamodb:us-east-1:123456789012:table/amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-activity1E902D9C-TT6R2GXJ05FS/stream/2026-03-07T18:02:23.205" + "Value": { + "Fn::GetAtt": [ + "activity1E902D9C", + "StreamArn" + ] + } }, "amplifydiscussionsgen2mainbranch96dfd1dc44storageactivityEF3255CDRef": { - "Value": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-activity1E902D9C-TT6R2GXJ05FS" + "Value": { + "Ref": "activity1E902D9C" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.target.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.target.template.json index 9d199bf4263..c827d83e268 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.target.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.target.template.json @@ -1,6 +1,5 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "Temporary holding stack for Gen2 migration", "Resources": { "activity1E902D9C": { "Type": "AWS::DynamoDB::Table", diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.mappings.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.mappings.json index 46ccb104e47..eba71ce8ad5 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.mappings.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", - "LogicalResourceId": "UserPool" + "LogicalResourceId": "UserPool", + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" } }, { "Source": { - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", - "LogicalResourceId": "UserPoolClientWeb" + "LogicalResourceId": "UserPoolClientWeb", + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" } }, { "Source": { - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", - "LogicalResourceId": "UserPoolClient" + "LogicalResourceId": "UserPoolClient", + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" } }, { "Source": { - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", - "LogicalResourceId": "IdentityPool" + "LogicalResourceId": "IdentityPool", + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" } }, { "Source": { - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", - "LogicalResourceId": "IdentityPoolRoleMap" + "LogicalResourceId": "IdentityPoolRoleMap", + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.source.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.source.template.json index 8d216ad870f..ea99bcb0fee 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.source.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.source.template.json @@ -129,7 +129,9 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - "main", + { + "Ref": "env" + }, "NONE" ] } @@ -176,24 +178,34 @@ } ], "RoleName": { - "Fn::Join": [ - "", - [ - "sns22367c68", - { - "Fn::Select": [ - 3, + "Fn::If": [ + "ShouldNotCreateEnvResources", + "discus22367c68_sns-role", + { + "Fn::Join": [ + "", + [ + "sns22367c68", { - "Fn::Split": [ - "-", - "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + { + "Ref": "AWS::StackName" + } + ] + } ] + }, + "-", + { + "Ref": "env" } ] - }, - "-", - "main" - ] + ] + } ] } } @@ -214,24 +226,36 @@ ] }, "RoleName": { - "Fn::Join": [ - "", - [ - "upClientLambdaRole22367c68", - { - "Fn::Select": [ - 3, + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userpoolClientLambdaRole" + }, + { + "Fn::Join": [ + "", + [ + "upClientLambdaRole22367c68", { - "Fn::Split": [ - "-", - "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + { + "Ref": "AWS::StackName" + } + ] + } ] + }, + "-", + { + "Ref": "env" } ] - }, - "-", - "main" - ] + ] + } ] } } @@ -240,33 +264,58 @@ "Outputs": { "IdentityPoolId": { "Description": "Id for the identity pool", - "Value": "us-east-1:d1df5c0c-2dd2-4471-bb0b-59c99bdbfe7f" + "Value": { + "Ref": "IdentityPool" + } }, "IdentityPoolName": { - "Value": "discussions22367c68_identitypool_22367c68__main" + "Value": { + "Fn::GetAtt": [ + "IdentityPool", + "Name" + ] + } }, "UserPoolId": { "Description": "Id for the user pool", - "Value": "us-east-1_Zs9EZpCYX" + "Value": { + "Ref": "UserPool" + } }, "UserPoolArn": { "Description": "Arn for the user pool", - "Value": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_Zs9EZpCYX" + "Value": { + "Fn::GetAtt": [ + "UserPool", + "Arn" + ] + } }, "UserPoolName": { - "Value": "discussions22367c68_userpool_22367c68" + "Value": { + "Ref": "userPoolName" + } }, "AppClientIDWeb": { "Description": "The user pool app client id for web", - "Value": "ptm2eqjiee7l3e202lstfjd3r" + "Value": { + "Ref": "UserPoolClientWeb" + } }, "AppClientID": { "Description": "The user pool app client id", - "Value": "75sq8s16g37d0as1148og20p3i" + "Value": { + "Ref": "UserPoolClient" + } }, "CreatedSNSRole": { "Description": "role arn", - "Value": "arn:aws:iam::123456789012:role/sns22367c68d5a80-main" + "Value": { + "Fn::GetAtt": [ + "SNSRole", + "Arn" + ] + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.target.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.target.template.json index 05a72f6824d..d3d5d06d016 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.target.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.target.template.json @@ -1,6 +1,199 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.11.1\",\"stackType\":\"auth-Cognito\",\"metadata\":{}}", "Resources": { + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": { + "Ref": "emailVerificationMessage" + }, + "EmailVerificationSubject": { + "Ref": "emailVerificationSubject" + }, + "MfaConfiguration": { + "Ref": "mfaConfiguration" + }, + "Policies": { + "PasswordPolicy": { + "MinimumLength": { + "Ref": "passwordPolicyMinLength" + }, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + }, + { + "Mutable": true, + "Name": "phone_number", + "Required": true + } + ], + "SmsAuthenticationMessage": { + "Ref": "smsAuthenticationMessage" + }, + "SmsConfiguration": { + "ExternalId": "discus22367c68_role_external_id", + "SnsCallerArn": { + "Fn::GetAtt": [ + "SNSRole", + "Arn" + ] + } + }, + "SmsVerificationMessage": { + "Ref": "smsVerificationMessage" + }, + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userPoolName" + }, + { + "Fn::Join": [ + "", + [ + { + "Ref": "userPoolName" + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "UsernameAttributes": { + "Ref": "usernameAttributes" + }, + "UsernameConfiguration": { + "CaseSensitive": false + } + }, + "DependsOn": [ + "SNSRole" + ] + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "discus22367c68_app_client", + "GenerateSecret": { + "Ref": "userpoolClientGenerateSecret" + }, + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "discus22367c68_app_clientWeb", + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": { + "Ref": "allowUnauthenticatedIdentities" + }, + "CognitoIdentityProviders": [ + { + "ClientId": { + "Ref": "UserPoolClient" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + }, + { + "ClientId": { + "Ref": "UserPoolClientWeb" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "discussions22367c68_identitypool_22367c68", + { + "Fn::Join": [ + "", + [ + "discussions22367c68_identitypool_22367c68__", + { + "Ref": "env" + } + ] + ] + } + ] + } + } + }, "amplifyAuthauthenticatedUserRoleD8DA3689": { "Type": "AWS::IAM::Role", "Properties": { @@ -10,7 +203,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:84e99afb-f5e8-4fa4-bc21-875242ea6689" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -60,7 +255,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:84e99afb-f5e8-4fa4-bc21-875242ea6689" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -101,162 +298,34 @@ "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/unauthenticatedUserRole/Resource" } }, - "CDKMetadata": { - "Type": "AWS::CDK::Metadata", - "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/02LwQrCMBBEv8V7urbBg1fpyYtIxbPEZNVt0w00q0VC/l2KVHuamTczGvSmgnJlxlhY1xWerpAOGAXdSYztlBnjJdlwZ5IA6RxxOIbgVX3jn59N7QlZltWf7B2ykLzn8zI3weNOxNhHjyxZkekhTXAaTppzVhwcQhvXL62h2kK5aiNRMTxZqEdovvoBH9Args4AAAA=" - }, - "Metadata": { - "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/CDKMetadata/Default" - }, - "Condition": "CDKMetadataAvailable" - }, - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": "Here is your verification code {####}", - "EmailVerificationSubject": "Verification", - "MfaConfiguration": "OFF", - "Policies": { - "PasswordPolicy": { - "MinimumLength": "8", - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false - } + "IdentityPoolId": { + "Ref": "IdentityPool" }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true + "Roles": { + "unauthenticated": { + "Ref": "unauthRoleArn" }, - { - "Mutable": true, - "Name": "phone_number", - "Required": true + "authenticated": { + "Ref": "authRoleArn" } - ], - "SmsAuthenticationMessage": "Your authentication code is {####}", - "SmsConfiguration": { - "ExternalId": "discus22367c68_role_external_id", - "SnsCallerArn": "arn:aws:iam::123456789012:role/sns22367c68d5a80-main" - }, - "SmsVerificationMessage": "Your verification code is {####}", - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolName": { - "Fn::Join": [ - "", - [ - "discussions22367c68_userpool_22367c68", - "-", - "main" - ] - ] - }, - "UsernameAttributes": [ - "phone_number" - ], - "UsernameConfiguration": { - "CaseSensitive": false } }, - "DependsOn": [] - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "discus22367c68_app_clientWeb", - "RefreshTokenValidity": "120", - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": "us-east-1_Zs9EZpCYX" - }, "DependsOn": [ - "amplifyAuthUserPool4BA7F805" + "IdentityPool" ] }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", + "CDKMetadata": { + "Type": "AWS::CDK::Metadata", "Properties": { - "ClientName": "discus22367c68_app_client", - "GenerateSecret": "false", - "RefreshTokenValidity": "120", - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": "us-east-1_Zs9EZpCYX" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/02LwQrCMBBEv8V7urbBg1fpyYtIxbPEZNVt0w00q0VC/l2KVHuamTczGvSmgnJlxlhY1xWerpAOGAXdSYztlBnjJdlwZ5IA6RxxOIbgVX3jn59N7QlZltWf7B2ykLzn8zI3weNOxNhHjyxZkekhTXAaTppzVhwcQhvXL62h2kK5aiNRMTxZqEdovvoBH9Args4AAAA=" }, - "DependsOn": [ - "amplifyAuthUserPool4BA7F805" - ] - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": "false", - "CognitoIdentityProviders": [ - { - "ClientId": "75sq8s16g37d0as1148og20p3i", - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": "us-east-1_Zs9EZpCYX" - } - ] - } - }, - { - "ClientId": "ptm2eqjiee7l3e202lstfjd3r", - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": "us-east-1_Zs9EZpCYX" - } - ] - } - } - ], - "IdentityPoolName": { - "Fn::Join": [ - "", - [ - "discussions22367c68_identitypool_22367c68__", - "main" - ] - ] - } - } - }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": "us-east-1:d1df5c0c-2dd2-4471-bb0b-59c99bdbfe7f", - "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-unauthRole", - "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-authRole" - } + "Metadata": { + "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/CDKMetadata/Default" }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC" - ] + "Condition": "CDKMetadataAvailable" } }, "Conditions": { @@ -527,19 +596,29 @@ }, "Outputs": { "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthUserPool9D23206ERef": { - "Value": "us-east-1_olNpwuJIL" + "Value": { + "Ref": "amplifyAuthUserPool4BA7F805" + } }, "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthUserPoolAppClientCD70FA03Ref": { - "Value": "6bdqt8vavvh3efopgb031lc3jg" + "Value": { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + } }, "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthIdentityPoolA0C42AE7Ref": { - "Value": "us-east-1:84e99afb-f5e8-4fa4-bc21-875242ea6689" + "Value": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthauthenticatedUserRole95356EEFRef": { - "Value": "amplify-discussions-gen-amplifyAuthauthenticatedU-cOJdlmnFCZS8" + "Value": { + "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" + } }, "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthunauthenticatedUserRoleE19AFD6CRef": { - "Value": "amplify-discussions-gen-amplifyAuthunauthenticate-LUKlk2oThU8X" + "Value": { + "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.mappings.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.mappings.json index 7c0f1c98009..1a8df8dff20 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.mappings.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4", - "LogicalResourceId": "DynamoDBTable" + "LogicalResourceId": "DynamoDBTable", + "StackName": "amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH", - "LogicalResourceId": "activity1E902D9C" + "LogicalResourceId": "activity1E902D9C", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.source.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.source.template.json index 93866f1ecab..e9b1282aba4 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.source.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.source.template.json @@ -24,41 +24,60 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - "main", + { + "Ref": "env" + }, "NONE" ] } }, - "Resources": { - "MigrationPlaceholder": { - "Type": "AWS::CloudFormation::WaitConditionHandle", - "Properties": {} - } - }, + "Resources": {}, "Outputs": { "Name": { - "Value": "activity-main" + "Value": { + "Ref": "DynamoDBTable" + } }, "Arn": { - "Value": "arn:aws:dynamodb:us-east-1:123456789012:table/activity-main" + "Value": { + "Fn::GetAtt": [ + "DynamoDBTable", + "Arn" + ] + } }, "StreamArn": { - "Value": "arn:aws:dynamodb:us-east-1:123456789012:table/activity-main/stream/2026-03-07T17:11:10.591" + "Value": { + "Fn::GetAtt": [ + "DynamoDBTable", + "StreamArn" + ] + } }, "PartitionKeyName": { - "Value": "id" + "Value": { + "Ref": "partitionKeyName" + } }, "PartitionKeyType": { - "Value": "S" + "Value": { + "Ref": "partitionKeyType" + } }, "SortKeyName": { - "Value": "userId" + "Value": { + "Ref": "sortKeyName" + } }, "SortKeyType": { - "Value": "S" + "Value": { + "Ref": "sortKeyType" + } }, "Region": { - "Value": "us-east-1" + "Value": { + "Ref": "AWS::Region" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.target.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.target.template.json index c801abd04fe..a5383227fe4 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.target.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.target.template.json @@ -1,16 +1,6 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.21.0\",\"stackType\":\"custom\",\"metadata\":{}}", "Resources": { - "CDKMetadata": { - "Type": "AWS::CDK::Metadata", - "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/yXGOwqEMBAA0LPYJ6MGi+3tLdReJplZiJ8EnERZxLsvaPWeAdPUUBV4ina06NVbuDqWxDQkdIvCUyb6BdwiWbhGtCur9hue3KpniXl3fKsQiWGW8jAG6g9UxSze6z2H5DeG/vUPUV/XUG4AAAA=" - }, - "Metadata": { - "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/storage/CDKMetadata/Default" - }, - "Condition": "CDKMetadataAvailable" - }, "activity1E902D9C": { "Type": "AWS::DynamoDB::Table", "Properties": { @@ -68,16 +58,38 @@ "StreamViewType": "NEW_IMAGE" }, "TableName": { - "Fn::Join": [ - "", - [ - "activity", - "-", - "main" - ] + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "tableName" + }, + { + "Fn::Join": [ + "", + [ + { + "Ref": "tableName" + }, + "-", + { + "Ref": "env" + } + ] + ] + } ] } } + }, + "CDKMetadata": { + "Type": "AWS::CDK::Metadata", + "Properties": { + "Analytics": "v2:deflate64:H4sIAAAAAAAA/yXGOwqEMBAA0LPYJ6MGi+3tLdReJplZiJ8EnERZxLsvaPWeAdPUUBV4ina06NVbuDqWxDQkdIvCUyb6BdwiWbhGtCur9hue3KpniXl3fKsQiWGW8jAG6g9UxSze6z2H5DeG/vUPUV/XUG4AAAA=" + }, + "Metadata": { + "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/storage/CDKMetadata/Default" + }, + "Condition": "CDKMetadataAvailable" } }, "Conditions": { @@ -348,13 +360,25 @@ }, "Outputs": { "amplifydiscussionsgen2mainbranch96dfd1dc44storageactivityEF3255CDArn": { - "Value": "arn:aws:dynamodb:us-east-1:123456789012:table/amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-activity1E902D9C-TT6R2GXJ05FS" + "Value": { + "Fn::GetAtt": [ + "activity1E902D9C", + "Arn" + ] + } }, "amplifydiscussionsgen2mainbranch96dfd1dc44storageactivityEF3255CDStreamArn": { - "Value": "arn:aws:dynamodb:us-east-1:123456789012:table/amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-activity1E902D9C-TT6R2GXJ05FS/stream/2026-03-07T18:02:23.205" + "Value": { + "Fn::GetAtt": [ + "activity1E902D9C", + "StreamArn" + ] + } }, "amplifydiscussionsgen2mainbranch96dfd1dc44storageactivityEF3255CDRef": { - "Value": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-activity1E902D9C-TT6R2GXJ05FS" + "Value": { + "Ref": "activity1E902D9C" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.template.json index 995d534b583..c51c35ae518 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.template.json @@ -308,10 +308,6 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-gen-amplifyAuthauthenticatedU-cOJdlmnFCZS8" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.template.json index b9cb6fb96d4..e93e870ea9b 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.template.json @@ -255,8 +255,7 @@ "UsernameConfiguration": { "CaseSensitive": false } - }, - "DependsOn": [] + } }, "UserPoolClientWeb": { "Type": "AWS::Cognito::UserPoolClient", @@ -267,10 +266,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Zs9EZpCYX" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", @@ -282,10 +278,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Zs9EZpCYX" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClientRole": { "Type": "AWS::IAM::Role", @@ -378,10 +371,7 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-authRole" } - }, - "DependsOn": [ - "IdentityPool" - ] + } } }, "Outputs": { diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.mappings.json index 18fe4e64dc6..b4e92bdd13e 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW", - "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047" + "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding", - "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047" + "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.source.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.source.template.json index e689d3fe4c5..4a4cb7d7ad0 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.source.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.source.template.json @@ -13,7 +13,12 @@ "kinesis:PutRecord", "kinesis:PutRecords" ], - "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main" + "Resource": { + "Fn::GetAtt": [ + "moodboardKinesisKinesisStreamD5E97047", + "Arn" + ] + } } ] }, @@ -40,7 +45,12 @@ "kinesis:PutRecord", "kinesis:PutRecords" ], - "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main" + "Resource": { + "Fn::GetAtt": [ + "moodboardKinesisKinesisStreamD5E97047", + "Arn" + ] + } } ] }, @@ -68,16 +78,28 @@ }, "Outputs": { "kinesisStreamArn": { - "Value": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main" + "Value": { + "Fn::GetAtt": [ + "moodboardKinesisKinesisStreamD5E97047", + "Arn" + ] + } }, "kinesisStreamId": { - "Value": "moodboardKinesis-gen2-main" + "Value": { + "Ref": "moodboardKinesisKinesisStreamD5E97047" + } }, "kinesisStreamShardCount": { "Value": "1" }, "amplifymoodboardgen2mainbranchf7e4caeabbanalyticsmoodboardKinesisKinesisStreamBD82380AArn": { - "Value": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main" + "Value": { + "Fn::GetAtt": [ + "moodboardKinesisKinesisStreamD5E97047", + "Arn" + ] + } } }, "Conditions": { diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.target.template.json index 0e5ee0af9e1..ddf15cda6e6 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.target.template.json @@ -1,6 +1,5 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "Temporary holding stack for Gen2 migration", "Resources": { "moodboardKinesisKinesisStreamD5E97047": { "Type": "AWS::Kinesis::Stream", diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json index 1c699ef3e6d..55c5abf24ff 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" } }, { "Source": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" } }, { "Source": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" } }, { "Source": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" } }, { "Source": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.source.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.source.template.json index ec18192c664..67f424dedeb 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.source.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.source.template.json @@ -10,7 +10,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -60,7 +62,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -380,19 +384,29 @@ }, "Outputs": { "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthUserPoolAE38F854Ref": { - "Value": "us-east-1_1A4RMvPNr" + "Value": { + "Ref": "amplifyAuthUserPool4BA7F805" + } }, "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthUserPoolAppClientA69935A4Ref": { - "Value": "2otm0qh3fj270k5tdn95cgjlm5" + "Value": { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + } }, "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthIdentityPoolA9AA7B9FRef": { - "Value": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb" + "Value": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthauthenticatedUserRole0AA19633Ref": { - "Value": "amplify-moodboard-ge-amplifyAuthauthenticatedU-UANJImTyKZ7p" + "Value": { + "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" + } }, "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthunauthenticatedUserRoleBEC4D39ARef": { - "Value": "amplify-moodboard-ge-amplifyAuthunauthenticate-rp3r1qUbAKVV" + "Value": { + "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json index e41793ca420..7897d21f3e0 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json @@ -1,6 +1,5 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "Temporary holding stack for Gen2 migration", "Resources": { "amplifyAuthUserPool4BA7F805": { "Type": "AWS::Cognito::UserPool", @@ -71,27 +70,6 @@ "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_1A4RMvPNr" - }, - "Metadata": { - "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -118,19 +96,46 @@ "SupportedIdentityProviders": [ "COGNITO" ], - "UserPoolId": "us-east-1_1A4RMvPNr" + "UserPoolId": { + "Ref": "amplifyAuthUserPool4BA7F805" + } }, "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPoolAppClient/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": { + "Ref": "amplifyAuthUserPool4BA7F805" + } + }, + "Metadata": { + "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { "AllowUnauthenticatedIdentities": true, "CognitoIdentityProviders": [ { - "ClientId": "2otm0qh3fj270k5tdn95cgjlm5", + "ClientId": { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + }, "ProviderName": { "Fn::Join": [ "", @@ -140,7 +145,9 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - "us-east-1_1A4RMvPNr" + { + "Ref": "amplifyAuthUserPool4BA7F805" + } ] ] } @@ -177,7 +184,9 @@ "amplifyAuthIdentityPoolRoleAttachment045F17C8": { "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "IdentityPoolId": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb", + "IdentityPoolId": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + }, "RoleMappings": { "UserPoolWebClientRoleMapping": { "AmbiguousRoleResolution": "AuthenticatedRole", @@ -190,9 +199,13 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - "us-east-1_1A4RMvPNr", + { + "Ref": "amplifyAuthUserPool4BA7F805" + }, ":", - "2otm0qh3fj270k5tdn95cgjlm5" + { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + } ] ] }, @@ -200,8 +213,18 @@ } }, "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-ge-amplifyAuthunauthenticate-rp3r1qUbAKVV", - "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-ge-amplifyAuthauthenticatedU-UANJImTyKZ7p" + "unauthenticated": { + "Fn::GetAtt": [ + "amplifyAuthunauthenticatedUserRole2B524D9E", + "Arn" + ] + }, + "authenticated": { + "Fn::GetAtt": [ + "amplifyAuthauthenticatedUserRoleD8DA3689", + "Arn" + ] + } } }, "DependsOn": [ diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.mappings.json index 48bd336abd1..4bf067c041c 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP", - "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" + "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding", - "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" + "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.source.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.source.template.json index 26152a149ed..55aeb882f39 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.source.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.source.template.json @@ -4,7 +4,9 @@ "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketPolicy9A17D834": { "Type": "AWS::S3::BucketPolicy", "Properties": { - "Bucket": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + "Bucket": { + "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" + }, "PolicyDocument": { "Statement": [ { @@ -19,12 +21,22 @@ "AWS": "*" }, "Resource": [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, { "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/*" ] ] @@ -40,15 +52,30 @@ ], "Effect": "Allow", "Principal": { - "AWS": "arn:aws:iam::123456789012:role/amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + "AWS": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + } }, "Resource": [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, { "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/*" ] ] @@ -66,8 +93,15 @@ "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketAutoDeleteObjectsCustomResource6C820EA7": { "Type": "Custom::S3AutoDeleteObjects", "Properties": { - "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "BucketName": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" + "ServiceToken": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "Arn" + ] + }, + "BucketName": { + "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" + } }, "DependsOn": [ "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketPolicy9A17D834" @@ -115,14 +149,21 @@ "Timeout": 900, "MemorySize": 128, "Handler": "index.handler", - "Role": "arn:aws:iam::123456789012:role/amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Role": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + }, "Runtime": "nodejs22.x", "Description": { "Fn::Join": [ "", [ "Lambda function for auto-deleting objects in ", - "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" + }, " S3 bucket." ] ] @@ -148,7 +189,9 @@ "created-by": "amplify" }, "Type": "String", - "Value": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" + "Value": { + "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" + } }, "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/storage/MOODBOARD_20_E_29595008142_E_3_AD_16_F_01_C_4066_E_1_C_41959_A_GEN_2_MAIN_BUCKET_NAMEParameter/Resource" @@ -166,7 +209,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/public/*" ] ] @@ -183,7 +231,12 @@ } }, "Effect": "Allow", - "Resource": "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" + "Resource": { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + } } ], "Version": "2012-10-17" @@ -212,7 +265,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/public/*" ] ] @@ -221,7 +279,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/protected/*" ] ] @@ -230,7 +293,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/private/*" ] ] @@ -245,7 +313,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/public/*" ] ] @@ -254,7 +327,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/protected/*" ] ] @@ -263,7 +341,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/private/*" ] ] @@ -285,7 +368,12 @@ } }, "Effect": "Allow", - "Resource": "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" + "Resource": { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + } }, { "Action": "s3:DeleteObject", @@ -295,7 +383,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/public/*" ] ] @@ -304,7 +397,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/protected/*" ] ] @@ -313,7 +411,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/private/*" ] ] @@ -621,7 +724,9 @@ }, "Outputs": { "amplifymoodboardgen2mainbranchf7e4caeabbstoragemoodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket352A7A47Ref": { - "Value": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" + "Value": { + "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.target.template.json index d40a0c67f7d..ad47f276319 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.target.template.json @@ -1,6 +1,5 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "Temporary holding stack for Gen2 migration", "Resources": { "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65": { "Type": "AWS::S3::Bucket", diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.mappings.json index 2f3cfeed033..f551223b652 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S", - "LogicalResourceId": "KinesisStream" + "LogicalResourceId": "KinesisStream", + "StackName": "amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW", - "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047" + "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.source.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.source.template.json index 0133af0ad57..3e220a77f7d 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.source.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.source.template.json @@ -28,7 +28,9 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - "main", + { + "Ref": "env" + }, "NONE" ] } @@ -37,9 +39,13 @@ "CognitoUnauthPolicy": { "Type": "AWS::IAM::Policy", "Properties": { - "PolicyName": "kinesis_amplify_bca5ce95", + "PolicyName": { + "Ref": "unauthPolicyName" + }, "Roles": [ - "amplify-moodboard-main-1959a-unauthRole" + { + "Ref": "unauthRoleName" + } ], "PolicyDocument": { "Version": "2012-10-17", @@ -50,7 +56,12 @@ "kinesis:PutRecord", "kinesis:PutRecords" ], - "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-main" + "Resource": { + "Fn::GetAtt": [ + "KinesisStream", + "Arn" + ] + } } ] } @@ -59,9 +70,13 @@ "CognitoAuthPolicy": { "Type": "AWS::IAM::Policy", "Properties": { - "PolicyName": "kinesis_amplify_bca5ce95", + "PolicyName": { + "Ref": "authPolicyName" + }, "Roles": [ - "amplify-moodboard-main-1959a-authRole" + { + "Ref": "authRoleName" + } ], "PolicyDocument": { "Version": "2012-10-17", @@ -72,7 +87,12 @@ "kinesis:PutRecord", "kinesis:PutRecords" ], - "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-main" + "Resource": { + "Fn::GetAtt": [ + "KinesisStream", + "Arn" + ] + } } ] } @@ -81,13 +101,22 @@ }, "Outputs": { "kinesisStreamArn": { - "Value": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-main" + "Value": { + "Fn::GetAtt": [ + "KinesisStream", + "Arn" + ] + } }, "kinesisStreamId": { - "Value": "moodboardKinesis-main" + "Value": { + "Ref": "KinesisStream" + } }, "kinesisStreamShardCount": { - "Value": "1" + "Value": { + "Ref": "kinesisStreamShardCount" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.target.template.json index 838bc149392..48200112d2a 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.target.template.json @@ -1,6 +1,27 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.21.0\",\"stackType\":\"custom\",\"metadata\":{}}", "Resources": { + "moodboardKinesisKinesisStreamD5E97047": { + "Type": "AWS::Kinesis::Stream", + "Properties": { + "Name": { + "Fn::Join": [ + "-", + [ + { + "Ref": "kinesisStreamName" + }, + { + "Ref": "env" + } + ] + ] + }, + "ShardCount": { + "Ref": "kinesisStreamShardCount" + } + } + }, "moodboardKinesisCognitoAuthPolicyB69F4FA6": { "Type": "AWS::IAM::Policy", "Properties": { @@ -13,7 +34,12 @@ "kinesis:PutRecord", "kinesis:PutRecords" ], - "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main" + "Resource": { + "Fn::GetAtt": [ + "moodboardKinesisKinesisStreamD5E97047", + "Arn" + ] + } } ] }, @@ -40,7 +66,12 @@ "kinesis:PutRecord", "kinesis:PutRecords" ], - "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main" + "Resource": { + "Fn::GetAtt": [ + "moodboardKinesisKinesisStreamD5E97047", + "Arn" + ] + } } ] }, @@ -64,35 +95,32 @@ "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/analytics/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" - }, - "moodboardKinesisKinesisStreamD5E97047": { - "Type": "AWS::Kinesis::Stream", - "Properties": { - "Name": { - "Fn::Join": [ - "-", - [ - "moodboardKinesis", - "main" - ] - ] - }, - "ShardCount": "1" - } } }, "Outputs": { "kinesisStreamArn": { - "Value": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main" + "Value": { + "Fn::GetAtt": [ + "moodboardKinesisKinesisStreamD5E97047", + "Arn" + ] + } }, "kinesisStreamId": { - "Value": "moodboardKinesis-gen2-main" + "Value": { + "Ref": "moodboardKinesisKinesisStreamD5E97047" + } }, "kinesisStreamShardCount": { "Value": "1" }, "amplifymoodboardgen2mainbranchf7e4caeabbanalyticsmoodboardKinesisKinesisStreamBD82380AArn": { - "Value": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main" + "Value": { + "Fn::GetAtt": [ + "moodboardKinesisKinesisStreamD5E97047", + "Arn" + ] + } } }, "Conditions": { diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.mappings.json index cc0780fc7cc..60893879984 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", - "LogicalResourceId": "UserPool" + "LogicalResourceId": "UserPool", + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" } }, { "Source": { - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", - "LogicalResourceId": "UserPoolClientWeb" + "LogicalResourceId": "UserPoolClientWeb", + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" } }, { "Source": { - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", - "LogicalResourceId": "UserPoolClient" + "LogicalResourceId": "UserPoolClient", + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" } }, { "Source": { - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", - "LogicalResourceId": "IdentityPool" + "LogicalResourceId": "IdentityPool", + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" } }, { "Source": { - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", - "LogicalResourceId": "IdentityPoolRoleMap" + "LogicalResourceId": "IdentityPoolRoleMap", + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.source.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.source.template.json index 82f9fd72f24..fd5808dfb0f 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.source.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.source.template.json @@ -114,7 +114,9 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - "main", + { + "Ref": "env" + }, "NONE" ] } @@ -136,24 +138,36 @@ ] }, "RoleName": { - "Fn::Join": [ - "", - [ - "upClientLambdaRole759ae00a", - { - "Fn::Select": [ - 3, + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userpoolClientLambdaRole" + }, + { + "Fn::Join": [ + "", + [ + "upClientLambdaRole759ae00a", { - "Fn::Split": [ - "-", - "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + { + "Ref": "AWS::StackName" + } + ] + } ] + }, + "-", + { + "Ref": "env" } ] - }, - "-", - "main" - ] + ] + } ] } } @@ -162,29 +176,49 @@ "Outputs": { "IdentityPoolId": { "Description": "Id for the identity pool", - "Value": "us-east-1:a39e734d-ac34-43c7-8303-67512f010f0d" + "Value": { + "Ref": "IdentityPool" + } }, "IdentityPoolName": { - "Value": "moodboard759ae00a_identitypool_759ae00a__main" + "Value": { + "Fn::GetAtt": [ + "IdentityPool", + "Name" + ] + } }, "UserPoolId": { "Description": "Id for the user pool", - "Value": "us-east-1_Cwvqs93Nc" + "Value": { + "Ref": "UserPool" + } }, "UserPoolArn": { "Description": "Arn for the user pool", - "Value": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_Cwvqs93Nc" + "Value": { + "Fn::GetAtt": [ + "UserPool", + "Arn" + ] + } }, "UserPoolName": { - "Value": "moodboard759ae00a_userpool_759ae00a" + "Value": { + "Ref": "userPoolName" + } }, "AppClientIDWeb": { "Description": "The user pool app client id for web", - "Value": "5t2df7ru217mr5ar6r44r61uqg" + "Value": { + "Ref": "UserPoolClientWeb" + } }, "AppClientID": { "Description": "The user pool app client id", - "Value": "1ssdipb0d8rfa77rq3o7u8t16c" + "Value": { + "Ref": "UserPoolClient" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.target.template.json index 1ba32e13166..1e01fb7431e 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.target.template.json @@ -1,6 +1,176 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.11.1\",\"stackType\":\"auth-Cognito\",\"metadata\":{}}", "Resources": { + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": { + "Ref": "emailVerificationMessage" + }, + "EmailVerificationSubject": { + "Ref": "emailVerificationSubject" + }, + "MfaConfiguration": { + "Ref": "mfaConfiguration" + }, + "Policies": { + "PasswordPolicy": { + "MinimumLength": { + "Ref": "passwordPolicyMinLength" + }, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userPoolName" + }, + { + "Fn::Join": [ + "", + [ + { + "Ref": "userPoolName" + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "UsernameAttributes": { + "Ref": "usernameAttributes" + }, + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "moodbo759ae00a_app_client", + "GenerateSecret": { + "Ref": "userpoolClientGenerateSecret" + }, + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "moodbo759ae00a_app_clientWeb", + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": { + "Ref": "allowUnauthenticatedIdentities" + }, + "CognitoIdentityProviders": [ + { + "ClientId": { + "Ref": "UserPoolClient" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + }, + { + "ClientId": { + "Ref": "UserPoolClientWeb" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "moodboard759ae00a_identitypool_759ae00a", + { + "Fn::Join": [ + "", + [ + "moodboard759ae00a_identitypool_759ae00a__", + { + "Ref": "env" + } + ] + ] + } + ] + } + } + }, "amplifyAuthauthenticatedUserRoleD8DA3689": { "Type": "AWS::IAM::Role", "Properties": { @@ -10,7 +180,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -60,7 +232,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -101,150 +275,34 @@ "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/unauthenticatedUserRole/Resource" } }, - "CDKMetadata": { - "Type": "AWS::CDK::Metadata", - "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/02LwQrCMBBEv8V7urbBg1fpyYtIxbPEZNVt0w00q0VC/l2KVHuamTczGvSmgnJlxlhY1xWerpAOGAXdSYztlBnjJdlwZ5IA6RxxOIbgVX3jn59N7QlZltWf7B2ykLzn8zI3weNOxNhHjyxZkekhTXAaTppzVhwcQhvXL62h2kK5aiNRMTxZqEdovvoBH9Args4AAAA=" - }, - "Metadata": { - "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/CDKMetadata/Default" - }, - "Condition": "CDKMetadataAvailable" - }, - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": "Your verification code is {####}", - "EmailVerificationSubject": "Your verification code", - "MfaConfiguration": "OFF", - "Policies": { - "PasswordPolicy": { - "MinimumLength": "8", - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false - } + "IdentityPoolId": { + "Ref": "IdentityPool" }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true + "Roles": { + "unauthenticated": { + "Ref": "unauthRoleArn" + }, + "authenticated": { + "Ref": "authRoleArn" } - ], - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolName": { - "Fn::Join": [ - "", - [ - "moodboard759ae00a_userpool_759ae00a", - "-", - "main" - ] - ] - }, - "UsernameAttributes": [ - "email" - ], - "UsernameConfiguration": { - "CaseSensitive": false } - } - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "moodbo759ae00a_app_clientWeb", - "RefreshTokenValidity": "30", - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": "us-east-1_Cwvqs93Nc" }, "DependsOn": [ - "amplifyAuthUserPool4BA7F805" + "IdentityPool" ] }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", + "CDKMetadata": { + "Type": "AWS::CDK::Metadata", "Properties": { - "ClientName": "moodbo759ae00a_app_client", - "GenerateSecret": "false", - "RefreshTokenValidity": "30", - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": "us-east-1_Cwvqs93Nc" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/02LwQrCMBBEv8V7urbBg1fpyYtIxbPEZNVt0w00q0VC/l2KVHuamTczGvSmgnJlxlhY1xWerpAOGAXdSYztlBnjJdlwZ5IA6RxxOIbgVX3jn59N7QlZltWf7B2ykLzn8zI3weNOxNhHjyxZkekhTXAaTppzVhwcQhvXL62h2kK5aiNRMTxZqEdovvoBH9Args4AAAA=" }, - "DependsOn": [ - "amplifyAuthUserPool4BA7F805" - ] - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": "true", - "CognitoIdentityProviders": [ - { - "ClientId": "1ssdipb0d8rfa77rq3o7u8t16c", - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": "us-east-1_Cwvqs93Nc" - } - ] - } - }, - { - "ClientId": "5t2df7ru217mr5ar6r44r61uqg", - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": "us-east-1_Cwvqs93Nc" - } - ] - } - } - ], - "IdentityPoolName": { - "Fn::Join": [ - "", - [ - "moodboard759ae00a_identitypool_759ae00a__", - "main" - ] - ] - } - } - }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": "us-east-1:a39e734d-ac34-43c7-8303-67512f010f0d", - "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-main-1959a-unauthRole", - "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-main-1959a-authRole" - } + "Metadata": { + "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/CDKMetadata/Default" }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC" - ] + "Condition": "CDKMetadataAvailable" } }, "Conditions": { @@ -515,19 +573,29 @@ }, "Outputs": { "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthUserPoolAE38F854Ref": { - "Value": "us-east-1_1A4RMvPNr" + "Value": { + "Ref": "amplifyAuthUserPool4BA7F805" + } }, "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthUserPoolAppClientA69935A4Ref": { - "Value": "2otm0qh3fj270k5tdn95cgjlm5" + "Value": { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + } }, "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthIdentityPoolA9AA7B9FRef": { - "Value": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb" + "Value": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthauthenticatedUserRole0AA19633Ref": { - "Value": "amplify-moodboard-ge-amplifyAuthauthenticatedU-UANJImTyKZ7p" + "Value": { + "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" + } }, "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthunauthenticatedUserRoleBEC4D39ARef": { - "Value": "amplify-moodboard-ge-amplifyAuthunauthenticate-rp3r1qUbAKVV" + "Value": { + "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.mappings.json index 7300a23d4f8..f0f58245b71 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA", - "LogicalResourceId": "S3Bucket" + "LogicalResourceId": "S3Bucket", + "StackName": "amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP", - "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" + "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.source.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.source.template.json index 06a94faaeaf..2a102385b61 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.source.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.source.template.json @@ -84,7 +84,9 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - "main", + { + "Ref": "env" + }, "NONE" ] }, @@ -92,7 +94,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:PutObject,s3:GetObject,s3:DeleteObject", + { + "Ref": "s3PermissionsAuthenticatedPublic" + }, "DISALLOW" ] } @@ -102,7 +106,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:PutObject,s3:GetObject,s3:DeleteObject", + { + "Ref": "s3PermissionsAuthenticatedProtected" + }, "DISALLOW" ] } @@ -112,7 +118,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:PutObject,s3:GetObject,s3:DeleteObject", + { + "Ref": "s3PermissionsAuthenticatedPrivate" + }, "DISALLOW" ] } @@ -122,7 +130,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:PutObject", + { + "Ref": "s3PermissionsAuthenticatedUploads" + }, "DISALLOW" ] } @@ -132,7 +142,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:GetObject", + { + "Ref": "s3PermissionsGuestPublic" + }, "DISALLOW" ] } @@ -142,7 +154,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "DISALLOW", + { + "Ref": "s3PermissionsGuestUploads" + }, "DISALLOW" ] } @@ -152,7 +166,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "ALLOW", + { + "Ref": "AuthenticatedAllowList" + }, "DISALLOW" ] } @@ -162,7 +178,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "ALLOW", + { + "Ref": "GuestAllowList" + }, "DISALLOW" ] } @@ -172,10 +190,14 @@ "Outputs": { "BucketName": { "Description": "Bucket name for the S3 bucket", - "Value": "moodboard20e29595008142e3ad16f01c4066e1c41959a-main" + "Value": { + "Ref": "S3Bucket" + } }, "Region": { - "Value": "us-east-1" + "Value": { + "Ref": "AWS::Region" + } } }, "Resources": { @@ -190,7 +212,9 @@ "Action": { "Fn::Split": [ ",", - "s3:PutObject,s3:GetObject,s3:DeleteObject" + { + "Ref": "s3PermissionsAuthenticatedPublic" + } ] }, "Resource": [ @@ -199,7 +223,9 @@ "", [ "arn:aws:s3:::", - "moodboard20e29595008142e3ad16f01c4066e1c41959a-main", + { + "Ref": "S3Bucket" + }, "/public/*" ] ] @@ -208,12 +234,18 @@ } ] }, - "PolicyName": "Public_policy_206c638b", + "PolicyName": { + "Ref": "s3PublicPolicy" + }, "Roles": [ - "amplify-moodboard-main-1959a-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -227,7 +259,9 @@ "Action": { "Fn::Split": [ ",", - "s3:PutObject,s3:GetObject,s3:DeleteObject" + { + "Ref": "s3PermissionsAuthenticatedProtected" + } ] }, "Resource": [ @@ -236,7 +270,9 @@ "", [ "arn:aws:s3:::", - "moodboard20e29595008142e3ad16f01c4066e1c41959a-main", + { + "Ref": "S3Bucket" + }, "/protected/${cognito-identity.amazonaws.com:sub}/*" ] ] @@ -245,12 +281,18 @@ } ] }, - "PolicyName": "Protected_policy_206c638b", + "PolicyName": { + "Ref": "s3ProtectedPolicy" + }, "Roles": [ - "amplify-moodboard-main-1959a-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -264,7 +306,9 @@ "Action": { "Fn::Split": [ ",", - "s3:PutObject,s3:GetObject,s3:DeleteObject" + { + "Ref": "s3PermissionsAuthenticatedPrivate" + } ] }, "Resource": [ @@ -273,7 +317,9 @@ "", [ "arn:aws:s3:::", - "moodboard20e29595008142e3ad16f01c4066e1c41959a-main", + { + "Ref": "S3Bucket" + }, "/private/${cognito-identity.amazonaws.com:sub}/*" ] ] @@ -282,12 +328,18 @@ } ] }, - "PolicyName": "Private_policy_206c638b", + "PolicyName": { + "Ref": "s3PrivatePolicy" + }, "Roles": [ - "amplify-moodboard-main-1959a-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -301,7 +353,9 @@ "Action": { "Fn::Split": [ ",", - "s3:PutObject" + { + "Ref": "s3PermissionsAuthenticatedUploads" + } ] }, "Resource": [ @@ -310,7 +364,9 @@ "", [ "arn:aws:s3:::", - "moodboard20e29595008142e3ad16f01c4066e1c41959a-main", + { + "Ref": "S3Bucket" + }, "/uploads/*" ] ] @@ -319,12 +375,18 @@ } ] }, - "PolicyName": "Uploads_policy_206c638b", + "PolicyName": { + "Ref": "s3UploadsPolicy" + }, "Roles": [ - "amplify-moodboard-main-1959a-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -338,7 +400,9 @@ "Action": { "Fn::Split": [ ",", - "s3:GetObject" + { + "Ref": "s3PermissionsGuestPublic" + } ] }, "Resource": [ @@ -347,7 +411,9 @@ "", [ "arn:aws:s3:::", - "moodboard20e29595008142e3ad16f01c4066e1c41959a-main", + { + "Ref": "S3Bucket" + }, "/public/*" ] ] @@ -356,12 +422,18 @@ } ] }, - "PolicyName": "Public_policy_206c638b", + "PolicyName": { + "Ref": "s3PublicPolicy" + }, "Roles": [ - "amplify-moodboard-main-1959a-unauthRole" + { + "Ref": "unauthRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -377,7 +449,9 @@ "", [ "arn:aws:s3:::", - "moodboard20e29595008142e3ad16f01c4066e1c41959a-main", + { + "Ref": "S3Bucket" + }, "/protected/*" ] ] @@ -403,7 +477,9 @@ "", [ "arn:aws:s3:::", - "moodboard20e29595008142e3ad16f01c4066e1c41959a-main" + { + "Ref": "S3Bucket" + } ] ] } @@ -411,12 +487,18 @@ ], "Version": "2012-10-17" }, - "PolicyName": "read_policy_206c638b", + "PolicyName": { + "Ref": "s3ReadPolicy" + }, "Roles": [ - "amplify-moodboard-main-1959a-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -432,7 +514,9 @@ "", [ "arn:aws:s3:::", - "moodboard20e29595008142e3ad16f01c4066e1c41959a-main", + { + "Ref": "S3Bucket" + }, "/protected/*" ] ] @@ -456,7 +540,9 @@ "", [ "arn:aws:s3:::", - "moodboard20e29595008142e3ad16f01c4066e1c41959a-main" + { + "Ref": "S3Bucket" + } ] ] } @@ -464,12 +550,18 @@ ], "Version": "2012-10-17" }, - "PolicyName": "read_policy_206c638b", + "PolicyName": { + "Ref": "s3ReadPolicy" + }, "Roles": [ - "amplify-moodboard-main-1959a-unauthRole" + { + "Ref": "unauthRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.target.template.json index 603dfa5b725..06532d58281 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.target.template.json @@ -1,10 +1,90 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.4.3\",\"stackType\":\"storage-S3\",\"metadata\":{}}", "Resources": { + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "bucketName" + }, + { + "Fn::Join": [ + "", + [ + { + "Ref": "bucketName" + }, + { + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + { + "Ref": "AWS::StackName" + } + ] + } + ] + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "Id": "S3CORSRuleId1", + "MaxAge": 3000 + } + ] + }, + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + } + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketPolicy9A17D834": { "Type": "AWS::S3::BucketPolicy", "Properties": { - "Bucket": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + "Bucket": { + "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" + }, "PolicyDocument": { "Statement": [ { @@ -19,12 +99,22 @@ "AWS": "*" }, "Resource": [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, { "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/*" ] ] @@ -40,15 +130,30 @@ ], "Effect": "Allow", "Principal": { - "AWS": "arn:aws:iam::123456789012:role/amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + "AWS": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + } }, "Resource": [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, { "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/*" ] ] @@ -66,8 +171,15 @@ "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketAutoDeleteObjectsCustomResource6C820EA7": { "Type": "Custom::S3AutoDeleteObjects", "Properties": { - "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "BucketName": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" + "ServiceToken": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "Arn" + ] + }, + "BucketName": { + "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" + } }, "DependsOn": [ "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketPolicy9A17D834" @@ -115,14 +227,21 @@ "Timeout": 900, "MemorySize": 128, "Handler": "index.handler", - "Role": "arn:aws:iam::123456789012:role/amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Role": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + }, "Runtime": "nodejs22.x", "Description": { "Fn::Join": [ "", [ "Lambda function for auto-deleting objects in ", - "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" + }, " S3 bucket." ] ] @@ -148,7 +267,9 @@ "created-by": "amplify" }, "Type": "String", - "Value": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" + "Value": { + "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" + } }, "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/storage/MOODBOARD_20_E_29595008142_E_3_AD_16_F_01_C_4066_E_1_C_41959_A_GEN_2_MAIN_BUCKET_NAMEParameter/Resource" @@ -166,7 +287,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/public/*" ] ] @@ -183,7 +309,12 @@ } }, "Effect": "Allow", - "Resource": "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" + "Resource": { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + } } ], "Version": "2012-10-17" @@ -212,7 +343,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/public/*" ] ] @@ -221,7 +357,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/protected/*" ] ] @@ -230,7 +371,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/private/*" ] ] @@ -245,7 +391,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/public/*" ] ] @@ -254,7 +405,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/protected/*" ] ] @@ -263,7 +419,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/private/*" ] ] @@ -285,7 +446,12 @@ } }, "Effect": "Allow", - "Resource": "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" + "Resource": { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + } }, { "Action": "s3:DeleteObject", @@ -295,7 +461,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/public/*" ] ] @@ -304,7 +475,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/protected/*" ] ] @@ -313,7 +489,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", + { + "Fn::GetAtt": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "Arn" + ] + }, "/private/*" ] ] @@ -343,70 +524,6 @@ "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/storage/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" - }, - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketName": { - "Fn::Join": [ - "", - [ - "moodboard20e29595008142e3ad16f01c4066e1c4", - { - "Fn::Select": [ - 3, - { - "Fn::Split": [ - "-", - "amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA" - ] - } - ] - }, - "-", - "main" - ] - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "Id": "S3CORSRuleId1", - "MaxAge": 3000 - } - ] - }, - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - } - }, - "UpdateReplacePolicy": "Retain", - "DeletionPolicy": "Retain" } }, "Conditions": { @@ -685,7 +802,9 @@ }, "Outputs": { "amplifymoodboardgen2mainbranchf7e4caeabbstoragemoodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket352A7A47Ref": { - "Value": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" + "Value": { + "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.template.json index 3557a8fa1e2..3c4e609fcb2 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.template.json @@ -303,10 +303,6 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-ge-amplifyAuthauthenticatedU-UANJImTyKZ7p" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.template.json index 8721f5c0e54..b62dc855c35 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.template.json @@ -141,9 +141,6 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" }, - "DependsOn": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketPolicy9A17D834" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -200,9 +197,6 @@ ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.template.json index ef08b4cd597..97ac6185c7d 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.template.json @@ -177,10 +177,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Cwvqs93Nc" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", @@ -192,10 +189,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Cwvqs93Nc" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClientRole": { "Type": "AWS::IAM::Role", @@ -288,10 +282,7 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-main-1959a-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-main-1959a-authRole" } - }, - "DependsOn": [ - "IdentityPool" - ] + } } }, "Outputs": { diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.template.json index 8ae961bc698..0ec74d2088d 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.template.json @@ -277,7 +277,6 @@ "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -314,7 +313,6 @@ "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -351,7 +349,6 @@ "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -388,7 +385,6 @@ "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -425,7 +421,6 @@ "amplify-moodboard-main-1959a-unauthRole" ] }, - "DependsOn": [], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -480,7 +475,6 @@ "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -533,7 +527,6 @@ "amplify-moodboard-main-1959a-unauthRole" ] }, - "DependsOn": [], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json index c32bf4971d4..4f9173460d0 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" } }, { "Source": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" } }, { "Source": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" } }, { "Source": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" } }, { "Source": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.source.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.source.template.json index f7d0aa04db5..c790141bfca 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.source.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.source.template.json @@ -10,7 +10,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:c464f123-eaf0-4289-98b3-381197fa3d7f" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -81,7 +83,9 @@ }, "PolicyName": "amplifyAuthauthenticatedUserRoleDefaultPolicy82E52873", "Roles": [ - "amplify-productcatalog-ge-amplifyAuthauthenticatedU-7u6GoubHxSy7" + { + "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" + } ] }, "Metadata": { @@ -97,7 +101,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:c464f123-eaf0-4289-98b3-381197fa3d7f" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -417,19 +423,29 @@ }, "Outputs": { "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthUserPool0E44954DRef": { - "Value": "us-east-1_OFRBVzhq5" + "Value": { + "Ref": "amplifyAuthUserPool4BA7F805" + } }, "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthUserPoolAppClient99A19E4CRef": { - "Value": "61e6oq3acg1at7f9da6cfna70d" + "Value": { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + } }, "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthIdentityPool3AA33B1CRef": { - "Value": "us-east-1:c464f123-eaf0-4289-98b3-381197fa3d7f" + "Value": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthauthenticatedUserRole66B9FD31Ref": { - "Value": "amplify-productcatalog-ge-amplifyAuthauthenticatedU-7u6GoubHxSy7" + "Value": { + "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" + } }, "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthunauthenticatedUserRole84BD6ECBRef": { - "Value": "amplify-productcatalog-ge-amplifyAuthunauthenticate-JMPocA8XyO6M" + "Value": { + "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json index c1c890be0a7..622cf4dd33c 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json @@ -1,6 +1,5 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "Temporary holding stack for Gen2 migration", "Resources": { "amplifyAuthUserPool4BA7F805": { "Type": "AWS::Cognito::UserPool", @@ -71,27 +70,6 @@ "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPool/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_OFRBVzhq5" - }, - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -118,19 +96,46 @@ "SupportedIdentityProviders": [ "COGNITO" ], - "UserPoolId": "us-east-1_OFRBVzhq5" + "UserPoolId": { + "Ref": "amplifyAuthUserPool4BA7F805" + } }, "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPoolAppClient/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": { + "Ref": "amplifyAuthUserPool4BA7F805" + } + }, + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { "AllowUnauthenticatedIdentities": false, "CognitoIdentityProviders": [ { - "ClientId": "61e6oq3acg1at7f9da6cfna70d", + "ClientId": { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + }, "ProviderName": { "Fn::Join": [ "", @@ -140,7 +145,9 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - "us-east-1_OFRBVzhq5" + { + "Ref": "amplifyAuthUserPool4BA7F805" + } ] ] } @@ -177,7 +184,9 @@ "amplifyAuthIdentityPoolRoleAttachment045F17C8": { "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "IdentityPoolId": "us-east-1:c464f123-eaf0-4289-98b3-381197fa3d7f", + "IdentityPoolId": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + }, "RoleMappings": { "UserPoolWebClientRoleMapping": { "AmbiguousRoleResolution": "AuthenticatedRole", @@ -190,9 +199,13 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - "us-east-1_OFRBVzhq5", + { + "Ref": "amplifyAuthUserPool4BA7F805" + }, ":", - "61e6oq3acg1at7f9da6cfna70d" + { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + } ] ] }, @@ -200,8 +213,18 @@ } }, "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-ge-amplifyAuthunauthenticate-JMPocA8XyO6M", - "authenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-ge-amplifyAuthauthenticatedU-7u6GoubHxSy7" + "unauthenticated": { + "Fn::GetAtt": [ + "amplifyAuthunauthenticatedUserRole2B524D9E", + "Arn" + ] + }, + "authenticated": { + "Fn::GetAtt": [ + "amplifyAuthauthenticatedUserRoleD8DA3689", + "Arn" + ] + } } }, "DependsOn": [ diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.mappings.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.mappings.json index 4df170487c2..e19a55f6415 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.mappings.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY", - "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding", - "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.source.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.source.template.json index 3d7eee45f75..d10c85c655b 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.source.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.source.template.json @@ -4,7 +4,9 @@ "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81": { "Type": "AWS::S3::BucketPolicy", "Properties": { - "Bucket": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + "Bucket": { + "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + }, "PolicyDocument": { "Statement": [ { @@ -19,12 +21,22 @@ "AWS": "*" }, "Resource": [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, { "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/*" ] ] @@ -40,15 +52,30 @@ ], "Effect": "Allow", "Principal": { - "AWS": "arn:aws:iam::123456789012:role/amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + "AWS": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + } }, "Resource": [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, { "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/*" ] ] @@ -66,8 +93,15 @@ "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketAutoDeleteObjectsCustomResource6974B5B5": { "Type": "Custom::S3AutoDeleteObjects", "Properties": { - "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "BucketName": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" + "ServiceToken": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "Arn" + ] + }, + "BucketName": { + "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + } }, "DependsOn": [ "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" @@ -81,8 +115,15 @@ "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketNotifications20779ED4": { "Type": "Custom::S3BucketNotifications", "Properties": { - "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", - "BucketName": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + "ServiceToken": { + "Fn::GetAtt": [ + "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", + "Arn" + ] + }, + "BucketName": { + "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + }, "NotificationConfiguration": { "LambdaFunctionConfigurations": [ { @@ -125,7 +166,12 @@ "SourceAccount": { "Ref": "AWS::AccountId" }, - "SourceArn": "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" + "SourceArn": { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + } }, "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/AllowBucketNotificationsToamplifyproductcataloggen2mainbranch4b79ec0f9afunctionS3Trigger1ef46783gen2mainlambda8226525A" @@ -168,14 +214,21 @@ "Timeout": 900, "MemorySize": 128, "Handler": "index.handler", - "Role": "arn:aws:iam::123456789012:role/amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Role": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + }, "Runtime": "nodejs22.x", "Description": { "Fn::Join": [ "", [ "Lambda function for auto-deleting objects in ", - "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + }, " S3 bucket." ] ] @@ -250,7 +303,12 @@ { "Action": "s3:PutBucketNotification", "Effect": "Allow", - "Resource": "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" + "Resource": { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + } } ], "Version": "2012-10-17" @@ -274,7 +332,12 @@ "ZipFile": "import boto3 # type: ignore\nimport json\nimport logging\nimport urllib.request\n\ns3 = boto3.client(\"s3\")\n\nEVENTBRIDGE_CONFIGURATION = 'EventBridgeConfiguration'\nCONFIGURATION_TYPES = [\"TopicConfigurations\", \"QueueConfigurations\", \"LambdaFunctionConfigurations\"]\n\ndef handler(event: dict, context):\n response_status = \"SUCCESS\"\n error_message = \"\"\n try:\n props = event[\"ResourceProperties\"]\n notification_configuration = props[\"NotificationConfiguration\"]\n managed = props.get('Managed', 'true').lower() == 'true'\n skipDestinationValidation = props.get('SkipDestinationValidation', 'false').lower() == 'true'\n stack_id = event['StackId']\n old = event.get(\"OldResourceProperties\", {}).get(\"NotificationConfiguration\", {})\n if managed:\n config = handle_managed(event[\"RequestType\"], notification_configuration)\n else:\n config = handle_unmanaged(props[\"BucketName\"], stack_id, event[\"RequestType\"], notification_configuration, old)\n s3.put_bucket_notification_configuration(Bucket=props[\"BucketName\"], NotificationConfiguration=config, SkipDestinationValidation=skipDestinationValidation)\n except Exception as e:\n logging.exception(\"Failed to put bucket notification configuration\")\n response_status = \"FAILED\"\n error_message = f\"Error: {str(e)}. \"\n finally:\n submit_response(event, context, response_status, error_message)\n\ndef handle_managed(request_type, notification_configuration):\n if request_type == 'Delete':\n return {}\n return notification_configuration\n\ndef handle_unmanaged(bucket, stack_id, request_type, notification_configuration, old):\n def get_id(n):\n n['Id'] = ''\n sorted_notifications = sort_filter_rules(n)\n strToHash=json.dumps(sorted_notifications, sort_keys=True).replace('\"Name\": \"prefix\"', '\"Name\": \"Prefix\"').replace('\"Name\": \"suffix\"', '\"Name\": \"Suffix\"')\n return f\"{stack_id}-{hash(strToHash)}\"\n def with_id(n):\n n['Id'] = get_id(n)\n return n\n\n external_notifications = {}\n existing_notifications = s3.get_bucket_notification_configuration(Bucket=bucket)\n for t in CONFIGURATION_TYPES:\n if request_type == 'Update':\n old_incoming_ids = [get_id(n) for n in old.get(t, [])]\n external_notifications[t] = [n for n in existing_notifications.get(t, []) if not get_id(n) in old_incoming_ids] \n elif request_type == 'Delete':\n external_notifications[t] = [n for n in existing_notifications.get(t, []) if not n['Id'].startswith(f\"{stack_id}-\")]\n elif request_type == 'Create':\n external_notifications[t] = [n for n in existing_notifications.get(t, [])]\n if EVENTBRIDGE_CONFIGURATION in existing_notifications:\n external_notifications[EVENTBRIDGE_CONFIGURATION] = existing_notifications[EVENTBRIDGE_CONFIGURATION]\n\n if request_type == 'Delete':\n return external_notifications\n\n notifications = {}\n for t in CONFIGURATION_TYPES:\n external = external_notifications.get(t, [])\n incoming = [with_id(n) for n in notification_configuration.get(t, [])]\n notifications[t] = external + incoming\n\n if EVENTBRIDGE_CONFIGURATION in notification_configuration:\n notifications[EVENTBRIDGE_CONFIGURATION] = notification_configuration[EVENTBRIDGE_CONFIGURATION]\n elif EVENTBRIDGE_CONFIGURATION in external_notifications:\n notifications[EVENTBRIDGE_CONFIGURATION] = external_notifications[EVENTBRIDGE_CONFIGURATION]\n\n return notifications\n\ndef submit_response(event: dict, context, response_status: str, error_message: str):\n response_body = json.dumps(\n {\n \"Status\": response_status,\n \"Reason\": f\"{error_message}See the details in CloudWatch Log Stream: {context.log_stream_name}\",\n \"PhysicalResourceId\": event.get(\"PhysicalResourceId\") or event[\"LogicalResourceId\"],\n \"StackId\": event[\"StackId\"],\n \"RequestId\": event[\"RequestId\"],\n \"LogicalResourceId\": event[\"LogicalResourceId\"],\n \"NoEcho\": False,\n }\n ).encode(\"utf-8\")\n headers = {\"content-type\": \"\", \"content-length\": str(len(response_body))}\n try:\n req = urllib.request.Request(url=event[\"ResponseURL\"], headers=headers, data=response_body, method=\"PUT\")\n with urllib.request.urlopen(req) as response:\n print(response.read().decode(\"utf-8\"))\n print(\"Status code: \" + response.reason)\n except Exception as e:\n print(\"send(..) failed executing request.urlopen(..): \" + str(e))\n\ndef sort_filter_rules(json_obj):\n if not isinstance(json_obj, dict):\n return json_obj\n for key, value in json_obj.items():\n if isinstance(value, dict):\n json_obj[key] = sort_filter_rules(value)\n elif isinstance(value, list):\n json_obj[key] = [sort_filter_rules(item) for item in value]\n if \"Filter\" in json_obj and \"Key\" in json_obj[\"Filter\"] and \"FilterRules\" in json_obj[\"Filter\"][\"Key\"]:\n filter_rules = json_obj[\"Filter\"][\"Key\"][\"FilterRules\"]\n sorted_filter_rules = sorted(filter_rules, key=lambda x: x[\"Name\"])\n json_obj[\"Filter\"][\"Key\"][\"FilterRules\"] = sorted_filter_rules\n return json_obj" }, "Handler": "index.handler", - "Role": "arn:aws:iam::123456789012:role/amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", + "Role": { + "Fn::GetAtt": [ + "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", + "Arn" + ] + }, "Runtime": "python3.13", "Timeout": 300, "Tags": [ @@ -315,7 +378,9 @@ "created-by": "amplify" }, "Type": "String", - "Value": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" + "Value": { + "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + } }, "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/PRODUCTCATALOGF_95_AF_07481_F_845_CAA_6594_C_26_AC_9_C_8_ED_331323_GEN_2_MAIN_BUCKET_NAMEParameter/Resource" @@ -334,7 +399,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/public/*" ] ] @@ -343,7 +413,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/protected/*" ] ] @@ -352,7 +427,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/private/*" ] ] @@ -367,7 +447,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/public/*" ] ] @@ -376,7 +461,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/protected/*" ] ] @@ -385,7 +475,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/private/*" ] ] @@ -407,7 +502,12 @@ } }, "Effect": "Allow", - "Resource": "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" + "Resource": { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + } }, { "Action": "s3:DeleteObject", @@ -417,7 +517,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/public/*" ] ] @@ -426,7 +531,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/protected/*" ] ] @@ -435,7 +545,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/private/*" ] ] @@ -743,7 +858,9 @@ }, "Outputs": { "amplifyproductcataloggen2mainbranch4b79ec0f9astorageproductcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketBD2F9EF2Ref": { - "Value": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" + "Value": { + "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.target.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.target.template.json index d75aadd5327..f053e3640a5 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.target.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.target.template.json @@ -1,6 +1,5 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "Temporary holding stack for Gen2 migration", "Resources": { "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { "Type": "AWS::S3::Bucket", diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.mappings.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.mappings.json index d48c12ba206..dcbb7ff0bfa 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.mappings.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", - "LogicalResourceId": "UserPool" + "LogicalResourceId": "UserPool", + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" } }, { "Source": { - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", - "LogicalResourceId": "UserPoolClientWeb" + "LogicalResourceId": "UserPoolClientWeb", + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" } }, { "Source": { - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", - "LogicalResourceId": "UserPoolClient" + "LogicalResourceId": "UserPoolClient", + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" } }, { "Source": { - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", - "LogicalResourceId": "IdentityPool" + "LogicalResourceId": "IdentityPool", + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" } }, { "Source": { - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", - "LogicalResourceId": "IdentityPoolRoleMap" + "LogicalResourceId": "IdentityPoolRoleMap", + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.source.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.source.template.json index 9cf5ab554b8..fbecb1771b3 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.source.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.source.template.json @@ -114,7 +114,9 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - "main", + { + "Ref": "env" + }, "NONE" ] } @@ -136,24 +138,36 @@ ] }, "RoleName": { - "Fn::Join": [ - "", - [ - "upClientLambdaRole90174ac4", - { - "Fn::Select": [ - 3, + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userpoolClientLambdaRole" + }, + { + "Fn::Join": [ + "", + [ + "upClientLambdaRole90174ac4", { - "Fn::Split": [ - "-", - "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + { + "Ref": "AWS::StackName" + } + ] + } ] + }, + "-", + { + "Ref": "env" } ] - }, - "-", - "main" - ] + ] + } ] } } @@ -162,29 +176,49 @@ "Outputs": { "IdentityPoolId": { "Description": "Id for the identity pool", - "Value": "us-east-1:46acac6f-21d1-433c-93b9-d9d908c696fc" + "Value": { + "Ref": "IdentityPool" + } }, "IdentityPoolName": { - "Value": "productcatalog90174ac4_identitypool_90174ac4__main" + "Value": { + "Fn::GetAtt": [ + "IdentityPool", + "Name" + ] + } }, "UserPoolId": { "Description": "Id for the user pool", - "Value": "us-east-1_66BkqNfdX" + "Value": { + "Ref": "UserPool" + } }, "UserPoolArn": { "Description": "Arn for the user pool", - "Value": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_66BkqNfdX" + "Value": { + "Fn::GetAtt": [ + "UserPool", + "Arn" + ] + } }, "UserPoolName": { - "Value": "productcatalog90174ac4_userpool_90174ac4" + "Value": { + "Ref": "userPoolName" + } }, "AppClientIDWeb": { "Description": "The user pool app client id for web", - "Value": "7ogg1fkk68io03i95o0viqhibk" + "Value": { + "Ref": "UserPoolClientWeb" + } }, "AppClientID": { "Description": "The user pool app client id", - "Value": "27jbakm3s7vgm116b36evi830d" + "Value": { + "Ref": "UserPoolClient" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.target.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.target.template.json index 187486f41fc..76fba05b4e4 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.target.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.target.template.json @@ -1,6 +1,176 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.11.1\",\"stackType\":\"auth-Cognito\",\"metadata\":{}}", "Resources": { + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": { + "Ref": "emailVerificationMessage" + }, + "EmailVerificationSubject": { + "Ref": "emailVerificationSubject" + }, + "MfaConfiguration": { + "Ref": "mfaConfiguration" + }, + "Policies": { + "PasswordPolicy": { + "MinimumLength": { + "Ref": "passwordPolicyMinLength" + }, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userPoolName" + }, + { + "Fn::Join": [ + "", + [ + { + "Ref": "userPoolName" + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "UsernameAttributes": { + "Ref": "usernameAttributes" + }, + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "produc90174ac4_app_client", + "GenerateSecret": { + "Ref": "userpoolClientGenerateSecret" + }, + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "produc90174ac4_app_clientWeb", + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": { + "Ref": "allowUnauthenticatedIdentities" + }, + "CognitoIdentityProviders": [ + { + "ClientId": { + "Ref": "UserPoolClient" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + }, + { + "ClientId": { + "Ref": "UserPoolClientWeb" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "productcatalog90174ac4_identitypool_90174ac4", + { + "Fn::Join": [ + "", + [ + "productcatalog90174ac4_identitypool_90174ac4__", + { + "Ref": "env" + } + ] + ] + } + ] + } + } + }, "amplifyAuthauthenticatedUserRoleD8DA3689": { "Type": "AWS::IAM::Role", "Properties": { @@ -10,7 +180,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:c464f123-eaf0-4289-98b3-381197fa3d7f" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -81,7 +253,9 @@ }, "PolicyName": "amplifyAuthauthenticatedUserRoleDefaultPolicy82E52873", "Roles": [ - "amplify-productcatalog-ge-amplifyAuthauthenticatedU-7u6GoubHxSy7" + { + "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" + } ] }, "Metadata": { @@ -97,7 +271,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:c464f123-eaf0-4289-98b3-381197fa3d7f" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -138,150 +314,34 @@ "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/unauthenticatedUserRole/Resource" } }, - "CDKMetadata": { - "Type": "AWS::CDK::Metadata", - "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/02LvQ6CMBSFn4W9XKFxcDVMLsZgnE1tr3qhtAm9SkjTdzdIUKbznT8JcltCkakh5Nq0uaUbxCMGRnNmpVuhhnCN2j8csYd4CdifvLeiursfL1BZQsfr6p8cDDomHpfz2tfe4p5Z6WeHjpMg1UGcwmn41ZO3pMfJzpRSEs4bhCZs3lJCuYMiawJR3r8cU4dQz/oBzysbsN8AAAA=" - }, - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/CDKMetadata/Default" - }, - "Condition": "CDKMetadataAvailable" - }, - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": "Your verification code is {####}", - "EmailVerificationSubject": "Your verification code", - "MfaConfiguration": "OFF", - "Policies": { - "PasswordPolicy": { - "MinimumLength": "8", - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false - } + "IdentityPoolId": { + "Ref": "IdentityPool" }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true + "Roles": { + "unauthenticated": { + "Ref": "unauthRoleArn" + }, + "authenticated": { + "Ref": "authRoleArn" } - ], - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolName": { - "Fn::Join": [ - "", - [ - "productcatalog90174ac4_userpool_90174ac4", - "-", - "main" - ] - ] - }, - "UsernameAttributes": [ - "email" - ], - "UsernameConfiguration": { - "CaseSensitive": false } - } - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "produc90174ac4_app_clientWeb", - "RefreshTokenValidity": "30", - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": "us-east-1_66BkqNfdX" }, "DependsOn": [ - "amplifyAuthUserPool4BA7F805" + "IdentityPool" ] }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", + "CDKMetadata": { + "Type": "AWS::CDK::Metadata", "Properties": { - "ClientName": "produc90174ac4_app_client", - "GenerateSecret": "false", - "RefreshTokenValidity": "30", - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": "us-east-1_66BkqNfdX" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/02LvQ6CMBSFn4W9XKFxcDVMLsZgnE1tr3qhtAm9SkjTdzdIUKbznT8JcltCkakh5Nq0uaUbxCMGRnNmpVuhhnCN2j8csYd4CdifvLeiursfL1BZQsfr6p8cDDomHpfz2tfe4p5Z6WeHjpMg1UGcwmn41ZO3pMfJzpRSEs4bhCZs3lJCuYMiawJR3r8cU4dQz/oBzysbsN8AAAA=" }, - "DependsOn": [ - "amplifyAuthUserPool4BA7F805" - ] - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": "false", - "CognitoIdentityProviders": [ - { - "ClientId": "27jbakm3s7vgm116b36evi830d", - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": "us-east-1_66BkqNfdX" - } - ] - } - }, - { - "ClientId": "7ogg1fkk68io03i95o0viqhibk", - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": "us-east-1_66BkqNfdX" - } - ] - } - } - ], - "IdentityPoolName": { - "Fn::Join": [ - "", - [ - "productcatalog90174ac4_identitypool_90174ac4__", - "main" - ] - ] - } - } - }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": "us-east-1:46acac6f-21d1-433c-93b9-d9d908c696fc", - "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-main-31323-unauthRole", - "authenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-main-31323-authRole" - } + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/CDKMetadata/Default" }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC" - ] + "Condition": "CDKMetadataAvailable" } }, "Conditions": { @@ -552,19 +612,29 @@ }, "Outputs": { "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthUserPool0E44954DRef": { - "Value": "us-east-1_OFRBVzhq5" + "Value": { + "Ref": "amplifyAuthUserPool4BA7F805" + } }, "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthUserPoolAppClient99A19E4CRef": { - "Value": "61e6oq3acg1at7f9da6cfna70d" + "Value": { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + } }, "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthIdentityPool3AA33B1CRef": { - "Value": "us-east-1:c464f123-eaf0-4289-98b3-381197fa3d7f" + "Value": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthauthenticatedUserRole66B9FD31Ref": { - "Value": "amplify-productcatalog-ge-amplifyAuthauthenticatedU-7u6GoubHxSy7" + "Value": { + "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" + } }, "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthunauthenticatedUserRole84BD6ECBRef": { - "Value": "amplify-productcatalog-ge-amplifyAuthunauthenticate-JMPocA8XyO6M" + "Value": { + "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.mappings.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.mappings.json index bf796ac778b..8caf8958ceb 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.mappings.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI", - "LogicalResourceId": "S3Bucket" + "LogicalResourceId": "S3Bucket", + "StackName": "amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY", - "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.source.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.source.template.json index 931e6107b36..fdf07ca7045 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.source.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.source.template.json @@ -99,7 +99,9 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - "main", + { + "Ref": "env" + }, "NONE" ] }, @@ -107,7 +109,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:PutObject,s3:GetObject,s3:DeleteObject", + { + "Ref": "s3PermissionsAuthenticatedPublic" + }, "DISALLOW" ] } @@ -117,7 +121,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:PutObject,s3:GetObject,s3:DeleteObject", + { + "Ref": "s3PermissionsAuthenticatedProtected" + }, "DISALLOW" ] } @@ -127,7 +133,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:PutObject,s3:GetObject,s3:DeleteObject", + { + "Ref": "s3PermissionsAuthenticatedPrivate" + }, "DISALLOW" ] } @@ -137,7 +145,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:PutObject", + { + "Ref": "s3PermissionsAuthenticatedUploads" + }, "DISALLOW" ] } @@ -147,7 +157,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "DISALLOW", + { + "Ref": "s3PermissionsGuestPublic" + }, "DISALLOW" ] } @@ -157,7 +169,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "DISALLOW", + { + "Ref": "s3PermissionsGuestUploads" + }, "DISALLOW" ] } @@ -167,7 +181,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "ALLOW", + { + "Ref": "AuthenticatedAllowList" + }, "DISALLOW" ] } @@ -177,7 +193,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "DISALLOW", + { + "Ref": "GuestAllowList" + }, "DISALLOW" ] } @@ -187,10 +205,14 @@ "Outputs": { "BucketName": { "Description": "Bucket name for the S3 bucket", - "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main" + "Value": { + "Ref": "S3Bucket" + } }, "Region": { - "Value": "us-east-1" + "Value": { + "Ref": "AWS::Region" + } } }, "Resources": { @@ -198,7 +220,9 @@ "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", - "FunctionName": "S3Trigger1ef46783-main", + "FunctionName": { + "Ref": "functionS3Trigger1ef46783Name" + }, "Principal": "s3.amazonaws.com", "SourceAccount": { "Ref": "AWS::AccountId" @@ -211,25 +235,33 @@ { "Fn::If": [ "ShouldNotCreateEnvResources", - "productcatalogf95af07481f845caa6594c26ac9c8ed3", + { + "Ref": "bucketName" + }, { "Fn::Join": [ "", [ - "productcatalogf95af07481f845caa6594c26ac9c8ed3", + { + "Ref": "bucketName" + }, { "Fn::Select": [ 3, { "Fn::Split": [ "-", - "amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI" + { + "Ref": "AWS::StackName" + } ] } ] }, "-", - "main" + { + "Ref": "env" + } ] ] } @@ -251,7 +283,9 @@ "Action": { "Fn::Split": [ ",", - "s3:PutObject,s3:GetObject,s3:DeleteObject" + { + "Ref": "s3PermissionsAuthenticatedPublic" + } ] }, "Resource": [ @@ -260,7 +294,9 @@ "", [ "arn:aws:s3:::", - "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main", + { + "Ref": "S3Bucket" + }, "/public/*" ] ] @@ -269,12 +305,18 @@ } ] }, - "PolicyName": "Public_policy_38e5b439", + "PolicyName": { + "Ref": "s3PublicPolicy" + }, "Roles": [ - "amplify-productcatalog-main-31323-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -288,7 +330,9 @@ "Action": { "Fn::Split": [ ",", - "s3:PutObject,s3:GetObject,s3:DeleteObject" + { + "Ref": "s3PermissionsAuthenticatedProtected" + } ] }, "Resource": [ @@ -297,7 +341,9 @@ "", [ "arn:aws:s3:::", - "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main", + { + "Ref": "S3Bucket" + }, "/protected/${cognito-identity.amazonaws.com:sub}/*" ] ] @@ -306,12 +352,18 @@ } ] }, - "PolicyName": "Protected_policy_38e5b439", + "PolicyName": { + "Ref": "s3ProtectedPolicy" + }, "Roles": [ - "amplify-productcatalog-main-31323-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -325,7 +377,9 @@ "Action": { "Fn::Split": [ ",", - "s3:PutObject,s3:GetObject,s3:DeleteObject" + { + "Ref": "s3PermissionsAuthenticatedPrivate" + } ] }, "Resource": [ @@ -334,7 +388,9 @@ "", [ "arn:aws:s3:::", - "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main", + { + "Ref": "S3Bucket" + }, "/private/${cognito-identity.amazonaws.com:sub}/*" ] ] @@ -343,12 +399,18 @@ } ] }, - "PolicyName": "Private_policy_38e5b439", + "PolicyName": { + "Ref": "s3PrivatePolicy" + }, "Roles": [ - "amplify-productcatalog-main-31323-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -362,7 +424,9 @@ "Action": { "Fn::Split": [ ",", - "s3:PutObject" + { + "Ref": "s3PermissionsAuthenticatedUploads" + } ] }, "Resource": [ @@ -371,7 +435,9 @@ "", [ "arn:aws:s3:::", - "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main", + { + "Ref": "S3Bucket" + }, "/uploads/*" ] ] @@ -380,12 +446,18 @@ } ] }, - "PolicyName": "Uploads_policy_38e5b439", + "PolicyName": { + "Ref": "s3UploadsPolicy" + }, "Roles": [ - "amplify-productcatalog-main-31323-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateAuthUploads" }, "S3AuthReadPolicy": { @@ -401,7 +473,9 @@ "", [ "arn:aws:s3:::", - "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main", + { + "Ref": "S3Bucket" + }, "/protected/*" ] ] @@ -427,7 +501,9 @@ "", [ "arn:aws:s3:::", - "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main" + { + "Ref": "S3Bucket" + } ] ] } @@ -435,14 +511,83 @@ ], "Version": "2012-10-17" }, - "PolicyName": "read_policy_38e5b439", + "PolicyName": { + "Ref": "s3ReadPolicy" + }, "Roles": [ - "amplify-productcatalog-main-31323-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "AuthReadAndList" }, + "S3GuestReadPolicy": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "s3:GetObject", + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "S3Bucket" + }, + "/protected/*" + ] + ] + } + }, + { + "Action": "s3:ListBucket", + "Condition": { + "StringLike": { + "s3:prefix": [ + "public/", + "public/*", + "protected/", + "protected/*" + ] + } + }, + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "S3Bucket" + } + ] + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": { + "Ref": "s3ReadPolicy" + }, + "Roles": [ + { + "Ref": "unauthRoleName" + } + ] + }, + "DependsOn": [ + "S3Bucket" + ], + "Condition": "GuestReadAndList" + }, "S3TriggerBucketPolicy": { "Type": "AWS::IAM::Policy", "Properties": { @@ -460,7 +605,9 @@ "", [ "arn:aws:s3:::", - "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main" + { + "Ref": "S3Bucket" + } ] ] } @@ -480,7 +627,9 @@ "", [ "arn:aws:s3:::", - "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main", + { + "Ref": "S3Bucket" + }, "/*" ] ] @@ -491,10 +640,14 @@ }, "PolicyName": "amplify-lambda-execution-policy-storage", "Roles": [ - "S3Trigger1ef46783LambdaRole1ef46783-main" + { + "Ref": "functionS3Trigger1ef46783LambdaExecutionRole" + } ] }, - "DependsOn": [] + "DependsOn": [ + "S3Bucket" + ] } } } \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.target.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.target.template.json index ee4724de7d0..d32f945665a 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.target.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.target.template.json @@ -1,10 +1,109 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.4.3\",\"stackType\":\"storage-S3\",\"metadata\":{}}", "Resources": { + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "bucketName" + }, + { + "Fn::Join": [ + "", + [ + { + "Ref": "bucketName" + }, + { + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + { + "Ref": "AWS::StackName" + } + ] + } + ] + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "Id": "S3CORSRuleId1", + "MaxAge": 3000 + } + ] + }, + "NotificationConfiguration": { + "LambdaConfigurations": [ + { + "Event": "s3:ObjectCreated:*", + "Function": { + "Ref": "functionS3Trigger1ef46783Arn" + } + }, + { + "Event": "s3:ObjectRemoved:*", + "Function": { + "Ref": "functionS3Trigger1ef46783Arn" + } + } + ] + }, + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + } + }, + "DependsOn": [ + "TriggerPermissions" + ], + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81": { "Type": "AWS::S3::BucketPolicy", "Properties": { - "Bucket": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + "Bucket": { + "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + }, "PolicyDocument": { "Statement": [ { @@ -19,12 +118,22 @@ "AWS": "*" }, "Resource": [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, { "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/*" ] ] @@ -40,15 +149,30 @@ ], "Effect": "Allow", "Principal": { - "AWS": "arn:aws:iam::123456789012:role/amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + "AWS": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + } }, "Resource": [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, { "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/*" ] ] @@ -66,8 +190,15 @@ "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketAutoDeleteObjectsCustomResource6974B5B5": { "Type": "Custom::S3AutoDeleteObjects", "Properties": { - "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "BucketName": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" + "ServiceToken": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "Arn" + ] + }, + "BucketName": { + "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + } }, "DependsOn": [ "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" @@ -81,8 +212,15 @@ "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketNotifications20779ED4": { "Type": "Custom::S3BucketNotifications", "Properties": { - "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", - "BucketName": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + "ServiceToken": { + "Fn::GetAtt": [ + "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", + "Arn" + ] + }, + "BucketName": { + "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + }, "NotificationConfiguration": { "LambdaFunctionConfigurations": [ { @@ -125,7 +263,12 @@ "SourceAccount": { "Ref": "AWS::AccountId" }, - "SourceArn": "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" + "SourceArn": { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + } }, "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/AllowBucketNotificationsToamplifyproductcataloggen2mainbranch4b79ec0f9afunctionS3Trigger1ef46783gen2mainlambda8226525A" @@ -168,14 +311,21 @@ "Timeout": 900, "MemorySize": 128, "Handler": "index.handler", - "Role": "arn:aws:iam::123456789012:role/amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Role": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + }, "Runtime": "nodejs22.x", "Description": { "Fn::Join": [ "", [ "Lambda function for auto-deleting objects in ", - "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + }, " S3 bucket." ] ] @@ -250,7 +400,12 @@ { "Action": "s3:PutBucketNotification", "Effect": "Allow", - "Resource": "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" + "Resource": { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + } } ], "Version": "2012-10-17" @@ -274,7 +429,12 @@ "ZipFile": "import boto3 # type: ignore\nimport json\nimport logging\nimport urllib.request\n\ns3 = boto3.client(\"s3\")\n\nEVENTBRIDGE_CONFIGURATION = 'EventBridgeConfiguration'\nCONFIGURATION_TYPES = [\"TopicConfigurations\", \"QueueConfigurations\", \"LambdaFunctionConfigurations\"]\n\ndef handler(event: dict, context):\n response_status = \"SUCCESS\"\n error_message = \"\"\n try:\n props = event[\"ResourceProperties\"]\n notification_configuration = props[\"NotificationConfiguration\"]\n managed = props.get('Managed', 'true').lower() == 'true'\n skipDestinationValidation = props.get('SkipDestinationValidation', 'false').lower() == 'true'\n stack_id = event['StackId']\n old = event.get(\"OldResourceProperties\", {}).get(\"NotificationConfiguration\", {})\n if managed:\n config = handle_managed(event[\"RequestType\"], notification_configuration)\n else:\n config = handle_unmanaged(props[\"BucketName\"], stack_id, event[\"RequestType\"], notification_configuration, old)\n s3.put_bucket_notification_configuration(Bucket=props[\"BucketName\"], NotificationConfiguration=config, SkipDestinationValidation=skipDestinationValidation)\n except Exception as e:\n logging.exception(\"Failed to put bucket notification configuration\")\n response_status = \"FAILED\"\n error_message = f\"Error: {str(e)}. \"\n finally:\n submit_response(event, context, response_status, error_message)\n\ndef handle_managed(request_type, notification_configuration):\n if request_type == 'Delete':\n return {}\n return notification_configuration\n\ndef handle_unmanaged(bucket, stack_id, request_type, notification_configuration, old):\n def get_id(n):\n n['Id'] = ''\n sorted_notifications = sort_filter_rules(n)\n strToHash=json.dumps(sorted_notifications, sort_keys=True).replace('\"Name\": \"prefix\"', '\"Name\": \"Prefix\"').replace('\"Name\": \"suffix\"', '\"Name\": \"Suffix\"')\n return f\"{stack_id}-{hash(strToHash)}\"\n def with_id(n):\n n['Id'] = get_id(n)\n return n\n\n external_notifications = {}\n existing_notifications = s3.get_bucket_notification_configuration(Bucket=bucket)\n for t in CONFIGURATION_TYPES:\n if request_type == 'Update':\n old_incoming_ids = [get_id(n) for n in old.get(t, [])]\n external_notifications[t] = [n for n in existing_notifications.get(t, []) if not get_id(n) in old_incoming_ids] \n elif request_type == 'Delete':\n external_notifications[t] = [n for n in existing_notifications.get(t, []) if not n['Id'].startswith(f\"{stack_id}-\")]\n elif request_type == 'Create':\n external_notifications[t] = [n for n in existing_notifications.get(t, [])]\n if EVENTBRIDGE_CONFIGURATION in existing_notifications:\n external_notifications[EVENTBRIDGE_CONFIGURATION] = existing_notifications[EVENTBRIDGE_CONFIGURATION]\n\n if request_type == 'Delete':\n return external_notifications\n\n notifications = {}\n for t in CONFIGURATION_TYPES:\n external = external_notifications.get(t, [])\n incoming = [with_id(n) for n in notification_configuration.get(t, [])]\n notifications[t] = external + incoming\n\n if EVENTBRIDGE_CONFIGURATION in notification_configuration:\n notifications[EVENTBRIDGE_CONFIGURATION] = notification_configuration[EVENTBRIDGE_CONFIGURATION]\n elif EVENTBRIDGE_CONFIGURATION in external_notifications:\n notifications[EVENTBRIDGE_CONFIGURATION] = external_notifications[EVENTBRIDGE_CONFIGURATION]\n\n return notifications\n\ndef submit_response(event: dict, context, response_status: str, error_message: str):\n response_body = json.dumps(\n {\n \"Status\": response_status,\n \"Reason\": f\"{error_message}See the details in CloudWatch Log Stream: {context.log_stream_name}\",\n \"PhysicalResourceId\": event.get(\"PhysicalResourceId\") or event[\"LogicalResourceId\"],\n \"StackId\": event[\"StackId\"],\n \"RequestId\": event[\"RequestId\"],\n \"LogicalResourceId\": event[\"LogicalResourceId\"],\n \"NoEcho\": False,\n }\n ).encode(\"utf-8\")\n headers = {\"content-type\": \"\", \"content-length\": str(len(response_body))}\n try:\n req = urllib.request.Request(url=event[\"ResponseURL\"], headers=headers, data=response_body, method=\"PUT\")\n with urllib.request.urlopen(req) as response:\n print(response.read().decode(\"utf-8\"))\n print(\"Status code: \" + response.reason)\n except Exception as e:\n print(\"send(..) failed executing request.urlopen(..): \" + str(e))\n\ndef sort_filter_rules(json_obj):\n if not isinstance(json_obj, dict):\n return json_obj\n for key, value in json_obj.items():\n if isinstance(value, dict):\n json_obj[key] = sort_filter_rules(value)\n elif isinstance(value, list):\n json_obj[key] = [sort_filter_rules(item) for item in value]\n if \"Filter\" in json_obj and \"Key\" in json_obj[\"Filter\"] and \"FilterRules\" in json_obj[\"Filter\"][\"Key\"]:\n filter_rules = json_obj[\"Filter\"][\"Key\"][\"FilterRules\"]\n sorted_filter_rules = sorted(filter_rules, key=lambda x: x[\"Name\"])\n json_obj[\"Filter\"][\"Key\"][\"FilterRules\"] = sorted_filter_rules\n return json_obj" }, "Handler": "index.handler", - "Role": "arn:aws:iam::123456789012:role/amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", + "Role": { + "Fn::GetAtt": [ + "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", + "Arn" + ] + }, "Runtime": "python3.13", "Timeout": 300, "Tags": [ @@ -315,7 +475,9 @@ "created-by": "amplify" }, "Type": "String", - "Value": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" + "Value": { + "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + } }, "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/PRODUCTCATALOGF_95_AF_07481_F_845_CAA_6594_C_26_AC_9_C_8_ED_331323_GEN_2_MAIN_BUCKET_NAMEParameter/Resource" @@ -334,7 +496,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/public/*" ] ] @@ -343,7 +510,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/protected/*" ] ] @@ -352,7 +524,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/private/*" ] ] @@ -367,7 +544,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/public/*" ] ] @@ -376,7 +558,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/protected/*" ] ] @@ -385,7 +572,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/private/*" ] ] @@ -407,7 +599,12 @@ } }, "Effect": "Allow", - "Resource": "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" + "Resource": { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + } }, { "Action": "s3:DeleteObject", @@ -417,7 +614,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/public/*" ] ] @@ -426,7 +628,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/protected/*" ] ] @@ -435,7 +642,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", + { + "Fn::GetAtt": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "Arn" + ] + }, "/private/*" ] ] @@ -465,83 +677,6 @@ "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" - }, - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketName": { - "Fn::Join": [ - "", - [ - "productcatalogf95af07481f845caa6594c26ac9c8ed3", - { - "Fn::Select": [ - 3, - { - "Fn::Split": [ - "-", - "amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI" - ] - } - ] - }, - "-", - "main" - ] - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "Id": "S3CORSRuleId1", - "MaxAge": 3000 - } - ] - }, - "NotificationConfiguration": { - "LambdaConfigurations": [ - { - "Event": "s3:ObjectCreated:*", - "Function": "arn:aws:lambda:us-east-1:123456789012:function:S3Trigger1ef46783-main" - }, - { - "Event": "s3:ObjectRemoved:*", - "Function": "arn:aws:lambda:us-east-1:123456789012:function:S3Trigger1ef46783-main" - } - ] - }, - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - } - }, - "DependsOn": [], - "UpdateReplacePolicy": "Retain", - "DeletionPolicy": "Retain" } }, "Conditions": { @@ -820,7 +955,9 @@ }, "Outputs": { "amplifyproductcataloggen2mainbranch4b79ec0f9astorageproductcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketBD2F9EF2Ref": { - "Value": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" + "Value": { + "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.template.json index 9a3f81d31df..ba390bdc15b 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.template.json @@ -340,10 +340,6 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-ge-amplifyAuthauthenticatedU-7u6GoubHxSy7" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.template.json index 3eddc81943c..4f29cfcc0ed 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.template.json @@ -141,9 +141,6 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" }, - "DependsOn": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -178,10 +175,6 @@ "Managed": true, "SkipDestinationValidation": false }, - "DependsOn": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketAllowBucketNotificationsToamplifyproductcataloggen2mainbranch4b79ec0f9afunctionS3Trigger1ef46783gen2mainlambda8226525A5BBBE747", - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Notifications/Resource" } @@ -253,9 +246,6 @@ ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", @@ -368,10 +358,6 @@ } ] }, - "DependsOn": [ - "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36", - "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Resource" } diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.template.json index b2b78850e70..f680f1c6eb8 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.template.json @@ -177,10 +177,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_66BkqNfdX" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", @@ -192,10 +189,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_66BkqNfdX" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClientRole": { "Type": "AWS::IAM::Role", @@ -288,10 +282,7 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-main-31323-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-main-31323-authRole" } - }, - "DependsOn": [ - "IdentityPool" - ] + } } }, "Outputs": { diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.template.json index a490d8b9de5..a194d381190 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.template.json @@ -267,7 +267,6 @@ ] } }, - "DependsOn": [], "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain" }, @@ -351,7 +350,6 @@ "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -388,7 +386,6 @@ "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -425,7 +422,6 @@ "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -462,7 +458,6 @@ "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3AuthReadPolicy": { @@ -517,7 +512,6 @@ "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [], "Condition": "AuthReadAndList" }, "S3TriggerBucketPolicy": { @@ -570,8 +564,7 @@ "Roles": [ "S3Trigger1ef46783LambdaRole1ef46783-main" ] - }, - "DependsOn": [] + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json index ff5c6741705..a5ab68ecc4a 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" } }, { "Source": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" } }, { "Source": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" } }, { "Source": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" } }, { "Source": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.source.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.source.template.json index 29d614e77f0..ee566c058c1 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.source.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.source.template.json @@ -10,7 +10,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:f8ab7c96-56f6-46d4-8346-0a5235221fba" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -60,7 +62,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:f8ab7c96-56f6-46d4-8346-0a5235221fba" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -380,19 +384,29 @@ }, "Outputs": { "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthUserPool33BA12FBRef": { - "Value": "us-east-1_pXlpWF7QY" + "Value": { + "Ref": "amplifyAuthUserPool4BA7F805" + } }, "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthUserPoolAppClient0435B83FRef": { - "Value": "oqgm3faeod0cr1b4v63iv4a7a" + "Value": { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + } }, "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthIdentityPool16941F52Ref": { - "Value": "us-east-1:f8ab7c96-56f6-46d4-8346-0a5235221fba" + "Value": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthauthenticatedUserRole9FF894EARef": { - "Value": "amplify-projectboards-ge-amplifyAuthauthenticatedU-HuWvFKttqdhF" + "Value": { + "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" + } }, "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthunauthenticatedUserRole5DB50FFARef": { - "Value": "amplify-projectboards-ge-amplifyAuthunauthenticate-GHLvLgqZHYnT" + "Value": { + "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json index 4bd455c3620..d5de4129ebf 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json @@ -1,6 +1,5 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "Temporary holding stack for Gen2 migration", "Resources": { "amplifyAuthUserPool4BA7F805": { "Type": "AWS::Cognito::UserPool", @@ -71,27 +70,6 @@ "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPool/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_pXlpWF7QY" - }, - "Metadata": { - "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -118,19 +96,46 @@ "SupportedIdentityProviders": [ "COGNITO" ], - "UserPoolId": "us-east-1_pXlpWF7QY" + "UserPoolId": { + "Ref": "amplifyAuthUserPool4BA7F805" + } }, "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPoolAppClient/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": { + "Ref": "amplifyAuthUserPool4BA7F805" + } + }, + "Metadata": { + "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { "AllowUnauthenticatedIdentities": true, "CognitoIdentityProviders": [ { - "ClientId": "oqgm3faeod0cr1b4v63iv4a7a", + "ClientId": { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + }, "ProviderName": { "Fn::Join": [ "", @@ -140,7 +145,9 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - "us-east-1_pXlpWF7QY" + { + "Ref": "amplifyAuthUserPool4BA7F805" + } ] ] } @@ -177,7 +184,9 @@ "amplifyAuthIdentityPoolRoleAttachment045F17C8": { "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "IdentityPoolId": "us-east-1:f8ab7c96-56f6-46d4-8346-0a5235221fba", + "IdentityPoolId": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + }, "RoleMappings": { "UserPoolWebClientRoleMapping": { "AmbiguousRoleResolution": "AuthenticatedRole", @@ -190,9 +199,13 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - "us-east-1_pXlpWF7QY", + { + "Ref": "amplifyAuthUserPool4BA7F805" + }, ":", - "oqgm3faeod0cr1b4v63iv4a7a" + { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + } ] ] }, @@ -200,8 +213,18 @@ } }, "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-ge-amplifyAuthunauthenticate-GHLvLgqZHYnT", - "authenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-ge-amplifyAuthauthenticatedU-HuWvFKttqdhF" + "unauthenticated": { + "Fn::GetAtt": [ + "amplifyAuthunauthenticatedUserRole2B524D9E", + "Arn" + ] + }, + "authenticated": { + "Fn::GetAtt": [ + "amplifyAuthauthenticatedUserRoleD8DA3689", + "Arn" + ] + } } }, "DependsOn": [ diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json index a5ea8fd59de..20edd36515b 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ", - "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" + "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding", - "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" + "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.source.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.source.template.json index 580eda74c18..b64485d5894 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.source.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.source.template.json @@ -4,7 +4,9 @@ "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketPolicy8CF7A616": { "Type": "AWS::S3::BucketPolicy", "Properties": { - "Bucket": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + "Bucket": { + "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" + }, "PolicyDocument": { "Statement": [ { @@ -19,12 +21,22 @@ "AWS": "*" }, "Resource": [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, { "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/*" ] ] @@ -40,15 +52,30 @@ ], "Effect": "Allow", "Principal": { - "AWS": "arn:aws:iam::123456789012:role/amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + "AWS": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + } }, "Resource": [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, { "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/*" ] ] @@ -66,8 +93,15 @@ "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketAutoDeleteObjectsCustomResource1C396A89": { "Type": "Custom::S3AutoDeleteObjects", "Properties": { - "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "BucketName": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" + "ServiceToken": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "Arn" + ] + }, + "BucketName": { + "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" + } }, "DependsOn": [ "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketPolicy8CF7A616" @@ -115,14 +149,21 @@ "Timeout": 900, "MemorySize": 128, "Handler": "index.handler", - "Role": "arn:aws:iam::123456789012:role/amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Role": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + }, "Runtime": "nodejs22.x", "Description": { "Fn::Join": [ "", [ "Lambda function for auto-deleting objects in ", - "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" + }, " S3 bucket." ] ] @@ -148,7 +189,9 @@ "created-by": "amplify" }, "Type": "String", - "Value": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" + "Value": { + "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" + } }, "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/PROJECTBOARDS_34_B_9_A_7_F_3_C_2_CA_489293910116_C_994688_B_02940_GEN_2_MAIN_BUCKET_NAMEParameter/Resource" @@ -166,7 +209,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/public/*" ] ] @@ -183,7 +231,12 @@ } }, "Effect": "Allow", - "Resource": "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" + "Resource": { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + } } ], "Version": "2012-10-17" @@ -212,7 +265,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/public/*" ] ] @@ -221,7 +279,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/protected/*" ] ] @@ -230,7 +293,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/private/*" ] ] @@ -245,7 +313,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/public/*" ] ] @@ -254,7 +327,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/protected/*" ] ] @@ -263,7 +341,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/private/*" ] ] @@ -285,7 +368,12 @@ } }, "Effect": "Allow", - "Resource": "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" + "Resource": { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + } }, { "Action": "s3:DeleteObject", @@ -295,7 +383,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/public/*" ] ] @@ -304,7 +397,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/protected/*" ] ] @@ -313,7 +411,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/private/*" ] ] @@ -621,7 +724,9 @@ }, "Outputs": { "amplifyprojectboardsgen2mainbranch886dbd2decstorageprojectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucket2623A05BRef": { - "Value": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" + "Value": { + "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.target.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.target.template.json index 7375ab1657a..159fcea7fe2 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.target.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.target.template.json @@ -1,6 +1,5 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "Temporary holding stack for Gen2 migration", "Resources": { "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { "Type": "AWS::S3::Bucket", diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.mappings.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.mappings.json index 07eccbab939..53e3abf3235 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.mappings.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", - "LogicalResourceId": "UserPool" + "LogicalResourceId": "UserPool", + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" } }, { "Source": { - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", - "LogicalResourceId": "UserPoolClientWeb" + "LogicalResourceId": "UserPoolClientWeb", + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" } }, { "Source": { - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", - "LogicalResourceId": "UserPoolClient" + "LogicalResourceId": "UserPoolClient", + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" } }, { "Source": { - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", - "LogicalResourceId": "IdentityPool" + "LogicalResourceId": "IdentityPool", + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" } }, { "Source": { - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", - "LogicalResourceId": "IdentityPoolRoleMap" + "LogicalResourceId": "IdentityPoolRoleMap", + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.source.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.source.template.json index 0a3ee93ddce..f63ce7339e7 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.source.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.source.template.json @@ -114,7 +114,9 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - "main", + { + "Ref": "env" + }, "NONE" ] } @@ -136,24 +138,36 @@ ] }, "RoleName": { - "Fn::Join": [ - "", - [ - "upClientLambdaRole54040ecc", - { - "Fn::Select": [ - 3, + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userpoolClientLambdaRole" + }, + { + "Fn::Join": [ + "", + [ + "upClientLambdaRole54040ecc", { - "Fn::Split": [ - "-", - "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + { + "Ref": "AWS::StackName" + } + ] + } ] + }, + "-", + { + "Ref": "env" } ] - }, - "-", - "main" - ] + ] + } ] } } @@ -162,29 +176,49 @@ "Outputs": { "IdentityPoolId": { "Description": "Id for the identity pool", - "Value": "us-east-1:88399477-86ba-4d93-aa1a-13242b53b791" + "Value": { + "Ref": "IdentityPool" + } }, "IdentityPoolName": { - "Value": "projectboards54040ecc_identitypool_54040ecc__main" + "Value": { + "Fn::GetAtt": [ + "IdentityPool", + "Name" + ] + } }, "UserPoolId": { "Description": "Id for the user pool", - "Value": "us-east-1_ct5s4IEz3" + "Value": { + "Ref": "UserPool" + } }, "UserPoolArn": { "Description": "Arn for the user pool", - "Value": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_ct5s4IEz3" + "Value": { + "Fn::GetAtt": [ + "UserPool", + "Arn" + ] + } }, "UserPoolName": { - "Value": "projectboards54040ecc_userpool_54040ecc" + "Value": { + "Ref": "userPoolName" + } }, "AppClientIDWeb": { "Description": "The user pool app client id for web", - "Value": "1vpeihq8svf62sepfnkuvp8sld" + "Value": { + "Ref": "UserPoolClientWeb" + } }, "AppClientID": { "Description": "The user pool app client id", - "Value": "3dbqrlfs0a0g4a6ihsanen6i5" + "Value": { + "Ref": "UserPoolClient" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.target.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.target.template.json index 06fb757fe75..5cc2cce7f81 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.target.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.target.template.json @@ -1,6 +1,176 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.11.1\",\"stackType\":\"auth-Cognito\",\"metadata\":{}}", "Resources": { + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": { + "Ref": "emailVerificationMessage" + }, + "EmailVerificationSubject": { + "Ref": "emailVerificationSubject" + }, + "MfaConfiguration": { + "Ref": "mfaConfiguration" + }, + "Policies": { + "PasswordPolicy": { + "MinimumLength": { + "Ref": "passwordPolicyMinLength" + }, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userPoolName" + }, + { + "Fn::Join": [ + "", + [ + { + "Ref": "userPoolName" + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "UsernameAttributes": { + "Ref": "usernameAttributes" + }, + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "projec54040ecc_app_client", + "GenerateSecret": { + "Ref": "userpoolClientGenerateSecret" + }, + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "projec54040ecc_app_clientWeb", + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": { + "Ref": "allowUnauthenticatedIdentities" + }, + "CognitoIdentityProviders": [ + { + "ClientId": { + "Ref": "UserPoolClient" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + }, + { + "ClientId": { + "Ref": "UserPoolClientWeb" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "projectboards54040ecc_identitypool_54040ecc", + { + "Fn::Join": [ + "", + [ + "projectboards54040ecc_identitypool_54040ecc__", + { + "Ref": "env" + } + ] + ] + } + ] + } + } + }, "amplifyAuthauthenticatedUserRoleD8DA3689": { "Type": "AWS::IAM::Role", "Properties": { @@ -10,7 +180,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:f8ab7c96-56f6-46d4-8346-0a5235221fba" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -60,7 +232,9 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:f8ab7c96-56f6-46d4-8346-0a5235221fba" + "cognito-identity.amazonaws.com:aud": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -101,150 +275,34 @@ "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/unauthenticatedUserRole/Resource" } }, - "CDKMetadata": { - "Type": "AWS::CDK::Metadata", - "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/02LwQrCMBBEv8V7urbBg1fpyYtIxbPEZNVt0w00q0VC/l2KVHuamTczGvSmgnJlxlhY1xWerpAOGAXdSYztlBnjJdlwZ5IA6RxxOIbgVX3jn59N7QlZltWf7B2ykLzn8zI3weNOxNhHjyxZkekhTXAaTppzVhwcQhvXL62h2kK5aiNRMTxZqEdovvoBH9Args4AAAA=" - }, - "Metadata": { - "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/CDKMetadata/Default" - }, - "Condition": "CDKMetadataAvailable" - }, - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": "Your verification code is {####}", - "EmailVerificationSubject": "Your verification code", - "MfaConfiguration": "OFF", - "Policies": { - "PasswordPolicy": { - "MinimumLength": "8", - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false - } + "IdentityPoolId": { + "Ref": "IdentityPool" }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true + "Roles": { + "unauthenticated": { + "Ref": "unauthRoleArn" + }, + "authenticated": { + "Ref": "authRoleArn" } - ], - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolName": { - "Fn::Join": [ - "", - [ - "projectboards54040ecc_userpool_54040ecc", - "-", - "main" - ] - ] - }, - "UsernameAttributes": [ - "email" - ], - "UsernameConfiguration": { - "CaseSensitive": false } - } - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "projec54040ecc_app_clientWeb", - "RefreshTokenValidity": "30", - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": "us-east-1_ct5s4IEz3" }, "DependsOn": [ - "amplifyAuthUserPool4BA7F805" + "IdentityPool" ] }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", + "CDKMetadata": { + "Type": "AWS::CDK::Metadata", "Properties": { - "ClientName": "projec54040ecc_app_client", - "GenerateSecret": "false", - "RefreshTokenValidity": "30", - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": "us-east-1_ct5s4IEz3" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/02LwQrCMBBEv8V7urbBg1fpyYtIxbPEZNVt0w00q0VC/l2KVHuamTczGvSmgnJlxlhY1xWerpAOGAXdSYztlBnjJdlwZ5IA6RxxOIbgVX3jn59N7QlZltWf7B2ykLzn8zI3weNOxNhHjyxZkekhTXAaTppzVhwcQhvXL62h2kK5aiNRMTxZqEdovvoBH9Args4AAAA=" }, - "DependsOn": [ - "amplifyAuthUserPool4BA7F805" - ] - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": "true", - "CognitoIdentityProviders": [ - { - "ClientId": "3dbqrlfs0a0g4a6ihsanen6i5", - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": "us-east-1_ct5s4IEz3" - } - ] - } - }, - { - "ClientId": "1vpeihq8svf62sepfnkuvp8sld", - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": "us-east-1_ct5s4IEz3" - } - ] - } - } - ], - "IdentityPoolName": { - "Fn::Join": [ - "", - [ - "projectboards54040ecc_identitypool_54040ecc__", - "main" - ] - ] - } - } - }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": "us-east-1:88399477-86ba-4d93-aa1a-13242b53b791", - "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-main-02940-unauthRole", - "authenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-main-02940-authRole" - } + "Metadata": { + "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/CDKMetadata/Default" }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC" - ] + "Condition": "CDKMetadataAvailable" } }, "Conditions": { @@ -515,19 +573,29 @@ }, "Outputs": { "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthUserPool33BA12FBRef": { - "Value": "us-east-1_pXlpWF7QY" + "Value": { + "Ref": "amplifyAuthUserPool4BA7F805" + } }, "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthUserPoolAppClient0435B83FRef": { - "Value": "oqgm3faeod0cr1b4v63iv4a7a" + "Value": { + "Ref": "amplifyAuthUserPoolAppClient2626C6F8" + } }, "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthIdentityPool16941F52Ref": { - "Value": "us-east-1:f8ab7c96-56f6-46d4-8346-0a5235221fba" + "Value": { + "Ref": "amplifyAuthIdentityPool3FDE84CC" + } }, "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthauthenticatedUserRole9FF894EARef": { - "Value": "amplify-projectboards-ge-amplifyAuthauthenticatedU-HuWvFKttqdhF" + "Value": { + "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" + } }, "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthunauthenticatedUserRole5DB50FFARef": { - "Value": "amplify-projectboards-ge-amplifyAuthunauthenticate-GHLvLgqZHYnT" + "Value": { + "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json index 129799390d2..e8be4aa2427 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY", - "LogicalResourceId": "S3Bucket" + "LogicalResourceId": "S3Bucket", + "StackName": "amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ", - "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" + "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.source.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.source.template.json index fadc25c61f3..2a102385b61 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.source.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.source.template.json @@ -84,7 +84,9 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - "main", + { + "Ref": "env" + }, "NONE" ] }, @@ -92,7 +94,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:PutObject,s3:GetObject,s3:DeleteObject", + { + "Ref": "s3PermissionsAuthenticatedPublic" + }, "DISALLOW" ] } @@ -102,7 +106,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:PutObject,s3:GetObject,s3:DeleteObject", + { + "Ref": "s3PermissionsAuthenticatedProtected" + }, "DISALLOW" ] } @@ -112,7 +118,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:PutObject,s3:GetObject,s3:DeleteObject", + { + "Ref": "s3PermissionsAuthenticatedPrivate" + }, "DISALLOW" ] } @@ -122,7 +130,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:PutObject", + { + "Ref": "s3PermissionsAuthenticatedUploads" + }, "DISALLOW" ] } @@ -132,7 +142,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "s3:GetObject", + { + "Ref": "s3PermissionsGuestPublic" + }, "DISALLOW" ] } @@ -142,7 +154,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "DISALLOW", + { + "Ref": "s3PermissionsGuestUploads" + }, "DISALLOW" ] } @@ -152,7 +166,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "ALLOW", + { + "Ref": "AuthenticatedAllowList" + }, "DISALLOW" ] } @@ -162,7 +178,9 @@ "Fn::Not": [ { "Fn::Equals": [ - "ALLOW", + { + "Ref": "GuestAllowList" + }, "DISALLOW" ] } @@ -172,10 +190,14 @@ "Outputs": { "BucketName": { "Description": "Bucket name for the S3 bucket", - "Value": "projectboards34b9a7f3c2ca489293910116c994688b02940-main" + "Value": { + "Ref": "S3Bucket" + } }, "Region": { - "Value": "us-east-1" + "Value": { + "Ref": "AWS::Region" + } } }, "Resources": { @@ -190,7 +212,9 @@ "Action": { "Fn::Split": [ ",", - "s3:PutObject,s3:GetObject,s3:DeleteObject" + { + "Ref": "s3PermissionsAuthenticatedPublic" + } ] }, "Resource": [ @@ -199,7 +223,9 @@ "", [ "arn:aws:s3:::", - "projectboards34b9a7f3c2ca489293910116c994688b02940-main", + { + "Ref": "S3Bucket" + }, "/public/*" ] ] @@ -208,12 +234,18 @@ } ] }, - "PolicyName": "Public_policy_69f8ff1c", + "PolicyName": { + "Ref": "s3PublicPolicy" + }, "Roles": [ - "amplify-projectboards-main-02940-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -227,7 +259,9 @@ "Action": { "Fn::Split": [ ",", - "s3:PutObject,s3:GetObject,s3:DeleteObject" + { + "Ref": "s3PermissionsAuthenticatedProtected" + } ] }, "Resource": [ @@ -236,7 +270,9 @@ "", [ "arn:aws:s3:::", - "projectboards34b9a7f3c2ca489293910116c994688b02940-main", + { + "Ref": "S3Bucket" + }, "/protected/${cognito-identity.amazonaws.com:sub}/*" ] ] @@ -245,12 +281,18 @@ } ] }, - "PolicyName": "Protected_policy_69f8ff1c", + "PolicyName": { + "Ref": "s3ProtectedPolicy" + }, "Roles": [ - "amplify-projectboards-main-02940-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -264,7 +306,9 @@ "Action": { "Fn::Split": [ ",", - "s3:PutObject,s3:GetObject,s3:DeleteObject" + { + "Ref": "s3PermissionsAuthenticatedPrivate" + } ] }, "Resource": [ @@ -273,7 +317,9 @@ "", [ "arn:aws:s3:::", - "projectboards34b9a7f3c2ca489293910116c994688b02940-main", + { + "Ref": "S3Bucket" + }, "/private/${cognito-identity.amazonaws.com:sub}/*" ] ] @@ -282,12 +328,18 @@ } ] }, - "PolicyName": "Private_policy_69f8ff1c", + "PolicyName": { + "Ref": "s3PrivatePolicy" + }, "Roles": [ - "amplify-projectboards-main-02940-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -301,7 +353,9 @@ "Action": { "Fn::Split": [ ",", - "s3:PutObject" + { + "Ref": "s3PermissionsAuthenticatedUploads" + } ] }, "Resource": [ @@ -310,7 +364,9 @@ "", [ "arn:aws:s3:::", - "projectboards34b9a7f3c2ca489293910116c994688b02940-main", + { + "Ref": "S3Bucket" + }, "/uploads/*" ] ] @@ -319,12 +375,18 @@ } ] }, - "PolicyName": "Uploads_policy_69f8ff1c", + "PolicyName": { + "Ref": "s3UploadsPolicy" + }, "Roles": [ - "amplify-projectboards-main-02940-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -338,7 +400,9 @@ "Action": { "Fn::Split": [ ",", - "s3:GetObject" + { + "Ref": "s3PermissionsGuestPublic" + } ] }, "Resource": [ @@ -347,7 +411,9 @@ "", [ "arn:aws:s3:::", - "projectboards34b9a7f3c2ca489293910116c994688b02940-main", + { + "Ref": "S3Bucket" + }, "/public/*" ] ] @@ -356,12 +422,18 @@ } ] }, - "PolicyName": "Public_policy_69f8ff1c", + "PolicyName": { + "Ref": "s3PublicPolicy" + }, "Roles": [ - "amplify-projectboards-main-02940-unauthRole" + { + "Ref": "unauthRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -377,7 +449,9 @@ "", [ "arn:aws:s3:::", - "projectboards34b9a7f3c2ca489293910116c994688b02940-main", + { + "Ref": "S3Bucket" + }, "/protected/*" ] ] @@ -403,7 +477,9 @@ "", [ "arn:aws:s3:::", - "projectboards34b9a7f3c2ca489293910116c994688b02940-main" + { + "Ref": "S3Bucket" + } ] ] } @@ -411,12 +487,18 @@ ], "Version": "2012-10-17" }, - "PolicyName": "read_policy_69f8ff1c", + "PolicyName": { + "Ref": "s3ReadPolicy" + }, "Roles": [ - "amplify-projectboards-main-02940-authRole" + { + "Ref": "authRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -432,7 +514,9 @@ "", [ "arn:aws:s3:::", - "projectboards34b9a7f3c2ca489293910116c994688b02940-main", + { + "Ref": "S3Bucket" + }, "/protected/*" ] ] @@ -456,7 +540,9 @@ "", [ "arn:aws:s3:::", - "projectboards34b9a7f3c2ca489293910116c994688b02940-main" + { + "Ref": "S3Bucket" + } ] ] } @@ -464,12 +550,18 @@ ], "Version": "2012-10-17" }, - "PolicyName": "read_policy_69f8ff1c", + "PolicyName": { + "Ref": "s3ReadPolicy" + }, "Roles": [ - "amplify-projectboards-main-02940-unauthRole" + { + "Ref": "unauthRoleName" + } ] }, - "DependsOn": [], + "DependsOn": [ + "S3Bucket" + ], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.target.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.target.template.json index 60a42386506..4f69c5395a5 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.target.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.target.template.json @@ -1,10 +1,90 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.4.3\",\"stackType\":\"storage-S3\",\"metadata\":{}}", "Resources": { + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "bucketName" + }, + { + "Fn::Join": [ + "", + [ + { + "Ref": "bucketName" + }, + { + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + { + "Ref": "AWS::StackName" + } + ] + } + ] + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "Id": "S3CORSRuleId1", + "MaxAge": 3000 + } + ] + }, + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + } + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketPolicy8CF7A616": { "Type": "AWS::S3::BucketPolicy", "Properties": { - "Bucket": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + "Bucket": { + "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" + }, "PolicyDocument": { "Statement": [ { @@ -19,12 +99,22 @@ "AWS": "*" }, "Resource": [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, { "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/*" ] ] @@ -40,15 +130,30 @@ ], "Effect": "Allow", "Principal": { - "AWS": "arn:aws:iam::123456789012:role/amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + "AWS": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + } }, "Resource": [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, { "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/*" ] ] @@ -66,8 +171,15 @@ "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketAutoDeleteObjectsCustomResource1C396A89": { "Type": "Custom::S3AutoDeleteObjects", "Properties": { - "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "BucketName": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" + "ServiceToken": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "Arn" + ] + }, + "BucketName": { + "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" + } }, "DependsOn": [ "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketPolicy8CF7A616" @@ -115,14 +227,21 @@ "Timeout": 900, "MemorySize": 128, "Handler": "index.handler", - "Role": "arn:aws:iam::123456789012:role/amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Role": { + "Fn::GetAtt": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn" + ] + }, "Runtime": "nodejs22.x", "Description": { "Fn::Join": [ "", [ "Lambda function for auto-deleting objects in ", - "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" + }, " S3 bucket." ] ] @@ -148,7 +267,9 @@ "created-by": "amplify" }, "Type": "String", - "Value": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" + "Value": { + "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" + } }, "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/PROJECTBOARDS_34_B_9_A_7_F_3_C_2_CA_489293910116_C_994688_B_02940_GEN_2_MAIN_BUCKET_NAMEParameter/Resource" @@ -166,7 +287,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/public/*" ] ] @@ -183,7 +309,12 @@ } }, "Effect": "Allow", - "Resource": "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" + "Resource": { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + } } ], "Version": "2012-10-17" @@ -212,7 +343,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/public/*" ] ] @@ -221,7 +357,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/protected/*" ] ] @@ -230,7 +371,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/private/*" ] ] @@ -245,7 +391,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/public/*" ] ] @@ -254,7 +405,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/protected/*" ] ] @@ -263,7 +419,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/private/*" ] ] @@ -285,7 +446,12 @@ } }, "Effect": "Allow", - "Resource": "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" + "Resource": { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + } }, { "Action": "s3:DeleteObject", @@ -295,7 +461,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/public/*" ] ] @@ -304,7 +475,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/protected/*" ] ] @@ -313,7 +489,12 @@ "Fn::Join": [ "", [ - "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", + { + "Fn::GetAtt": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "Arn" + ] + }, "/private/*" ] ] @@ -343,70 +524,6 @@ "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" - }, - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketName": { - "Fn::Join": [ - "", - [ - "projectboards34b9a7f3c2ca489293910116c994688b", - { - "Fn::Select": [ - 3, - { - "Fn::Split": [ - "-", - "amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY" - ] - } - ] - }, - "-", - "main" - ] - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "Id": "S3CORSRuleId1", - "MaxAge": 3000 - } - ] - }, - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - } - }, - "UpdateReplacePolicy": "Retain", - "DeletionPolicy": "Retain" } }, "Conditions": { @@ -685,7 +802,9 @@ }, "Outputs": { "amplifyprojectboardsgen2mainbranch886dbd2decstorageprojectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucket2623A05BRef": { - "Value": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" + "Value": { + "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.template.json index ce3bc368f1b..e004bc868c5 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.template.json @@ -303,10 +303,6 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-ge-amplifyAuthauthenticatedU-HuWvFKttqdhF" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.template.json index 0c2b9cd2a9c..89a6d81ca6f 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.template.json @@ -141,9 +141,6 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" }, - "DependsOn": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketPolicy8CF7A616" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -200,9 +197,6 @@ ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.template.json index 3aa2d612914..92d9ab6fde9 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.template.json @@ -177,10 +177,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_ct5s4IEz3" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", @@ -192,10 +189,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_ct5s4IEz3" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClientRole": { "Type": "AWS::IAM::Role", @@ -288,10 +282,7 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-main-02940-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-main-02940-authRole" } - }, - "DependsOn": [ - "IdentityPool" - ] + } } }, "Outputs": { diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.template.json index eed789328a5..1ebeee344f7 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.template.json @@ -277,7 +277,6 @@ "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -314,7 +313,6 @@ "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -351,7 +349,6 @@ "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -388,7 +385,6 @@ "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -425,7 +421,6 @@ "amplify-projectboards-main-02940-unauthRole" ] }, - "DependsOn": [], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -480,7 +475,6 @@ "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -533,7 +527,6 @@ "amplify-projectboards-main-02940-unauthRole" ] }, - "DependsOn": [], "Condition": "GuestReadAndList" } } diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/clients/cloudformation.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/clients/cloudformation.ts index 3033c4660c7..0031ba2a989 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/clients/cloudformation.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/clients/cloudformation.ts @@ -104,31 +104,25 @@ export class CloudFormationMock { const invocationCount = this._describeStackCounter.get(input.StackName!) ?? 0; this._describeStackCounter.set(input.StackName!, invocationCount + 1); if (input.StackName!.endsWith('-holding')) { - switch (invocationCount) { - case 0: - // first time is before executing refactor when we check if it already - // exists. simulate a standard pre-refactor state where it doesn't. - throw new cloudformation.CloudFormationServiceException({ - name: 'ValidationError', - message: `stack ${input.StackName} does not exist`, - $fault: 'client', - $metadata: {}, - }); - case 1: - // second time is after we execute the refactor and CloudFormation is supposed - // to create the stack for us. all we need is a completion status here. - return { - Stacks: [ - { - StackName: input.StackName, - StackStatus: 'UPDATE_COMPLETE', - CreationTime: undefined, - }, - ], - }; - default: - throw new Error(`Unexpected invocation of DescribeStacks with input: ${JSON.stringify(input)}`); + if (invocationCount === 0) { + // first call: findStack check before refactor — stack doesn't exist yet + throw new cloudformation.CloudFormationServiceException({ + name: 'ValidationError', + message: `stack ${input.StackName} does not exist`, + $fault: 'client', + $metadata: {}, + }); } + // subsequent calls: after refactor creates the stack, waiters poll for completion + return { + Stacks: [ + { + StackName: input.StackName, + StackStatus: cloudformation.StackStatus.CREATE_COMPLETE, + CreationTime: new Date(), + }, + ], + }; } const parameters = this.app.cfnParametersForStack(input.StackName!); const outputs = this.app.cfnOutputsForStack(input.StackName!); @@ -138,8 +132,8 @@ export class CloudFormationMock { { StackName: input.StackName!, Parameters: parameters, - CreationTime: undefined, - StackStatus: 'UPDATE_COMPLETE', + CreationTime: new Date(), + StackStatus: cloudformation.StackStatus.UPDATE_COMPLETE, Description: description, Outputs: outputs, }, @@ -153,6 +147,18 @@ export class CloudFormationMock { .on(cloudformation.GetTemplateCommand) .callsFake(async (input: cloudformation.GetTemplateCommandInput): Promise => { const templatePath = this.app.templatePathForStack(input.StackName!); + // Holding stacks are created dynamically during refactor and have no snapshot file. + // Return an empty template so Cfn.refactor() can populate it with moved resources. + if (!fs.existsSync(templatePath)) { + return { + TemplateBody: JSON.stringify({ + AWSTemplateFormatVersion: '2010-09-09', + Resources: {}, + Outputs: {}, + }), + $metadata: {}, + }; + } return { TemplateBody: fs.readFileSync(templatePath, { encoding: 'utf-8' }), $metadata: {}, diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts index c227b8ed8cd..9925bf408dd 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts @@ -36,6 +36,9 @@ const gen2AuthTemplate: CFNTemplate = { }; function setupMocks(cfnMock: ReturnType) { + // Default: no stacks found (used by findStack for holding stacks) + cfnMock.on(DescribeStacksCommand).resolves({ Stacks: [] }); + const gen1NestedStacks = [ { LogicalResourceId: 'authtestStack', @@ -139,6 +142,9 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { }, }; + // Default: no stacks found (for holding stack lookup) + cfnMock.on(DescribeStacksCommand).resolves({ Stacks: [] }); + cfnMock.on(DescribeStackResourcesCommand, { StackName: 'gen1-root' }).resolves({ StackResources: [ { diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts index d294e177faa..7855d1dc9aa 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts @@ -15,7 +15,9 @@ import { ResourceStatus, CreateChangeSetCommand, DescribeChangeSetCommand, + DeleteChangeSetCommand, } from '@aws-sdk/client-cloudformation'; +import { Cfn } from '../../../../commands/gen2-migration/refactor/cfn'; const ts = new Date(); const rs = ResourceStatus.CREATE_COMPLETE; @@ -65,7 +67,8 @@ function makeInstances() { (clients as any).cloudFormation = new CloudFormationClient({}); const gen1Env = new StackFacade(clients, 'gen1-root'); const gen2Branch = new StackFacade(clients, 'gen2-root'); - return { clients, gen1Env, gen2Branch }; + const cfn = new Cfn(new CloudFormationClient({}), noOpLogger()); + return { clients, gen1Env, gen2Branch, cfn }; } describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefactorer', () => { @@ -74,6 +77,8 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact cfnMock = mockClient(CloudFormationClient); cfnMock.on(CreateChangeSetCommand).resolves({}); cfnMock.on(DescribeChangeSetCommand).resolves({ Status: 'CREATE_COMPLETE', Changes: [] }); + cfnMock.on(DeleteChangeSetCommand).resolves({}); + cfnMock.on(DescribeStacksCommand).resolves({ Stacks: [] }); }); afterEach(() => cfnMock.restore()); @@ -81,15 +86,24 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact cfnMock.on(DescribeStackResourcesCommand, { StackName: 'gen1-root' }).resolves({ StackResources: [] }); cfnMock.on(DescribeStackResourcesCommand, { StackName: 'gen2-root' }).resolves({ StackResources: [] }); - const { clients, gen1Env, gen2Branch } = makeInstances(); + const { clients, gen1Env, gen2Branch, cfn } = makeInstances(); await expect( - new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger(), { - category: 'storage', - resourceName: 'test', - service: 'S3', - key: 'storage:S3' as const, - }).plan(), - ).rejects.toThrow('unable to find source stack'); + new StorageS3ForwardRefactorer( + gen1Env, + gen2Branch, + clients, + 'us-east-1', + '123', + noOpLogger(), + { + category: 'storage', + resourceName: 'test', + service: 'S3', + key: 'storage:S3' as const, + }, + cfn, + ).plan(), + ).rejects.toThrow('Unable to find source stack'); }); it('throws when source exists but destination does not (Path B)', async () => { @@ -98,15 +112,24 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact }); cfnMock.on(DescribeStackResourcesCommand, { StackName: 'gen2-root' }).resolves({ StackResources: [] }); - const { clients, gen1Env, gen2Branch } = makeInstances(); + const { clients, gen1Env, gen2Branch, cfn } = makeInstances(); await expect( - new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger(), { - category: 'storage', - resourceName: 'test', - service: 'S3', - key: 'storage:S3' as const, - }).plan(), - ).rejects.toThrow('unable to find target stack'); + new StorageS3ForwardRefactorer( + gen1Env, + gen2Branch, + clients, + 'us-east-1', + '123', + noOpLogger(), + { + category: 'storage', + resourceName: 'test', + service: 'S3', + key: 'storage:S3' as const, + }, + cfn, + ).plan(), + ).rejects.toThrow('Unable to find target stack'); }); it('throws when destination exists but source does not (Path B reversed)', async () => { @@ -115,15 +138,24 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact StackResources: [nestedStack('storageGen2', 'gen2-storage-stack')], }); - const { clients, gen1Env, gen2Branch } = makeInstances(); + const { clients, gen1Env, gen2Branch, cfn } = makeInstances(); await expect( - new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger(), { - category: 'storage', - resourceName: 'test', - service: 'S3', - key: 'storage:S3' as const, - }).plan(), - ).rejects.toThrow('unable to find source stack'); + new StorageS3ForwardRefactorer( + gen1Env, + gen2Branch, + clients, + 'us-east-1', + '123', + noOpLogger(), + { + category: 'storage', + resourceName: 'test', + service: 'S3', + key: 'storage:S3' as const, + }, + cfn, + ).plan(), + ).rejects.toThrow('Unable to find source stack'); }); it('returns empty array when no matching resource types in source (Path D)', async () => { @@ -136,26 +168,44 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact setupStorageMocks(cfnMock); cfnMock.on(GetTemplateCommand, { StackName: 'gen1-storage-stack' }).resolves({ TemplateBody: JSON.stringify(noStorageTemplate) }); - const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger(), { - category: 'storage', - resourceName: 'test', - service: 'S3', - key: 'storage:S3' as const, - }).plan(); - expect(ops).toEqual([]); + const { clients, gen1Env, gen2Branch, cfn } = makeInstances(); + const ops = await new StorageS3ForwardRefactorer( + gen1Env, + gen2Branch, + clients, + 'us-east-1', + '123', + noOpLogger(), + { + category: 'storage', + resourceName: 'test', + service: 'S3', + key: 'storage:S3' as const, + }, + cfn, + ).plan(); + expect(ops).toHaveLength(1); // no-op operation }); it('produces updateSource → updateTarget → beforeMove → move for forward plan', async () => { setupStorageMocks(cfnMock); - const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new StorageS3ForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger(), { - category: 'storage', - resourceName: 'test', - service: 'S3', - key: 'storage:S3' as const, - }).plan(); + const { clients, gen1Env, gen2Branch, cfn } = makeInstances(); + const ops = await new StorageS3ForwardRefactorer( + gen1Env, + gen2Branch, + clients, + 'us-east-1', + '123', + noOpLogger(), + { + category: 'storage', + resourceName: 'test', + service: 'S3', + key: 'storage:S3' as const, + }, + cfn, + ).plan(); const descriptions = (await Promise.all(ops.map((o) => o.describe()))).flat(); expect(descriptions).toHaveLength(4); @@ -172,10 +222,12 @@ describe('StorageS3RollbackRefactorer.plan() — rollback without holding stack' cfnMock = mockClient(CloudFormationClient); cfnMock.on(CreateChangeSetCommand).resolves({}); cfnMock.on(DescribeChangeSetCommand).resolves({ Status: 'CREATE_COMPLETE', Changes: [] }); + cfnMock.on(DeleteChangeSetCommand).resolves({}); + cfnMock.on(DescribeStacksCommand).resolves({ Stacks: [] }); }); afterEach(() => cfnMock.restore()); - it('produces move only (no updateSource/updateTarget, no afterMove ops)', async () => { + it('produces no-op when resources already exist in target', async () => { // Default DescribeStacks returns empty (findHoldingStack → null) cfnMock.on(DescribeStacksCommand).resolves({ Stacks: [] }); @@ -202,19 +254,25 @@ describe('StorageS3RollbackRefactorer.plan() — rollback without holding stack' }); cfnMock.on(GetTemplateCommand, { StackName: 'gen1-storage-stack' }).resolves({ TemplateBody: JSON.stringify(gen1StorageTemplate) }); - const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new StorageS3RollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger(), { - category: 'storage', - resourceName: 'test', - service: 'S3', - key: 'storage:S3' as const, - }).plan(); - const descriptions = (await Promise.all(ops.map((o) => o.describe()))).flat(); + const { clients, gen1Env, gen2Branch, cfn } = makeInstances(); + const ops = await new StorageS3RollbackRefactorer( + gen1Env, + gen2Branch, + clients, + 'us-east-1', + '123', + noOpLogger(), + { + category: 'storage', + resourceName: 'test', + service: 'S3', + key: 'storage:S3' as const, + }, + cfn, + ).plan(); - // Rollback: no updateSource/updateTarget, just move - expect(descriptions.every((d) => !d.includes('Update source') && !d.includes('Update target'))).toBe(true); - expect(descriptions.some((d) => d.includes('Move'))).toBe(true); - expect(descriptions).toHaveLength(1); + // Resources already exist in Gen1 target, so rollback produces no-op + expect(ops).toHaveLength(1); // no-op operation }); }); @@ -224,6 +282,8 @@ describe('Analytics wiring tests', () => { cfnMock = mockClient(CloudFormationClient); cfnMock.on(CreateChangeSetCommand).resolves({}); cfnMock.on(DescribeChangeSetCommand).resolves({ Status: 'CREATE_COMPLETE', Changes: [] }); + cfnMock.on(DeleteChangeSetCommand).resolves({}); + cfnMock.on(DescribeStacksCommand).resolves({ Stacks: [] }); }); afterEach(() => cfnMock.restore()); @@ -261,13 +321,22 @@ describe('Analytics wiring tests', () => { it('forward: discovers analytics stacks and maps Kinesis stream', async () => { setupAnalyticsMocks(cfnMock); - const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new AnalyticsKinesisForwardRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger(), { - category: 'analytics', - resourceName: 'test', - service: 'Kinesis', - key: 'analytics:Kinesis' as const, - }).plan(); + const { clients, gen1Env, gen2Branch, cfn } = makeInstances(); + const ops = await new AnalyticsKinesisForwardRefactorer( + gen1Env, + gen2Branch, + clients, + 'us-east-1', + '123', + noOpLogger(), + { + category: 'analytics', + resourceName: 'test', + service: 'Kinesis', + key: 'analytics:Kinesis' as const, + }, + cfn, + ).plan(); const descriptions = (await Promise.all(ops.map((o) => o.describe()))).flat(); expect(descriptions).toHaveLength(4); @@ -277,16 +346,24 @@ describe('Analytics wiring tests', () => { it('rollback: discovers analytics stacks and maps to Gen1 KinesisStream ID', async () => { cfnMock.on(DescribeStacksCommand).resolves({ Stacks: [] }); // no holding stack setupAnalyticsMocks(cfnMock); - const { clients, gen1Env, gen2Branch } = makeInstances(); - const ops = await new AnalyticsKinesisRollbackRefactorer(gen1Env, gen2Branch, clients, 'us-east-1', '123', noOpLogger(), { - category: 'analytics', - resourceName: 'test', - service: 'Kinesis', - key: 'analytics:Kinesis' as const, - }).plan(); - const descriptions = (await Promise.all(ops.map((o) => o.describe()))).flat(); + const { clients, gen1Env, gen2Branch, cfn } = makeInstances(); + const ops = await new AnalyticsKinesisRollbackRefactorer( + gen1Env, + gen2Branch, + clients, + 'us-east-1', + '123', + noOpLogger(), + { + category: 'analytics', + resourceName: 'test', + service: 'Kinesis', + key: 'analytics:Kinesis' as const, + }, + cfn, + ).plan(); - expect(descriptions).toHaveLength(1); - expect(descriptions[0]).toContain('Move 1 resource'); + // Resources already exist in Gen1 target, so rollback produces no-op + expect(ops).toHaveLength(1); // no-op operation }); }); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-stack-refactor-updater.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-stack-refactor-updater.test.ts deleted file mode 100644 index f561576c0b2..00000000000 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-stack-refactor-updater.test.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { tryRefactorStack, RefactorFailure } from '../../../../commands/gen2-migration/refactor/cfn-stack-refactor-updater'; -import { mockClient } from 'aws-sdk-client-mock'; -import { - CloudFormationClient, - CreateStackRefactorCommand, - DescribeStackRefactorCommand, - ExecuteStackRefactorCommand, - DescribeStacksCommand, - StackRefactorStatus, - StackRefactorExecutionStatus, -} from '@aws-sdk/client-cloudformation'; - -jest.mock('../../../../commands/gen2-migration/refactor/snap', () => ({ - preRefactorStack: jest.fn(), -})); - -const input = { - StackDefinitions: [ - { StackName: 'source-stack', TemplateBody: '{}' }, - { StackName: 'dest-stack', TemplateBody: '{}' }, - ], - ResourceMappings: [ - { Source: { StackName: 'source-stack', LogicalResourceId: 'A' }, Destination: { StackName: 'dest-stack', LogicalResourceId: 'B' } }, - ], -}; - -describe('tryRefactorStack', () => { - let cfnMock: ReturnType; - - beforeEach(() => { - cfnMock = mockClient(CloudFormationClient); - }); - afterEach(() => cfnMock.restore()); - - it('happy path: create → execute → poll stacks → success', async () => { - cfnMock.on(CreateStackRefactorCommand).resolves({ StackRefactorId: 'refactor-1' }); - cfnMock - .on(DescribeStackRefactorCommand) - .resolvesOnce({ Status: StackRefactorStatus.CREATE_COMPLETE }) - .resolvesOnce({ ExecutionStatus: StackRefactorExecutionStatus.EXECUTE_COMPLETE }); - cfnMock.on(ExecuteStackRefactorCommand).resolves({}); - cfnMock - .on(DescribeStacksCommand) - .resolvesOnce({ Stacks: [{ StackName: 'source-stack', StackStatus: 'UPDATE_COMPLETE', CreationTime: new Date() }] }) - .resolvesOnce({ Stacks: [{ StackName: 'dest-stack', StackStatus: 'UPDATE_COMPLETE', CreationTime: new Date() }] }); - - const result = await tryRefactorStack(new CloudFormationClient({}), input, 1); - expect(result.success).toBe(true); - }); - - it('returns failure when create lands on CREATE_FAILED', async () => { - cfnMock.on(CreateStackRefactorCommand).resolves({ StackRefactorId: 'refactor-1' }); - cfnMock.on(DescribeStackRefactorCommand).resolves({ - Status: StackRefactorStatus.CREATE_FAILED, - StatusReason: 'Update operations not permitted', - }); - - const result = await tryRefactorStack(new CloudFormationClient({}), input, 1); - expect(result.success).toBe(false); - if (!result.success) { - const failure = result as RefactorFailure; - expect(failure.reason).toContain('Update operations not permitted'); - expect(failure.stackRefactorId).toBe('refactor-1'); - } - }); - - it('returns failure when execute lands on EXECUTE_FAILED', async () => { - cfnMock.on(CreateStackRefactorCommand).resolves({ StackRefactorId: 'refactor-1' }); - cfnMock - .on(DescribeStackRefactorCommand) - .resolvesOnce({ Status: StackRefactorStatus.CREATE_COMPLETE }) - .resolvesOnce({ ExecutionStatus: StackRefactorExecutionStatus.EXECUTE_FAILED, ExecutionStatusReason: 'conflict' }); - cfnMock.on(ExecuteStackRefactorCommand).resolves({}); - - const result = await tryRefactorStack(new CloudFormationClient({}), input, 1); - expect(result.success).toBe(false); - if (!result.success) { - expect((result as RefactorFailure).reason).toContain('conflict'); - } - }); - - it('throws on polling timeout', async () => { - jest.useFakeTimers(); - cfnMock.on(CreateStackRefactorCommand).resolves({ StackRefactorId: 'refactor-1' }); - cfnMock.on(DescribeStackRefactorCommand).resolves({ Status: StackRefactorStatus.CREATE_IN_PROGRESS }); - - let error: Error | undefined; - const promise = tryRefactorStack(new CloudFormationClient({}), input, 1).catch((e) => { - error = e; - }); - // Flush all pending timers - await jest.runAllTimersAsync(); - await promise; - expect(error?.message).toContain('did not reach a completion state'); - jest.useRealTimers(); - }); - - it('throws when CreateStackRefactor returns no StackRefactorId', async () => { - cfnMock.on(CreateStackRefactorCommand).resolves({}); - - await expect(tryRefactorStack(new CloudFormationClient({}), input, 1)).rejects.toThrow('no StackRefactorId'); - }); -}); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-stack-updater.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-stack-updater.test.ts deleted file mode 100644 index 80a34cf0dee..00000000000 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-stack-updater.test.ts +++ /dev/null @@ -1,145 +0,0 @@ -import { tryUpdateStack, pollStackForCompletionState } from '../../../../commands/gen2-migration/refactor/cfn-stack-updater'; -import { mockClient } from 'aws-sdk-client-mock'; -import { CloudFormationClient, UpdateStackCommand, DescribeStacksCommand } from '@aws-sdk/client-cloudformation'; -import { CFNTemplate } from '../../../../commands/gen2-migration/cfn-template'; - -jest.mock('../../../../commands/gen2-migration/refactor/snap', () => ({ - preUpdateStack: jest.fn(), -})); - -const template: CFNTemplate = { - AWSTemplateFormatVersion: '2010-09-09', - Description: 'test', - Resources: { Bucket: { Type: 'AWS::S3::Bucket', Properties: {} } }, - Outputs: {}, -}; - -describe('tryUpdateStack', () => { - let cfnMock: ReturnType; - beforeEach(() => { - cfnMock = mockClient(CloudFormationClient); - }); - afterEach(() => cfnMock.restore()); - - it('updates stack and returns completion status', async () => { - cfnMock.on(UpdateStackCommand).resolves({}); - cfnMock.on(DescribeStacksCommand).resolves({ - Stacks: [{ StackName: 'my-stack', StackStatus: 'UPDATE_COMPLETE', CreationTime: new Date() }], - }); - - const result = await tryUpdateStack({ - cfnClient: new CloudFormationClient({}), - stackName: 'my-stack', - parameters: [], - templateBody: template, - attempts: 1, - }); - expect(result).toBe('UPDATE_COMPLETE'); - }); - - it('returns UPDATE_COMPLETE without polling when no updates needed', async () => { - cfnMock.on(UpdateStackCommand).rejects({ message: 'No updates are to be performed' }); - - const result = await tryUpdateStack({ - cfnClient: new CloudFormationClient({}), - stackName: 'my-stack', - parameters: [], - templateBody: template, - }); - expect(result).toBe('UPDATE_COMPLETE'); - expect(cfnMock.commandCalls(DescribeStacksCommand)).toHaveLength(0); - }); - - it('rethrows non-no-update errors', async () => { - cfnMock.on(UpdateStackCommand).rejects(new Error('Template format error')); - - await expect( - tryUpdateStack({ - cfnClient: new CloudFormationClient({}), - stackName: 'my-stack', - parameters: [], - templateBody: template, - }), - ).rejects.toThrow('Template format error'); - }); -}); - -describe('pollStackForCompletionState', () => { - let cfnMock: ReturnType; - beforeEach(() => { - cfnMock = mockClient(CloudFormationClient); - }); - afterEach(() => cfnMock.restore()); - - it('returns immediately when stack is already complete', async () => { - cfnMock.on(DescribeStacksCommand).resolves({ - Stacks: [{ StackName: 's', StackStatus: 'UPDATE_COMPLETE', CreationTime: new Date() }], - }); - - const result = await pollStackForCompletionState(new CloudFormationClient({}), 's', 1); - expect(result).toBe('UPDATE_COMPLETE'); - expect(cfnMock.commandCalls(DescribeStacksCommand)).toHaveLength(1); - }); - - it('polls through in-progress states until completion', async () => { - jest.useFakeTimers(); - cfnMock - .on(DescribeStacksCommand) - .resolvesOnce({ Stacks: [{ StackName: 's', StackStatus: 'UPDATE_IN_PROGRESS', CreationTime: new Date() }] }) - .resolvesOnce({ Stacks: [{ StackName: 's', StackStatus: 'UPDATE_COMPLETE', CreationTime: new Date() }] }); - - let result: string | undefined; - const promise = pollStackForCompletionState(new CloudFormationClient({}), 's', 2).then((r) => { - result = r; - }); - await jest.runAllTimersAsync(); - await promise; - - expect(result).toBe('UPDATE_COMPLETE'); - expect(cfnMock.commandCalls(DescribeStacksCommand)).toHaveLength(2); - jest.useRealTimers(); - }); - - it('returns non-UPDATE_COMPLETE completion states', async () => { - cfnMock.on(DescribeStacksCommand).resolves({ - Stacks: [{ StackName: 's', StackStatus: 'UPDATE_ROLLBACK_COMPLETE', CreationTime: new Date() }], - }); - - const result = await pollStackForCompletionState(new CloudFormationClient({}), 's', 1); - expect(result).toBe('UPDATE_ROLLBACK_COMPLETE'); - }); - - it('throws when stack not found during polling', async () => { - cfnMock.on(DescribeStacksCommand).resolves({ Stacks: [] }); - - await expect(pollStackForCompletionState(new CloudFormationClient({}), 'gone-stack', 1)).rejects.toThrow( - "Stack 'gone-stack' not found while polling", - ); - }); - - it('throws when stack has no status', async () => { - cfnMock.on(DescribeStacksCommand).resolves({ - Stacks: [{ StackName: 's', StackStatus: undefined, CreationTime: new Date() }], - }); - - await expect(pollStackForCompletionState(new CloudFormationClient({}), 's', 1)).rejects.toThrow('has no status'); - }); - - it('throws on polling timeout', async () => { - jest.useFakeTimers(); - cfnMock.on(DescribeStacksCommand).resolves({ - Stacks: [{ StackName: 's', StackStatus: 'UPDATE_IN_PROGRESS', CreationTime: new Date() }], - }); - - let error: Error | undefined; - const promise = pollStackForCompletionState(new CloudFormationClient({}), 's', 1).catch((e) => { - error = e; - }); - await jest.runAllTimersAsync(); - await promise; - - expect(error?.message).toContain('did not reach a completion state'); - expect(cfnMock.commandCalls(DescribeStacksCommand)).toHaveLength(1); - jest.useRealTimers(); - }); -}); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/legacy-custom-resource.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/legacy-custom-resource.test.ts deleted file mode 100644 index 50f82212a1a..00000000000 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/legacy-custom-resource.test.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { parseResourceMappings } from '../../../../commands/gen2-migration/refactor/legacy-custom-resource'; -import fs from 'fs-extra'; - -jest.mock('fs-extra'); -const mockFs = fs as jest.Mocked; - -describe('parseResourceMappings', () => { - afterEach(() => jest.restoreAllMocks()); - - it('parses valid resource mappings file', async () => { - const mappings = [{ Source: { StackName: 'src', LogicalResourceId: 'A' }, Destination: { StackName: 'dst', LogicalResourceId: 'B' } }]; - mockFs.pathExists.mockResolvedValue(true as never); - mockFs.readFile.mockResolvedValue(JSON.stringify(mappings) as never); - - const result = await parseResourceMappings('file:///path/to/mappings.json'); - expect(result).toEqual(mappings); - }); - - it('throws when path does not start with file://', async () => { - await expect(parseResourceMappings('/path/to/file.json')).rejects.toThrow('must start with file://'); - }); - - it('throws when path after file:// is empty', async () => { - await expect(parseResourceMappings('file://')).rejects.toThrow('Invalid resource mappings path'); - }); - - it('throws when file does not exist', async () => { - mockFs.pathExists.mockResolvedValue(false as never); - await expect(parseResourceMappings('file:///nonexistent.json')).rejects.toThrow('not found'); - }); - - it('throws when file contains invalid JSON', async () => { - mockFs.pathExists.mockResolvedValue(true as never); - mockFs.readFile.mockResolvedValue('not json' as never); - await expect(parseResourceMappings('file:///bad.json')).rejects.toThrow('Failed to parse JSON'); - }); - - it('throws when structure is invalid', async () => { - mockFs.pathExists.mockResolvedValue(true as never); - mockFs.readFile.mockResolvedValue(JSON.stringify([{ bad: 'shape' }]) as never); - await expect(parseResourceMappings('file:///invalid.json')).rejects.toThrow('Invalid resource mappings structure'); - }); -}); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts index 43bd05e63b6..fae31be1fe0 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts @@ -13,6 +13,22 @@ const TIMEOUT_MINUTES = 60; jest.setTimeout(60 * 1000 * TIMEOUT_MINUTES); +// Mock SDK waiters to resolve immediately. The underlying DescribeStacks/DescribeStackRefactor +// mocks return the correct terminal status, but the SDK waiters have a 30-second minDelay +// between polls. With multiple refactor operations per test, this adds minutes of dead time. +jest.mock('@aws-sdk/client-cloudformation', () => { + const actual = jest.requireActual('@aws-sdk/client-cloudformation'); + return { + ...actual, + waitUntilStackUpdateComplete: jest.fn().mockResolvedValue({ state: 'SUCCESS' }), + waitUntilStackCreateComplete: jest.fn().mockResolvedValue({ state: 'SUCCESS' }), + waitUntilStackDeleteComplete: jest.fn().mockResolvedValue({ state: 'SUCCESS' }), + waitUntilStackRefactorCreateComplete: jest.fn().mockResolvedValue({ state: 'SUCCESS' }), + waitUntilStackRefactorExecuteComplete: jest.fn().mockResolvedValue({ state: 'SUCCESS' }), + waitUntilChangeSetCreateComplete: jest.fn().mockResolvedValue({ state: 'SUCCESS' }), + }; +}); + // fs-extra is (for some reason) globally mocked in tests via the __mocks__ directory. // unmock it because we actually need the proper implementation. // note that this must be declared in the top level since jest will hoist it such that it diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/stack-facade.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/stack-facade.test.ts index f6c875e7655..f3993221cf4 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/stack-facade.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/stack-facade.test.ts @@ -16,31 +16,20 @@ describe('StackFacade', () => { afterEach(() => cfnMock.restore()); - it('returns cached template on second call without hitting AWS', async () => { + it('fetches and parses template from CloudFormation', async () => { cfnMock.on(GetTemplateCommand).resolves({ TemplateBody: JSON.stringify({ AWSTemplateFormatVersion: '2010-09-09', Description: 'test', Resources: {}, Outputs: {} }), }); - const first = await facade.fetchTemplate('stack-1'); - const second = await facade.fetchTemplate('stack-1'); - - expect(first).toBe(second); + const result = await facade.fetchTemplate('stack-1'); + expect(result.Description).toBe('test'); expect(cfnMock.commandCalls(GetTemplateCommand)).toHaveLength(1); }); - it('evicts cache entry on rejection and retries on next call', async () => { - cfnMock - .on(GetTemplateCommand) - .rejectsOnce(new Error('throttle')) - .resolves({ - TemplateBody: JSON.stringify({ AWSTemplateFormatVersion: '2010-09-09', Description: 'ok', Resources: {}, Outputs: {} }), - }); + it('throws when template body is empty', async () => { + cfnMock.on(GetTemplateCommand).resolves({ TemplateBody: undefined }); - await expect(facade.fetchTemplate('stack-1')).rejects.toThrow('throttle'); - - const result = await facade.fetchTemplate('stack-1'); - expect(result.Description).toBe('ok'); - expect(cfnMock.commandCalls(GetTemplateCommand)).toHaveLength(2); + await expect(facade.fetchTemplate('stack-1')).rejects.toThrow('returned an empty template'); }); it('fetchNestedStacks filters to AWS::CloudFormation::Stack resources only', async () => { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index a949306654b..180bab3c1b1 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -307,15 +307,14 @@ export abstract class CategoryRefactorer implements Planner { function addPlaceHolderIfNeeded(source: ResolvedStack, mappings: ResourceMapping[]): ResolvedStack { const movedLogicalIds = new Set(mappings.map((m) => m.Source.LogicalResourceId)); - const allLogicalIds = new Set(Object.keys(source.resolvedTemplate.Resources)); - if (movedLogicalIds.symmetricDifference(allLogicalIds).size === 0) { - const resolved = JSON.parse(JSON.stringify(source.resolvedTemplate)) as CFNTemplate; - resolved.Resources[MIGRATION_PLACEHOLDER_LOGICAL_ID] = PLACEHOLDER_RESOURCE; - return { - stackId: source.stackId, - parameters: source.parameters, - resolvedTemplate: resolved, - }; - } - return source; + const allRemoved = Object.keys(source.resolvedTemplate.Resources).every((id) => movedLogicalIds.has(id)); + if (!allRemoved) return source; + + const resolved = JSON.parse(JSON.stringify(source.resolvedTemplate)) as CFNTemplate; + resolved.Resources[MIGRATION_PLACEHOLDER_LOGICAL_ID] = PLACEHOLDER_RESOURCE; + return { + stackId: source.stackId, + parameters: source.parameters, + resolvedTemplate: resolved, + }; } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index 5f40cc7f790..ec624c3f908 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -119,6 +119,8 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { * Templates are fetched fresh at execution time. */ protected async beforeMove(blueprint: RefactorBlueprint): Promise { + if (blueprint.mappings.length === 0) return []; + const gen2StackName = extractStackNameFromId(blueprint.targetStackId); const holdingStackName = this.getHoldingStackName(gen2StackName); From ee86aa1c98c47896cd30d99b168791e9944902a6 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sun, 22 Mar 2026 23:40:49 -0400 Subject: [PATCH 35/70] docs(cli-internal): update JSDoc for refactor workflow changes Remove stale "Cached" references from StackFacade. Fix class-level JSDoc in CategoryRefactorer and RollbackCategoryRefactorer to match current method names. Add JSDoc to buildNoopOperation, buildResourceMappings, match, targetLogicalId, updateStackClaims, and createInfrastructure. --- Prompt: compare our code against the gen2-migration branch and make all necessary JSDoc changes. --- .../src/commands/gen2-migration/_operation.ts | 3 +++ .../src/commands/gen2-migration/refactor/cfn.ts | 4 ++++ .../commands/gen2-migration/refactor/refactor.ts | 3 +++ .../gen2-migration/refactor/stack-facade.ts | 13 ++++++------- .../refactor/workflow/category-refactorer.ts | 13 ++++++------- .../workflow/forward-category-refactorer.ts | 8 ++++++++ .../workflow/rollback-category-refactorer.ts | 13 +++++++++---- 7 files changed, 39 insertions(+), 18 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/_operation.ts b/packages/amplify-cli/src/commands/gen2-migration/_operation.ts index d01db4cbbd8..679a6d0d9e2 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/_operation.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/_operation.ts @@ -2,6 +2,9 @@ import { DiscoveredResource } from './generate/_infra/gen1-app'; export const NO_OP_MESSAGE = 'No-op\n'; +/** + * Creates a no-op operation for a resource with nothing to migrate. + */ export function buildNoopOperation(resource: DiscoveredResource): AmplifyMigrationOperation { return { resource: resource, diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts index b7767ebf8d9..8aea4a70e8a 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts @@ -49,6 +49,10 @@ const EMPTY_HOLDING_TEMPLATE: CFNTemplate = { * Wraps update, refactor, and change set APIs behind a single client instance. */ export class Cfn { + /** + * Stack IDs claimed for update at plan time. Prevents duplicate update operations + * when multiple refactorers share a stack. + */ private readonly updateStackClaims = new Set(); constructor(private readonly client: CloudFormationClient, private readonly logger: SpinningLogger) { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts index 0ec61fe48b1..e16ba074fef 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts @@ -177,6 +177,9 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { ); } + /** + * Creates shared AWS clients, stack facades, and the Cfn instance. + */ private async createInfrastructure(toStack: string): Promise<{ clients: AwsClients; accountId: string; diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts index 44f8f130258..dea2476eb3a 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/stack-facade.ts @@ -10,15 +10,14 @@ import { AwsClients } from '../aws-clients'; import { CFNTemplate } from '../cfn-template'; /** - * Lazy-loading, caching facade over a CloudFormation stack hierarchy. - * Instantiate once per root stack (Gen1 or Gen2). All reads go through here. - * Cache entries are evicted on rejection to allow retries. + * Read-only facade over a CloudFormation stack hierarchy. + * Instantiate once per root stack (Gen1 or Gen2). */ export class StackFacade { constructor(private readonly clients: AwsClients, public readonly rootStackName: string) {} /** - * Lists nested stacks under the root stack. Cached on first call. + * Lists nested stacks under the root stack. */ public async fetchNestedStacks(): Promise { const response = await this.clients.cloudFormation.send(new DescribeStackResourcesCommand({ StackName: this.rootStackName })); @@ -26,7 +25,7 @@ export class StackFacade { } /** - * Fetches and parses the CloudFormation template for a stack. Cached per stackId. + * Fetches and parses the CloudFormation template for a stack. */ public async fetchTemplate(stackId: string): Promise { const response = await this.clients.cloudFormation.send(new GetTemplateCommand({ StackName: stackId, TemplateStage: 'Original' })); @@ -37,7 +36,7 @@ export class StackFacade { } /** - * Describes a stack (parameters, outputs, status). Cached per stackId. + * Describes a stack (parameters, outputs, status). */ public async fetchStack(stackId: string): Promise { const response = await this.clients.cloudFormation.send(new DescribeStacksCommand({ StackName: stackId })); @@ -49,7 +48,7 @@ export class StackFacade { } /** - * Lists resources in a stack. Cached per stackId. + * Lists resources in a stack. */ public async fetchStackResources(stackId: string): Promise { const response = await this.clients.cloudFormation.send(new DescribeStackResourcesCommand({ StackName: stackId })); diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index 180bab3c1b1..fc3cece3765 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -47,13 +47,13 @@ export interface RefactorBlueprint { /** * Abstract base class implementing the shared refactor workflow. * - * Concrete plan() enforces a rigid phase sequence. Category-specific methods - * (fetchSourceStackId, fetchDestStackId, buildResourceMappings, resourceTypes) - * are abstract. Direction-specific methods (resolveSource, resolveTarget, - * beforeMovePlan, afterMovePlan) are abstract. + * plan() enforces a rigid phase sequence: resolve → build mappings → + * update stacks → beforeMove → move → afterMove. * - * Shared workflow methods (updateSource, updateTarget, buildBlueprint, buildMoveOperations) - * are concrete on this base class. + * Category-specific methods (fetchSourceStackId, fetchDestStackId, + * buildResourceMappings, resourceTypes) are abstract. + * Direction-specific methods (resolveSource, resolveTarget, + * beforeMove, afterMove) are abstract. */ export abstract class CategoryRefactorer implements Planner { constructor( @@ -123,7 +123,6 @@ export abstract class CategoryRefactorer implements Planner { /** * Builds the resource mappings from source to destination. - * Called internally by buildBlueprint() with already-filtered resources. */ protected abstract buildResourceMappings( sourceResources: Map, diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index ec624c3f908..e1ed920c2d0 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -18,6 +18,10 @@ import { CategoryRefactorer, RefactorBlueprint, ResolvedStack } from './category * afterMovePlan: empty (holding stack survives for rollback) */ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { + /** + * Matches source resources to target resources by type. + * Subclasses can override match() for custom disambiguation. + */ protected async buildResourceMappings( sourceResources: Map, targetResources: Map, @@ -56,6 +60,10 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { return mappings; } + /** + * Returns true if a source resource corresponds to a target resource. + * Default: matches by type. Override for disambiguation (e.g., UserPoolClient). + */ protected match(_sourceId: string, sourceResource: CFNResource, _targetId: string, targetResource: CFNResource): boolean { // default matching - assumes one resource per type in source/target return sourceResource.Type === targetResource.Type; diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index 8b3e368ea87..e89326e0cc3 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -19,12 +19,14 @@ import { * * resolveSource: Gen2 resolution — params → outputs → deps * resolveTarget: Gen1 — reads template as-is, no resolution needed - * beforeMovePlan: empty - * afterMovePlan: restores holding stack resources into Gen2, deletes holding stack - * - * Does NOT pre-update stacks (overrides updateSource/updateTarget to return []). + * beforeMove: empty + * afterMove: restores holding stack resources into Gen2 */ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { + /** + * Maps Gen2 source resources to Gen1 target logical IDs via targetLogicalId(). + * Skips resources that already exist in the target stack. + */ protected async buildResourceMappings( sourceResources: Map, targetResources: Map, @@ -50,6 +52,9 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { return mappings; } + /** + * Returns the Gen1 logical ID for a Gen2 resource. Subclasses implement per category. + */ protected abstract targetLogicalId(sourceId: string, sourceResource: CFNResource): string | undefined; /** From 5545ea46fff3c6799f30e0a4dfaf25990007bc63 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Sun, 22 Mar 2026 23:45:01 -0400 Subject: [PATCH 36/70] docs(cli-internal): fix remaining JSDoc inaccuracies Fix afterMove JSDoc to not mention holding stack deletion. Fix "resources resources" typo in UserPoolGroups rollback. --- Prompt: do another pass. --- .../refactor/auth/auth-user-pool-groups-rollback.ts | 2 +- .../gen2-migration/refactor/workflow/category-refactorer.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-rollback.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-rollback.ts index 3499b546c54..ad8a08bfe36 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-rollback.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-user-pool-groups-rollback.ts @@ -5,7 +5,7 @@ import { RESOURCE_TYPES, USER_POOL_GROUP_TYPE } from './auth-user-pool-groups-fo /** * Rollback refactorer for the auth:UserPoolGroups resource. * - * Moves user pool groups auth resources resources from Gen2 back to Gen1. + * Moves user pool groups auth resources from Gen2 back to Gen1. */ export class AuthUserPoolGroupsRollbackRefactorer extends RollbackCategoryRefactorer { protected resourceTypes(): string[] { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index fc3cece3765..26f39447e90 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -146,7 +146,7 @@ export abstract class CategoryRefactorer implements Planner { /** * Post-move operations. * Forward: empty. - * Rollback: restores holding stack resources into Gen2, deletes holding stack. + * Rollback: restores holding stack resources into Gen2. */ protected abstract afterMove(blueprint: RefactorBlueprint): Promise; From cec05b735ce67e03b07867f7de9cfea6458f6fbe Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Mon, 23 Mar 2026 09:22:57 -0400 Subject: [PATCH 37/70] test(cli-internal): make CloudFormation mock stateful with template map Replace invocation counter with a _templateForStack map pre-populated from snapshot files. DescribeStacks and GetTemplate now read from the map. CreateStackRefactor writes both stack templates to the map on create. UpdateStack writes the new template body to the map. DescribeStacks throws ValidationError for stacks not in the map, and returns minimal metadata for dynamically created stacks that lack snapshot files. --- Prompt: commit my changes. --- .../_framework/clients/cloudformation.ts | 81 +++++++++---------- 1 file changed, 37 insertions(+), 44 deletions(-) diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/clients/cloudformation.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/clients/cloudformation.ts index 0031ba2a989..af781ffacd7 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/clients/cloudformation.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/clients/cloudformation.ts @@ -3,6 +3,7 @@ import * as cloudformation from '@aws-sdk/client-cloudformation'; import { MigrationApp } from '../app'; import { JSONUtilities } from '@aws-amplify/amplify-cli-core'; import * as fs from 'fs-extra'; +import * as path from 'path'; /** * Mock for the AWS CloudFormation service client (`@aws-sdk/client-cloudformation`). @@ -34,11 +35,17 @@ export class CloudFormationMock { public readonly mock; private readonly _stackNameForResource: Map = new Map(); - - private readonly _describeStackCounter: Map = new Map(); + private readonly _templateForStack: Map = new Map(); constructor(private readonly app: MigrationApp) { this.mock = mockClient(cloudformation.CloudFormationClient); + + const refactorInputPath = this.app.snapshots.refactor.props.inputPath; + for (const stackFile of fs.readdirSync(refactorInputPath).filter((f) => f.endsWith('.template.json'))) { + const stackName = stackFile.replace('.template.json', ''); + this._templateForStack.set(stackName, fs.readFileSync(path.join(refactorInputPath, stackFile), { encoding: 'utf-8' })); + } + this.mockDescribeStackResources(); this.mockDescribeStacks(); this.mockGetTemplate(); @@ -46,6 +53,7 @@ export class CloudFormationMock { this.mockDescribeStackRefactor(); this.mockCreateChangeSet(); this.mockDescribeChangeSet(); + this.mockUpdateStack(); } public stackNameForResource(physicalId: string) { @@ -101,41 +109,26 @@ export class CloudFormationMock { this.mock .on(cloudformation.DescribeStacksCommand) .callsFake(async (input: cloudformation.DescribeStacksInput): Promise => { - const invocationCount = this._describeStackCounter.get(input.StackName!) ?? 0; - this._describeStackCounter.set(input.StackName!, invocationCount + 1); - if (input.StackName!.endsWith('-holding')) { - if (invocationCount === 0) { - // first call: findStack check before refactor — stack doesn't exist yet - throw new cloudformation.CloudFormationServiceException({ - name: 'ValidationError', - message: `stack ${input.StackName} does not exist`, - $fault: 'client', - $metadata: {}, - }); - } - // subsequent calls: after refactor creates the stack, waiters poll for completion - return { - Stacks: [ - { - StackName: input.StackName, - StackStatus: cloudformation.StackStatus.CREATE_COMPLETE, - CreationTime: new Date(), - }, - ], - }; + const template = this._templateForStack.get(input.StackName!); + if (!template) { + throw new cloudformation.CloudFormationServiceException({ + name: 'ValidationError', + message: `stack ${input.StackName} does not exist`, + $fault: 'client', + $metadata: {}, + }); } - const parameters = this.app.cfnParametersForStack(input.StackName!); - const outputs = this.app.cfnOutputsForStack(input.StackName!); - const description = this.app.cfnDescriptionForStack(input.StackName!); + + const preExistingStack = fs.existsSync(this.app.templatePathForStack(input.StackName!)); return { Stacks: [ { StackName: input.StackName!, - Parameters: parameters, CreationTime: new Date(), StackStatus: cloudformation.StackStatus.UPDATE_COMPLETE, - Description: description, - Outputs: outputs, + Parameters: preExistingStack ? this.app.cfnParametersForStack(input.StackName!) : undefined, + Description: preExistingStack ? this.app.cfnDescriptionForStack(input.StackName!) : undefined, + Outputs: preExistingStack ? this.app.cfnOutputsForStack(input.StackName!) : undefined, }, ], }; @@ -146,21 +139,8 @@ export class CloudFormationMock { this.mock .on(cloudformation.GetTemplateCommand) .callsFake(async (input: cloudformation.GetTemplateCommandInput): Promise => { - const templatePath = this.app.templatePathForStack(input.StackName!); - // Holding stacks are created dynamically during refactor and have no snapshot file. - // Return an empty template so Cfn.refactor() can populate it with moved resources. - if (!fs.existsSync(templatePath)) { - return { - TemplateBody: JSON.stringify({ - AWSTemplateFormatVersion: '2010-09-09', - Resources: {}, - Outputs: {}, - }), - $metadata: {}, - }; - } return { - TemplateBody: fs.readFileSync(templatePath, { encoding: 'utf-8' }), + TemplateBody: this._templateForStack.get(input.StackName!), $metadata: {}, }; }); @@ -170,6 +150,10 @@ export class CloudFormationMock { this.mock.on(cloudformation.CreateStackRefactorCommand).callsFake( // eslint-disable-next-line @typescript-eslint/no-unused-vars async (input: cloudformation.CreateStackRefactorCommandInput): Promise => { + const source = input.StackDefinitions![0]; + const target = input.StackDefinitions![1]; + this._templateForStack.set(source.StackName!, source.TemplateBody!); + this._templateForStack.set(target.StackName!, target.TemplateBody!); return { StackRefactorId: `${Date.now()}`, $metadata: {} }; }, ); @@ -201,4 +185,13 @@ export class CloudFormationMock { }, ); } + + private mockUpdateStack() { + this.mock + .on(cloudformation.UpdateStackCommand) + .callsFake(async (input: cloudformation.UpdateStackCommandInput): Promise => { + this._templateForStack.set(input.StackName!, input.TemplateBody!); + return { StackId: input.StackName, $metadata: {} }; + }); + } } From 50ef166fd6dadf2a29b6f96ae06b4e442bd927be Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Mon, 23 Mar 2026 09:58:40 -0400 Subject: [PATCH 38/70] test(cli-internal): reorganize refactor tests to mirror source structure Move test files into subdirectories matching the source layout: resolvers/, auth/, workflow/. Merge auth-forward-mapping tests into auth/auth-cognito-forward.test.ts. Merge build-refactor-templates tests into workflow/category-refactorer.test.ts. Split default-resource-mappings tests into the forward and rollback workflow test files. Delete flat test files that were replaced. Update all import paths for the new directory depth. --- Prompt: reorganize refactor tests to mirror source structure. --- ...-SEM95NL3BKFT-holding.source.template.json | 28 +- ...-SEM95NL3BKFT-holding.target.template.json | 191 ++++-- ...1BTE7UH0TFE2I-holding.source.template.json | 159 +---- ...1BTE7UH0TFE2I-holding.target.template.json | 351 +++++++++++ ...179371D7-SEM95NL3BKFT.source.template.json | 78 +-- ...179371D7-SEM95NL3BKFT.target.template.json | 343 ++++------- ...EC3F24A-1BTE7UH0TFE2I.source.template.json | 177 ++---- ...EC3F24A-1BTE7UH0TFE2I.target.template.json | 301 +++------ ...-DAPL7YOMHRB4-holding.source.template.json | 28 +- ...-DAPL7YOMHRB4-holding.target.template.json | 263 ++++++-- ...-QQN18S0SITDH-holding.source.template.json | 18 +- ...-QQN18S0SITDH-holding.target.template.json | 428 +++++++++++++ ...179371D7-DAPL7YOMHRB4.source.template.json | 123 ++-- ...179371D7-DAPL7YOMHRB4.target.template.json | 377 +++++------- ...0EC3F24A-QQN18S0SITDH.source.template.json | 49 +- ...0EC3F24A-QQN18S0SITDH.target.template.json | 64 +- ...11L4X799ZG2NW-holding.source.template.json | 32 +- ...11L4X799ZG2NW-holding.target.template.json | 576 ++++++++++++++++++ ...D7-UGINV3RD10-holding.source.template.json | 28 +- ...D7-UGINV3RD10-holding.target.template.json | 344 +++++++++-- ...11PWXC3G56PPP-holding.source.template.json | 159 +---- ...11PWXC3G56PPP-holding.target.template.json | 504 +++++++++++++++ ...794DE4A-11L4X799ZG2NW.source.template.json | 49 +- ...794DE4A-11L4X799ZG2NW.target.template.json | 68 +-- ...th179371D7-UGINV3RD10.source.template.json | 78 +-- ...th179371D7-UGINV3RD10.target.template.json | 343 ++++------- ...EC3F24A-11PWXC3G56PPP.source.template.json | 177 ++---- ...EC3F24A-11PWXC3G56PPP.target.template.json | 301 +++------ ...1RF1TAQPAA1WW-holding.source.template.json | 32 +- ...1RF1TAQPAA1WW-holding.target.template.json | 47 +- ...13PB5LDXDDFTY-holding.source.template.json | 185 +----- ...13PB5LDXDDFTY-holding.target.template.json | 207 +++++++ ...79371D7-1RF1TAQPAA1WW.source.template.json | 78 +-- ...79371D7-1RF1TAQPAA1WW.target.template.json | 347 ++++------- ...EC3F24A-13PB5LDXDDFTY.source.template.json | 239 ++------ ...EC3F24A-13PB5LDXDDFTY.target.template.json | 358 ++++------- ...-CFDKYQIOG2UJ-holding.source.template.json | 28 +- ...-CFDKYQIOG2UJ-holding.target.template.json | 119 ++-- ...-MCTM3Q2BCVCJ-holding.source.template.json | 159 +---- ...-MCTM3Q2BCVCJ-holding.target.template.json | 279 +++++++++ ...179371D7-CFDKYQIOG2UJ.source.template.json | 78 +-- ...179371D7-CFDKYQIOG2UJ.target.template.json | 343 ++++------- ...0EC3F24A-MCTM3Q2BCVCJ.source.template.json | 177 ++---- ...0EC3F24A-MCTM3Q2BCVCJ.target.template.json | 301 +++------ .../refactor/auth-forward-mapping.test.ts | 79 --- .../auth-cognito-forward.test.ts} | 80 ++- .../auth-cognito-rollback.test.ts} | 12 +- .../refactor/build-refactor-templates.test.ts | 26 - .../default-resource-mappings.test.ts | 136 ----- .../cfn-condition-resolver.test.ts | 4 +- .../cfn-dependency-resolver.test.ts | 4 +- .../cfn-output-resolver.test.ts | 4 +- .../cfn-parameter-resolver.test.ts | 4 +- .../{ => resolvers}/cfn-tree-walker.test.ts | 2 +- .../category-refactorer.test.ts} | 33 +- .../forward-category-refactorer.test.ts} | 81 ++- .../rollback-category-refactorer.test.ts} | 83 ++- 57 files changed, 4922 insertions(+), 4240 deletions(-) delete mode 100644 packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts rename packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/{auth-forward-plan.test.ts => auth/auth-cognito-forward.test.ts} (75%) rename packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/{auth-rollback-plan.test.ts => auth/auth-cognito-rollback.test.ts} (89%) delete mode 100644 packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/build-refactor-templates.test.ts delete mode 100644 packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts rename packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/{ => resolvers}/cfn-condition-resolver.test.ts (97%) rename packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/{ => resolvers}/cfn-dependency-resolver.test.ts (88%) rename packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/{ => resolvers}/cfn-output-resolver.test.ts (98%) rename packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/{ => resolvers}/cfn-parameter-resolver.test.ts (95%) rename packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/{ => resolvers}/cfn-tree-walker.test.ts (93%) rename packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/{category-plan-orchestration.test.ts => workflow/category-refactorer.test.ts} (91%) rename packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/{forward-beforemove.test.ts => workflow/forward-category-refactorer.test.ts} (65%) rename packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/{rollback-aftermove.test.ts => workflow/rollback-category-refactorer.test.ts} (58%) diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.source.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.source.template.json index db80849fda7..d4c0a8b779b 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.source.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.source.template.json @@ -10,9 +10,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:33a8fea2-6293-4bec-8726-31e6b5817de5" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -62,9 +60,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:33a8fea2-6293-4bec-8726-31e6b5817de5" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -384,29 +380,19 @@ }, "Outputs": { "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthUserPoolACA7606BRef": { - "Value": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "Value": "us-east-1_W9u2NBSRe" }, "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthUserPoolAppClientF2CDC3A8Ref": { - "Value": { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - } + "Value": "55m5602upkjiv7819hcf2ht5v3" }, "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthIdentityPool91CBC3ADRef": { - "Value": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "Value": "us-east-1:33a8fea2-6293-4bec-8726-31e6b5817de5" }, "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthauthenticatedUserRole5699D34FRef": { - "Value": { - "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" - } + "Value": "amplify-backendonly-ge-amplifyAuthauthenticatedU-NrnOsacJVeCr" }, "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthunauthenticatedUserRole02B14E66Ref": { - "Value": { - "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" - } + "Value": "amplify-backendonly-ge-amplifyAuthunauthenticate-mFzNB8V2DE4J" } } } \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json index 29fda378b1a..e10bab8c187 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json @@ -1,5 +1,6 @@ { "AWSTemplateFormatVersion": "2010-09-09", + "Description": "Temporary holding stack for Gen2 migration", "Resources": { "amplifyAuthUserPool4BA7F805": { "Type": "AWS::Cognito::UserPool", @@ -96,9 +97,7 @@ "SupportedIdentityProviders": [ "COGNITO" ], - "UserPoolId": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "UserPoolId": "us-east-1_W9u2NBSRe" }, "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPoolAppClient/Resource" @@ -119,9 +118,7 @@ "TokenValidityUnits": { "RefreshToken": "minutes" }, - "UserPoolId": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "UserPoolId": "us-east-1_W9u2NBSRe" }, "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPool/NativeAppClient/Resource" @@ -133,9 +130,7 @@ "AllowUnauthenticatedIdentities": true, "CognitoIdentityProviders": [ { - "ClientId": { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - }, + "ClientId": "55m5602upkjiv7819hcf2ht5v3", "ProviderName": { "Fn::Join": [ "", @@ -145,9 +140,7 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "us-east-1_W9u2NBSRe" ] ] } @@ -184,9 +177,7 @@ "amplifyAuthIdentityPoolRoleAttachment045F17C8": { "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "IdentityPoolId": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - }, + "IdentityPoolId": "us-east-1:33a8fea2-6293-4bec-8726-31e6b5817de5", "RoleMappings": { "UserPoolWebClientRoleMapping": { "AmbiguousRoleResolution": "AuthenticatedRole", @@ -199,13 +190,9 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - { - "Ref": "amplifyAuthUserPool4BA7F805" - }, + "us-east-1_W9u2NBSRe", ":", - { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - } + "55m5602upkjiv7819hcf2ht5v3" ] ] }, @@ -213,27 +200,157 @@ } }, "Roles": { - "unauthenticated": { - "Fn::GetAtt": [ - "amplifyAuthunauthenticatedUserRole2B524D9E", - "Arn" - ] - }, - "authenticated": { - "Fn::GetAtt": [ - "amplifyAuthauthenticatedUserRoleD8DA3689", - "Arn" - ] - } + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-ge-amplifyAuthunauthenticate-mFzNB8V2DE4J", + "authenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-ge-amplifyAuthauthenticatedU-NrnOsacJVeCr" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/IdentityPoolRoleAttachment" } + }, + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "productcatalog" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" + } + }, + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "projectboards" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main/Bucket/Resource" + } } }, "Outputs": {} diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.source.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.source.template.json index 16a16be4e9f..dfdd342e50f 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.source.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.source.template.json @@ -4,9 +4,7 @@ "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketPolicy14D90AB6": { "Type": "AWS::S3::BucketPolicy", "Properties": { - "Bucket": { - "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" - }, + "Bucket": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "PolicyDocument": { "Statement": [ { @@ -21,22 +19,12 @@ "AWS": "*" }, "Resource": [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", { "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/*" ] ] @@ -52,30 +40,15 @@ ], "Effect": "Allow", "Principal": { - "AWS": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "Arn" - ] - } + "AWS": "arn:aws:iam::123456789012:role/amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" }, "Resource": [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", { "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/*" ] ] @@ -93,19 +66,9 @@ "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketAutoDeleteObjectsCustomResource31970782": { "Type": "Custom::S3AutoDeleteObjects", "Properties": { - "ServiceToken": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "Arn" - ] - }, - "BucketName": { - "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" - } + "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "BucketName": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" }, - "DependsOn": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketPolicy14D90AB6" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -149,29 +112,19 @@ "Timeout": 900, "MemorySize": 128, "Handler": "index.handler", - "Role": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "Arn" - ] - }, + "Role": "arn:aws:iam::123456789012:role/amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "Runtime": "nodejs22.x", "Description": { "Fn::Join": [ "", [ "Lambda function for auto-deleting objects in ", - { - "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" - }, + "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", " S3 bucket." ] ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", @@ -189,9 +142,7 @@ "created-by": "amplify" }, "Type": "String", - "Value": { - "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" - } + "Value": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" }, "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/BACKENDONLYCB_1_A_13_AB_81664_ECAA_7_D_015068_AB_2_D_0165_E_0_FA_GEN_2_MAIN_BUCKET_NAMEParameter/Resource" @@ -209,12 +160,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/public/*" ] ] @@ -231,12 +177,7 @@ } }, "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - } + "Resource": "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" } ], "Version": "2012-10-17" @@ -265,12 +206,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/public/*" ] ] @@ -279,12 +215,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/protected/*" ] ] @@ -293,12 +224,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/private/*" ] ] @@ -313,12 +239,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/public/*" ] ] @@ -327,12 +248,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/protected/*" ] ] @@ -341,12 +257,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/private/*" ] ] @@ -368,12 +279,7 @@ } }, "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - } + "Resource": "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" }, { "Action": "s3:DeleteObject", @@ -383,12 +289,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/public/*" ] ] @@ -397,12 +298,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/protected/*" ] ] @@ -411,12 +307,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/private/*" ] ] @@ -724,9 +615,7 @@ }, "Outputs": { "amplifybackendonlygen2mainbranch8e0f260810storagebackendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket8CDA8E49Ref": { - "Value": { - "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" - } + "Value": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" } } } \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.target.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.target.template.json index 1ca97bc8112..7555863aae2 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.target.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.target.template.json @@ -1,6 +1,357 @@ { "AWSTemplateFormatVersion": "2010-09-09", + "Description": "Temporary holding stack for Gen2 migration", "Resources": { + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AccountRecoverySetting": { + "RecoveryMechanisms": [ + { + "Name": "verified_email", + "Priority": 1 + } + ] + }, + "AdminCreateUserConfig": { + "AllowAdminCreateUserOnly": false + }, + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Your verification code is {####}", + "EmailVerificationSubject": "Your verification code", + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": 8, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false, + "TemporaryPasswordValidityDays": 7 + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "SmsVerificationMessage": "The verification code to your new account is {####}", + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolTags": { + "amplify:app-id": "backendonly", + "amplify:branch-name": "gen2-main", + "amplify:deployment-type": "branch", + "amplify:friendly-name": "amplifyAuth", + "created-by": "amplify" + }, + "UsernameAttributes": [ + "email" + ], + "UsernameConfiguration": { + "CaseSensitive": false + }, + "VerificationMessageTemplate": { + "DefaultEmailOption": "CONFIRM_WITH_CODE", + "EmailMessage": "Your verification code is {####}", + "EmailSubject": "Your verification code", + "SmsMessage": "The verification code to your new account is {####}" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPool/Resource" + } + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlows": [ + "code" + ], + "AllowedOAuthFlowsUserPoolClient": true, + "AllowedOAuthScopes": [ + "profile", + "phone", + "email", + "openid", + "aws.cognito.signin.user.admin" + ], + "CallbackURLs": [ + "https://example.com" + ], + "ExplicitAuthFlows": [ + "ALLOW_CUSTOM_AUTH", + "ALLOW_USER_SRP_AUTH", + "ALLOW_REFRESH_TOKEN_AUTH" + ], + "PreventUserExistenceErrors": "ENABLED", + "SupportedIdentityProviders": [ + "COGNITO" + ], + "UserPoolId": "us-east-1_W9u2NBSRe" + }, + "Metadata": { + "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPoolAppClient/Resource" + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_W9u2NBSRe" + }, + "Metadata": { + "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": true, + "CognitoIdentityProviders": [ + { + "ClientId": "55m5602upkjiv7819hcf2ht5v3", + "ProviderName": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_W9u2NBSRe" + ] + ] + } + } + ], + "IdentityPoolTags": [ + { + "Key": "amplify:app-id", + "Value": "backendonly" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ], + "SupportedLoginProviders": {} + }, + "Metadata": { + "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/IdentityPool" + } + }, + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:33a8fea2-6293-4bec-8726-31e6b5817de5", + "RoleMappings": { + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_W9u2NBSRe", + ":", + "55m5602upkjiv7819hcf2ht5v3" + ] + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-ge-amplifyAuthunauthenticate-mFzNB8V2DE4J", + "authenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-ge-amplifyAuthauthenticatedU-NrnOsacJVeCr" + } + }, + "Metadata": { + "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/IdentityPoolRoleAttachment" + } + }, + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "productcatalog" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" + } + }, + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "projectboards" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main/Bucket/Resource" + } + }, "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738": { "Type": "AWS::S3::Bucket", "Properties": { diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.source.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.source.template.json index 77c4ab35e3c..5278197515b 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.source.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.source.template.json @@ -114,9 +114,7 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - { - "Ref": "env" - }, + "main", "NONE" ] } @@ -138,36 +136,24 @@ ] }, "RoleName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "userpoolClientLambdaRole" - }, - { - "Fn::Join": [ - "", - [ - "upClientLambdaRolef8c4c57b", + "Fn::Join": [ + "", + [ + "upClientLambdaRolef8c4c57b", + { + "Fn::Select": [ + 3, { - "Fn::Select": [ - 3, - { - "Fn::Split": [ - "-", - { - "Ref": "AWS::StackName" - } - ] - } + "Fn::Split": [ + "-", + "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" ] - }, - "-", - { - "Ref": "env" } ] - ] - } + }, + "-", + "main" + ] ] } } @@ -176,49 +162,29 @@ "Outputs": { "IdentityPoolId": { "Description": "Id for the identity pool", - "Value": { - "Ref": "IdentityPool" - } + "Value": "us-east-1:3d2fd52c-2247-42b8-8773-3102fce814b8" }, "IdentityPoolName": { - "Value": { - "Fn::GetAtt": [ - "IdentityPool", - "Name" - ] - } + "Value": "backendonlyf8c4c57b_identitypool_f8c4c57b__main" }, "UserPoolId": { "Description": "Id for the user pool", - "Value": { - "Ref": "UserPool" - } + "Value": "us-east-1_1rvCNKN5B" }, "UserPoolArn": { "Description": "Arn for the user pool", - "Value": { - "Fn::GetAtt": [ - "UserPool", - "Arn" - ] - } + "Value": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_1rvCNKN5B" }, "UserPoolName": { - "Value": { - "Ref": "userPoolName" - } + "Value": "backendonlyf8c4c57b_userpool_f8c4c57b" }, "AppClientIDWeb": { "Description": "The user pool app client id for web", - "Value": { - "Ref": "UserPoolClientWeb" - } + "Value": "2udsup370on7n0b1gdf8hpijc6" }, "AppClientID": { "Description": "The user pool app client id", - "Value": { - "Ref": "UserPoolClient" - } + "Value": "773c808k3864f2k0sqk4j71gsj" } } } \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.target.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.target.template.json index 571da77b726..178ab4671af 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.target.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.target.template.json @@ -1,176 +1,6 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.11.1\",\"stackType\":\"auth-Cognito\",\"metadata\":{}}", "Resources": { - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", - "Properties": { - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": { - "Ref": "emailVerificationMessage" - }, - "EmailVerificationSubject": { - "Ref": "emailVerificationSubject" - }, - "MfaConfiguration": { - "Ref": "mfaConfiguration" - }, - "Policies": { - "PasswordPolicy": { - "MinimumLength": { - "Ref": "passwordPolicyMinLength" - }, - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false - } - }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true - } - ], - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "userPoolName" - }, - { - "Fn::Join": [ - "", - [ - { - "Ref": "userPoolName" - }, - "-", - { - "Ref": "env" - } - ] - ] - } - ] - }, - "UsernameAttributes": { - "Ref": "usernameAttributes" - }, - "UsernameConfiguration": { - "CaseSensitive": false - } - } - }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "backenf8c4c57b_app_client", - "GenerateSecret": { - "Ref": "userpoolClientGenerateSecret" - }, - "RefreshTokenValidity": { - "Ref": "userpoolClientRefreshTokenValidity" - }, - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": { - "Ref": "UserPool" - } - }, - "DependsOn": [ - "UserPool" - ] - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "backenf8c4c57b_app_clientWeb", - "RefreshTokenValidity": { - "Ref": "userpoolClientRefreshTokenValidity" - }, - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": { - "Ref": "UserPool" - } - }, - "DependsOn": [ - "UserPool" - ] - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": { - "Ref": "allowUnauthenticatedIdentities" - }, - "CognitoIdentityProviders": [ - { - "ClientId": { - "Ref": "UserPoolClient" - }, - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": { - "Ref": "UserPool" - } - } - ] - } - }, - { - "ClientId": { - "Ref": "UserPoolClientWeb" - }, - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": { - "Ref": "UserPool" - } - } - ] - } - } - ], - "IdentityPoolName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - "backendonlyf8c4c57b_identitypool_f8c4c57b", - { - "Fn::Join": [ - "", - [ - "backendonlyf8c4c57b_identitypool_f8c4c57b__", - { - "Ref": "env" - } - ] - ] - } - ] - } - } - }, "amplifyAuthauthenticatedUserRoleD8DA3689": { "Type": "AWS::IAM::Role", "Properties": { @@ -180,9 +10,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:33a8fea2-6293-4bec-8726-31e6b5817de5" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -232,9 +60,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:33a8fea2-6293-4bec-8726-31e6b5817de5" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -275,25 +101,6 @@ "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/unauthenticatedUserRole/Resource" } }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": { - "Ref": "IdentityPool" - }, - "Roles": { - "unauthenticated": { - "Ref": "unauthRoleArn" - }, - "authenticated": { - "Ref": "authRoleArn" - } - } - }, - "DependsOn": [ - "IdentityPool" - ] - }, "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { @@ -303,6 +110,132 @@ "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" + }, + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Your verification code is {####}", + "EmailVerificationSubject": "Your verification code", + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": "8", + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::Join": [ + "", + [ + "backendonlyf8c4c57b_userpool_f8c4c57b", + "-", + "main" + ] + ] + }, + "UsernameAttributes": [ + "email" + ], + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "backenf8c4c57b_app_clientWeb", + "RefreshTokenValidity": "30", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_1rvCNKN5B" + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "backenf8c4c57b_app_client", + "GenerateSecret": "false", + "RefreshTokenValidity": "30", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_1rvCNKN5B" + } + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": "true", + "CognitoIdentityProviders": [ + { + "ClientId": "773c808k3864f2k0sqk4j71gsj", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_1rvCNKN5B" + } + ] + } + }, + { + "ClientId": "2udsup370on7n0b1gdf8hpijc6", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_1rvCNKN5B" + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::Join": [ + "", + [ + "backendonlyf8c4c57b_identitypool_f8c4c57b__", + "main" + ] + ] + } + } + }, + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:3d2fd52c-2247-42b8-8773-3102fce814b8", + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-main-5e0fa-unauthRole", + "authenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-main-5e0fa-authRole" + } + } } }, "Conditions": { @@ -573,29 +506,19 @@ }, "Outputs": { "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthUserPoolACA7606BRef": { - "Value": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "Value": "us-east-1_W9u2NBSRe" }, "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthUserPoolAppClientF2CDC3A8Ref": { - "Value": { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - } + "Value": "55m5602upkjiv7819hcf2ht5v3" }, "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthIdentityPool91CBC3ADRef": { - "Value": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "Value": "us-east-1:33a8fea2-6293-4bec-8726-31e6b5817de5" }, "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthauthenticatedUserRole5699D34FRef": { - "Value": { - "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" - } + "Value": "amplify-backendonly-ge-amplifyAuthauthenticatedU-NrnOsacJVeCr" }, "amplifybackendonlygen2mainbranch8e0f260810authamplifyAuthunauthenticatedUserRole02B14E66Ref": { - "Value": { - "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" - } + "Value": "amplify-backendonly-ge-amplifyAuthunauthenticate-mFzNB8V2DE4J" } } } \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.source.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.source.template.json index 2a102385b61..c3476642330 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.source.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.source.template.json @@ -84,9 +84,7 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - { - "Ref": "env" - }, + "main", "NONE" ] }, @@ -94,9 +92,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsAuthenticatedPublic" - }, + "s3:PutObject,s3:GetObject,s3:DeleteObject", "DISALLOW" ] } @@ -106,9 +102,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsAuthenticatedProtected" - }, + "s3:PutObject,s3:GetObject,s3:DeleteObject", "DISALLOW" ] } @@ -118,9 +112,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsAuthenticatedPrivate" - }, + "s3:PutObject,s3:GetObject,s3:DeleteObject", "DISALLOW" ] } @@ -130,9 +122,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsAuthenticatedUploads" - }, + "s3:PutObject", "DISALLOW" ] } @@ -142,9 +132,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsGuestPublic" - }, + "s3:GetObject", "DISALLOW" ] } @@ -154,9 +142,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsGuestUploads" - }, + "DISALLOW", "DISALLOW" ] } @@ -166,9 +152,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "AuthenticatedAllowList" - }, + "ALLOW", "DISALLOW" ] } @@ -178,9 +162,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "GuestAllowList" - }, + "ALLOW", "DISALLOW" ] } @@ -190,14 +172,10 @@ "Outputs": { "BucketName": { "Description": "Bucket name for the S3 bucket", - "Value": { - "Ref": "S3Bucket" - } + "Value": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main" }, "Region": { - "Value": { - "Ref": "AWS::Region" - } + "Value": "us-east-1" } }, "Resources": { @@ -212,9 +190,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsAuthenticatedPublic" - } + "s3:PutObject,s3:GetObject,s3:DeleteObject" ] }, "Resource": [ @@ -223,9 +199,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main", "/public/*" ] ] @@ -234,18 +208,11 @@ } ] }, - "PolicyName": { - "Ref": "s3PublicPolicy" - }, + "PolicyName": "Public_policy_c31471c3", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -259,9 +226,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsAuthenticatedProtected" - } + "s3:PutObject,s3:GetObject,s3:DeleteObject" ] }, "Resource": [ @@ -270,9 +235,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main", "/protected/${cognito-identity.amazonaws.com:sub}/*" ] ] @@ -281,18 +244,11 @@ } ] }, - "PolicyName": { - "Ref": "s3ProtectedPolicy" - }, + "PolicyName": "Protected_policy_c31471c3", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -306,9 +262,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsAuthenticatedPrivate" - } + "s3:PutObject,s3:GetObject,s3:DeleteObject" ] }, "Resource": [ @@ -317,9 +271,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main", "/private/${cognito-identity.amazonaws.com:sub}/*" ] ] @@ -328,18 +280,11 @@ } ] }, - "PolicyName": { - "Ref": "s3PrivatePolicy" - }, + "PolicyName": "Private_policy_c31471c3", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -353,9 +298,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsAuthenticatedUploads" - } + "s3:PutObject" ] }, "Resource": [ @@ -364,9 +307,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main", "/uploads/*" ] ] @@ -375,18 +316,11 @@ } ] }, - "PolicyName": { - "Ref": "s3UploadsPolicy" - }, + "PolicyName": "Uploads_policy_c31471c3", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -400,9 +334,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsGuestPublic" - } + "s3:GetObject" ] }, "Resource": [ @@ -411,9 +343,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main", "/public/*" ] ] @@ -422,18 +352,11 @@ } ] }, - "PolicyName": { - "Ref": "s3PublicPolicy" - }, + "PolicyName": "Public_policy_c31471c3", "Roles": [ - { - "Ref": "unauthRoleName" - } + "amplify-backendonly-main-5e0fa-unauthRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -449,9 +372,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main", "/protected/*" ] ] @@ -477,9 +398,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main" ] ] } @@ -487,18 +406,11 @@ ], "Version": "2012-10-17" }, - "PolicyName": { - "Ref": "s3ReadPolicy" - }, + "PolicyName": "read_policy_c31471c3", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -514,9 +426,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main", "/protected/*" ] ] @@ -540,9 +450,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-main" ] ] } @@ -550,18 +458,11 @@ ], "Version": "2012-10-17" }, - "PolicyName": { - "Ref": "s3ReadPolicy" - }, + "PolicyName": "read_policy_c31471c3", "Roles": [ - { - "Ref": "unauthRoleName" - } + "amplify-backendonly-main-5e0fa-unauthRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.target.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.target.template.json index ec4746eb723..2c4aa9226e0 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.target.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.target.template.json @@ -1,90 +1,10 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.4.3\",\"stackType\":\"storage-S3\",\"metadata\":{}}", "Resources": { - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "bucketName" - }, - { - "Fn::Join": [ - "", - [ - { - "Ref": "bucketName" - }, - { - "Fn::Select": [ - 3, - { - "Fn::Split": [ - "-", - { - "Ref": "AWS::StackName" - } - ] - } - ] - }, - "-", - { - "Ref": "env" - } - ] - ] - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "Id": "S3CORSRuleId1", - "MaxAge": 3000 - } - ] - }, - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - } - }, - "UpdateReplacePolicy": "Retain", - "DeletionPolicy": "Retain" - }, "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketPolicy14D90AB6": { "Type": "AWS::S3::BucketPolicy", "Properties": { - "Bucket": { - "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" - }, + "Bucket": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "PolicyDocument": { "Statement": [ { @@ -99,22 +19,12 @@ "AWS": "*" }, "Resource": [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", { "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/*" ] ] @@ -130,30 +40,15 @@ ], "Effect": "Allow", "Principal": { - "AWS": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "Arn" - ] - } + "AWS": "arn:aws:iam::123456789012:role/amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" }, "Resource": [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", { "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/*" ] ] @@ -171,19 +66,9 @@ "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketAutoDeleteObjectsCustomResource31970782": { "Type": "Custom::S3AutoDeleteObjects", "Properties": { - "ServiceToken": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "Arn" - ] - }, - "BucketName": { - "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" - } + "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "BucketName": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" }, - "DependsOn": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketPolicy14D90AB6" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -227,29 +112,19 @@ "Timeout": 900, "MemorySize": 128, "Handler": "index.handler", - "Role": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "Arn" - ] - }, + "Role": "arn:aws:iam::123456789012:role/amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "Runtime": "nodejs22.x", "Description": { "Fn::Join": [ "", [ "Lambda function for auto-deleting objects in ", - { - "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" - }, + "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", " S3 bucket." ] ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", @@ -267,9 +142,7 @@ "created-by": "amplify" }, "Type": "String", - "Value": { - "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" - } + "Value": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" }, "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/BACKENDONLYCB_1_A_13_AB_81664_ECAA_7_D_015068_AB_2_D_0165_E_0_FA_GEN_2_MAIN_BUCKET_NAMEParameter/Resource" @@ -287,12 +160,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/public/*" ] ] @@ -309,12 +177,7 @@ } }, "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - } + "Resource": "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" } ], "Version": "2012-10-17" @@ -343,12 +206,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/public/*" ] ] @@ -357,12 +215,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/protected/*" ] ] @@ -371,12 +224,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/private/*" ] ] @@ -391,12 +239,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/public/*" ] ] @@ -405,12 +248,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/protected/*" ] ] @@ -419,12 +257,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/private/*" ] ] @@ -446,12 +279,7 @@ } }, "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - } + "Resource": "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" }, { "Action": "s3:DeleteObject", @@ -461,12 +289,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/public/*" ] ] @@ -475,12 +298,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/protected/*" ] ] @@ -489,12 +307,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "Arn" - ] - }, + "arn:aws:s3:::amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc", "/private/*" ] ] @@ -524,6 +337,70 @@ "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" + }, + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketName": { + "Fn::Join": [ + "", + [ + "backendonlycb1a13ab81664ecaa7d015068ab2d016", + { + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + "amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR" + ] + } + ] + }, + "-", + "main" + ] + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "Id": "S3CORSRuleId1", + "MaxAge": 3000 + } + ] + }, + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + } + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" } }, "Conditions": { @@ -802,9 +679,7 @@ }, "Outputs": { "amplifybackendonlygen2mainbranch8e0f260810storagebackendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket8CDA8E49Ref": { - "Value": { - "Ref": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" - } + "Value": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" } } } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.source.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.source.template.json index ab4940ac52f..847baa10ccd 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.source.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.source.template.json @@ -10,9 +10,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:84e99afb-f5e8-4fa4-bc21-875242ea6689" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -62,9 +60,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:84e99afb-f5e8-4fa4-bc21-875242ea6689" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -384,29 +380,19 @@ }, "Outputs": { "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthUserPool9D23206ERef": { - "Value": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "Value": "us-east-1_olNpwuJIL" }, "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthUserPoolAppClientCD70FA03Ref": { - "Value": { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - } + "Value": "6bdqt8vavvh3efopgb031lc3jg" }, "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthIdentityPoolA0C42AE7Ref": { - "Value": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "Value": "us-east-1:84e99afb-f5e8-4fa4-bc21-875242ea6689" }, "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthauthenticatedUserRole95356EEFRef": { - "Value": { - "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" - } + "Value": "amplify-discussions-gen-amplifyAuthauthenticatedU-cOJdlmnFCZS8" }, "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthunauthenticatedUserRoleE19AFD6CRef": { - "Value": { - "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" - } + "Value": "amplify-discussions-gen-amplifyAuthunauthenticate-LUKlk2oThU8X" } } } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json index 0eb97dec084..cf563147a8d 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json @@ -1,5 +1,6 @@ { "AWSTemplateFormatVersion": "2010-09-09", + "Description": "Temporary holding stack for Gen2 migration", "Resources": { "amplifyAuthUserPool4BA7F805": { "Type": "AWS::Cognito::UserPool", @@ -101,9 +102,7 @@ "SupportedIdentityProviders": [ "COGNITO" ], - "UserPoolId": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "UserPoolId": "us-east-1_olNpwuJIL" }, "Metadata": { "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPoolAppClient/Resource" @@ -124,9 +123,7 @@ "TokenValidityUnits": { "RefreshToken": "minutes" }, - "UserPoolId": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "UserPoolId": "us-east-1_olNpwuJIL" }, "Metadata": { "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPool/NativeAppClient/Resource" @@ -138,9 +135,7 @@ "AllowUnauthenticatedIdentities": false, "CognitoIdentityProviders": [ { - "ClientId": { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - }, + "ClientId": "6bdqt8vavvh3efopgb031lc3jg", "ProviderName": { "Fn::Join": [ "", @@ -150,9 +145,7 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "us-east-1_olNpwuJIL" ] ] } @@ -189,9 +182,7 @@ "amplifyAuthIdentityPoolRoleAttachment045F17C8": { "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "IdentityPoolId": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - }, + "IdentityPoolId": "us-east-1:84e99afb-f5e8-4fa4-bc21-875242ea6689", "RoleMappings": { "UserPoolWebClientRoleMapping": { "AmbiguousRoleResolution": "AuthenticatedRole", @@ -204,13 +195,9 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - { - "Ref": "amplifyAuthUserPool4BA7F805" - }, + "us-east-1_olNpwuJIL", ":", - { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - } + "6bdqt8vavvh3efopgb031lc3jg" ] ] }, @@ -218,27 +205,229 @@ } }, "Roles": { - "unauthenticated": { - "Fn::GetAtt": [ - "amplifyAuthunauthenticatedUserRole2B524D9E", - "Arn" - ] - }, - "authenticated": { - "Fn::GetAtt": [ - "amplifyAuthauthenticatedUserRoleD8DA3689", - "Arn" - ] - } + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-discussions-gen-amplifyAuthunauthenticate-LUKlk2oThU8X", + "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-gen-amplifyAuthauthenticatedU-cOJdlmnFCZS8" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/IdentityPoolRoleAttachment" } + }, + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "productcatalog" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" + } + }, + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "projectboards" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main/Bucket/Resource" + } + }, + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "backendonly" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main/Bucket/Resource" + } } }, "Outputs": {} diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.source.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.source.template.json index b420ceb50fa..925acc7bf10 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.source.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.source.template.json @@ -280,25 +280,13 @@ }, "Outputs": { "amplifydiscussionsgen2mainbranch96dfd1dc44storageactivityEF3255CDArn": { - "Value": { - "Fn::GetAtt": [ - "activity1E902D9C", - "Arn" - ] - } + "Value": "arn:aws:dynamodb:us-east-1:123456789012:table/amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-activity1E902D9C-TT6R2GXJ05FS" }, "amplifydiscussionsgen2mainbranch96dfd1dc44storageactivityEF3255CDStreamArn": { - "Value": { - "Fn::GetAtt": [ - "activity1E902D9C", - "StreamArn" - ] - } + "Value": "arn:aws:dynamodb:us-east-1:123456789012:table/amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-activity1E902D9C-TT6R2GXJ05FS/stream/2026-03-07T18:02:23.205" }, "amplifydiscussionsgen2mainbranch96dfd1dc44storageactivityEF3255CDRef": { - "Value": { - "Ref": "activity1E902D9C" - } + "Value": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-activity1E902D9C-TT6R2GXJ05FS" } } } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.target.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.target.template.json index c827d83e268..5cba06b4afa 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.target.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.target.template.json @@ -1,6 +1,434 @@ { "AWSTemplateFormatVersion": "2010-09-09", + "Description": "Temporary holding stack for Gen2 migration", "Resources": { + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AccountRecoverySetting": { + "RecoveryMechanisms": [ + { + "Name": "verified_email", + "Priority": 1 + } + ] + }, + "AdminCreateUserConfig": { + "AllowAdminCreateUserOnly": false + }, + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Here is your verification code {####}", + "EmailVerificationSubject": "Verification", + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": 8, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false, + "TemporaryPasswordValidityDays": 7 + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + }, + { + "Mutable": true, + "Name": "phone_number", + "Required": true + } + ], + "SmsVerificationMessage": "The verification code to your new account is {####}", + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolTags": { + "amplify:app-id": "discussions", + "amplify:branch-name": "gen2-main", + "amplify:deployment-type": "branch", + "amplify:friendly-name": "amplifyAuth", + "created-by": "amplify" + }, + "UsernameAttributes": [ + "phone_number" + ], + "UsernameConfiguration": { + "CaseSensitive": false + }, + "VerificationMessageTemplate": { + "DefaultEmailOption": "CONFIRM_WITH_CODE", + "EmailMessage": "Here is your verification code {####}", + "EmailSubject": "Verification", + "SmsMessage": "The verification code to your new account is {####}" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPool/Resource" + } + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlows": [ + "code" + ], + "AllowedOAuthFlowsUserPoolClient": true, + "AllowedOAuthScopes": [ + "profile", + "phone", + "email", + "openid", + "aws.cognito.signin.user.admin" + ], + "CallbackURLs": [ + "https://example.com" + ], + "ExplicitAuthFlows": [ + "ALLOW_CUSTOM_AUTH", + "ALLOW_USER_SRP_AUTH", + "ALLOW_REFRESH_TOKEN_AUTH" + ], + "PreventUserExistenceErrors": "ENABLED", + "SupportedIdentityProviders": [ + "COGNITO" + ], + "UserPoolId": "us-east-1_olNpwuJIL" + }, + "Metadata": { + "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPoolAppClient/Resource" + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 172800, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_olNpwuJIL" + }, + "Metadata": { + "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": false, + "CognitoIdentityProviders": [ + { + "ClientId": "6bdqt8vavvh3efopgb031lc3jg", + "ProviderName": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_olNpwuJIL" + ] + ] + } + } + ], + "IdentityPoolTags": [ + { + "Key": "amplify:app-id", + "Value": "discussions" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ], + "SupportedLoginProviders": {} + }, + "Metadata": { + "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/IdentityPool" + } + }, + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:84e99afb-f5e8-4fa4-bc21-875242ea6689", + "RoleMappings": { + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_olNpwuJIL", + ":", + "6bdqt8vavvh3efopgb031lc3jg" + ] + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-discussions-gen-amplifyAuthunauthenticate-LUKlk2oThU8X", + "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-gen-amplifyAuthauthenticatedU-cOJdlmnFCZS8" + } + }, + "Metadata": { + "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/IdentityPoolRoleAttachment" + } + }, + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "productcatalog" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" + } + }, + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "projectboards" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main/Bucket/Resource" + } + }, + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "backendonly" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main/Bucket/Resource" + } + }, "activity1E902D9C": { "Type": "AWS::DynamoDB::Table", "Properties": { diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.source.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.source.template.json index ea99bcb0fee..8d216ad870f 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.source.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.source.template.json @@ -129,9 +129,7 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - { - "Ref": "env" - }, + "main", "NONE" ] } @@ -178,34 +176,24 @@ } ], "RoleName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - "discus22367c68_sns-role", - { - "Fn::Join": [ - "", - [ - "sns22367c68", + "Fn::Join": [ + "", + [ + "sns22367c68", + { + "Fn::Select": [ + 3, { - "Fn::Select": [ - 3, - { - "Fn::Split": [ - "-", - { - "Ref": "AWS::StackName" - } - ] - } + "Fn::Split": [ + "-", + "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" ] - }, - "-", - { - "Ref": "env" } ] - ] - } + }, + "-", + "main" + ] ] } } @@ -226,36 +214,24 @@ ] }, "RoleName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "userpoolClientLambdaRole" - }, - { - "Fn::Join": [ - "", - [ - "upClientLambdaRole22367c68", + "Fn::Join": [ + "", + [ + "upClientLambdaRole22367c68", + { + "Fn::Select": [ + 3, { - "Fn::Select": [ - 3, - { - "Fn::Split": [ - "-", - { - "Ref": "AWS::StackName" - } - ] - } + "Fn::Split": [ + "-", + "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" ] - }, - "-", - { - "Ref": "env" } ] - ] - } + }, + "-", + "main" + ] ] } } @@ -264,58 +240,33 @@ "Outputs": { "IdentityPoolId": { "Description": "Id for the identity pool", - "Value": { - "Ref": "IdentityPool" - } + "Value": "us-east-1:d1df5c0c-2dd2-4471-bb0b-59c99bdbfe7f" }, "IdentityPoolName": { - "Value": { - "Fn::GetAtt": [ - "IdentityPool", - "Name" - ] - } + "Value": "discussions22367c68_identitypool_22367c68__main" }, "UserPoolId": { "Description": "Id for the user pool", - "Value": { - "Ref": "UserPool" - } + "Value": "us-east-1_Zs9EZpCYX" }, "UserPoolArn": { "Description": "Arn for the user pool", - "Value": { - "Fn::GetAtt": [ - "UserPool", - "Arn" - ] - } + "Value": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_Zs9EZpCYX" }, "UserPoolName": { - "Value": { - "Ref": "userPoolName" - } + "Value": "discussions22367c68_userpool_22367c68" }, "AppClientIDWeb": { "Description": "The user pool app client id for web", - "Value": { - "Ref": "UserPoolClientWeb" - } + "Value": "ptm2eqjiee7l3e202lstfjd3r" }, "AppClientID": { "Description": "The user pool app client id", - "Value": { - "Ref": "UserPoolClient" - } + "Value": "75sq8s16g37d0as1148og20p3i" }, "CreatedSNSRole": { "Description": "role arn", - "Value": { - "Fn::GetAtt": [ - "SNSRole", - "Arn" - ] - } + "Value": "arn:aws:iam::123456789012:role/sns22367c68d5a80-main" } } } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.target.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.target.template.json index d3d5d06d016..eccbf15fe65 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.target.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.target.template.json @@ -1,199 +1,6 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.11.1\",\"stackType\":\"auth-Cognito\",\"metadata\":{}}", "Resources": { - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", - "Properties": { - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": { - "Ref": "emailVerificationMessage" - }, - "EmailVerificationSubject": { - "Ref": "emailVerificationSubject" - }, - "MfaConfiguration": { - "Ref": "mfaConfiguration" - }, - "Policies": { - "PasswordPolicy": { - "MinimumLength": { - "Ref": "passwordPolicyMinLength" - }, - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false - } - }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true - }, - { - "Mutable": true, - "Name": "phone_number", - "Required": true - } - ], - "SmsAuthenticationMessage": { - "Ref": "smsAuthenticationMessage" - }, - "SmsConfiguration": { - "ExternalId": "discus22367c68_role_external_id", - "SnsCallerArn": { - "Fn::GetAtt": [ - "SNSRole", - "Arn" - ] - } - }, - "SmsVerificationMessage": { - "Ref": "smsVerificationMessage" - }, - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "userPoolName" - }, - { - "Fn::Join": [ - "", - [ - { - "Ref": "userPoolName" - }, - "-", - { - "Ref": "env" - } - ] - ] - } - ] - }, - "UsernameAttributes": { - "Ref": "usernameAttributes" - }, - "UsernameConfiguration": { - "CaseSensitive": false - } - }, - "DependsOn": [ - "SNSRole" - ] - }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "discus22367c68_app_client", - "GenerateSecret": { - "Ref": "userpoolClientGenerateSecret" - }, - "RefreshTokenValidity": { - "Ref": "userpoolClientRefreshTokenValidity" - }, - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": { - "Ref": "UserPool" - } - }, - "DependsOn": [ - "UserPool" - ] - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "discus22367c68_app_clientWeb", - "RefreshTokenValidity": { - "Ref": "userpoolClientRefreshTokenValidity" - }, - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": { - "Ref": "UserPool" - } - }, - "DependsOn": [ - "UserPool" - ] - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": { - "Ref": "allowUnauthenticatedIdentities" - }, - "CognitoIdentityProviders": [ - { - "ClientId": { - "Ref": "UserPoolClient" - }, - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": { - "Ref": "UserPool" - } - } - ] - } - }, - { - "ClientId": { - "Ref": "UserPoolClientWeb" - }, - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": { - "Ref": "UserPool" - } - } - ] - } - } - ], - "IdentityPoolName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - "discussions22367c68_identitypool_22367c68", - { - "Fn::Join": [ - "", - [ - "discussions22367c68_identitypool_22367c68__", - { - "Ref": "env" - } - ] - ] - } - ] - } - } - }, "amplifyAuthauthenticatedUserRoleD8DA3689": { "Type": "AWS::IAM::Role", "Properties": { @@ -203,9 +10,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:84e99afb-f5e8-4fa4-bc21-875242ea6689" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -255,9 +60,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:84e99afb-f5e8-4fa4-bc21-875242ea6689" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -298,25 +101,6 @@ "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/unauthenticatedUserRole/Resource" } }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": { - "Ref": "IdentityPool" - }, - "Roles": { - "unauthenticated": { - "Ref": "unauthRoleArn" - }, - "authenticated": { - "Ref": "authRoleArn" - } - } - }, - "DependsOn": [ - "IdentityPool" - ] - }, "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { @@ -326,6 +110,143 @@ "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" + }, + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Here is your verification code {####}", + "EmailVerificationSubject": "Verification", + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": "8", + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + }, + { + "Mutable": true, + "Name": "phone_number", + "Required": true + } + ], + "SmsAuthenticationMessage": "Your authentication code is {####}", + "SmsConfiguration": { + "ExternalId": "discus22367c68_role_external_id", + "SnsCallerArn": "arn:aws:iam::123456789012:role/sns22367c68d5a80-main" + }, + "SmsVerificationMessage": "Your verification code is {####}", + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::Join": [ + "", + [ + "discussions22367c68_userpool_22367c68", + "-", + "main" + ] + ] + }, + "UsernameAttributes": [ + "phone_number" + ], + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "discus22367c68_app_clientWeb", + "RefreshTokenValidity": "120", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_Zs9EZpCYX" + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "discus22367c68_app_client", + "GenerateSecret": "false", + "RefreshTokenValidity": "120", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_Zs9EZpCYX" + } + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": "false", + "CognitoIdentityProviders": [ + { + "ClientId": "75sq8s16g37d0as1148og20p3i", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_Zs9EZpCYX" + } + ] + } + }, + { + "ClientId": "ptm2eqjiee7l3e202lstfjd3r", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_Zs9EZpCYX" + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::Join": [ + "", + [ + "discussions22367c68_identitypool_22367c68__", + "main" + ] + ] + } + } + }, + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:d1df5c0c-2dd2-4471-bb0b-59c99bdbfe7f", + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-unauthRole", + "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-authRole" + } + } } }, "Conditions": { @@ -596,29 +517,19 @@ }, "Outputs": { "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthUserPool9D23206ERef": { - "Value": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "Value": "us-east-1_olNpwuJIL" }, "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthUserPoolAppClientCD70FA03Ref": { - "Value": { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - } + "Value": "6bdqt8vavvh3efopgb031lc3jg" }, "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthIdentityPoolA0C42AE7Ref": { - "Value": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "Value": "us-east-1:84e99afb-f5e8-4fa4-bc21-875242ea6689" }, "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthauthenticatedUserRole95356EEFRef": { - "Value": { - "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" - } + "Value": "amplify-discussions-gen-amplifyAuthauthenticatedU-cOJdlmnFCZS8" }, "amplifydiscussionsgen2mainbranch96dfd1dc44authamplifyAuthunauthenticatedUserRoleE19AFD6CRef": { - "Value": { - "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" - } + "Value": "amplify-discussions-gen-amplifyAuthunauthenticate-LUKlk2oThU8X" } } } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.source.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.source.template.json index e9b1282aba4..93866f1ecab 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.source.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.source.template.json @@ -24,60 +24,41 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - { - "Ref": "env" - }, + "main", "NONE" ] } }, - "Resources": {}, + "Resources": { + "MigrationPlaceholder": { + "Type": "AWS::CloudFormation::WaitConditionHandle", + "Properties": {} + } + }, "Outputs": { "Name": { - "Value": { - "Ref": "DynamoDBTable" - } + "Value": "activity-main" }, "Arn": { - "Value": { - "Fn::GetAtt": [ - "DynamoDBTable", - "Arn" - ] - } + "Value": "arn:aws:dynamodb:us-east-1:123456789012:table/activity-main" }, "StreamArn": { - "Value": { - "Fn::GetAtt": [ - "DynamoDBTable", - "StreamArn" - ] - } + "Value": "arn:aws:dynamodb:us-east-1:123456789012:table/activity-main/stream/2026-03-07T17:11:10.591" }, "PartitionKeyName": { - "Value": { - "Ref": "partitionKeyName" - } + "Value": "id" }, "PartitionKeyType": { - "Value": { - "Ref": "partitionKeyType" - } + "Value": "S" }, "SortKeyName": { - "Value": { - "Ref": "sortKeyName" - } + "Value": "userId" }, "SortKeyType": { - "Value": { - "Ref": "sortKeyType" - } + "Value": "S" }, "Region": { - "Value": { - "Ref": "AWS::Region" - } + "Value": "us-east-1" } } } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.target.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.target.template.json index a5383227fe4..c801abd04fe 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.target.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.target.template.json @@ -1,6 +1,16 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.21.0\",\"stackType\":\"custom\",\"metadata\":{}}", "Resources": { + "CDKMetadata": { + "Type": "AWS::CDK::Metadata", + "Properties": { + "Analytics": "v2:deflate64:H4sIAAAAAAAA/yXGOwqEMBAA0LPYJ6MGi+3tLdReJplZiJ8EnERZxLsvaPWeAdPUUBV4ina06NVbuDqWxDQkdIvCUyb6BdwiWbhGtCur9hue3KpniXl3fKsQiWGW8jAG6g9UxSze6z2H5DeG/vUPUV/XUG4AAAA=" + }, + "Metadata": { + "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/storage/CDKMetadata/Default" + }, + "Condition": "CDKMetadataAvailable" + }, "activity1E902D9C": { "Type": "AWS::DynamoDB::Table", "Properties": { @@ -58,38 +68,16 @@ "StreamViewType": "NEW_IMAGE" }, "TableName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "tableName" - }, - { - "Fn::Join": [ - "", - [ - { - "Ref": "tableName" - }, - "-", - { - "Ref": "env" - } - ] - ] - } + "Fn::Join": [ + "", + [ + "activity", + "-", + "main" + ] ] } } - }, - "CDKMetadata": { - "Type": "AWS::CDK::Metadata", - "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/yXGOwqEMBAA0LPYJ6MGi+3tLdReJplZiJ8EnERZxLsvaPWeAdPUUBV4ina06NVbuDqWxDQkdIvCUyb6BdwiWbhGtCur9hue3KpniXl3fKsQiWGW8jAG6g9UxSze6z2H5DeG/vUPUV/XUG4AAAA=" - }, - "Metadata": { - "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/storage/CDKMetadata/Default" - }, - "Condition": "CDKMetadataAvailable" } }, "Conditions": { @@ -360,25 +348,13 @@ }, "Outputs": { "amplifydiscussionsgen2mainbranch96dfd1dc44storageactivityEF3255CDArn": { - "Value": { - "Fn::GetAtt": [ - "activity1E902D9C", - "Arn" - ] - } + "Value": "arn:aws:dynamodb:us-east-1:123456789012:table/amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-activity1E902D9C-TT6R2GXJ05FS" }, "amplifydiscussionsgen2mainbranch96dfd1dc44storageactivityEF3255CDStreamArn": { - "Value": { - "Fn::GetAtt": [ - "activity1E902D9C", - "StreamArn" - ] - } + "Value": "arn:aws:dynamodb:us-east-1:123456789012:table/amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-activity1E902D9C-TT6R2GXJ05FS/stream/2026-03-07T18:02:23.205" }, "amplifydiscussionsgen2mainbranch96dfd1dc44storageactivityEF3255CDRef": { - "Value": { - "Ref": "activity1E902D9C" - } + "Value": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-activity1E902D9C-TT6R2GXJ05FS" } } } \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.source.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.source.template.json index 4a4cb7d7ad0..e689d3fe4c5 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.source.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.source.template.json @@ -13,12 +13,7 @@ "kinesis:PutRecord", "kinesis:PutRecords" ], - "Resource": { - "Fn::GetAtt": [ - "moodboardKinesisKinesisStreamD5E97047", - "Arn" - ] - } + "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main" } ] }, @@ -45,12 +40,7 @@ "kinesis:PutRecord", "kinesis:PutRecords" ], - "Resource": { - "Fn::GetAtt": [ - "moodboardKinesisKinesisStreamD5E97047", - "Arn" - ] - } + "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main" } ] }, @@ -78,28 +68,16 @@ }, "Outputs": { "kinesisStreamArn": { - "Value": { - "Fn::GetAtt": [ - "moodboardKinesisKinesisStreamD5E97047", - "Arn" - ] - } + "Value": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main" }, "kinesisStreamId": { - "Value": { - "Ref": "moodboardKinesisKinesisStreamD5E97047" - } + "Value": "moodboardKinesis-gen2-main" }, "kinesisStreamShardCount": { "Value": "1" }, "amplifymoodboardgen2mainbranchf7e4caeabbanalyticsmoodboardKinesisKinesisStreamBD82380AArn": { - "Value": { - "Fn::GetAtt": [ - "moodboardKinesisKinesisStreamD5E97047", - "Arn" - ] - } + "Value": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main" } }, "Conditions": { diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.target.template.json index ddf15cda6e6..ea38364c9a5 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.target.template.json @@ -1,6 +1,582 @@ { "AWSTemplateFormatVersion": "2010-09-09", + "Description": "Temporary holding stack for Gen2 migration", "Resources": { + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AccountRecoverySetting": { + "RecoveryMechanisms": [ + { + "Name": "verified_email", + "Priority": 1 + } + ] + }, + "AdminCreateUserConfig": { + "AllowAdminCreateUserOnly": false + }, + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Your verification code is {####}", + "EmailVerificationSubject": "Your verification code", + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": 8, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false, + "TemporaryPasswordValidityDays": 7 + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "SmsVerificationMessage": "The verification code to your new account is {####}", + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolTags": { + "amplify:app-id": "moodboard", + "amplify:branch-name": "gen2-main", + "amplify:deployment-type": "branch", + "amplify:friendly-name": "amplifyAuth", + "created-by": "amplify" + }, + "UsernameAttributes": [ + "email" + ], + "UsernameConfiguration": { + "CaseSensitive": false + }, + "VerificationMessageTemplate": { + "DefaultEmailOption": "CONFIRM_WITH_CODE", + "EmailMessage": "Your verification code is {####}", + "EmailSubject": "Your verification code", + "SmsMessage": "The verification code to your new account is {####}" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/Resource" + } + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlows": [ + "code" + ], + "AllowedOAuthFlowsUserPoolClient": true, + "AllowedOAuthScopes": [ + "profile", + "phone", + "email", + "openid", + "aws.cognito.signin.user.admin" + ], + "CallbackURLs": [ + "https://example.com" + ], + "ExplicitAuthFlows": [ + "ALLOW_CUSTOM_AUTH", + "ALLOW_USER_SRP_AUTH", + "ALLOW_REFRESH_TOKEN_AUTH" + ], + "PreventUserExistenceErrors": "ENABLED", + "SupportedIdentityProviders": [ + "COGNITO" + ], + "UserPoolId": "us-east-1_1A4RMvPNr" + }, + "Metadata": { + "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPoolAppClient/Resource" + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_1A4RMvPNr" + }, + "Metadata": { + "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": true, + "CognitoIdentityProviders": [ + { + "ClientId": "2otm0qh3fj270k5tdn95cgjlm5", + "ProviderName": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_1A4RMvPNr" + ] + ] + } + } + ], + "IdentityPoolTags": [ + { + "Key": "amplify:app-id", + "Value": "moodboard" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ], + "SupportedLoginProviders": {} + }, + "Metadata": { + "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/IdentityPool" + } + }, + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb", + "RoleMappings": { + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_1A4RMvPNr", + ":", + "2otm0qh3fj270k5tdn95cgjlm5" + ] + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-ge-amplifyAuthunauthenticate-rp3r1qUbAKVV", + "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-ge-amplifyAuthauthenticatedU-UANJImTyKZ7p" + } + }, + "Metadata": { + "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/IdentityPoolRoleAttachment" + } + }, + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "productcatalog" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" + } + }, + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "projectboards" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main/Bucket/Resource" + } + }, + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "backendonly" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main/Bucket/Resource" + } + }, + "activity1E902D9C": { + "Type": "AWS::DynamoDB::Table", + "Properties": { + "AttributeDefinitions": [ + { + "AttributeName": "id", + "AttributeType": "S" + }, + { + "AttributeName": "userId", + "AttributeType": "S" + }, + { + "AttributeName": "timestamp", + "AttributeType": "S" + } + ], + "GlobalSecondaryIndexes": [ + { + "IndexName": "byUserId", + "KeySchema": [ + { + "AttributeName": "userId", + "KeyType": "HASH" + }, + { + "AttributeName": "timestamp", + "KeyType": "RANGE" + } + ], + "Projection": { + "ProjectionType": "ALL" + }, + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + } + } + ], + "KeySchema": [ + { + "AttributeName": "id", + "KeyType": "HASH" + }, + { + "AttributeName": "userId", + "KeyType": "RANGE" + } + ], + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + }, + "StreamSpecification": { + "StreamViewType": "NEW_IMAGE" + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "discussions" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain", + "Metadata": { + "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/storage/activity/Resource" + } + }, + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "moodboard" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "moodboard20e29595008142e3ad16f01c4066e1c41959a-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/storage/moodboard20e29595008142e3ad16f01c4066e1c41959a-gen2-main/Bucket/Resource" + } + }, "moodboardKinesisKinesisStreamD5E97047": { "Type": "AWS::Kinesis::Stream", "Properties": { diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.source.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.source.template.json index 67f424dedeb..ec18192c664 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.source.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.source.template.json @@ -10,9 +10,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -62,9 +60,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -384,29 +380,19 @@ }, "Outputs": { "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthUserPoolAE38F854Ref": { - "Value": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "Value": "us-east-1_1A4RMvPNr" }, "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthUserPoolAppClientA69935A4Ref": { - "Value": { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - } + "Value": "2otm0qh3fj270k5tdn95cgjlm5" }, "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthIdentityPoolA9AA7B9FRef": { - "Value": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "Value": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb" }, "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthauthenticatedUserRole0AA19633Ref": { - "Value": { - "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" - } + "Value": "amplify-moodboard-ge-amplifyAuthauthenticatedU-UANJImTyKZ7p" }, "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthunauthenticatedUserRoleBEC4D39ARef": { - "Value": { - "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" - } + "Value": "amplify-moodboard-ge-amplifyAuthunauthenticate-rp3r1qUbAKVV" } } } \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json index 7897d21f3e0..a481abd3935 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json @@ -1,5 +1,6 @@ { "AWSTemplateFormatVersion": "2010-09-09", + "Description": "Temporary holding stack for Gen2 migration", "Resources": { "amplifyAuthUserPool4BA7F805": { "Type": "AWS::Cognito::UserPool", @@ -96,9 +97,7 @@ "SupportedIdentityProviders": [ "COGNITO" ], - "UserPoolId": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "UserPoolId": "us-east-1_1A4RMvPNr" }, "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPoolAppClient/Resource" @@ -119,9 +118,7 @@ "TokenValidityUnits": { "RefreshToken": "minutes" }, - "UserPoolId": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "UserPoolId": "us-east-1_1A4RMvPNr" }, "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/NativeAppClient/Resource" @@ -133,9 +130,7 @@ "AllowUnauthenticatedIdentities": true, "CognitoIdentityProviders": [ { - "ClientId": { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - }, + "ClientId": "2otm0qh3fj270k5tdn95cgjlm5", "ProviderName": { "Fn::Join": [ "", @@ -145,9 +140,7 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "us-east-1_1A4RMvPNr" ] ] } @@ -184,9 +177,7 @@ "amplifyAuthIdentityPoolRoleAttachment045F17C8": { "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "IdentityPoolId": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - }, + "IdentityPoolId": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb", "RoleMappings": { "UserPoolWebClientRoleMapping": { "AmbiguousRoleResolution": "AuthenticatedRole", @@ -199,13 +190,9 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - { - "Ref": "amplifyAuthUserPool4BA7F805" - }, + "us-east-1_1A4RMvPNr", ":", - { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - } + "2otm0qh3fj270k5tdn95cgjlm5" ] ] }, @@ -213,27 +200,310 @@ } }, "Roles": { - "unauthenticated": { - "Fn::GetAtt": [ - "amplifyAuthunauthenticatedUserRole2B524D9E", - "Arn" - ] - }, - "authenticated": { - "Fn::GetAtt": [ - "amplifyAuthauthenticatedUserRoleD8DA3689", - "Arn" - ] - } + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-ge-amplifyAuthunauthenticate-rp3r1qUbAKVV", + "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-ge-amplifyAuthauthenticatedU-UANJImTyKZ7p" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/IdentityPoolRoleAttachment" } + }, + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "productcatalog" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" + } + }, + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "projectboards" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main/Bucket/Resource" + } + }, + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "backendonly" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main/Bucket/Resource" + } + }, + "activity1E902D9C": { + "Type": "AWS::DynamoDB::Table", + "Properties": { + "AttributeDefinitions": [ + { + "AttributeName": "id", + "AttributeType": "S" + }, + { + "AttributeName": "userId", + "AttributeType": "S" + }, + { + "AttributeName": "timestamp", + "AttributeType": "S" + } + ], + "GlobalSecondaryIndexes": [ + { + "IndexName": "byUserId", + "KeySchema": [ + { + "AttributeName": "userId", + "KeyType": "HASH" + }, + { + "AttributeName": "timestamp", + "KeyType": "RANGE" + } + ], + "Projection": { + "ProjectionType": "ALL" + }, + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + } + } + ], + "KeySchema": [ + { + "AttributeName": "id", + "KeyType": "HASH" + }, + { + "AttributeName": "userId", + "KeyType": "RANGE" + } + ], + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + }, + "StreamSpecification": { + "StreamViewType": "NEW_IMAGE" + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "discussions" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain", + "Metadata": { + "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/storage/activity/Resource" + } } }, "Outputs": {} diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.source.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.source.template.json index 55aeb882f39..3a7e2136339 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.source.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.source.template.json @@ -4,9 +4,7 @@ "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketPolicy9A17D834": { "Type": "AWS::S3::BucketPolicy", "Properties": { - "Bucket": { - "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" - }, + "Bucket": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "PolicyDocument": { "Statement": [ { @@ -21,22 +19,12 @@ "AWS": "*" }, "Resource": [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", { "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/*" ] ] @@ -52,30 +40,15 @@ ], "Effect": "Allow", "Principal": { - "AWS": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "Arn" - ] - } + "AWS": "arn:aws:iam::123456789012:role/amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" }, "Resource": [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", { "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/*" ] ] @@ -93,19 +66,9 @@ "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketAutoDeleteObjectsCustomResource6C820EA7": { "Type": "Custom::S3AutoDeleteObjects", "Properties": { - "ServiceToken": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "Arn" - ] - }, - "BucketName": { - "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" - } + "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "BucketName": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" }, - "DependsOn": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketPolicy9A17D834" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -149,29 +112,19 @@ "Timeout": 900, "MemorySize": 128, "Handler": "index.handler", - "Role": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "Arn" - ] - }, + "Role": "arn:aws:iam::123456789012:role/amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "Runtime": "nodejs22.x", "Description": { "Fn::Join": [ "", [ "Lambda function for auto-deleting objects in ", - { - "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" - }, + "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", " S3 bucket." ] ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", @@ -189,9 +142,7 @@ "created-by": "amplify" }, "Type": "String", - "Value": { - "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" - } + "Value": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" }, "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/storage/MOODBOARD_20_E_29595008142_E_3_AD_16_F_01_C_4066_E_1_C_41959_A_GEN_2_MAIN_BUCKET_NAMEParameter/Resource" @@ -209,12 +160,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/public/*" ] ] @@ -231,12 +177,7 @@ } }, "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - } + "Resource": "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" } ], "Version": "2012-10-17" @@ -265,12 +206,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/public/*" ] ] @@ -279,12 +215,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/protected/*" ] ] @@ -293,12 +224,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/private/*" ] ] @@ -313,12 +239,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/public/*" ] ] @@ -327,12 +248,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/protected/*" ] ] @@ -341,12 +257,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/private/*" ] ] @@ -368,12 +279,7 @@ } }, "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - } + "Resource": "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" }, { "Action": "s3:DeleteObject", @@ -383,12 +289,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/public/*" ] ] @@ -397,12 +298,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/protected/*" ] ] @@ -411,12 +307,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/private/*" ] ] @@ -724,9 +615,7 @@ }, "Outputs": { "amplifymoodboardgen2mainbranchf7e4caeabbstoragemoodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket352A7A47Ref": { - "Value": { - "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" - } + "Value": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" } } } \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.target.template.json index ad47f276319..6fe3a05384c 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.target.template.json @@ -1,6 +1,510 @@ { "AWSTemplateFormatVersion": "2010-09-09", + "Description": "Temporary holding stack for Gen2 migration", "Resources": { + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AccountRecoverySetting": { + "RecoveryMechanisms": [ + { + "Name": "verified_email", + "Priority": 1 + } + ] + }, + "AdminCreateUserConfig": { + "AllowAdminCreateUserOnly": false + }, + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Your verification code is {####}", + "EmailVerificationSubject": "Your verification code", + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": 8, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false, + "TemporaryPasswordValidityDays": 7 + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "SmsVerificationMessage": "The verification code to your new account is {####}", + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolTags": { + "amplify:app-id": "moodboard", + "amplify:branch-name": "gen2-main", + "amplify:deployment-type": "branch", + "amplify:friendly-name": "amplifyAuth", + "created-by": "amplify" + }, + "UsernameAttributes": [ + "email" + ], + "UsernameConfiguration": { + "CaseSensitive": false + }, + "VerificationMessageTemplate": { + "DefaultEmailOption": "CONFIRM_WITH_CODE", + "EmailMessage": "Your verification code is {####}", + "EmailSubject": "Your verification code", + "SmsMessage": "The verification code to your new account is {####}" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/Resource" + } + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlows": [ + "code" + ], + "AllowedOAuthFlowsUserPoolClient": true, + "AllowedOAuthScopes": [ + "profile", + "phone", + "email", + "openid", + "aws.cognito.signin.user.admin" + ], + "CallbackURLs": [ + "https://example.com" + ], + "ExplicitAuthFlows": [ + "ALLOW_CUSTOM_AUTH", + "ALLOW_USER_SRP_AUTH", + "ALLOW_REFRESH_TOKEN_AUTH" + ], + "PreventUserExistenceErrors": "ENABLED", + "SupportedIdentityProviders": [ + "COGNITO" + ], + "UserPoolId": "us-east-1_1A4RMvPNr" + }, + "Metadata": { + "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPoolAppClient/Resource" + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_1A4RMvPNr" + }, + "Metadata": { + "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": true, + "CognitoIdentityProviders": [ + { + "ClientId": "2otm0qh3fj270k5tdn95cgjlm5", + "ProviderName": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_1A4RMvPNr" + ] + ] + } + } + ], + "IdentityPoolTags": [ + { + "Key": "amplify:app-id", + "Value": "moodboard" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ], + "SupportedLoginProviders": {} + }, + "Metadata": { + "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/IdentityPool" + } + }, + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb", + "RoleMappings": { + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_1A4RMvPNr", + ":", + "2otm0qh3fj270k5tdn95cgjlm5" + ] + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-ge-amplifyAuthunauthenticate-rp3r1qUbAKVV", + "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-ge-amplifyAuthauthenticatedU-UANJImTyKZ7p" + } + }, + "Metadata": { + "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/IdentityPoolRoleAttachment" + } + }, + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "productcatalog" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" + } + }, + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "projectboards" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main/Bucket/Resource" + } + }, + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "backendonly" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main/Bucket/Resource" + } + }, + "activity1E902D9C": { + "Type": "AWS::DynamoDB::Table", + "Properties": { + "AttributeDefinitions": [ + { + "AttributeName": "id", + "AttributeType": "S" + }, + { + "AttributeName": "userId", + "AttributeType": "S" + }, + { + "AttributeName": "timestamp", + "AttributeType": "S" + } + ], + "GlobalSecondaryIndexes": [ + { + "IndexName": "byUserId", + "KeySchema": [ + { + "AttributeName": "userId", + "KeyType": "HASH" + }, + { + "AttributeName": "timestamp", + "KeyType": "RANGE" + } + ], + "Projection": { + "ProjectionType": "ALL" + }, + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + } + } + ], + "KeySchema": [ + { + "AttributeName": "id", + "KeyType": "HASH" + }, + { + "AttributeName": "userId", + "KeyType": "RANGE" + } + ], + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + }, + "StreamSpecification": { + "StreamViewType": "NEW_IMAGE" + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "discussions" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain", + "Metadata": { + "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/storage/activity/Resource" + } + }, "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65": { "Type": "AWS::S3::Bucket", "Properties": { diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.source.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.source.template.json index 3e220a77f7d..0133af0ad57 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.source.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.source.template.json @@ -28,9 +28,7 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - { - "Ref": "env" - }, + "main", "NONE" ] } @@ -39,13 +37,9 @@ "CognitoUnauthPolicy": { "Type": "AWS::IAM::Policy", "Properties": { - "PolicyName": { - "Ref": "unauthPolicyName" - }, + "PolicyName": "kinesis_amplify_bca5ce95", "Roles": [ - { - "Ref": "unauthRoleName" - } + "amplify-moodboard-main-1959a-unauthRole" ], "PolicyDocument": { "Version": "2012-10-17", @@ -56,12 +50,7 @@ "kinesis:PutRecord", "kinesis:PutRecords" ], - "Resource": { - "Fn::GetAtt": [ - "KinesisStream", - "Arn" - ] - } + "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-main" } ] } @@ -70,13 +59,9 @@ "CognitoAuthPolicy": { "Type": "AWS::IAM::Policy", "Properties": { - "PolicyName": { - "Ref": "authPolicyName" - }, + "PolicyName": "kinesis_amplify_bca5ce95", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-moodboard-main-1959a-authRole" ], "PolicyDocument": { "Version": "2012-10-17", @@ -87,12 +72,7 @@ "kinesis:PutRecord", "kinesis:PutRecords" ], - "Resource": { - "Fn::GetAtt": [ - "KinesisStream", - "Arn" - ] - } + "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-main" } ] } @@ -101,22 +81,13 @@ }, "Outputs": { "kinesisStreamArn": { - "Value": { - "Fn::GetAtt": [ - "KinesisStream", - "Arn" - ] - } + "Value": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-main" }, "kinesisStreamId": { - "Value": { - "Ref": "KinesisStream" - } + "Value": "moodboardKinesis-main" }, "kinesisStreamShardCount": { - "Value": { - "Ref": "kinesisStreamShardCount" - } + "Value": "1" } } } \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.target.template.json index 48200112d2a..838bc149392 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.target.template.json @@ -1,27 +1,6 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.21.0\",\"stackType\":\"custom\",\"metadata\":{}}", "Resources": { - "moodboardKinesisKinesisStreamD5E97047": { - "Type": "AWS::Kinesis::Stream", - "Properties": { - "Name": { - "Fn::Join": [ - "-", - [ - { - "Ref": "kinesisStreamName" - }, - { - "Ref": "env" - } - ] - ] - }, - "ShardCount": { - "Ref": "kinesisStreamShardCount" - } - } - }, "moodboardKinesisCognitoAuthPolicyB69F4FA6": { "Type": "AWS::IAM::Policy", "Properties": { @@ -34,12 +13,7 @@ "kinesis:PutRecord", "kinesis:PutRecords" ], - "Resource": { - "Fn::GetAtt": [ - "moodboardKinesisKinesisStreamD5E97047", - "Arn" - ] - } + "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main" } ] }, @@ -66,12 +40,7 @@ "kinesis:PutRecord", "kinesis:PutRecords" ], - "Resource": { - "Fn::GetAtt": [ - "moodboardKinesisKinesisStreamD5E97047", - "Arn" - ] - } + "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main" } ] }, @@ -95,32 +64,35 @@ "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/analytics/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" + }, + "moodboardKinesisKinesisStreamD5E97047": { + "Type": "AWS::Kinesis::Stream", + "Properties": { + "Name": { + "Fn::Join": [ + "-", + [ + "moodboardKinesis", + "main" + ] + ] + }, + "ShardCount": "1" + } } }, "Outputs": { "kinesisStreamArn": { - "Value": { - "Fn::GetAtt": [ - "moodboardKinesisKinesisStreamD5E97047", - "Arn" - ] - } + "Value": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main" }, "kinesisStreamId": { - "Value": { - "Ref": "moodboardKinesisKinesisStreamD5E97047" - } + "Value": "moodboardKinesis-gen2-main" }, "kinesisStreamShardCount": { "Value": "1" }, "amplifymoodboardgen2mainbranchf7e4caeabbanalyticsmoodboardKinesisKinesisStreamBD82380AArn": { - "Value": { - "Fn::GetAtt": [ - "moodboardKinesisKinesisStreamD5E97047", - "Arn" - ] - } + "Value": "arn:aws:kinesis:us-east-1:123456789012:stream/moodboardKinesis-gen2-main" } }, "Conditions": { diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.source.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.source.template.json index fd5808dfb0f..82f9fd72f24 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.source.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.source.template.json @@ -114,9 +114,7 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - { - "Ref": "env" - }, + "main", "NONE" ] } @@ -138,36 +136,24 @@ ] }, "RoleName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "userpoolClientLambdaRole" - }, - { - "Fn::Join": [ - "", - [ - "upClientLambdaRole759ae00a", + "Fn::Join": [ + "", + [ + "upClientLambdaRole759ae00a", + { + "Fn::Select": [ + 3, { - "Fn::Select": [ - 3, - { - "Fn::Split": [ - "-", - { - "Ref": "AWS::StackName" - } - ] - } + "Fn::Split": [ + "-", + "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" ] - }, - "-", - { - "Ref": "env" } ] - ] - } + }, + "-", + "main" + ] ] } } @@ -176,49 +162,29 @@ "Outputs": { "IdentityPoolId": { "Description": "Id for the identity pool", - "Value": { - "Ref": "IdentityPool" - } + "Value": "us-east-1:a39e734d-ac34-43c7-8303-67512f010f0d" }, "IdentityPoolName": { - "Value": { - "Fn::GetAtt": [ - "IdentityPool", - "Name" - ] - } + "Value": "moodboard759ae00a_identitypool_759ae00a__main" }, "UserPoolId": { "Description": "Id for the user pool", - "Value": { - "Ref": "UserPool" - } + "Value": "us-east-1_Cwvqs93Nc" }, "UserPoolArn": { "Description": "Arn for the user pool", - "Value": { - "Fn::GetAtt": [ - "UserPool", - "Arn" - ] - } + "Value": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_Cwvqs93Nc" }, "UserPoolName": { - "Value": { - "Ref": "userPoolName" - } + "Value": "moodboard759ae00a_userpool_759ae00a" }, "AppClientIDWeb": { "Description": "The user pool app client id for web", - "Value": { - "Ref": "UserPoolClientWeb" - } + "Value": "5t2df7ru217mr5ar6r44r61uqg" }, "AppClientID": { "Description": "The user pool app client id", - "Value": { - "Ref": "UserPoolClient" - } + "Value": "1ssdipb0d8rfa77rq3o7u8t16c" } } } \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.target.template.json index 1e01fb7431e..75f291f8426 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.target.template.json @@ -1,176 +1,6 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.11.1\",\"stackType\":\"auth-Cognito\",\"metadata\":{}}", "Resources": { - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", - "Properties": { - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": { - "Ref": "emailVerificationMessage" - }, - "EmailVerificationSubject": { - "Ref": "emailVerificationSubject" - }, - "MfaConfiguration": { - "Ref": "mfaConfiguration" - }, - "Policies": { - "PasswordPolicy": { - "MinimumLength": { - "Ref": "passwordPolicyMinLength" - }, - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false - } - }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true - } - ], - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "userPoolName" - }, - { - "Fn::Join": [ - "", - [ - { - "Ref": "userPoolName" - }, - "-", - { - "Ref": "env" - } - ] - ] - } - ] - }, - "UsernameAttributes": { - "Ref": "usernameAttributes" - }, - "UsernameConfiguration": { - "CaseSensitive": false - } - } - }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "moodbo759ae00a_app_client", - "GenerateSecret": { - "Ref": "userpoolClientGenerateSecret" - }, - "RefreshTokenValidity": { - "Ref": "userpoolClientRefreshTokenValidity" - }, - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": { - "Ref": "UserPool" - } - }, - "DependsOn": [ - "UserPool" - ] - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "moodbo759ae00a_app_clientWeb", - "RefreshTokenValidity": { - "Ref": "userpoolClientRefreshTokenValidity" - }, - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": { - "Ref": "UserPool" - } - }, - "DependsOn": [ - "UserPool" - ] - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": { - "Ref": "allowUnauthenticatedIdentities" - }, - "CognitoIdentityProviders": [ - { - "ClientId": { - "Ref": "UserPoolClient" - }, - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": { - "Ref": "UserPool" - } - } - ] - } - }, - { - "ClientId": { - "Ref": "UserPoolClientWeb" - }, - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": { - "Ref": "UserPool" - } - } - ] - } - } - ], - "IdentityPoolName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - "moodboard759ae00a_identitypool_759ae00a", - { - "Fn::Join": [ - "", - [ - "moodboard759ae00a_identitypool_759ae00a__", - { - "Ref": "env" - } - ] - ] - } - ] - } - } - }, "amplifyAuthauthenticatedUserRoleD8DA3689": { "Type": "AWS::IAM::Role", "Properties": { @@ -180,9 +10,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -232,9 +60,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -275,25 +101,6 @@ "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/unauthenticatedUserRole/Resource" } }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": { - "Ref": "IdentityPool" - }, - "Roles": { - "unauthenticated": { - "Ref": "unauthRoleArn" - }, - "authenticated": { - "Ref": "authRoleArn" - } - } - }, - "DependsOn": [ - "IdentityPool" - ] - }, "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { @@ -303,6 +110,132 @@ "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" + }, + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Your verification code is {####}", + "EmailVerificationSubject": "Your verification code", + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": "8", + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::Join": [ + "", + [ + "moodboard759ae00a_userpool_759ae00a", + "-", + "main" + ] + ] + }, + "UsernameAttributes": [ + "email" + ], + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "moodbo759ae00a_app_clientWeb", + "RefreshTokenValidity": "30", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_Cwvqs93Nc" + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "moodbo759ae00a_app_client", + "GenerateSecret": "false", + "RefreshTokenValidity": "30", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_Cwvqs93Nc" + } + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": "true", + "CognitoIdentityProviders": [ + { + "ClientId": "1ssdipb0d8rfa77rq3o7u8t16c", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_Cwvqs93Nc" + } + ] + } + }, + { + "ClientId": "5t2df7ru217mr5ar6r44r61uqg", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_Cwvqs93Nc" + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::Join": [ + "", + [ + "moodboard759ae00a_identitypool_759ae00a__", + "main" + ] + ] + } + } + }, + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:a39e734d-ac34-43c7-8303-67512f010f0d", + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-main-1959a-unauthRole", + "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-main-1959a-authRole" + } + } } }, "Conditions": { @@ -573,29 +506,19 @@ }, "Outputs": { "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthUserPoolAE38F854Ref": { - "Value": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "Value": "us-east-1_1A4RMvPNr" }, "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthUserPoolAppClientA69935A4Ref": { - "Value": { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - } + "Value": "2otm0qh3fj270k5tdn95cgjlm5" }, "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthIdentityPoolA9AA7B9FRef": { - "Value": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "Value": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb" }, "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthauthenticatedUserRole0AA19633Ref": { - "Value": { - "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" - } + "Value": "amplify-moodboard-ge-amplifyAuthauthenticatedU-UANJImTyKZ7p" }, "amplifymoodboardgen2mainbranchf7e4caeabbauthamplifyAuthunauthenticatedUserRoleBEC4D39ARef": { - "Value": { - "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" - } + "Value": "amplify-moodboard-ge-amplifyAuthunauthenticate-rp3r1qUbAKVV" } } } \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.source.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.source.template.json index 2a102385b61..91330cd6b72 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.source.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.source.template.json @@ -84,9 +84,7 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - { - "Ref": "env" - }, + "main", "NONE" ] }, @@ -94,9 +92,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsAuthenticatedPublic" - }, + "s3:PutObject,s3:GetObject,s3:DeleteObject", "DISALLOW" ] } @@ -106,9 +102,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsAuthenticatedProtected" - }, + "s3:PutObject,s3:GetObject,s3:DeleteObject", "DISALLOW" ] } @@ -118,9 +112,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsAuthenticatedPrivate" - }, + "s3:PutObject,s3:GetObject,s3:DeleteObject", "DISALLOW" ] } @@ -130,9 +122,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsAuthenticatedUploads" - }, + "s3:PutObject", "DISALLOW" ] } @@ -142,9 +132,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsGuestPublic" - }, + "s3:GetObject", "DISALLOW" ] } @@ -154,9 +142,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsGuestUploads" - }, + "DISALLOW", "DISALLOW" ] } @@ -166,9 +152,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "AuthenticatedAllowList" - }, + "ALLOW", "DISALLOW" ] } @@ -178,9 +162,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "GuestAllowList" - }, + "ALLOW", "DISALLOW" ] } @@ -190,14 +172,10 @@ "Outputs": { "BucketName": { "Description": "Bucket name for the S3 bucket", - "Value": { - "Ref": "S3Bucket" - } + "Value": "moodboard20e29595008142e3ad16f01c4066e1c41959a-main" }, "Region": { - "Value": { - "Ref": "AWS::Region" - } + "Value": "us-east-1" } }, "Resources": { @@ -212,9 +190,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsAuthenticatedPublic" - } + "s3:PutObject,s3:GetObject,s3:DeleteObject" ] }, "Resource": [ @@ -223,9 +199,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "moodboard20e29595008142e3ad16f01c4066e1c41959a-main", "/public/*" ] ] @@ -234,18 +208,11 @@ } ] }, - "PolicyName": { - "Ref": "s3PublicPolicy" - }, + "PolicyName": "Public_policy_206c638b", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -259,9 +226,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsAuthenticatedProtected" - } + "s3:PutObject,s3:GetObject,s3:DeleteObject" ] }, "Resource": [ @@ -270,9 +235,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "moodboard20e29595008142e3ad16f01c4066e1c41959a-main", "/protected/${cognito-identity.amazonaws.com:sub}/*" ] ] @@ -281,18 +244,11 @@ } ] }, - "PolicyName": { - "Ref": "s3ProtectedPolicy" - }, + "PolicyName": "Protected_policy_206c638b", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -306,9 +262,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsAuthenticatedPrivate" - } + "s3:PutObject,s3:GetObject,s3:DeleteObject" ] }, "Resource": [ @@ -317,9 +271,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "moodboard20e29595008142e3ad16f01c4066e1c41959a-main", "/private/${cognito-identity.amazonaws.com:sub}/*" ] ] @@ -328,18 +280,11 @@ } ] }, - "PolicyName": { - "Ref": "s3PrivatePolicy" - }, + "PolicyName": "Private_policy_206c638b", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -353,9 +298,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsAuthenticatedUploads" - } + "s3:PutObject" ] }, "Resource": [ @@ -364,9 +307,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "moodboard20e29595008142e3ad16f01c4066e1c41959a-main", "/uploads/*" ] ] @@ -375,18 +316,11 @@ } ] }, - "PolicyName": { - "Ref": "s3UploadsPolicy" - }, + "PolicyName": "Uploads_policy_206c638b", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -400,9 +334,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsGuestPublic" - } + "s3:GetObject" ] }, "Resource": [ @@ -411,9 +343,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "moodboard20e29595008142e3ad16f01c4066e1c41959a-main", "/public/*" ] ] @@ -422,18 +352,11 @@ } ] }, - "PolicyName": { - "Ref": "s3PublicPolicy" - }, + "PolicyName": "Public_policy_206c638b", "Roles": [ - { - "Ref": "unauthRoleName" - } + "amplify-moodboard-main-1959a-unauthRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -449,9 +372,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "moodboard20e29595008142e3ad16f01c4066e1c41959a-main", "/protected/*" ] ] @@ -477,9 +398,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } + "moodboard20e29595008142e3ad16f01c4066e1c41959a-main" ] ] } @@ -487,18 +406,11 @@ ], "Version": "2012-10-17" }, - "PolicyName": { - "Ref": "s3ReadPolicy" - }, + "PolicyName": "read_policy_206c638b", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -514,9 +426,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "moodboard20e29595008142e3ad16f01c4066e1c41959a-main", "/protected/*" ] ] @@ -540,9 +450,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } + "moodboard20e29595008142e3ad16f01c4066e1c41959a-main" ] ] } @@ -550,18 +458,11 @@ ], "Version": "2012-10-17" }, - "PolicyName": { - "Ref": "s3ReadPolicy" - }, + "PolicyName": "read_policy_206c638b", "Roles": [ - { - "Ref": "unauthRoleName" - } + "amplify-moodboard-main-1959a-unauthRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.target.template.json index 06532d58281..b5962a18290 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.target.template.json @@ -1,90 +1,10 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.4.3\",\"stackType\":\"storage-S3\",\"metadata\":{}}", "Resources": { - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "bucketName" - }, - { - "Fn::Join": [ - "", - [ - { - "Ref": "bucketName" - }, - { - "Fn::Select": [ - 3, - { - "Fn::Split": [ - "-", - { - "Ref": "AWS::StackName" - } - ] - } - ] - }, - "-", - { - "Ref": "env" - } - ] - ] - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "Id": "S3CORSRuleId1", - "MaxAge": 3000 - } - ] - }, - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - } - }, - "UpdateReplacePolicy": "Retain", - "DeletionPolicy": "Retain" - }, "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketPolicy9A17D834": { "Type": "AWS::S3::BucketPolicy", "Properties": { - "Bucket": { - "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" - }, + "Bucket": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "PolicyDocument": { "Statement": [ { @@ -99,22 +19,12 @@ "AWS": "*" }, "Resource": [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", { "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/*" ] ] @@ -130,30 +40,15 @@ ], "Effect": "Allow", "Principal": { - "AWS": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "Arn" - ] - } + "AWS": "arn:aws:iam::123456789012:role/amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" }, "Resource": [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", { "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/*" ] ] @@ -171,19 +66,9 @@ "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketAutoDeleteObjectsCustomResource6C820EA7": { "Type": "Custom::S3AutoDeleteObjects", "Properties": { - "ServiceToken": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "Arn" - ] - }, - "BucketName": { - "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" - } + "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "BucketName": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" }, - "DependsOn": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketPolicy9A17D834" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -227,29 +112,19 @@ "Timeout": 900, "MemorySize": 128, "Handler": "index.handler", - "Role": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "Arn" - ] - }, + "Role": "arn:aws:iam::123456789012:role/amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "Runtime": "nodejs22.x", "Description": { "Fn::Join": [ "", [ "Lambda function for auto-deleting objects in ", - { - "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" - }, + "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", " S3 bucket." ] ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", @@ -267,9 +142,7 @@ "created-by": "amplify" }, "Type": "String", - "Value": { - "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" - } + "Value": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" }, "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/storage/MOODBOARD_20_E_29595008142_E_3_AD_16_F_01_C_4066_E_1_C_41959_A_GEN_2_MAIN_BUCKET_NAMEParameter/Resource" @@ -287,12 +160,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/public/*" ] ] @@ -309,12 +177,7 @@ } }, "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - } + "Resource": "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" } ], "Version": "2012-10-17" @@ -343,12 +206,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/public/*" ] ] @@ -357,12 +215,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/protected/*" ] ] @@ -371,12 +224,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/private/*" ] ] @@ -391,12 +239,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/public/*" ] ] @@ -405,12 +248,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/protected/*" ] ] @@ -419,12 +257,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/private/*" ] ] @@ -446,12 +279,7 @@ } }, "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - } + "Resource": "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" }, { "Action": "s3:DeleteObject", @@ -461,12 +289,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/public/*" ] ] @@ -475,12 +298,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/protected/*" ] ] @@ -489,12 +307,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "Arn" - ] - }, + "arn:aws:s3:::amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z", "/private/*" ] ] @@ -524,6 +337,70 @@ "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/storage/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" + }, + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketName": { + "Fn::Join": [ + "", + [ + "moodboard20e29595008142e3ad16f01c4066e1c4", + { + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + "amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA" + ] + } + ] + }, + "-", + "main" + ] + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "Id": "S3CORSRuleId1", + "MaxAge": 3000 + } + ] + }, + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + } + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" } }, "Conditions": { @@ -802,9 +679,7 @@ }, "Outputs": { "amplifymoodboardgen2mainbranchf7e4caeabbstoragemoodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket352A7A47Ref": { - "Value": { - "Ref": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" - } + "Value": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" } } } \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.source.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.source.template.json index c790141bfca..f7d0aa04db5 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.source.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.source.template.json @@ -10,9 +10,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:c464f123-eaf0-4289-98b3-381197fa3d7f" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -83,9 +81,7 @@ }, "PolicyName": "amplifyAuthauthenticatedUserRoleDefaultPolicy82E52873", "Roles": [ - { - "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" - } + "amplify-productcatalog-ge-amplifyAuthauthenticatedU-7u6GoubHxSy7" ] }, "Metadata": { @@ -101,9 +97,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:c464f123-eaf0-4289-98b3-381197fa3d7f" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -423,29 +417,19 @@ }, "Outputs": { "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthUserPool0E44954DRef": { - "Value": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "Value": "us-east-1_OFRBVzhq5" }, "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthUserPoolAppClient99A19E4CRef": { - "Value": { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - } + "Value": "61e6oq3acg1at7f9da6cfna70d" }, "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthIdentityPool3AA33B1CRef": { - "Value": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "Value": "us-east-1:c464f123-eaf0-4289-98b3-381197fa3d7f" }, "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthauthenticatedUserRole66B9FD31Ref": { - "Value": { - "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" - } + "Value": "amplify-productcatalog-ge-amplifyAuthauthenticatedU-7u6GoubHxSy7" }, "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthunauthenticatedUserRole84BD6ECBRef": { - "Value": { - "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" - } + "Value": "amplify-productcatalog-ge-amplifyAuthunauthenticate-JMPocA8XyO6M" } } } \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json index 622cf4dd33c..f86fae3e9c3 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json @@ -1,5 +1,6 @@ { "AWSTemplateFormatVersion": "2010-09-09", + "Description": "Temporary holding stack for Gen2 migration", "Resources": { "amplifyAuthUserPool4BA7F805": { "Type": "AWS::Cognito::UserPool", @@ -96,9 +97,7 @@ "SupportedIdentityProviders": [ "COGNITO" ], - "UserPoolId": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "UserPoolId": "us-east-1_OFRBVzhq5" }, "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPoolAppClient/Resource" @@ -119,9 +118,7 @@ "TokenValidityUnits": { "RefreshToken": "minutes" }, - "UserPoolId": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "UserPoolId": "us-east-1_OFRBVzhq5" }, "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPool/NativeAppClient/Resource" @@ -133,9 +130,7 @@ "AllowUnauthenticatedIdentities": false, "CognitoIdentityProviders": [ { - "ClientId": { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - }, + "ClientId": "61e6oq3acg1at7f9da6cfna70d", "ProviderName": { "Fn::Join": [ "", @@ -145,9 +140,7 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "us-east-1_OFRBVzhq5" ] ] } @@ -184,9 +177,7 @@ "amplifyAuthIdentityPoolRoleAttachment045F17C8": { "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "IdentityPoolId": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - }, + "IdentityPoolId": "us-east-1:c464f123-eaf0-4289-98b3-381197fa3d7f", "RoleMappings": { "UserPoolWebClientRoleMapping": { "AmbiguousRoleResolution": "AuthenticatedRole", @@ -199,13 +190,9 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - { - "Ref": "amplifyAuthUserPool4BA7F805" - }, + "us-east-1_OFRBVzhq5", ":", - { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - } + "61e6oq3acg1at7f9da6cfna70d" ] ] }, @@ -213,24 +200,10 @@ } }, "Roles": { - "unauthenticated": { - "Fn::GetAtt": [ - "amplifyAuthunauthenticatedUserRole2B524D9E", - "Arn" - ] - }, - "authenticated": { - "Fn::GetAtt": [ - "amplifyAuthauthenticatedUserRoleD8DA3689", - "Arn" - ] - } + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-ge-amplifyAuthunauthenticate-JMPocA8XyO6M", + "authenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-ge-amplifyAuthauthenticatedU-7u6GoubHxSy7" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.source.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.source.template.json index d10c85c655b..436640b9b85 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.source.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.source.template.json @@ -4,9 +4,7 @@ "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81": { "Type": "AWS::S3::BucketPolicy", "Properties": { - "Bucket": { - "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" - }, + "Bucket": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "PolicyDocument": { "Statement": [ { @@ -21,22 +19,12 @@ "AWS": "*" }, "Resource": [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", { "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/*" ] ] @@ -52,30 +40,15 @@ ], "Effect": "Allow", "Principal": { - "AWS": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "Arn" - ] - } + "AWS": "arn:aws:iam::123456789012:role/amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" }, "Resource": [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", { "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/*" ] ] @@ -93,19 +66,9 @@ "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketAutoDeleteObjectsCustomResource6974B5B5": { "Type": "Custom::S3AutoDeleteObjects", "Properties": { - "ServiceToken": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "Arn" - ] - }, - "BucketName": { - "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" - } + "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "BucketName": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" }, - "DependsOn": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -115,15 +78,8 @@ "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketNotifications20779ED4": { "Type": "Custom::S3BucketNotifications", "Properties": { - "ServiceToken": { - "Fn::GetAtt": [ - "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", - "Arn" - ] - }, - "BucketName": { - "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" - }, + "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", + "BucketName": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "NotificationConfiguration": { "LambdaFunctionConfigurations": [ { @@ -147,10 +103,6 @@ "Managed": true, "SkipDestinationValidation": false }, - "DependsOn": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketAllowBucketNotificationsToamplifyproductcataloggen2mainbranch4b79ec0f9afunctionS3Trigger1ef46783gen2mainlambda8226525A5BBBE747", - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Notifications/Resource" } @@ -166,12 +118,7 @@ "SourceAccount": { "Ref": "AWS::AccountId" }, - "SourceArn": { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - } + "SourceArn": "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" }, "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/AllowBucketNotificationsToamplifyproductcataloggen2mainbranch4b79ec0f9afunctionS3Trigger1ef46783gen2mainlambda8226525A" @@ -214,29 +161,19 @@ "Timeout": 900, "MemorySize": 128, "Handler": "index.handler", - "Role": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "Arn" - ] - }, + "Role": "arn:aws:iam::123456789012:role/amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "Runtime": "nodejs22.x", "Description": { "Fn::Join": [ "", [ "Lambda function for auto-deleting objects in ", - { - "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" - }, + "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", " S3 bucket." ] ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", @@ -303,12 +240,7 @@ { "Action": "s3:PutBucketNotification", "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - } + "Resource": "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" } ], "Version": "2012-10-17" @@ -332,12 +264,7 @@ "ZipFile": "import boto3 # type: ignore\nimport json\nimport logging\nimport urllib.request\n\ns3 = boto3.client(\"s3\")\n\nEVENTBRIDGE_CONFIGURATION = 'EventBridgeConfiguration'\nCONFIGURATION_TYPES = [\"TopicConfigurations\", \"QueueConfigurations\", \"LambdaFunctionConfigurations\"]\n\ndef handler(event: dict, context):\n response_status = \"SUCCESS\"\n error_message = \"\"\n try:\n props = event[\"ResourceProperties\"]\n notification_configuration = props[\"NotificationConfiguration\"]\n managed = props.get('Managed', 'true').lower() == 'true'\n skipDestinationValidation = props.get('SkipDestinationValidation', 'false').lower() == 'true'\n stack_id = event['StackId']\n old = event.get(\"OldResourceProperties\", {}).get(\"NotificationConfiguration\", {})\n if managed:\n config = handle_managed(event[\"RequestType\"], notification_configuration)\n else:\n config = handle_unmanaged(props[\"BucketName\"], stack_id, event[\"RequestType\"], notification_configuration, old)\n s3.put_bucket_notification_configuration(Bucket=props[\"BucketName\"], NotificationConfiguration=config, SkipDestinationValidation=skipDestinationValidation)\n except Exception as e:\n logging.exception(\"Failed to put bucket notification configuration\")\n response_status = \"FAILED\"\n error_message = f\"Error: {str(e)}. \"\n finally:\n submit_response(event, context, response_status, error_message)\n\ndef handle_managed(request_type, notification_configuration):\n if request_type == 'Delete':\n return {}\n return notification_configuration\n\ndef handle_unmanaged(bucket, stack_id, request_type, notification_configuration, old):\n def get_id(n):\n n['Id'] = ''\n sorted_notifications = sort_filter_rules(n)\n strToHash=json.dumps(sorted_notifications, sort_keys=True).replace('\"Name\": \"prefix\"', '\"Name\": \"Prefix\"').replace('\"Name\": \"suffix\"', '\"Name\": \"Suffix\"')\n return f\"{stack_id}-{hash(strToHash)}\"\n def with_id(n):\n n['Id'] = get_id(n)\n return n\n\n external_notifications = {}\n existing_notifications = s3.get_bucket_notification_configuration(Bucket=bucket)\n for t in CONFIGURATION_TYPES:\n if request_type == 'Update':\n old_incoming_ids = [get_id(n) for n in old.get(t, [])]\n external_notifications[t] = [n for n in existing_notifications.get(t, []) if not get_id(n) in old_incoming_ids] \n elif request_type == 'Delete':\n external_notifications[t] = [n for n in existing_notifications.get(t, []) if not n['Id'].startswith(f\"{stack_id}-\")]\n elif request_type == 'Create':\n external_notifications[t] = [n for n in existing_notifications.get(t, [])]\n if EVENTBRIDGE_CONFIGURATION in existing_notifications:\n external_notifications[EVENTBRIDGE_CONFIGURATION] = existing_notifications[EVENTBRIDGE_CONFIGURATION]\n\n if request_type == 'Delete':\n return external_notifications\n\n notifications = {}\n for t in CONFIGURATION_TYPES:\n external = external_notifications.get(t, [])\n incoming = [with_id(n) for n in notification_configuration.get(t, [])]\n notifications[t] = external + incoming\n\n if EVENTBRIDGE_CONFIGURATION in notification_configuration:\n notifications[EVENTBRIDGE_CONFIGURATION] = notification_configuration[EVENTBRIDGE_CONFIGURATION]\n elif EVENTBRIDGE_CONFIGURATION in external_notifications:\n notifications[EVENTBRIDGE_CONFIGURATION] = external_notifications[EVENTBRIDGE_CONFIGURATION]\n\n return notifications\n\ndef submit_response(event: dict, context, response_status: str, error_message: str):\n response_body = json.dumps(\n {\n \"Status\": response_status,\n \"Reason\": f\"{error_message}See the details in CloudWatch Log Stream: {context.log_stream_name}\",\n \"PhysicalResourceId\": event.get(\"PhysicalResourceId\") or event[\"LogicalResourceId\"],\n \"StackId\": event[\"StackId\"],\n \"RequestId\": event[\"RequestId\"],\n \"LogicalResourceId\": event[\"LogicalResourceId\"],\n \"NoEcho\": False,\n }\n ).encode(\"utf-8\")\n headers = {\"content-type\": \"\", \"content-length\": str(len(response_body))}\n try:\n req = urllib.request.Request(url=event[\"ResponseURL\"], headers=headers, data=response_body, method=\"PUT\")\n with urllib.request.urlopen(req) as response:\n print(response.read().decode(\"utf-8\"))\n print(\"Status code: \" + response.reason)\n except Exception as e:\n print(\"send(..) failed executing request.urlopen(..): \" + str(e))\n\ndef sort_filter_rules(json_obj):\n if not isinstance(json_obj, dict):\n return json_obj\n for key, value in json_obj.items():\n if isinstance(value, dict):\n json_obj[key] = sort_filter_rules(value)\n elif isinstance(value, list):\n json_obj[key] = [sort_filter_rules(item) for item in value]\n if \"Filter\" in json_obj and \"Key\" in json_obj[\"Filter\"] and \"FilterRules\" in json_obj[\"Filter\"][\"Key\"]:\n filter_rules = json_obj[\"Filter\"][\"Key\"][\"FilterRules\"]\n sorted_filter_rules = sorted(filter_rules, key=lambda x: x[\"Name\"])\n json_obj[\"Filter\"][\"Key\"][\"FilterRules\"] = sorted_filter_rules\n return json_obj" }, "Handler": "index.handler", - "Role": { - "Fn::GetAtt": [ - "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", - "Arn" - ] - }, + "Role": "arn:aws:iam::123456789012:role/amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", "Runtime": "python3.13", "Timeout": 300, "Tags": [ @@ -359,10 +286,6 @@ } ] }, - "DependsOn": [ - "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36", - "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Resource" } @@ -378,9 +301,7 @@ "created-by": "amplify" }, "Type": "String", - "Value": { - "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" - } + "Value": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" }, "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/PRODUCTCATALOGF_95_AF_07481_F_845_CAA_6594_C_26_AC_9_C_8_ED_331323_GEN_2_MAIN_BUCKET_NAMEParameter/Resource" @@ -399,12 +320,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/public/*" ] ] @@ -413,12 +329,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/protected/*" ] ] @@ -427,12 +338,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/private/*" ] ] @@ -447,12 +353,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/public/*" ] ] @@ -461,12 +362,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/protected/*" ] ] @@ -475,12 +371,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/private/*" ] ] @@ -502,12 +393,7 @@ } }, "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - } + "Resource": "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" }, { "Action": "s3:DeleteObject", @@ -517,12 +403,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/public/*" ] ] @@ -531,12 +412,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/protected/*" ] ] @@ -545,12 +421,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/private/*" ] ] @@ -858,9 +729,7 @@ }, "Outputs": { "amplifyproductcataloggen2mainbranch4b79ec0f9astorageproductcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketBD2F9EF2Ref": { - "Value": { - "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" - } + "Value": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" } } } \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.target.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.target.template.json index f053e3640a5..aa18626f494 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.target.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.target.template.json @@ -1,6 +1,213 @@ { "AWSTemplateFormatVersion": "2010-09-09", + "Description": "Temporary holding stack for Gen2 migration", "Resources": { + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AccountRecoverySetting": { + "RecoveryMechanisms": [ + { + "Name": "verified_email", + "Priority": 1 + } + ] + }, + "AdminCreateUserConfig": { + "AllowAdminCreateUserOnly": false + }, + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Your verification code is {####}", + "EmailVerificationSubject": "Your verification code", + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": 8, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false, + "TemporaryPasswordValidityDays": 7 + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "SmsVerificationMessage": "The verification code to your new account is {####}", + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolTags": { + "amplify:app-id": "productcatalog", + "amplify:branch-name": "gen2-main", + "amplify:deployment-type": "branch", + "amplify:friendly-name": "amplifyAuth", + "created-by": "amplify" + }, + "UsernameAttributes": [ + "email" + ], + "UsernameConfiguration": { + "CaseSensitive": false + }, + "VerificationMessageTemplate": { + "DefaultEmailOption": "CONFIRM_WITH_CODE", + "EmailMessage": "Your verification code is {####}", + "EmailSubject": "Your verification code", + "SmsMessage": "The verification code to your new account is {####}" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPool/Resource" + } + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlows": [ + "code" + ], + "AllowedOAuthFlowsUserPoolClient": true, + "AllowedOAuthScopes": [ + "profile", + "phone", + "email", + "openid", + "aws.cognito.signin.user.admin" + ], + "CallbackURLs": [ + "https://example.com" + ], + "ExplicitAuthFlows": [ + "ALLOW_CUSTOM_AUTH", + "ALLOW_USER_SRP_AUTH", + "ALLOW_REFRESH_TOKEN_AUTH" + ], + "PreventUserExistenceErrors": "ENABLED", + "SupportedIdentityProviders": [ + "COGNITO" + ], + "UserPoolId": "us-east-1_OFRBVzhq5" + }, + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPoolAppClient/Resource" + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_OFRBVzhq5" + }, + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": false, + "CognitoIdentityProviders": [ + { + "ClientId": "61e6oq3acg1at7f9da6cfna70d", + "ProviderName": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_OFRBVzhq5" + ] + ] + } + } + ], + "IdentityPoolTags": [ + { + "Key": "amplify:app-id", + "Value": "productcatalog" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ], + "SupportedLoginProviders": {} + }, + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/IdentityPool" + } + }, + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:c464f123-eaf0-4289-98b3-381197fa3d7f", + "RoleMappings": { + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_OFRBVzhq5", + ":", + "61e6oq3acg1at7f9da6cfna70d" + ] + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-ge-amplifyAuthunauthenticate-JMPocA8XyO6M", + "authenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-ge-amplifyAuthauthenticatedU-7u6GoubHxSy7" + } + }, + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/IdentityPoolRoleAttachment" + } + }, "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { "Type": "AWS::S3::Bucket", "Properties": { diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.source.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.source.template.json index fbecb1771b3..9cf5ab554b8 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.source.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.source.template.json @@ -114,9 +114,7 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - { - "Ref": "env" - }, + "main", "NONE" ] } @@ -138,36 +136,24 @@ ] }, "RoleName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "userpoolClientLambdaRole" - }, - { - "Fn::Join": [ - "", - [ - "upClientLambdaRole90174ac4", + "Fn::Join": [ + "", + [ + "upClientLambdaRole90174ac4", + { + "Fn::Select": [ + 3, { - "Fn::Select": [ - 3, - { - "Fn::Split": [ - "-", - { - "Ref": "AWS::StackName" - } - ] - } + "Fn::Split": [ + "-", + "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" ] - }, - "-", - { - "Ref": "env" } ] - ] - } + }, + "-", + "main" + ] ] } } @@ -176,49 +162,29 @@ "Outputs": { "IdentityPoolId": { "Description": "Id for the identity pool", - "Value": { - "Ref": "IdentityPool" - } + "Value": "us-east-1:46acac6f-21d1-433c-93b9-d9d908c696fc" }, "IdentityPoolName": { - "Value": { - "Fn::GetAtt": [ - "IdentityPool", - "Name" - ] - } + "Value": "productcatalog90174ac4_identitypool_90174ac4__main" }, "UserPoolId": { "Description": "Id for the user pool", - "Value": { - "Ref": "UserPool" - } + "Value": "us-east-1_66BkqNfdX" }, "UserPoolArn": { "Description": "Arn for the user pool", - "Value": { - "Fn::GetAtt": [ - "UserPool", - "Arn" - ] - } + "Value": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_66BkqNfdX" }, "UserPoolName": { - "Value": { - "Ref": "userPoolName" - } + "Value": "productcatalog90174ac4_userpool_90174ac4" }, "AppClientIDWeb": { "Description": "The user pool app client id for web", - "Value": { - "Ref": "UserPoolClientWeb" - } + "Value": "7ogg1fkk68io03i95o0viqhibk" }, "AppClientID": { "Description": "The user pool app client id", - "Value": { - "Ref": "UserPoolClient" - } + "Value": "27jbakm3s7vgm116b36evi830d" } } } \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.target.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.target.template.json index 76fba05b4e4..a69d3b0e16d 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.target.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.target.template.json @@ -1,176 +1,6 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.11.1\",\"stackType\":\"auth-Cognito\",\"metadata\":{}}", "Resources": { - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", - "Properties": { - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": { - "Ref": "emailVerificationMessage" - }, - "EmailVerificationSubject": { - "Ref": "emailVerificationSubject" - }, - "MfaConfiguration": { - "Ref": "mfaConfiguration" - }, - "Policies": { - "PasswordPolicy": { - "MinimumLength": { - "Ref": "passwordPolicyMinLength" - }, - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false - } - }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true - } - ], - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "userPoolName" - }, - { - "Fn::Join": [ - "", - [ - { - "Ref": "userPoolName" - }, - "-", - { - "Ref": "env" - } - ] - ] - } - ] - }, - "UsernameAttributes": { - "Ref": "usernameAttributes" - }, - "UsernameConfiguration": { - "CaseSensitive": false - } - } - }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "produc90174ac4_app_client", - "GenerateSecret": { - "Ref": "userpoolClientGenerateSecret" - }, - "RefreshTokenValidity": { - "Ref": "userpoolClientRefreshTokenValidity" - }, - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": { - "Ref": "UserPool" - } - }, - "DependsOn": [ - "UserPool" - ] - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "produc90174ac4_app_clientWeb", - "RefreshTokenValidity": { - "Ref": "userpoolClientRefreshTokenValidity" - }, - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": { - "Ref": "UserPool" - } - }, - "DependsOn": [ - "UserPool" - ] - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": { - "Ref": "allowUnauthenticatedIdentities" - }, - "CognitoIdentityProviders": [ - { - "ClientId": { - "Ref": "UserPoolClient" - }, - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": { - "Ref": "UserPool" - } - } - ] - } - }, - { - "ClientId": { - "Ref": "UserPoolClientWeb" - }, - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": { - "Ref": "UserPool" - } - } - ] - } - } - ], - "IdentityPoolName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - "productcatalog90174ac4_identitypool_90174ac4", - { - "Fn::Join": [ - "", - [ - "productcatalog90174ac4_identitypool_90174ac4__", - { - "Ref": "env" - } - ] - ] - } - ] - } - } - }, "amplifyAuthauthenticatedUserRoleD8DA3689": { "Type": "AWS::IAM::Role", "Properties": { @@ -180,9 +10,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:c464f123-eaf0-4289-98b3-381197fa3d7f" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -253,9 +81,7 @@ }, "PolicyName": "amplifyAuthauthenticatedUserRoleDefaultPolicy82E52873", "Roles": [ - { - "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" - } + "amplify-productcatalog-ge-amplifyAuthauthenticatedU-7u6GoubHxSy7" ] }, "Metadata": { @@ -271,9 +97,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:c464f123-eaf0-4289-98b3-381197fa3d7f" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -314,25 +138,6 @@ "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/unauthenticatedUserRole/Resource" } }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": { - "Ref": "IdentityPool" - }, - "Roles": { - "unauthenticated": { - "Ref": "unauthRoleArn" - }, - "authenticated": { - "Ref": "authRoleArn" - } - } - }, - "DependsOn": [ - "IdentityPool" - ] - }, "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { @@ -342,6 +147,132 @@ "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" + }, + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Your verification code is {####}", + "EmailVerificationSubject": "Your verification code", + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": "8", + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::Join": [ + "", + [ + "productcatalog90174ac4_userpool_90174ac4", + "-", + "main" + ] + ] + }, + "UsernameAttributes": [ + "email" + ], + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "produc90174ac4_app_clientWeb", + "RefreshTokenValidity": "30", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_66BkqNfdX" + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "produc90174ac4_app_client", + "GenerateSecret": "false", + "RefreshTokenValidity": "30", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_66BkqNfdX" + } + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": "false", + "CognitoIdentityProviders": [ + { + "ClientId": "27jbakm3s7vgm116b36evi830d", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_66BkqNfdX" + } + ] + } + }, + { + "ClientId": "7ogg1fkk68io03i95o0viqhibk", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_66BkqNfdX" + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::Join": [ + "", + [ + "productcatalog90174ac4_identitypool_90174ac4__", + "main" + ] + ] + } + } + }, + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:46acac6f-21d1-433c-93b9-d9d908c696fc", + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-main-31323-unauthRole", + "authenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-main-31323-authRole" + } + } } }, "Conditions": { @@ -612,29 +543,19 @@ }, "Outputs": { "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthUserPool0E44954DRef": { - "Value": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "Value": "us-east-1_OFRBVzhq5" }, "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthUserPoolAppClient99A19E4CRef": { - "Value": { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - } + "Value": "61e6oq3acg1at7f9da6cfna70d" }, "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthIdentityPool3AA33B1CRef": { - "Value": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "Value": "us-east-1:c464f123-eaf0-4289-98b3-381197fa3d7f" }, "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthauthenticatedUserRole66B9FD31Ref": { - "Value": { - "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" - } + "Value": "amplify-productcatalog-ge-amplifyAuthauthenticatedU-7u6GoubHxSy7" }, "amplifyproductcataloggen2mainbranch4b79ec0f9aauthamplifyAuthunauthenticatedUserRole84BD6ECBRef": { - "Value": { - "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" - } + "Value": "amplify-productcatalog-ge-amplifyAuthunauthenticate-JMPocA8XyO6M" } } } \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.source.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.source.template.json index fdf07ca7045..da74f677807 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.source.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.source.template.json @@ -99,9 +99,7 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - { - "Ref": "env" - }, + "main", "NONE" ] }, @@ -109,9 +107,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsAuthenticatedPublic" - }, + "s3:PutObject,s3:GetObject,s3:DeleteObject", "DISALLOW" ] } @@ -121,9 +117,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsAuthenticatedProtected" - }, + "s3:PutObject,s3:GetObject,s3:DeleteObject", "DISALLOW" ] } @@ -133,9 +127,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsAuthenticatedPrivate" - }, + "s3:PutObject,s3:GetObject,s3:DeleteObject", "DISALLOW" ] } @@ -145,9 +137,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsAuthenticatedUploads" - }, + "s3:PutObject", "DISALLOW" ] } @@ -157,9 +147,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsGuestPublic" - }, + "DISALLOW", "DISALLOW" ] } @@ -169,9 +157,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsGuestUploads" - }, + "DISALLOW", "DISALLOW" ] } @@ -181,9 +167,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "AuthenticatedAllowList" - }, + "ALLOW", "DISALLOW" ] } @@ -193,9 +177,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "GuestAllowList" - }, + "DISALLOW", "DISALLOW" ] } @@ -205,14 +187,10 @@ "Outputs": { "BucketName": { "Description": "Bucket name for the S3 bucket", - "Value": { - "Ref": "S3Bucket" - } + "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main" }, "Region": { - "Value": { - "Ref": "AWS::Region" - } + "Value": "us-east-1" } }, "Resources": { @@ -220,9 +198,7 @@ "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", - "FunctionName": { - "Ref": "functionS3Trigger1ef46783Name" - }, + "FunctionName": "S3Trigger1ef46783-main", "Principal": "s3.amazonaws.com", "SourceAccount": { "Ref": "AWS::AccountId" @@ -235,33 +211,25 @@ { "Fn::If": [ "ShouldNotCreateEnvResources", - { - "Ref": "bucketName" - }, + "productcatalogf95af07481f845caa6594c26ac9c8ed3", { "Fn::Join": [ "", [ - { - "Ref": "bucketName" - }, + "productcatalogf95af07481f845caa6594c26ac9c8ed3", { "Fn::Select": [ 3, { "Fn::Split": [ "-", - { - "Ref": "AWS::StackName" - } + "amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI" ] } ] }, "-", - { - "Ref": "env" - } + "main" ] ] } @@ -283,9 +251,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsAuthenticatedPublic" - } + "s3:PutObject,s3:GetObject,s3:DeleteObject" ] }, "Resource": [ @@ -294,9 +260,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main", "/public/*" ] ] @@ -305,18 +269,11 @@ } ] }, - "PolicyName": { - "Ref": "s3PublicPolicy" - }, + "PolicyName": "Public_policy_38e5b439", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -330,9 +287,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsAuthenticatedProtected" - } + "s3:PutObject,s3:GetObject,s3:DeleteObject" ] }, "Resource": [ @@ -341,9 +296,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main", "/protected/${cognito-identity.amazonaws.com:sub}/*" ] ] @@ -352,18 +305,11 @@ } ] }, - "PolicyName": { - "Ref": "s3ProtectedPolicy" - }, + "PolicyName": "Protected_policy_38e5b439", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -377,9 +323,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsAuthenticatedPrivate" - } + "s3:PutObject,s3:GetObject,s3:DeleteObject" ] }, "Resource": [ @@ -388,9 +332,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main", "/private/${cognito-identity.amazonaws.com:sub}/*" ] ] @@ -399,18 +341,11 @@ } ] }, - "PolicyName": { - "Ref": "s3PrivatePolicy" - }, + "PolicyName": "Private_policy_38e5b439", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -424,9 +359,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsAuthenticatedUploads" - } + "s3:PutObject" ] }, "Resource": [ @@ -435,9 +368,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main", "/uploads/*" ] ] @@ -446,18 +377,11 @@ } ] }, - "PolicyName": { - "Ref": "s3UploadsPolicy" - }, + "PolicyName": "Uploads_policy_38e5b439", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateAuthUploads" }, "S3AuthReadPolicy": { @@ -473,9 +397,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main", "/protected/*" ] ] @@ -501,9 +423,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } + "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main" ] ] } @@ -511,83 +431,13 @@ ], "Version": "2012-10-17" }, - "PolicyName": { - "Ref": "s3ReadPolicy" - }, + "PolicyName": "read_policy_38e5b439", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "AuthReadAndList" }, - "S3GuestReadPolicy": { - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyDocument": { - "Statement": [ - { - "Action": "s3:GetObject", - "Effect": "Allow", - "Resource": { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, - "/protected/*" - ] - ] - } - }, - { - "Action": "s3:ListBucket", - "Condition": { - "StringLike": { - "s3:prefix": [ - "public/", - "public/*", - "protected/", - "protected/*" - ] - } - }, - "Effect": "Allow", - "Resource": { - "Fn::Join": [ - "", - [ - "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } - ] - ] - } - } - ], - "Version": "2012-10-17" - }, - "PolicyName": { - "Ref": "s3ReadPolicy" - }, - "Roles": [ - { - "Ref": "unauthRoleName" - } - ] - }, - "DependsOn": [ - "S3Bucket" - ], - "Condition": "GuestReadAndList" - }, "S3TriggerBucketPolicy": { "Type": "AWS::IAM::Policy", "Properties": { @@ -605,9 +455,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } + "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main" ] ] } @@ -627,9 +475,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "productcatalogf95af07481f845caa6594c26ac9c8ed331323-main", "/*" ] ] @@ -640,14 +486,9 @@ }, "PolicyName": "amplify-lambda-execution-policy-storage", "Roles": [ - { - "Ref": "functionS3Trigger1ef46783LambdaExecutionRole" - } + "S3Trigger1ef46783LambdaRole1ef46783-main" ] - }, - "DependsOn": [ - "S3Bucket" - ] + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.target.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.target.template.json index d32f945665a..9a1ece0d4ba 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.target.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.target.template.json @@ -1,109 +1,10 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.4.3\",\"stackType\":\"storage-S3\",\"metadata\":{}}", "Resources": { - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "bucketName" - }, - { - "Fn::Join": [ - "", - [ - { - "Ref": "bucketName" - }, - { - "Fn::Select": [ - 3, - { - "Fn::Split": [ - "-", - { - "Ref": "AWS::StackName" - } - ] - } - ] - }, - "-", - { - "Ref": "env" - } - ] - ] - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "Id": "S3CORSRuleId1", - "MaxAge": 3000 - } - ] - }, - "NotificationConfiguration": { - "LambdaConfigurations": [ - { - "Event": "s3:ObjectCreated:*", - "Function": { - "Ref": "functionS3Trigger1ef46783Arn" - } - }, - { - "Event": "s3:ObjectRemoved:*", - "Function": { - "Ref": "functionS3Trigger1ef46783Arn" - } - } - ] - }, - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - } - }, - "DependsOn": [ - "TriggerPermissions" - ], - "UpdateReplacePolicy": "Retain", - "DeletionPolicy": "Retain" - }, "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81": { "Type": "AWS::S3::BucketPolicy", "Properties": { - "Bucket": { - "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" - }, + "Bucket": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "PolicyDocument": { "Statement": [ { @@ -118,22 +19,12 @@ "AWS": "*" }, "Resource": [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", { "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/*" ] ] @@ -149,30 +40,15 @@ ], "Effect": "Allow", "Principal": { - "AWS": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "Arn" - ] - } + "AWS": "arn:aws:iam::123456789012:role/amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" }, "Resource": [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", { "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/*" ] ] @@ -190,19 +66,9 @@ "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketAutoDeleteObjectsCustomResource6974B5B5": { "Type": "Custom::S3AutoDeleteObjects", "Properties": { - "ServiceToken": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "Arn" - ] - }, - "BucketName": { - "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" - } + "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "BucketName": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" }, - "DependsOn": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -212,15 +78,8 @@ "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketNotifications20779ED4": { "Type": "Custom::S3BucketNotifications", "Properties": { - "ServiceToken": { - "Fn::GetAtt": [ - "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", - "Arn" - ] - }, - "BucketName": { - "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" - }, + "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691", + "BucketName": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "NotificationConfiguration": { "LambdaFunctionConfigurations": [ { @@ -244,10 +103,6 @@ "Managed": true, "SkipDestinationValidation": false }, - "DependsOn": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketAllowBucketNotificationsToamplifyproductcataloggen2mainbranch4b79ec0f9afunctionS3Trigger1ef46783gen2mainlambda8226525A5BBBE747", - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Notifications/Resource" } @@ -263,12 +118,7 @@ "SourceAccount": { "Ref": "AWS::AccountId" }, - "SourceArn": { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - } + "SourceArn": "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" }, "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/AllowBucketNotificationsToamplifyproductcataloggen2mainbranch4b79ec0f9afunctionS3Trigger1ef46783gen2mainlambda8226525A" @@ -311,29 +161,19 @@ "Timeout": 900, "MemorySize": 128, "Handler": "index.handler", - "Role": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "Arn" - ] - }, + "Role": "arn:aws:iam::123456789012:role/amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "Runtime": "nodejs22.x", "Description": { "Fn::Join": [ "", [ "Lambda function for auto-deleting objects in ", - { - "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" - }, + "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", " S3 bucket." ] ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", @@ -400,12 +240,7 @@ { "Action": "s3:PutBucketNotification", "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - } + "Resource": "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" } ], "Version": "2012-10-17" @@ -429,12 +264,7 @@ "ZipFile": "import boto3 # type: ignore\nimport json\nimport logging\nimport urllib.request\n\ns3 = boto3.client(\"s3\")\n\nEVENTBRIDGE_CONFIGURATION = 'EventBridgeConfiguration'\nCONFIGURATION_TYPES = [\"TopicConfigurations\", \"QueueConfigurations\", \"LambdaFunctionConfigurations\"]\n\ndef handler(event: dict, context):\n response_status = \"SUCCESS\"\n error_message = \"\"\n try:\n props = event[\"ResourceProperties\"]\n notification_configuration = props[\"NotificationConfiguration\"]\n managed = props.get('Managed', 'true').lower() == 'true'\n skipDestinationValidation = props.get('SkipDestinationValidation', 'false').lower() == 'true'\n stack_id = event['StackId']\n old = event.get(\"OldResourceProperties\", {}).get(\"NotificationConfiguration\", {})\n if managed:\n config = handle_managed(event[\"RequestType\"], notification_configuration)\n else:\n config = handle_unmanaged(props[\"BucketName\"], stack_id, event[\"RequestType\"], notification_configuration, old)\n s3.put_bucket_notification_configuration(Bucket=props[\"BucketName\"], NotificationConfiguration=config, SkipDestinationValidation=skipDestinationValidation)\n except Exception as e:\n logging.exception(\"Failed to put bucket notification configuration\")\n response_status = \"FAILED\"\n error_message = f\"Error: {str(e)}. \"\n finally:\n submit_response(event, context, response_status, error_message)\n\ndef handle_managed(request_type, notification_configuration):\n if request_type == 'Delete':\n return {}\n return notification_configuration\n\ndef handle_unmanaged(bucket, stack_id, request_type, notification_configuration, old):\n def get_id(n):\n n['Id'] = ''\n sorted_notifications = sort_filter_rules(n)\n strToHash=json.dumps(sorted_notifications, sort_keys=True).replace('\"Name\": \"prefix\"', '\"Name\": \"Prefix\"').replace('\"Name\": \"suffix\"', '\"Name\": \"Suffix\"')\n return f\"{stack_id}-{hash(strToHash)}\"\n def with_id(n):\n n['Id'] = get_id(n)\n return n\n\n external_notifications = {}\n existing_notifications = s3.get_bucket_notification_configuration(Bucket=bucket)\n for t in CONFIGURATION_TYPES:\n if request_type == 'Update':\n old_incoming_ids = [get_id(n) for n in old.get(t, [])]\n external_notifications[t] = [n for n in existing_notifications.get(t, []) if not get_id(n) in old_incoming_ids] \n elif request_type == 'Delete':\n external_notifications[t] = [n for n in existing_notifications.get(t, []) if not n['Id'].startswith(f\"{stack_id}-\")]\n elif request_type == 'Create':\n external_notifications[t] = [n for n in existing_notifications.get(t, [])]\n if EVENTBRIDGE_CONFIGURATION in existing_notifications:\n external_notifications[EVENTBRIDGE_CONFIGURATION] = existing_notifications[EVENTBRIDGE_CONFIGURATION]\n\n if request_type == 'Delete':\n return external_notifications\n\n notifications = {}\n for t in CONFIGURATION_TYPES:\n external = external_notifications.get(t, [])\n incoming = [with_id(n) for n in notification_configuration.get(t, [])]\n notifications[t] = external + incoming\n\n if EVENTBRIDGE_CONFIGURATION in notification_configuration:\n notifications[EVENTBRIDGE_CONFIGURATION] = notification_configuration[EVENTBRIDGE_CONFIGURATION]\n elif EVENTBRIDGE_CONFIGURATION in external_notifications:\n notifications[EVENTBRIDGE_CONFIGURATION] = external_notifications[EVENTBRIDGE_CONFIGURATION]\n\n return notifications\n\ndef submit_response(event: dict, context, response_status: str, error_message: str):\n response_body = json.dumps(\n {\n \"Status\": response_status,\n \"Reason\": f\"{error_message}See the details in CloudWatch Log Stream: {context.log_stream_name}\",\n \"PhysicalResourceId\": event.get(\"PhysicalResourceId\") or event[\"LogicalResourceId\"],\n \"StackId\": event[\"StackId\"],\n \"RequestId\": event[\"RequestId\"],\n \"LogicalResourceId\": event[\"LogicalResourceId\"],\n \"NoEcho\": False,\n }\n ).encode(\"utf-8\")\n headers = {\"content-type\": \"\", \"content-length\": str(len(response_body))}\n try:\n req = urllib.request.Request(url=event[\"ResponseURL\"], headers=headers, data=response_body, method=\"PUT\")\n with urllib.request.urlopen(req) as response:\n print(response.read().decode(\"utf-8\"))\n print(\"Status code: \" + response.reason)\n except Exception as e:\n print(\"send(..) failed executing request.urlopen(..): \" + str(e))\n\ndef sort_filter_rules(json_obj):\n if not isinstance(json_obj, dict):\n return json_obj\n for key, value in json_obj.items():\n if isinstance(value, dict):\n json_obj[key] = sort_filter_rules(value)\n elif isinstance(value, list):\n json_obj[key] = [sort_filter_rules(item) for item in value]\n if \"Filter\" in json_obj and \"Key\" in json_obj[\"Filter\"] and \"FilterRules\" in json_obj[\"Filter\"][\"Key\"]:\n filter_rules = json_obj[\"Filter\"][\"Key\"][\"FilterRules\"]\n sorted_filter_rules = sorted(filter_rules, key=lambda x: x[\"Name\"])\n json_obj[\"Filter\"][\"Key\"][\"FilterRules\"] = sorted_filter_rules\n return json_obj" }, "Handler": "index.handler", - "Role": { - "Fn::GetAtt": [ - "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", - "Arn" - ] - }, + "Role": "arn:aws:iam::123456789012:role/amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC", "Runtime": "python3.13", "Timeout": 300, "Tags": [ @@ -456,10 +286,6 @@ } ] }, - "DependsOn": [ - "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36", - "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Resource" } @@ -475,9 +301,7 @@ "created-by": "amplify" }, "Type": "String", - "Value": { - "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" - } + "Value": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" }, "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/PRODUCTCATALOGF_95_AF_07481_F_845_CAA_6594_C_26_AC_9_C_8_ED_331323_GEN_2_MAIN_BUCKET_NAMEParameter/Resource" @@ -496,12 +320,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/public/*" ] ] @@ -510,12 +329,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/protected/*" ] ] @@ -524,12 +338,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/private/*" ] ] @@ -544,12 +353,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/public/*" ] ] @@ -558,12 +362,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/protected/*" ] ] @@ -572,12 +371,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/private/*" ] ] @@ -599,12 +393,7 @@ } }, "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - } + "Resource": "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" }, { "Action": "s3:DeleteObject", @@ -614,12 +403,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/public/*" ] ] @@ -628,12 +412,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/protected/*" ] ] @@ -642,12 +421,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "Arn" - ] - }, + "arn:aws:s3:::amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam", "/private/*" ] ] @@ -677,6 +451,82 @@ "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" + }, + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketName": { + "Fn::Join": [ + "", + [ + "productcatalogf95af07481f845caa6594c26ac9c8ed3", + { + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + "amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI" + ] + } + ] + }, + "-", + "main" + ] + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "Id": "S3CORSRuleId1", + "MaxAge": 3000 + } + ] + }, + "NotificationConfiguration": { + "LambdaConfigurations": [ + { + "Event": "s3:ObjectCreated:*", + "Function": "arn:aws:lambda:us-east-1:123456789012:function:S3Trigger1ef46783-main" + }, + { + "Event": "s3:ObjectRemoved:*", + "Function": "arn:aws:lambda:us-east-1:123456789012:function:S3Trigger1ef46783-main" + } + ] + }, + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + } + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" } }, "Conditions": { @@ -955,9 +805,7 @@ }, "Outputs": { "amplifyproductcataloggen2mainbranch4b79ec0f9astorageproductcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketBD2F9EF2Ref": { - "Value": { - "Ref": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" - } + "Value": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" } } } \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.source.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.source.template.json index ee566c058c1..29d614e77f0 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.source.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.source.template.json @@ -10,9 +10,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:f8ab7c96-56f6-46d4-8346-0a5235221fba" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -62,9 +60,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:f8ab7c96-56f6-46d4-8346-0a5235221fba" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -384,29 +380,19 @@ }, "Outputs": { "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthUserPool33BA12FBRef": { - "Value": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "Value": "us-east-1_pXlpWF7QY" }, "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthUserPoolAppClient0435B83FRef": { - "Value": { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - } + "Value": "oqgm3faeod0cr1b4v63iv4a7a" }, "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthIdentityPool16941F52Ref": { - "Value": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "Value": "us-east-1:f8ab7c96-56f6-46d4-8346-0a5235221fba" }, "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthauthenticatedUserRole9FF894EARef": { - "Value": { - "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" - } + "Value": "amplify-projectboards-ge-amplifyAuthauthenticatedU-HuWvFKttqdhF" }, "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthunauthenticatedUserRole5DB50FFARef": { - "Value": { - "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" - } + "Value": "amplify-projectboards-ge-amplifyAuthunauthenticate-GHLvLgqZHYnT" } } } \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json index d5de4129ebf..0c82664165a 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json @@ -1,5 +1,6 @@ { "AWSTemplateFormatVersion": "2010-09-09", + "Description": "Temporary holding stack for Gen2 migration", "Resources": { "amplifyAuthUserPool4BA7F805": { "Type": "AWS::Cognito::UserPool", @@ -96,9 +97,7 @@ "SupportedIdentityProviders": [ "COGNITO" ], - "UserPoolId": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "UserPoolId": "us-east-1_pXlpWF7QY" }, "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPoolAppClient/Resource" @@ -119,9 +118,7 @@ "TokenValidityUnits": { "RefreshToken": "minutes" }, - "UserPoolId": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "UserPoolId": "us-east-1_pXlpWF7QY" }, "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPool/NativeAppClient/Resource" @@ -133,9 +130,7 @@ "AllowUnauthenticatedIdentities": true, "CognitoIdentityProviders": [ { - "ClientId": { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - }, + "ClientId": "oqgm3faeod0cr1b4v63iv4a7a", "ProviderName": { "Fn::Join": [ "", @@ -145,9 +140,7 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "us-east-1_pXlpWF7QY" ] ] } @@ -184,9 +177,7 @@ "amplifyAuthIdentityPoolRoleAttachment045F17C8": { "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "IdentityPoolId": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - }, + "IdentityPoolId": "us-east-1:f8ab7c96-56f6-46d4-8346-0a5235221fba", "RoleMappings": { "UserPoolWebClientRoleMapping": { "AmbiguousRoleResolution": "AuthenticatedRole", @@ -199,13 +190,9 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - { - "Ref": "amplifyAuthUserPool4BA7F805" - }, + "us-east-1_pXlpWF7QY", ":", - { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - } + "oqgm3faeod0cr1b4v63iv4a7a" ] ] }, @@ -213,27 +200,85 @@ } }, "Roles": { - "unauthenticated": { - "Fn::GetAtt": [ - "amplifyAuthunauthenticatedUserRole2B524D9E", - "Arn" - ] - }, - "authenticated": { - "Fn::GetAtt": [ - "amplifyAuthauthenticatedUserRoleD8DA3689", - "Arn" - ] - } + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-ge-amplifyAuthunauthenticate-GHLvLgqZHYnT", + "authenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-ge-amplifyAuthauthenticatedU-HuWvFKttqdhF" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/IdentityPoolRoleAttachment" } + }, + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "productcatalog" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" + } } }, "Outputs": {} diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.source.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.source.template.json index b64485d5894..ead58590739 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.source.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.source.template.json @@ -4,9 +4,7 @@ "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketPolicy8CF7A616": { "Type": "AWS::S3::BucketPolicy", "Properties": { - "Bucket": { - "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" - }, + "Bucket": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "PolicyDocument": { "Statement": [ { @@ -21,22 +19,12 @@ "AWS": "*" }, "Resource": [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", { "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/*" ] ] @@ -52,30 +40,15 @@ ], "Effect": "Allow", "Principal": { - "AWS": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "Arn" - ] - } + "AWS": "arn:aws:iam::123456789012:role/amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" }, "Resource": [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", { "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/*" ] ] @@ -93,19 +66,9 @@ "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketAutoDeleteObjectsCustomResource1C396A89": { "Type": "Custom::S3AutoDeleteObjects", "Properties": { - "ServiceToken": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "Arn" - ] - }, - "BucketName": { - "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" - } + "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "BucketName": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" }, - "DependsOn": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketPolicy8CF7A616" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -149,29 +112,19 @@ "Timeout": 900, "MemorySize": 128, "Handler": "index.handler", - "Role": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "Arn" - ] - }, + "Role": "arn:aws:iam::123456789012:role/amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "Runtime": "nodejs22.x", "Description": { "Fn::Join": [ "", [ "Lambda function for auto-deleting objects in ", - { - "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" - }, + "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", " S3 bucket." ] ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", @@ -189,9 +142,7 @@ "created-by": "amplify" }, "Type": "String", - "Value": { - "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" - } + "Value": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" }, "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/PROJECTBOARDS_34_B_9_A_7_F_3_C_2_CA_489293910116_C_994688_B_02940_GEN_2_MAIN_BUCKET_NAMEParameter/Resource" @@ -209,12 +160,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/public/*" ] ] @@ -231,12 +177,7 @@ } }, "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - } + "Resource": "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" } ], "Version": "2012-10-17" @@ -265,12 +206,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/public/*" ] ] @@ -279,12 +215,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/protected/*" ] ] @@ -293,12 +224,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/private/*" ] ] @@ -313,12 +239,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/public/*" ] ] @@ -327,12 +248,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/protected/*" ] ] @@ -341,12 +257,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/private/*" ] ] @@ -368,12 +279,7 @@ } }, "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - } + "Resource": "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" }, { "Action": "s3:DeleteObject", @@ -383,12 +289,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/public/*" ] ] @@ -397,12 +298,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/protected/*" ] ] @@ -411,12 +307,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/private/*" ] ] @@ -724,9 +615,7 @@ }, "Outputs": { "amplifyprojectboardsgen2mainbranch886dbd2decstorageprojectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucket2623A05BRef": { - "Value": { - "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" - } + "Value": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" } } } \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.target.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.target.template.json index 159fcea7fe2..548f64920d8 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.target.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.target.template.json @@ -1,6 +1,285 @@ { "AWSTemplateFormatVersion": "2010-09-09", + "Description": "Temporary holding stack for Gen2 migration", "Resources": { + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AccountRecoverySetting": { + "RecoveryMechanisms": [ + { + "Name": "verified_email", + "Priority": 1 + } + ] + }, + "AdminCreateUserConfig": { + "AllowAdminCreateUserOnly": false + }, + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Your verification code is {####}", + "EmailVerificationSubject": "Your verification code", + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": 8, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false, + "TemporaryPasswordValidityDays": 7 + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "SmsVerificationMessage": "The verification code to your new account is {####}", + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolTags": { + "amplify:app-id": "projectboards", + "amplify:branch-name": "gen2-main", + "amplify:deployment-type": "branch", + "amplify:friendly-name": "amplifyAuth", + "created-by": "amplify" + }, + "UsernameAttributes": [ + "email" + ], + "UsernameConfiguration": { + "CaseSensitive": false + }, + "VerificationMessageTemplate": { + "DefaultEmailOption": "CONFIRM_WITH_CODE", + "EmailMessage": "Your verification code is {####}", + "EmailSubject": "Your verification code", + "SmsMessage": "The verification code to your new account is {####}" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPool/Resource" + } + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlows": [ + "code" + ], + "AllowedOAuthFlowsUserPoolClient": true, + "AllowedOAuthScopes": [ + "profile", + "phone", + "email", + "openid", + "aws.cognito.signin.user.admin" + ], + "CallbackURLs": [ + "https://example.com" + ], + "ExplicitAuthFlows": [ + "ALLOW_CUSTOM_AUTH", + "ALLOW_USER_SRP_AUTH", + "ALLOW_REFRESH_TOKEN_AUTH" + ], + "PreventUserExistenceErrors": "ENABLED", + "SupportedIdentityProviders": [ + "COGNITO" + ], + "UserPoolId": "us-east-1_pXlpWF7QY" + }, + "Metadata": { + "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPoolAppClient/Resource" + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_pXlpWF7QY" + }, + "Metadata": { + "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": true, + "CognitoIdentityProviders": [ + { + "ClientId": "oqgm3faeod0cr1b4v63iv4a7a", + "ProviderName": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_pXlpWF7QY" + ] + ] + } + } + ], + "IdentityPoolTags": [ + { + "Key": "amplify:app-id", + "Value": "projectboards" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ], + "SupportedLoginProviders": {} + }, + "Metadata": { + "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/IdentityPool" + } + }, + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:f8ab7c96-56f6-46d4-8346-0a5235221fba", + "RoleMappings": { + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_pXlpWF7QY", + ":", + "oqgm3faeod0cr1b4v63iv4a7a" + ] + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-ge-amplifyAuthunauthenticate-GHLvLgqZHYnT", + "authenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-ge-amplifyAuthauthenticatedU-HuWvFKttqdhF" + } + }, + "Metadata": { + "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/IdentityPoolRoleAttachment" + } + }, + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "BucketKeyEnabled": false, + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "MaxAge": 3000 + } + ] + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "productcatalog" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" + }, + { + "Key": "aws-cdk:auto-delete-objects", + "Value": "true" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" + } + }, "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { "Type": "AWS::S3::Bucket", "Properties": { diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.source.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.source.template.json index f63ce7339e7..0a3ee93ddce 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.source.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.source.template.json @@ -114,9 +114,7 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - { - "Ref": "env" - }, + "main", "NONE" ] } @@ -138,36 +136,24 @@ ] }, "RoleName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "userpoolClientLambdaRole" - }, - { - "Fn::Join": [ - "", - [ - "upClientLambdaRole54040ecc", + "Fn::Join": [ + "", + [ + "upClientLambdaRole54040ecc", + { + "Fn::Select": [ + 3, { - "Fn::Select": [ - 3, - { - "Fn::Split": [ - "-", - { - "Ref": "AWS::StackName" - } - ] - } + "Fn::Split": [ + "-", + "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" ] - }, - "-", - { - "Ref": "env" } ] - ] - } + }, + "-", + "main" + ] ] } } @@ -176,49 +162,29 @@ "Outputs": { "IdentityPoolId": { "Description": "Id for the identity pool", - "Value": { - "Ref": "IdentityPool" - } + "Value": "us-east-1:88399477-86ba-4d93-aa1a-13242b53b791" }, "IdentityPoolName": { - "Value": { - "Fn::GetAtt": [ - "IdentityPool", - "Name" - ] - } + "Value": "projectboards54040ecc_identitypool_54040ecc__main" }, "UserPoolId": { "Description": "Id for the user pool", - "Value": { - "Ref": "UserPool" - } + "Value": "us-east-1_ct5s4IEz3" }, "UserPoolArn": { "Description": "Arn for the user pool", - "Value": { - "Fn::GetAtt": [ - "UserPool", - "Arn" - ] - } + "Value": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_ct5s4IEz3" }, "UserPoolName": { - "Value": { - "Ref": "userPoolName" - } + "Value": "projectboards54040ecc_userpool_54040ecc" }, "AppClientIDWeb": { "Description": "The user pool app client id for web", - "Value": { - "Ref": "UserPoolClientWeb" - } + "Value": "1vpeihq8svf62sepfnkuvp8sld" }, "AppClientID": { "Description": "The user pool app client id", - "Value": { - "Ref": "UserPoolClient" - } + "Value": "3dbqrlfs0a0g4a6ihsanen6i5" } } } \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.target.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.target.template.json index 5cc2cce7f81..9e7b4fc0c68 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.target.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.target.template.json @@ -1,176 +1,6 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.11.1\",\"stackType\":\"auth-Cognito\",\"metadata\":{}}", "Resources": { - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", - "Properties": { - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": { - "Ref": "emailVerificationMessage" - }, - "EmailVerificationSubject": { - "Ref": "emailVerificationSubject" - }, - "MfaConfiguration": { - "Ref": "mfaConfiguration" - }, - "Policies": { - "PasswordPolicy": { - "MinimumLength": { - "Ref": "passwordPolicyMinLength" - }, - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false - } - }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true - } - ], - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "userPoolName" - }, - { - "Fn::Join": [ - "", - [ - { - "Ref": "userPoolName" - }, - "-", - { - "Ref": "env" - } - ] - ] - } - ] - }, - "UsernameAttributes": { - "Ref": "usernameAttributes" - }, - "UsernameConfiguration": { - "CaseSensitive": false - } - } - }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "projec54040ecc_app_client", - "GenerateSecret": { - "Ref": "userpoolClientGenerateSecret" - }, - "RefreshTokenValidity": { - "Ref": "userpoolClientRefreshTokenValidity" - }, - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": { - "Ref": "UserPool" - } - }, - "DependsOn": [ - "UserPool" - ] - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "projec54040ecc_app_clientWeb", - "RefreshTokenValidity": { - "Ref": "userpoolClientRefreshTokenValidity" - }, - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": { - "Ref": "UserPool" - } - }, - "DependsOn": [ - "UserPool" - ] - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": { - "Ref": "allowUnauthenticatedIdentities" - }, - "CognitoIdentityProviders": [ - { - "ClientId": { - "Ref": "UserPoolClient" - }, - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": { - "Ref": "UserPool" - } - } - ] - } - }, - { - "ClientId": { - "Ref": "UserPoolClientWeb" - }, - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": { - "Ref": "UserPool" - } - } - ] - } - } - ], - "IdentityPoolName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - "projectboards54040ecc_identitypool_54040ecc", - { - "Fn::Join": [ - "", - [ - "projectboards54040ecc_identitypool_54040ecc__", - { - "Ref": "env" - } - ] - ] - } - ] - } - } - }, "amplifyAuthauthenticatedUserRoleD8DA3689": { "Type": "AWS::IAM::Role", "Properties": { @@ -180,9 +10,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:f8ab7c96-56f6-46d4-8346-0a5235221fba" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -232,9 +60,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "cognito-identity.amazonaws.com:aud": "us-east-1:f8ab7c96-56f6-46d4-8346-0a5235221fba" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -275,25 +101,6 @@ "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/unauthenticatedUserRole/Resource" } }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": { - "Ref": "IdentityPool" - }, - "Roles": { - "unauthenticated": { - "Ref": "unauthRoleArn" - }, - "authenticated": { - "Ref": "authRoleArn" - } - } - }, - "DependsOn": [ - "IdentityPool" - ] - }, "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { @@ -303,6 +110,132 @@ "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" + }, + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Your verification code is {####}", + "EmailVerificationSubject": "Your verification code", + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": "8", + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::Join": [ + "", + [ + "projectboards54040ecc_userpool_54040ecc", + "-", + "main" + ] + ] + }, + "UsernameAttributes": [ + "email" + ], + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "projec54040ecc_app_clientWeb", + "RefreshTokenValidity": "30", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_ct5s4IEz3" + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "projec54040ecc_app_client", + "GenerateSecret": "false", + "RefreshTokenValidity": "30", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_ct5s4IEz3" + } + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": "true", + "CognitoIdentityProviders": [ + { + "ClientId": "3dbqrlfs0a0g4a6ihsanen6i5", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_ct5s4IEz3" + } + ] + } + }, + { + "ClientId": "1vpeihq8svf62sepfnkuvp8sld", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_ct5s4IEz3" + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::Join": [ + "", + [ + "projectboards54040ecc_identitypool_54040ecc__", + "main" + ] + ] + } + } + }, + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:88399477-86ba-4d93-aa1a-13242b53b791", + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-main-02940-unauthRole", + "authenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-main-02940-authRole" + } + } } }, "Conditions": { @@ -573,29 +506,19 @@ }, "Outputs": { "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthUserPool33BA12FBRef": { - "Value": { - "Ref": "amplifyAuthUserPool4BA7F805" - } + "Value": "us-east-1_pXlpWF7QY" }, "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthUserPoolAppClient0435B83FRef": { - "Value": { - "Ref": "amplifyAuthUserPoolAppClient2626C6F8" - } + "Value": "oqgm3faeod0cr1b4v63iv4a7a" }, "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthIdentityPool16941F52Ref": { - "Value": { - "Ref": "amplifyAuthIdentityPool3FDE84CC" - } + "Value": "us-east-1:f8ab7c96-56f6-46d4-8346-0a5235221fba" }, "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthauthenticatedUserRole9FF894EARef": { - "Value": { - "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" - } + "Value": "amplify-projectboards-ge-amplifyAuthauthenticatedU-HuWvFKttqdhF" }, "amplifyprojectboardsgen2mainbranch886dbd2decauthamplifyAuthunauthenticatedUserRole5DB50FFARef": { - "Value": { - "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" - } + "Value": "amplify-projectboards-ge-amplifyAuthunauthenticate-GHLvLgqZHYnT" } } } \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.source.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.source.template.json index 2a102385b61..5df877c8f45 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.source.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.source.template.json @@ -84,9 +84,7 @@ "Conditions": { "ShouldNotCreateEnvResources": { "Fn::Equals": [ - { - "Ref": "env" - }, + "main", "NONE" ] }, @@ -94,9 +92,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsAuthenticatedPublic" - }, + "s3:PutObject,s3:GetObject,s3:DeleteObject", "DISALLOW" ] } @@ -106,9 +102,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsAuthenticatedProtected" - }, + "s3:PutObject,s3:GetObject,s3:DeleteObject", "DISALLOW" ] } @@ -118,9 +112,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsAuthenticatedPrivate" - }, + "s3:PutObject,s3:GetObject,s3:DeleteObject", "DISALLOW" ] } @@ -130,9 +122,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsAuthenticatedUploads" - }, + "s3:PutObject", "DISALLOW" ] } @@ -142,9 +132,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsGuestPublic" - }, + "s3:GetObject", "DISALLOW" ] } @@ -154,9 +142,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "s3PermissionsGuestUploads" - }, + "DISALLOW", "DISALLOW" ] } @@ -166,9 +152,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "AuthenticatedAllowList" - }, + "ALLOW", "DISALLOW" ] } @@ -178,9 +162,7 @@ "Fn::Not": [ { "Fn::Equals": [ - { - "Ref": "GuestAllowList" - }, + "ALLOW", "DISALLOW" ] } @@ -190,14 +172,10 @@ "Outputs": { "BucketName": { "Description": "Bucket name for the S3 bucket", - "Value": { - "Ref": "S3Bucket" - } + "Value": "projectboards34b9a7f3c2ca489293910116c994688b02940-main" }, "Region": { - "Value": { - "Ref": "AWS::Region" - } + "Value": "us-east-1" } }, "Resources": { @@ -212,9 +190,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsAuthenticatedPublic" - } + "s3:PutObject,s3:GetObject,s3:DeleteObject" ] }, "Resource": [ @@ -223,9 +199,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "projectboards34b9a7f3c2ca489293910116c994688b02940-main", "/public/*" ] ] @@ -234,18 +208,11 @@ } ] }, - "PolicyName": { - "Ref": "s3PublicPolicy" - }, + "PolicyName": "Public_policy_69f8ff1c", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -259,9 +226,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsAuthenticatedProtected" - } + "s3:PutObject,s3:GetObject,s3:DeleteObject" ] }, "Resource": [ @@ -270,9 +235,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "projectboards34b9a7f3c2ca489293910116c994688b02940-main", "/protected/${cognito-identity.amazonaws.com:sub}/*" ] ] @@ -281,18 +244,11 @@ } ] }, - "PolicyName": { - "Ref": "s3ProtectedPolicy" - }, + "PolicyName": "Protected_policy_69f8ff1c", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -306,9 +262,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsAuthenticatedPrivate" - } + "s3:PutObject,s3:GetObject,s3:DeleteObject" ] }, "Resource": [ @@ -317,9 +271,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "projectboards34b9a7f3c2ca489293910116c994688b02940-main", "/private/${cognito-identity.amazonaws.com:sub}/*" ] ] @@ -328,18 +280,11 @@ } ] }, - "PolicyName": { - "Ref": "s3PrivatePolicy" - }, + "PolicyName": "Private_policy_69f8ff1c", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -353,9 +298,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsAuthenticatedUploads" - } + "s3:PutObject" ] }, "Resource": [ @@ -364,9 +307,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "projectboards34b9a7f3c2ca489293910116c994688b02940-main", "/uploads/*" ] ] @@ -375,18 +316,11 @@ } ] }, - "PolicyName": { - "Ref": "s3UploadsPolicy" - }, + "PolicyName": "Uploads_policy_69f8ff1c", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -400,9 +334,7 @@ "Action": { "Fn::Split": [ ",", - { - "Ref": "s3PermissionsGuestPublic" - } + "s3:GetObject" ] }, "Resource": [ @@ -411,9 +343,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "projectboards34b9a7f3c2ca489293910116c994688b02940-main", "/public/*" ] ] @@ -422,18 +352,11 @@ } ] }, - "PolicyName": { - "Ref": "s3PublicPolicy" - }, + "PolicyName": "Public_policy_69f8ff1c", "Roles": [ - { - "Ref": "unauthRoleName" - } + "amplify-projectboards-main-02940-unauthRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -449,9 +372,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "projectboards34b9a7f3c2ca489293910116c994688b02940-main", "/protected/*" ] ] @@ -477,9 +398,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } + "projectboards34b9a7f3c2ca489293910116c994688b02940-main" ] ] } @@ -487,18 +406,11 @@ ], "Version": "2012-10-17" }, - "PolicyName": { - "Ref": "s3ReadPolicy" - }, + "PolicyName": "read_policy_69f8ff1c", "Roles": [ - { - "Ref": "authRoleName" - } + "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -514,9 +426,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - }, + "projectboards34b9a7f3c2ca489293910116c994688b02940-main", "/protected/*" ] ] @@ -540,9 +450,7 @@ "", [ "arn:aws:s3:::", - { - "Ref": "S3Bucket" - } + "projectboards34b9a7f3c2ca489293910116c994688b02940-main" ] ] } @@ -550,18 +458,11 @@ ], "Version": "2012-10-17" }, - "PolicyName": { - "Ref": "s3ReadPolicy" - }, + "PolicyName": "read_policy_69f8ff1c", "Roles": [ - { - "Ref": "unauthRoleName" - } + "amplify-projectboards-main-02940-unauthRole" ] }, - "DependsOn": [ - "S3Bucket" - ], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.target.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.target.template.json index 4f69c5395a5..3f1975883b2 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.target.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.target.template.json @@ -1,90 +1,10 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.4.3\",\"stackType\":\"storage-S3\",\"metadata\":{}}", "Resources": { - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "bucketName" - }, - { - "Fn::Join": [ - "", - [ - { - "Ref": "bucketName" - }, - { - "Fn::Select": [ - 3, - { - "Fn::Split": [ - "-", - { - "Ref": "AWS::StackName" - } - ] - } - ] - }, - "-", - { - "Ref": "env" - } - ] - ] - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "Id": "S3CORSRuleId1", - "MaxAge": 3000 - } - ] - }, - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - } - }, - "UpdateReplacePolicy": "Retain", - "DeletionPolicy": "Retain" - }, "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketPolicy8CF7A616": { "Type": "AWS::S3::BucketPolicy", "Properties": { - "Bucket": { - "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" - }, + "Bucket": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "PolicyDocument": { "Statement": [ { @@ -99,22 +19,12 @@ "AWS": "*" }, "Resource": [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", { "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/*" ] ] @@ -130,30 +40,15 @@ ], "Effect": "Allow", "Principal": { - "AWS": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "Arn" - ] - } + "AWS": "arn:aws:iam::123456789012:role/amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" }, "Resource": [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", { "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/*" ] ] @@ -171,19 +66,9 @@ "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketAutoDeleteObjectsCustomResource1C396A89": { "Type": "Custom::S3AutoDeleteObjects", "Properties": { - "ServiceToken": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", - "Arn" - ] - }, - "BucketName": { - "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" - } + "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "BucketName": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" }, - "DependsOn": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketPolicy8CF7A616" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -227,29 +112,19 @@ "Timeout": 900, "MemorySize": 128, "Handler": "index.handler", - "Role": { - "Fn::GetAtt": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", - "Arn" - ] - }, + "Role": "arn:aws:iam::123456789012:role/amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", "Runtime": "nodejs22.x", "Description": { "Fn::Join": [ "", [ "Lambda function for auto-deleting objects in ", - { - "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" - }, + "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", " S3 bucket." ] ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", @@ -267,9 +142,7 @@ "created-by": "amplify" }, "Type": "String", - "Value": { - "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" - } + "Value": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" }, "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/PROJECTBOARDS_34_B_9_A_7_F_3_C_2_CA_489293910116_C_994688_B_02940_GEN_2_MAIN_BUCKET_NAMEParameter/Resource" @@ -287,12 +160,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/public/*" ] ] @@ -309,12 +177,7 @@ } }, "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - } + "Resource": "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" } ], "Version": "2012-10-17" @@ -343,12 +206,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/public/*" ] ] @@ -357,12 +215,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/protected/*" ] ] @@ -371,12 +224,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/private/*" ] ] @@ -391,12 +239,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/public/*" ] ] @@ -405,12 +248,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/protected/*" ] ] @@ -419,12 +257,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/private/*" ] ] @@ -446,12 +279,7 @@ } }, "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - } + "Resource": "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" }, { "Action": "s3:DeleteObject", @@ -461,12 +289,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/public/*" ] ] @@ -475,12 +298,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/protected/*" ] ] @@ -489,12 +307,7 @@ "Fn::Join": [ "", [ - { - "Fn::GetAtt": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "Arn" - ] - }, + "arn:aws:s3:::amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv", "/private/*" ] ] @@ -524,6 +337,70 @@ "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" + }, + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketName": { + "Fn::Join": [ + "", + [ + "projectboards34b9a7f3c2ca489293910116c994688b", + { + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + "amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY" + ] + } + ] + }, + "-", + "main" + ] + ] + }, + "CorsConfiguration": { + "CorsRules": [ + { + "AllowedHeaders": [ + "*" + ], + "AllowedMethods": [ + "GET", + "HEAD", + "PUT", + "POST", + "DELETE" + ], + "AllowedOrigins": [ + "*" + ], + "ExposedHeaders": [ + "x-amz-server-side-encryption", + "x-amz-request-id", + "x-amz-id-2", + "ETag" + ], + "Id": "S3CORSRuleId1", + "MaxAge": 3000 + } + ] + }, + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + } + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" } }, "Conditions": { @@ -802,9 +679,7 @@ }, "Outputs": { "amplifyprojectboardsgen2mainbranch886dbd2decstorageprojectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucket2623A05BRef": { - "Value": { - "Ref": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" - } + "Value": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" } } } \ No newline at end of file diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts deleted file mode 100644 index d9e1bdf86e0..00000000000 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-mapping.test.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { AuthCognitoForwardRefactorer } from '../../../../commands/gen2-migration/refactor/auth/auth-cognito-forward'; -import { CFNResource } from '../../../../commands/gen2-migration/cfn-template'; -import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; -import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; -import { Cfn } from '../../../../commands/gen2-migration/refactor/cfn'; -import { ResourceMapping } from '@aws-sdk/client-cloudformation'; -import { noOpLogger } from '../_framework/logger'; - -function toIdMap(mappings: ResourceMapping[]): Map { - return new Map(mappings.map((m) => [m.Source!.LogicalResourceId!, m.Destination!.LogicalResourceId!])); -} - -describe('AuthCognitoForwardRefactorer.buildResourceMappings - UserPoolClient disambiguation', () => { - function createRefactorer() { - const clients = new AwsClients({ region: 'us-east-1' }); - const gen1Env = new StackFacade(clients, 'gen1'); - const gen2Branch = new StackFacade(clients, 'gen2'); - return new (class extends AuthCognitoForwardRefactorer { - constructor() { - super( - gen1Env, - gen2Branch, - clients, - 'us-east-1', - '123456789', - noOpLogger(), - 'appId', - 'main', - { - category: 'auth', - resourceName: 'test', - service: 'Cognito', - key: 'auth:Cognito', - }, - null as unknown as Cfn, - ); - } - public async testBuildResourceMappings( - source: Map, - target: Map, - ): Promise { - return this.buildResourceMappings(source, target, 'gen1-auth', 'gen2-auth'); - } - })(); - } - - it('maps main auth resources with correct Web/Native disambiguation', async () => { - const refactorer = createRefactorer(); - - const targetResources = new Map([ - ['amplifyAuthUserPool1234ABCD', { Type: 'AWS::Cognito::UserPool', Properties: {} }], - ['amplifyAuthUserPoolAppClient1234ABCD', { Type: 'AWS::Cognito::UserPoolClient', Properties: {} }], - ['amplifyAuthUserPoolNativeAppClient1234ABCD', { Type: 'AWS::Cognito::UserPoolClient', Properties: {} }], - ['amplifyAuthIdentityPool1234ABCD', { Type: 'AWS::Cognito::IdentityPool', Properties: {} }], - ['amplifyAuthIdentityPoolRoleMap1234ABCD', { Type: 'AWS::Cognito::IdentityPoolRoleAttachment', Properties: {} }], - ]); - - const mainAuthSource = new Map([ - ['UserPool', { Type: 'AWS::Cognito::UserPool', Properties: {} }], - ['UserPoolClientWeb', { Type: 'AWS::Cognito::UserPoolClient', Properties: {} }], - ['UserPoolClient', { Type: 'AWS::Cognito::UserPoolClient', Properties: {} }], - ['IdentityPool', { Type: 'AWS::Cognito::IdentityPool', Properties: {} }], - ['IdentityPoolRoleMap', { Type: 'AWS::Cognito::IdentityPoolRoleAttachment', Properties: {} }], - ]); - - const mappings = await refactorer.testBuildResourceMappings(mainAuthSource, targetResources); - const map = toIdMap(mappings); - - // All source resources are mapped - expect(map.size).toBe(5); - - // UserPoolClient Web/Native disambiguation is correct - expect(map.get('UserPoolClientWeb')).toBe('amplifyAuthUserPoolAppClient1234ABCD'); - expect(map.get('UserPoolClient')).toBe('amplifyAuthUserPoolNativeAppClient1234ABCD'); - - // Other mappings - expect(map.get('UserPool')).toBe('amplifyAuthUserPool1234ABCD'); - }); -}); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-cognito-forward.test.ts similarity index 75% rename from packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts rename to packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-cognito-forward.test.ts index 9925bf408dd..0b93f82949a 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-forward-plan.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-cognito-forward.test.ts @@ -1,8 +1,8 @@ -import { AuthCognitoForwardRefactorer } from '../../../../commands/gen2-migration/refactor/auth/auth-cognito-forward'; -import { CFNTemplate } from '../../../../commands/gen2-migration/cfn-template'; -import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; -import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; -import { noOpLogger } from '../_framework/logger'; +import { AuthCognitoForwardRefactorer } from '../../../../../commands/gen2-migration/refactor/auth/auth-cognito-forward'; +import { CFNResource, CFNTemplate } from '../../../../../commands/gen2-migration/cfn-template'; +import { AwsClients } from '../../../../../commands/gen2-migration/aws-clients'; +import { StackFacade } from '../../../../../commands/gen2-migration/refactor/stack-facade'; +import { noOpLogger } from '../../_framework/logger'; import { mockClient } from 'aws-sdk-client-mock'; import { CloudFormationClient, @@ -13,10 +13,11 @@ import { CreateChangeSetCommand, DescribeChangeSetCommand, DeleteChangeSetCommand, + ResourceMapping, } from '@aws-sdk/client-cloudformation'; import { SSMClient } from '@aws-sdk/client-ssm'; import { CognitoIdentityProviderClient, DescribeIdentityProviderCommand } from '@aws-sdk/client-cognito-identity-provider'; -import { Cfn } from '../../../../commands/gen2-migration/refactor/cfn'; +import { Cfn } from '../../../../../commands/gen2-migration/refactor/cfn'; const ts = new Date(); const rs = ResourceStatus.CREATE_COMPLETE; @@ -277,3 +278,70 @@ describe('AuthCognitoForwardRefactorer.plan() — operation sequence', () => { await expect(refactorer.plan()).rejects.toThrow('Unable to find target stack'); }); }); + +function toIdMap(mappings: ResourceMapping[]): Map { + return new Map(mappings.map((m) => [m.Source!.LogicalResourceId!, m.Destination!.LogicalResourceId!])); +} + +describe('AuthCognitoForwardRefactorer.buildResourceMappings — UserPoolClient disambiguation', () => { + function createRefactorer() { + const clients = new AwsClients({ region: 'us-east-1' }); + const gen1Env = new StackFacade(clients, 'gen1'); + const gen2Branch = new StackFacade(clients, 'gen2'); + return new (class extends AuthCognitoForwardRefactorer { + constructor() { + super( + gen1Env, + gen2Branch, + clients, + 'us-east-1', + '123456789', + noOpLogger(), + 'appId', + 'main', + { + category: 'auth', + resourceName: 'test', + service: 'Cognito', + key: 'auth:Cognito', + }, + null as unknown as Cfn, + ); + } + public async testBuildResourceMappings( + source: Map, + target: Map, + ): Promise { + return this.buildResourceMappings(source, target, 'gen1-auth', 'gen2-auth'); + } + })(); + } + + it('maps main auth resources with correct Web/Native disambiguation', async () => { + const refactorer = createRefactorer(); + + const targetResources = new Map([ + ['amplifyAuthUserPool1234ABCD', { Type: 'AWS::Cognito::UserPool', Properties: {} }], + ['amplifyAuthUserPoolAppClient1234ABCD', { Type: 'AWS::Cognito::UserPoolClient', Properties: {} }], + ['amplifyAuthUserPoolNativeAppClient1234ABCD', { Type: 'AWS::Cognito::UserPoolClient', Properties: {} }], + ['amplifyAuthIdentityPool1234ABCD', { Type: 'AWS::Cognito::IdentityPool', Properties: {} }], + ['amplifyAuthIdentityPoolRoleMap1234ABCD', { Type: 'AWS::Cognito::IdentityPoolRoleAttachment', Properties: {} }], + ]); + + const mainAuthSource = new Map([ + ['UserPool', { Type: 'AWS::Cognito::UserPool', Properties: {} }], + ['UserPoolClientWeb', { Type: 'AWS::Cognito::UserPoolClient', Properties: {} }], + ['UserPoolClient', { Type: 'AWS::Cognito::UserPoolClient', Properties: {} }], + ['IdentityPool', { Type: 'AWS::Cognito::IdentityPool', Properties: {} }], + ['IdentityPoolRoleMap', { Type: 'AWS::Cognito::IdentityPoolRoleAttachment', Properties: {} }], + ]); + + const mappings = await refactorer.testBuildResourceMappings(mainAuthSource, targetResources); + const map = toIdMap(mappings); + + expect(map.size).toBe(5); + expect(map.get('UserPoolClientWeb')).toBe('amplifyAuthUserPoolAppClient1234ABCD'); + expect(map.get('UserPoolClient')).toBe('amplifyAuthUserPoolNativeAppClient1234ABCD'); + expect(map.get('UserPool')).toBe('amplifyAuthUserPool1234ABCD'); + }); +}); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-cognito-rollback.test.ts similarity index 89% rename from packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts rename to packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-cognito-rollback.test.ts index ac170fc1a47..a65cede8a74 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth-rollback-plan.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-cognito-rollback.test.ts @@ -1,8 +1,8 @@ -import { AuthCognitoRollbackRefactorer } from '../../../../commands/gen2-migration/refactor/auth/auth-cognito-rollback'; -import { CFNTemplate } from '../../../../commands/gen2-migration/cfn-template'; -import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; -import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; -import { noOpLogger } from '../_framework/logger'; +import { AuthCognitoRollbackRefactorer } from '../../../../../commands/gen2-migration/refactor/auth/auth-cognito-rollback'; +import { CFNTemplate } from '../../../../../commands/gen2-migration/cfn-template'; +import { AwsClients } from '../../../../../commands/gen2-migration/aws-clients'; +import { StackFacade } from '../../../../../commands/gen2-migration/refactor/stack-facade'; +import { noOpLogger } from '../../_framework/logger'; import { mockClient } from 'aws-sdk-client-mock'; import { CloudFormationClient, @@ -14,7 +14,7 @@ import { DescribeChangeSetCommand, DeleteChangeSetCommand, } from '@aws-sdk/client-cloudformation'; -import { Cfn } from '../../../../commands/gen2-migration/refactor/cfn'; +import { Cfn } from '../../../../../commands/gen2-migration/refactor/cfn'; const ts = new Date(); const rs = ResourceStatus.CREATE_COMPLETE; diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/build-refactor-templates.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/build-refactor-templates.test.ts deleted file mode 100644 index 07fda32f0a1..00000000000 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/build-refactor-templates.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { - MIGRATION_PLACEHOLDER_LOGICAL_ID, - PLACEHOLDER_RESOURCE, -} from '../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; -import { ResourceMapping } from '@aws-sdk/client-cloudformation'; - -describe('placeholder constants', () => { - it('placeholder resource is a WaitConditionHandle', () => { - expect(PLACEHOLDER_RESOURCE.Type).toBe('AWS::CloudFormation::WaitConditionHandle'); - }); - - it('placeholder logical ID is MigrationPlaceholder', () => { - expect(MIGRATION_PLACEHOLDER_LOGICAL_ID).toBe('MigrationPlaceholder'); - }); -}); - -describe('ResourceMapping shape', () => { - it('carries source and destination stack + logical ID', () => { - const mapping: ResourceMapping = { - Source: { StackName: 'gen1-auth', LogicalResourceId: 'UserPool' }, - Destination: { StackName: 'gen2-auth', LogicalResourceId: 'amplifyAuthUserPool' }, - }; - expect(mapping.Source!.StackName).toBe('gen1-auth'); - expect(mapping.Destination!.LogicalResourceId).toBe('amplifyAuthUserPool'); - }); -}); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts deleted file mode 100644 index ce6c9936f23..00000000000 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/default-resource-mappings.test.ts +++ /dev/null @@ -1,136 +0,0 @@ -import { ForwardCategoryRefactorer } from '../../../../commands/gen2-migration/refactor/workflow/forward-category-refactorer'; -import { RollbackCategoryRefactorer } from '../../../../commands/gen2-migration/refactor/workflow/rollback-category-refactorer'; -import { CFNResource } from '../../../../commands/gen2-migration/cfn-template'; -import { ResourceMapping } from '@aws-sdk/client-cloudformation'; -import { noOpLogger } from '../_framework/logger'; -import { Cfn } from '../../../../commands/gen2-migration/refactor/cfn'; - -class TestForwardRefactorer extends ForwardCategoryRefactorer { - protected async fetchSourceStackId() { - return 'gen1-stack'; - } - protected async fetchDestStackId() { - return 'gen2-stack'; - } - protected resourceTypes() { - return ['AWS::S3::Bucket']; - } - public async testBuildResourceMappings(source: Map, target: Map): Promise { - return this.buildResourceMappings(source, target, 'gen1-stack', 'gen2-stack'); - } -} - -class TestRollbackRefactorer extends RollbackCategoryRefactorer { - private readonly ids: ReadonlyMap; - - constructor(ids: ReadonlyMap) { - super( - null as any, - null as any, - null as any, - 'us-east-1', - '123', - noOpLogger(), - { category: 'storage', resourceName: 'test', service: 'S3', key: 'storage:S3' as const }, - null as unknown as Cfn, - ); - this.ids = ids; - } - // eslint-disable-next-line @typescript-eslint/no-unused-vars - protected targetLogicalId(sourceId: string, _sourceResource: CFNResource): string | undefined { - return this.ids.get(sourceId); - } - protected async fetchSourceStackId() { - return 'gen2-stack'; - } - protected async fetchDestStackId() { - return 'gen1-stack'; - } - protected resourceTypes() { - return []; - } - public async testBuildResourceMappings(source: Map, target: Map): Promise { - return this.buildResourceMappings(source, target, 'gen2-stack', 'gen1-stack'); - } -} - -const r = (type: string): CFNResource => ({ Type: type, Properties: {} }); - -function toIdMap(mappings: ResourceMapping[]): Map { - return new Map(mappings.map((m) => [m.Source!.LogicalResourceId!, m.Destination!.LogicalResourceId!])); -} - -describe('ForwardCategoryRefactorer.buildResourceMappings (default type-matching)', () => { - const refactorer = new TestForwardRefactorer( - null as any, - null as any, - null as any, - 'us-east-1', - '123', - noOpLogger(), - { category: 'storage', resourceName: 'test', service: 'S3', key: 'storage:S3' as const }, - null as unknown as Cfn, - ); - - it('maps single resource per type', async () => { - const mappings = await refactorer.testBuildResourceMappings( - new Map([['S3Bucket', r('AWS::S3::Bucket')]]), - new Map([['amplifyBucket', r('AWS::S3::Bucket')]]), - ); - const map = toIdMap(mappings); - expect(map.size).toBe(1); - expect(map.get('S3Bucket')).toBe('amplifyBucket'); - }); - - it('maps multiple types independently', async () => { - const mappings = await refactorer.testBuildResourceMappings( - new Map([ - ['Bucket', r('AWS::S3::Bucket')], - ['Table', r('AWS::DynamoDB::Table')], - ]), - new Map([ - ['GenBucket', r('AWS::S3::Bucket')], - ['GenTable', r('AWS::DynamoDB::Table')], - ]), - ); - const map = toIdMap(mappings); - expect(map.size).toBe(2); - expect(map.get('Bucket')).toBe('GenBucket'); - expect(map.get('Table')).toBe('GenTable'); - }); - - it('throws when no types match', async () => { - await expect( - refactorer.testBuildResourceMappings(new Map([['Stream', r('AWS::Kinesis::Stream')]]), new Map([['Bucket', r('AWS::S3::Bucket')]])), - ).rejects.toThrow("Source resource 'Stream' (AWS::Kinesis::Stream) has no corresponding target resource"); - }); -}); - -describe('RollbackCategoryRefactorer.buildResourceMappings (gen1LogicalIds-based)', () => { - it('maps source resources to Gen1 logical IDs', async () => { - const refactorer = new TestRollbackRefactorer( - new Map([ - ['amplifyBucket', 'S3Bucket'], - ['amplifyTable', 'DynamoDBTable'], - ]), - ); - const mappings = await refactorer.testBuildResourceMappings( - new Map([ - ['amplifyBucket', r('AWS::S3::Bucket')], - ['amplifyTable', r('AWS::DynamoDB::Table')], - ]), - new Map(), - ); - const map = toIdMap(mappings); - expect(map.size).toBe(2); - expect(map.get('amplifyBucket')).toBe('S3Bucket'); - expect(map.get('amplifyTable')).toBe('DynamoDBTable'); - }); - - it('throws for resource with no known Gen1 logical ID', async () => { - const refactorer = new TestRollbackRefactorer(new Map()); - await expect(refactorer.testBuildResourceMappings(new Map([['amplifyTopic', r('AWS::SNS::Topic')]]), new Map())).rejects.toThrow( - 'Unable to determine target id of resource amplifyTopic', - ); - }); -}); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-condition-resolver.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/resolvers/cfn-condition-resolver.test.ts similarity index 97% rename from packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-condition-resolver.test.ts rename to packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/resolvers/cfn-condition-resolver.test.ts index 8d821cca276..57979966a0c 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-condition-resolver.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/resolvers/cfn-condition-resolver.test.ts @@ -1,5 +1,5 @@ -import { resolveConditions } from '../../../../commands/gen2-migration/refactor/resolvers/cfn-condition-resolver'; -import { CFNTemplate } from '../../../../commands/gen2-migration/cfn-template'; +import { resolveConditions } from '../../../../../commands/gen2-migration/refactor/resolvers/cfn-condition-resolver'; +import { CFNTemplate } from '../../../../../commands/gen2-migration/cfn-template'; /** * Builds a template with one condition gating one resource. diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-dependency-resolver.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/resolvers/cfn-dependency-resolver.test.ts similarity index 88% rename from packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-dependency-resolver.test.ts rename to packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/resolvers/cfn-dependency-resolver.test.ts index 8a3ab543f0c..1ef045e91fd 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-dependency-resolver.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/resolvers/cfn-dependency-resolver.test.ts @@ -1,5 +1,5 @@ -import { resolveDependencies } from '../../../../commands/gen2-migration/refactor/resolvers/cfn-dependency-resolver'; -import { CFNTemplate } from '../../../../commands/gen2-migration/cfn-template'; +import { resolveDependencies } from '../../../../../commands/gen2-migration/refactor/resolvers/cfn-dependency-resolver'; +import { CFNTemplate } from '../../../../../commands/gen2-migration/cfn-template'; const makeTemplate = (resources: Record): CFNTemplate => ({ AWSTemplateFormatVersion: '2010-09-09', diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-output-resolver.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/resolvers/cfn-output-resolver.test.ts similarity index 98% rename from packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-output-resolver.test.ts rename to packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/resolvers/cfn-output-resolver.test.ts index 703361e6867..e3db01b33a7 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-output-resolver.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/resolvers/cfn-output-resolver.test.ts @@ -1,5 +1,5 @@ -import { resolveOutputs } from '../../../../commands/gen2-migration/refactor/resolvers/cfn-output-resolver'; -import { CFNTemplate } from '../../../../commands/gen2-migration/cfn-template'; +import { resolveOutputs } from '../../../../../commands/gen2-migration/refactor/resolvers/cfn-output-resolver'; +import { CFNTemplate } from '../../../../../commands/gen2-migration/cfn-template'; const baseTemplate: CFNTemplate = { AWSTemplateFormatVersion: '2010-09-09', diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-parameter-resolver.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/resolvers/cfn-parameter-resolver.test.ts similarity index 95% rename from packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-parameter-resolver.test.ts rename to packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/resolvers/cfn-parameter-resolver.test.ts index 5a508bf8519..90d458ff267 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-parameter-resolver.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/resolvers/cfn-parameter-resolver.test.ts @@ -1,5 +1,5 @@ -import { resolveParameters } from '../../../../commands/gen2-migration/refactor/resolvers/cfn-parameter-resolver'; -import { CFNTemplate } from '../../../../commands/gen2-migration/cfn-template'; +import { resolveParameters } from '../../../../../commands/gen2-migration/refactor/resolvers/cfn-parameter-resolver'; +import { CFNTemplate } from '../../../../../commands/gen2-migration/cfn-template'; const baseTemplate: CFNTemplate = { AWSTemplateFormatVersion: '2010-09-09', diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-tree-walker.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/resolvers/cfn-tree-walker.test.ts similarity index 93% rename from packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-tree-walker.test.ts rename to packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/resolvers/cfn-tree-walker.test.ts index 558f5076538..9292c2eb16d 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/cfn-tree-walker.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/resolvers/cfn-tree-walker.test.ts @@ -1,4 +1,4 @@ -import { walkCfnTree } from '../../../../commands/gen2-migration/refactor/resolvers/cfn-tree-walker'; +import { walkCfnTree } from '../../../../../commands/gen2-migration/refactor/resolvers/cfn-tree-walker'; describe('walkCfnTree', () => { it('returns primitives unchanged', () => { diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/category-refactorer.test.ts similarity index 91% rename from packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts rename to packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/category-refactorer.test.ts index 7855d1dc9aa..183cb67225a 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/category-plan-orchestration.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/category-refactorer.test.ts @@ -1,11 +1,11 @@ -import { StorageS3ForwardRefactorer } from '../../../../commands/gen2-migration/refactor/storage/storage-forward'; -import { StorageS3RollbackRefactorer } from '../../../../commands/gen2-migration/refactor/storage/storage-rollback'; -import { AnalyticsKinesisForwardRefactorer } from '../../../../commands/gen2-migration/refactor/analytics/analytics-forward'; -import { AnalyticsKinesisRollbackRefactorer } from '../../../../commands/gen2-migration/refactor/analytics/analytics-rollback'; -import { CFNTemplate } from '../../../../commands/gen2-migration/cfn-template'; -import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; -import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; -import { noOpLogger } from '../_framework/logger'; +import { StorageS3ForwardRefactorer } from '../../../../../commands/gen2-migration/refactor/storage/storage-forward'; +import { StorageS3RollbackRefactorer } from '../../../../../commands/gen2-migration/refactor/storage/storage-rollback'; +import { AnalyticsKinesisForwardRefactorer } from '../../../../../commands/gen2-migration/refactor/analytics/analytics-forward'; +import { AnalyticsKinesisRollbackRefactorer } from '../../../../../commands/gen2-migration/refactor/analytics/analytics-rollback'; +import { CFNTemplate } from '../../../../../commands/gen2-migration/cfn-template'; +import { AwsClients } from '../../../../../commands/gen2-migration/aws-clients'; +import { StackFacade } from '../../../../../commands/gen2-migration/refactor/stack-facade'; +import { noOpLogger } from '../../_framework/logger'; import { mockClient } from 'aws-sdk-client-mock'; import { CloudFormationClient, @@ -17,7 +17,7 @@ import { DescribeChangeSetCommand, DeleteChangeSetCommand, } from '@aws-sdk/client-cloudformation'; -import { Cfn } from '../../../../commands/gen2-migration/refactor/cfn'; +import { Cfn } from '../../../../../commands/gen2-migration/refactor/cfn'; const ts = new Date(); const rs = ResourceStatus.CREATE_COMPLETE; @@ -367,3 +367,18 @@ describe('Analytics wiring tests', () => { expect(ops).toHaveLength(1); // no-op operation }); }); + +import { + MIGRATION_PLACEHOLDER_LOGICAL_ID, + PLACEHOLDER_RESOURCE, +} from '../../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; + +describe('placeholder constants', () => { + it('placeholder resource is a WaitConditionHandle', () => { + expect(PLACEHOLDER_RESOURCE.Type).toBe('AWS::CloudFormation::WaitConditionHandle'); + }); + + it('placeholder logical ID is MigrationPlaceholder', () => { + expect(MIGRATION_PLACEHOLDER_LOGICAL_ID).toBe('MigrationPlaceholder'); + }); +}); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts similarity index 65% rename from packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts rename to packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts index 5b3bf58093f..4478faf4a1b 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/forward-beforemove.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts @@ -1,9 +1,9 @@ -import { ForwardCategoryRefactorer } from '../../../../commands/gen2-migration/refactor/workflow/forward-category-refactorer'; -import { RefactorBlueprint } from '../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; -import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; -import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; -import { Cfn } from '../../../../commands/gen2-migration/refactor/cfn'; -import { noOpLogger } from '../_framework/logger'; +import { ForwardCategoryRefactorer } from '../../../../../commands/gen2-migration/refactor/workflow/forward-category-refactorer'; +import { RefactorBlueprint } from '../../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; +import { AwsClients } from '../../../../../commands/gen2-migration/aws-clients'; +import { StackFacade } from '../../../../../commands/gen2-migration/refactor/stack-facade'; +import { Cfn } from '../../../../../commands/gen2-migration/refactor/cfn'; +import { noOpLogger } from '../../_framework/logger'; import { mockClient } from 'aws-sdk-client-mock'; import { CloudFormationClient, @@ -157,3 +157,72 @@ describe('ForwardCategoryRefactorer.beforeMove', () => { expect(cfnMock.commandCalls(DeleteStackCommand).length).toBeGreaterThan(0); }); }); + +import { CFNResource } from '../../../../../commands/gen2-migration/cfn-template'; + +class TestForwardMappingRefactorer extends ForwardCategoryRefactorer { + protected async fetchSourceStackId() { + return 'gen1-stack'; + } + protected async fetchDestStackId() { + return 'gen2-stack'; + } + protected resourceTypes() { + return ['AWS::S3::Bucket']; + } + public async testBuildResourceMappings(source: Map, target: Map): Promise { + return this.buildResourceMappings(source, target, 'gen1-stack', 'gen2-stack'); + } +} + +const r = (type: string): CFNResource => ({ Type: type, Properties: {} }); + +function toIdMap(mappings: ResourceMapping[]): Map { + return new Map(mappings.map((m) => [m.Source!.LogicalResourceId!, m.Destination!.LogicalResourceId!])); +} + +describe('ForwardCategoryRefactorer.buildResourceMappings (default type-matching)', () => { + const refactorer = new TestForwardMappingRefactorer( + null as any, + null as any, + null as any, + 'us-east-1', + '123', + noOpLogger(), + { category: 'storage', resourceName: 'test', service: 'S3', key: 'storage:S3' as const }, + null as unknown as Cfn, + ); + + it('maps single resource per type', async () => { + const mappings = await refactorer.testBuildResourceMappings( + new Map([['S3Bucket', r('AWS::S3::Bucket')]]), + new Map([['amplifyBucket', r('AWS::S3::Bucket')]]), + ); + const map = toIdMap(mappings); + expect(map.size).toBe(1); + expect(map.get('S3Bucket')).toBe('amplifyBucket'); + }); + + it('maps multiple types independently', async () => { + const mappings = await refactorer.testBuildResourceMappings( + new Map([ + ['Bucket', r('AWS::S3::Bucket')], + ['Table', r('AWS::DynamoDB::Table')], + ]), + new Map([ + ['GenBucket', r('AWS::S3::Bucket')], + ['GenTable', r('AWS::DynamoDB::Table')], + ]), + ); + const map = toIdMap(mappings); + expect(map.size).toBe(2); + expect(map.get('Bucket')).toBe('GenBucket'); + expect(map.get('Table')).toBe('GenTable'); + }); + + it('throws when no types match', async () => { + await expect( + refactorer.testBuildResourceMappings(new Map([['Stream', r('AWS::Kinesis::Stream')]]), new Map([['Bucket', r('AWS::S3::Bucket')]])), + ).rejects.toThrow("Source resource 'Stream' (AWS::Kinesis::Stream) has no corresponding target resource"); + }); +}); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.test.ts similarity index 58% rename from packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts rename to packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.test.ts index deb4d4e7b32..b787b952b5e 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/rollback-aftermove.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.test.ts @@ -1,10 +1,10 @@ -import { RollbackCategoryRefactorer } from '../../../../commands/gen2-migration/refactor/workflow/rollback-category-refactorer'; -import { CFNResource, CFNTemplate } from '../../../../commands/gen2-migration/cfn-template'; -import { RefactorBlueprint } from '../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; -import { AwsClients } from '../../../../commands/gen2-migration/aws-clients'; -import { StackFacade } from '../../../../commands/gen2-migration/refactor/stack-facade'; -import { Cfn } from '../../../../commands/gen2-migration/refactor/cfn'; -import { noOpLogger } from '../_framework/logger'; +import { RollbackCategoryRefactorer } from '../../../../../commands/gen2-migration/refactor/workflow/rollback-category-refactorer'; +import { CFNResource, CFNTemplate } from '../../../../../commands/gen2-migration/cfn-template'; +import { RefactorBlueprint } from '../../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; +import { AwsClients } from '../../../../../commands/gen2-migration/aws-clients'; +import { StackFacade } from '../../../../../commands/gen2-migration/refactor/stack-facade'; +import { Cfn } from '../../../../../commands/gen2-migration/refactor/cfn'; +import { noOpLogger } from '../../_framework/logger'; import { mockClient } from 'aws-sdk-client-mock'; import { CloudFormationClient, @@ -127,3 +127,72 @@ describe('RollbackCategoryRefactorer.afterMove', () => { expect(operations).toHaveLength(0); }); }); + +class TestRollbackMappingRefactorer extends RollbackCategoryRefactorer { + private readonly ids: ReadonlyMap; + + constructor(ids: ReadonlyMap) { + super( + null as any, + null as any, + null as any, + 'us-east-1', + '123', + noOpLogger(), + { category: 'storage', resourceName: 'test', service: 'S3', key: 'storage:S3' as const }, + null as unknown as Cfn, + ); + this.ids = ids; + } + // eslint-disable-next-line @typescript-eslint/no-unused-vars + protected targetLogicalId(sourceId: string, _sourceResource: CFNResource): string | undefined { + return this.ids.get(sourceId); + } + protected async fetchSourceStackId() { + return 'gen2-stack'; + } + protected async fetchDestStackId() { + return 'gen1-stack'; + } + protected resourceTypes() { + return []; + } + public async testBuildResourceMappings(source: Map, target: Map): Promise { + return this.buildResourceMappings(source, target, 'gen2-stack', 'gen1-stack'); + } +} + +const r = (type: string): CFNResource => ({ Type: type, Properties: {} }); + +function toIdMap(mappings: ResourceMapping[]): Map { + return new Map(mappings.map((m) => [m.Source!.LogicalResourceId!, m.Destination!.LogicalResourceId!])); +} + +describe('RollbackCategoryRefactorer.buildResourceMappings (gen1LogicalIds-based)', () => { + it('maps source resources to Gen1 logical IDs', async () => { + const refactorer = new TestRollbackMappingRefactorer( + new Map([ + ['amplifyBucket', 'S3Bucket'], + ['amplifyTable', 'DynamoDBTable'], + ]), + ); + const mappings = await refactorer.testBuildResourceMappings( + new Map([ + ['amplifyBucket', r('AWS::S3::Bucket')], + ['amplifyTable', r('AWS::DynamoDB::Table')], + ]), + new Map(), + ); + const map = toIdMap(mappings); + expect(map.size).toBe(2); + expect(map.get('amplifyBucket')).toBe('S3Bucket'); + expect(map.get('amplifyTable')).toBe('DynamoDBTable'); + }); + + it('throws for resource with no known Gen1 logical ID', async () => { + const refactorer = new TestRollbackMappingRefactorer(new Map()); + await expect(refactorer.testBuildResourceMappings(new Map([['amplifyTopic', r('AWS::SNS::Topic')]]), new Map())).rejects.toThrow( + 'Unable to determine target id of resource amplifyTopic', + ); + }); +}); From 8b3d080a312308ab32fe412cc30ede13dc085087 Mon Sep 17 00:00:00 2001 From: Eli Polonsky Date: Mon, 23 Mar 2026 15:05:33 -0400 Subject: [PATCH 39/70] chore: revert snapshots --- amplify-migration-apps/README.md | 6 - ...79371D7-SEM95NL3BKFT-holding.mappings.json | 40 +- ...-SEM95NL3BKFT-holding.target.template.json | 190 +----- ...C3F24A-1BTE7UH0TFE2I-holding.mappings.json | 8 +- ...1BTE7UH0TFE2I-holding.source.template.json | 6 + ...1BTE7UH0TFE2I-holding.target.template.json | 350 ----------- ...10-auth179371D7-SEM95NL3BKFT.mappings.json | 40 +- ...179371D7-SEM95NL3BKFT.target.template.json | 15 +- ...torage0EC3F24A-1BTE7UH0TFE2I.mappings.json | 8 +- ...EC3F24A-1BTE7UH0TFE2I.source.template.json | 7 + ...EC3F24A-1BTE7UH0TFE2I.target.template.json | 6 + ...10-auth179371D7-SEM95NL3BKFT.template.json | 4 + ...torage0EC3F24A-1BTE7UH0TFE2I.template.json | 6 + ...endonlyf8c4c57b-SC9H4E2DZU7A.template.json | 15 +- ...orages3c31471c3-MQFWTKK6ETYR.template.json | 7 + .../quotegeneratorbe/src/package.json | 2 +- .../quotegeneratorbe/src/package.json | 2 +- ...79371D7-DAPL7YOMHRB4-holding.mappings.json | 40 +- ...-DAPL7YOMHRB4-holding.target.template.json | 262 +------- ...EC3F24A-QQN18S0SITDH-holding.mappings.json | 8 +- ...-QQN18S0SITDH-holding.target.template.json | 427 ------------- ...44-auth179371D7-DAPL7YOMHRB4.mappings.json | 40 +- ...179371D7-DAPL7YOMHRB4.target.template.json | 18 +- ...storage0EC3F24A-QQN18S0SITDH.mappings.json | 8 +- ...44-auth179371D7-DAPL7YOMHRB4.template.json | 4 + ...2367c6822367c68-XLSGP9AEXCHG.template.json | 18 +- .../fitness-tracker/README.md | 29 +- ...94DE4A-11L4X799ZG2NW-holding.mappings.json | 8 +- ...11L4X799ZG2NW-holding.target.template.json | 575 ------------------ ...h179371D7-UGINV3RD10-holding.mappings.json | 40 +- ...D7-UGINV3RD10-holding.target.template.json | 343 +---------- ...C3F24A-11PWXC3G56PPP-holding.mappings.json | 8 +- ...11PWXC3G56PPP-holding.source.template.json | 6 + ...11PWXC3G56PPP-holding.target.template.json | 503 --------------- ...lytics5794DE4A-11L4X799ZG2NW.mappings.json | 8 +- ...eabb-auth179371D7-UGINV3RD10.mappings.json | 40 +- ...th179371D7-UGINV3RD10.target.template.json | 15 +- ...torage0EC3F24A-11PWXC3G56PPP.mappings.json | 8 +- ...EC3F24A-11PWXC3G56PPP.source.template.json | 7 + ...EC3F24A-11PWXC3G56PPP.target.template.json | 6 + ...eabb-auth179371D7-UGINV3RD10.template.json | 4 + ...torage0EC3F24A-11PWXC3G56PPP.template.json | 6 + ...odboard759ae00a-55VYEATUY8WM.template.json | 15 +- ...oodboardStorage-4QIRO85L6OVA.template.json | 7 + ...9371D7-1RF1TAQPAA1WW-holding.mappings.json | 40 +- ...1RF1TAQPAA1WW-holding.target.template.json | 46 +- ...C3F24A-13PB5LDXDDFTY-holding.mappings.json | 8 +- ...13PB5LDXDDFTY-holding.source.template.json | 14 + ...13PB5LDXDDFTY-holding.target.template.json | 206 ------- ...a-auth179371D7-1RF1TAQPAA1WW.mappings.json | 40 +- ...79371D7-1RF1TAQPAA1WW.target.template.json | 15 +- ...torage0EC3F24A-13PB5LDXDDFTY.mappings.json | 8 +- ...EC3F24A-13PB5LDXDDFTY.source.template.json | 8 +- ...EC3F24A-13PB5LDXDDFTY.target.template.json | 15 + ...a-auth179371D7-1RF1TAQPAA1WW.template.json | 4 + ...torage0EC3F24A-13PB5LDXDDFTY.template.json | 14 + ...atalog90174ac4-1DKM3MK2JKRFC.template.json | 15 +- ...orages338e5b439-DQ7IMC8LEGGI.template.json | 9 +- .../S3Trigger1ef46783/src/package.json | 2 +- .../S3Trigger1ef46783/src/package.json | 2 +- ...79371D7-CFDKYQIOG2UJ-holding.mappings.json | 40 +- ...-CFDKYQIOG2UJ-holding.target.template.json | 118 +--- ...EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json | 8 +- ...-MCTM3Q2BCVCJ-holding.source.template.json | 6 + ...-MCTM3Q2BCVCJ-holding.target.template.json | 278 --------- ...ec-auth179371D7-CFDKYQIOG2UJ.mappings.json | 40 +- ...179371D7-CFDKYQIOG2UJ.target.template.json | 15 +- ...storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json | 8 +- ...0EC3F24A-MCTM3Q2BCVCJ.source.template.json | 7 + ...0EC3F24A-MCTM3Q2BCVCJ.target.template.json | 6 + ...ec-auth179371D7-CFDKYQIOG2UJ.template.json | 4 + ...storage0EC3F24A-MCTM3Q2BCVCJ.template.json | 6 + ...tboards54040ecc-PH0BQLGBQAYV.template.json | 15 +- ...orages369f8ff1c-WRT91DP311WY.template.json | 7 + 74 files changed, 702 insertions(+), 3467 deletions(-) diff --git a/amplify-migration-apps/README.md b/amplify-migration-apps/README.md index 749a5306190..7c920739c6c 100644 --- a/amplify-migration-apps/README.md +++ b/amplify-migration-apps/README.md @@ -344,9 +344,3 @@ npx jest --no-coverage src/__tests__/commands/gen2-migration/generate/codegen-he ``` Always review the diff after updating to make sure the changes are intentional. - -> [!NOTE] -> Updating a snapshot for one phase (e.g., `generate`) currently requires updating -> snapshots for all phases (`generate` and `refactor`). The phases share state, so -> a change in one phase's expected output can affect the inputs or expectations of -> subsequent phases. diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json index 67e2b307779..759c58ea547 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json index e10bab8c187..01658891def 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json @@ -71,6 +71,27 @@ "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPool/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_W9u2NBSRe" + }, + "Metadata": { + "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -103,27 +124,6 @@ "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPoolAppClient/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_W9u2NBSRe" - }, - "Metadata": { - "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { @@ -204,153 +204,13 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-ge-amplifyAuthauthenticatedU-NrnOsacJVeCr" } }, + "DependsOn": [ + "amplifyAuthIdentityPool3FDE84CC", + "amplifyAuthUserPoolAppClient2626C6F8" + ], "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/IdentityPoolRoleAttachment" } - }, - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "productcatalog" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" - } - }, - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "projectboards" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main/Bucket/Resource" - } } }, "Outputs": {} diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.mappings.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.mappings.json index 11b99a35613..606b64a3606 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.mappings.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I", + "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" }, "Destination": { - "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding", + "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.source.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.source.template.json index dfdd342e50f..28297393fb9 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.source.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.source.template.json @@ -69,6 +69,9 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" }, + "DependsOn": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketPolicy14D90AB6" + ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -125,6 +128,9 @@ ] } }, + "DependsOn": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + ], "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.target.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.target.template.json index 7555863aae2..03d10f9a77a 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.target.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.target.template.json @@ -2,356 +2,6 @@ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Temporary holding stack for Gen2 migration", "Resources": { - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", - "Properties": { - "AccountRecoverySetting": { - "RecoveryMechanisms": [ - { - "Name": "verified_email", - "Priority": 1 - } - ] - }, - "AdminCreateUserConfig": { - "AllowAdminCreateUserOnly": false - }, - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": "Your verification code is {####}", - "EmailVerificationSubject": "Your verification code", - "MfaConfiguration": "OFF", - "Policies": { - "PasswordPolicy": { - "MinimumLength": 8, - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false, - "TemporaryPasswordValidityDays": 7 - } - }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true - } - ], - "SmsVerificationMessage": "The verification code to your new account is {####}", - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolTags": { - "amplify:app-id": "backendonly", - "amplify:branch-name": "gen2-main", - "amplify:deployment-type": "branch", - "amplify:friendly-name": "amplifyAuth", - "created-by": "amplify" - }, - "UsernameAttributes": [ - "email" - ], - "UsernameConfiguration": { - "CaseSensitive": false - }, - "VerificationMessageTemplate": { - "DefaultEmailOption": "CONFIRM_WITH_CODE", - "EmailMessage": "Your verification code is {####}", - "EmailSubject": "Your verification code", - "SmsMessage": "The verification code to your new account is {####}" - } - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPool/Resource" - } - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlows": [ - "code" - ], - "AllowedOAuthFlowsUserPoolClient": true, - "AllowedOAuthScopes": [ - "profile", - "phone", - "email", - "openid", - "aws.cognito.signin.user.admin" - ], - "CallbackURLs": [ - "https://example.com" - ], - "ExplicitAuthFlows": [ - "ALLOW_CUSTOM_AUTH", - "ALLOW_USER_SRP_AUTH", - "ALLOW_REFRESH_TOKEN_AUTH" - ], - "PreventUserExistenceErrors": "ENABLED", - "SupportedIdentityProviders": [ - "COGNITO" - ], - "UserPoolId": "us-east-1_W9u2NBSRe" - }, - "Metadata": { - "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPoolAppClient/Resource" - } - }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_W9u2NBSRe" - }, - "Metadata": { - "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": true, - "CognitoIdentityProviders": [ - { - "ClientId": "55m5602upkjiv7819hcf2ht5v3", - "ProviderName": { - "Fn::Join": [ - "", - [ - "cognito-idp.", - { - "Ref": "AWS::Region" - }, - ".amazonaws.com/", - "us-east-1_W9u2NBSRe" - ] - ] - } - } - ], - "IdentityPoolTags": [ - { - "Key": "amplify:app-id", - "Value": "backendonly" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "amplifyAuth" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ], - "SupportedLoginProviders": {} - }, - "Metadata": { - "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/IdentityPool" - } - }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": "us-east-1:33a8fea2-6293-4bec-8726-31e6b5817de5", - "RoleMappings": { - "UserPoolWebClientRoleMapping": { - "AmbiguousRoleResolution": "AuthenticatedRole", - "IdentityProvider": { - "Fn::Join": [ - "", - [ - "cognito-idp.", - { - "Ref": "AWS::Region" - }, - ".amazonaws.com/", - "us-east-1_W9u2NBSRe", - ":", - "55m5602upkjiv7819hcf2ht5v3" - ] - ] - }, - "Type": "Token" - } - }, - "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-ge-amplifyAuthunauthenticate-mFzNB8V2DE4J", - "authenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-ge-amplifyAuthauthenticatedU-NrnOsacJVeCr" - } - }, - "Metadata": { - "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/IdentityPoolRoleAttachment" - } - }, - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "productcatalog" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" - } - }, - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "projectboards" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main/Bucket/Resource" - } - }, "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738": { "Type": "AWS::S3::Bucket", "Properties": { diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.mappings.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.mappings.json index 6fafe3b1474..c5c90be833c 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.mappings.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "UserPool", - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", + "LogicalResourceId": "UserPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "UserPoolClientWeb", - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", + "LogicalResourceId": "UserPoolClientWeb" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "UserPoolClient", - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", + "LogicalResourceId": "UserPoolClient" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "IdentityPool", - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", + "LogicalResourceId": "IdentityPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "IdentityPoolRoleMap", - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", + "LogicalResourceId": "IdentityPoolRoleMap" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.target.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.target.template.json index 178ab4671af..15d25475c46 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.target.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.target.template.json @@ -168,7 +168,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_1rvCNKN5B" - } + }, + "DependsOn": [ + "amplifyAuthUserPool4BA7F805" + ] }, "amplifyAuthUserPoolNativeAppClient79534448": { "Type": "AWS::Cognito::UserPoolClient", @@ -180,7 +183,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_1rvCNKN5B" - } + }, + "DependsOn": [ + "amplifyAuthUserPool4BA7F805" + ] }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", @@ -235,7 +241,10 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-main-5e0fa-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-main-5e0fa-authRole" } - } + }, + "DependsOn": [ + "amplifyAuthIdentityPool3FDE84CC" + ] } }, "Conditions": { diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.mappings.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.mappings.json index a7741f3e5d5..d2fc08ac276 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.mappings.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "S3Bucket", - "StackName": "amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR" + "StackName": "amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR", + "LogicalResourceId": "S3Bucket" }, "Destination": { - "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I", + "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.source.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.source.template.json index c3476642330..d623d0c18b3 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.source.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.source.template.json @@ -213,6 +213,7 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -249,6 +250,7 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -285,6 +287,7 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -321,6 +324,7 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -357,6 +361,7 @@ "amplify-backendonly-main-5e0fa-unauthRole" ] }, + "DependsOn": [], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -411,6 +416,7 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, + "DependsOn": [], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -463,6 +469,7 @@ "amplify-backendonly-main-5e0fa-unauthRole" ] }, + "DependsOn": [], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.target.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.target.template.json index 2c4aa9226e0..a7608416efc 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.target.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.target.template.json @@ -69,6 +69,9 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" }, + "DependsOn": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketPolicy14D90AB6" + ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -125,6 +128,9 @@ ] } }, + "DependsOn": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + ], "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.template.json index e4c6ac26f39..215b67b1a19 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.template.json @@ -303,6 +303,10 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-ge-amplifyAuthauthenticatedU-NrnOsacJVeCr" } }, + "DependsOn": [ + "amplifyAuthIdentityPool3FDE84CC", + "amplifyAuthUserPoolAppClient2626C6F8" + ], "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.template.json index 7d2b002bc3d..4c65e86344c 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.template.json @@ -141,6 +141,9 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" }, + "DependsOn": [ + "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketPolicy14D90AB6" + ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -197,6 +200,9 @@ ] } }, + "DependsOn": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + ], "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.template.json index f92f2b63239..fcc393b3d08 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.template.json @@ -177,7 +177,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_1rvCNKN5B" - } + }, + "DependsOn": [ + "UserPool" + ] }, "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", @@ -189,7 +192,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_1rvCNKN5B" - } + }, + "DependsOn": [ + "UserPool" + ] }, "UserPoolClientRole": { "Type": "AWS::IAM::Role", @@ -282,7 +288,10 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-main-5e0fa-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-main-5e0fa-authRole" } - } + }, + "DependsOn": [ + "IdentityPool" + ] } }, "Outputs": { diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.template.json index 87ee6202dd7..79c87cef7b1 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.template.json @@ -277,6 +277,7 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -313,6 +314,7 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -349,6 +351,7 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -385,6 +388,7 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -421,6 +425,7 @@ "amplify-backendonly-main-5e0fa-unauthRole" ] }, + "DependsOn": [], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -475,6 +480,7 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, + "DependsOn": [], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -527,6 +533,7 @@ "amplify-backendonly-main-5e0fa-unauthRole" ] }, + "DependsOn": [], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/backend-only/_snapshot.pre.generate/amplify/#current-cloud-backend/function/quotegeneratorbe/src/package.json b/amplify-migration-apps/backend-only/_snapshot.pre.generate/amplify/#current-cloud-backend/function/quotegeneratorbe/src/package.json index 333ff04a2bb..2143bf92d00 100644 --- a/amplify-migration-apps/backend-only/_snapshot.pre.generate/amplify/#current-cloud-backend/function/quotegeneratorbe/src/package.json +++ b/amplify-migration-apps/backend-only/_snapshot.pre.generate/amplify/#current-cloud-backend/function/quotegeneratorbe/src/package.json @@ -10,4 +10,4 @@ "dependencies": { "cli-table3": "0.6.5" } -} +} \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.pre.generate/amplify/backend/function/quotegeneratorbe/src/package.json b/amplify-migration-apps/backend-only/_snapshot.pre.generate/amplify/backend/function/quotegeneratorbe/src/package.json index 333ff04a2bb..2143bf92d00 100644 --- a/amplify-migration-apps/backend-only/_snapshot.pre.generate/amplify/backend/function/quotegeneratorbe/src/package.json +++ b/amplify-migration-apps/backend-only/_snapshot.pre.generate/amplify/backend/function/quotegeneratorbe/src/package.json @@ -10,4 +10,4 @@ "dependencies": { "cli-table3": "0.6.5" } -} +} \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json index 53219238c26..514e117ec84 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json index cf563147a8d..f5445c5ca22 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json @@ -76,6 +76,27 @@ "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPool/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 172800, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_olNpwuJIL" + }, + "Metadata": { + "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -108,27 +129,6 @@ "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPoolAppClient/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 172800, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_olNpwuJIL" - }, - "Metadata": { - "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { @@ -209,225 +209,13 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-gen-amplifyAuthauthenticatedU-cOJdlmnFCZS8" } }, + "DependsOn": [ + "amplifyAuthIdentityPool3FDE84CC", + "amplifyAuthUserPoolAppClient2626C6F8" + ], "Metadata": { "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/IdentityPoolRoleAttachment" } - }, - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "productcatalog" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" - } - }, - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "projectboards" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main/Bucket/Resource" - } - }, - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "backendonly" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main/Bucket/Resource" - } } }, "Outputs": {} diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.mappings.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.mappings.json index 2bc43c0d589..0484781a42e 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.mappings.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "activity1E902D9C", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH", + "LogicalResourceId": "activity1E902D9C" }, "Destination": { - "LogicalResourceId": "activity1E902D9C", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding", + "LogicalResourceId": "activity1E902D9C" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.target.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.target.template.json index 5cba06b4afa..9d199bf4263 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.target.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.target.template.json @@ -2,433 +2,6 @@ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Temporary holding stack for Gen2 migration", "Resources": { - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", - "Properties": { - "AccountRecoverySetting": { - "RecoveryMechanisms": [ - { - "Name": "verified_email", - "Priority": 1 - } - ] - }, - "AdminCreateUserConfig": { - "AllowAdminCreateUserOnly": false - }, - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": "Here is your verification code {####}", - "EmailVerificationSubject": "Verification", - "MfaConfiguration": "OFF", - "Policies": { - "PasswordPolicy": { - "MinimumLength": 8, - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false, - "TemporaryPasswordValidityDays": 7 - } - }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true - }, - { - "Mutable": true, - "Name": "phone_number", - "Required": true - } - ], - "SmsVerificationMessage": "The verification code to your new account is {####}", - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolTags": { - "amplify:app-id": "discussions", - "amplify:branch-name": "gen2-main", - "amplify:deployment-type": "branch", - "amplify:friendly-name": "amplifyAuth", - "created-by": "amplify" - }, - "UsernameAttributes": [ - "phone_number" - ], - "UsernameConfiguration": { - "CaseSensitive": false - }, - "VerificationMessageTemplate": { - "DefaultEmailOption": "CONFIRM_WITH_CODE", - "EmailMessage": "Here is your verification code {####}", - "EmailSubject": "Verification", - "SmsMessage": "The verification code to your new account is {####}" - } - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPool/Resource" - } - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlows": [ - "code" - ], - "AllowedOAuthFlowsUserPoolClient": true, - "AllowedOAuthScopes": [ - "profile", - "phone", - "email", - "openid", - "aws.cognito.signin.user.admin" - ], - "CallbackURLs": [ - "https://example.com" - ], - "ExplicitAuthFlows": [ - "ALLOW_CUSTOM_AUTH", - "ALLOW_USER_SRP_AUTH", - "ALLOW_REFRESH_TOKEN_AUTH" - ], - "PreventUserExistenceErrors": "ENABLED", - "SupportedIdentityProviders": [ - "COGNITO" - ], - "UserPoolId": "us-east-1_olNpwuJIL" - }, - "Metadata": { - "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPoolAppClient/Resource" - } - }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 172800, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_olNpwuJIL" - }, - "Metadata": { - "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": false, - "CognitoIdentityProviders": [ - { - "ClientId": "6bdqt8vavvh3efopgb031lc3jg", - "ProviderName": { - "Fn::Join": [ - "", - [ - "cognito-idp.", - { - "Ref": "AWS::Region" - }, - ".amazonaws.com/", - "us-east-1_olNpwuJIL" - ] - ] - } - } - ], - "IdentityPoolTags": [ - { - "Key": "amplify:app-id", - "Value": "discussions" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "amplifyAuth" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ], - "SupportedLoginProviders": {} - }, - "Metadata": { - "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/IdentityPool" - } - }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": "us-east-1:84e99afb-f5e8-4fa4-bc21-875242ea6689", - "RoleMappings": { - "UserPoolWebClientRoleMapping": { - "AmbiguousRoleResolution": "AuthenticatedRole", - "IdentityProvider": { - "Fn::Join": [ - "", - [ - "cognito-idp.", - { - "Ref": "AWS::Region" - }, - ".amazonaws.com/", - "us-east-1_olNpwuJIL", - ":", - "6bdqt8vavvh3efopgb031lc3jg" - ] - ] - }, - "Type": "Token" - } - }, - "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-discussions-gen-amplifyAuthunauthenticate-LUKlk2oThU8X", - "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-gen-amplifyAuthauthenticatedU-cOJdlmnFCZS8" - } - }, - "Metadata": { - "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/IdentityPoolRoleAttachment" - } - }, - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "productcatalog" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" - } - }, - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "projectboards" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main/Bucket/Resource" - } - }, - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "backendonly" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main/Bucket/Resource" - } - }, "activity1E902D9C": { "Type": "AWS::DynamoDB::Table", "Properties": { diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.mappings.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.mappings.json index eba71ce8ad5..46ccb104e47 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.mappings.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "UserPool", - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", + "LogicalResourceId": "UserPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "UserPoolClientWeb", - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", + "LogicalResourceId": "UserPoolClientWeb" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "UserPoolClient", - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", + "LogicalResourceId": "UserPoolClient" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "IdentityPool", - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", + "LogicalResourceId": "IdentityPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "IdentityPoolRoleMap", - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", + "LogicalResourceId": "IdentityPoolRoleMap" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.target.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.target.template.json index eccbf15fe65..05a72f6824d 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.target.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.target.template.json @@ -168,7 +168,8 @@ "UsernameConfiguration": { "CaseSensitive": false } - } + }, + "DependsOn": [] }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", @@ -179,7 +180,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Zs9EZpCYX" - } + }, + "DependsOn": [ + "amplifyAuthUserPool4BA7F805" + ] }, "amplifyAuthUserPoolNativeAppClient79534448": { "Type": "AWS::Cognito::UserPoolClient", @@ -191,7 +195,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Zs9EZpCYX" - } + }, + "DependsOn": [ + "amplifyAuthUserPool4BA7F805" + ] }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", @@ -246,7 +253,10 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-authRole" } - } + }, + "DependsOn": [ + "amplifyAuthIdentityPool3FDE84CC" + ] } }, "Conditions": { diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.mappings.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.mappings.json index 1a8df8dff20..7c0f1c98009 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.mappings.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "DynamoDBTable", - "StackName": "amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4" + "StackName": "amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4", + "LogicalResourceId": "DynamoDBTable" }, "Destination": { - "LogicalResourceId": "activity1E902D9C", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH", + "LogicalResourceId": "activity1E902D9C" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.template.json index c51c35ae518..995d534b583 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.template.json @@ -308,6 +308,10 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-gen-amplifyAuthauthenticatedU-cOJdlmnFCZS8" } }, + "DependsOn": [ + "amplifyAuthIdentityPool3FDE84CC", + "amplifyAuthUserPoolAppClient2626C6F8" + ], "Metadata": { "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.template.json index e93e870ea9b..b9cb6fb96d4 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.template.json @@ -255,7 +255,8 @@ "UsernameConfiguration": { "CaseSensitive": false } - } + }, + "DependsOn": [] }, "UserPoolClientWeb": { "Type": "AWS::Cognito::UserPoolClient", @@ -266,7 +267,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Zs9EZpCYX" - } + }, + "DependsOn": [ + "UserPool" + ] }, "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", @@ -278,7 +282,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Zs9EZpCYX" - } + }, + "DependsOn": [ + "UserPool" + ] }, "UserPoolClientRole": { "Type": "AWS::IAM::Role", @@ -371,7 +378,10 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-authRole" } - } + }, + "DependsOn": [ + "IdentityPool" + ] } }, "Outputs": { diff --git a/amplify-migration-apps/fitness-tracker/README.md b/amplify-migration-apps/fitness-tracker/README.md index 4b556232426..bb575803389 100644 --- a/amplify-migration-apps/fitness-tracker/README.md +++ b/amplify-migration-apps/fitness-tracker/README.md @@ -300,6 +300,30 @@ npx amplify gen2-migration generate + branchName: "gen2-main" ``` +**Edit in `./amplify/backend.ts`:** + +Navigate to the Amplify Console to find the `` and `` on the ApiGateway AWS Console. For example: + +![](./images/gen1-rest-api-id.png) +![](./images/gen1-root-resource-id.png) + +```diff ++ const gen1RestApi = RestApi.fromRestApiAttributes(restApiStack, "Gen1RestApi", { ++ restApiId: '', ++ rootResourceId: '', ++ }) ++ const gen1RestApiPolicy = new Policy(restApiStack, "Gen1RestApiPolicy", { ++ statements: [ ++ new PolicyStatement({ ++ actions: ["execute-api:Invoke"], ++ resources: [`${gen1RestApi.arnForExecuteApi("*", "/*")}`] ++ }) ++ ] ++ }); ++ backend.auth.resources.authenticatedUserIamRole.attachInlinePolicy(gen1RestApiPolicy); +``` + + **Edit in `./amplify/function/lognutrition/resource.ts`:** ```diff @@ -374,6 +398,7 @@ npx amplify gen2-migration generate - const bodyParser = require('body-parser'); - const awsServerlessExpressMiddleware = require('aws-serverless-express/middleware'); - const { CognitoIdentityProviderClient, ListUsersCommand } = require('@aws-sdk/client-cognito-identity-provider'); +- module.exports = app; + import express from 'express'; + import bodyParser from 'body-parser'; + import awsServerlessExpressMiddleware from 'aws-serverless-express/middleware'; @@ -395,7 +420,7 @@ npx amplify gen2-migration generate + resourceGroupName: 'auth', ``` -**Edit in `./amplify/auth/fitnesstrackerd21d4fcdd21d4fcdPreSignup/index.js`:** +**Edit in `./amplify/auth/fitnesstrackerd21d4fcdd21d4fcdPreSignup/src/index.js`:** > Note: The hash value after `fitnesstracker` changes for each app; you will have a different one. @@ -409,7 +434,7 @@ npx amplify gen2-migration generate + export async function handler(event, context) { ``` -**Edit in `./amplify/function/fitnesstrackerd21d4fcdd21d4fcdPreSignup/email-filter-allowlist.js`:** +**Edit in `./amplify/function/fitnesstrackerd21d4fcdd21d4fcdPreSignup/src/email-filter-allowlist.js`:** > Note: The hash value after `fitnesstracker` changes for each app; you will have a different one. diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.mappings.json index b4e92bdd13e..18fe4e64dc6 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW", + "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047" }, "Destination": { - "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding", + "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.target.template.json index ea38364c9a5..0e5ee0af9e1 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.target.template.json @@ -2,581 +2,6 @@ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Temporary holding stack for Gen2 migration", "Resources": { - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", - "Properties": { - "AccountRecoverySetting": { - "RecoveryMechanisms": [ - { - "Name": "verified_email", - "Priority": 1 - } - ] - }, - "AdminCreateUserConfig": { - "AllowAdminCreateUserOnly": false - }, - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": "Your verification code is {####}", - "EmailVerificationSubject": "Your verification code", - "MfaConfiguration": "OFF", - "Policies": { - "PasswordPolicy": { - "MinimumLength": 8, - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false, - "TemporaryPasswordValidityDays": 7 - } - }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true - } - ], - "SmsVerificationMessage": "The verification code to your new account is {####}", - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolTags": { - "amplify:app-id": "moodboard", - "amplify:branch-name": "gen2-main", - "amplify:deployment-type": "branch", - "amplify:friendly-name": "amplifyAuth", - "created-by": "amplify" - }, - "UsernameAttributes": [ - "email" - ], - "UsernameConfiguration": { - "CaseSensitive": false - }, - "VerificationMessageTemplate": { - "DefaultEmailOption": "CONFIRM_WITH_CODE", - "EmailMessage": "Your verification code is {####}", - "EmailSubject": "Your verification code", - "SmsMessage": "The verification code to your new account is {####}" - } - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/Resource" - } - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlows": [ - "code" - ], - "AllowedOAuthFlowsUserPoolClient": true, - "AllowedOAuthScopes": [ - "profile", - "phone", - "email", - "openid", - "aws.cognito.signin.user.admin" - ], - "CallbackURLs": [ - "https://example.com" - ], - "ExplicitAuthFlows": [ - "ALLOW_CUSTOM_AUTH", - "ALLOW_USER_SRP_AUTH", - "ALLOW_REFRESH_TOKEN_AUTH" - ], - "PreventUserExistenceErrors": "ENABLED", - "SupportedIdentityProviders": [ - "COGNITO" - ], - "UserPoolId": "us-east-1_1A4RMvPNr" - }, - "Metadata": { - "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPoolAppClient/Resource" - } - }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_1A4RMvPNr" - }, - "Metadata": { - "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": true, - "CognitoIdentityProviders": [ - { - "ClientId": "2otm0qh3fj270k5tdn95cgjlm5", - "ProviderName": { - "Fn::Join": [ - "", - [ - "cognito-idp.", - { - "Ref": "AWS::Region" - }, - ".amazonaws.com/", - "us-east-1_1A4RMvPNr" - ] - ] - } - } - ], - "IdentityPoolTags": [ - { - "Key": "amplify:app-id", - "Value": "moodboard" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "amplifyAuth" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ], - "SupportedLoginProviders": {} - }, - "Metadata": { - "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/IdentityPool" - } - }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb", - "RoleMappings": { - "UserPoolWebClientRoleMapping": { - "AmbiguousRoleResolution": "AuthenticatedRole", - "IdentityProvider": { - "Fn::Join": [ - "", - [ - "cognito-idp.", - { - "Ref": "AWS::Region" - }, - ".amazonaws.com/", - "us-east-1_1A4RMvPNr", - ":", - "2otm0qh3fj270k5tdn95cgjlm5" - ] - ] - }, - "Type": "Token" - } - }, - "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-ge-amplifyAuthunauthenticate-rp3r1qUbAKVV", - "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-ge-amplifyAuthauthenticatedU-UANJImTyKZ7p" - } - }, - "Metadata": { - "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/IdentityPoolRoleAttachment" - } - }, - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "productcatalog" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" - } - }, - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "projectboards" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main/Bucket/Resource" - } - }, - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "backendonly" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main/Bucket/Resource" - } - }, - "activity1E902D9C": { - "Type": "AWS::DynamoDB::Table", - "Properties": { - "AttributeDefinitions": [ - { - "AttributeName": "id", - "AttributeType": "S" - }, - { - "AttributeName": "userId", - "AttributeType": "S" - }, - { - "AttributeName": "timestamp", - "AttributeType": "S" - } - ], - "GlobalSecondaryIndexes": [ - { - "IndexName": "byUserId", - "KeySchema": [ - { - "AttributeName": "userId", - "KeyType": "HASH" - }, - { - "AttributeName": "timestamp", - "KeyType": "RANGE" - } - ], - "Projection": { - "ProjectionType": "ALL" - }, - "ProvisionedThroughput": { - "ReadCapacityUnits": 5, - "WriteCapacityUnits": 5 - } - } - ], - "KeySchema": [ - { - "AttributeName": "id", - "KeyType": "HASH" - }, - { - "AttributeName": "userId", - "KeyType": "RANGE" - } - ], - "ProvisionedThroughput": { - "ReadCapacityUnits": 5, - "WriteCapacityUnits": 5 - }, - "StreamSpecification": { - "StreamViewType": "NEW_IMAGE" - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "discussions" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Retain", - "DeletionPolicy": "Retain", - "Metadata": { - "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/storage/activity/Resource" - } - }, - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "moodboard" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "moodboard20e29595008142e3ad16f01c4066e1c41959a-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/storage/moodboard20e29595008142e3ad16f01c4066e1c41959a-gen2-main/Bucket/Resource" - } - }, "moodboardKinesisKinesisStreamD5E97047": { "Type": "AWS::Kinesis::Stream", "Properties": { diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json index 55c5abf24ff..1c699ef3e6d 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json index a481abd3935..e41793ca420 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json @@ -71,6 +71,27 @@ "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_1A4RMvPNr" + }, + "Metadata": { + "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -103,27 +124,6 @@ "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPoolAppClient/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_1A4RMvPNr" - }, - "Metadata": { - "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { @@ -204,306 +204,13 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-ge-amplifyAuthauthenticatedU-UANJImTyKZ7p" } }, + "DependsOn": [ + "amplifyAuthIdentityPool3FDE84CC", + "amplifyAuthUserPoolAppClient2626C6F8" + ], "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/IdentityPoolRoleAttachment" } - }, - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "productcatalog" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" - } - }, - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "projectboards" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main/Bucket/Resource" - } - }, - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "backendonly" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main/Bucket/Resource" - } - }, - "activity1E902D9C": { - "Type": "AWS::DynamoDB::Table", - "Properties": { - "AttributeDefinitions": [ - { - "AttributeName": "id", - "AttributeType": "S" - }, - { - "AttributeName": "userId", - "AttributeType": "S" - }, - { - "AttributeName": "timestamp", - "AttributeType": "S" - } - ], - "GlobalSecondaryIndexes": [ - { - "IndexName": "byUserId", - "KeySchema": [ - { - "AttributeName": "userId", - "KeyType": "HASH" - }, - { - "AttributeName": "timestamp", - "KeyType": "RANGE" - } - ], - "Projection": { - "ProjectionType": "ALL" - }, - "ProvisionedThroughput": { - "ReadCapacityUnits": 5, - "WriteCapacityUnits": 5 - } - } - ], - "KeySchema": [ - { - "AttributeName": "id", - "KeyType": "HASH" - }, - { - "AttributeName": "userId", - "KeyType": "RANGE" - } - ], - "ProvisionedThroughput": { - "ReadCapacityUnits": 5, - "WriteCapacityUnits": 5 - }, - "StreamSpecification": { - "StreamViewType": "NEW_IMAGE" - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "discussions" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Retain", - "DeletionPolicy": "Retain", - "Metadata": { - "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/storage/activity/Resource" - } } }, "Outputs": {} diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.mappings.json index 4bf067c041c..48bd336abd1 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP", + "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" }, "Destination": { - "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding", + "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.source.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.source.template.json index 3a7e2136339..26152a149ed 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.source.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.source.template.json @@ -69,6 +69,9 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" }, + "DependsOn": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketPolicy9A17D834" + ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -125,6 +128,9 @@ ] } }, + "DependsOn": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + ], "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.target.template.json index 6fe3a05384c..d40a0c67f7d 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.target.template.json @@ -2,509 +2,6 @@ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Temporary holding stack for Gen2 migration", "Resources": { - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", - "Properties": { - "AccountRecoverySetting": { - "RecoveryMechanisms": [ - { - "Name": "verified_email", - "Priority": 1 - } - ] - }, - "AdminCreateUserConfig": { - "AllowAdminCreateUserOnly": false - }, - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": "Your verification code is {####}", - "EmailVerificationSubject": "Your verification code", - "MfaConfiguration": "OFF", - "Policies": { - "PasswordPolicy": { - "MinimumLength": 8, - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false, - "TemporaryPasswordValidityDays": 7 - } - }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true - } - ], - "SmsVerificationMessage": "The verification code to your new account is {####}", - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolTags": { - "amplify:app-id": "moodboard", - "amplify:branch-name": "gen2-main", - "amplify:deployment-type": "branch", - "amplify:friendly-name": "amplifyAuth", - "created-by": "amplify" - }, - "UsernameAttributes": [ - "email" - ], - "UsernameConfiguration": { - "CaseSensitive": false - }, - "VerificationMessageTemplate": { - "DefaultEmailOption": "CONFIRM_WITH_CODE", - "EmailMessage": "Your verification code is {####}", - "EmailSubject": "Your verification code", - "SmsMessage": "The verification code to your new account is {####}" - } - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/Resource" - } - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlows": [ - "code" - ], - "AllowedOAuthFlowsUserPoolClient": true, - "AllowedOAuthScopes": [ - "profile", - "phone", - "email", - "openid", - "aws.cognito.signin.user.admin" - ], - "CallbackURLs": [ - "https://example.com" - ], - "ExplicitAuthFlows": [ - "ALLOW_CUSTOM_AUTH", - "ALLOW_USER_SRP_AUTH", - "ALLOW_REFRESH_TOKEN_AUTH" - ], - "PreventUserExistenceErrors": "ENABLED", - "SupportedIdentityProviders": [ - "COGNITO" - ], - "UserPoolId": "us-east-1_1A4RMvPNr" - }, - "Metadata": { - "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPoolAppClient/Resource" - } - }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_1A4RMvPNr" - }, - "Metadata": { - "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": true, - "CognitoIdentityProviders": [ - { - "ClientId": "2otm0qh3fj270k5tdn95cgjlm5", - "ProviderName": { - "Fn::Join": [ - "", - [ - "cognito-idp.", - { - "Ref": "AWS::Region" - }, - ".amazonaws.com/", - "us-east-1_1A4RMvPNr" - ] - ] - } - } - ], - "IdentityPoolTags": [ - { - "Key": "amplify:app-id", - "Value": "moodboard" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "amplifyAuth" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ], - "SupportedLoginProviders": {} - }, - "Metadata": { - "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/IdentityPool" - } - }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": "us-east-1:820c5910-56e0-4010-b0c4-b457a728acfb", - "RoleMappings": { - "UserPoolWebClientRoleMapping": { - "AmbiguousRoleResolution": "AuthenticatedRole", - "IdentityProvider": { - "Fn::Join": [ - "", - [ - "cognito-idp.", - { - "Ref": "AWS::Region" - }, - ".amazonaws.com/", - "us-east-1_1A4RMvPNr", - ":", - "2otm0qh3fj270k5tdn95cgjlm5" - ] - ] - }, - "Type": "Token" - } - }, - "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-ge-amplifyAuthunauthenticate-rp3r1qUbAKVV", - "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-ge-amplifyAuthauthenticatedU-UANJImTyKZ7p" - } - }, - "Metadata": { - "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/IdentityPoolRoleAttachment" - } - }, - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "productcatalog" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" - } - }, - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "projectboards" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/projectboards34b9a7f3c2ca489293910116c994688b02940-gen2-main/Bucket/Resource" - } - }, - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "backendonly" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fa-gen2-main/Bucket/Resource" - } - }, - "activity1E902D9C": { - "Type": "AWS::DynamoDB::Table", - "Properties": { - "AttributeDefinitions": [ - { - "AttributeName": "id", - "AttributeType": "S" - }, - { - "AttributeName": "userId", - "AttributeType": "S" - }, - { - "AttributeName": "timestamp", - "AttributeType": "S" - } - ], - "GlobalSecondaryIndexes": [ - { - "IndexName": "byUserId", - "KeySchema": [ - { - "AttributeName": "userId", - "KeyType": "HASH" - }, - { - "AttributeName": "timestamp", - "KeyType": "RANGE" - } - ], - "Projection": { - "ProjectionType": "ALL" - }, - "ProvisionedThroughput": { - "ReadCapacityUnits": 5, - "WriteCapacityUnits": 5 - } - } - ], - "KeySchema": [ - { - "AttributeName": "id", - "KeyType": "HASH" - }, - { - "AttributeName": "userId", - "KeyType": "RANGE" - } - ], - "ProvisionedThroughput": { - "ReadCapacityUnits": 5, - "WriteCapacityUnits": 5 - }, - "StreamSpecification": { - "StreamViewType": "NEW_IMAGE" - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "discussions" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Retain", - "DeletionPolicy": "Retain", - "Metadata": { - "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/storage/activity/Resource" - } - }, "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65": { "Type": "AWS::S3::Bucket", "Properties": { diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.mappings.json index f551223b652..2f3cfeed033 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "KinesisStream", - "StackName": "amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S" + "StackName": "amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S", + "LogicalResourceId": "KinesisStream" }, "Destination": { - "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW", + "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.mappings.json index 60893879984..cc0780fc7cc 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "UserPool", - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", + "LogicalResourceId": "UserPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "UserPoolClientWeb", - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", + "LogicalResourceId": "UserPoolClientWeb" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "UserPoolClient", - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", + "LogicalResourceId": "UserPoolClient" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "IdentityPool", - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", + "LogicalResourceId": "IdentityPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "IdentityPoolRoleMap", - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", + "LogicalResourceId": "IdentityPoolRoleMap" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.target.template.json index 75f291f8426..1ba32e13166 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.target.template.json @@ -168,7 +168,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Cwvqs93Nc" - } + }, + "DependsOn": [ + "amplifyAuthUserPool4BA7F805" + ] }, "amplifyAuthUserPoolNativeAppClient79534448": { "Type": "AWS::Cognito::UserPoolClient", @@ -180,7 +183,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Cwvqs93Nc" - } + }, + "DependsOn": [ + "amplifyAuthUserPool4BA7F805" + ] }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", @@ -235,7 +241,10 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-main-1959a-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-main-1959a-authRole" } - } + }, + "DependsOn": [ + "amplifyAuthIdentityPool3FDE84CC" + ] } }, "Conditions": { diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.mappings.json index f0f58245b71..7300a23d4f8 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "S3Bucket", - "StackName": "amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA" + "StackName": "amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA", + "LogicalResourceId": "S3Bucket" }, "Destination": { - "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP", + "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.source.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.source.template.json index 91330cd6b72..06a94faaeaf 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.source.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.source.template.json @@ -213,6 +213,7 @@ "amplify-moodboard-main-1959a-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -249,6 +250,7 @@ "amplify-moodboard-main-1959a-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -285,6 +287,7 @@ "amplify-moodboard-main-1959a-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -321,6 +324,7 @@ "amplify-moodboard-main-1959a-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -357,6 +361,7 @@ "amplify-moodboard-main-1959a-unauthRole" ] }, + "DependsOn": [], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -411,6 +416,7 @@ "amplify-moodboard-main-1959a-authRole" ] }, + "DependsOn": [], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -463,6 +469,7 @@ "amplify-moodboard-main-1959a-unauthRole" ] }, + "DependsOn": [], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.target.template.json index b5962a18290..603dfa5b725 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.target.template.json @@ -69,6 +69,9 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" }, + "DependsOn": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketPolicy9A17D834" + ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -125,6 +128,9 @@ ] } }, + "DependsOn": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + ], "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.template.json index 3c4e609fcb2..3557a8fa1e2 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.template.json @@ -303,6 +303,10 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-ge-amplifyAuthauthenticatedU-UANJImTyKZ7p" } }, + "DependsOn": [ + "amplifyAuthIdentityPool3FDE84CC", + "amplifyAuthUserPoolAppClient2626C6F8" + ], "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.template.json index b62dc855c35..8721f5c0e54 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.template.json @@ -141,6 +141,9 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" }, + "DependsOn": [ + "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketPolicy9A17D834" + ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -197,6 +200,9 @@ ] } }, + "DependsOn": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + ], "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.template.json index 97ac6185c7d..ef08b4cd597 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.template.json @@ -177,7 +177,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Cwvqs93Nc" - } + }, + "DependsOn": [ + "UserPool" + ] }, "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", @@ -189,7 +192,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Cwvqs93Nc" - } + }, + "DependsOn": [ + "UserPool" + ] }, "UserPoolClientRole": { "Type": "AWS::IAM::Role", @@ -282,7 +288,10 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-main-1959a-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-main-1959a-authRole" } - } + }, + "DependsOn": [ + "IdentityPool" + ] } }, "Outputs": { diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.template.json index 0ec74d2088d..8ae961bc698 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.template.json @@ -277,6 +277,7 @@ "amplify-moodboard-main-1959a-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -313,6 +314,7 @@ "amplify-moodboard-main-1959a-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -349,6 +351,7 @@ "amplify-moodboard-main-1959a-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -385,6 +388,7 @@ "amplify-moodboard-main-1959a-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -421,6 +425,7 @@ "amplify-moodboard-main-1959a-unauthRole" ] }, + "DependsOn": [], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -475,6 +480,7 @@ "amplify-moodboard-main-1959a-authRole" ] }, + "DependsOn": [], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -527,6 +533,7 @@ "amplify-moodboard-main-1959a-unauthRole" ] }, + "DependsOn": [], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json index 4f9173460d0..c32bf4971d4 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json index f86fae3e9c3..c1c890be0a7 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json @@ -71,6 +71,27 @@ "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPool/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_OFRBVzhq5" + }, + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -103,27 +124,6 @@ "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPoolAppClient/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_OFRBVzhq5" - }, - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { @@ -204,6 +204,10 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-ge-amplifyAuthauthenticatedU-7u6GoubHxSy7" } }, + "DependsOn": [ + "amplifyAuthIdentityPool3FDE84CC", + "amplifyAuthUserPoolAppClient2626C6F8" + ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.mappings.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.mappings.json index e19a55f6415..4df170487c2 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.mappings.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY", + "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" }, "Destination": { - "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding", + "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.source.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.source.template.json index 436640b9b85..3d7eee45f75 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.source.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.source.template.json @@ -69,6 +69,9 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" }, + "DependsOn": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" + ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -103,6 +106,10 @@ "Managed": true, "SkipDestinationValidation": false }, + "DependsOn": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketAllowBucketNotificationsToamplifyproductcataloggen2mainbranch4b79ec0f9afunctionS3Trigger1ef46783gen2mainlambda8226525A5BBBE747", + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" + ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Notifications/Resource" } @@ -174,6 +181,9 @@ ] } }, + "DependsOn": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", @@ -286,6 +296,10 @@ } ] }, + "DependsOn": [ + "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36", + "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC" + ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Resource" } diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.target.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.target.template.json index aa18626f494..d75aadd5327 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.target.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.target.template.json @@ -2,212 +2,6 @@ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Temporary holding stack for Gen2 migration", "Resources": { - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", - "Properties": { - "AccountRecoverySetting": { - "RecoveryMechanisms": [ - { - "Name": "verified_email", - "Priority": 1 - } - ] - }, - "AdminCreateUserConfig": { - "AllowAdminCreateUserOnly": false - }, - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": "Your verification code is {####}", - "EmailVerificationSubject": "Your verification code", - "MfaConfiguration": "OFF", - "Policies": { - "PasswordPolicy": { - "MinimumLength": 8, - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false, - "TemporaryPasswordValidityDays": 7 - } - }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true - } - ], - "SmsVerificationMessage": "The verification code to your new account is {####}", - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolTags": { - "amplify:app-id": "productcatalog", - "amplify:branch-name": "gen2-main", - "amplify:deployment-type": "branch", - "amplify:friendly-name": "amplifyAuth", - "created-by": "amplify" - }, - "UsernameAttributes": [ - "email" - ], - "UsernameConfiguration": { - "CaseSensitive": false - }, - "VerificationMessageTemplate": { - "DefaultEmailOption": "CONFIRM_WITH_CODE", - "EmailMessage": "Your verification code is {####}", - "EmailSubject": "Your verification code", - "SmsMessage": "The verification code to your new account is {####}" - } - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPool/Resource" - } - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlows": [ - "code" - ], - "AllowedOAuthFlowsUserPoolClient": true, - "AllowedOAuthScopes": [ - "profile", - "phone", - "email", - "openid", - "aws.cognito.signin.user.admin" - ], - "CallbackURLs": [ - "https://example.com" - ], - "ExplicitAuthFlows": [ - "ALLOW_CUSTOM_AUTH", - "ALLOW_USER_SRP_AUTH", - "ALLOW_REFRESH_TOKEN_AUTH" - ], - "PreventUserExistenceErrors": "ENABLED", - "SupportedIdentityProviders": [ - "COGNITO" - ], - "UserPoolId": "us-east-1_OFRBVzhq5" - }, - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPoolAppClient/Resource" - } - }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_OFRBVzhq5" - }, - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": false, - "CognitoIdentityProviders": [ - { - "ClientId": "61e6oq3acg1at7f9da6cfna70d", - "ProviderName": { - "Fn::Join": [ - "", - [ - "cognito-idp.", - { - "Ref": "AWS::Region" - }, - ".amazonaws.com/", - "us-east-1_OFRBVzhq5" - ] - ] - } - } - ], - "IdentityPoolTags": [ - { - "Key": "amplify:app-id", - "Value": "productcatalog" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "amplifyAuth" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ], - "SupportedLoginProviders": {} - }, - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/IdentityPool" - } - }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": "us-east-1:c464f123-eaf0-4289-98b3-381197fa3d7f", - "RoleMappings": { - "UserPoolWebClientRoleMapping": { - "AmbiguousRoleResolution": "AuthenticatedRole", - "IdentityProvider": { - "Fn::Join": [ - "", - [ - "cognito-idp.", - { - "Ref": "AWS::Region" - }, - ".amazonaws.com/", - "us-east-1_OFRBVzhq5", - ":", - "61e6oq3acg1at7f9da6cfna70d" - ] - ] - }, - "Type": "Token" - } - }, - "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-ge-amplifyAuthunauthenticate-JMPocA8XyO6M", - "authenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-ge-amplifyAuthauthenticatedU-7u6GoubHxSy7" - } - }, - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/IdentityPoolRoleAttachment" - } - }, "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { "Type": "AWS::S3::Bucket", "Properties": { diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.mappings.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.mappings.json index dcbb7ff0bfa..d48c12ba206 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.mappings.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "UserPool", - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", + "LogicalResourceId": "UserPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "UserPoolClientWeb", - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", + "LogicalResourceId": "UserPoolClientWeb" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "UserPoolClient", - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", + "LogicalResourceId": "UserPoolClient" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "IdentityPool", - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", + "LogicalResourceId": "IdentityPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "IdentityPoolRoleMap", - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", + "LogicalResourceId": "IdentityPoolRoleMap" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.target.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.target.template.json index a69d3b0e16d..187486f41fc 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.target.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.target.template.json @@ -205,7 +205,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_66BkqNfdX" - } + }, + "DependsOn": [ + "amplifyAuthUserPool4BA7F805" + ] }, "amplifyAuthUserPoolNativeAppClient79534448": { "Type": "AWS::Cognito::UserPoolClient", @@ -217,7 +220,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_66BkqNfdX" - } + }, + "DependsOn": [ + "amplifyAuthUserPool4BA7F805" + ] }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", @@ -272,7 +278,10 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-main-31323-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-main-31323-authRole" } - } + }, + "DependsOn": [ + "amplifyAuthIdentityPool3FDE84CC" + ] } }, "Conditions": { diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.mappings.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.mappings.json index 8caf8958ceb..bf796ac778b 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.mappings.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "S3Bucket", - "StackName": "amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI" + "StackName": "amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI", + "LogicalResourceId": "S3Bucket" }, "Destination": { - "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY", + "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.source.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.source.template.json index da74f677807..931e6107b36 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.source.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.source.template.json @@ -274,6 +274,7 @@ "amplify-productcatalog-main-31323-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -310,6 +311,7 @@ "amplify-productcatalog-main-31323-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -346,6 +348,7 @@ "amplify-productcatalog-main-31323-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -382,6 +385,7 @@ "amplify-productcatalog-main-31323-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3AuthReadPolicy": { @@ -436,6 +440,7 @@ "amplify-productcatalog-main-31323-authRole" ] }, + "DependsOn": [], "Condition": "AuthReadAndList" }, "S3TriggerBucketPolicy": { @@ -488,7 +493,8 @@ "Roles": [ "S3Trigger1ef46783LambdaRole1ef46783-main" ] - } + }, + "DependsOn": [] } } } \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.target.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.target.template.json index 9a1ece0d4ba..ee4724de7d0 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.target.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.target.template.json @@ -69,6 +69,9 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" }, + "DependsOn": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" + ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -103,6 +106,10 @@ "Managed": true, "SkipDestinationValidation": false }, + "DependsOn": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketAllowBucketNotificationsToamplifyproductcataloggen2mainbranch4b79ec0f9afunctionS3Trigger1ef46783gen2mainlambda8226525A5BBBE747", + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" + ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Notifications/Resource" } @@ -174,6 +181,9 @@ ] } }, + "DependsOn": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", @@ -286,6 +296,10 @@ } ] }, + "DependsOn": [ + "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36", + "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC" + ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Resource" } @@ -525,6 +539,7 @@ ] } }, + "DependsOn": [], "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain" } diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.template.json index ba390bdc15b..9a3f81d31df 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.template.json @@ -340,6 +340,10 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-ge-amplifyAuthauthenticatedU-7u6GoubHxSy7" } }, + "DependsOn": [ + "amplifyAuthIdentityPool3FDE84CC", + "amplifyAuthUserPoolAppClient2626C6F8" + ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.template.json index 4f29cfcc0ed..3eddc81943c 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.template.json @@ -141,6 +141,9 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" }, + "DependsOn": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" + ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -175,6 +178,10 @@ "Managed": true, "SkipDestinationValidation": false }, + "DependsOn": [ + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketAllowBucketNotificationsToamplifyproductcataloggen2mainbranch4b79ec0f9afunctionS3Trigger1ef46783gen2mainlambda8226525A5BBBE747", + "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" + ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Notifications/Resource" } @@ -246,6 +253,9 @@ ] } }, + "DependsOn": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", @@ -358,6 +368,10 @@ } ] }, + "DependsOn": [ + "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36", + "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC" + ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Resource" } diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.template.json index f680f1c6eb8..b2b78850e70 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.template.json @@ -177,7 +177,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_66BkqNfdX" - } + }, + "DependsOn": [ + "UserPool" + ] }, "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", @@ -189,7 +192,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_66BkqNfdX" - } + }, + "DependsOn": [ + "UserPool" + ] }, "UserPoolClientRole": { "Type": "AWS::IAM::Role", @@ -282,7 +288,10 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-main-31323-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-main-31323-authRole" } - } + }, + "DependsOn": [ + "IdentityPool" + ] } }, "Outputs": { diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.template.json index a194d381190..a490d8b9de5 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.template.json @@ -267,6 +267,7 @@ ] } }, + "DependsOn": [], "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain" }, @@ -350,6 +351,7 @@ "amplify-productcatalog-main-31323-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -386,6 +388,7 @@ "amplify-productcatalog-main-31323-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -422,6 +425,7 @@ "amplify-productcatalog-main-31323-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -458,6 +462,7 @@ "amplify-productcatalog-main-31323-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3AuthReadPolicy": { @@ -512,6 +517,7 @@ "amplify-productcatalog-main-31323-authRole" ] }, + "DependsOn": [], "Condition": "AuthReadAndList" }, "S3TriggerBucketPolicy": { @@ -564,7 +570,8 @@ "Roles": [ "S3Trigger1ef46783LambdaRole1ef46783-main" ] - } + }, + "DependsOn": [] } } } \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.pre.generate/amplify/#current-cloud-backend/function/S3Trigger1ef46783/src/package.json b/amplify-migration-apps/product-catalog/_snapshot.pre.generate/amplify/#current-cloud-backend/function/S3Trigger1ef46783/src/package.json index 540015a8b70..c090d8e5360 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.pre.generate/amplify/#current-cloud-backend/function/S3Trigger1ef46783/src/package.json +++ b/amplify-migration-apps/product-catalog/_snapshot.pre.generate/amplify/#current-cloud-backend/function/S3Trigger1ef46783/src/package.json @@ -13,4 +13,4 @@ "@aws-sdk/protocol-http": "^3.58.0", "@aws-sdk/signature-v4": "^3.58.0" } -} +} \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.pre.generate/amplify/backend/function/S3Trigger1ef46783/src/package.json b/amplify-migration-apps/product-catalog/_snapshot.pre.generate/amplify/backend/function/S3Trigger1ef46783/src/package.json index 540015a8b70..c090d8e5360 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.pre.generate/amplify/backend/function/S3Trigger1ef46783/src/package.json +++ b/amplify-migration-apps/product-catalog/_snapshot.pre.generate/amplify/backend/function/S3Trigger1ef46783/src/package.json @@ -13,4 +13,4 @@ "@aws-sdk/protocol-http": "^3.58.0", "@aws-sdk/signature-v4": "^3.58.0" } -} +} \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json index a5ab68ecc4a..ff5c6741705 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json index 0c82664165a..4bd455c3620 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json @@ -71,6 +71,27 @@ "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPool/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_pXlpWF7QY" + }, + "Metadata": { + "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -103,27 +124,6 @@ "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPoolAppClient/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_pXlpWF7QY" - }, - "Metadata": { - "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { @@ -204,81 +204,13 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-ge-amplifyAuthauthenticatedU-HuWvFKttqdhF" } }, + "DependsOn": [ + "amplifyAuthIdentityPool3FDE84CC", + "amplifyAuthUserPoolAppClient2626C6F8" + ], "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/IdentityPoolRoleAttachment" } - }, - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "productcatalog" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" - } } }, "Outputs": {} diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json index 20edd36515b..a5ea8fd59de 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ", + "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" }, "Destination": { - "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding", + "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.source.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.source.template.json index ead58590739..580eda74c18 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.source.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.source.template.json @@ -69,6 +69,9 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" }, + "DependsOn": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketPolicy8CF7A616" + ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -125,6 +128,9 @@ ] } }, + "DependsOn": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + ], "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.target.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.target.template.json index 548f64920d8..7375ab1657a 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.target.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.target.template.json @@ -2,284 +2,6 @@ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Temporary holding stack for Gen2 migration", "Resources": { - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", - "Properties": { - "AccountRecoverySetting": { - "RecoveryMechanisms": [ - { - "Name": "verified_email", - "Priority": 1 - } - ] - }, - "AdminCreateUserConfig": { - "AllowAdminCreateUserOnly": false - }, - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": "Your verification code is {####}", - "EmailVerificationSubject": "Your verification code", - "MfaConfiguration": "OFF", - "Policies": { - "PasswordPolicy": { - "MinimumLength": 8, - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false, - "TemporaryPasswordValidityDays": 7 - } - }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true - } - ], - "SmsVerificationMessage": "The verification code to your new account is {####}", - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolTags": { - "amplify:app-id": "projectboards", - "amplify:branch-name": "gen2-main", - "amplify:deployment-type": "branch", - "amplify:friendly-name": "amplifyAuth", - "created-by": "amplify" - }, - "UsernameAttributes": [ - "email" - ], - "UsernameConfiguration": { - "CaseSensitive": false - }, - "VerificationMessageTemplate": { - "DefaultEmailOption": "CONFIRM_WITH_CODE", - "EmailMessage": "Your verification code is {####}", - "EmailSubject": "Your verification code", - "SmsMessage": "The verification code to your new account is {####}" - } - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPool/Resource" - } - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlows": [ - "code" - ], - "AllowedOAuthFlowsUserPoolClient": true, - "AllowedOAuthScopes": [ - "profile", - "phone", - "email", - "openid", - "aws.cognito.signin.user.admin" - ], - "CallbackURLs": [ - "https://example.com" - ], - "ExplicitAuthFlows": [ - "ALLOW_CUSTOM_AUTH", - "ALLOW_USER_SRP_AUTH", - "ALLOW_REFRESH_TOKEN_AUTH" - ], - "PreventUserExistenceErrors": "ENABLED", - "SupportedIdentityProviders": [ - "COGNITO" - ], - "UserPoolId": "us-east-1_pXlpWF7QY" - }, - "Metadata": { - "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPoolAppClient/Resource" - } - }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_pXlpWF7QY" - }, - "Metadata": { - "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": true, - "CognitoIdentityProviders": [ - { - "ClientId": "oqgm3faeod0cr1b4v63iv4a7a", - "ProviderName": { - "Fn::Join": [ - "", - [ - "cognito-idp.", - { - "Ref": "AWS::Region" - }, - ".amazonaws.com/", - "us-east-1_pXlpWF7QY" - ] - ] - } - } - ], - "IdentityPoolTags": [ - { - "Key": "amplify:app-id", - "Value": "projectboards" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "amplifyAuth" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ], - "SupportedLoginProviders": {} - }, - "Metadata": { - "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/IdentityPool" - } - }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": "us-east-1:f8ab7c96-56f6-46d4-8346-0a5235221fba", - "RoleMappings": { - "UserPoolWebClientRoleMapping": { - "AmbiguousRoleResolution": "AuthenticatedRole", - "IdentityProvider": { - "Fn::Join": [ - "", - [ - "cognito-idp.", - { - "Ref": "AWS::Region" - }, - ".amazonaws.com/", - "us-east-1_pXlpWF7QY", - ":", - "oqgm3faeod0cr1b4v63iv4a7a" - ] - ] - }, - "Type": "Token" - } - }, - "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-ge-amplifyAuthunauthenticate-GHLvLgqZHYnT", - "authenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-ge-amplifyAuthauthenticatedU-HuWvFKttqdhF" - } - }, - "Metadata": { - "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/IdentityPoolRoleAttachment" - } - }, - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83": { - "Type": "AWS::S3::Bucket", - "Properties": { - "BucketEncryption": { - "ServerSideEncryptionConfiguration": [ - { - "BucketKeyEnabled": false, - "ServerSideEncryptionByDefault": { - "SSEAlgorithm": "AES256" - } - } - ] - }, - "CorsConfiguration": { - "CorsRules": [ - { - "AllowedHeaders": [ - "*" - ], - "AllowedMethods": [ - "GET", - "HEAD", - "PUT", - "POST", - "DELETE" - ], - "AllowedOrigins": [ - "*" - ], - "ExposedHeaders": [ - "x-amz-server-side-encryption", - "x-amz-request-id", - "x-amz-id-2", - "ETag" - ], - "MaxAge": 3000 - } - ] - }, - "Tags": [ - { - "Key": "amplify:app-id", - "Value": "productcatalog" - }, - { - "Key": "amplify:branch-name", - "Value": "gen2-main" - }, - { - "Key": "amplify:deployment-type", - "Value": "branch" - }, - { - "Key": "amplify:friendly-name", - "Value": "productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main" - }, - { - "Key": "aws-cdk:auto-delete-objects", - "Value": "true" - }, - { - "Key": "created-by", - "Value": "amplify" - } - ] - }, - "UpdateReplacePolicy": "Delete", - "DeletionPolicy": "Delete", - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Resource" - } - }, "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F": { "Type": "AWS::S3::Bucket", "Properties": { diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.mappings.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.mappings.json index 53e3abf3235..07eccbab939 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.mappings.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "UserPool", - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", + "LogicalResourceId": "UserPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "UserPoolClientWeb", - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", + "LogicalResourceId": "UserPoolClientWeb" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "UserPoolClient", - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", + "LogicalResourceId": "UserPoolClient" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "IdentityPool", - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", + "LogicalResourceId": "IdentityPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "IdentityPoolRoleMap", - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", + "LogicalResourceId": "IdentityPoolRoleMap" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.target.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.target.template.json index 9e7b4fc0c68..06fb757fe75 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.target.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.target.template.json @@ -168,7 +168,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_ct5s4IEz3" - } + }, + "DependsOn": [ + "amplifyAuthUserPool4BA7F805" + ] }, "amplifyAuthUserPoolNativeAppClient79534448": { "Type": "AWS::Cognito::UserPoolClient", @@ -180,7 +183,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_ct5s4IEz3" - } + }, + "DependsOn": [ + "amplifyAuthUserPool4BA7F805" + ] }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", @@ -235,7 +241,10 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-main-02940-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-main-02940-authRole" } - } + }, + "DependsOn": [ + "amplifyAuthIdentityPool3FDE84CC" + ] } }, "Conditions": { diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json index e8be4aa2427..129799390d2 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "S3Bucket", - "StackName": "amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY" + "StackName": "amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY", + "LogicalResourceId": "S3Bucket" }, "Destination": { - "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ", + "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.source.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.source.template.json index 5df877c8f45..fadc25c61f3 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.source.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.source.template.json @@ -213,6 +213,7 @@ "amplify-projectboards-main-02940-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -249,6 +250,7 @@ "amplify-projectboards-main-02940-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -285,6 +287,7 @@ "amplify-projectboards-main-02940-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -321,6 +324,7 @@ "amplify-projectboards-main-02940-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -357,6 +361,7 @@ "amplify-projectboards-main-02940-unauthRole" ] }, + "DependsOn": [], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -411,6 +416,7 @@ "amplify-projectboards-main-02940-authRole" ] }, + "DependsOn": [], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -463,6 +469,7 @@ "amplify-projectboards-main-02940-unauthRole" ] }, + "DependsOn": [], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.target.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.target.template.json index 3f1975883b2..60a42386506 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.target.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.target.template.json @@ -69,6 +69,9 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" }, + "DependsOn": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketPolicy8CF7A616" + ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -125,6 +128,9 @@ ] } }, + "DependsOn": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + ], "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.template.json index e004bc868c5..ce3bc368f1b 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.template.json @@ -303,6 +303,10 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-ge-amplifyAuthauthenticatedU-HuWvFKttqdhF" } }, + "DependsOn": [ + "amplifyAuthIdentityPool3FDE84CC", + "amplifyAuthUserPoolAppClient2626C6F8" + ], "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.template.json index 89a6d81ca6f..0c2b9cd2a9c 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.template.json @@ -141,6 +141,9 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" }, + "DependsOn": [ + "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketPolicy8CF7A616" + ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -197,6 +200,9 @@ ] } }, + "DependsOn": [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" + ], "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.template.json index 92d9ab6fde9..3aa2d612914 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.template.json @@ -177,7 +177,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_ct5s4IEz3" - } + }, + "DependsOn": [ + "UserPool" + ] }, "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", @@ -189,7 +192,10 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_ct5s4IEz3" - } + }, + "DependsOn": [ + "UserPool" + ] }, "UserPoolClientRole": { "Type": "AWS::IAM::Role", @@ -282,7 +288,10 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-main-02940-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-main-02940-authRole" } - } + }, + "DependsOn": [ + "IdentityPool" + ] } }, "Outputs": { diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.template.json index 1ebeee344f7..eed789328a5 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.template.json @@ -277,6 +277,7 @@ "amplify-projectboards-main-02940-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -313,6 +314,7 @@ "amplify-projectboards-main-02940-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -349,6 +351,7 @@ "amplify-projectboards-main-02940-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -385,6 +388,7 @@ "amplify-projectboards-main-02940-authRole" ] }, + "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -421,6 +425,7 @@ "amplify-projectboards-main-02940-unauthRole" ] }, + "DependsOn": [], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -475,6 +480,7 @@ "amplify-projectboards-main-02940-authRole" ] }, + "DependsOn": [], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -527,6 +533,7 @@ "amplify-projectboards-main-02940-unauthRole" ] }, + "DependsOn": [], "Condition": "GuestReadAndList" } } From e5c5b13be882137bd0d9c1e55e52aa3398464861 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Mon, 23 Mar 2026 16:59:58 -0400 Subject: [PATCH 40/70] fix(cli-internal): clone empty holding template to prevent cross-refactorer leak EMPTY_HOLDING_TEMPLATE was a shared mutable object. When Cfn.refactor() used it as the target template for a new holding stack, it mutated the shared object by adding resources. Subsequent refactorers that also needed a new holding stack would get the already-mutated object, causing auth resources to leak into the storage holding stack. Fix by cloning the constant before use. --- Prompt: inspect snapshot changes and explain auth resources in storage holding stack. --- ...79371D7-SEM95NL3BKFT-holding.mappings.json | 40 ++++++++-------- ...-SEM95NL3BKFT-holding.target.template.json | 46 +++++++++---------- ...C3F24A-1BTE7UH0TFE2I-holding.mappings.json | 8 ++-- ...1BTE7UH0TFE2I-holding.source.template.json | 6 --- ...10-auth179371D7-SEM95NL3BKFT.mappings.json | 40 ++++++++-------- ...179371D7-SEM95NL3BKFT.target.template.json | 15 ++---- ...torage0EC3F24A-1BTE7UH0TFE2I.mappings.json | 8 ++-- ...EC3F24A-1BTE7UH0TFE2I.source.template.json | 7 --- ...EC3F24A-1BTE7UH0TFE2I.target.template.json | 6 --- ...10-auth179371D7-SEM95NL3BKFT.template.json | 4 -- ...torage0EC3F24A-1BTE7UH0TFE2I.template.json | 6 --- ...endonlyf8c4c57b-SC9H4E2DZU7A.template.json | 15 ++---- ...orages3c31471c3-MQFWTKK6ETYR.template.json | 7 --- ...79371D7-DAPL7YOMHRB4-holding.mappings.json | 40 ++++++++-------- ...-DAPL7YOMHRB4-holding.target.template.json | 46 +++++++++---------- ...EC3F24A-QQN18S0SITDH-holding.mappings.json | 8 ++-- ...44-auth179371D7-DAPL7YOMHRB4.mappings.json | 40 ++++++++-------- ...179371D7-DAPL7YOMHRB4.target.template.json | 18 ++------ ...storage0EC3F24A-QQN18S0SITDH.mappings.json | 8 ++-- ...44-auth179371D7-DAPL7YOMHRB4.template.json | 4 -- ...2367c6822367c68-XLSGP9AEXCHG.template.json | 18 ++------ ...94DE4A-11L4X799ZG2NW-holding.mappings.json | 8 ++-- ...h179371D7-UGINV3RD10-holding.mappings.json | 40 ++++++++-------- ...D7-UGINV3RD10-holding.target.template.json | 46 +++++++++---------- ...C3F24A-11PWXC3G56PPP-holding.mappings.json | 8 ++-- ...11PWXC3G56PPP-holding.source.template.json | 6 --- ...lytics5794DE4A-11L4X799ZG2NW.mappings.json | 8 ++-- ...eabb-auth179371D7-UGINV3RD10.mappings.json | 40 ++++++++-------- ...th179371D7-UGINV3RD10.target.template.json | 15 ++---- ...torage0EC3F24A-11PWXC3G56PPP.mappings.json | 8 ++-- ...EC3F24A-11PWXC3G56PPP.source.template.json | 7 --- ...EC3F24A-11PWXC3G56PPP.target.template.json | 6 --- ...eabb-auth179371D7-UGINV3RD10.template.json | 4 -- ...torage0EC3F24A-11PWXC3G56PPP.template.json | 6 --- ...odboard759ae00a-55VYEATUY8WM.template.json | 15 ++---- ...oodboardStorage-4QIRO85L6OVA.template.json | 7 --- ...9371D7-1RF1TAQPAA1WW-holding.mappings.json | 40 ++++++++-------- ...1RF1TAQPAA1WW-holding.target.template.json | 46 +++++++++---------- ...C3F24A-13PB5LDXDDFTY-holding.mappings.json | 8 ++-- ...13PB5LDXDDFTY-holding.source.template.json | 14 ------ ...a-auth179371D7-1RF1TAQPAA1WW.mappings.json | 40 ++++++++-------- ...79371D7-1RF1TAQPAA1WW.target.template.json | 15 ++---- ...torage0EC3F24A-13PB5LDXDDFTY.mappings.json | 8 ++-- ...EC3F24A-13PB5LDXDDFTY.source.template.json | 8 +--- ...EC3F24A-13PB5LDXDDFTY.target.template.json | 15 ------ ...a-auth179371D7-1RF1TAQPAA1WW.template.json | 4 -- ...torage0EC3F24A-13PB5LDXDDFTY.template.json | 14 ------ ...atalog90174ac4-1DKM3MK2JKRFC.template.json | 15 ++---- ...orages338e5b439-DQ7IMC8LEGGI.template.json | 9 +--- ...79371D7-CFDKYQIOG2UJ-holding.mappings.json | 40 ++++++++-------- ...-CFDKYQIOG2UJ-holding.target.template.json | 46 +++++++++---------- ...EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json | 8 ++-- ...-MCTM3Q2BCVCJ-holding.source.template.json | 6 --- ...ec-auth179371D7-CFDKYQIOG2UJ.mappings.json | 40 ++++++++-------- ...179371D7-CFDKYQIOG2UJ.target.template.json | 15 ++---- ...storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json | 8 ++-- ...0EC3F24A-MCTM3Q2BCVCJ.source.template.json | 7 --- ...0EC3F24A-MCTM3Q2BCVCJ.target.template.json | 6 --- ...ec-auth179371D7-CFDKYQIOG2UJ.template.json | 4 -- ...storage0EC3F24A-MCTM3Q2BCVCJ.template.json | 6 --- ...tboards54040ecc-PH0BQLGBQAYV.template.json | 15 ++---- ...orages369f8ff1c-WRT91DP311WY.template.json | 7 --- .../_framework/clients/cloudformation.ts | 20 +++++--- .../commands/gen2-migration/refactor/cfn.ts | 2 +- 64 files changed, 402 insertions(+), 678 deletions(-) diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json index 759c58ea547..67e2b307779 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" } }, { "Source": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" } }, { "Source": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" } }, { "Source": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" } }, { "Source": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json index 01658891def..0ac961a05d0 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json @@ -71,27 +71,6 @@ "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPool/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_W9u2NBSRe" - }, - "Metadata": { - "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -124,6 +103,27 @@ "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPoolAppClient/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_W9u2NBSRe" + }, + "Metadata": { + "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { @@ -204,10 +204,6 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-ge-amplifyAuthauthenticatedU-NrnOsacJVeCr" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.mappings.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.mappings.json index 606b64a3606..11b99a35613 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.mappings.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I", - "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" + "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding", - "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" + "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.source.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.source.template.json index 28297393fb9..dfdd342e50f 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.source.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.source.template.json @@ -69,9 +69,6 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" }, - "DependsOn": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketPolicy14D90AB6" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -128,9 +125,6 @@ ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.mappings.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.mappings.json index c5c90be833c..6fafe3b1474 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.mappings.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", - "LogicalResourceId": "UserPool" + "LogicalResourceId": "UserPool", + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" } }, { "Source": { - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", - "LogicalResourceId": "UserPoolClientWeb" + "LogicalResourceId": "UserPoolClientWeb", + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" } }, { "Source": { - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", - "LogicalResourceId": "UserPoolClient" + "LogicalResourceId": "UserPoolClient", + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" } }, { "Source": { - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", - "LogicalResourceId": "IdentityPool" + "LogicalResourceId": "IdentityPool", + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" } }, { "Source": { - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", - "LogicalResourceId": "IdentityPoolRoleMap" + "LogicalResourceId": "IdentityPoolRoleMap", + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.target.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.target.template.json index 15d25475c46..178ab4671af 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.target.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.target.template.json @@ -168,10 +168,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_1rvCNKN5B" - }, - "DependsOn": [ - "amplifyAuthUserPool4BA7F805" - ] + } }, "amplifyAuthUserPoolNativeAppClient79534448": { "Type": "AWS::Cognito::UserPoolClient", @@ -183,10 +180,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_1rvCNKN5B" - }, - "DependsOn": [ - "amplifyAuthUserPool4BA7F805" - ] + } }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", @@ -241,10 +235,7 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-main-5e0fa-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-main-5e0fa-authRole" } - }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC" - ] + } } }, "Conditions": { diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.mappings.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.mappings.json index d2fc08ac276..a7741f3e5d5 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.mappings.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR", - "LogicalResourceId": "S3Bucket" + "LogicalResourceId": "S3Bucket", + "StackName": "amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR" }, "Destination": { - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I", - "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" + "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.source.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.source.template.json index d623d0c18b3..c3476642330 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.source.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.source.template.json @@ -213,7 +213,6 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -250,7 +249,6 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -287,7 +285,6 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -324,7 +321,6 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -361,7 +357,6 @@ "amplify-backendonly-main-5e0fa-unauthRole" ] }, - "DependsOn": [], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -416,7 +411,6 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -469,7 +463,6 @@ "amplify-backendonly-main-5e0fa-unauthRole" ] }, - "DependsOn": [], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.target.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.target.template.json index a7608416efc..2c4aa9226e0 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.target.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.target.template.json @@ -69,9 +69,6 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" }, - "DependsOn": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketPolicy14D90AB6" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -128,9 +125,6 @@ ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.template.json index 215b67b1a19..e4c6ac26f39 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.template.json @@ -303,10 +303,6 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-ge-amplifyAuthauthenticatedU-NrnOsacJVeCr" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.template.json index 4c65e86344c..7d2b002bc3d 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.template.json @@ -141,9 +141,6 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-backendonly-ge-backendonlycb1a13ab81664-hysxrjfwrstc" }, - "DependsOn": [ - "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucketPolicy14D90AB6" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -200,9 +197,6 @@ ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.template.json index fcc393b3d08..f92f2b63239 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.template.json @@ -177,10 +177,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_1rvCNKN5B" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", @@ -192,10 +189,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_1rvCNKN5B" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClientRole": { "Type": "AWS::IAM::Role", @@ -288,10 +282,7 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-main-5e0fa-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-backendonly-main-5e0fa-authRole" } - }, - "DependsOn": [ - "IdentityPool" - ] + } } }, "Outputs": { diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.template.json index 79c87cef7b1..87ee6202dd7 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/update.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.template.json @@ -277,7 +277,6 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -314,7 +313,6 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -351,7 +349,6 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -388,7 +385,6 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -425,7 +421,6 @@ "amplify-backendonly-main-5e0fa-unauthRole" ] }, - "DependsOn": [], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -480,7 +475,6 @@ "amplify-backendonly-main-5e0fa-authRole" ] }, - "DependsOn": [], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -533,7 +527,6 @@ "amplify-backendonly-main-5e0fa-unauthRole" ] }, - "DependsOn": [], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json index 514e117ec84..53219238c26 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" } }, { "Source": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" } }, { "Source": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" } }, { "Source": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" } }, { "Source": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json index f5445c5ca22..a4cc052dc53 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json @@ -76,27 +76,6 @@ "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPool/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 172800, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_olNpwuJIL" - }, - "Metadata": { - "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -129,6 +108,27 @@ "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPoolAppClient/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 172800, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_olNpwuJIL" + }, + "Metadata": { + "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { @@ -209,10 +209,6 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-gen-amplifyAuthauthenticatedU-cOJdlmnFCZS8" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.mappings.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.mappings.json index 0484781a42e..2bc43c0d589 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.mappings.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH", - "LogicalResourceId": "activity1E902D9C" + "LogicalResourceId": "activity1E902D9C", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding", - "LogicalResourceId": "activity1E902D9C" + "LogicalResourceId": "activity1E902D9C", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.mappings.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.mappings.json index 46ccb104e47..eba71ce8ad5 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.mappings.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", - "LogicalResourceId": "UserPool" + "LogicalResourceId": "UserPool", + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" } }, { "Source": { - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", - "LogicalResourceId": "UserPoolClientWeb" + "LogicalResourceId": "UserPoolClientWeb", + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" } }, { "Source": { - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", - "LogicalResourceId": "UserPoolClient" + "LogicalResourceId": "UserPoolClient", + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" } }, { "Source": { - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", - "LogicalResourceId": "IdentityPool" + "LogicalResourceId": "IdentityPool", + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" } }, { "Source": { - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", - "LogicalResourceId": "IdentityPoolRoleMap" + "LogicalResourceId": "IdentityPoolRoleMap", + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.target.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.target.template.json index 05a72f6824d..eccbf15fe65 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.target.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.target.template.json @@ -168,8 +168,7 @@ "UsernameConfiguration": { "CaseSensitive": false } - }, - "DependsOn": [] + } }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", @@ -180,10 +179,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Zs9EZpCYX" - }, - "DependsOn": [ - "amplifyAuthUserPool4BA7F805" - ] + } }, "amplifyAuthUserPoolNativeAppClient79534448": { "Type": "AWS::Cognito::UserPoolClient", @@ -195,10 +191,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Zs9EZpCYX" - }, - "DependsOn": [ - "amplifyAuthUserPool4BA7F805" - ] + } }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", @@ -253,10 +246,7 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-authRole" } - }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC" - ] + } } }, "Conditions": { diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.mappings.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.mappings.json index 7c0f1c98009..1a8df8dff20 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.mappings.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4", - "LogicalResourceId": "DynamoDBTable" + "LogicalResourceId": "DynamoDBTable", + "StackName": "amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4" }, "Destination": { - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH", - "LogicalResourceId": "activity1E902D9C" + "LogicalResourceId": "activity1E902D9C", + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.template.json index 995d534b583..c51c35ae518 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.template.json @@ -308,10 +308,6 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-gen-amplifyAuthauthenticatedU-cOJdlmnFCZS8" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.template.json index b9cb6fb96d4..e93e870ea9b 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.template.json @@ -255,8 +255,7 @@ "UsernameConfiguration": { "CaseSensitive": false } - }, - "DependsOn": [] + } }, "UserPoolClientWeb": { "Type": "AWS::Cognito::UserPoolClient", @@ -267,10 +266,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Zs9EZpCYX" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", @@ -282,10 +278,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Zs9EZpCYX" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClientRole": { "Type": "AWS::IAM::Role", @@ -378,10 +371,7 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-authRole" } - }, - "DependsOn": [ - "IdentityPool" - ] + } } }, "Outputs": { diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.mappings.json index 18fe4e64dc6..b4e92bdd13e 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW", - "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047" + "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding", - "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047" + "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json index 1c699ef3e6d..55c5abf24ff 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" } }, { "Source": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" } }, { "Source": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" } }, { "Source": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" } }, { "Source": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json index e41793ca420..56297208ba2 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json @@ -71,27 +71,6 @@ "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_1A4RMvPNr" - }, - "Metadata": { - "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -124,6 +103,27 @@ "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPoolAppClient/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_1A4RMvPNr" + }, + "Metadata": { + "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { @@ -204,10 +204,6 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-ge-amplifyAuthauthenticatedU-UANJImTyKZ7p" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.mappings.json index 48bd336abd1..4bf067c041c 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP", - "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" + "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding", - "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" + "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.source.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.source.template.json index 26152a149ed..3a7e2136339 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.source.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.source.template.json @@ -69,9 +69,6 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" }, - "DependsOn": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketPolicy9A17D834" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -128,9 +125,6 @@ ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.mappings.json index 2f3cfeed033..f551223b652 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S", - "LogicalResourceId": "KinesisStream" + "LogicalResourceId": "KinesisStream", + "StackName": "amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW", - "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047" + "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.mappings.json index cc0780fc7cc..60893879984 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", - "LogicalResourceId": "UserPool" + "LogicalResourceId": "UserPool", + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" } }, { "Source": { - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", - "LogicalResourceId": "UserPoolClientWeb" + "LogicalResourceId": "UserPoolClientWeb", + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" } }, { "Source": { - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", - "LogicalResourceId": "UserPoolClient" + "LogicalResourceId": "UserPoolClient", + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" } }, { "Source": { - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", - "LogicalResourceId": "IdentityPool" + "LogicalResourceId": "IdentityPool", + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" } }, { "Source": { - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", - "LogicalResourceId": "IdentityPoolRoleMap" + "LogicalResourceId": "IdentityPoolRoleMap", + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.target.template.json index 1ba32e13166..75f291f8426 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.target.template.json @@ -168,10 +168,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Cwvqs93Nc" - }, - "DependsOn": [ - "amplifyAuthUserPool4BA7F805" - ] + } }, "amplifyAuthUserPoolNativeAppClient79534448": { "Type": "AWS::Cognito::UserPoolClient", @@ -183,10 +180,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Cwvqs93Nc" - }, - "DependsOn": [ - "amplifyAuthUserPool4BA7F805" - ] + } }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", @@ -241,10 +235,7 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-main-1959a-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-main-1959a-authRole" } - }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC" - ] + } } }, "Conditions": { diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.mappings.json index 7300a23d4f8..f0f58245b71 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA", - "LogicalResourceId": "S3Bucket" + "LogicalResourceId": "S3Bucket", + "StackName": "amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA" }, "Destination": { - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP", - "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" + "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.source.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.source.template.json index 06a94faaeaf..91330cd6b72 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.source.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.source.template.json @@ -213,7 +213,6 @@ "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -250,7 +249,6 @@ "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -287,7 +285,6 @@ "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -324,7 +321,6 @@ "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -361,7 +357,6 @@ "amplify-moodboard-main-1959a-unauthRole" ] }, - "DependsOn": [], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -416,7 +411,6 @@ "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -469,7 +463,6 @@ "amplify-moodboard-main-1959a-unauthRole" ] }, - "DependsOn": [], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.target.template.json index 603dfa5b725..b5962a18290 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.target.template.json @@ -69,9 +69,6 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" }, - "DependsOn": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketPolicy9A17D834" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -128,9 +125,6 @@ ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.template.json index 3557a8fa1e2..3c4e609fcb2 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.template.json @@ -303,10 +303,6 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-ge-amplifyAuthauthenticatedU-UANJImTyKZ7p" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.template.json index 8721f5c0e54..b62dc855c35 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.template.json @@ -141,9 +141,6 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-moodboard-ge-moodboard20e29595008142e-hil8whofbv0z" }, - "DependsOn": [ - "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucketPolicy9A17D834" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -200,9 +197,6 @@ ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.template.json index ef08b4cd597..97ac6185c7d 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.template.json @@ -177,10 +177,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Cwvqs93Nc" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", @@ -192,10 +189,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_Cwvqs93Nc" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClientRole": { "Type": "AWS::IAM::Role", @@ -288,10 +282,7 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-main-1959a-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-moodboard-main-1959a-authRole" } - }, - "DependsOn": [ - "IdentityPool" - ] + } } }, "Outputs": { diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.template.json index 8ae961bc698..0ec74d2088d 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/update.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.template.json @@ -277,7 +277,6 @@ "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -314,7 +313,6 @@ "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -351,7 +349,6 @@ "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -388,7 +385,6 @@ "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -425,7 +421,6 @@ "amplify-moodboard-main-1959a-unauthRole" ] }, - "DependsOn": [], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -480,7 +475,6 @@ "amplify-moodboard-main-1959a-authRole" ] }, - "DependsOn": [], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -533,7 +527,6 @@ "amplify-moodboard-main-1959a-unauthRole" ] }, - "DependsOn": [], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json index c32bf4971d4..4f9173460d0 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" } }, { "Source": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" } }, { "Source": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" } }, { "Source": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" } }, { "Source": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json index c1c890be0a7..f86fae3e9c3 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json @@ -71,27 +71,6 @@ "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPool/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_OFRBVzhq5" - }, - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -124,6 +103,27 @@ "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPoolAppClient/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_OFRBVzhq5" + }, + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { @@ -204,10 +204,6 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-ge-amplifyAuthauthenticatedU-7u6GoubHxSy7" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.mappings.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.mappings.json index 4df170487c2..e19a55f6415 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.mappings.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY", - "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding", - "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.source.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.source.template.json index 3d7eee45f75..436640b9b85 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.source.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.source.template.json @@ -69,9 +69,6 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" }, - "DependsOn": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -106,10 +103,6 @@ "Managed": true, "SkipDestinationValidation": false }, - "DependsOn": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketAllowBucketNotificationsToamplifyproductcataloggen2mainbranch4b79ec0f9afunctionS3Trigger1ef46783gen2mainlambda8226525A5BBBE747", - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Notifications/Resource" } @@ -181,9 +174,6 @@ ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", @@ -296,10 +286,6 @@ } ] }, - "DependsOn": [ - "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36", - "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Resource" } diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.mappings.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.mappings.json index d48c12ba206..dcbb7ff0bfa 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.mappings.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", - "LogicalResourceId": "UserPool" + "LogicalResourceId": "UserPool", + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" } }, { "Source": { - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", - "LogicalResourceId": "UserPoolClientWeb" + "LogicalResourceId": "UserPoolClientWeb", + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" } }, { "Source": { - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", - "LogicalResourceId": "UserPoolClient" + "LogicalResourceId": "UserPoolClient", + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" } }, { "Source": { - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", - "LogicalResourceId": "IdentityPool" + "LogicalResourceId": "IdentityPool", + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" } }, { "Source": { - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", - "LogicalResourceId": "IdentityPoolRoleMap" + "LogicalResourceId": "IdentityPoolRoleMap", + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.target.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.target.template.json index 187486f41fc..a69d3b0e16d 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.target.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.target.template.json @@ -205,10 +205,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_66BkqNfdX" - }, - "DependsOn": [ - "amplifyAuthUserPool4BA7F805" - ] + } }, "amplifyAuthUserPoolNativeAppClient79534448": { "Type": "AWS::Cognito::UserPoolClient", @@ -220,10 +217,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_66BkqNfdX" - }, - "DependsOn": [ - "amplifyAuthUserPool4BA7F805" - ] + } }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", @@ -278,10 +272,7 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-main-31323-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-main-31323-authRole" } - }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC" - ] + } } }, "Conditions": { diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.mappings.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.mappings.json index bf796ac778b..8caf8958ceb 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.mappings.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI", - "LogicalResourceId": "S3Bucket" + "LogicalResourceId": "S3Bucket", + "StackName": "amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI" }, "Destination": { - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY", - "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" + "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.source.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.source.template.json index 931e6107b36..da74f677807 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.source.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.source.template.json @@ -274,7 +274,6 @@ "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -311,7 +310,6 @@ "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -348,7 +346,6 @@ "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -385,7 +382,6 @@ "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3AuthReadPolicy": { @@ -440,7 +436,6 @@ "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [], "Condition": "AuthReadAndList" }, "S3TriggerBucketPolicy": { @@ -493,8 +488,7 @@ "Roles": [ "S3Trigger1ef46783LambdaRole1ef46783-main" ] - }, - "DependsOn": [] + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.target.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.target.template.json index ee4724de7d0..9a1ece0d4ba 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.target.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.target.template.json @@ -69,9 +69,6 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" }, - "DependsOn": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -106,10 +103,6 @@ "Managed": true, "SkipDestinationValidation": false }, - "DependsOn": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketAllowBucketNotificationsToamplifyproductcataloggen2mainbranch4b79ec0f9afunctionS3Trigger1ef46783gen2mainlambda8226525A5BBBE747", - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Notifications/Resource" } @@ -181,9 +174,6 @@ ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", @@ -296,10 +286,6 @@ } ] }, - "DependsOn": [ - "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36", - "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Resource" } @@ -539,7 +525,6 @@ ] } }, - "DependsOn": [], "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain" } diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.template.json index 9a3f81d31df..ba390bdc15b 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.template.json @@ -340,10 +340,6 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-ge-amplifyAuthauthenticatedU-7u6GoubHxSy7" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.template.json index 3eddc81943c..4f29cfcc0ed 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.template.json @@ -141,9 +141,6 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-productcatalog-ge-productcatalogf95af07481-vzyggfkxkyam" }, - "DependsOn": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -178,10 +175,6 @@ "Managed": true, "SkipDestinationValidation": false }, - "DependsOn": [ - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketAllowBucketNotificationsToamplifyproductcataloggen2mainbranch4b79ec0f9afunctionS3Trigger1ef46783gen2mainlambda8226525A5BBBE747", - "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucketPolicyF51DAA81" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/productcatalogf95af07481f845caa6594c26ac9c8ed331323-gen2-main/Bucket/Notifications/Resource" } @@ -253,9 +246,6 @@ ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", @@ -368,10 +358,6 @@ } ] }, - "DependsOn": [ - "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleDefaultPolicy2CF63D36", - "BucketNotificationsHandler050a0587b7544547bf325f094a3db834RoleB6FB88EC" - ], "Metadata": { "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/storage/BucketNotificationsHandler050a0587b7544547bf325f094a3db834/Resource" } diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.template.json index b2b78850e70..f680f1c6eb8 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.template.json @@ -177,10 +177,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_66BkqNfdX" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", @@ -192,10 +189,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_66BkqNfdX" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClientRole": { "Type": "AWS::IAM::Role", @@ -288,10 +282,7 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-main-31323-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-productcatalog-main-31323-authRole" } - }, - "DependsOn": [ - "IdentityPool" - ] + } } }, "Outputs": { diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.template.json index a490d8b9de5..a194d381190 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/update.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.template.json @@ -267,7 +267,6 @@ ] } }, - "DependsOn": [], "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain" }, @@ -351,7 +350,6 @@ "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -388,7 +386,6 @@ "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -425,7 +422,6 @@ "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -462,7 +458,6 @@ "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3AuthReadPolicy": { @@ -517,7 +512,6 @@ "amplify-productcatalog-main-31323-authRole" ] }, - "DependsOn": [], "Condition": "AuthReadAndList" }, "S3TriggerBucketPolicy": { @@ -570,8 +564,7 @@ "Roles": [ "S3Trigger1ef46783LambdaRole1ef46783-main" ] - }, - "DependsOn": [] + } } } } \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json index ff5c6741705..a5ab68ecc4a 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" } }, { "Source": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" } }, { "Source": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" } }, { "Source": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" } }, { "Source": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json index 4bd455c3620..779bb840e47 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json @@ -71,27 +71,6 @@ "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPool/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_pXlpWF7QY" - }, - "Metadata": { - "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -124,6 +103,27 @@ "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPoolAppClient/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_pXlpWF7QY" + }, + "Metadata": { + "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { @@ -204,10 +204,6 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-ge-amplifyAuthauthenticatedU-HuWvFKttqdhF" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json index a5ea8fd59de..20edd36515b 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ", - "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" + "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding", - "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" + "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.source.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.source.template.json index 580eda74c18..ead58590739 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.source.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.source.template.json @@ -69,9 +69,6 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" }, - "DependsOn": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketPolicy8CF7A616" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -128,9 +125,6 @@ ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.mappings.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.mappings.json index 07eccbab939..53e3abf3235 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.mappings.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", - "LogicalResourceId": "UserPool" + "LogicalResourceId": "UserPool", + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" } }, { "Source": { - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", - "LogicalResourceId": "UserPoolClientWeb" + "LogicalResourceId": "UserPoolClientWeb", + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" } }, { "Source": { - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", - "LogicalResourceId": "UserPoolClient" + "LogicalResourceId": "UserPoolClient", + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" } }, { "Source": { - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", - "LogicalResourceId": "IdentityPool" + "LogicalResourceId": "IdentityPool", + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" } }, { "Source": { - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", - "LogicalResourceId": "IdentityPoolRoleMap" + "LogicalResourceId": "IdentityPoolRoleMap", + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.target.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.target.template.json index 06fb757fe75..9e7b4fc0c68 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.target.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.target.template.json @@ -168,10 +168,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_ct5s4IEz3" - }, - "DependsOn": [ - "amplifyAuthUserPool4BA7F805" - ] + } }, "amplifyAuthUserPoolNativeAppClient79534448": { "Type": "AWS::Cognito::UserPoolClient", @@ -183,10 +180,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_ct5s4IEz3" - }, - "DependsOn": [ - "amplifyAuthUserPool4BA7F805" - ] + } }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", @@ -241,10 +235,7 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-main-02940-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-main-02940-authRole" } - }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC" - ] + } } }, "Conditions": { diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json index 129799390d2..e8be4aa2427 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "StackName": "amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY", - "LogicalResourceId": "S3Bucket" + "LogicalResourceId": "S3Bucket", + "StackName": "amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY" }, "Destination": { - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ", - "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" + "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.source.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.source.template.json index fadc25c61f3..5df877c8f45 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.source.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.source.template.json @@ -213,7 +213,6 @@ "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -250,7 +249,6 @@ "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -287,7 +285,6 @@ "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -324,7 +321,6 @@ "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -361,7 +357,6 @@ "amplify-projectboards-main-02940-unauthRole" ] }, - "DependsOn": [], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -416,7 +411,6 @@ "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -469,7 +463,6 @@ "amplify-projectboards-main-02940-unauthRole" ] }, - "DependsOn": [], "Condition": "GuestReadAndList" } } diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.target.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.target.template.json index 60a42386506..3f1975883b2 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.target.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.target.template.json @@ -69,9 +69,6 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" }, - "DependsOn": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketPolicy8CF7A616" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -128,9 +125,6 @@ ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.template.json index ce3bc368f1b..e004bc868c5 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.template.json @@ -303,10 +303,6 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-ge-amplifyAuthauthenticatedU-HuWvFKttqdhF" } }, - "DependsOn": [ - "amplifyAuthIdentityPool3FDE84CC", - "amplifyAuthUserPoolAppClient2626C6F8" - ], "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.template.json index 0c2b9cd2a9c..89a6d81ca6f 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.template.json @@ -141,9 +141,6 @@ "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ/CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", "BucketName": "amplify-projectboards-ge-projectboards34b9a7f3c2c-3ojawjs7ffmv" }, - "DependsOn": [ - "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketPolicy8CF7A616" - ], "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { @@ -200,9 +197,6 @@ ] } }, - "DependsOn": [ - "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" - ], "Metadata": { "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/storage/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.template.json index 3aa2d612914..92d9ab6fde9 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.template.json @@ -177,10 +177,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_ct5s4IEz3" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", @@ -192,10 +189,7 @@ "RefreshToken": "days" }, "UserPoolId": "us-east-1_ct5s4IEz3" - }, - "DependsOn": [ - "UserPool" - ] + } }, "UserPoolClientRole": { "Type": "AWS::IAM::Role", @@ -288,10 +282,7 @@ "unauthenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-main-02940-unauthRole", "authenticated": "arn:aws:iam::123456789012:role/amplify-projectboards-main-02940-authRole" } - }, - "DependsOn": [ - "IdentityPool" - ] + } } }, "Outputs": { diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.template.json index eed789328a5..1ebeee344f7 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/update.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.template.json @@ -277,7 +277,6 @@ "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPublic" }, "S3AuthProtectedPolicy": { @@ -314,7 +313,6 @@ "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthProtected" }, "S3AuthPrivatePolicy": { @@ -351,7 +349,6 @@ "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthPrivate" }, "S3AuthUploadPolicy": { @@ -388,7 +385,6 @@ "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [], "Condition": "CreateAuthUploads" }, "S3GuestPublicPolicy": { @@ -425,7 +421,6 @@ "amplify-projectboards-main-02940-unauthRole" ] }, - "DependsOn": [], "Condition": "CreateGuestPublic" }, "S3AuthReadPolicy": { @@ -480,7 +475,6 @@ "amplify-projectboards-main-02940-authRole" ] }, - "DependsOn": [], "Condition": "AuthReadAndList" }, "S3GuestReadPolicy": { @@ -533,7 +527,6 @@ "amplify-projectboards-main-02940-unauthRole" ] }, - "DependsOn": [], "Condition": "GuestReadAndList" } } diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/clients/cloudformation.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/clients/cloudformation.ts index af781ffacd7..3f953fe3322 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/clients/cloudformation.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/_framework/clients/cloudformation.ts @@ -109,8 +109,7 @@ export class CloudFormationMock { this.mock .on(cloudformation.DescribeStacksCommand) .callsFake(async (input: cloudformation.DescribeStacksInput): Promise => { - const template = this._templateForStack.get(input.StackName!); - if (!template) { + if (!this._templateForStack.has(input.StackName!)) { throw new cloudformation.CloudFormationServiceException({ name: 'ValidationError', message: `stack ${input.StackName} does not exist`, @@ -139,8 +138,13 @@ export class CloudFormationMock { this.mock .on(cloudformation.GetTemplateCommand) .callsFake(async (input: cloudformation.GetTemplateCommandInput): Promise => { + const templateBody = this._templateForStack.get(input.StackName!); + if (!templateBody) { + throw new Error(`Unable to find template for stack ${input.StackName}`); + } return { - TemplateBody: this._templateForStack.get(input.StackName!), + // create a clone so our code doesn't mutate the inner objects. + TemplateBody: JSON.stringify(JSON.parse(templateBody)), $metadata: {}, }; }); @@ -152,8 +156,8 @@ export class CloudFormationMock { async (input: cloudformation.CreateStackRefactorCommandInput): Promise => { const source = input.StackDefinitions![0]; const target = input.StackDefinitions![1]; - this._templateForStack.set(source.StackName!, source.TemplateBody!); - this._templateForStack.set(target.StackName!, target.TemplateBody!); + this._setTemplate(source.StackName!, source.TemplateBody!); + this._setTemplate(target.StackName!, target.TemplateBody!); return { StackRefactorId: `${Date.now()}`, $metadata: {} }; }, ); @@ -190,8 +194,12 @@ export class CloudFormationMock { this.mock .on(cloudformation.UpdateStackCommand) .callsFake(async (input: cloudformation.UpdateStackCommandInput): Promise => { - this._templateForStack.set(input.StackName!, input.TemplateBody!); + this._setTemplate(input.StackName!, input.TemplateBody!); return { StackId: input.StackName, $metadata: {} }; }); } + + private _setTemplate(stackName: string, templateBody: string) { + this._templateForStack.set(stackName, templateBody); + } } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts index 8aea4a70e8a..f4046480cff 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/cfn.ts @@ -127,7 +127,7 @@ export class Cfn { } const sourceTemplate = await this.fetchTemplate(sourceStackId); - const targetTemplate = targetStack ? await this.fetchTemplate(targetStackId) : EMPTY_HOLDING_TEMPLATE; + const targetTemplate = targetStack ? await this.fetchTemplate(targetStackId) : JSON.parse(JSON.stringify(EMPTY_HOLDING_TEMPLATE)); for (const mapping of resourceMappings) { targetTemplate.Resources[mapping.Destination.LogicalResourceId] = sourceTemplate.Resources[mapping.Source.LogicalResourceId]; From 1e72d2aad995dc853f8014eeee39284c05778918 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Mon, 23 Mar 2026 17:09:13 -0400 Subject: [PATCH 41/70] docs: add coding guideline for module-level mutable constants Add "Don't mutate module-level constant objects" to the Mutability section of CODING_GUIDELINES.md. This pattern caused a real bug where EMPTY_HOLDING_TEMPLATE was shared across refactorers and accumulated resources from previous calls. --- Prompt: review session and add needed guidelines. --- CODING_GUIDELINES.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/CODING_GUIDELINES.md b/CODING_GUIDELINES.md index 0fb54fb4692..8bd13545158 100644 --- a/CODING_GUIDELINES.md +++ b/CODING_GUIDELINES.md @@ -129,6 +129,43 @@ funcGenerator.setAuthGenerator(authGenerator); --- +### Don't mutate module-level constant objects + +`const` prevents reassignment but does not prevent mutation of the object's properties. A module-level `const` object that gets passed to a function and mutated there silently becomes shared mutable state — every subsequent caller sees the mutations from previous calls. + +This is especially dangerous when the constant looks like a template or default value that multiple callers use as a starting point. The first caller mutates it, and the second caller unknowingly starts with the first caller's leftovers. + +```typescript +// Bad — shared object mutated by callers +const EMPTY_TEMPLATE = { Resources: {} }; + +function createStack(resources: Record) { + const template = EMPTY_TEMPLATE; // not a copy! + for (const [id, r] of Object.entries(resources)) { + template.Resources[id] = r; // mutates the shared constant + } + return template; +} + +// Second call sees resources from the first call +createStack({ BucketA: bucket }); +createStack({ BucketB: bucket }); // template now has both BucketA and BucketB +``` + +**Instead:** Clone the object before mutating it, or use a factory function that returns a fresh object each time. + +```typescript +// Good — clone before use +const template = JSON.parse(JSON.stringify(EMPTY_TEMPLATE)); + +// Good — factory function +function emptyTemplate() { + return { Resources: {} }; +} +``` + +--- + ### Prefer `const` over `let` Avoid `let` when the code can be restructured to use `const` instead. Even when `let` is technically correct (the variable is reassigned), the reassignment pattern itself is often the problem — it usually means branching logic is being used to populate variables that are consumed later, making it hard to reason about what values they hold at any given point. From 152546117702652cea495859ea5c3cc0d617b0df Mon Sep 17 00:00:00 2001 From: Sai Ray Date: Mon, 23 Mar 2026 17:26:10 -0400 Subject: [PATCH 42/70] chore: geo codegen --- .../src/commands/gen2-migration/generate.ts | 14 + .../generate/_infra/gen1-app.ts | 3 + .../generate/amplify/geo/geo-cfn-converter.ts | 316 ++++++++++++++++ .../generate/amplify/geo/geo.generator.ts | 125 +++++++ .../generate/amplify/geo/geo.renderer.ts | 336 ++++++++++++++++++ .../gen2-migration/refactor/refactor.ts | 9 + 6 files changed, 803 insertions(+) create mode 100644 packages/amplify-cli/src/commands/gen2-migration/generate/amplify/geo/geo-cfn-converter.ts create mode 100644 packages/amplify-cli/src/commands/gen2-migration/generate/amplify/geo/geo.generator.ts create mode 100644 packages/amplify-cli/src/commands/gen2-migration/generate/amplify/geo/geo.renderer.ts diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate.ts b/packages/amplify-cli/src/commands/gen2-migration/generate.ts index ac66478299f..cb4d7b58c1b 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate.ts @@ -24,6 +24,7 @@ import { S3Generator } from './generate/amplify/storage/s3.generator'; import { DynamoDBGenerator } from './generate/amplify/storage/dynamodb.generator'; import { FunctionGenerator } from './generate/amplify/function/function.generator'; import { AnalyticsKinesisGenerator } from './generate/amplify/analytics/kinesis.generator'; +import { GeoGenerator } from './generate/amplify/geo/geo.generator'; import { fileOrDirectoryExists } from './generate/_infra/files'; const AMPLIFY_DIR = 'amplify'; @@ -47,6 +48,9 @@ export class AmplifyMigrationGenerateStep extends AmplifyMigrationStep { case 'api:API Gateway': case 'analytics:Kinesis': case 'function:Lambda': + case 'geo:Map': + case 'geo:PlaceIndex': + case 'geo:GeofenceCollection': assessment.record('generate', resource, { supported: true }); break; case 'unsupported': @@ -70,6 +74,7 @@ export class AmplifyMigrationGenerateStep extends AmplifyMigrationStep { // Cross-category state captured during the loop. let authGenerator: AuthGenerator | undefined; let s3Generator: S3Generator | undefined; + let geoGenerator: GeoGenerator | undefined; const functionGenerators: FunctionGenerator[] = []; for (const resource of discovered) { @@ -111,6 +116,15 @@ export class AmplifyMigrationGenerateStep extends AmplifyMigrationStep { case 'analytics:Kinesis': generators.push(new AnalyticsKinesisGenerator(gen1App, backendGenerator, outputDir, resource.resourceName)); break; + case 'geo:Map': + case 'geo:PlaceIndex': + case 'geo:GeofenceCollection': + // All geo services share a single GeoGenerator instance. + if (!geoGenerator) { + geoGenerator = new GeoGenerator(gen1App, backendGenerator, outputDir); + generators.push(geoGenerator); + } + break; case 'function:Lambda': { const functionCategoryMap = computeFunctionCategories(gen1App); const funcGen = new FunctionGenerator({ diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/_infra/gen1-app.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/_infra/gen1-app.ts index 0c35890c2d6..2b9e7481ebc 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/_infra/gen1-app.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/_infra/gen1-app.ts @@ -36,6 +36,9 @@ export const SUPPORTED_RESOURCE_KEYS = [ 'api:API Gateway', 'analytics:Kinesis', 'function:Lambda', + 'geo:Map', + 'geo:PlaceIndex', + 'geo:GeofenceCollection', ] as const; /** diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/geo/geo-cfn-converter.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/geo/geo-cfn-converter.ts new file mode 100644 index 00000000000..e9b00f8845c --- /dev/null +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/geo/geo-cfn-converter.ts @@ -0,0 +1,316 @@ +import * as path from 'path'; +import * as fs from 'fs/promises'; +import * as cdk_from_cfn from 'cdk-from-cfn'; +import CFNConditionResolver from '../analytics/cfn-condition-resolver'; +import { GetObjectCommand, S3Client } from '@aws-sdk/client-s3'; +import { CloudFormationClient, DescribeStackResourcesCommand, DescribeStacksCommand, Parameter } from '@aws-sdk/client-cloudformation'; + +/** + * Geo service type from Gen1 amplify-meta.json. + */ +export type GeoServiceName = 'Map' | 'PlaceIndex' | 'GeofenceCollection'; + +/** + * Provider metadata for a Gen1 geo resource. + */ +export interface GeoProviderMetadata { + readonly s3TemplateURL: string; + readonly logicalId: string; +} + +/** + * Base fields common to all geo codegen results. + */ +interface GeoCodegenResultBase { + readonly constructClassName: string; + readonly constructFileName: string; + readonly resourceName: string; + readonly userPoolIdParamName: string; + readonly groupRoles: ReadonlyArray<{ readonly paramName: string; readonly groupName: string }>; + readonly isDefault: string; +} + +export interface MapCodegenResult extends GeoCodegenResultBase { + readonly serviceName: 'Map'; + readonly mapName: string; + readonly mapStyle: string; +} + +export interface PlaceIndexCodegenResult extends GeoCodegenResultBase { + readonly serviceName: 'PlaceIndex'; + readonly indexName: string; + readonly dataProvider: string; + readonly dataSourceIntendedUse: string; +} + +export interface GeofenceCollectionCodegenResult extends GeoCodegenResultBase { + readonly serviceName: 'GeofenceCollection'; + readonly collectionName: string; +} + +export type GeoCodegenResult = MapCodegenResult | PlaceIndexCodegenResult | GeofenceCollectionCodegenResult; + +/** + * Converts geo CloudFormation templates to CDK constructs using cdk-from-cfn. + * + * Handles all three geo service types (Map, PlaceIndex, GeofenceCollection). + * Downloads the nested stack's CFN template from S3, resolves conditions, + * fixes Fn::FindInMap dictionary lookups, and runs cdk-from-cfn to produce + * a TypeScript CDK construct file. + */ +export class GeoCfnConverter { + private readonly dir: string; + private readonly fileWriter: (content: string, filePath: string) => Promise; + private readonly s3Client: S3Client; + private readonly cfnClient?: CloudFormationClient; + private readonly rootStackName?: string; + + public constructor( + dir: string, + fileWriter: (content: string, filePath: string) => Promise, + s3Client: S3Client, + cfnClient?: CloudFormationClient, + rootStackName?: string, + ) { + this.dir = dir; + this.fileWriter = fileWriter; + this.s3Client = s3Client; + this.cfnClient = cfnClient; + this.rootStackName = rootStackName; + } + + /** + * Converts a geo CloudFormation template to a CDK L1 construct. + */ + public async generateGeoL1Code( + resourceName: string, + service: GeoServiceName, + providerMetadata: GeoProviderMetadata, + ): Promise { + const constructFileName = `${resourceName}-construct`; + const filePath = path.join(this.dir, 'amplify', 'geo', resourceName, `${constructFileName}.ts`); + const template = await getCfnTemplateFromS3(providerMetadata.s3TemplateURL, this.s3Client); + const nestedStackLogicalId = providerMetadata.logicalId; + + const parameters = await this.getNestedStackParameters(nestedStackLogicalId); + const finalTemplate = await this.preTransmute(template, nestedStackLogicalId); + const tsFile = cdk_from_cfn.transmute(JSON.stringify(finalTemplate), 'typescript', nestedStackLogicalId, 'construct'); + const fixedTsFile = this.postTransmute(tsFile); + + await fs.mkdir(path.dirname(filePath), { recursive: true }); + + const prettier = await import('prettier'); + const formatted = prettier.format(fixedTsFile, { + parser: 'typescript', + singleQuote: true, + tabWidth: 2, + printWidth: 80, + }); + await this.fileWriter(formatted, filePath); + + const classNameMatch = fixedTsFile.match(/export class (\w+) extends/); + if (!classNameMatch) { + throw new Error(`Failed to extract class name from generated construct for geo resource: ${resourceName}`); + } + const constructClassName = classNameMatch[1]; + + const paramMap = new Map( + parameters + .filter( + (p): p is { ParameterKey: string; ParameterValue: string } => p.ParameterKey !== undefined && p.ParameterValue !== undefined, + ) + .map((p) => [p.ParameterKey, p.ParameterValue]), + ); + + let userPoolIdParamName = ''; + const groupRoles: Array<{ readonly paramName: string; readonly groupName: string }> = []; + for (const [key] of paramMap) { + if (key.startsWith('auth') && key.endsWith('UserPoolId')) { + userPoolIdParamName = key; + } else if (key.startsWith('authuserPoolGroups') && key.endsWith('GroupRole')) { + const groupName = key.slice('authuserPoolGroups'.length, -'GroupRole'.length); + groupRoles.push({ paramName: key, groupName }); + } + } + + const base: GeoCodegenResultBase = { + constructClassName, + constructFileName, + resourceName, + userPoolIdParamName, + groupRoles, + isDefault: paramMap.get('isDefault') ?? 'false', + }; + + switch (service) { + case 'Map': + return { + ...base, + serviceName: 'Map', + mapName: paramMap.get('mapName') ?? resourceName, + mapStyle: paramMap.get('mapStyle') ?? '', + }; + case 'PlaceIndex': + return { + ...base, + serviceName: 'PlaceIndex', + indexName: paramMap.get('indexName') ?? resourceName, + dataProvider: paramMap.get('dataProvider') ?? '', + dataSourceIntendedUse: paramMap.get('dataSourceIntendedUse') ?? '', + }; + case 'GeofenceCollection': + return { + ...base, + serviceName: 'GeofenceCollection', + collectionName: paramMap.get('collectionName') ?? resourceName, + }; + default: { + const _exhaustiveCheck: never = service; + throw new Error(`Unsupported geo service type: ${_exhaustiveCheck}`); + } + } + } + + private async getNestedStackPhysicalName(logicalId: string): Promise { + if (!this.cfnClient || !this.rootStackName) return undefined; + + const response = await this.cfnClient.send( + new DescribeStackResourcesCommand({ StackName: this.rootStackName, LogicalResourceId: logicalId }), + ); + return response.StackResources?.[0]?.PhysicalResourceId; + } + + private async getNestedStackParameters(logicalId: string): Promise { + if (!this.cfnClient || !this.rootStackName) return []; + + const nestedStackName = await this.getNestedStackPhysicalName(logicalId); + if (!nestedStackName) return []; + + const response = await this.cfnClient.send(new DescribeStacksCommand({ StackName: nestedStackName })); + return response.Stacks?.[0]?.Parameters ?? []; + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private async preTransmute(template: any, logicalId: string): Promise { + const result = JSON.parse(JSON.stringify(template)); + + // Rename env → branchName + if (result.Parameters?.env) { + result.Parameters['branchName'] = result.Parameters.env; + delete result.Parameters.env; + } + + const updateRefs = (obj: unknown): void => { + if (typeof obj === 'object' && obj !== null) { + const record = obj as Record; + if (record.Ref === 'env') { + record.Ref = 'branchName'; + } + Object.values(record).forEach(updateRefs); + } + }; + updateRefs(result.Resources); + + // Replace Fn::Join patterns that construct group role names from + // UserPoolId + GroupRole with direct Ref to the GroupRole parameter. + // This preserves CDK tokens for cross-stack dependency tracking. + if (result.Parameters) { + const groupRoleParams = Object.keys(result.Parameters).filter( + (key: string) => key.startsWith('authuserPoolGroups') && key.endsWith('GroupRole'), + ); + + const replaceGroupRoleJoins = (obj: unknown): void => { + if (typeof obj !== 'object' || obj === null) return; + const record = obj as Record; + + for (const [key, value] of Object.entries(record)) { + if (typeof value === 'object' && value !== null && 'Fn::Join' in value) { + const joinValue = value as { 'Fn::Join': [string, unknown[]] }; + const [separator, parts] = joinValue['Fn::Join']; + if ( + separator === '-' && + Array.isArray(parts) && + parts.length === 2 && + typeof parts[0] === 'object' && + parts[0] !== null && + 'Ref' in parts[0] && + typeof parts[1] === 'string' && + parts[1].endsWith('GroupRole') + ) { + const groupRoleSuffix = parts[1]; + const matchingParam = groupRoleParams.find((p) => p.endsWith(groupRoleSuffix)); + if (matchingParam) { + record[key] = { Ref: matchingParam }; + } + } + } else { + replaceGroupRoleJoins(value); + } + } + }; + replaceGroupRoleJoins(result.Resources); + } + + // Resolve CFN conditions using deployed stack parameters + const parameters = await this.getNestedStackParameters(logicalId); + if (parameters.length > 0) { + const resolved = new CFNConditionResolver(result).resolve(parameters); + delete resolved.Conditions; + return resolved; + } + + return result; + } + + /** + * Fixes Fn::FindInMap dictionary lookups generated by cdk-from-cfn. + * + * cdk-from-cfn translates CFN Fn::FindInMap into plain dictionary lookups + * which fail at CDK synth time because this.region is a CDK Token. + * This replaces them with cdk.CfnMapping + findInMap() calls. + */ + private postTransmute(tsCode: string): string { + const mappingVarNames: string[] = []; + let result = tsCode.replace( + /const (\w+):\s*Record>\s*=\s*\{([\s\S]*?)\n(\s*)\};/g, + (_match, varName: string, mappingBody: string, indent: string) => { + mappingVarNames.push(varName); + const constructId = varName.charAt(0).toUpperCase() + varName.slice(1); + return `const ${varName} = new cdk.CfnMapping(this, '${constructId}', {\n${indent} mapping: {${mappingBody}\n${indent} },\n${indent}});`; + }, + ); + + for (const varName of mappingVarNames) { + const lookupRegex = new RegExp(`${varName}\\[([^\\]]+)\\]\\[(['"])([^'"]+)\\2\\]`, 'g'); + result = result.replace(lookupRegex, (_match, expr: string, quote: string, key: string) => { + return `${varName}.findInMap(${expr}, ${quote}${key}${quote})`; + }); + } + + return result; + } +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +async function getCfnTemplateFromS3(s3Url: string, s3Client: S3Client): Promise { + const url = new URL(s3Url); + let bucket: string; + let key: string; + + const virtualHostMatch = url.hostname.match(/^(.+)\.s3[.-].*\.amazonaws\.com$/); + + if (virtualHostMatch) { + bucket = virtualHostMatch[1]; + key = url.pathname.slice(1); + } else { + const splitPath = url.pathname.split('/'); + bucket = splitPath[1]; + key = splitPath.slice(2).join('/'); + } + + const response = await s3Client.send(new GetObjectCommand({ Bucket: bucket, Key: key })); + if (!response.Body) { + throw new Error(`Failed to retrieve S3 object: ${s3Url}`); + } + return JSON.parse(await response.Body.transformToString()); +} diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/geo/geo.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/geo/geo.generator.ts new file mode 100644 index 00000000000..4c4a8793ac3 --- /dev/null +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/geo/geo.generator.ts @@ -0,0 +1,125 @@ +import path from 'node:path'; +import fs from 'node:fs/promises'; +import ts from 'typescript'; +import { Planner } from '../../../planner'; +import { AmplifyMigrationOperation } from '../../../_operation'; +import { BackendGenerator } from '../backend.generator'; +import { Gen1App } from '../../_infra/gen1-app'; +import { TS } from '../../_infra/ts'; +import { GeoRenderer } from './geo.renderer'; +import { GeoCfnConverter, GeoCodegenResult, GeoServiceName, GeoProviderMetadata } from './geo-cfn-converter'; + +const factory = ts.factory; + +/** + * Metadata for a single Gen1 geo resource from amplify-meta.json. + */ +interface GeoResourceMeta { + readonly service: string; + readonly providerMetadata: GeoProviderMetadata; + readonly isDefault?: boolean; +} + +/** + * Generates geo resource files and contributes to backend.ts. + * + * Handles all three geo service types (Map, PlaceIndex, GeofenceCollection). + * For each resource, generates a CDK construct file via cdk-from-cfn and a + * per-resource resource.ts. Then generates a top-level geo/resource.ts + * aggregator that imports all sub-resources and calls backend.addOutput() + * with geo configuration. Contributes defineGeo import and call to backend.ts. + */ +export class GeoGenerator implements Planner { + private readonly gen1App: Gen1App; + private readonly backendGenerator: BackendGenerator; + private readonly outputDir: string; + private readonly renderer: GeoRenderer; + + public constructor(gen1App: Gen1App, backendGenerator: BackendGenerator, outputDir: string) { + this.gen1App = gen1App; + this.backendGenerator = backendGenerator; + this.outputDir = outputDir; + this.renderer = new GeoRenderer(); + } + + /** + * Plans geo generation operations for all geo resources. + */ + public async plan(): Promise { + const geoCategory = this.gen1App.meta('geo'); + if (!geoCategory) return []; + + const geoDir = path.join(this.outputDir, 'amplify', 'geo'); + const allCodegenResults: GeoCodegenResult[] = []; + + const operations: AmplifyMigrationOperation[] = []; + + for (const [resourceName, resourceMeta] of Object.entries(geoCategory)) { + const meta = resourceMeta as GeoResourceMeta; + const service = meta.service as GeoServiceName; + + operations.push({ + validate: () => undefined, + describe: async () => [`Generate amplify/geo/${resourceName}/resource.ts`], + execute: async () => { + const fileWriter = async (content: string, filePath: string) => { + await fs.mkdir(path.dirname(filePath), { recursive: true }); + await fs.writeFile(filePath, content, 'utf-8'); + }; + + const converter = new GeoCfnConverter( + this.outputDir, + fileWriter, + this.gen1App.clients.s3, + this.gen1App.clients.cloudFormation, + this.gen1App.rootStackName, + ); + + const codegenResult = await converter.generateGeoL1Code(resourceName, service, meta.providerMetadata); + allCodegenResults.push(codegenResult); + + const nodes = this.renderer.renderResource(codegenResult); + const content = TS.printNodes(nodes); + + const resourceDir = path.join(geoDir, resourceName); + await fs.mkdir(resourceDir, { recursive: true }); + await fs.writeFile(path.join(resourceDir, 'resource.ts'), content, 'utf-8'); + }, + }); + } + + // Top-level geo/resource.ts aggregator — runs after all per-resource operations + operations.push({ + validate: () => undefined, + describe: async () => ['Generate amplify/geo/resource.ts'], + execute: async () => { + const nodes = this.renderer.renderAggregator(allCodegenResults); + const content = TS.printNodes(nodes); + + await fs.mkdir(geoDir, { recursive: true }); + await fs.writeFile(path.join(geoDir, 'resource.ts'), content, 'utf-8'); + + // Contribute to backend.ts + this.backendGenerator.addImport('./geo/resource', ['defineGeo']); + this.backendGenerator.addEarlyStatement( + factory.createVariableStatement( + undefined, + factory.createVariableDeclarationList( + [ + factory.createVariableDeclaration( + 'geo', + undefined, + undefined, + factory.createCallExpression(factory.createIdentifier('defineGeo'), undefined, [factory.createIdentifier('backend')]), + ), + ], + ts.NodeFlags.Const, + ), + ), + ); + }, + }); + + return operations; + } +} diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/geo/geo.renderer.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/geo/geo.renderer.ts new file mode 100644 index 00000000000..7566e302241 --- /dev/null +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/geo/geo.renderer.ts @@ -0,0 +1,336 @@ +import ts from 'typescript'; +import { newLineIdentifier, TS } from '../../_infra/ts'; +import { GeoCodegenResult } from './geo-cfn-converter'; + +const factory = ts.factory; + +/** + * Renders per-resource and aggregator geo resource.ts files. + * Pure AST construction — no AWS calls, no side effects. + */ +export class GeoRenderer { + /** + * Renders a per-resource geo/{resourceName}/resource.ts file. + * + * Produces a defineXxx function that creates a CDK stack, + * instantiates the generated construct, and returns it. + */ + public renderResource(params: GeoCodegenResult): ts.NodeArray { + const { constructClassName, constructFileName, resourceName } = params; + + const constructImport = factory.createImportDeclaration( + undefined, + factory.createImportClause( + false, + undefined, + factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier(constructClassName))]), + ), + factory.createStringLiteral(`./${constructFileName}`), + ); + + const backendImport = factory.createImportDeclaration( + undefined, + factory.createImportClause( + false, + undefined, + factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier('Backend'))]), + ), + factory.createStringLiteral('@aws-amplify/backend'), + ); + + const branchNameConst = TS.createBranchNameDeclaration(); + const functionName = `define${resourceName.charAt(0).toUpperCase()}${resourceName.slice(1)}`; + + const createStackCall = TS.constDecl( + `${resourceName}Stack`, + factory.createCallExpression(TS.propAccess('backend', 'createStack') as ts.PropertyAccessExpression, undefined, [ + factory.createStringLiteral(resourceName), + ]), + ); + + const constructProps = this.buildConstructProps(params); + + const constructInstantiation = TS.constDecl( + resourceName, + factory.createNewExpression(factory.createIdentifier(constructClassName), undefined, [ + factory.createIdentifier(`${resourceName}Stack`), + factory.createStringLiteral(resourceName), + factory.createObjectLiteralExpression(constructProps, true), + ]), + ); + + const returnStatement = factory.createReturnStatement(factory.createIdentifier(resourceName)); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Backend in generated code + const arrowFunction = factory.createArrowFunction( + undefined, + undefined, + [ + factory.createParameterDeclaration( + undefined, + undefined, + factory.createIdentifier('backend'), + undefined, + factory.createTypeReferenceNode(factory.createIdentifier('Backend'), [factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)]), + ), + ], + undefined, + factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), + factory.createBlock([createStackCall, constructInstantiation, returnStatement], true), + ); + + const exportStatement = factory.createVariableStatement( + [factory.createModifier(ts.SyntaxKind.ExportKeyword)], + factory.createVariableDeclarationList( + [factory.createVariableDeclaration(factory.createIdentifier(functionName), undefined, undefined, arrowFunction)], + ts.NodeFlags.Const, + ), + ); + + return factory.createNodeArray([ + constructImport, + backendImport, + newLineIdentifier, + branchNameConst, + newLineIdentifier, + exportStatement, + ]); + } + + /** + * Renders the top-level geo/resource.ts aggregator that imports all + * sub-resources and calls backend.addOutput() with geo configuration. + */ + public renderAggregator(resources: readonly GeoCodegenResult[]): ts.NodeArray { + const resourceImports = resources.map((r) => { + const functionName = `define${r.resourceName.charAt(0).toUpperCase()}${r.resourceName.slice(1)}`; + return factory.createImportDeclaration( + undefined, + factory.createImportClause( + false, + undefined, + factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier(functionName))]), + ), + factory.createStringLiteral(`./${r.resourceName}/resource`), + ); + }); + + const backendImport = factory.createImportDeclaration( + undefined, + factory.createImportClause( + false, + undefined, + factory.createNamedImports([factory.createImportSpecifier(false, undefined, factory.createIdentifier('Backend'))]), + ), + factory.createStringLiteral('@aws-amplify/backend'), + ); + + const functionAssignments = resources.map((r) => { + const functionName = `define${r.resourceName.charAt(0).toUpperCase()}${r.resourceName.slice(1)}`; + return TS.constDecl( + r.resourceName, + factory.createCallExpression(factory.createIdentifier(functionName), undefined, [factory.createIdentifier('backend')]), + ); + }); + + const addOutputStatement = this.buildAddOutputStatement(resources); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Backend in generated code + const arrowFunction = factory.createArrowFunction( + undefined, + undefined, + [ + factory.createParameterDeclaration( + undefined, + undefined, + factory.createIdentifier('backend'), + undefined, + factory.createTypeReferenceNode(factory.createIdentifier('Backend'), [factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)]), + ), + ], + undefined, + factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), + factory.createBlock([...functionAssignments, addOutputStatement], true), + ); + + const exportStatement = factory.createVariableStatement( + [factory.createModifier(ts.SyntaxKind.ExportKeyword)], + factory.createVariableDeclarationList( + [factory.createVariableDeclaration(factory.createIdentifier('defineGeo'), undefined, undefined, arrowFunction)], + ts.NodeFlags.Const, + ), + ); + + return factory.createNodeArray([...resourceImports, backendImport, newLineIdentifier, exportStatement]); + } + + private buildConstructProps(params: GeoCodegenResult): ts.ObjectLiteralElementLike[] { + const props: ts.ObjectLiteralElementLike[] = []; + + // Map and PlaceIndex get authRoleName/unauthRoleName; GeofenceCollection does not + if (params.serviceName === 'Map' || params.serviceName === 'PlaceIndex') { + props.push(factory.createPropertyAssignment(factory.createIdentifier('authRoleName'), createAuthRoleAccess())); + props.push(factory.createPropertyAssignment(factory.createIdentifier('unauthRoleName'), createUnauthRoleAccess())); + } + + if (params.userPoolIdParamName) { + props.push(factory.createPropertyAssignment(factory.createIdentifier(params.userPoolIdParamName), createUserPoolIdAccess())); + } + + for (const groupRole of params.groupRoles) { + props.push( + factory.createPropertyAssignment(factory.createIdentifier(groupRole.paramName), createGroupRoleAccess(groupRole.groupName)), + ); + } + + props.push(...this.getServiceSpecificProps(params)); + props.push(factory.createShorthandPropertyAssignment(factory.createIdentifier('branchName'))); + props.push(factory.createPropertyAssignment(factory.createIdentifier('isDefault'), factory.createStringLiteral(params.isDefault))); + + return props; + } + + private getServiceSpecificProps(params: GeoCodegenResult): ts.PropertyAssignment[] { + switch (params.serviceName) { + case 'Map': + return [ + factory.createPropertyAssignment(factory.createIdentifier('mapName'), factory.createStringLiteral(params.mapName)), + factory.createPropertyAssignment(factory.createIdentifier('mapStyle'), factory.createStringLiteral(params.mapStyle)), + ]; + case 'PlaceIndex': + return [ + factory.createPropertyAssignment(factory.createIdentifier('indexName'), factory.createStringLiteral(params.indexName)), + factory.createPropertyAssignment(factory.createIdentifier('dataProvider'), factory.createStringLiteral(params.dataProvider)), + factory.createPropertyAssignment( + factory.createIdentifier('dataSourceIntendedUse'), + factory.createStringLiteral(params.dataSourceIntendedUse), + ), + ]; + case 'GeofenceCollection': + return [ + factory.createPropertyAssignment(factory.createIdentifier('collectionName'), factory.createStringLiteral(params.collectionName)), + ]; + default: { + const _exhaustiveCheck: never = params; + throw new Error(`Unsupported geo service type: ${(_exhaustiveCheck as GeoCodegenResult).serviceName}`); + } + } + } + + private buildAddOutputStatement(resources: readonly GeoCodegenResult[]): ts.ExpressionStatement { + const maps = resources.filter((r) => r.serviceName === 'Map'); + const placeIndexes = resources.filter((r) => r.serviceName === 'PlaceIndex'); + const geofenceCollections = resources.filter((r) => r.serviceName === 'GeofenceCollection'); + + const geoProps: ts.ObjectLiteralElementLike[] = []; + + const firstResource = maps[0] ?? placeIndexes[0] ?? geofenceCollections[0]; + geoProps.push( + factory.createPropertyAssignment(factory.createIdentifier('aws_region'), TS.propAccess(firstResource.resourceName, 'region')), + ); + + if (maps.length > 0) { + geoProps.push(this.buildMapsSection(maps)); + } + if (placeIndexes.length > 0) { + geoProps.push(this.buildSearchIndicesSection(placeIndexes)); + } + if (geofenceCollections.length > 0) { + geoProps.push(this.buildGeofenceCollectionsSection(geofenceCollections)); + } + + return factory.createExpressionStatement( + factory.createCallExpression(TS.propAccess('backend', 'addOutput') as ts.PropertyAccessExpression, undefined, [ + factory.createObjectLiteralExpression( + [factory.createPropertyAssignment(factory.createIdentifier('geo'), factory.createObjectLiteralExpression(geoProps, true))], + true, + ), + ]), + ); + } + + private buildMapsSection(maps: readonly GeoCodegenResult[]): ts.PropertyAssignment { + const mapItems = maps.map((m) => + factory.createPropertyAssignment( + factory.createComputedPropertyName(TS.propAccess(m.resourceName, 'name')), + factory.createObjectLiteralExpression([ + factory.createPropertyAssignment(factory.createIdentifier('style'), TS.propAccess(m.resourceName, 'style')), + ]), + ), + ); + const defaultMap = maps.find((m) => m.serviceName === 'Map' && m.isDefault === 'true') ?? maps[0]; + + return factory.createPropertyAssignment( + factory.createIdentifier('maps'), + factory.createObjectLiteralExpression( + [ + factory.createPropertyAssignment(factory.createIdentifier('items'), factory.createObjectLiteralExpression(mapItems, true)), + factory.createPropertyAssignment(factory.createIdentifier('default'), TS.propAccess(defaultMap.resourceName, 'name')), + ], + true, + ), + ); + } + + private buildSearchIndicesSection(placeIndexes: readonly GeoCodegenResult[]): ts.PropertyAssignment { + const indexItems = placeIndexes.map((p) => TS.propAccess(p.resourceName, 'name')); + const defaultIndex = placeIndexes.find((p) => p.serviceName === 'PlaceIndex' && p.isDefault === 'true') ?? placeIndexes[0]; + + return factory.createPropertyAssignment( + factory.createIdentifier('search_indices'), + factory.createObjectLiteralExpression( + [ + factory.createPropertyAssignment(factory.createIdentifier('items'), factory.createArrayLiteralExpression(indexItems)), + factory.createPropertyAssignment(factory.createIdentifier('default'), TS.propAccess(defaultIndex.resourceName, 'name')), + ], + true, + ), + ); + } + + private buildGeofenceCollectionsSection(geofenceCollections: readonly GeoCodegenResult[]): ts.PropertyAssignment { + const collectionItems = geofenceCollections.map((g) => TS.propAccess(g.resourceName, 'name')); + const defaultCollection = + geofenceCollections.find((g) => g.serviceName === 'GeofenceCollection' && g.isDefault === 'true') ?? geofenceCollections[0]; + + return factory.createPropertyAssignment( + factory.createIdentifier('geofence_collections'), + factory.createObjectLiteralExpression( + [ + factory.createPropertyAssignment(factory.createIdentifier('items'), factory.createArrayLiteralExpression(collectionItems)), + factory.createPropertyAssignment(factory.createIdentifier('default'), TS.propAccess(defaultCollection.resourceName, 'name')), + ], + true, + ), + ); + } +} + +/** backend.auth.resources.authenticatedUserIamRole.roleName */ +function createAuthRoleAccess(): ts.PropertyAccessExpression { + return TS.propAccess('backend', 'auth', 'resources', 'authenticatedUserIamRole', 'roleName') as ts.PropertyAccessExpression; +} + +/** backend.auth.resources.unauthenticatedUserIamRole.roleName */ +function createUnauthRoleAccess(): ts.PropertyAccessExpression { + return TS.propAccess('backend', 'auth', 'resources', 'unauthenticatedUserIamRole', 'roleName') as ts.PropertyAccessExpression; +} + +/** backend.auth.resources.userPool.userPoolId */ +function createUserPoolIdAccess(): ts.PropertyAccessExpression { + return TS.propAccess('backend', 'auth', 'resources', 'userPool', 'userPoolId') as ts.PropertyAccessExpression; +} + +/** backend.auth.resources.groups['groupName'].role.roleName */ +function createGroupRoleAccess(groupName: string): ts.PropertyAccessExpression { + return factory.createPropertyAccessExpression( + factory.createPropertyAccessExpression( + factory.createElementAccessExpression( + TS.propAccess('backend', 'auth', 'resources', 'groups') as ts.PropertyAccessExpression, + factory.createStringLiteral(groupName), + ), + factory.createIdentifier('role'), + ), + factory.createIdentifier('roleName'), + ); +} diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts index 71fe7bef657..50386c45333 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/refactor.ts @@ -38,6 +38,9 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { case 'function:Lambda': case 'api:AppSync': case 'api:API Gateway': + case 'geo:Map': + case 'geo:PlaceIndex': + case 'geo:GeofenceCollection': assessment.record('refactor', resource, { supported: true }); break; case 'auth:Cognito-UserPool-Groups': @@ -89,6 +92,9 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { case 'function:Lambda': case 'api:AppSync': case 'api:API Gateway': + case 'geo:Map': + case 'geo:PlaceIndex': + case 'geo:GeofenceCollection': break; case 'auth:Cognito-UserPool-Groups': case 'unsupported': @@ -138,6 +144,9 @@ export class AmplifyMigrationRefactorStep extends AmplifyMigrationStep { case 'function:Lambda': case 'api:AppSync': case 'api:API Gateway': + case 'geo:Map': + case 'geo:PlaceIndex': + case 'geo:GeofenceCollection': break; case 'auth:Cognito-UserPool-Groups': case 'unsupported': From 98a01d3d955e41f1df5fe3226ec92666707cdd96 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Mon, 23 Mar 2026 19:22:40 -0400 Subject: [PATCH 43/70] chore(cli-internal): remove duplicate ResourceMapping, add dictionary words Remove local ResourceMapping interface from category-refactorer and use the SDK type directly. Add refactorer, refactorers, and changeset to the eslint spellcheck dictionary. --- Prompt: remove ResourceMapping interface, add dictionary words. --- .eslint-dictionary.json | 3 +++ .../refactor/workflow/category-refactorer.ts | 10 +--------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/.eslint-dictionary.json b/.eslint-dictionary.json index 7610461e76e..c3f1d57f407 100644 --- a/.eslint-dictionary.json +++ b/.eslint-dictionary.json @@ -67,6 +67,7 @@ "captcha", "cfn", "cfnlambda", + "changeset", "chatbot", "chatbots", "chdir", @@ -333,6 +334,8 @@ "repo", "reqheaders", "resolvers", + "refactorer", + "refactorers", "rethrow", "retrier", "rimraf", diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index 26f39447e90..8d7a9baaad5 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -1,4 +1,4 @@ -import { Parameter } from '@aws-sdk/client-cloudformation'; +import { Parameter, ResourceMapping } from '@aws-sdk/client-cloudformation'; import { AmplifyError } from '@aws-amplify/amplify-cli-core'; import { CFNResource, CFNTemplate } from '../../cfn-template'; import { Planner } from '../../planner'; @@ -26,14 +26,6 @@ export interface ResolvedStack { readonly parameters: Parameter[]; } -/** - * Resource mapping for the CloudFormation StackRefactor API. - */ -export interface ResourceMapping { - readonly Source: { readonly StackName: string; readonly LogicalResourceId: string }; - readonly Destination: { readonly StackName: string; readonly LogicalResourceId: string }; -} - /** * Mappings-only refactor plan. Templates are fetched fresh at execution time * so that sequential refactorers targeting the same stack always see current state. From 676324f02581e29d44e2e6216c26e68a542830cc Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Mon, 23 Mar 2026 19:26:00 -0400 Subject: [PATCH 44/70] style(cli-internal): consistent property order in ResourceMapping objects Reorder ResourceMapping properties to StackName before LogicalResourceId for consistency across forward and rollback refactorers. Update snapshot mapping files accordingly. --- Prompt: I've made some more changes - commit. --- ...79371D7-SEM95NL3BKFT-holding.mappings.json | 40 +++++++++---------- ...C3F24A-1BTE7UH0TFE2I-holding.mappings.json | 8 ++-- ...10-auth179371D7-SEM95NL3BKFT.mappings.json | 40 +++++++++---------- ...torage0EC3F24A-1BTE7UH0TFE2I.mappings.json | 8 ++-- ...79371D7-DAPL7YOMHRB4-holding.mappings.json | 40 +++++++++---------- ...EC3F24A-QQN18S0SITDH-holding.mappings.json | 8 ++-- ...44-auth179371D7-DAPL7YOMHRB4.mappings.json | 40 +++++++++---------- ...storage0EC3F24A-QQN18S0SITDH.mappings.json | 8 ++-- ...94DE4A-11L4X799ZG2NW-holding.mappings.json | 8 ++-- ...h179371D7-UGINV3RD10-holding.mappings.json | 40 +++++++++---------- ...C3F24A-11PWXC3G56PPP-holding.mappings.json | 8 ++-- ...lytics5794DE4A-11L4X799ZG2NW.mappings.json | 8 ++-- ...eabb-auth179371D7-UGINV3RD10.mappings.json | 40 +++++++++---------- ...torage0EC3F24A-11PWXC3G56PPP.mappings.json | 8 ++-- ...9371D7-1RF1TAQPAA1WW-holding.mappings.json | 40 +++++++++---------- ...C3F24A-13PB5LDXDDFTY-holding.mappings.json | 8 ++-- ...a-auth179371D7-1RF1TAQPAA1WW.mappings.json | 40 +++++++++---------- ...torage0EC3F24A-13PB5LDXDDFTY.mappings.json | 8 ++-- ...79371D7-CFDKYQIOG2UJ-holding.mappings.json | 40 +++++++++---------- ...EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json | 8 ++-- ...ec-auth179371D7-CFDKYQIOG2UJ.mappings.json | 40 +++++++++---------- ...storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json | 8 ++-- .../workflow/forward-category-refactorer.ts | 8 ++-- .../workflow/rollback-category-refactorer.ts | 8 ++-- 24 files changed, 256 insertions(+), 256 deletions(-) diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json index 67e2b307779..e82e33ad210 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.mappings.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.mappings.json index 11b99a35613..606b64a3606 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.mappings.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I", + "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" }, "Destination": { - "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I-holding", + "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.mappings.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.mappings.json index 6fafe3b1474..c5c90be833c 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.mappings.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "UserPool", - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", + "LogicalResourceId": "UserPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "UserPoolClientWeb", - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", + "LogicalResourceId": "UserPoolClientWeb" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "UserPoolClient", - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", + "LogicalResourceId": "UserPoolClient" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "IdentityPool", - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", + "LogicalResourceId": "IdentityPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "IdentityPoolRoleMap", - "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A" + "StackName": "amplify-backendonly-main-5e0fa-authbackendonlyf8c4c57b-SC9H4E2DZU7A", + "LogicalResourceId": "IdentityPoolRoleMap" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.mappings.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.mappings.json index a7741f3e5d5..d2fc08ac276 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.mappings.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR.__to__.amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "S3Bucket", - "StackName": "amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR" + "StackName": "amplify-backendonly-main-5e0fa-storages3c31471c3-MQFWTKK6ETYR", + "LogicalResourceId": "S3Bucket" }, "Destination": { - "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738", - "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I" + "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-storage0EC3F24A-1BTE7UH0TFE2I", + "LogicalResourceId": "backendonlycb1a13ab81664ecaa7d015068ab2d0165e0fagen2mainBucket50DDE738" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json index 53219238c26..0ba71166ed4 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.mappings.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.mappings.json index 2bc43c0d589..0484781a42e 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.mappings.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "activity1E902D9C", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH", + "LogicalResourceId": "activity1E902D9C" }, "Destination": { - "LogicalResourceId": "activity1E902D9C", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH-holding", + "LogicalResourceId": "activity1E902D9C" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.mappings.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.mappings.json index eba71ce8ad5..46ccb104e47 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.mappings.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "UserPool", - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", + "LogicalResourceId": "UserPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "UserPoolClientWeb", - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", + "LogicalResourceId": "UserPoolClientWeb" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "UserPoolClient", - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", + "LogicalResourceId": "UserPoolClient" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "IdentityPool", - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", + "LogicalResourceId": "IdentityPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "IdentityPoolRoleMap", - "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG" + "StackName": "amplify-discussions-main-d5a80-authdiscussions22367c6822367c68-XLSGP9AEXCHG", + "LogicalResourceId": "IdentityPoolRoleMap" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.mappings.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.mappings.json index 1a8df8dff20..7c0f1c98009 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.mappings.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "DynamoDBTable", - "StackName": "amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4" + "StackName": "amplify-discussions-main-d5a80-storageactivity-MDZCD7YSRDN4", + "LogicalResourceId": "DynamoDBTable" }, "Destination": { - "LogicalResourceId": "activity1E902D9C", - "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH" + "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-storage0EC3F24A-QQN18S0SITDH", + "LogicalResourceId": "activity1E902D9C" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.mappings.json index b4e92bdd13e..18fe4e64dc6 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW", + "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047" }, "Destination": { - "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW-holding", + "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json index 55c5abf24ff..79538fa7fde 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.mappings.json index 4bf067c041c..48bd336abd1 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP", + "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" }, "Destination": { - "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP-holding", + "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.mappings.json index f551223b652..2f3cfeed033 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "KinesisStream", - "StackName": "amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S" + "StackName": "amplify-moodboard-main-1959a-analyticsmoodboardKinesis-UYYBLD3G4B1S", + "LogicalResourceId": "KinesisStream" }, "Destination": { - "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-analytics5794DE4A-11L4X799ZG2NW", + "LogicalResourceId": "moodboardKinesisKinesisStreamD5E97047" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.mappings.json index 60893879984..cc0780fc7cc 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "UserPool", - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", + "LogicalResourceId": "UserPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "UserPoolClientWeb", - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", + "LogicalResourceId": "UserPoolClientWeb" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "UserPoolClient", - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", + "LogicalResourceId": "UserPoolClient" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "IdentityPool", - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", + "LogicalResourceId": "IdentityPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "IdentityPoolRoleMap", - "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM" + "StackName": "amplify-moodboard-main-1959a-authmoodboard759ae00a-55VYEATUY8WM", + "LogicalResourceId": "IdentityPoolRoleMap" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.mappings.json index f0f58245b71..7300a23d4f8 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "S3Bucket", - "StackName": "amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA" + "StackName": "amplify-moodboard-main-1959a-storagemoodboardStorage-4QIRO85L6OVA", + "LogicalResourceId": "S3Bucket" }, "Destination": { - "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65", - "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP" + "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-storage0EC3F24A-11PWXC3G56PPP", + "LogicalResourceId": "moodboard20e29595008142e3ad16f01c4066e1c41959agen2mainBucket71D6AA65" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json index 4f9173460d0..3ff71e8af10 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.mappings.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.mappings.json index e19a55f6415..4df170487c2 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.mappings.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY", + "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" }, "Destination": { - "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY-holding", + "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.mappings.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.mappings.json index dcbb7ff0bfa..d48c12ba206 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.mappings.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "UserPool", - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", + "LogicalResourceId": "UserPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "UserPoolClientWeb", - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", + "LogicalResourceId": "UserPoolClientWeb" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "UserPoolClient", - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", + "LogicalResourceId": "UserPoolClient" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "IdentityPool", - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", + "LogicalResourceId": "IdentityPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "IdentityPoolRoleMap", - "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC" + "StackName": "amplify-productcatalog-main-31323-authproductcatalog90174ac4-1DKM3MK2JKRFC", + "LogicalResourceId": "IdentityPoolRoleMap" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.mappings.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.mappings.json index 8caf8958ceb..bf796ac778b 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.mappings.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "S3Bucket", - "StackName": "amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI" + "StackName": "amplify-productcatalog-main-31323-storages338e5b439-DQ7IMC8LEGGI", + "LogicalResourceId": "S3Bucket" }, "Destination": { - "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83", - "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY" + "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-storage0EC3F24A-13PB5LDXDDFTY", + "LogicalResourceId": "productcatalogf95af07481f845caa6594c26ac9c8ed331323gen2mainBucket67A98B83" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json index a5ab68ecc4a..f31a9ecca03 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json index 20edd36515b..a5ea8fd59de 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ", + "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" }, "Destination": { - "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ-holding", + "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.mappings.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.mappings.json index 53e3abf3235..07eccbab939 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.mappings.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "UserPool", - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", + "LogicalResourceId": "UserPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "UserPoolClientWeb", - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", + "LogicalResourceId": "UserPoolClientWeb" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "UserPoolClient", - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", + "LogicalResourceId": "UserPoolClient" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "IdentityPool", - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", + "LogicalResourceId": "IdentityPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "IdentityPoolRoleMap", - "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV" + "StackName": "amplify-projectboards-main-02940-authprojectboards54040ecc-PH0BQLGBQAYV", + "LogicalResourceId": "IdentityPoolRoleMap" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json index e8be4aa2427..129799390d2 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "S3Bucket", - "StackName": "amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY" + "StackName": "amplify-projectboards-main-02940-storages369f8ff1c-WRT91DP311WY", + "LogicalResourceId": "S3Bucket" }, "Destination": { - "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F", - "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ" + "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-storage0EC3F24A-MCTM3Q2BCVCJ", + "LogicalResourceId": "projectboards34b9a7f3c2ca489293910116c994688b02940gen2mainBucketC790823F" } } ] \ No newline at end of file diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index e1ed920c2d0..a470a55b25c 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -53,8 +53,8 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { } const targetId = matchedTargets[0]; mappings.push({ - Source: { LogicalResourceId: sourceId, StackName: sourceStackId }, - Destination: { LogicalResourceId: targetId, StackName: targetStackId }, + Source: { StackName: sourceStackId, LogicalResourceId: sourceId }, + Destination: { StackName: targetStackId, LogicalResourceId: targetId }, }); } return mappings; @@ -133,8 +133,8 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { const holdingStackName = this.getHoldingStackName(gen2StackName); const resourceMappings: ResourceMapping[] = blueprint.mappings.map((m) => ({ - Source: { LogicalResourceId: m.Destination.LogicalResourceId, StackName: gen2StackName }, - Destination: { LogicalResourceId: m.Destination.LogicalResourceId, StackName: holdingStackName }, + Source: { StackName: gen2StackName, LogicalResourceId: m.Destination.LogicalResourceId }, + Destination: { StackName: holdingStackName, LogicalResourceId: m.Destination.LogicalResourceId }, })); const holdingStack = await this.cfn.findStack(holdingStackName); diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index e89326e0cc3..a8be4677409 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -45,8 +45,8 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { continue; } mappings.push({ - Source: { LogicalResourceId: sourceId, StackName: sourceStackId }, - Destination: { LogicalResourceId: gen1LogicalId, StackName: targetStackId }, + Source: { StackName: sourceStackId, LogicalResourceId: sourceId }, + Destination: { StackName: targetStackId, LogicalResourceId: gen1LogicalId }, }); } return mappings; @@ -113,8 +113,8 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { if (!holdingStack) return []; const resourceMappings: ResourceMapping[] = blueprint.mappings.map((m) => ({ - Source: { LogicalResourceId: m.Source.LogicalResourceId, StackName: holdingStackName }, - Destination: { LogicalResourceId: m.Source.LogicalResourceId, StackName: gen2StackName }, + Source: { StackName: holdingStackName, LogicalResourceId: m.Source.LogicalResourceId }, + Destination: { StackName: gen2StackName, LogicalResourceId: m.Source.LogicalResourceId }, })); return [ From 20a1610746cb269496e56c85093783090e693748 Mon Sep 17 00:00:00 2001 From: Eli Polonsky Date: Mon, 23 Mar 2026 20:44:28 -0400 Subject: [PATCH 45/70] chore: regen fitness tracker snapshots --- ...179371D7-W7QZVETRVIH-holding.mappings.json | 12 + ...7-W7QZVETRVIH-holding.source.template.json | 1090 +++++++++++++++ ...7-W7QZVETRVIH-holding.target.template.json | 225 ++++ ...799-auth179371D7-W7QZVETRVIH.mappings.json | 52 + ...h179371D7-W7QZVETRVIH.source.template.json | 216 +++ ...h179371D7-W7QZVETRVIH.target.template.json | 1102 ++++++++++++++++ ...799-auth179371D7-W7QZVETRVIH.mappings.json | 12 + ...h179371D7-W7QZVETRVIH.source.template.json | 81 ++ ...h179371D7-W7QZVETRVIH.target.template.json | 1100 ++++++++++++++++ ...-auth179371D7-W7QZVETRVIH.parameters.json} | 0 ...799-auth179371D7-W7QZVETRVIH.template.json | 1151 ++++++++++++++++ ...e7c9ceb2e7c-13Y9822PMAATD.parameters.json} | 34 +- ...eb2e7c9ceb2e7c-13Y9822PMAATD.template.json | 373 ++++++ ...serPoolGroups-MXIW00J9KSSV.parameters.json | 30 + ...huserPoolGroups-MXIW00J9KSSV.template.json | 91 ++ .../#current-cloud-backend/amplify-meta.json | 464 +++---- .../adminapi-cloudformation-template.json | 18 +- .../build/cloudformation-template.json | 1173 ++++++++--------- .../api/fitnesstracker/build/parameters.json | 6 +- .../build/stacks/ConnectionStack.json | 2 +- .../fitnesstracker/build/stacks/Exercise.json | 18 +- .../api/fitnesstracker/build/stacks/Meal.json | 16 +- .../build/stacks/WorkoutProgram.json | 18 +- .../api/fitnesstracker/cli-inputs.json | 4 +- .../api/fitnesstracker/parameters.json | 2 +- .../nutritionapi-cloudformation-template.json | 18 +- .../auth-trigger-cloudformation-template.json | 14 +- ...2e7c9ceb2e7c-cloudformation-template.json} | 20 +- .../build/parameters.json | 18 +- .../cli-inputs.json | 14 +- ...serPoolGroups-cloudformation-template.json | 24 +- .../adminapi-cloudformation-template.json | 18 +- .../build/cloudformation-template.json | 5 +- .../nutritionapi-cloudformation-template.json | 18 +- ...2e7c9ceb2e7c-cloudformation-template.json} | 20 +- ...serPoolGroups-cloudformation-template.json | 24 +- .../build/root-cloudformation-stack.json | 278 ++-- .../admin/admin-cloudformation-template.json | 14 +- ...e7cPreSignup-cloudformation-template.json} | 8 +- .../lognutrition-cloudformation-template.json | 4 +- .../build/root-cloudformation-stack.json | 278 ++-- .../backend-config.json | 32 +- .../admin/admin-cloudformation-template.json | 14 +- .../function/admin/function-parameters.json | 2 +- .../parameters.json | 4 - .../amplify.state | 0 .../custom-policies.json | 0 ...e7cPreSignup-cloudformation-template.json} | 8 +- .../function-parameters.json | 8 +- .../parameters.json | 4 + .../src/email-filter-allowlist.js | 0 .../src/event.json | 0 .../src/index.js | 0 .../src/package.json | 2 +- .../src/yarn.lock | 0 .../lognutrition-cloudformation-template.json | 4 +- .../amplify/backend/amplify-meta.json | 460 +++---- .../adminapi-cloudformation-template.json | 18 +- .../build/cloudformation-template.json | 1173 ++++++++--------- .../api/fitnesstracker/build/parameters.json | 6 +- .../build/stacks/ConnectionStack.json | 2 +- .../fitnesstracker/build/stacks/Exercise.json | 18 +- .../api/fitnesstracker/build/stacks/Meal.json | 16 +- .../build/stacks/WorkoutProgram.json | 18 +- .../api/fitnesstracker/cli-inputs.json | 4 +- .../api/fitnesstracker/parameters.json | 2 +- .../nutritionapi-cloudformation-template.json | 18 +- .../auth-trigger-cloudformation-template.json | 14 +- ...2e7c9ceb2e7c-cloudformation-template.json} | 20 +- .../build/parameters.json | 18 +- .../cli-inputs.json | 14 +- ...serPoolGroups-cloudformation-template.json | 24 +- .../adminapi-cloudformation-template.json | 18 +- .../build/cloudformation-template.json | 5 +- .../nutritionapi-cloudformation-template.json | 18 +- ...2e7c9ceb2e7c-cloudformation-template.json} | 20 +- ...serPoolGroups-cloudformation-template.json | 24 +- .../build/root-cloudformation-stack.json | 278 ++-- .../admin/admin-cloudformation-template.json | 14 +- ...e7cPreSignup-cloudformation-template.json} | 8 +- .../lognutrition-cloudformation-template.json | 4 +- .../build/root-cloudformation-stack.json | 278 ++-- .../amplify/backend/backend-config.json | 32 +- .../admin/admin-cloudformation-template.json | 14 +- .../function/admin/function-parameters.json | 2 +- .../parameters.json | 4 - .../amplify.state | 0 .../custom-policies.json | 0 ...e7cPreSignup-cloudformation-template.json} | 8 +- .../function-parameters.json | 8 +- .../parameters.json | 4 + .../src/email-filter-allowlist.js | 0 .../src/event.json | 0 .../src/index.js | 0 .../src/package.json | 2 +- .../src/yarn.lock | 0 .../lognutrition-cloudformation-template.json | 4 +- .../amplify-dependent-resources-ref.d.ts | 4 +- .../amplify/team-provider-info.json | 32 +- ...NestedStackA-NPJK8GP5TJ4A.description.txt} | 0 ...agerNestedStackA-NPJK8GP5TJ4A.outputs.json | 6 + ...rNestedStackA-NPJK8GP5TJ4A.parameters.json | 6 + ...erNestedStackA-NPJK8GP5TJ4A.template.json} | 44 +- ...dStackConne-1Q5Y2AFMDU94J.description.txt} | 0 ...stedStackConne-1Q5Y2AFMDU94J.outputs.json} | 0 ...edStackConne-1Q5Y2AFMDU94J.parameters.json | 30 + ...tedStackConne-1Q5Y2AFMDU94J.template.json} | 44 +- ...xerciseNest-1FIMJDNV42OQ7.description.txt} | 0 ...ackExerciseNest-1FIMJDNV42OQ7.outputs.json | 22 + ...ExerciseNest-1FIMJDNV42OQ7.parameters.json | 46 + ...kExerciseNest-1FIMJDNV42OQ7.template.json} | 300 ++--- ...estedStackR-1T4FU8CXY0GK6.description.txt} | 0 ...ealNestedStackR-1T4FU8CXY0GK6.outputs.json | 18 + ...NestedStackR-1T4FU8CXY0GK6.parameters.json | 46 + ...lNestedStackR-1T4FU8CXY0GK6.template.json} | 280 ++-- ...dStackWorkou-93OL8N89CFYW.description.txt} | 0 ...stedStackWorkou-93OL8N89CFYW.outputs.json} | 8 +- ...edStackWorkou-93OL8N89CFYW.parameters.json | 46 + ...tedStackWorkou-93OL8N89CFYW.template.json} | 296 ++--- ...-auth179371D7-W7QZVETRVIH.description.txt} | 2 +- ...d799-auth179371D7-W7QZVETRVIH.outputs.json | 38 + ...-auth179371D7-W7QZVETRVIH.parameters.json} | 0 ...99-auth179371D7-W7QZVETRVIH.template.json} | 106 +- ...data7552DF31-11R0N9NYGZMM.description.txt} | 0 ...799-data7552DF31-11R0N9NYGZMM.outputs.json | 26 + ...-data7552DF31-11R0N9NYGZMM.parameters.json | 38 + ...9-data7552DF31-11R0N9NYGZMM.template.json} | 230 ++-- ...api43EA27F6-1RS06T9AL8ZH6.description.txt} | 2 +- ...dminapi43EA27F6-1RS06T9AL8ZH6.outputs.json | 14 + ...napi43EA27F6-1RS06T9AL8ZH6.parameters.json | 14 + ...inapi43EA27F6-1RS06T9AL8ZH6.template.json} | 84 +- ...api72914ECD-1738NNTUFA9K8.description.txt} | 2 +- ...tionapi72914ECD-1738NNTUFA9K8.outputs.json | 14 + ...napi72914ECD-1738NNTUFA9K8.parameters.json | 14 + ...onapi72914ECD-1738NNTUFA9K8.template.json} | 96 +- ...en2main-branch-a09655d799.description.txt} | 2 +- ...r-gen2main-branch-a09655d799.outputs.json} | 20 +- ...en2main-branch-a09655d799.parameters.json} | 0 ...-gen2main-branch-a09655d799.template.json} | 120 +- ...gerNestedStackA-1A2OIOGDUJDM8.outputs.json | 6 - ...NestedStackA-1A2OIOGDUJDM8.parameters.json | 6 - ...edStackConne-1PZTW5BMDQ740.parameters.json | 30 - ...tackExerciseNest-GSLDGK4G6DEO.outputs.json | 22 - ...kExerciseNest-GSLDGK4G6DEO.parameters.json | 46 - ...MealNestedStackR-8W0VUDLMFHA1.outputs.json | 18 - ...lNestedStackR-8W0VUDLMFHA1.parameters.json | 46 - ...dStackWorkou-1KL1EWK5B27DM.parameters.json | 46 - ...eb3-auth179371D7-T5KTLQB5RTR1.outputs.json | 38 - ...eb3-data7552DF31-FY14PTEHE5GQ.outputs.json | 26 - ...-data7552DF31-FY14PTEHE5GQ.parameters.json | 38 - ...adminapi43EA27F6-1G3WMFGGD1GX.outputs.json | 14 - ...inapi43EA27F6-1G3WMFGGD1GX.parameters.json | 14 - ...itionapi72914ECD-UEOCVVQH4SZ3.outputs.json | 14 - ...onapi72914ECD-UEOCVVQH4SZ3.parameters.json | 14 - ...ifitnesstracker-1T86UW9NDGVCS.outputs.json | 20 - ...fc1196b0fc119-IU8FJDZI54QH.description.txt | 1 - ...b0fc1196b0fc119-IU8FJDZI54QH.template.json | 480 ------- ...erPoolGroups-1RDWF2H8163RP.description.txt | 1 - ...huserPoolGroups-1RDWF2H8163RP.outputs.json | 6 - ...erPoolGroups-1RDWF2H8163RP.parameters.json | 30 - ...0fc119PreSignup-IQSLCEZIETI0.template.json | 242 ---- ...-fitnesstracker-main-0683c.parameters.json | 14 - ...ayAuthStack-1WV7E8TEEBZCC.description.txt} | 0 ...tewayAuthStack-1WV7E8TEEBZCC.outputs.json} | 0 ...ayAuthStack-1WV7E8TEEBZCC.parameters.json} | 8 +- ...ewayAuthStack-1WV7E8TEEBZCC.template.json} | 0 ...mLambdaStack-I19H7X9HZF2Z.description.txt} | 0 ...stomLambdaStack-I19H7X9HZF2Z.outputs.json} | 0 ...mLambdaStack-I19H7X9HZF2Z.parameters.json} | 22 +- ...tomLambdaStack-I19H7X9HZF2Z.template.json} | 14 +- ...-apiadminapi-PR5X22IZPJYP.description.txt} | 0 ...c9a-apiadminapi-PR5X22IZPJYP.outputs.json} | 4 +- ...-apiadminapi-PR5X22IZPJYP.parameters.json} | 10 +- ...9a-apiadminapi-PR5X22IZPJYP.template.json} | 16 +- ...ectionStack-1V56DVJ0AK6M2.description.txt} | 0 ...ConnectionStack-1V56DVJ0AK6M2.outputs.json | 1 + ...ectionStack-1V56DVJ0AK6M2.parameters.json} | 8 +- ...nnectionStack-1V56DVJ0AK6M2.template.json} | 2 +- ...esourcesjson-NRPIHV30QY0G.description.txt} | 0 ...omResourcesjson-NRPIHV30QY0G.outputs.json} | 0 ...esourcesjson-NRPIHV30QY0G.parameters.json} | 6 +- ...mResourcesjson-NRPIHV30QY0G.template.json} | 0 ...BQ-Exercise-1BEMQSWOJN9LA.description.txt} | 0 ...BJJBQ-Exercise-1BEMQSWOJN9LA.outputs.json} | 12 +- ...BQ-Exercise-1BEMQSWOJN9LA.parameters.json} | 20 +- ...JJBQ-Exercise-1BEMQSWOJN9LA.template.json} | 18 +- ...MBJJBQ-Meal-1M9W7UKSTT0UZ.description.txt} | 0 ...6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.outputs.json} | 10 +- ...MBJJBQ-Meal-1M9W7UKSTT0UZ.parameters.json} | 14 +- ...OMMBJJBQ-Meal-1M9W7UKSTT0UZ.template.json} | 16 +- ...rkoutProgram-W5V18SR651C7.description.txt} | 0 ...-WorkoutProgram-W5V18SR651C7.outputs.json} | 24 +- ...rkoutProgram-W5V18SR651C7.parameters.json} | 6 +- ...WorkoutProgram-W5V18SR651C7.template.json} | 18 +- ...tnesstracker-8NP6OMMBJJBQ.description.txt} | 0 ...pifitnesstracker-8NP6OMMBJJBQ.outputs.json | 20 + ...tnesstracker-8NP6OMMBJJBQ.parameters.json} | 6 +- ...fitnesstracker-8NP6OMMBJJBQ.template.json} | 2 +- ...nutritionapi-ZQRRV8SP6B3V.description.txt} | 0 ...apinutritionapi-ZQRRV8SP6B3V.outputs.json} | 4 +- ...nutritionapi-ZQRRV8SP6B3V.parameters.json} | 10 +- ...pinutritionapi-ZQRRV8SP6B3V.template.json} | 16 +- ...2e7c9ceb2e7c-13Y9822PMAATD.description.txt | 1 + ...eb2e7c9ceb2e7c-13Y9822PMAATD.outputs.json} | 14 +- ...2e7c9ceb2e7c-13Y9822PMAATD.parameters.json | 178 +++ ...eb2e7c9ceb2e7c-13Y9822PMAATD.template.json | 480 +++++++ ...erPoolGroups-MXIW00J9KSSV.description.txt} | 0 ...thuserPoolGroups-MXIW00J9KSSV.outputs.json | 6 + ...serPoolGroups-MXIW00J9KSSV.parameters.json | 30 + ...userPoolGroups-MXIW00J9KSSV.template.json} | 24 +- ...unctionadmin-ELA4T2BKK7S3.description.txt} | 0 ...a-functionadmin-ELA4T2BKK7S3.outputs.json} | 4 +- ...unctionadmin-ELA4T2BKK7S3.parameters.json} | 10 +- ...-functionadmin-ELA4T2BKK7S3.template.json} | 14 +- ...e7cPreSignup-3S3GBRYFYV12.description.txt} | 0 ...eb2e7cPreSignup-3S3GBRYFYV12.outputs.json} | 8 +- ...e7cPreSignup-3S3GBRYFYV12.parameters.json} | 6 +- ...eb2e7cPreSignup-3S3GBRYFYV12.template.json | 242 ++++ ...lognutrition-T6VGX60KCB8H.description.txt} | 0 ...ionlognutrition-T6VGX60KCB8H.outputs.json} | 4 +- ...lognutrition-T6VGX60KCB8H.parameters.json} | 4 +- ...onlognutrition-T6VGX60KCB8H.template.json} | 4 +- ...-fitnesstracker-main-6fc9a.description.txt | 1 + ...fy-fitnesstracker-main-6fc9a.outputs.json} | 22 +- ...-fitnesstracker-main-6fc9a.parameters.json | 14 + ...y-fitnesstracker-main-6fc9a.template.json} | 110 +- .../gen2-migration/refactor/refactor.test.ts | 4 + 227 files changed, 10559 insertions(+), 4843 deletions(-) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.mappings.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.source.template.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.target.template.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.source.template.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.source.template.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json rename amplify-migration-apps/fitness-tracker/{_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataConnectionStackNestedStackConne-1PZTW5BMDQ740.outputs.json => _snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.parameters.json} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json rename amplify-migration-apps/fitness-tracker/{_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authfitnesstracker6b0fc1196b0fc119-IU8FJDZI54QH.parameters.json => _snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.parameters.json} (83%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.template.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.parameters.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.template.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/{fitnesstracker6b0fc1196b0fc119 => fitnesstracker9ceb2e7c9ceb2e7c}/build/auth-trigger-cloudformation-template.json (94%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/{backend/auth/fitnesstracker6b0fc1196b0fc119/build/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json => #current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json} (93%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/{backend/auth/fitnesstracker6b0fc1196b0fc119 => #current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c}/build/parameters.json (77%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/{backend/auth/fitnesstracker6b0fc1196b0fc119 => #current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c}/cli-inputs.json (77%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/{auth/fitnesstracker6b0fc1196b0fc119/build/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json => awscloudformation/build/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json} (93%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/{backend/awscloudformation/build/function/fitnesstracker6b0fc1196b0fc119PreSignup/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json => #current-cloud-backend/awscloudformation/build/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json} (95%) delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/amplify.state (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/custom-policies.json (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/{awscloudformation/build/function/fitnesstracker6b0fc1196b0fc119PreSignup/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json => function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json} (95%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/function-parameters.json (61%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/src/email-filter-allowlist.js (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/src/event.json (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/src/index.js (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/src/package.json (78%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/src/yarn.lock (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/{fitnesstracker6b0fc1196b0fc119 => fitnesstracker9ceb2e7c9ceb2e7c}/build/auth-trigger-cloudformation-template.json (94%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/{#current-cloud-backend/awscloudformation/build/auth/fitnesstracker6b0fc1196b0fc119/build/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json => backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json} (93%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/{#current-cloud-backend/auth/fitnesstracker6b0fc1196b0fc119 => backend/auth/fitnesstracker9ceb2e7c9ceb2e7c}/build/parameters.json (77%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/{#current-cloud-backend/auth/fitnesstracker6b0fc1196b0fc119 => backend/auth/fitnesstracker9ceb2e7c9ceb2e7c}/cli-inputs.json (77%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/{fitnesstracker6b0fc1196b0fc119/build/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json => fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json} (93%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/{#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json => backend/awscloudformation/build/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json} (95%) delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/amplify.state (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/custom-policies.json (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/{fitnesstracker6b0fc1196b0fc119PreSignup/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json => fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json} (95%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/function-parameters.json (61%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/src/email-filter-allowlist.js (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/src/event.json (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/src/index.js (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/src/package.json (78%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/src/yarn.lock (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataAmplifyTableManagerNestedStackA-1A2OIOGDUJDM8.description.txt => amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.description.txt} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.outputs.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataAmplifyTableManagerNestedStackA-1A2OIOGDUJDM8.template.json => amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.template.json} (92%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataConnectionStackNestedStackConne-1PZTW5BMDQ740.description.txt => amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-auth179371D7-T5KTLQB5RTR1.parameters.json => amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.outputs.json} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataConnectionStackNestedStackConne-1PZTW5BMDQ740.template.json => amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.template.json} (80%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataExerciseNestedStackExerciseNest-GSLDGK4G6DEO.description.txt => amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.description.txt} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.outputs.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataExerciseNestedStackExerciseNest-GSLDGK4G6DEO.template.json => amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.template.json} (85%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataMealNestedStackMealNestedStackR-8W0VUDLMFHA1.description.txt => amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.description.txt} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.outputs.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataMealNestedStackMealNestedStackR-8W0VUDLMFHA1.template.json => amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.template.json} (85%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataWorkoutProgramNestedStackWorkou-1KL1EWK5B27DM.description.txt => amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataWorkoutProgramNestedStackWorkou-1KL1EWK5B27DM.outputs.json => amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.outputs.json} (54%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataWorkoutProgramNestedStackWorkou-1KL1EWK5B27DM.template.json => amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.template.json} (85%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-auth179371D7-T5KTLQB5RTR1.description.txt => amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.description.txt} (52%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.outputs.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-APIGatewayAuthStack-2YRT3JXB74ES.outputs.json => amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.parameters.json} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-auth179371D7-T5KTLQB5RTR1.template.json => amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json} (89%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-data7552DF31-FY14PTEHE5GQ.description.txt => amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.description.txt} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.outputs.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-data7552DF31-FY14PTEHE5GQ.template.json => amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.template.json} (79%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistackadminapi43EA27F6-1G3WMFGGD1GX.description.txt => amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.description.txt} (55%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.outputs.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistackadminapi43EA27F6-1G3WMFGGD1GX.template.json => amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.template.json} (84%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistacknutritionapi72914ECD-UEOCVVQH4SZ3.description.txt => amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.description.txt} (55%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.outputs.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistacknutritionapi72914ECD-UEOCVVQH4SZ3.template.json => amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.template.json} (88%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a5beb3.description.txt => amplify-fitnesstracker-gen2main-branch-a09655d799.description.txt} (56%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a5beb3.outputs.json => amplify-fitnesstracker-gen2main-branch-a09655d799.outputs.json} (77%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a5beb3.parameters.json => amplify-fitnesstracker-gen2main-branch-a09655d799.parameters.json} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-f6c5a5beb3.template.json => amplify-fitnesstracker-gen2main-branch-a09655d799.template.json} (80%) delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataAmplifyTableManagerNestedStackA-1A2OIOGDUJDM8.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataAmplifyTableManagerNestedStackA-1A2OIOGDUJDM8.parameters.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataConnectionStackNestedStackConne-1PZTW5BMDQ740.parameters.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataExerciseNestedStackExerciseNest-GSLDGK4G6DEO.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataExerciseNestedStackExerciseNest-GSLDGK4G6DEO.parameters.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataMealNestedStackMealNestedStackR-8W0VUDLMFHA1.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataMealNestedStackMealNestedStackR-8W0VUDLMFHA1.parameters.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataWorkoutProgramNestedStackWorkou-1KL1EWK5B27DM.parameters.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-auth179371D7-T5KTLQB5RTR1.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-data7552DF31-FY14PTEHE5GQ.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-data7552DF31-FY14PTEHE5GQ.parameters.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistackadminapi43EA27F6-1G3WMFGGD1GX.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistackadminapi43EA27F6-1G3WMFGGD1GX.parameters.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistacknutritionapi72914ECD-UEOCVVQH4SZ3.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistacknutritionapi72914ECD-UEOCVVQH4SZ3.parameters.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authfitnesstracker6b0fc1196b0fc119-IU8FJDZI54QH.description.txt delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authfitnesstracker6b0fc1196b0fc119-IU8FJDZI54QH.template.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authuserPoolGroups-1RDWF2H8163RP.description.txt delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authuserPoolGroups-1RDWF2H8163RP.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authuserPoolGroups-1RDWF2H8163RP.parameters.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionfitnesstracker6b0fc1196b0fc119PreSignup-IQSLCEZIETI0.template.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-APIGatewayAuthStack-2YRT3JXB74ES.description.txt => amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-AuthTriggerCustomLambdaStack-ME2HIO3WXG9U.outputs.json => amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.outputs.json} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-APIGatewayAuthStack-2YRT3JXB74ES.parameters.json => amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.parameters.json} (56%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-APIGatewayAuthStack-2YRT3JXB74ES.template.json => amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.template.json} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-AuthTriggerCustomLambdaStack-ME2HIO3WXG9U.description.txt => amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-ConnectionStack-MFCAEX2L0CKC.outputs.json => amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.outputs.json} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-AuthTriggerCustomLambdaStack-ME2HIO3WXG9U.parameters.json => amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.parameters.json} (50%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-AuthTriggerCustomLambdaStack-ME2HIO3WXG9U.template.json => amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.template.json} (94%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apiadminapi-T8AKDMEB7K09.description.txt => amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apiadminapi-T8AKDMEB7K09.outputs.json => amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.outputs.json} (75%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apiadminapi-T8AKDMEB7K09.parameters.json => amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.parameters.json} (76%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apiadminapi-T8AKDMEB7K09.template.json => amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.template.json} (97%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-ConnectionStack-MFCAEX2L0CKC.description.txt => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.description.txt} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.outputs.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-ConnectionStack-MFCAEX2L0CKC.parameters.json => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.parameters.json} (75%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-ConnectionStack-MFCAEX2L0CKC.template.json => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.template.json} (98%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-CustomResourcesjson-1N9JBA3LG1LSR.description.txt => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-CustomResourcesjson-1N9JBA3LG1LSR.outputs.json => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.outputs.json} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-CustomResourcesjson-1N9JBA3LG1LSR.parameters.json => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.parameters.json} (60%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-CustomResourcesjson-1N9JBA3LG1LSR.template.json => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.template.json} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Exercise-5FATTNCL6XOQ.description.txt => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Exercise-5FATTNCL6XOQ.outputs.json => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.outputs.json} (62%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Exercise-5FATTNCL6XOQ.parameters.json => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.parameters.json} (83%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Exercise-5FATTNCL6XOQ.template.json => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.template.json} (98%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Meal-T0IHN7YLGV2P.description.txt => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Meal-T0IHN7YLGV2P.outputs.json => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.outputs.json} (57%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Meal-T0IHN7YLGV2P.parameters.json => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.parameters.json} (83%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Meal-T0IHN7YLGV2P.template.json => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.template.json} (98%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-WorkoutProgram-1LQLU2DSLQ8HT.description.txt => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-WorkoutProgram-1LQLU2DSLQ8HT.outputs.json => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.outputs.json} (72%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-WorkoutProgram-1LQLU2DSLQ8HT.parameters.json => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.parameters.json} (82%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-WorkoutProgram-1LQLU2DSLQ8HT.template.json => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.template.json} (98%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS.description.txt => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.description.txt} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.outputs.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS.parameters.json => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.parameters.json} (79%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS.template.json => amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.template.json} (99%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apinutritionapi-8ILYUUGF5PGJ.description.txt => amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apinutritionapi-8ILYUUGF5PGJ.outputs.json => amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.outputs.json} (75%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apinutritionapi-8ILYUUGF5PGJ.parameters.json => amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.parameters.json} (77%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-apinutritionapi-8ILYUUGF5PGJ.template.json => amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.template.json} (98%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.description.txt rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-authfitnesstracker6b0fc1196b0fc119-IU8FJDZI54QH.outputs.json => amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.outputs.json} (62%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.parameters.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.template.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c.description.txt => amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.description.txt} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.outputs.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-authuserPoolGroups-1RDWF2H8163RP.template.json => amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.template.json} (69%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-functionadmin-1COFLOF4D1C47.description.txt => amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-functionadmin-1COFLOF4D1C47.outputs.json => amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.outputs.json} (82%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-functionadmin-1COFLOF4D1C47.parameters.json => amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.parameters.json} (52%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-functionadmin-1COFLOF4D1C47.template.json => amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.template.json} (93%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-functionfitnesstracker6b0fc1196b0fc119PreSignup-IQSLCEZIETI0.description.txt => amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-functionfitnesstracker6b0fc1196b0fc119PreSignup-IQSLCEZIETI0.outputs.json => amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.outputs.json} (63%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-functionfitnesstracker6b0fc1196b0fc119PreSignup-IQSLCEZIETI0.parameters.json => amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.parameters.json} (77%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.template.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-functionlognutrition-10VHW25DVQUYL.description.txt => amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-functionlognutrition-10VHW25DVQUYL.outputs.json => amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.outputs.json} (83%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-functionlognutrition-10VHW25DVQUYL.parameters.json => amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.parameters.json} (77%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c-functionlognutrition-10VHW25DVQUYL.template.json => amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.template.json} (98%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.description.txt rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c.outputs.json => amplify-fitnesstracker-main-6fc9a.outputs.json} (56%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-0683c.template.json => amplify-fitnesstracker-main-6fc9a.template.json} (85%) diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.mappings.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.mappings.json new file mode 100644 index 00000000000..83c0978f566 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.mappings.json @@ -0,0 +1,12 @@ +[ + { + "Source": { + "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04", + "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH" + }, + "Destination": { + "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04", + "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding" + } + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.source.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.source.template.json new file mode 100644 index 00000000000..5684a232e16 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.source.template.json @@ -0,0 +1,1090 @@ +{ + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.11.2\",\"stackType\":\"auth-Cognito\",\"metadata\":{}}", + "Resources": { + "amplifyAuthUserPoolPreSignUpCognito55F45D8E": { + "Type": "AWS::Lambda::Permission", + "Properties": { + "Action": "lambda:InvokeFunction", + "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", + "Principal": "cognito-idp.amazonaws.com", + "SourceArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/PreSignUpCognito" + } + }, + "amplifyAuthauthenticatedUserRoleD8DA3689": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "authenticated" + } + }, + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/authenticatedUserRole/Resource" + } + }, + "amplifyAuthunauthenticatedUserRole2B524D9E": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "unauthenticated" + } + }, + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/unauthenticatedUserRole/Resource" + } + }, + "amplifyAuthAdminGroupRole766878DC": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "authenticated" + } + }, + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroupRole/Resource" + } + }, + "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ], + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/ServiceRole/Resource" + } + }, + "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambda9B996C42": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Architectures": [ + "x86_64" + ], + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371.zip" + }, + "Environment": { + "Variables": { + "MODULES": "email-filter-allowlist", + "DOMAINALLOWLIST": "amazon.com", + "DOMAINBLACKLIST": "", + "ENV": "gen2-main", + "REGION": "us-east-1", + "AMPLIFY_SSM_ENV_CONFIG": "{}" + } + }, + "EphemeralStorage": { + "Size": 512 + }, + "FunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", + "Handler": "index.handler", + "MemorySize": 128, + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-fitnesstracker9ceb2e7c9ce-xZE38EFlQueh", + "Runtime": "nodejs22.x", + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ], + "Timeout": 25 + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/Resource", + "aws:asset:path": "asset.760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371", + "aws:asset:is-bundled": true, + "aws:asset:property": "Code" + } + }, + "AMPLIFYAUTHUSERPOOLIDParameterCC466CA3": { + "Type": "AWS::SSM::Parameter", + "Properties": { + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID", + "Tags": { + "amplify:app-id": "fitnesstracker", + "amplify:branch-name": "gen2-main", + "amplify:deployment-type": "branch", + "created-by": "amplify" + }, + "Type": "String", + "Value": "us-east-1_mQEsDQ1lC" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/AMPLIFY_AUTH_USERPOOL_IDParameter/Resource" + } + }, + "admingen2mainlambdaServiceRole439B1792": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ], + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "admin-gen2-main" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/Resource" + } + }, + "admingen2mainlambdaServiceRoleDefaultPolicy0F640A9C": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "ssm:GetParameters", + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":ssm:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":parameter/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID" + ] + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "admingen2mainlambdaServiceRoleDefaultPolicy0F640A9C", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" + } + }, + "admingen2mainlambdaECF7211C": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Architectures": [ + "x86_64" + ], + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a.zip" + }, + "Environment": { + "Variables": { + "ENV": "gen2-main", + "REGION": "us-east-1", + "AMPLIFY_SSM_ENV_CONFIG": "{\"AMPLIFY_AUTH_USERPOOL_ID\":{\"path\":\"/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID\"}}", + "AMPLIFY_AUTH_USERPOOL_ID": "", + "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": "us-east-1_mQEsDQ1lC" + } + }, + "EphemeralStorage": { + "Size": 512 + }, + "FunctionName": "admin-gen2-main", + "Handler": "index.handler", + "MemorySize": 128, + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-admingen2mainlambdaServic-oHrOsDr6WPUj", + "Runtime": "nodejs22.x", + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "admin-gen2-main" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ], + "Timeout": 25 + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/Resource", + "aws:asset:path": "asset.4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a", + "aws:asset:is-bundled": true, + "aws:asset:property": "Code" + } + }, + "userpoolAccess13FEE5419": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:AdminGetDevice", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess13FEE5419", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess1/Resource" + } + }, + "userpoolAccess268F187DB": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:AdminGetUser", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess268F187DB", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess2/Resource" + } + }, + "userpoolAccess3956C62F8": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:AdminListDevices", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess3956C62F8", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess3/Resource" + } + }, + "userpoolAccess4A84025C3": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:AdminListGroupsForUser", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess4A84025C3", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess4/Resource" + } + }, + "userpoolAccess585E2FB32": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:ListUsers", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess585E2FB32", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess5/Resource" + } + }, + "userpoolAccess600DA4CB0": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:ListUsersInGroup", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess600DA4CB0", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess6/Resource" + } + }, + "userpoolAccess76F9C91C1": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:ListGroups", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess76F9C91C1", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess7/Resource" + } + }, + "CDKMetadata": { + "Type": "AWS::CDK::Metadata", + "Properties": { + "Analytics": "v2:deflate64:H4sIAAAAAAAA/12NzW7CQAyEn4X74tLAoVeI1KoXFBH1HC0bkzrZn2rtFKFV3r3aoLSop5mxPZ8LKHY72Kz0ldemHdaWzpCOyIJtLdoMSl+5SSZ0niRA+mCMVQhWlRf/6xdTWkIvj6u/yXuLXkhuS/kxn4LFvYg2n+5f/y2G8WtSVrtzqyGVF19hdMRMwee719EboeAnRdpByqA8nrUKlswtx7tbMI0PLfYMx1kWguJto5lRGPZZFG/hMJoB5aAZFbODVEsk31U6aoeCcUYvYZrU3KtFd+S7SeUv0PPTd1HA8wtsVj0TrePohRzC6a4/caZnM34BAAA=" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/CDKMetadata/Default" + }, + "Condition": "CDKMetadataAvailable" + }, + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Your verification code is {####}", + "EmailVerificationSubject": "Your verification code", + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": "8", + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::Join": [ + "", + [ + "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", + "-", + "main" + ] + ] + }, + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "fitnes9ceb2e7c_app_clientWeb", + "RefreshTokenValidity": "30", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_LAwe5ZJrw" + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "fitnes9ceb2e7c_app_client", + "GenerateSecret": "false", + "RefreshTokenValidity": "30", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_LAwe5ZJrw" + } + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": "false", + "CognitoIdentityProviders": [ + { + "ClientId": "12hkvqjabpisei771tiefdhs76", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_LAwe5ZJrw" + } + ] + } + }, + { + "ClientId": "4bk8odk8blrf65ptk2dffug25k", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_LAwe5ZJrw" + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::Join": [ + "", + [ + "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", + "main" + ] + ] + } + } + }, + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d", + "RoleMappings": { + "UserPoolClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": "us-east-1_LAwe5ZJrw", + "client": "12hkvqjabpisei771tiefdhs76" + } + ] + }, + "Type": "Token" + }, + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${webClient}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": "us-east-1_LAwe5ZJrw", + "webClient": "4bk8odk8blrf65ptk2dffug25k" + } + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole", + "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" + } + } + } + }, + "Conditions": { + "CDKMetadataAvailable": { + "Fn::Or": [ + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "af-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-3" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-south-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-3" + ] + } + ] + }, + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-4" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ca-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ca-west-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "cn-north-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "cn-northwest-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-central-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-north-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-south-2" + ] + } + ] + }, + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-3" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "il-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "me-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "me-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "sa-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-east-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-west-1" + ] + } + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-west-2" + ] + } + ] + } + }, + "Outputs": { + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref": { + "Value": "us-east-1_mQEsDQ1lC" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPoolAppClientE9EEF58ARef": { + "Value": "dgddko7evul00or8262g7n9ub" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { + "Value": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authfitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaB4152CB6Ref": { + "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FRef": { + "Value": "admin-gen2-main" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn": { + "Value": "arn:aws:lambda:us-east-1:123456789012:function:admin-gen2-main" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR" + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.target.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.target.template.json new file mode 100644 index 00000000000..5bce33938d8 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.target.template.json @@ -0,0 +1,225 @@ +{ + "AWSTemplateFormatVersion": "2010-09-09", + "Description": "Temporary holding stack for Gen2 migration", + "Resources": { + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AccountRecoverySetting": { + "RecoveryMechanisms": [ + { + "Name": "verified_email", + "Priority": 1 + } + ] + }, + "AdminCreateUserConfig": { + "AllowAdminCreateUserOnly": false + }, + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Your verification code is {####}", + "EmailVerificationSubject": "Your verification code", + "LambdaConfig": { + "PreSignUp": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + }, + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": 8, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false, + "TemporaryPasswordValidityDays": 7 + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "SmsVerificationMessage": "The verification code to your new account is {####}", + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolTags": { + "amplify:app-id": "fitnesstracker", + "amplify:branch-name": "gen2-main", + "amplify:deployment-type": "branch", + "amplify:friendly-name": "amplifyAuth", + "created-by": "amplify" + }, + "UsernameConfiguration": { + "CaseSensitive": false + }, + "VerificationMessageTemplate": { + "DefaultEmailOption": "CONFIRM_WITH_CODE", + "EmailMessage": "Your verification code is {####}", + "EmailSubject": "Your verification code", + "SmsMessage": "The verification code to your new account is {####}" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/Resource" + } + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlows": [ + "code" + ], + "AllowedOAuthFlowsUserPoolClient": true, + "AllowedOAuthScopes": [ + "profile", + "phone", + "email", + "openid", + "aws.cognito.signin.user.admin" + ], + "CallbackURLs": [ + "https://example.com" + ], + "ExplicitAuthFlows": [ + "ALLOW_CUSTOM_AUTH", + "ALLOW_USER_SRP_AUTH", + "ALLOW_REFRESH_TOKEN_AUTH" + ], + "PreventUserExistenceErrors": "ENABLED", + "SupportedIdentityProviders": [ + "COGNITO" + ], + "UserPoolId": "us-east-1_mQEsDQ1lC" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPoolAppClient/Resource" + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_mQEsDQ1lC" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": false, + "CognitoIdentityProviders": [ + { + "ClientId": "dgddko7evul00or8262g7n9ub", + "ProviderName": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_mQEsDQ1lC" + ] + ] + } + } + ], + "IdentityPoolTags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ], + "SupportedLoginProviders": {} + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/IdentityPool" + } + }, + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842", + "RoleMappings": { + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_mQEsDQ1lC", + ":", + "dgddko7evul00or8262g7n9ub" + ] + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc", + "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + } + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/IdentityPoolRoleAttachment" + } + }, + "amplifyAuthAdminGroupCC42FF04": { + "Type": "AWS::Cognito::UserPoolGroup", + "Properties": { + "GroupName": "Admin", + "Precedence": 0, + "RoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR", + "UserPoolId": "us-east-1_mQEsDQ1lC" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroup" + } + } + }, + "Outputs": {} +} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json new file mode 100644 index 00000000000..4091bf8545c --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json @@ -0,0 +1,52 @@ +[ + { + "Source": { + "LogicalResourceId": "UserPool", + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD/9ac07e10-2594-11f1-aee1-0affcf84f6bb" + }, + "Destination": { + "LogicalResourceId": "amplifyAuthUserPool4BA7F805", + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/785891a0-25fd-11f1-b51f-0e3e40e955b5" + } + }, + { + "Source": { + "LogicalResourceId": "UserPoolClientWeb", + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD/9ac07e10-2594-11f1-aee1-0affcf84f6bb" + }, + "Destination": { + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/785891a0-25fd-11f1-b51f-0e3e40e955b5" + } + }, + { + "Source": { + "LogicalResourceId": "UserPoolClient", + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD/9ac07e10-2594-11f1-aee1-0affcf84f6bb" + }, + "Destination": { + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/785891a0-25fd-11f1-b51f-0e3e40e955b5" + } + }, + { + "Source": { + "LogicalResourceId": "IdentityPool", + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD/9ac07e10-2594-11f1-aee1-0affcf84f6bb" + }, + "Destination": { + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/785891a0-25fd-11f1-b51f-0e3e40e955b5" + } + }, + { + "Source": { + "LogicalResourceId": "IdentityPoolRoleMap", + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD/9ac07e10-2594-11f1-aee1-0affcf84f6bb" + }, + "Destination": { + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/785891a0-25fd-11f1-b51f-0e3e40e955b5" + } + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.source.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.source.template.json new file mode 100644 index 00000000000..f9e2dd40e74 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.source.template.json @@ -0,0 +1,216 @@ +{ + "Description": "Amplify Cognito Stack for AWS Amplify CLI", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "env": { + "Type": "String" + }, + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { + "Type": "String", + "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" + }, + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { + "Type": "String", + "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" + }, + "identityPoolName": { + "Type": "String" + }, + "allowUnauthenticatedIdentities": { + "Type": "String" + }, + "resourceNameTruncated": { + "Type": "String" + }, + "userPoolName": { + "Type": "String" + }, + "autoVerifiedAttributes": { + "Type": "CommaDelimitedList" + }, + "mfaConfiguration": { + "Type": "String" + }, + "mfaTypes": { + "Type": "CommaDelimitedList" + }, + "smsAuthenticationMessage": { + "Type": "String" + }, + "smsVerificationMessage": { + "Type": "String" + }, + "emailVerificationSubject": { + "Type": "String" + }, + "emailVerificationMessage": { + "Type": "String" + }, + "defaultPasswordPolicy": { + "Type": "String" + }, + "passwordPolicyMinLength": { + "Type": "String" + }, + "passwordPolicyCharacters": { + "Type": "CommaDelimitedList" + }, + "requiredAttributes": { + "Type": "CommaDelimitedList" + }, + "aliasAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientGenerateSecret": { + "Type": "String" + }, + "userpoolClientRefreshTokenValidity": { + "Type": "String" + }, + "userpoolClientWriteAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientReadAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientLambdaRole": { + "Type": "String" + }, + "userpoolClientSetAttributes": { + "Type": "String" + }, + "sharedId": { + "Type": "String" + }, + "resourceName": { + "Type": "String" + }, + "authSelections": { + "Type": "String" + }, + "useDefault": { + "Type": "String" + }, + "thirdPartyAuth": { + "Type": "String" + }, + "userPoolGroups": { + "Type": "String" + }, + "adminQueries": { + "Type": "String" + }, + "triggers": { + "Type": "String" + }, + "hostedUI": { + "Type": "String" + }, + "userPoolGroupList": { + "Type": "CommaDelimitedList" + }, + "serviceName": { + "Type": "String" + }, + "usernameCaseSensitive": { + "Type": "String" + }, + "useEnabledMfas": { + "Type": "String" + }, + "authRoleArn": { + "Type": "String" + }, + "unauthRoleArn": { + "Type": "String" + }, + "breakCircularDependency": { + "Type": "String" + }, + "dependsOn": { + "Type": "CommaDelimitedList" + }, + "permissions": { + "Type": "CommaDelimitedList" + }, + "authTriggerConnections": { + "Type": "CommaDelimitedList" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + "main", + "NONE" + ] + } + }, + "Resources": { + "UserPoolClientRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + }, + "Action": "sts:AssumeRole" + } + ] + }, + "RoleName": { + "Fn::Join": [ + "", + [ + "upClientLambdaRole9ceb2e7c", + { + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + "amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD" + ] + } + ] + }, + "-", + "main" + ] + ] + } + } + } + }, + "Outputs": { + "IdentityPoolId": { + "Description": "Id for the identity pool", + "Value": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d" + }, + "IdentityPoolName": { + "Value": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__main" + }, + "UserPoolId": { + "Description": "Id for the user pool", + "Value": "us-east-1_LAwe5ZJrw" + }, + "UserPoolArn": { + "Description": "Arn for the user pool", + "Value": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_LAwe5ZJrw" + }, + "UserPoolName": { + "Value": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c" + }, + "AppClientIDWeb": { + "Description": "The user pool app client id for web", + "Value": "4bk8odk8blrf65ptk2dffug25k" + }, + "AppClientID": { + "Description": "The user pool app client id", + "Value": "12hkvqjabpisei771tiefdhs76" + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json new file mode 100644 index 00000000000..99f8612dcd5 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json @@ -0,0 +1,1102 @@ +{ + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.11.2\",\"stackType\":\"auth-Cognito\",\"metadata\":{}}", + "Resources": { + "amplifyAuthUserPoolPreSignUpCognito55F45D8E": { + "Type": "AWS::Lambda::Permission", + "Properties": { + "Action": "lambda:InvokeFunction", + "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", + "Principal": "cognito-idp.amazonaws.com", + "SourceArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/PreSignUpCognito" + } + }, + "amplifyAuthauthenticatedUserRoleD8DA3689": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "authenticated" + } + }, + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/authenticatedUserRole/Resource" + } + }, + "amplifyAuthunauthenticatedUserRole2B524D9E": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "unauthenticated" + } + }, + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/unauthenticatedUserRole/Resource" + } + }, + "amplifyAuthAdminGroupRole766878DC": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "authenticated" + } + }, + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroupRole/Resource" + } + }, + "amplifyAuthAdminGroupCC42FF04": { + "Type": "AWS::Cognito::UserPoolGroup", + "Properties": { + "GroupName": "Admin", + "Precedence": 0, + "RoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR", + "UserPoolId": "us-east-1_mQEsDQ1lC" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroup" + } + }, + "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ], + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/ServiceRole/Resource" + } + }, + "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambda9B996C42": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Architectures": [ + "x86_64" + ], + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371.zip" + }, + "Environment": { + "Variables": { + "MODULES": "email-filter-allowlist", + "DOMAINALLOWLIST": "amazon.com", + "DOMAINBLACKLIST": "", + "ENV": "gen2-main", + "REGION": "us-east-1", + "AMPLIFY_SSM_ENV_CONFIG": "{}" + } + }, + "EphemeralStorage": { + "Size": 512 + }, + "FunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", + "Handler": "index.handler", + "MemorySize": 128, + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-fitnesstracker9ceb2e7c9ce-xZE38EFlQueh", + "Runtime": "nodejs22.x", + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ], + "Timeout": 25 + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/Resource", + "aws:asset:path": "asset.760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371", + "aws:asset:is-bundled": true, + "aws:asset:property": "Code" + } + }, + "AMPLIFYAUTHUSERPOOLIDParameterCC466CA3": { + "Type": "AWS::SSM::Parameter", + "Properties": { + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID", + "Tags": { + "amplify:app-id": "fitnesstracker", + "amplify:branch-name": "gen2-main", + "amplify:deployment-type": "branch", + "created-by": "amplify" + }, + "Type": "String", + "Value": "us-east-1_mQEsDQ1lC" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/AMPLIFY_AUTH_USERPOOL_IDParameter/Resource" + } + }, + "admingen2mainlambdaServiceRole439B1792": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ], + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "admin-gen2-main" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/Resource" + } + }, + "admingen2mainlambdaServiceRoleDefaultPolicy0F640A9C": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "ssm:GetParameters", + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":ssm:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":parameter/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID" + ] + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "admingen2mainlambdaServiceRoleDefaultPolicy0F640A9C", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" + } + }, + "admingen2mainlambdaECF7211C": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Architectures": [ + "x86_64" + ], + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a.zip" + }, + "Environment": { + "Variables": { + "ENV": "gen2-main", + "REGION": "us-east-1", + "AMPLIFY_SSM_ENV_CONFIG": "{\"AMPLIFY_AUTH_USERPOOL_ID\":{\"path\":\"/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID\"}}", + "AMPLIFY_AUTH_USERPOOL_ID": "", + "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": "us-east-1_mQEsDQ1lC" + } + }, + "EphemeralStorage": { + "Size": 512 + }, + "FunctionName": "admin-gen2-main", + "Handler": "index.handler", + "MemorySize": 128, + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-admingen2mainlambdaServic-oHrOsDr6WPUj", + "Runtime": "nodejs22.x", + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "admin-gen2-main" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ], + "Timeout": 25 + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/Resource", + "aws:asset:path": "asset.4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a", + "aws:asset:is-bundled": true, + "aws:asset:property": "Code" + } + }, + "userpoolAccess13FEE5419": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:AdminGetDevice", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess13FEE5419", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess1/Resource" + } + }, + "userpoolAccess268F187DB": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:AdminGetUser", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess268F187DB", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess2/Resource" + } + }, + "userpoolAccess3956C62F8": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:AdminListDevices", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess3956C62F8", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess3/Resource" + } + }, + "userpoolAccess4A84025C3": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:AdminListGroupsForUser", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess4A84025C3", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess4/Resource" + } + }, + "userpoolAccess585E2FB32": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:ListUsers", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess585E2FB32", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess5/Resource" + } + }, + "userpoolAccess600DA4CB0": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:ListUsersInGroup", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess600DA4CB0", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess6/Resource" + } + }, + "userpoolAccess76F9C91C1": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:ListGroups", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess76F9C91C1", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess7/Resource" + } + }, + "CDKMetadata": { + "Type": "AWS::CDK::Metadata", + "Properties": { + "Analytics": "v2:deflate64:H4sIAAAAAAAA/12NzW7CQAyEn4X74tLAoVeI1KoXFBH1HC0bkzrZn2rtFKFV3r3aoLSop5mxPZ8LKHY72Kz0ldemHdaWzpCOyIJtLdoMSl+5SSZ0niRA+mCMVQhWlRf/6xdTWkIvj6u/yXuLXkhuS/kxn4LFvYg2n+5f/y2G8WtSVrtzqyGVF19hdMRMwee719EboeAnRdpByqA8nrUKlswtx7tbMI0PLfYMx1kWguJto5lRGPZZFG/hMJoB5aAZFbODVEsk31U6aoeCcUYvYZrU3KtFd+S7SeUv0PPTd1HA8wtsVj0TrePohRzC6a4/caZnM34BAAA=" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/CDKMetadata/Default" + }, + "Condition": "CDKMetadataAvailable" + }, + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Your verification code is {####}", + "EmailVerificationSubject": "Your verification code", + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": "8", + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::Join": [ + "", + [ + "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", + "-", + "main" + ] + ] + }, + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "fitnes9ceb2e7c_app_clientWeb", + "RefreshTokenValidity": "30", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_LAwe5ZJrw" + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "fitnes9ceb2e7c_app_client", + "GenerateSecret": "false", + "RefreshTokenValidity": "30", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_LAwe5ZJrw" + } + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": "false", + "CognitoIdentityProviders": [ + { + "ClientId": "12hkvqjabpisei771tiefdhs76", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_LAwe5ZJrw" + } + ] + } + }, + { + "ClientId": "4bk8odk8blrf65ptk2dffug25k", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_LAwe5ZJrw" + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::Join": [ + "", + [ + "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", + "main" + ] + ] + } + } + }, + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d", + "RoleMappings": { + "UserPoolClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": "us-east-1_LAwe5ZJrw", + "client": "12hkvqjabpisei771tiefdhs76" + } + ] + }, + "Type": "Token" + }, + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${webClient}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": "us-east-1_LAwe5ZJrw", + "webClient": "4bk8odk8blrf65ptk2dffug25k" + } + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole", + "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" + } + } + } + }, + "Conditions": { + "CDKMetadataAvailable": { + "Fn::Or": [ + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "af-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-3" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-south-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-3" + ] + } + ] + }, + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-4" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ca-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ca-west-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "cn-north-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "cn-northwest-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-central-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-north-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-south-2" + ] + } + ] + }, + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-3" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "il-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "me-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "me-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "sa-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-east-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-west-1" + ] + } + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-west-2" + ] + } + ] + } + }, + "Outputs": { + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref": { + "Value": "us-east-1_mQEsDQ1lC" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPoolAppClientE9EEF58ARef": { + "Value": "dgddko7evul00or8262g7n9ub" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { + "Value": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authfitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaB4152CB6Ref": { + "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FRef": { + "Value": "admin-gen2-main" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn": { + "Value": "arn:aws:lambda:us-east-1:123456789012:function:admin-gen2-main" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR" + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json new file mode 100644 index 00000000000..86252db88e5 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json @@ -0,0 +1,12 @@ +[ + { + "Source": { + "LogicalResourceId": "AdminGroup", + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV/af7405c0-2594-11f1-8524-0affd2875eef" + }, + "Destination": { + "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04", + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/785891a0-25fd-11f1-b51f-0e3e40e955b5" + } + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.source.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.source.template.json new file mode 100644 index 00000000000..d90598764f2 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.source.template.json @@ -0,0 +1,81 @@ +{ + "Description": "Root Stack for AWS Amplify CLI", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "env": { + "Type": "String" + }, + "AuthRoleArn": { + "Type": "String" + }, + "UnauthRoleArn": { + "Type": "String" + }, + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "Type": "String", + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + }, + "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { + "Type": "String", + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" + }, + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { + "Type": "String", + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID" + }, + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { + "Type": "String", + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + "main", + "NONE" + ] + } + }, + "Resources": { + "AdminGroupRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "", + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + }, + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d" + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "authenticated" + } + } + } + ] + }, + "RoleName": { + "Fn::Join": [ + "", + [ + "us-east-1_LAwe5ZJrw", + "-AdminGroupRole" + ] + ] + } + } + } + }, + "Outputs": { + "AdminGroupRole": { + "Value": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole" + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json new file mode 100644 index 00000000000..e72ec0278ac --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json @@ -0,0 +1,1100 @@ +{ + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.11.2\",\"stackType\":\"auth-Cognito\",\"metadata\":{}}", + "Resources": { + "amplifyAuthUserPoolPreSignUpCognito55F45D8E": { + "Type": "AWS::Lambda::Permission", + "Properties": { + "Action": "lambda:InvokeFunction", + "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", + "Principal": "cognito-idp.amazonaws.com", + "SourceArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/PreSignUpCognito" + } + }, + "amplifyAuthauthenticatedUserRoleD8DA3689": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "authenticated" + } + }, + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/authenticatedUserRole/Resource" + } + }, + "amplifyAuthunauthenticatedUserRole2B524D9E": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "unauthenticated" + } + }, + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/unauthenticatedUserRole/Resource" + } + }, + "amplifyAuthAdminGroupRole766878DC": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "authenticated" + } + }, + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroupRole/Resource" + } + }, + "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ], + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/ServiceRole/Resource" + } + }, + "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambda9B996C42": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Architectures": [ + "x86_64" + ], + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371.zip" + }, + "Environment": { + "Variables": { + "MODULES": "email-filter-allowlist", + "DOMAINALLOWLIST": "amazon.com", + "DOMAINBLACKLIST": "", + "ENV": "gen2-main", + "REGION": "us-east-1", + "AMPLIFY_SSM_ENV_CONFIG": "{}" + } + }, + "EphemeralStorage": { + "Size": 512 + }, + "FunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", + "Handler": "index.handler", + "MemorySize": 128, + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-fitnesstracker9ceb2e7c9ce-xZE38EFlQueh", + "Runtime": "nodejs22.x", + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ], + "Timeout": 25 + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/Resource", + "aws:asset:path": "asset.760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371", + "aws:asset:is-bundled": true, + "aws:asset:property": "Code" + } + }, + "AMPLIFYAUTHUSERPOOLIDParameterCC466CA3": { + "Type": "AWS::SSM::Parameter", + "Properties": { + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID", + "Tags": { + "amplify:app-id": "fitnesstracker", + "amplify:branch-name": "gen2-main", + "amplify:deployment-type": "branch", + "created-by": "amplify" + }, + "Type": "String", + "Value": "us-east-1_mQEsDQ1lC" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/AMPLIFY_AUTH_USERPOOL_IDParameter/Resource" + } + }, + "admingen2mainlambdaServiceRole439B1792": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ], + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "admin-gen2-main" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/Resource" + } + }, + "admingen2mainlambdaServiceRoleDefaultPolicy0F640A9C": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "ssm:GetParameters", + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":ssm:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":parameter/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID" + ] + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "admingen2mainlambdaServiceRoleDefaultPolicy0F640A9C", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" + } + }, + "admingen2mainlambdaECF7211C": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Architectures": [ + "x86_64" + ], + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a.zip" + }, + "Environment": { + "Variables": { + "ENV": "gen2-main", + "REGION": "us-east-1", + "AMPLIFY_SSM_ENV_CONFIG": "{\"AMPLIFY_AUTH_USERPOOL_ID\":{\"path\":\"/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID\"}}", + "AMPLIFY_AUTH_USERPOOL_ID": "", + "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": "us-east-1_mQEsDQ1lC" + } + }, + "EphemeralStorage": { + "Size": 512 + }, + "FunctionName": "admin-gen2-main", + "Handler": "index.handler", + "MemorySize": 128, + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-admingen2mainlambdaServic-oHrOsDr6WPUj", + "Runtime": "nodejs22.x", + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "admin-gen2-main" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ], + "Timeout": 25 + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/Resource", + "aws:asset:path": "asset.4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a", + "aws:asset:is-bundled": true, + "aws:asset:property": "Code" + } + }, + "userpoolAccess13FEE5419": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:AdminGetDevice", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess13FEE5419", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess1/Resource" + } + }, + "userpoolAccess268F187DB": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:AdminGetUser", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess268F187DB", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess2/Resource" + } + }, + "userpoolAccess3956C62F8": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:AdminListDevices", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess3956C62F8", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess3/Resource" + } + }, + "userpoolAccess4A84025C3": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:AdminListGroupsForUser", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess4A84025C3", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess4/Resource" + } + }, + "userpoolAccess585E2FB32": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:ListUsers", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess585E2FB32", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess5/Resource" + } + }, + "userpoolAccess600DA4CB0": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:ListUsersInGroup", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess600DA4CB0", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess6/Resource" + } + }, + "userpoolAccess76F9C91C1": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:ListGroups", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess76F9C91C1", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess7/Resource" + } + }, + "CDKMetadata": { + "Type": "AWS::CDK::Metadata", + "Properties": { + "Analytics": "v2:deflate64:H4sIAAAAAAAA/12NzW7CQAyEn4X74tLAoVeI1KoXFBH1HC0bkzrZn2rtFKFV3r3aoLSop5mxPZ8LKHY72Kz0ldemHdaWzpCOyIJtLdoMSl+5SSZ0niRA+mCMVQhWlRf/6xdTWkIvj6u/yXuLXkhuS/kxn4LFvYg2n+5f/y2G8WtSVrtzqyGVF19hdMRMwee719EboeAnRdpByqA8nrUKlswtx7tbMI0PLfYMx1kWguJto5lRGPZZFG/hMJoB5aAZFbODVEsk31U6aoeCcUYvYZrU3KtFd+S7SeUv0PPTd1HA8wtsVj0TrePohRzC6a4/caZnM34BAAA=" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/CDKMetadata/Default" + }, + "Condition": "CDKMetadataAvailable" + }, + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Your verification code is {####}", + "EmailVerificationSubject": "Your verification code", + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": "8", + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::Join": [ + "", + [ + "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", + "-", + "main" + ] + ] + }, + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "fitnes9ceb2e7c_app_clientWeb", + "RefreshTokenValidity": "30", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_LAwe5ZJrw" + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "fitnes9ceb2e7c_app_client", + "GenerateSecret": "false", + "RefreshTokenValidity": "30", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_LAwe5ZJrw" + } + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": "false", + "CognitoIdentityProviders": [ + { + "ClientId": "12hkvqjabpisei771tiefdhs76", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_LAwe5ZJrw" + } + ] + } + }, + { + "ClientId": "4bk8odk8blrf65ptk2dffug25k", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_LAwe5ZJrw" + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::Join": [ + "", + [ + "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", + "main" + ] + ] + } + } + }, + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d", + "RoleMappings": { + "UserPoolClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": "us-east-1_LAwe5ZJrw", + "client": "12hkvqjabpisei771tiefdhs76" + } + ] + }, + "Type": "Token" + }, + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${webClient}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": "us-east-1_LAwe5ZJrw", + "webClient": "4bk8odk8blrf65ptk2dffug25k" + } + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole", + "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" + } + } + }, + "amplifyAuthAdminGroupCC42FF04": { + "Type": "AWS::Cognito::UserPoolGroup", + "Properties": { + "Description": "override success", + "GroupName": "Admin", + "Precedence": 1, + "RoleArn": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole", + "UserPoolId": "us-east-1_LAwe5ZJrw" + } + } + }, + "Conditions": { + "CDKMetadataAvailable": { + "Fn::Or": [ + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "af-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-3" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-south-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-3" + ] + } + ] + }, + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-4" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ca-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ca-west-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "cn-north-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "cn-northwest-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-central-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-north-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-south-2" + ] + } + ] + }, + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-3" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "il-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "me-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "me-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "sa-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-east-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-west-1" + ] + } + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-west-2" + ] + } + ] + } + }, + "Outputs": { + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref": { + "Value": "us-east-1_mQEsDQ1lC" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPoolAppClientE9EEF58ARef": { + "Value": "dgddko7evul00or8262g7n9ub" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { + "Value": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authfitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaB4152CB6Ref": { + "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FRef": { + "Value": "admin-gen2-main" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn": { + "Value": "arn:aws:lambda:us-east-1:123456789012:function:admin-gen2-main" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR" + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataConnectionStackNestedStackConne-1PZTW5BMDQ740.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.parameters.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataConnectionStackNestedStackConne-1PZTW5BMDQ740.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.parameters.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json new file mode 100644 index 00000000000..4b2c614ebc7 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json @@ -0,0 +1,1151 @@ +{ + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.11.2\",\"stackType\":\"auth-Cognito\",\"metadata\":{}}", + "Resources": { + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AccountRecoverySetting": { + "RecoveryMechanisms": [ + { + "Name": "verified_email", + "Priority": 1 + } + ] + }, + "AdminCreateUserConfig": { + "AllowAdminCreateUserOnly": false + }, + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Your verification code is {####}", + "EmailVerificationSubject": "Your verification code", + "LambdaConfig": { + "PreSignUp": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + }, + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": 8, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false, + "TemporaryPasswordValidityDays": 7 + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "SmsVerificationMessage": "The verification code to your new account is {####}", + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolTags": { + "amplify:app-id": "fitnesstracker", + "amplify:branch-name": "gen2-main", + "amplify:deployment-type": "branch", + "amplify:friendly-name": "amplifyAuth", + "created-by": "amplify" + }, + "UsernameConfiguration": { + "CaseSensitive": false + }, + "VerificationMessageTemplate": { + "DefaultEmailOption": "CONFIRM_WITH_CODE", + "EmailMessage": "Your verification code is {####}", + "EmailSubject": "Your verification code", + "SmsMessage": "The verification code to your new account is {####}" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/Resource" + } + }, + "amplifyAuthUserPoolPreSignUpCognito55F45D8E": { + "Type": "AWS::Lambda::Permission", + "Properties": { + "Action": "lambda:InvokeFunction", + "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", + "Principal": "cognito-idp.amazonaws.com", + "SourceArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/PreSignUpCognito" + } + }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_mQEsDQ1lC" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlows": [ + "code" + ], + "AllowedOAuthFlowsUserPoolClient": true, + "AllowedOAuthScopes": [ + "profile", + "phone", + "email", + "openid", + "aws.cognito.signin.user.admin" + ], + "CallbackURLs": [ + "https://example.com" + ], + "ExplicitAuthFlows": [ + "ALLOW_CUSTOM_AUTH", + "ALLOW_USER_SRP_AUTH", + "ALLOW_REFRESH_TOKEN_AUTH" + ], + "PreventUserExistenceErrors": "ENABLED", + "SupportedIdentityProviders": [ + "COGNITO" + ], + "UserPoolId": "us-east-1_mQEsDQ1lC" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPoolAppClient/Resource" + } + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": false, + "CognitoIdentityProviders": [ + { + "ClientId": "dgddko7evul00or8262g7n9ub", + "ProviderName": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_mQEsDQ1lC" + ] + ] + } + } + ], + "IdentityPoolTags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ], + "SupportedLoginProviders": {} + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/IdentityPool" + } + }, + "amplifyAuthauthenticatedUserRoleD8DA3689": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "authenticated" + } + }, + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/authenticatedUserRole/Resource" + } + }, + "amplifyAuthunauthenticatedUserRole2B524D9E": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "unauthenticated" + } + }, + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/unauthenticatedUserRole/Resource" + } + }, + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842", + "RoleMappings": { + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_mQEsDQ1lC", + ":", + "dgddko7evul00or8262g7n9ub" + ] + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc", + "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + } + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/IdentityPoolRoleAttachment" + } + }, + "amplifyAuthAdminGroupRole766878DC": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "authenticated" + } + }, + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroupRole/Resource" + } + }, + "amplifyAuthAdminGroupCC42FF04": { + "Type": "AWS::Cognito::UserPoolGroup", + "Properties": { + "GroupName": "Admin", + "Precedence": 0, + "RoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR", + "UserPoolId": "us-east-1_mQEsDQ1lC" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroup" + } + }, + "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ], + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/ServiceRole/Resource" + } + }, + "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambda9B996C42": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Architectures": [ + "x86_64" + ], + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371.zip" + }, + "Environment": { + "Variables": { + "MODULES": "email-filter-allowlist", + "DOMAINALLOWLIST": "amazon.com", + "DOMAINBLACKLIST": "", + "ENV": "gen2-main", + "REGION": "us-east-1", + "AMPLIFY_SSM_ENV_CONFIG": "{}" + } + }, + "EphemeralStorage": { + "Size": 512 + }, + "FunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", + "Handler": "index.handler", + "MemorySize": 128, + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-fitnesstracker9ceb2e7c9ce-xZE38EFlQueh", + "Runtime": "nodejs22.x", + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ], + "Timeout": 25 + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/Resource", + "aws:asset:path": "asset.760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371", + "aws:asset:is-bundled": true, + "aws:asset:property": "Code" + } + }, + "AMPLIFYAUTHUSERPOOLIDParameterCC466CA3": { + "Type": "AWS::SSM::Parameter", + "Properties": { + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID", + "Tags": { + "amplify:app-id": "fitnesstracker", + "amplify:branch-name": "gen2-main", + "amplify:deployment-type": "branch", + "created-by": "amplify" + }, + "Type": "String", + "Value": "us-east-1_mQEsDQ1lC" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/AMPLIFY_AUTH_USERPOOL_IDParameter/Resource" + } + }, + "admingen2mainlambdaServiceRole439B1792": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ], + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "admin-gen2-main" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/Resource" + } + }, + "admingen2mainlambdaServiceRoleDefaultPolicy0F640A9C": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "ssm:GetParameters", + "Effect": "Allow", + "Resource": { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":ssm:", + { + "Ref": "AWS::Region" + }, + ":", + { + "Ref": "AWS::AccountId" + }, + ":parameter/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID" + ] + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "admingen2mainlambdaServiceRoleDefaultPolicy0F640A9C", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" + } + }, + "admingen2mainlambdaECF7211C": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Architectures": [ + "x86_64" + ], + "Code": { + "S3Bucket": { + "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" + }, + "S3Key": "4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a.zip" + }, + "Environment": { + "Variables": { + "ENV": "gen2-main", + "REGION": "us-east-1", + "AMPLIFY_SSM_ENV_CONFIG": "{\"AMPLIFY_AUTH_USERPOOL_ID\":{\"path\":\"/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID\"}}", + "AMPLIFY_AUTH_USERPOOL_ID": "", + "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": "us-east-1_mQEsDQ1lC" + } + }, + "EphemeralStorage": { + "Size": 512 + }, + "FunctionName": "admin-gen2-main", + "Handler": "index.handler", + "MemorySize": 128, + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-admingen2mainlambdaServic-oHrOsDr6WPUj", + "Runtime": "nodejs22.x", + "Tags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "admin-gen2-main" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ], + "Timeout": 25 + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/Resource", + "aws:asset:path": "asset.4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a", + "aws:asset:is-bundled": true, + "aws:asset:property": "Code" + } + }, + "userpoolAccess13FEE5419": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:AdminGetDevice", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess13FEE5419", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess1/Resource" + } + }, + "userpoolAccess268F187DB": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:AdminGetUser", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess268F187DB", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess2/Resource" + } + }, + "userpoolAccess3956C62F8": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:AdminListDevices", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess3956C62F8", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess3/Resource" + } + }, + "userpoolAccess4A84025C3": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:AdminListGroupsForUser", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess4A84025C3", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess4/Resource" + } + }, + "userpoolAccess585E2FB32": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:ListUsers", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess585E2FB32", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess5/Resource" + } + }, + "userpoolAccess600DA4CB0": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:ListUsersInGroup", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess600DA4CB0", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess6/Resource" + } + }, + "userpoolAccess76F9C91C1": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "cognito-idp:ListGroups", + "Effect": "Allow", + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "userpoolAccess76F9C91C1", + "Roles": [ + { + "Ref": "admingen2mainlambdaServiceRole439B1792" + } + ] + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess7/Resource" + } + }, + "CDKMetadata": { + "Type": "AWS::CDK::Metadata", + "Properties": { + "Analytics": "v2:deflate64:H4sIAAAAAAAA/12NzW7CQAyEn4X74tLAoVeI1KoXFBH1HC0bkzrZn2rtFKFV3r3aoLSop5mxPZ8LKHY72Kz0ldemHdaWzpCOyIJtLdoMSl+5SSZ0niRA+mCMVQhWlRf/6xdTWkIvj6u/yXuLXkhuS/kxn4LFvYg2n+5f/y2G8WtSVrtzqyGVF19hdMRMwee719EboeAnRdpByqA8nrUKlswtx7tbMI0PLfYMx1kWguJto5lRGPZZFG/hMJoB5aAZFbODVEsk31U6aoeCcUYvYZrU3KtFd+S7SeUv0PPTd1HA8wtsVj0TrePohRzC6a4/caZnM34BAAA=" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/CDKMetadata/Default" + }, + "Condition": "CDKMetadataAvailable" + } + }, + "Conditions": { + "CDKMetadataAvailable": { + "Fn::Or": [ + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "af-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-northeast-3" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-south-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-3" + ] + } + ] + }, + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ap-southeast-4" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ca-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "ca-west-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "cn-north-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "cn-northwest-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-central-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-north-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-south-2" + ] + } + ] + }, + { + "Fn::Or": [ + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "eu-west-3" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "il-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "me-central-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "me-south-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "sa-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-east-1" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-east-2" + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-west-1" + ] + } + ] + }, + { + "Fn::Equals": [ + { + "Ref": "AWS::Region" + }, + "us-west-2" + ] + } + ] + } + }, + "Outputs": { + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref": { + "Value": "us-east-1_mQEsDQ1lC" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPoolAppClientE9EEF58ARef": { + "Value": "dgddko7evul00or8262g7n9ub" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { + "Value": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authfitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaB4152CB6Ref": { + "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FRef": { + "Value": "admin-gen2-main" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn": { + "Value": "arn:aws:lambda:us-east-1:123456789012:function:admin-gen2-main" + }, + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR" + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authfitnesstracker6b0fc1196b0fc119-IU8FJDZI54QH.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.parameters.json similarity index 83% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authfitnesstracker6b0fc1196b0fc119-IU8FJDZI54QH.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.parameters.json index 3f1b6943c23..d99a1808184 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authfitnesstracker6b0fc1196b0fc119-IU8FJDZI54QH.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.parameters.json @@ -1,7 +1,7 @@ [ { "ParameterKey": "authRoleArn", - "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-0683c-authRole" + "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" }, { "ParameterKey": "autoVerifiedAttributes", @@ -37,7 +37,7 @@ }, { "ParameterKey": "sharedId", - "ParameterValue": "6b0fc119" + "ParameterValue": "9ceb2e7c" }, { "ParameterKey": "useDefault", @@ -53,7 +53,7 @@ }, { "ParameterKey": "identityPoolName", - "ParameterValue": "fitnesstracker6b0fc119_identitypool_6b0fc119" + "ParameterValue": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c" }, { "ParameterKey": "thirdPartyAuth", @@ -77,7 +77,7 @@ }, { "ParameterKey": "resourceNameTruncated", - "ParameterValue": "fitnes6b0fc119" + "ParameterValue": "fitnes9ceb2e7c" }, { "ParameterKey": "userPoolGroups", @@ -87,13 +87,17 @@ "ParameterKey": "smsAuthenticationMessage", "ParameterValue": "Your authentication code is {####}" }, + { + "ParameterKey": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn", + "ParameterValue": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" + }, { "ParameterKey": "passwordPolicyMinLength", "ParameterValue": "8" }, { "ParameterKey": "userPoolName", - "ParameterValue": "fitnesstracker6b0fc119_userpool_6b0fc119" + "ParameterValue": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c" }, { "ParameterKey": "userpoolClientWriteAttributes", @@ -113,15 +117,7 @@ }, { "ParameterKey": "resourceName", - "ParameterValue": "fitnesstracker6b0fc1196b0fc119" - }, - { - "ParameterKey": "functionfitnesstracker6b0fc1196b0fc119PreSignupArn", - "ParameterValue": "functionfitnesstracker6b0fc1196b0fc119PreSignupArn" - }, - { - "ParameterKey": "functionfitnesstracker6b0fc1196b0fc119PreSignupName", - "ParameterValue": "functionfitnesstracker6b0fc1196b0fc119PreSignupName" + "ParameterValue": "fitnesstracker9ceb2e7c9ceb2e7c" }, { "ParameterKey": "env", @@ -149,7 +145,11 @@ }, { "ParameterKey": "unauthRoleArn", - "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-0683c-unauthRole" + "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole" + }, + { + "ParameterKey": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName", + "ParameterValue": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" }, { "ParameterKey": "requiredAttributes", @@ -161,7 +161,7 @@ }, { "ParameterKey": "authTriggerConnections", - "ParameterValue": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker6b0fc1196b0fc119PreSignup\"}" + "ParameterValue": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}" }, { "ParameterKey": "aliasAttributes", @@ -169,7 +169,7 @@ }, { "ParameterKey": "userpoolClientLambdaRole", - "ParameterValue": "fitnes6b0fc119_userpoolclient_lambda_role" + "ParameterValue": "fitnes9ceb2e7c_userpoolclient_lambda_role" }, { "ParameterKey": "defaultPasswordPolicy", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.template.json new file mode 100644 index 00000000000..54e1b22232a --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.template.json @@ -0,0 +1,373 @@ +{ + "Description": "Amplify Cognito Stack for AWS Amplify CLI", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "env": { + "Type": "String" + }, + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { + "Type": "String", + "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" + }, + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { + "Type": "String", + "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" + }, + "identityPoolName": { + "Type": "String" + }, + "allowUnauthenticatedIdentities": { + "Type": "String" + }, + "resourceNameTruncated": { + "Type": "String" + }, + "userPoolName": { + "Type": "String" + }, + "autoVerifiedAttributes": { + "Type": "CommaDelimitedList" + }, + "mfaConfiguration": { + "Type": "String" + }, + "mfaTypes": { + "Type": "CommaDelimitedList" + }, + "smsAuthenticationMessage": { + "Type": "String" + }, + "smsVerificationMessage": { + "Type": "String" + }, + "emailVerificationSubject": { + "Type": "String" + }, + "emailVerificationMessage": { + "Type": "String" + }, + "defaultPasswordPolicy": { + "Type": "String" + }, + "passwordPolicyMinLength": { + "Type": "String" + }, + "passwordPolicyCharacters": { + "Type": "CommaDelimitedList" + }, + "requiredAttributes": { + "Type": "CommaDelimitedList" + }, + "aliasAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientGenerateSecret": { + "Type": "String" + }, + "userpoolClientRefreshTokenValidity": { + "Type": "String" + }, + "userpoolClientWriteAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientReadAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientLambdaRole": { + "Type": "String" + }, + "userpoolClientSetAttributes": { + "Type": "String" + }, + "sharedId": { + "Type": "String" + }, + "resourceName": { + "Type": "String" + }, + "authSelections": { + "Type": "String" + }, + "useDefault": { + "Type": "String" + }, + "thirdPartyAuth": { + "Type": "String" + }, + "userPoolGroups": { + "Type": "String" + }, + "adminQueries": { + "Type": "String" + }, + "triggers": { + "Type": "String" + }, + "hostedUI": { + "Type": "String" + }, + "userPoolGroupList": { + "Type": "CommaDelimitedList" + }, + "serviceName": { + "Type": "String" + }, + "usernameCaseSensitive": { + "Type": "String" + }, + "useEnabledMfas": { + "Type": "String" + }, + "authRoleArn": { + "Type": "String" + }, + "unauthRoleArn": { + "Type": "String" + }, + "breakCircularDependency": { + "Type": "String" + }, + "dependsOn": { + "Type": "CommaDelimitedList" + }, + "permissions": { + "Type": "CommaDelimitedList" + }, + "authTriggerConnections": { + "Type": "CommaDelimitedList" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + "main", + "NONE" + ] + } + }, + "Resources": { + "UserPool": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Your verification code is {####}", + "EmailVerificationSubject": "Your verification code", + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": "8", + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::Join": [ + "", + [ + "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", + "-", + "main" + ] + ] + }, + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "UserPoolClientWeb": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "fitnes9ceb2e7c_app_clientWeb", + "RefreshTokenValidity": "30", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_LAwe5ZJrw" + } + }, + "UserPoolClient": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "fitnes9ceb2e7c_app_client", + "GenerateSecret": "false", + "RefreshTokenValidity": "30", + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": "us-east-1_LAwe5ZJrw" + } + }, + "UserPoolClientRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + }, + "Action": "sts:AssumeRole" + } + ] + }, + "RoleName": { + "Fn::Join": [ + "", + [ + "upClientLambdaRole9ceb2e7c", + { + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + "amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD" + ] + } + ] + }, + "-", + "main" + ] + ] + } + } + }, + "IdentityPool": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": "false", + "CognitoIdentityProviders": [ + { + "ClientId": "12hkvqjabpisei771tiefdhs76", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_LAwe5ZJrw" + } + ] + } + }, + { + "ClientId": "4bk8odk8blrf65ptk2dffug25k", + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": "us-east-1_LAwe5ZJrw" + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::Join": [ + "", + [ + "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", + "main" + ] + ] + } + } + }, + "IdentityPoolRoleMap": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d", + "RoleMappings": { + "UserPoolClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": "us-east-1_LAwe5ZJrw", + "client": "12hkvqjabpisei771tiefdhs76" + } + ] + }, + "Type": "Token" + }, + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${webClient}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": "us-east-1_LAwe5ZJrw", + "webClient": "4bk8odk8blrf65ptk2dffug25k" + } + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole", + "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" + } + } + } + }, + "Outputs": { + "IdentityPoolId": { + "Description": "Id for the identity pool", + "Value": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d" + }, + "IdentityPoolName": { + "Value": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__main" + }, + "UserPoolId": { + "Description": "Id for the user pool", + "Value": "us-east-1_LAwe5ZJrw" + }, + "UserPoolArn": { + "Description": "Arn for the user pool", + "Value": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_LAwe5ZJrw" + }, + "UserPoolName": { + "Value": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c" + }, + "AppClientIDWeb": { + "Description": "The user pool app client id for web", + "Value": "4bk8odk8blrf65ptk2dffug25k" + }, + "AppClientID": { + "Description": "The user pool app client id", + "Value": "12hkvqjabpisei771tiefdhs76" + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.parameters.json new file mode 100644 index 00000000000..3a84ecd1058 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.parameters.json @@ -0,0 +1,30 @@ +[ + { + "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb", + "ParameterValue": "4bk8odk8blrf65ptk2dffug25k" + }, + { + "ParameterKey": "UnauthRoleArn", + "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole" + }, + { + "ParameterKey": "AuthRoleArn", + "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" + }, + { + "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId", + "ParameterValue": "us-east-1_LAwe5ZJrw" + }, + { + "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId", + "ParameterValue": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d" + }, + { + "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID", + "ParameterValue": "12hkvqjabpisei771tiefdhs76" + }, + { + "ParameterKey": "env", + "ParameterValue": "main" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.template.json new file mode 100644 index 00000000000..641c5596807 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.template.json @@ -0,0 +1,91 @@ +{ + "Description": "Root Stack for AWS Amplify CLI", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "env": { + "Type": "String" + }, + "AuthRoleArn": { + "Type": "String" + }, + "UnauthRoleArn": { + "Type": "String" + }, + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "Type": "String", + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + }, + "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { + "Type": "String", + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" + }, + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { + "Type": "String", + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID" + }, + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { + "Type": "String", + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + "main", + "NONE" + ] + } + }, + "Resources": { + "AdminGroup": { + "Type": "AWS::Cognito::UserPoolGroup", + "Properties": { + "Description": "override success", + "GroupName": "Admin", + "Precedence": 1, + "RoleArn": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole", + "UserPoolId": "us-east-1_LAwe5ZJrw" + } + }, + "AdminGroupRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "", + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + }, + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d" + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "authenticated" + } + } + } + ] + }, + "RoleName": { + "Fn::Join": [ + "", + [ + "us-east-1_LAwe5ZJrw", + "-AdminGroupRole" + ] + ] + } + } + } + }, + "Outputs": { + "AdminGroupRole": { + "Value": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole" + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/amplify-meta.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/amplify-meta.json index 3876e3d5862..96397ae9746 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/amplify-meta.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/amplify-meta.json @@ -1,313 +1,313 @@ { "providers": { "awscloudformation": { - "AuthRoleName": "amplify-fitnesstracker-main-0683c-authRole", - "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-0683c-unauthRole", - "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-0683c-authRole", + "AuthRoleName": "amplify-fitnesstracker-main-6fc9a-authRole", + "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole", + "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole", "Region": "us-east-1", - "DeploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "UnauthRoleName": "amplify-fitnesstracker-main-0683c-unauthRole", - "StackName": "amplify-fitnesstracker-main-0683c", - "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-0683c/8ef87630-1a5b-11f1-84f6-12153bdc35f9", + "DeploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "UnauthRoleName": "amplify-fitnesstracker-main-6fc9a-unauthRole", + "StackName": "amplify-fitnesstracker-main-6fc9a", + "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a/d1ee9bf0-2590-11f1-8e36-1220ebfe67af", "AmplifyAppId": "fitnesstracker", - "APIGatewayAuthURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", - "AuthTriggerTemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json" + "APIGatewayAuthURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", + "AuthTriggerTemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json" } }, - "auth": { - "userPoolGroups": { - "service": "Cognito-UserPool-Groups", - "providerPlugin": "awscloudformation", + "api": { + "adminapi": { "dependsOn": [ { - "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119", "attributes": [ - "UserPoolId", - "AppClientIDWeb", - "AppClientID", - "IdentityPoolId" - ] - } - ], - "lastPushTimeStamp": "2026-03-07T19:54:29.563Z", - "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", - "logicalId": "authuserPoolGroups" - }, - "output": { - "AdminGroupRole": "arn:aws:iam::123456789012:role/us-east-1_u3DbKJdMj-AdminGroupRole" - }, - "lastPushDirHash": "5G4uAlMxN8rsFD1jyeLTya9ahFM=" - }, - "fitnesstracker6b0fc1196b0fc119": { - "service": "Cognito", - "providerPlugin": "awscloudformation", - "dependsOn": [ - { + "Name", + "Arn" + ], "category": "function", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup", - "triggerProvider": "Cognito", - "attributes": [ - "Arn", - "Name" - ] - } - ], - "customAuth": false, - "frontendAuthConfig": { - "socialProviders": [], - "usernameAttributes": [], - "signupAttributes": [ - "EMAIL" - ], - "passwordProtectionSettings": { - "passwordPolicyMinLength": 8, - "passwordPolicyCharacters": [] + "resourceName": "admin" }, - "mfaConfiguration": "OFF", - "mfaTypes": [ - "SMS" - ], - "verificationMechanisms": [ - "EMAIL" - ] - }, - "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json", - "logicalId": "authfitnesstracker6b0fc1196b0fc119" - }, - "lastPushTimeStamp": "2026-03-07T19:54:29.563Z", - "output": { - "UserPoolId": "us-east-1_u3DbKJdMj", - "AppClientIDWeb": "7rgr70g6grv2t7e4jstuq5uuqg", - "AppClientID": "7s3vppsutj69af1r91u7tm2a45", - "IdentityPoolId": "us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db", - "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_u3DbKJdMj", - "IdentityPoolName": "fitnesstracker6b0fc119_identitypool_6b0fc119__main", - "UserPoolName": "fitnesstracker6b0fc119_userpool_6b0fc119" - }, - "lastPushDirHash": "lc3D5NIx9SNJ9mopBb1jJJ/TKDU=" - } - }, - "function": { - "fitnesstracker6b0fc1196b0fc119PreSignup": { - "build": true, - "providerPlugin": "awscloudformation", - "service": "Lambda", - "lastBuildTimeStamp": "2026-03-07T19:46:55.655Z", - "lastBuildType": "PROD", - "lastPackageTimeStamp": "2026-03-07T19:46:55.711Z", - "distZipFilename": "fitnesstracker6b0fc1196b0fc119PreSignup-555a623867446f4a3843-build.zip", - "s3Bucket": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/fitnesstracker6b0fc1196b0fc119PreSignup-555a623867446f4a3843-build.zip" - }, - "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json", - "logicalId": "functionfitnesstracker6b0fc1196b0fc119PreSignup" - }, - "lastPushTimeStamp": "2026-03-07T19:54:29.563Z", - "output": { - "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstracker6b0fc1196b0fc119PreSignup-main", - "Region": "us-east-1", - "Arn": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker6b0fc1196b0fc119PreSignup-main", - "Name": "fitnesstracker6b0fc1196b0fc119PreSignup-main", - "LambdaExecutionRole": "fitnesstracker6b0fc1196b0fc119PreSignup-main" - }, - "lastPushDirHash": "8SU4c0dfVCbxO0PKaNCo7lKfaoY=" - }, - "lognutrition": { - "build": true, - "providerPlugin": "awscloudformation", - "service": "Lambda", - "dependsOn": [ { - "category": "api", - "resourceName": "fitnesstracker", "attributes": [ - "GraphQLAPIIdOutput" - ] - } - ], - "lastBuildTimeStamp": "2026-03-07T19:46:57.956Z", - "lastBuildType": "PROD", - "lastPackageTimeStamp": "2026-03-07T19:46:59.045Z", - "distZipFilename": "lognutrition-554b5263566866516c6c-build.zip", - "s3Bucket": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip" - }, - "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", - "logicalId": "functionlognutrition" - }, - "lastPushTimeStamp": "2026-03-07T19:54:29.563Z", - "output": { - "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRolee7dd41c6-main", - "Region": "us-east-1", - "Arn": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-main", - "Name": "lognutrition-main", - "LambdaExecutionRole": "fitnesstrackerLambdaRolee7dd41c6-main" - }, - "lastPushDirHash": "wKTLiPjpIe9DlqZKixAXXp4cLW8=" - }, - "admin": { - "build": true, - "providerPlugin": "awscloudformation", - "service": "Lambda", - "dependsOn": [ - { + "UserPoolId" + ], "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" + }, + { "attributes": [ - "UserPoolId" - ] + "AdminGroupRole" + ], + "category": "auth", + "resourceName": "userPoolGroups" } ], - "lastBuildTimeStamp": "2026-03-07T19:47:01.559Z", - "lastBuildType": "PROD", - "lastPackageTimeStamp": "2026-03-07T19:47:07.497Z", - "distZipFilename": "admin-536f797874787247392f-build.zip", - "s3Bucket": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/admin-536f797874787247392f-build.zip" + "providerPlugin": "awscloudformation", + "service": "API Gateway", + "output": { + "ApiName": "adminapi", + "RootUrl": "https://bbk7dedp01.execute-api.us-east-1.amazonaws.com/main", + "ApiId": "bbk7dedp01" }, + "lastPushTimeStamp": "2026-03-23T18:51:33.560Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", - "logicalId": "functionadmin" - }, - "lastPushTimeStamp": "2026-03-07T19:54:29.563Z", - "output": { - "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole8a95290d-main", - "Region": "us-east-1", - "Arn": "arn:aws:lambda:us-east-1:123456789012:function:admin-main", - "Name": "admin-main", - "LambdaExecutionRole": "fitnesstrackerLambdaRole8a95290d-main" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", + "logicalId": "apiadminapi" }, - "lastPushDirHash": "cEr9eDcTN7fah2H+l8m6/ULsUCc=" - } - }, - "api": { + "lastPushDirHash": "SI1snudM0j/SqX5HIasSB/7nF3k=" + }, "fitnesstracker": { - "service": "AppSync", - "providerPlugin": "awscloudformation", "dependsOn": [ { - "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119", "attributes": [ "UserPoolId" - ] + ], + "category": "auth", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" } ], "output": { "authConfig": { - "defaultAuthentication": { - "authenticationType": "AMAZON_COGNITO_USER_POOLS", - "userPoolConfig": { - "userPoolId": "authfitnesstracker6b0fc1196b0fc119" - } - }, "additionalAuthenticationProviders": [ { - "authenticationType": "API_KEY", "apiKeyConfig": { + "apiKeyExpirationDate": "2026-03-29T02:07:08.737Z", "apiKeyExpirationDays": 7, - "apiKeyExpirationDate": "2026-03-14T19:43:17.245Z", "description": "graphql" - } + }, + "authenticationType": "API_KEY" } - ] + ], + "defaultAuthentication": { + "authenticationType": "AMAZON_COGNITO_USER_POOLS", + "userPoolConfig": { + "userPoolId": "authfitnesstracker9ceb2e7c9ceb2e7c" + } + } }, - "GraphQLAPIIdOutput": "2aikutabnvbuhlzmh4mvkg3eji", - "GraphQLAPIEndpointOutput": "https://azg6sgrevzehjmrpkcghyncvci.appsync-api.us-east-1.amazonaws.com/graphql", - "GraphQLAPIKeyOutput": "da2-fakeapikey00000000000000" + "GraphQLAPIIdOutput": "4ebr7lx7bbhnpeo5dbtcvdajdm", + "GraphQLAPIEndpointOutput": "https://3oyjlwrrofhp7jlc37qna22jva.appsync-api.us-east-1.amazonaws.com/graphql", + "GraphQLAPIKeyOutput": "da2-2kuyxda27ncmpool2a2bjanloy" }, + "providerPlugin": "awscloudformation", + "service": "AppSync", + "lastPushTimeStamp": "2026-03-23T18:51:33.560Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/cloudformation-template.json", + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/cloudformation-template.json", "logicalId": "apifitnesstracker" }, - "lastPushTimeStamp": "2026-03-07T19:54:29.563Z", - "lastPushDirHash": "qJUjDfyKe7FhQAxzPRH3qHmn3UM=" + "lastPushDirHash": "sVImeaG/Q60+Vbb0gARPejjN99o=" }, "nutritionapi": { - "service": "API Gateway", - "providerPlugin": "awscloudformation", "dependsOn": [ { - "category": "function", - "resourceName": "lognutrition", "attributes": [ "Name", "Arn" - ] + ], + "category": "function", + "resourceName": "lognutrition" }, { - "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119", "attributes": [ "UserPoolId" - ] + ], + "category": "auth", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" }, { - "category": "auth", - "resourceName": "userPoolGroups", "attributes": [ "AdminGroupRole" - ] + ], + "category": "auth", + "resourceName": "userPoolGroups" } ], - "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", - "logicalId": "apinutritionapi" - }, - "lastPushTimeStamp": "2026-03-07T19:54:29.563Z", + "providerPlugin": "awscloudformation", + "service": "API Gateway", "output": { "ApiName": "nutritionapi", - "RootUrl": "https://6smuxn28tb.execute-api.us-east-1.amazonaws.com/main", - "ApiId": "6smuxn28tb" + "RootUrl": "https://ekto8iln0h.execute-api.us-east-1.amazonaws.com/main", + "ApiId": "ekto8iln0h" + }, + "lastPushTimeStamp": "2026-03-23T18:51:33.560Z", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", + "logicalId": "apinutritionapi" }, "lastPushDirHash": "5JwuGoxSHfV3nT5/dIukaklIOKI=" - }, - "adminapi": { - "service": "API Gateway", - "providerPlugin": "awscloudformation", + } + }, + "auth": { + "fitnesstracker9ceb2e7c9ceb2e7c": { + "customAuth": false, "dependsOn": [ { - "category": "function", - "resourceName": "admin", "attributes": [ - "Name", - "Arn" - ] + "Arn", + "Name" + ], + "category": "function", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "triggerProvider": "Cognito" + } + ], + "frontendAuthConfig": { + "mfaConfiguration": "OFF", + "mfaTypes": [ + "SMS" + ], + "passwordProtectionSettings": { + "passwordPolicyCharacters": [], + "passwordPolicyMinLength": 8 }, + "signupAttributes": [ + "EMAIL" + ], + "socialProviders": [], + "usernameAttributes": [], + "verificationMechanisms": [ + "EMAIL" + ] + }, + "providerPlugin": "awscloudformation", + "service": "Cognito", + "output": { + "UserPoolId": "us-east-1_LAwe5ZJrw", + "AppClientIDWeb": "4bk8odk8blrf65ptk2dffug25k", + "AppClientID": "12hkvqjabpisei771tiefdhs76", + "IdentityPoolId": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d", + "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_LAwe5ZJrw", + "IdentityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__main", + "UserPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c" + }, + "lastPushTimeStamp": "2026-03-23T18:51:33.560Z", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json", + "logicalId": "authfitnesstracker9ceb2e7c9ceb2e7c" + }, + "lastPushDirHash": "LHa1sE4caL7GAFx9RONHvmVgPVo=" + }, + "userPoolGroups": { + "dependsOn": [ { "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", "attributes": [ - "UserPoolId" + "UserPoolId", + "AppClientIDWeb", + "AppClientID", + "IdentityPoolId" ] - }, + } + ], + "providerPlugin": "awscloudformation", + "service": "Cognito-UserPool-Groups", + "output": { + "AdminGroupRole": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole" + }, + "lastPushTimeStamp": "2026-03-23T18:51:33.560Z", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "logicalId": "authuserPoolGroups" + }, + "lastPushDirHash": "5G4uAlMxN8rsFD1jyeLTya9ahFM=" + } + }, + "function": { + "admin": { + "build": true, + "dependsOn": [ { - "category": "auth", - "resourceName": "userPoolGroups", "attributes": [ - "AdminGroupRole" - ] + "UserPoolId" + ], + "category": "auth", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" } ], + "providerPlugin": "awscloudformation", + "service": "Lambda", + "output": { + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole64f55d16-main", + "Region": "us-east-1", + "Arn": "arn:aws:lambda:us-east-1:123456789012:function:admin-main", + "Name": "admin-main", + "LambdaExecutionRole": "fitnesstrackerLambdaRole64f55d16-main" + }, + "lastPushTimeStamp": "2026-03-23T18:51:33.560Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", - "logicalId": "apiadminapi" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", + "logicalId": "functionadmin" + }, + "s3Bucket": { + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/admin-765632787437744e386e-build.zip" + }, + "lastBuildTimeStamp": "2026-03-23T18:49:08.046Z", + "lastBuildType": "PROD", + "lastPackageTimeStamp": "2026-03-23T18:49:10.871Z", + "distZipFilename": "admin-765632787437744e386e-build.zip", + "lastPushDirHash": "slgY/GyKAD6Yg8mD7maeOXp9x1k=" + }, + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup": { + "build": true, + "providerPlugin": "awscloudformation", + "service": "Lambda", + "output": { + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main", + "Region": "us-east-1", + "Arn": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main", + "Name": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main", + "LambdaExecutionRole": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" }, - "lastPushTimeStamp": "2026-03-07T19:54:29.563Z", + "lastPushTimeStamp": "2026-03-23T18:51:33.560Z", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json", + "logicalId": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup" + }, + "s3Bucket": { + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip" + }, + "lastBuildTimeStamp": "2026-03-23T18:49:12.334Z", + "lastBuildType": "PROD", + "lastPackageTimeStamp": "2026-03-23T18:49:12.345Z", + "distZipFilename": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip", + "lastPushDirHash": "qol/s4yC6lAAoI+0jAPoRyuH394=" + }, + "lognutrition": { + "build": true, + "dependsOn": [ + { + "attributes": [ + "GraphQLAPIIdOutput" + ], + "category": "api", + "resourceName": "fitnesstracker" + } + ], + "providerPlugin": "awscloudformation", + "service": "Lambda", "output": { - "ApiName": "adminapi", - "RootUrl": "https://kh5xa5hayh.execute-api.us-east-1.amazonaws.com/main", - "ApiId": "kh5xa5hayh" + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole8dc6052c-main", + "Region": "us-east-1", + "Arn": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-main", + "Name": "lognutrition-main", + "LambdaExecutionRole": "fitnesstrackerLambdaRole8dc6052c-main" }, - "lastPushDirHash": "SI1snudM0j/SqX5HIasSB/7nF3k=" + "lastPushTimeStamp": "2026-03-23T18:51:33.560Z", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "logicalId": "functionlognutrition" + }, + "s3Bucket": { + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip" + }, + "lastBuildTimeStamp": "2026-03-23T18:49:13.048Z", + "lastBuildType": "PROD", + "lastPackageTimeStamp": "2026-03-23T18:49:13.590Z", + "distZipFilename": "lognutrition-554b5263566866516c6c-build.zip", + "lastPushDirHash": "cvWf4K5nJd9hIYUUzDbXROaTzek=" } } } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/adminapi/build/adminapi-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/adminapi/build/adminapi-cloudformation-template.json index 9a9f4cf8794..fe0413d381e 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/adminapi/build/adminapi-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/adminapi/build/adminapi-cloudformation-template.json @@ -1,10 +1,10 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-API Gateway\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "API Gateway Resource for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -104,7 +104,7 @@ "-", [ { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "AdminGroupRole" ] @@ -426,7 +426,7 @@ "Name": "adminapi" } }, - "adminapiDefault4XXResponseb1888203": { + "adminapiDefault4XXResponsec0c67e32": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -441,7 +441,7 @@ } } }, - "adminapiDefault5XXResponseb1888203": { + "adminapiDefault5XXResponsec0c67e32": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -456,7 +456,7 @@ } } }, - "DeploymentAPIGWadminapi62a7fdcd": { + "DeploymentAPIGWadminapia8449e95": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -474,8 +474,8 @@ } }, "DependsOn": [ - "adminapiDefault4XXResponseb1888203", - "adminapiDefault5XXResponseb1888203" + "adminapiDefault4XXResponsec0c67e32", + "adminapiDefault5XXResponsec0c67e32" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/cloudformation-template.json index 78e0d8c0c01..521e37ff3e1 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/cloudformation-template.json @@ -1,609 +1,608 @@ { - "Parameters": { - "env": { - "Type": "String", - "Default": "NONE" - }, - "AppSyncApiName": { - "Type": "String", - "Default": "AppSyncSimpleTransform" - }, - "AuthCognitoUserPoolId": { - "Type": "String" - }, - "DynamoDBModelTableReadIOPS": { - "Type": "Number", - "Default": 5, - "Description": "The number of read IOPS the table should support." - }, - "DynamoDBModelTableWriteIOPS": { - "Type": "Number", - "Default": 5, - "Description": "The number of write IOPS the table should support." - }, - "DynamoDBBillingMode": { - "Type": "String", - "Default": "PAY_PER_REQUEST", - "AllowedValues": [ - "PAY_PER_REQUEST", - "PROVISIONED" - ], - "Description": "Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes." - }, - "DynamoDBEnablePointInTimeRecovery": { - "Type": "String", - "Default": "false", - "AllowedValues": [ - "true", - "false" - ], - "Description": "Whether to enable Point in Time Recovery on the table." - }, - "DynamoDBEnableServerSideEncryption": { - "Type": "String", - "Default": "true", - "AllowedValues": [ - "true", - "false" - ], - "Description": "Enable server side encryption powered by KMS." - }, - "S3DeploymentBucket": { - "Type": "String", - "Description": "An S3 Bucket name where assets are deployed" - }, - "S3DeploymentRootKey": { - "Type": "String", - "Description": "An S3 key relative to the S3DeploymentBucket that points to the root of the deployment directory." - } - }, - "Resources": { - "GraphQLAPI": { - "Type": "AWS::AppSync::GraphQLApi", - "Properties": { - "AdditionalAuthenticationProviders": [ - { - "AuthenticationType": "API_KEY" - } - ], - "AuthenticationType": "AMAZON_COGNITO_USER_POOLS", - "Name": { - "Fn::Join": [ - "", - [ - { - "Ref": "AppSyncApiName" - }, - "-", - { - "Ref": "env" - } - ] - ] + "Parameters": { + "env": { + "Type": "String", + "Default": "NONE" }, - "UserPoolConfig": { - "AwsRegion": { - "Ref": "AWS::Region" - }, - "DefaultAction": "ALLOW", - "UserPoolId": { - "Ref": "AuthCognitoUserPoolId" - } - } - } - }, - "GraphQLAPITransformerSchema3CB2AE18": { - "Type": "AWS::AppSync::GraphQLSchema", - "Properties": { - "ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] + "AppSyncApiName": { + "Type": "String", + "Default": "AppSyncSimpleTransform" }, - "DefinitionS3Location": { - "Fn::Join": [ - "", - [ - "s3://", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/schema.graphql" - ] - ] - } - } - }, - "GraphQLAPIDefaultApiKey215A6DD7": { - "Type": "AWS::AppSync::ApiKey", - "Properties": { - "ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] + "AuthCognitoUserPoolId": { + "Type": "String" }, - "Description": "graphql", - "Expires": 1773517628 - } - }, - "GraphQLAPINONEDS95A13CF0": { - "Type": "AWS::AppSync::DataSource", - "Properties": { - "ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] + "DynamoDBModelTableReadIOPS": { + "Type": "Number", + "Default": 5, + "Description": "The number of read IOPS the table should support." }, - "Description": "None Data Source for Pipeline functions", - "Name": "NONE_DS", - "Type": "NONE" - } - }, - "WorkoutProgram": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "DynamoDBModelTableReadIOPS": { - "Ref": "DynamoDBModelTableReadIOPS" - }, - "DynamoDBModelTableWriteIOPS": { - "Ref": "DynamoDBModelTableWriteIOPS" - }, - "DynamoDBBillingMode": { - "Ref": "DynamoDBBillingMode" - }, - "DynamoDBEnablePointInTimeRecovery": { - "Ref": "DynamoDBEnablePointInTimeRecovery" - }, - "DynamoDBEnableServerSideEncryption": { - "Ref": "DynamoDBEnableServerSideEncryption" - }, - "referencetotransformerrootstackenv10C5A902Ref": { - "Ref": "env" - }, - "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { - "Fn::GetAtt": [ - "GraphQLAPINONEDS95A13CF0", - "Name" - ] - }, - "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { - "Ref": "S3DeploymentBucket" - }, - "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { - "Ref": "S3DeploymentRootKey" - } + "DynamoDBModelTableWriteIOPS": { + "Type": "Number", + "Default": 5, + "Description": "The number of write IOPS the table should support." }, - "TemplateURL": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/stacks/WorkoutProgram.json" - ] - ] - } - }, - "DependsOn": [ - "GraphQLAPITransformerSchema3CB2AE18" - ] - }, - "Exercise": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "DynamoDBModelTableReadIOPS": { - "Ref": "DynamoDBModelTableReadIOPS" - }, - "DynamoDBModelTableWriteIOPS": { - "Ref": "DynamoDBModelTableWriteIOPS" - }, - "DynamoDBBillingMode": { - "Ref": "DynamoDBBillingMode" - }, - "DynamoDBEnablePointInTimeRecovery": { - "Ref": "DynamoDBEnablePointInTimeRecovery" - }, - "DynamoDBEnableServerSideEncryption": { - "Ref": "DynamoDBEnableServerSideEncryption" - }, - "referencetotransformerrootstackenv10C5A902Ref": { - "Ref": "env" - }, - "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { - "Ref": "S3DeploymentBucket" - }, - "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { - "Ref": "S3DeploymentRootKey" - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId" - ] - }, - "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { - "Fn::GetAtt": [ - "GraphQLAPINONEDS95A13CF0", - "Name" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncF52D36F4F": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncFunction55BF88AFFunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId" - ] - } + "DynamoDBBillingMode": { + "Type": "String", + "Default": "PAY_PER_REQUEST", + "AllowedValues": [ + "PAY_PER_REQUEST", + "PROVISIONED" + ], + "Description": "Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes." }, - "TemplateURL": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/stacks/Exercise.json" - ] - ] - } - }, - "DependsOn": [ - "GraphQLAPITransformerSchema3CB2AE18" - ] - }, - "Meal": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "DynamoDBModelTableReadIOPS": { - "Ref": "DynamoDBModelTableReadIOPS" - }, - "DynamoDBModelTableWriteIOPS": { - "Ref": "DynamoDBModelTableWriteIOPS" - }, - "DynamoDBBillingMode": { - "Ref": "DynamoDBBillingMode" - }, - "DynamoDBEnablePointInTimeRecovery": { - "Ref": "DynamoDBEnablePointInTimeRecovery" - }, - "DynamoDBEnableServerSideEncryption": { - "Ref": "DynamoDBEnableServerSideEncryption" - }, - "referencetotransformerrootstackenv10C5A902Ref": { - "Ref": "env" - }, - "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { - "Fn::GetAtt": [ - "GraphQLAPINONEDS95A13CF0", - "Name" - ] - }, - "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { - "Ref": "S3DeploymentBucket" - }, - "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { - "Ref": "S3DeploymentRootKey" - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId" - ] - } + "DynamoDBEnablePointInTimeRecovery": { + "Type": "String", + "Default": "false", + "AllowedValues": [ + "true", + "false" + ], + "Description": "Whether to enable Point in Time Recovery on the table." }, - "TemplateURL": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/stacks/Meal.json" - ] - ] + "DynamoDBEnableServerSideEncryption": { + "Type": "String", + "Default": "true", + "AllowedValues": [ + "true", + "false" + ], + "Description": "Enable server side encryption powered by KMS." + }, + "S3DeploymentBucket": { + "Type": "String", + "Description": "An S3 Bucket name where assets are deployed" + }, + "S3DeploymentRootKey": { + "Type": "String", + "Description": "An S3 key relative to the S3DeploymentBucket that points to the root of the deployment directory." } - }, - "DependsOn": [ - "GraphQLAPITransformerSchema3CB2AE18" - ] }, - "ConnectionStack": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { - "Fn::GetAtt": [ - "GraphQLAPINONEDS95A13CF0", - "Name" - ] - }, - "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { - "Ref": "S3DeploymentBucket" - }, - "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { - "Ref": "S3DeploymentRootKey" - }, - "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseDataSourceE8B787D0Name": { - "Fn::GetAtt": [ - "Exercise", - "Outputs.transformerrootstackExerciseExerciseDataSourceE8B787D0Name" - ] - }, - "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseTable2F3E478ERef": { - "Fn::GetAtt": [ - "Exercise", - "Outputs.transformerrootstackExerciseExerciseTable2F3E478ERef" - ] - } + "Resources": { + "GraphQLAPI": { + "Type": "AWS::AppSync::GraphQLApi", + "Properties": { + "AdditionalAuthenticationProviders": [ + { + "AuthenticationType": "API_KEY" + } + ], + "AuthenticationType": "AMAZON_COGNITO_USER_POOLS", + "Name": { + "Fn::Join": [ + "", + [ + { + "Ref": "AppSyncApiName" + }, + "-", + { + "Ref": "env" + } + ] + ] + }, + "UserPoolConfig": { + "AwsRegion": { + "Ref": "AWS::Region" + }, + "DefaultAction": "ALLOW", + "UserPoolId": { + "Ref": "AuthCognitoUserPoolId" + } + } + } }, - "TemplateURL": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/stacks/ConnectionStack.json" + "GraphQLAPITransformerSchema3CB2AE18": { + "Type": "AWS::AppSync::GraphQLSchema", + "Properties": { + "ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "DefinitionS3Location": { + "Fn::Join": [ + "", + [ + "s3://", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/schema.graphql" + ] + ] + } + } + }, + "GraphQLAPIDefaultApiKey215A6DD7": { + "Type": "AWS::AppSync::ApiKey", + "Properties": { + "ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "Description": "graphql", + "Expires": 1774896554 + } + }, + "GraphQLAPINONEDS95A13CF0": { + "Type": "AWS::AppSync::DataSource", + "Properties": { + "ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "Description": "None Data Source for Pipeline functions", + "Name": "NONE_DS", + "Type": "NONE" + } + }, + "WorkoutProgram": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "DynamoDBModelTableReadIOPS": { + "Ref": "DynamoDBModelTableReadIOPS" + }, + "DynamoDBModelTableWriteIOPS": { + "Ref": "DynamoDBModelTableWriteIOPS" + }, + "DynamoDBBillingMode": { + "Ref": "DynamoDBBillingMode" + }, + "DynamoDBEnablePointInTimeRecovery": { + "Ref": "DynamoDBEnablePointInTimeRecovery" + }, + "DynamoDBEnableServerSideEncryption": { + "Ref": "DynamoDBEnableServerSideEncryption" + }, + "referencetotransformerrootstackenv10C5A902Ref": { + "Ref": "env" + }, + "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { + "Fn::GetAtt": [ + "GraphQLAPINONEDS95A13CF0", + "Name" + ] + }, + "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { + "Ref": "S3DeploymentBucket" + }, + "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { + "Ref": "S3DeploymentRootKey" + } + }, + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/stacks/WorkoutProgram.json" + ] + ] + } + }, + "DependsOn": [ + "GraphQLAPITransformerSchema3CB2AE18" ] - ] - } - }, - "DependsOn": [ - "Exercise", - "GraphQLAPITransformerSchema3CB2AE18" - ] - }, - "CustomResourcesjson": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "AppSyncApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" + }, + "Exercise": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "DynamoDBModelTableReadIOPS": { + "Ref": "DynamoDBModelTableReadIOPS" + }, + "DynamoDBModelTableWriteIOPS": { + "Ref": "DynamoDBModelTableWriteIOPS" + }, + "DynamoDBBillingMode": { + "Ref": "DynamoDBBillingMode" + }, + "DynamoDBEnablePointInTimeRecovery": { + "Ref": "DynamoDBEnablePointInTimeRecovery" + }, + "DynamoDBEnableServerSideEncryption": { + "Ref": "DynamoDBEnableServerSideEncryption" + }, + "referencetotransformerrootstackenv10C5A902Ref": { + "Ref": "env" + }, + "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { + "Ref": "S3DeploymentBucket" + }, + "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { + "Ref": "S3DeploymentRootKey" + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId" + ] + }, + "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { + "Fn::GetAtt": [ + "GraphQLAPINONEDS95A13CF0", + "Name" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncF52D36F4F": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncFunction55BF88AFFunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId" + ] + } + }, + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/stacks/Exercise.json" + ] + ] + } + }, + "DependsOn": [ + "GraphQLAPITransformerSchema3CB2AE18" ] - }, - "AppSyncApiName": { - "Ref": "AppSyncApiName" - }, - "env": { - "Ref": "env" - }, - "S3DeploymentBucket": { - "Ref": "S3DeploymentBucket" - }, - "S3DeploymentRootKey": { - "Ref": "S3DeploymentRootKey" - } }, - "TemplateURL": { - "Fn::Join": [ - "/", - [ - "https://s3.amazonaws.com", - { - "Ref": "S3DeploymentBucket" - }, - { - "Ref": "S3DeploymentRootKey" - }, - "stacks", - "CustomResources.json" + "Meal": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "DynamoDBModelTableReadIOPS": { + "Ref": "DynamoDBModelTableReadIOPS" + }, + "DynamoDBModelTableWriteIOPS": { + "Ref": "DynamoDBModelTableWriteIOPS" + }, + "DynamoDBBillingMode": { + "Ref": "DynamoDBBillingMode" + }, + "DynamoDBEnablePointInTimeRecovery": { + "Ref": "DynamoDBEnablePointInTimeRecovery" + }, + "DynamoDBEnableServerSideEncryption": { + "Ref": "DynamoDBEnableServerSideEncryption" + }, + "referencetotransformerrootstackenv10C5A902Ref": { + "Ref": "env" + }, + "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { + "Fn::GetAtt": [ + "GraphQLAPINONEDS95A13CF0", + "Name" + ] + }, + "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { + "Ref": "S3DeploymentBucket" + }, + "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { + "Ref": "S3DeploymentRootKey" + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId" + ] + } + }, + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/stacks/Meal.json" + ] + ] + } + }, + "DependsOn": [ + "GraphQLAPITransformerSchema3CB2AE18" ] - ] - } - }, - "DependsOn": [ - "GraphQLAPI", - "GraphQLAPITransformerSchema3CB2AE18", - "WorkoutProgram", - "Exercise", - "Meal", - "ConnectionStack" - ] - } - }, - "Outputs": { - "GraphQLAPIKeyOutput": { - "Description": "Your GraphQL API ID.", - "Value": { - "Fn::GetAtt": [ - "GraphQLAPIDefaultApiKey215A6DD7", - "ApiKey" - ] - }, - "Export": { - "Name": { - "Fn::Join": [ - ":", - [ - { - "Ref": "AWS::StackName" - }, - "GraphQLApiKey" + }, + "ConnectionStack": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { + "Fn::GetAtt": [ + "GraphQLAPINONEDS95A13CF0", + "Name" + ] + }, + "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { + "Ref": "S3DeploymentBucket" + }, + "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { + "Ref": "S3DeploymentRootKey" + }, + "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseDataSourceE8B787D0Name": { + "Fn::GetAtt": [ + "Exercise", + "Outputs.transformerrootstackExerciseExerciseDataSourceE8B787D0Name" + ] + }, + "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseTable2F3E478ERef": { + "Fn::GetAtt": [ + "Exercise", + "Outputs.transformerrootstackExerciseExerciseTable2F3E478ERef" + ] + } + }, + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/stacks/ConnectionStack.json" + ] + ] + } + }, + "DependsOn": [ + "Exercise", + "GraphQLAPITransformerSchema3CB2AE18" ] - ] - } - } - }, - "GraphQLAPIIdOutput": { - "Description": "Your GraphQL API ID.", - "Value": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "Export": { - "Name": { - "Fn::Join": [ - ":", - [ - { - "Ref": "AWS::StackName" - }, - "GraphQLApiId" + }, + "CustomResourcesjson": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "AppSyncApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "AppSyncApiName": { + "Ref": "AppSyncApiName" + }, + "env": { + "Ref": "env" + }, + "S3DeploymentBucket": { + "Ref": "S3DeploymentBucket" + }, + "S3DeploymentRootKey": { + "Ref": "S3DeploymentRootKey" + } + }, + "TemplateURL": { + "Fn::Join": [ + "/", + [ + "https://s3.amazonaws.com", + { + "Ref": "S3DeploymentBucket" + }, + { + "Ref": "S3DeploymentRootKey" + }, + "stacks", + "CustomResources.json" + ] + ] + } + }, + "DependsOn": [ + "GraphQLAPI", + "GraphQLAPITransformerSchema3CB2AE18", + "WorkoutProgram", + "Exercise", + "Meal", + "ConnectionStack" ] - ] } - } }, - "GraphQLAPIEndpointOutput": { - "Description": "Your GraphQL API endpoint.", - "Value": { - "Fn::GetAtt": [ - "GraphQLAPI", - "GraphQLUrl" - ] - }, - "Export": { - "Name": { - "Fn::Join": [ - ":", - [ - { - "Ref": "AWS::StackName" - }, - "GraphQLApiEndpoint" - ] - ] + "Outputs": { + "GraphQLAPIKeyOutput": { + "Description": "Your GraphQL API ID.", + "Value": { + "Fn::GetAtt": [ + "GraphQLAPIDefaultApiKey215A6DD7", + "ApiKey" + ] + }, + "Export": { + "Name": { + "Fn::Join": [ + ":", + [ + { + "Ref": "AWS::StackName" + }, + "GraphQLApiKey" + ] + ] + } + } + }, + "GraphQLAPIIdOutput": { + "Description": "Your GraphQL API ID.", + "Value": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "Export": { + "Name": { + "Fn::Join": [ + ":", + [ + { + "Ref": "AWS::StackName" + }, + "GraphQLApiId" + ] + ] + } + } + }, + "GraphQLAPIEndpointOutput": { + "Description": "Your GraphQL API endpoint.", + "Value": { + "Fn::GetAtt": [ + "GraphQLAPI", + "GraphQLUrl" + ] + }, + "Export": { + "Name": { + "Fn::Join": [ + ":", + [ + { + "Ref": "AWS::StackName" + }, + "GraphQLApiEndpoint" + ] + ] + } + } } - } } - }, - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-AppSync\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/parameters.json index 3cd47253316..8cb3b427185 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/parameters.json @@ -4,10 +4,10 @@ "DynamoDBEnableServerSideEncryption": false, "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, - "S3DeploymentBucket": "amplify-fitnesstracker-main-0683c-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/96fdcde6a80859ead18d697e115cb9bd809fa98a" + "S3DeploymentBucket": "amplify-fitnesstracker-main-6fc9a-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa" } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/ConnectionStack.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/ConnectionStack.json index 37b698b468d..a407b2cb80e 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/ConnectionStack.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/ConnectionStack.json @@ -111,7 +111,7 @@ { "Ref": "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseTable2F3E478ERef" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/Exercise.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/Exercise.json index cc800da40df..a9eeaa78710 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/Exercise.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/Exercise.json @@ -503,7 +503,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -598,7 +598,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -729,7 +729,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -881,7 +881,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1030,7 +1030,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1067,7 +1067,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1104,7 +1104,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1141,7 +1141,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1172,7 +1172,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/Meal.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/Meal.json index ee4ac331787..1f6a60f3fb6 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/Meal.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/Meal.json @@ -482,7 +482,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -580,7 +580,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -711,7 +711,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -863,7 +863,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1012,7 +1012,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1082,7 +1082,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1122,7 +1122,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1162,7 +1162,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/WorkoutProgram.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/WorkoutProgram.json index 8d494295f5d..d65c9f90968 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/WorkoutProgram.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/WorkoutProgram.json @@ -503,7 +503,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -604,7 +604,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -771,7 +771,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -959,7 +959,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1111,7 +1111,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1232,7 +1232,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1278,7 +1278,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1324,7 +1324,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1403,7 +1403,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/cli-inputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/cli-inputs.json index 3dee4f09639..06b33fdf9b2 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/cli-inputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/cli-inputs.json @@ -5,13 +5,13 @@ "serviceName": "AppSync", "defaultAuthType": { "mode": "AMAZON_COGNITO_USER_POOLS", - "cognitoUserPoolId": "authfitnesstracker6b0fc1196b0fc119" + "cognitoUserPoolId": "authfitnesstracker9ceb2e7c9ceb2e7c" }, "additionalAuthTypes": [ { "mode": "API_KEY", "expirationTime": 7, - "apiKeyExpirationDate": "2026-03-14T19:43:17.245Z", + "apiKeyExpirationDate": "2026-03-29T02:07:08.737Z", "keyDescription": "graphql" } ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/parameters.json index e0d654b084c..dd8ecd65ac8 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/parameters.json @@ -4,7 +4,7 @@ "DynamoDBEnableServerSideEncryption": false, "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/nutritionapi/build/nutritionapi-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/nutritionapi/build/nutritionapi-cloudformation-template.json index ab25d629b86..1c507689fc5 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/nutritionapi/build/nutritionapi-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/nutritionapi/build/nutritionapi-cloudformation-template.json @@ -1,10 +1,10 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-API Gateway\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "API Gateway Resource for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -344,7 +344,7 @@ "-", [ { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "AdminGroupRole" ] @@ -666,7 +666,7 @@ "Name": "nutritionapi" } }, - "nutritionapiDefault4XXResponse7a61ed16": { + "nutritionapiDefault4XXResponse59a22bc9": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -681,7 +681,7 @@ } } }, - "nutritionapiDefault5XXResponse7a61ed16": { + "nutritionapiDefault5XXResponse59a22bc9": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -696,7 +696,7 @@ } } }, - "DeploymentAPIGWnutritionapi3a6bc816": { + "DeploymentAPIGWnutritionapifc67c40b": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -714,8 +714,8 @@ } }, "DependsOn": [ - "nutritionapiDefault4XXResponse7a61ed16", - "nutritionapiDefault5XXResponse7a61ed16" + "nutritionapiDefault4XXResponse59a22bc9", + "nutritionapiDefault5XXResponse59a22bc9" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker6b0fc1196b0fc119/build/auth-trigger-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/auth-trigger-cloudformation-template.json similarity index 94% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker6b0fc1196b0fc119/build/auth-trigger-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/auth-trigger-cloudformation-template.json index 549c2c6d721..3123ddd2a0b 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker6b0fc1196b0fc119/build/auth-trigger-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/auth-trigger-cloudformation-template.json @@ -11,13 +11,13 @@ "userpoolArn": { "Type": "String" }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupName": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { "Type": "String" }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupArn": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { "Type": "String" }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupLambdaExecutionRole": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole": { "Type": "String" } }, @@ -37,7 +37,7 @@ "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "functionfitnesstracker6b0fc1196b0fc119PreSignupName" + "Ref": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" }, "Principal": "cognito-idp.amazonaws.com", "SourceArn": { @@ -137,13 +137,13 @@ "lambdaConfig": [ { "triggerType": "PreSignUp", - "lambdaFunctionName": "fitnesstracker6b0fc1196b0fc119PreSignup", + "lambdaFunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "lambdaFunctionArn": { - "Ref": "functionfitnesstracker6b0fc1196b0fc119PreSignupArn" + "Ref": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" } } ], - "nonce": "bd98400d-2d3c-435d-9a07-d071be38ca5f" + "nonce": "582f2307-255c-4c76-8d0e-f9ee3bd19136" }, "DependsOn": [ "authTriggerFn7FCFA449", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker6b0fc1196b0fc119/build/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json similarity index 93% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker6b0fc1196b0fc119/build/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json index 6fd7a4879cc..79def9e5efb 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker6b0fc1196b0fc119/build/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json @@ -1,17 +1,17 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "Amplify Cognito Stack for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { "Type": "String" }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupArn": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { "Type": "String", - "Default": "functionfitnesstracker6b0fc1196b0fc119PreSignupArn" + "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupName": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { "Type": "String", - "Default": "functionfitnesstracker6b0fc1196b0fc119PreSignupName" + "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" }, "identityPoolName": { "Type": "String" @@ -216,7 +216,7 @@ "UserPoolClientWeb": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes6b0fc119_app_clientWeb", + "ClientName": "fitnes9ceb2e7c_app_clientWeb", "RefreshTokenValidity": { "Ref": "userpoolClientRefreshTokenValidity" }, @@ -234,7 +234,7 @@ "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes6b0fc119_app_client", + "ClientName": "fitnes9ceb2e7c_app_client", "GenerateSecret": { "Ref": "userpoolClientGenerateSecret" }, @@ -277,7 +277,7 @@ "Fn::Join": [ "", [ - "upClientLambdaRole6b0fc119", + "upClientLambdaRole9ceb2e7c", { "Fn::Select": [ 3, @@ -349,12 +349,12 @@ "IdentityPoolName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker6b0fc119_identitypool_6b0fc119", + "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", { "Fn::Join": [ "", [ - "fitnesstracker6b0fc119_identitypool_6b0fc119__", + "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", { "Ref": "env" } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker6b0fc1196b0fc119/build/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/parameters.json similarity index 77% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker6b0fc1196b0fc119/build/parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/parameters.json index 95f8a8d6700..b80b3f56b64 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker6b0fc1196b0fc119/build/parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/parameters.json @@ -1,8 +1,8 @@ { - "identityPoolName": "fitnesstracker6b0fc119_identitypool_6b0fc119", + "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes6b0fc119", - "userPoolName": "fitnesstracker6b0fc119_userpool_6b0fc119", + "resourceNameTruncated": "fitnes9ceb2e7c", + "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", "autoVerifiedAttributes": [ "email" ], @@ -22,17 +22,17 @@ ], "aliasAttributes": [], "userpoolClientGenerateSecret": false, - "userpoolClientRefreshTokenValidity": "30", + "userpoolClientRefreshTokenValidity": 30, "userpoolClientWriteAttributes": [ "email" ], "userpoolClientReadAttributes": [ "email" ], - "userpoolClientLambdaRole": "fitnes6b0fc119_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "6b0fc119", - "resourceName": "fitnesstracker6b0fc1196b0fc119", + "sharedId": "9ceb2e7c", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -62,7 +62,7 @@ "dependsOn": [ { "category": "function", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "triggerProvider": "Cognito", "attributes": [ "Arn", @@ -72,6 +72,6 @@ ], "permissions": [], "authTriggerConnections": [ - "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker6b0fc1196b0fc119PreSignup\"}" + "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}" ] } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker6b0fc1196b0fc119/cli-inputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/cli-inputs.json similarity index 77% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker6b0fc1196b0fc119/cli-inputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/cli-inputs.json index 016e071a17a..81dda741522 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker6b0fc1196b0fc119/cli-inputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/cli-inputs.json @@ -1,10 +1,10 @@ { "version": "1", "cognitoConfig": { - "identityPoolName": "fitnesstracker6b0fc119_identitypool_6b0fc119", + "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes6b0fc119", - "userPoolName": "fitnesstracker6b0fc119_userpool_6b0fc119", + "resourceNameTruncated": "fitnes9ceb2e7c", + "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", "autoVerifiedAttributes": [ "email" ], @@ -24,17 +24,17 @@ ], "aliasAttributes": [], "userpoolClientGenerateSecret": false, - "userpoolClientRefreshTokenValidity": "30", + "userpoolClientRefreshTokenValidity": 30, "userpoolClientWriteAttributes": [ "email" ], "userpoolClientReadAttributes": [ "email" ], - "userpoolClientLambdaRole": "fitnes6b0fc119_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "6b0fc119", - "resourceName": "fitnesstracker6b0fc1196b0fc119", + "sharedId": "9ceb2e7c", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json index 0741b0ac99f..12c7040bd48 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json @@ -1,5 +1,5 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito-UserPool-Groups\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "Root Stack for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { @@ -11,21 +11,21 @@ "UnauthRoleArn": { "Type": "String" }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, - "authfitnesstracker6b0fc1196b0fc119IdentityPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119IdentityPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" }, - "authfitnesstracker6b0fc1196b0fc119AppClientID": { + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119AppClientID" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID" }, - "authfitnesstracker6b0fc1196b0fc119AppClientIDWeb": { + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119AppClientIDWeb" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb" } }, "Conditions": { @@ -52,7 +52,7 @@ ] }, "UserPoolId": { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } } }, @@ -72,7 +72,7 @@ "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": { - "Ref": "authfitnesstracker6b0fc1196b0fc119IdentityPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" } }, "ForAnyValue:StringLike": { @@ -87,7 +87,7 @@ "", [ { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "-AdminGroupRole" ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/adminapi/build/adminapi-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/adminapi/build/adminapi-cloudformation-template.json index 9a9f4cf8794..fe0413d381e 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/adminapi/build/adminapi-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/adminapi/build/adminapi-cloudformation-template.json @@ -1,10 +1,10 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-API Gateway\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "API Gateway Resource for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -104,7 +104,7 @@ "-", [ { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "AdminGroupRole" ] @@ -426,7 +426,7 @@ "Name": "adminapi" } }, - "adminapiDefault4XXResponseb1888203": { + "adminapiDefault4XXResponsec0c67e32": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -441,7 +441,7 @@ } } }, - "adminapiDefault5XXResponseb1888203": { + "adminapiDefault5XXResponsec0c67e32": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -456,7 +456,7 @@ } } }, - "DeploymentAPIGWadminapi62a7fdcd": { + "DeploymentAPIGWadminapia8449e95": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -474,8 +474,8 @@ } }, "DependsOn": [ - "adminapiDefault4XXResponseb1888203", - "adminapiDefault5XXResponseb1888203" + "adminapiDefault4XXResponsec0c67e32", + "adminapiDefault5XXResponsec0c67e32" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/fitnesstracker/build/cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/fitnesstracker/build/cloudformation-template.json index 78e0d8c0c01..651f9ceb637 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/fitnesstracker/build/cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/fitnesstracker/build/cloudformation-template.json @@ -129,7 +129,7 @@ ] }, "Description": "graphql", - "Expires": 1773517628 + "Expires": 1774896554 } }, "GraphQLAPINONEDS95A13CF0": { @@ -604,6 +604,5 @@ } } } - }, - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-AppSync\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" + } } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/nutritionapi/build/nutritionapi-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/nutritionapi/build/nutritionapi-cloudformation-template.json index ab25d629b86..1c507689fc5 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/nutritionapi/build/nutritionapi-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/nutritionapi/build/nutritionapi-cloudformation-template.json @@ -1,10 +1,10 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-API Gateway\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "API Gateway Resource for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -344,7 +344,7 @@ "-", [ { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "AdminGroupRole" ] @@ -666,7 +666,7 @@ "Name": "nutritionapi" } }, - "nutritionapiDefault4XXResponse7a61ed16": { + "nutritionapiDefault4XXResponse59a22bc9": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -681,7 +681,7 @@ } } }, - "nutritionapiDefault5XXResponse7a61ed16": { + "nutritionapiDefault5XXResponse59a22bc9": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -696,7 +696,7 @@ } } }, - "DeploymentAPIGWnutritionapi3a6bc816": { + "DeploymentAPIGWnutritionapifc67c40b": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -714,8 +714,8 @@ } }, "DependsOn": [ - "nutritionapiDefault4XXResponse7a61ed16", - "nutritionapiDefault5XXResponse7a61ed16" + "nutritionapiDefault4XXResponse59a22bc9", + "nutritionapiDefault5XXResponse59a22bc9" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker6b0fc1196b0fc119/build/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json similarity index 93% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker6b0fc1196b0fc119/build/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json index 6fd7a4879cc..79def9e5efb 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker6b0fc1196b0fc119/build/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json @@ -1,17 +1,17 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "Amplify Cognito Stack for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { "Type": "String" }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupArn": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { "Type": "String", - "Default": "functionfitnesstracker6b0fc1196b0fc119PreSignupArn" + "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupName": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { "Type": "String", - "Default": "functionfitnesstracker6b0fc1196b0fc119PreSignupName" + "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" }, "identityPoolName": { "Type": "String" @@ -216,7 +216,7 @@ "UserPoolClientWeb": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes6b0fc119_app_clientWeb", + "ClientName": "fitnes9ceb2e7c_app_clientWeb", "RefreshTokenValidity": { "Ref": "userpoolClientRefreshTokenValidity" }, @@ -234,7 +234,7 @@ "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes6b0fc119_app_client", + "ClientName": "fitnes9ceb2e7c_app_client", "GenerateSecret": { "Ref": "userpoolClientGenerateSecret" }, @@ -277,7 +277,7 @@ "Fn::Join": [ "", [ - "upClientLambdaRole6b0fc119", + "upClientLambdaRole9ceb2e7c", { "Fn::Select": [ 3, @@ -349,12 +349,12 @@ "IdentityPoolName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker6b0fc119_identitypool_6b0fc119", + "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", { "Fn::Join": [ "", [ - "fitnesstracker6b0fc119_identitypool_6b0fc119__", + "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", { "Ref": "env" } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json index 0741b0ac99f..12c7040bd48 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json @@ -1,5 +1,5 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito-UserPool-Groups\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "Root Stack for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { @@ -11,21 +11,21 @@ "UnauthRoleArn": { "Type": "String" }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, - "authfitnesstracker6b0fc1196b0fc119IdentityPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119IdentityPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" }, - "authfitnesstracker6b0fc1196b0fc119AppClientID": { + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119AppClientID" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID" }, - "authfitnesstracker6b0fc1196b0fc119AppClientIDWeb": { + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119AppClientIDWeb" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb" } }, "Conditions": { @@ -52,7 +52,7 @@ ] }, "UserPoolId": { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } } }, @@ -72,7 +72,7 @@ "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": { - "Ref": "authfitnesstracker6b0fc1196b0fc119IdentityPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" } }, "ForAnyValue:StringLike": { @@ -87,7 +87,7 @@ "", [ { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "-AdminGroupRole" ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json index 7732e28d356..5345516d4d9 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json @@ -202,7 +202,7 @@ "APIGatewayAuthStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", "Parameters": { "authRoleName": { "Ref": "AuthRoleName" @@ -211,15 +211,15 @@ "Ref": "UnauthRoleName" }, "env": "main", - "nutritionapi": { + "adminapi": { "Fn::GetAtt": [ - "apinutritionapi", + "apiadminapi", "Outputs.ApiId" ] }, - "adminapi": { + "nutritionapi": { "Fn::GetAtt": [ - "apiadminapi", + "apinutritionapi", "Outputs.ApiId" ] } @@ -229,100 +229,141 @@ "AuthTriggerCustomLambdaStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", "Parameters": { "env": "main", "userpoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, "userpoolArn": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolArn" ] }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupLambdaExecutionRole": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole": { "Fn::GetAtt": [ - "functionfitnesstracker6b0fc1196b0fc119PreSignup", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", "Outputs.LambdaExecutionRoleArn" ] }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupArn": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { "Fn::GetAtt": [ - "functionfitnesstracker6b0fc1196b0fc119PreSignup", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", "Outputs.Arn" ] }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupName": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { "Fn::GetAtt": [ - "functionfitnesstracker6b0fc1196b0fc119PreSignup", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", "Outputs.Name" ] } } }, "DependsOn": [ - "authfitnesstracker6b0fc1196b0fc119", - "functionfitnesstracker6b0fc1196b0fc119PreSignup" + "authfitnesstracker9ceb2e7c9ceb2e7c", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup" ] }, - "authuserPoolGroups": { + "apiadminapi": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", "Parameters": { - "AuthRoleArn": { + "functionadminName": { "Fn::GetAtt": [ - "AuthRole", - "Arn" + "functionadmin", + "Outputs.Name" ] }, - "UnauthRoleArn": { + "functionadminArn": { "Fn::GetAtt": [ - "UnauthRole", - "Arn" + "functionadmin", + "Outputs.Arn" ] }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, - "authfitnesstracker6b0fc1196b0fc119AppClientIDWeb": { + "authuserPoolGroupsAdminGroupRole": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.AppClientIDWeb" + "authuserPoolGroups", + "Outputs.AdminGroupRole" ] }, - "authfitnesstracker6b0fc1196b0fc119AppClientID": { + "env": "main" + } + } + }, + "apifitnesstracker": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/cloudformation-template.json", + "Parameters": { + "AppSyncApiName": "fitnesstracker", + "DynamoDBBillingMode": "PAY_PER_REQUEST", + "DynamoDBEnableServerSideEncryption": false, + "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.AppClientID" + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.UserPoolId" + ] + }, + "S3DeploymentBucket": "amplify-fitnesstracker-main-6fc9a-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa", + "env": "main" + } + } + }, + "apinutritionapi": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", + "Parameters": { + "functionlognutritionName": { + "Fn::GetAtt": [ + "functionlognutrition", + "Outputs.Name" ] }, - "authfitnesstracker6b0fc1196b0fc119IdentityPoolId": { + "functionlognutritionArn": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.IdentityPoolId" + "functionlognutrition", + "Outputs.Arn" + ] + }, + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.AdminGroupRole" ] }, "env": "main" } } }, - "authfitnesstracker6b0fc1196b0fc119": { + "authfitnesstracker9ceb2e7c9ceb2e7c": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json", "Parameters": { - "identityPoolName": "fitnesstracker6b0fc119_identitypool_6b0fc119", + "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes6b0fc119", - "userPoolName": "fitnesstracker6b0fc119_userpool_6b0fc119", + "resourceNameTruncated": "fitnes9ceb2e7c", + "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", "autoVerifiedAttributes": "email", "mfaConfiguration": "OFF", "mfaTypes": "SMS Text Message", @@ -336,13 +377,13 @@ "requiredAttributes": "email", "aliasAttributes": "", "userpoolClientGenerateSecret": false, - "userpoolClientRefreshTokenValidity": "30", + "userpoolClientRefreshTokenValidity": 30, "userpoolClientWriteAttributes": "email", "userpoolClientReadAttributes": "email", - "userpoolClientLambdaRole": "fitnes6b0fc119_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "6b0fc119", - "resourceName": "fitnesstracker6b0fc1196b0fc119", + "sharedId": "9ceb2e7c", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -369,139 +410,98 @@ "breakCircularDependency": true, "dependsOn": "[object Object]", "permissions": "", - "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker6b0fc1196b0fc119PreSignup\"}", + "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}", "env": "main" } } }, - "functionfitnesstracker6b0fc1196b0fc119PreSignup": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json", - "Parameters": { - "modules": "email-filter-allowlist", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup", - "DOMAINALLOWLIST": "amazon.com", - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/fitnesstracker6b0fc1196b0fc119PreSignup-555a623867446f4a3843-build.zip", - "env": "main" - } - } - }, - "functionlognutrition": { + "authuserPoolGroups": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", - "apifitnesstrackerGraphQLAPIIdOutput": { + "AuthRoleArn": { "Fn::GetAtt": [ - "apifitnesstracker", - "Outputs.GraphQLAPIIdOutput" + "AuthRole", + "Arn" ] }, - "env": "main" - } - } - }, - "functionadmin": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", - "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/admin-536f797874787247392f-build.zip", - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "UnauthRoleArn": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "UnauthRole", + "Arn" + ] + }, + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.AppClientIDWeb" + ] + }, + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.AppClientID" + ] + }, + "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.IdentityPoolId" + ] + }, "env": "main" } } }, - "apifitnesstracker": { + "functionadmin": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", "Parameters": { - "AppSyncApiName": "fitnesstracker", - "DynamoDBBillingMode": "PAY_PER_REQUEST", - "DynamoDBEnableServerSideEncryption": false, - "AuthCognitoUserPoolId": { + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/admin-765632787437744e386e-build.zip", + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, - "S3DeploymentBucket": "amplify-fitnesstracker-main-0683c-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/96fdcde6a80859ead18d697e115cb9bd809fa98a", "env": "main" } } }, - "apinutritionapi": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json", "Parameters": { - "functionlognutritionName": { - "Fn::GetAtt": [ - "functionlognutrition", - "Outputs.Name" - ] - }, - "functionlognutritionArn": { - "Fn::GetAtt": [ - "functionlognutrition", - "Outputs.Arn" - ] - }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { - "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.UserPoolId" - ] - }, - "authuserPoolGroupsAdminGroupRole": { - "Fn::GetAtt": [ - "authuserPoolGroups", - "Outputs.AdminGroupRole" - ] - }, + "modules": "email-filter-allowlist", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "DOMAINALLOWLIST": "amazon.com", + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip", "env": "main" } } }, - "apiadminapi": { + "functionlognutrition": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", "Parameters": { - "functionadminName": { - "Fn::GetAtt": [ - "functionadmin", - "Outputs.Name" - ] - }, - "functionadminArn": { - "Fn::GetAtt": [ - "functionadmin", - "Outputs.Arn" - ] - }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { - "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.UserPoolId" - ] - }, - "authuserPoolGroupsAdminGroupRole": { + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", + "apifitnesstrackerGraphQLAPIIdOutput": { "Fn::GetAtt": [ - "authuserPoolGroups", - "Outputs.AdminGroupRole" + "apifitnesstracker", + "Outputs.GraphQLAPIIdOutput" ] }, "env": "main" @@ -512,7 +512,7 @@ "DependsOn": [ "AuthRole", "UnauthRole", - "authfitnesstracker6b0fc1196b0fc119" + "authfitnesstracker9ceb2e7c9ceb2e7c" ], "Type": "AWS::Lambda::Function", "Properties": { @@ -622,7 +622,7 @@ }, "idpId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.IdentityPoolId" ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/admin/admin-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/admin/admin-cloudformation-template.json index 2dbe7e47d6b..aaa8618655d 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/admin/admin-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/admin/admin-cloudformation-template.json @@ -16,9 +16,9 @@ "s3Key": { "Type": "String" }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } }, "Conditions": { @@ -74,8 +74,8 @@ "REGION": { "Ref": "AWS::Region" }, - "AUTH_FITNESSTRACKER6B0FC1196B0FC119_USERPOOLID": { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": { + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } } }, @@ -96,12 +96,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRole8a95290d", + "fitnesstrackerLambdaRole64f55d16", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRole8a95290d", + "fitnesstrackerLambdaRole64f55d16", "-", { "Ref": "env" @@ -220,7 +220,7 @@ }, ":userpool/", { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } ] ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/fitnesstracker6b0fc1196b0fc119PreSignup/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json similarity index 95% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/fitnesstracker6b0fc1196b0fc119PreSignup/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json index c0cf3b931f5..04a3c261a89 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/fitnesstracker6b0fc1196b0fc119PreSignup/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json @@ -71,12 +71,12 @@ "FunctionName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker6b0fc1196b0fc119PreSignup", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", { "Fn::Join": [ "", [ - "fitnesstracker6b0fc1196b0fc119PreSignup", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "-", { "Ref": "env" @@ -129,12 +129,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker6b0fc1196b0fc119PreSignup", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", { "Fn::Join": [ "", [ - "fitnesstracker6b0fc1196b0fc119PreSignup", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/lognutrition/lognutrition-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/lognutrition/lognutrition-cloudformation-template.json index fd10c7f0ba5..e1789ef2c20 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/lognutrition/lognutrition-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/lognutrition/lognutrition-cloudformation-template.json @@ -122,12 +122,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRolee7dd41c6", + "fitnesstrackerLambdaRole8dc6052c", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRolee7dd41c6", + "fitnesstrackerLambdaRole8dc6052c", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/root-cloudformation-stack.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/root-cloudformation-stack.json index 7732e28d356..5345516d4d9 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/root-cloudformation-stack.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/root-cloudformation-stack.json @@ -202,7 +202,7 @@ "APIGatewayAuthStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", "Parameters": { "authRoleName": { "Ref": "AuthRoleName" @@ -211,15 +211,15 @@ "Ref": "UnauthRoleName" }, "env": "main", - "nutritionapi": { + "adminapi": { "Fn::GetAtt": [ - "apinutritionapi", + "apiadminapi", "Outputs.ApiId" ] }, - "adminapi": { + "nutritionapi": { "Fn::GetAtt": [ - "apiadminapi", + "apinutritionapi", "Outputs.ApiId" ] } @@ -229,100 +229,141 @@ "AuthTriggerCustomLambdaStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", "Parameters": { "env": "main", "userpoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, "userpoolArn": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolArn" ] }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupLambdaExecutionRole": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole": { "Fn::GetAtt": [ - "functionfitnesstracker6b0fc1196b0fc119PreSignup", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", "Outputs.LambdaExecutionRoleArn" ] }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupArn": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { "Fn::GetAtt": [ - "functionfitnesstracker6b0fc1196b0fc119PreSignup", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", "Outputs.Arn" ] }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupName": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { "Fn::GetAtt": [ - "functionfitnesstracker6b0fc1196b0fc119PreSignup", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", "Outputs.Name" ] } } }, "DependsOn": [ - "authfitnesstracker6b0fc1196b0fc119", - "functionfitnesstracker6b0fc1196b0fc119PreSignup" + "authfitnesstracker9ceb2e7c9ceb2e7c", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup" ] }, - "authuserPoolGroups": { + "apiadminapi": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", "Parameters": { - "AuthRoleArn": { + "functionadminName": { "Fn::GetAtt": [ - "AuthRole", - "Arn" + "functionadmin", + "Outputs.Name" ] }, - "UnauthRoleArn": { + "functionadminArn": { "Fn::GetAtt": [ - "UnauthRole", - "Arn" + "functionadmin", + "Outputs.Arn" ] }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, - "authfitnesstracker6b0fc1196b0fc119AppClientIDWeb": { + "authuserPoolGroupsAdminGroupRole": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.AppClientIDWeb" + "authuserPoolGroups", + "Outputs.AdminGroupRole" ] }, - "authfitnesstracker6b0fc1196b0fc119AppClientID": { + "env": "main" + } + } + }, + "apifitnesstracker": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/cloudformation-template.json", + "Parameters": { + "AppSyncApiName": "fitnesstracker", + "DynamoDBBillingMode": "PAY_PER_REQUEST", + "DynamoDBEnableServerSideEncryption": false, + "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.AppClientID" + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.UserPoolId" + ] + }, + "S3DeploymentBucket": "amplify-fitnesstracker-main-6fc9a-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa", + "env": "main" + } + } + }, + "apinutritionapi": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", + "Parameters": { + "functionlognutritionName": { + "Fn::GetAtt": [ + "functionlognutrition", + "Outputs.Name" ] }, - "authfitnesstracker6b0fc1196b0fc119IdentityPoolId": { + "functionlognutritionArn": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.IdentityPoolId" + "functionlognutrition", + "Outputs.Arn" + ] + }, + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.AdminGroupRole" ] }, "env": "main" } } }, - "authfitnesstracker6b0fc1196b0fc119": { + "authfitnesstracker9ceb2e7c9ceb2e7c": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json", "Parameters": { - "identityPoolName": "fitnesstracker6b0fc119_identitypool_6b0fc119", + "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes6b0fc119", - "userPoolName": "fitnesstracker6b0fc119_userpool_6b0fc119", + "resourceNameTruncated": "fitnes9ceb2e7c", + "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", "autoVerifiedAttributes": "email", "mfaConfiguration": "OFF", "mfaTypes": "SMS Text Message", @@ -336,13 +377,13 @@ "requiredAttributes": "email", "aliasAttributes": "", "userpoolClientGenerateSecret": false, - "userpoolClientRefreshTokenValidity": "30", + "userpoolClientRefreshTokenValidity": 30, "userpoolClientWriteAttributes": "email", "userpoolClientReadAttributes": "email", - "userpoolClientLambdaRole": "fitnes6b0fc119_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "6b0fc119", - "resourceName": "fitnesstracker6b0fc1196b0fc119", + "sharedId": "9ceb2e7c", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -369,139 +410,98 @@ "breakCircularDependency": true, "dependsOn": "[object Object]", "permissions": "", - "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker6b0fc1196b0fc119PreSignup\"}", + "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}", "env": "main" } } }, - "functionfitnesstracker6b0fc1196b0fc119PreSignup": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json", - "Parameters": { - "modules": "email-filter-allowlist", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup", - "DOMAINALLOWLIST": "amazon.com", - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/fitnesstracker6b0fc1196b0fc119PreSignup-555a623867446f4a3843-build.zip", - "env": "main" - } - } - }, - "functionlognutrition": { + "authuserPoolGroups": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", - "apifitnesstrackerGraphQLAPIIdOutput": { + "AuthRoleArn": { "Fn::GetAtt": [ - "apifitnesstracker", - "Outputs.GraphQLAPIIdOutput" + "AuthRole", + "Arn" ] }, - "env": "main" - } - } - }, - "functionadmin": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", - "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/admin-536f797874787247392f-build.zip", - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "UnauthRoleArn": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "UnauthRole", + "Arn" + ] + }, + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.AppClientIDWeb" + ] + }, + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.AppClientID" + ] + }, + "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.IdentityPoolId" + ] + }, "env": "main" } } }, - "apifitnesstracker": { + "functionadmin": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", "Parameters": { - "AppSyncApiName": "fitnesstracker", - "DynamoDBBillingMode": "PAY_PER_REQUEST", - "DynamoDBEnableServerSideEncryption": false, - "AuthCognitoUserPoolId": { + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/admin-765632787437744e386e-build.zip", + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, - "S3DeploymentBucket": "amplify-fitnesstracker-main-0683c-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/96fdcde6a80859ead18d697e115cb9bd809fa98a", "env": "main" } } }, - "apinutritionapi": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json", "Parameters": { - "functionlognutritionName": { - "Fn::GetAtt": [ - "functionlognutrition", - "Outputs.Name" - ] - }, - "functionlognutritionArn": { - "Fn::GetAtt": [ - "functionlognutrition", - "Outputs.Arn" - ] - }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { - "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.UserPoolId" - ] - }, - "authuserPoolGroupsAdminGroupRole": { - "Fn::GetAtt": [ - "authuserPoolGroups", - "Outputs.AdminGroupRole" - ] - }, + "modules": "email-filter-allowlist", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "DOMAINALLOWLIST": "amazon.com", + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip", "env": "main" } } }, - "apiadminapi": { + "functionlognutrition": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", "Parameters": { - "functionadminName": { - "Fn::GetAtt": [ - "functionadmin", - "Outputs.Name" - ] - }, - "functionadminArn": { - "Fn::GetAtt": [ - "functionadmin", - "Outputs.Arn" - ] - }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { - "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.UserPoolId" - ] - }, - "authuserPoolGroupsAdminGroupRole": { + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", + "apifitnesstrackerGraphQLAPIIdOutput": { "Fn::GetAtt": [ - "authuserPoolGroups", - "Outputs.AdminGroupRole" + "apifitnesstracker", + "Outputs.GraphQLAPIIdOutput" ] }, "env": "main" @@ -512,7 +512,7 @@ "DependsOn": [ "AuthRole", "UnauthRole", - "authfitnesstracker6b0fc1196b0fc119" + "authfitnesstracker9ceb2e7c9ceb2e7c" ], "Type": "AWS::Lambda::Function", "Properties": { @@ -622,7 +622,7 @@ }, "idpId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.IdentityPoolId" ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/backend-config.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/backend-config.json index 4d3f1b5f607..3267de076bd 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/backend-config.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/backend-config.json @@ -15,7 +15,7 @@ "UserPoolId" ], "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119" + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" }, { "attributes": [ @@ -35,7 +35,7 @@ "UserPoolId" ], "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119" + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" } ], "output": { @@ -43,7 +43,7 @@ "additionalAuthenticationProviders": [ { "apiKeyConfig": { - "apiKeyExpirationDate": "2026-03-14T19:43:17.245Z", + "apiKeyExpirationDate": "2026-03-29T02:07:08.737Z", "apiKeyExpirationDays": 7, "description": "graphql" }, @@ -53,7 +53,7 @@ "defaultAuthentication": { "authenticationType": "AMAZON_COGNITO_USER_POOLS", "userPoolConfig": { - "userPoolId": "authfitnesstracker6b0fc1196b0fc119" + "userPoolId": "authfitnesstracker9ceb2e7c9ceb2e7c" } } } @@ -76,7 +76,7 @@ "UserPoolId" ], "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119" + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" }, { "attributes": [ @@ -91,7 +91,7 @@ } }, "auth": { - "fitnesstracker6b0fc1196b0fc119": { + "fitnesstracker9ceb2e7c9ceb2e7c": { "customAuth": false, "dependsOn": [ { @@ -100,7 +100,7 @@ "Name" ], "category": "function", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "triggerProvider": "Cognito" } ], @@ -135,7 +135,7 @@ "IdentityPoolId" ], "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119" + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" } ], "providerPlugin": "awscloudformation", @@ -151,13 +151,13 @@ "UserPoolId" ], "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119" + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" } ], "providerPlugin": "awscloudformation", "service": "Lambda" }, - "fitnesstracker6b0fc1196b0fc119PreSignup": { + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup": { "build": true, "providerPlugin": "awscloudformation", "service": "Lambda" @@ -194,27 +194,27 @@ } ] }, - "AMPLIFY_function_fitnesstracker6b0fc1196b0fc119PreSignup_DOMAINALLOWLIST": { + "AMPLIFY_function_fitnesstracker9ceb2e7c9ceb2e7cPreSignup_DOMAINALLOWLIST": { "usedBy": [ { "category": "function", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup" + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" } ] }, - "AMPLIFY_function_fitnesstracker6b0fc1196b0fc119PreSignup_deploymentBucketName": { + "AMPLIFY_function_fitnesstracker9ceb2e7c9ceb2e7cPreSignup_deploymentBucketName": { "usedBy": [ { "category": "function", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup" + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" } ] }, - "AMPLIFY_function_fitnesstracker6b0fc1196b0fc119PreSignup_s3Key": { + "AMPLIFY_function_fitnesstracker9ceb2e7c9ceb2e7cPreSignup_s3Key": { "usedBy": [ { "category": "function", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup" + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" } ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/admin/admin-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/admin/admin-cloudformation-template.json index 2dbe7e47d6b..aaa8618655d 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/admin/admin-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/admin/admin-cloudformation-template.json @@ -16,9 +16,9 @@ "s3Key": { "Type": "String" }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } }, "Conditions": { @@ -74,8 +74,8 @@ "REGION": { "Ref": "AWS::Region" }, - "AUTH_FITNESSTRACKER6B0FC1196B0FC119_USERPOOLID": { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": { + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } } }, @@ -96,12 +96,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRole8a95290d", + "fitnesstrackerLambdaRole64f55d16", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRole8a95290d", + "fitnesstrackerLambdaRole64f55d16", "-", { "Ref": "env" @@ -220,7 +220,7 @@ }, ":userpool/", { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } ] ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/admin/function-parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/admin/function-parameters.json index bbf9b6e174e..c3c652077d2 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/admin/function-parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/admin/function-parameters.json @@ -1,7 +1,7 @@ { "permissions": { "auth": { - "fitnesstracker6b0fc1196b0fc119": [ + "fitnesstracker9ceb2e7c9ceb2e7c": [ "read" ] } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/parameters.json deleted file mode 100644 index 0d5ce52faf8..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/parameters.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "modules": "email-filter-allowlist", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup" -} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/amplify.state b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/amplify.state similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/amplify.state rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/amplify.state diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/custom-policies.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/custom-policies.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/custom-policies.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/custom-policies.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/fitnesstracker6b0fc1196b0fc119PreSignup/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json similarity index 95% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/fitnesstracker6b0fc1196b0fc119PreSignup/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json index c0cf3b931f5..04a3c261a89 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/fitnesstracker6b0fc1196b0fc119PreSignup/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json @@ -71,12 +71,12 @@ "FunctionName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker6b0fc1196b0fc119PreSignup", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", { "Fn::Join": [ "", [ - "fitnesstracker6b0fc1196b0fc119PreSignup", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "-", { "Ref": "env" @@ -129,12 +129,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker6b0fc1196b0fc119PreSignup", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", { "Fn::Join": [ "", [ - "fitnesstracker6b0fc1196b0fc119PreSignup", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/function-parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/function-parameters.json similarity index 61% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/function-parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/function-parameters.json index bc563179c95..911d754ad38 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/function-parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/function-parameters.json @@ -3,14 +3,14 @@ "modules": [ "email-filter-allowlist" ], - "parentResource": "fitnesstracker6b0fc1196b0fc119", - "functionName": "fitnesstracker6b0fc1196b0fc119PreSignup", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup", + "parentResource": "fitnesstracker9ceb2e7c9ceb2e7c", + "functionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "parentStack": "auth", "triggerEnvs": "[]", "triggerDir": "/snapshot/amplify-cli/build/node_modules/@aws-amplify/amplify-category-auth/provider-utils/awscloudformation/triggers/PreSignup", "triggerTemplate": "PreSignup.json.ejs", "triggerEventPath": "PreSignup.event.json", - "roleName": "fitnesstracker6b0fc1196b0fc119PreSignup", + "roleName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "skipEdit": true } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/parameters.json new file mode 100644 index 00000000000..22e01f31ee2 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/parameters.json @@ -0,0 +1,4 @@ +{ + "modules": "email-filter-allowlist", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" +} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/email-filter-allowlist.js b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/email-filter-allowlist.js similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/email-filter-allowlist.js rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/email-filter-allowlist.js diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/event.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/event.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/event.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/event.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/index.js b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/index.js similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/index.js rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/index.js diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/package.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/package.json similarity index 78% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/package.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/package.json index 41f579f68ee..af2b3ccd67f 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/package.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/package.json @@ -1,5 +1,5 @@ { - "name": "fitnesstracker6b0fc1196b0fc119PreSignup", + "name": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "version": "2.0.0", "description": "Lambda function generated by Amplify", "main": "index.js", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/yarn.lock b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/yarn.lock similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/yarn.lock rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/yarn.lock diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/lognutrition/lognutrition-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/lognutrition/lognutrition-cloudformation-template.json index fd10c7f0ba5..e1789ef2c20 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/lognutrition/lognutrition-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/lognutrition/lognutrition-cloudformation-template.json @@ -122,12 +122,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRolee7dd41c6", + "fitnesstrackerLambdaRole8dc6052c", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRolee7dd41c6", + "fitnesstrackerLambdaRole8dc6052c", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/amplify-meta.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/amplify-meta.json index 3876e3d5862..3a167eb2204 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/amplify-meta.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/amplify-meta.json @@ -1,313 +1,313 @@ { "providers": { "awscloudformation": { - "AuthRoleName": "amplify-fitnesstracker-main-0683c-authRole", - "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-0683c-unauthRole", - "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-0683c-authRole", + "AuthRoleName": "amplify-fitnesstracker-main-6fc9a-authRole", + "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole", + "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole", "Region": "us-east-1", - "DeploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "UnauthRoleName": "amplify-fitnesstracker-main-0683c-unauthRole", - "StackName": "amplify-fitnesstracker-main-0683c", - "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-0683c/8ef87630-1a5b-11f1-84f6-12153bdc35f9", + "DeploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "UnauthRoleName": "amplify-fitnesstracker-main-6fc9a-unauthRole", + "StackName": "amplify-fitnesstracker-main-6fc9a", + "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a/d1ee9bf0-2590-11f1-8e36-1220ebfe67af", "AmplifyAppId": "fitnesstracker", - "APIGatewayAuthURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", - "AuthTriggerTemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json" + "APIGatewayAuthURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", + "AuthTriggerTemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json" } }, - "auth": { - "userPoolGroups": { - "service": "Cognito-UserPool-Groups", - "providerPlugin": "awscloudformation", + "api": { + "adminapi": { "dependsOn": [ { + "attributes": [ + "Name", + "Arn" + ], + "category": "function", + "resourceName": "admin" + }, + { + "attributes": [ + "UserPoolId" + ], "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" + }, + { "attributes": [ - "UserPoolId", - "AppClientIDWeb", - "AppClientID", - "IdentityPoolId" - ] + "AdminGroupRole" + ], + "category": "auth", + "resourceName": "userPoolGroups" } ], - "lastPushTimeStamp": "2026-03-07T19:54:29.563Z", + "providerPlugin": "awscloudformation", + "service": "API Gateway", + "output": { + "ApiName": "adminapi", + "RootUrl": "https://bbk7dedp01.execute-api.us-east-1.amazonaws.com/main", + "ApiId": "bbk7dedp01" + }, + "lastPushTimeStamp": "2026-03-24T00:40:26.010Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", - "logicalId": "authuserPoolGroups" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", + "logicalId": "apiadminapi" }, + "lastPushDirHash": "SI1snudM0j/SqX5HIasSB/7nF3k=" + }, + "fitnesstracker": { + "dependsOn": [ + { + "attributes": [ + "UserPoolId" + ], + "category": "auth", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" + } + ], "output": { - "AdminGroupRole": "arn:aws:iam::123456789012:role/us-east-1_u3DbKJdMj-AdminGroupRole" + "authConfig": { + "additionalAuthenticationProviders": [ + { + "apiKeyConfig": { + "apiKeyExpirationDate": "2026-03-29T02:07:08.737Z", + "apiKeyExpirationDays": 7, + "description": "graphql" + }, + "authenticationType": "API_KEY" + } + ], + "defaultAuthentication": { + "authenticationType": "AMAZON_COGNITO_USER_POOLS", + "userPoolConfig": { + "userPoolId": "authfitnesstracker9ceb2e7c9ceb2e7c" + } + } + }, + "GraphQLAPIIdOutput": "4ebr7lx7bbhnpeo5dbtcvdajdm", + "GraphQLAPIEndpointOutput": "https://3oyjlwrrofhp7jlc37qna22jva.appsync-api.us-east-1.amazonaws.com/graphql", + "GraphQLAPIKeyOutput": "da2-2kuyxda27ncmpool2a2bjanloy" }, - "lastPushDirHash": "5G4uAlMxN8rsFD1jyeLTya9ahFM=" - }, - "fitnesstracker6b0fc1196b0fc119": { - "service": "Cognito", "providerPlugin": "awscloudformation", + "service": "AppSync", + "lastPushTimeStamp": "2026-03-24T00:40:26.014Z", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/cloudformation-template.json", + "logicalId": "apifitnesstracker" + }, + "lastPushDirHash": "sVImeaG/Q60+Vbb0gARPejjN99o=" + }, + "nutritionapi": { "dependsOn": [ { + "attributes": [ + "Name", + "Arn" + ], "category": "function", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup", - "triggerProvider": "Cognito", + "resourceName": "lognutrition" + }, + { + "attributes": [ + "UserPoolId" + ], + "category": "auth", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" + }, + { + "attributes": [ + "AdminGroupRole" + ], + "category": "auth", + "resourceName": "userPoolGroups" + } + ], + "providerPlugin": "awscloudformation", + "service": "API Gateway", + "output": { + "ApiName": "nutritionapi", + "RootUrl": "https://ekto8iln0h.execute-api.us-east-1.amazonaws.com/main", + "ApiId": "ekto8iln0h" + }, + "lastPushTimeStamp": "2026-03-24T00:40:26.016Z", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", + "logicalId": "apinutritionapi" + }, + "lastPushDirHash": "5JwuGoxSHfV3nT5/dIukaklIOKI=" + } + }, + "auth": { + "fitnesstracker9ceb2e7c9ceb2e7c": { + "customAuth": false, + "dependsOn": [ + { "attributes": [ "Arn", "Name" - ] + ], + "category": "function", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "triggerProvider": "Cognito" } ], - "customAuth": false, "frontendAuthConfig": { - "socialProviders": [], - "usernameAttributes": [], - "signupAttributes": [ - "EMAIL" + "mfaConfiguration": "OFF", + "mfaTypes": [ + "SMS" ], "passwordProtectionSettings": { "passwordPolicyMinLength": 8, "passwordPolicyCharacters": [] }, - "mfaConfiguration": "OFF", - "mfaTypes": [ - "SMS" + "signupAttributes": [ + "EMAIL" ], + "socialProviders": [], + "usernameAttributes": [], "verificationMechanisms": [ "EMAIL" ] }, - "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json", - "logicalId": "authfitnesstracker6b0fc1196b0fc119" - }, - "lastPushTimeStamp": "2026-03-07T19:54:29.563Z", - "output": { - "UserPoolId": "us-east-1_u3DbKJdMj", - "AppClientIDWeb": "7rgr70g6grv2t7e4jstuq5uuqg", - "AppClientID": "7s3vppsutj69af1r91u7tm2a45", - "IdentityPoolId": "us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db", - "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_u3DbKJdMj", - "IdentityPoolName": "fitnesstracker6b0fc119_identitypool_6b0fc119__main", - "UserPoolName": "fitnesstracker6b0fc119_userpool_6b0fc119" - }, - "lastPushDirHash": "lc3D5NIx9SNJ9mopBb1jJJ/TKDU=" - } - }, - "function": { - "fitnesstracker6b0fc1196b0fc119PreSignup": { - "build": true, "providerPlugin": "awscloudformation", - "service": "Lambda", - "lastBuildTimeStamp": "2026-03-07T19:46:55.655Z", - "lastBuildType": "PROD", - "lastPackageTimeStamp": "2026-03-07T19:46:55.711Z", - "distZipFilename": "fitnesstracker6b0fc1196b0fc119PreSignup-555a623867446f4a3843-build.zip", - "s3Bucket": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/fitnesstracker6b0fc1196b0fc119PreSignup-555a623867446f4a3843-build.zip" + "service": "Cognito", + "output": { + "UserPoolId": "us-east-1_LAwe5ZJrw", + "AppClientIDWeb": "4bk8odk8blrf65ptk2dffug25k", + "AppClientID": "12hkvqjabpisei771tiefdhs76", + "IdentityPoolId": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d", + "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_LAwe5ZJrw", + "IdentityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__main", + "UserPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c" }, + "lastPushTimeStamp": "2026-03-24T00:40:26.019Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json", - "logicalId": "functionfitnesstracker6b0fc1196b0fc119PreSignup" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json", + "logicalId": "authfitnesstracker9ceb2e7c9ceb2e7c" }, - "lastPushTimeStamp": "2026-03-07T19:54:29.563Z", - "output": { - "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstracker6b0fc1196b0fc119PreSignup-main", - "Region": "us-east-1", - "Arn": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker6b0fc1196b0fc119PreSignup-main", - "Name": "fitnesstracker6b0fc1196b0fc119PreSignup-main", - "LambdaExecutionRole": "fitnesstracker6b0fc1196b0fc119PreSignup-main" - }, - "lastPushDirHash": "8SU4c0dfVCbxO0PKaNCo7lKfaoY=" + "lastPushDirHash": "LHa1sE4caL7GAFx9RONHvmVgPVo=" }, - "lognutrition": { - "build": true, - "providerPlugin": "awscloudformation", - "service": "Lambda", + "userPoolGroups": { "dependsOn": [ { - "category": "api", - "resourceName": "fitnesstracker", + "category": "auth", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", "attributes": [ - "GraphQLAPIIdOutput" + "UserPoolId", + "AppClientIDWeb", + "AppClientID", + "IdentityPoolId" ] } ], - "lastBuildTimeStamp": "2026-03-07T19:46:57.956Z", - "lastBuildType": "PROD", - "lastPackageTimeStamp": "2026-03-07T19:46:59.045Z", - "distZipFilename": "lognutrition-554b5263566866516c6c-build.zip", - "s3Bucket": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip" + "providerPlugin": "awscloudformation", + "service": "Cognito-UserPool-Groups", + "output": { + "AdminGroupRole": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole" }, + "lastPushTimeStamp": "2026-03-24T00:40:27.730Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", - "logicalId": "functionlognutrition" - }, - "lastPushTimeStamp": "2026-03-07T19:54:29.563Z", - "output": { - "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRolee7dd41c6-main", - "Region": "us-east-1", - "Arn": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-main", - "Name": "lognutrition-main", - "LambdaExecutionRole": "fitnesstrackerLambdaRolee7dd41c6-main" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "logicalId": "authuserPoolGroups" }, - "lastPushDirHash": "wKTLiPjpIe9DlqZKixAXXp4cLW8=" - }, + "lastPushDirHash": "5G4uAlMxN8rsFD1jyeLTya9ahFM=" + } + }, + "function": { "admin": { "build": true, - "providerPlugin": "awscloudformation", - "service": "Lambda", "dependsOn": [ { - "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119", "attributes": [ "UserPoolId" - ] + ], + "category": "auth", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" } ], - "lastBuildTimeStamp": "2026-03-07T19:47:01.559Z", - "lastBuildType": "PROD", - "lastPackageTimeStamp": "2026-03-07T19:47:07.497Z", - "distZipFilename": "admin-536f797874787247392f-build.zip", - "s3Bucket": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/admin-536f797874787247392f-build.zip" - }, - "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", - "logicalId": "functionadmin" - }, - "lastPushTimeStamp": "2026-03-07T19:54:29.563Z", + "providerPlugin": "awscloudformation", + "service": "Lambda", "output": { - "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole8a95290d-main", + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole64f55d16-main", "Region": "us-east-1", "Arn": "arn:aws:lambda:us-east-1:123456789012:function:admin-main", "Name": "admin-main", - "LambdaExecutionRole": "fitnesstrackerLambdaRole8a95290d-main" - }, - "lastPushDirHash": "cEr9eDcTN7fah2H+l8m6/ULsUCc=" - } - }, - "api": { - "fitnesstracker": { - "service": "AppSync", - "providerPlugin": "awscloudformation", - "dependsOn": [ - { - "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119", - "attributes": [ - "UserPoolId" - ] - } - ], - "output": { - "authConfig": { - "defaultAuthentication": { - "authenticationType": "AMAZON_COGNITO_USER_POOLS", - "userPoolConfig": { - "userPoolId": "authfitnesstracker6b0fc1196b0fc119" - } - }, - "additionalAuthenticationProviders": [ - { - "authenticationType": "API_KEY", - "apiKeyConfig": { - "apiKeyExpirationDays": 7, - "apiKeyExpirationDate": "2026-03-14T19:43:17.245Z", - "description": "graphql" - } - } - ] - }, - "GraphQLAPIIdOutput": "2aikutabnvbuhlzmh4mvkg3eji", - "GraphQLAPIEndpointOutput": "https://azg6sgrevzehjmrpkcghyncvci.appsync-api.us-east-1.amazonaws.com/graphql", - "GraphQLAPIKeyOutput": "da2-fakeapikey00000000000000" + "LambdaExecutionRole": "fitnesstrackerLambdaRole64f55d16-main" }, + "lastPushTimeStamp": "2026-03-24T00:40:26.026Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/cloudformation-template.json", - "logicalId": "apifitnesstracker" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", + "logicalId": "functionadmin" }, - "lastPushTimeStamp": "2026-03-07T19:54:29.563Z", - "lastPushDirHash": "qJUjDfyKe7FhQAxzPRH3qHmn3UM=" + "s3Bucket": { + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/admin-765632787437744e386e-build.zip" + }, + "lastBuildTimeStamp": "2026-03-23T18:49:08.046Z", + "lastBuildType": "PROD", + "lastPackageTimeStamp": "2026-03-23T18:49:10.871Z", + "distZipFilename": "admin-765632787437744e386e-build.zip", + "lastPushDirHash": "slgY/GyKAD6Yg8mD7maeOXp9x1k=" }, - "nutritionapi": { - "service": "API Gateway", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup": { + "build": true, "providerPlugin": "awscloudformation", - "dependsOn": [ - { - "category": "function", - "resourceName": "lognutrition", - "attributes": [ - "Name", - "Arn" - ] - }, - { - "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119", - "attributes": [ - "UserPoolId" - ] - }, - { - "category": "auth", - "resourceName": "userPoolGroups", - "attributes": [ - "AdminGroupRole" - ] - } - ], + "service": "Lambda", + "output": { + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main", + "Region": "us-east-1", + "Arn": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main", + "Name": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main", + "LambdaExecutionRole": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" + }, + "lastPushTimeStamp": "2026-03-24T00:40:26.029Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", - "logicalId": "apinutritionapi" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json", + "logicalId": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup" }, - "lastPushTimeStamp": "2026-03-07T19:54:29.563Z", - "output": { - "ApiName": "nutritionapi", - "RootUrl": "https://6smuxn28tb.execute-api.us-east-1.amazonaws.com/main", - "ApiId": "6smuxn28tb" + "s3Bucket": { + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip" }, - "lastPushDirHash": "5JwuGoxSHfV3nT5/dIukaklIOKI=" + "lastBuildTimeStamp": "2026-03-23T18:49:12.334Z", + "lastBuildType": "PROD", + "lastPackageTimeStamp": "2026-03-23T18:49:12.345Z", + "distZipFilename": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip", + "lastPushDirHash": "qol/s4yC6lAAoI+0jAPoRyuH394=" }, - "adminapi": { - "service": "API Gateway", - "providerPlugin": "awscloudformation", + "lognutrition": { + "build": true, "dependsOn": [ { - "category": "function", - "resourceName": "admin", "attributes": [ - "Name", - "Arn" - ] - }, - { - "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119", - "attributes": [ - "UserPoolId" - ] - }, - { - "category": "auth", - "resourceName": "userPoolGroups", - "attributes": [ - "AdminGroupRole" - ] + "GraphQLAPIIdOutput" + ], + "category": "api", + "resourceName": "fitnesstracker" } ], + "providerPlugin": "awscloudformation", + "service": "Lambda", + "output": { + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole8dc6052c-main", + "Region": "us-east-1", + "Arn": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-main", + "Name": "lognutrition-main", + "LambdaExecutionRole": "fitnesstrackerLambdaRole8dc6052c-main" + }, + "lastPushTimeStamp": "2026-03-24T00:40:26.035Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", - "logicalId": "apiadminapi" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "logicalId": "functionlognutrition" }, - "lastPushTimeStamp": "2026-03-07T19:54:29.563Z", - "output": { - "ApiName": "adminapi", - "RootUrl": "https://kh5xa5hayh.execute-api.us-east-1.amazonaws.com/main", - "ApiId": "kh5xa5hayh" + "s3Bucket": { + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip" }, - "lastPushDirHash": "SI1snudM0j/SqX5HIasSB/7nF3k=" + "lastBuildTimeStamp": "2026-03-23T18:49:13.048Z", + "lastBuildType": "PROD", + "lastPackageTimeStamp": "2026-03-23T18:49:13.590Z", + "distZipFilename": "lognutrition-554b5263566866516c6c-build.zip", + "lastPushDirHash": "cvWf4K5nJd9hIYUUzDbXROaTzek=" } } } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/adminapi/build/adminapi-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/adminapi/build/adminapi-cloudformation-template.json index 9a9f4cf8794..03f897a5ce3 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/adminapi/build/adminapi-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/adminapi/build/adminapi-cloudformation-template.json @@ -1,10 +1,10 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-API Gateway\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "API Gateway Resource for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -104,7 +104,7 @@ "-", [ { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "AdminGroupRole" ] @@ -426,7 +426,7 @@ "Name": "adminapi" } }, - "adminapiDefault4XXResponseb1888203": { + "adminapiDefault4XXResponse85f5ca6c": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -441,7 +441,7 @@ } } }, - "adminapiDefault5XXResponseb1888203": { + "adminapiDefault5XXResponse85f5ca6c": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -456,7 +456,7 @@ } } }, - "DeploymentAPIGWadminapi62a7fdcd": { + "DeploymentAPIGWadminapi7b0e0b8f": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -474,8 +474,8 @@ } }, "DependsOn": [ - "adminapiDefault4XXResponseb1888203", - "adminapiDefault5XXResponseb1888203" + "adminapiDefault4XXResponse85f5ca6c", + "adminapiDefault5XXResponse85f5ca6c" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/cloudformation-template.json index 78e0d8c0c01..a82fa55dc68 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/cloudformation-template.json @@ -1,609 +1,608 @@ { - "Parameters": { - "env": { - "Type": "String", - "Default": "NONE" - }, - "AppSyncApiName": { - "Type": "String", - "Default": "AppSyncSimpleTransform" - }, - "AuthCognitoUserPoolId": { - "Type": "String" - }, - "DynamoDBModelTableReadIOPS": { - "Type": "Number", - "Default": 5, - "Description": "The number of read IOPS the table should support." - }, - "DynamoDBModelTableWriteIOPS": { - "Type": "Number", - "Default": 5, - "Description": "The number of write IOPS the table should support." - }, - "DynamoDBBillingMode": { - "Type": "String", - "Default": "PAY_PER_REQUEST", - "AllowedValues": [ - "PAY_PER_REQUEST", - "PROVISIONED" - ], - "Description": "Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes." - }, - "DynamoDBEnablePointInTimeRecovery": { - "Type": "String", - "Default": "false", - "AllowedValues": [ - "true", - "false" - ], - "Description": "Whether to enable Point in Time Recovery on the table." - }, - "DynamoDBEnableServerSideEncryption": { - "Type": "String", - "Default": "true", - "AllowedValues": [ - "true", - "false" - ], - "Description": "Enable server side encryption powered by KMS." - }, - "S3DeploymentBucket": { - "Type": "String", - "Description": "An S3 Bucket name where assets are deployed" - }, - "S3DeploymentRootKey": { - "Type": "String", - "Description": "An S3 key relative to the S3DeploymentBucket that points to the root of the deployment directory." - } - }, - "Resources": { - "GraphQLAPI": { - "Type": "AWS::AppSync::GraphQLApi", - "Properties": { - "AdditionalAuthenticationProviders": [ - { - "AuthenticationType": "API_KEY" - } - ], - "AuthenticationType": "AMAZON_COGNITO_USER_POOLS", - "Name": { - "Fn::Join": [ - "", - [ - { - "Ref": "AppSyncApiName" - }, - "-", - { - "Ref": "env" - } - ] - ] + "Parameters": { + "env": { + "Type": "String", + "Default": "NONE" }, - "UserPoolConfig": { - "AwsRegion": { - "Ref": "AWS::Region" - }, - "DefaultAction": "ALLOW", - "UserPoolId": { - "Ref": "AuthCognitoUserPoolId" - } - } - } - }, - "GraphQLAPITransformerSchema3CB2AE18": { - "Type": "AWS::AppSync::GraphQLSchema", - "Properties": { - "ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] + "AppSyncApiName": { + "Type": "String", + "Default": "AppSyncSimpleTransform" }, - "DefinitionS3Location": { - "Fn::Join": [ - "", - [ - "s3://", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/schema.graphql" - ] - ] - } - } - }, - "GraphQLAPIDefaultApiKey215A6DD7": { - "Type": "AWS::AppSync::ApiKey", - "Properties": { - "ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] + "AuthCognitoUserPoolId": { + "Type": "String" }, - "Description": "graphql", - "Expires": 1773517628 - } - }, - "GraphQLAPINONEDS95A13CF0": { - "Type": "AWS::AppSync::DataSource", - "Properties": { - "ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] + "DynamoDBModelTableReadIOPS": { + "Type": "Number", + "Default": 5, + "Description": "The number of read IOPS the table should support." }, - "Description": "None Data Source for Pipeline functions", - "Name": "NONE_DS", - "Type": "NONE" - } - }, - "WorkoutProgram": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "DynamoDBModelTableReadIOPS": { - "Ref": "DynamoDBModelTableReadIOPS" - }, - "DynamoDBModelTableWriteIOPS": { - "Ref": "DynamoDBModelTableWriteIOPS" - }, - "DynamoDBBillingMode": { - "Ref": "DynamoDBBillingMode" - }, - "DynamoDBEnablePointInTimeRecovery": { - "Ref": "DynamoDBEnablePointInTimeRecovery" - }, - "DynamoDBEnableServerSideEncryption": { - "Ref": "DynamoDBEnableServerSideEncryption" - }, - "referencetotransformerrootstackenv10C5A902Ref": { - "Ref": "env" - }, - "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { - "Fn::GetAtt": [ - "GraphQLAPINONEDS95A13CF0", - "Name" - ] - }, - "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { - "Ref": "S3DeploymentBucket" - }, - "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { - "Ref": "S3DeploymentRootKey" - } + "DynamoDBModelTableWriteIOPS": { + "Type": "Number", + "Default": 5, + "Description": "The number of write IOPS the table should support." }, - "TemplateURL": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/stacks/WorkoutProgram.json" - ] - ] - } - }, - "DependsOn": [ - "GraphQLAPITransformerSchema3CB2AE18" - ] - }, - "Exercise": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "DynamoDBModelTableReadIOPS": { - "Ref": "DynamoDBModelTableReadIOPS" - }, - "DynamoDBModelTableWriteIOPS": { - "Ref": "DynamoDBModelTableWriteIOPS" - }, - "DynamoDBBillingMode": { - "Ref": "DynamoDBBillingMode" - }, - "DynamoDBEnablePointInTimeRecovery": { - "Ref": "DynamoDBEnablePointInTimeRecovery" - }, - "DynamoDBEnableServerSideEncryption": { - "Ref": "DynamoDBEnableServerSideEncryption" - }, - "referencetotransformerrootstackenv10C5A902Ref": { - "Ref": "env" - }, - "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { - "Ref": "S3DeploymentBucket" - }, - "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { - "Ref": "S3DeploymentRootKey" - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId" - ] - }, - "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { - "Fn::GetAtt": [ - "GraphQLAPINONEDS95A13CF0", - "Name" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncF52D36F4F": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncFunction55BF88AFFunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId" - ] - } + "DynamoDBBillingMode": { + "Type": "String", + "Default": "PAY_PER_REQUEST", + "AllowedValues": [ + "PAY_PER_REQUEST", + "PROVISIONED" + ], + "Description": "Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes." }, - "TemplateURL": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/stacks/Exercise.json" - ] - ] - } - }, - "DependsOn": [ - "GraphQLAPITransformerSchema3CB2AE18" - ] - }, - "Meal": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "DynamoDBModelTableReadIOPS": { - "Ref": "DynamoDBModelTableReadIOPS" - }, - "DynamoDBModelTableWriteIOPS": { - "Ref": "DynamoDBModelTableWriteIOPS" - }, - "DynamoDBBillingMode": { - "Ref": "DynamoDBBillingMode" - }, - "DynamoDBEnablePointInTimeRecovery": { - "Ref": "DynamoDBEnablePointInTimeRecovery" - }, - "DynamoDBEnableServerSideEncryption": { - "Ref": "DynamoDBEnableServerSideEncryption" - }, - "referencetotransformerrootstackenv10C5A902Ref": { - "Ref": "env" - }, - "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { - "Fn::GetAtt": [ - "GraphQLAPINONEDS95A13CF0", - "Name" - ] - }, - "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { - "Ref": "S3DeploymentBucket" - }, - "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { - "Ref": "S3DeploymentRootKey" - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId" - ] - } + "DynamoDBEnablePointInTimeRecovery": { + "Type": "String", + "Default": "false", + "AllowedValues": [ + "true", + "false" + ], + "Description": "Whether to enable Point in Time Recovery on the table." }, - "TemplateURL": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/stacks/Meal.json" - ] - ] + "DynamoDBEnableServerSideEncryption": { + "Type": "String", + "Default": "true", + "AllowedValues": [ + "true", + "false" + ], + "Description": "Enable server side encryption powered by KMS." + }, + "S3DeploymentBucket": { + "Type": "String", + "Description": "An S3 Bucket name where assets are deployed" + }, + "S3DeploymentRootKey": { + "Type": "String", + "Description": "An S3 key relative to the S3DeploymentBucket that points to the root of the deployment directory." } - }, - "DependsOn": [ - "GraphQLAPITransformerSchema3CB2AE18" - ] }, - "ConnectionStack": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { - "Fn::GetAtt": [ - "GraphQLAPINONEDS95A13CF0", - "Name" - ] - }, - "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { - "Ref": "S3DeploymentBucket" - }, - "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { - "Ref": "S3DeploymentRootKey" - }, - "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseDataSourceE8B787D0Name": { - "Fn::GetAtt": [ - "Exercise", - "Outputs.transformerrootstackExerciseExerciseDataSourceE8B787D0Name" - ] - }, - "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseTable2F3E478ERef": { - "Fn::GetAtt": [ - "Exercise", - "Outputs.transformerrootstackExerciseExerciseTable2F3E478ERef" - ] - } + "Resources": { + "GraphQLAPI": { + "Type": "AWS::AppSync::GraphQLApi", + "Properties": { + "AdditionalAuthenticationProviders": [ + { + "AuthenticationType": "API_KEY" + } + ], + "AuthenticationType": "AMAZON_COGNITO_USER_POOLS", + "Name": { + "Fn::Join": [ + "", + [ + { + "Ref": "AppSyncApiName" + }, + "-", + { + "Ref": "env" + } + ] + ] + }, + "UserPoolConfig": { + "AwsRegion": { + "Ref": "AWS::Region" + }, + "DefaultAction": "ALLOW", + "UserPoolId": { + "Ref": "AuthCognitoUserPoolId" + } + } + } }, - "TemplateURL": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/stacks/ConnectionStack.json" + "GraphQLAPITransformerSchema3CB2AE18": { + "Type": "AWS::AppSync::GraphQLSchema", + "Properties": { + "ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "DefinitionS3Location": { + "Fn::Join": [ + "", + [ + "s3://", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/schema.graphql" + ] + ] + } + } + }, + "GraphQLAPIDefaultApiKey215A6DD7": { + "Type": "AWS::AppSync::ApiKey", + "Properties": { + "ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "Description": "graphql", + "Expires": 1774917627 + } + }, + "GraphQLAPINONEDS95A13CF0": { + "Type": "AWS::AppSync::DataSource", + "Properties": { + "ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "Description": "None Data Source for Pipeline functions", + "Name": "NONE_DS", + "Type": "NONE" + } + }, + "WorkoutProgram": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "DynamoDBModelTableReadIOPS": { + "Ref": "DynamoDBModelTableReadIOPS" + }, + "DynamoDBModelTableWriteIOPS": { + "Ref": "DynamoDBModelTableWriteIOPS" + }, + "DynamoDBBillingMode": { + "Ref": "DynamoDBBillingMode" + }, + "DynamoDBEnablePointInTimeRecovery": { + "Ref": "DynamoDBEnablePointInTimeRecovery" + }, + "DynamoDBEnableServerSideEncryption": { + "Ref": "DynamoDBEnableServerSideEncryption" + }, + "referencetotransformerrootstackenv10C5A902Ref": { + "Ref": "env" + }, + "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { + "Fn::GetAtt": [ + "GraphQLAPINONEDS95A13CF0", + "Name" + ] + }, + "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { + "Ref": "S3DeploymentBucket" + }, + "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { + "Ref": "S3DeploymentRootKey" + } + }, + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/stacks/WorkoutProgram.json" + ] + ] + } + }, + "DependsOn": [ + "GraphQLAPITransformerSchema3CB2AE18" ] - ] - } - }, - "DependsOn": [ - "Exercise", - "GraphQLAPITransformerSchema3CB2AE18" - ] - }, - "CustomResourcesjson": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "AppSyncApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" + }, + "Exercise": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "DynamoDBModelTableReadIOPS": { + "Ref": "DynamoDBModelTableReadIOPS" + }, + "DynamoDBModelTableWriteIOPS": { + "Ref": "DynamoDBModelTableWriteIOPS" + }, + "DynamoDBBillingMode": { + "Ref": "DynamoDBBillingMode" + }, + "DynamoDBEnablePointInTimeRecovery": { + "Ref": "DynamoDBEnablePointInTimeRecovery" + }, + "DynamoDBEnableServerSideEncryption": { + "Ref": "DynamoDBEnableServerSideEncryption" + }, + "referencetotransformerrootstackenv10C5A902Ref": { + "Ref": "env" + }, + "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { + "Ref": "S3DeploymentBucket" + }, + "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { + "Ref": "S3DeploymentRootKey" + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId" + ] + }, + "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { + "Fn::GetAtt": [ + "GraphQLAPINONEDS95A13CF0", + "Name" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncF52D36F4F": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncFunction55BF88AFFunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId" + ] + } + }, + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/stacks/Exercise.json" + ] + ] + } + }, + "DependsOn": [ + "GraphQLAPITransformerSchema3CB2AE18" ] - }, - "AppSyncApiName": { - "Ref": "AppSyncApiName" - }, - "env": { - "Ref": "env" - }, - "S3DeploymentBucket": { - "Ref": "S3DeploymentBucket" - }, - "S3DeploymentRootKey": { - "Ref": "S3DeploymentRootKey" - } }, - "TemplateURL": { - "Fn::Join": [ - "/", - [ - "https://s3.amazonaws.com", - { - "Ref": "S3DeploymentBucket" - }, - { - "Ref": "S3DeploymentRootKey" - }, - "stacks", - "CustomResources.json" + "Meal": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "DynamoDBModelTableReadIOPS": { + "Ref": "DynamoDBModelTableReadIOPS" + }, + "DynamoDBModelTableWriteIOPS": { + "Ref": "DynamoDBModelTableWriteIOPS" + }, + "DynamoDBBillingMode": { + "Ref": "DynamoDBBillingMode" + }, + "DynamoDBEnablePointInTimeRecovery": { + "Ref": "DynamoDBEnablePointInTimeRecovery" + }, + "DynamoDBEnableServerSideEncryption": { + "Ref": "DynamoDBEnableServerSideEncryption" + }, + "referencetotransformerrootstackenv10C5A902Ref": { + "Ref": "env" + }, + "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { + "Fn::GetAtt": [ + "GraphQLAPINONEDS95A13CF0", + "Name" + ] + }, + "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { + "Ref": "S3DeploymentBucket" + }, + "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { + "Ref": "S3DeploymentRootKey" + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId" + ] + } + }, + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/stacks/Meal.json" + ] + ] + } + }, + "DependsOn": [ + "GraphQLAPITransformerSchema3CB2AE18" ] - ] - } - }, - "DependsOn": [ - "GraphQLAPI", - "GraphQLAPITransformerSchema3CB2AE18", - "WorkoutProgram", - "Exercise", - "Meal", - "ConnectionStack" - ] - } - }, - "Outputs": { - "GraphQLAPIKeyOutput": { - "Description": "Your GraphQL API ID.", - "Value": { - "Fn::GetAtt": [ - "GraphQLAPIDefaultApiKey215A6DD7", - "ApiKey" - ] - }, - "Export": { - "Name": { - "Fn::Join": [ - ":", - [ - { - "Ref": "AWS::StackName" - }, - "GraphQLApiKey" + }, + "ConnectionStack": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { + "Fn::GetAtt": [ + "GraphQLAPINONEDS95A13CF0", + "Name" + ] + }, + "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { + "Ref": "S3DeploymentBucket" + }, + "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { + "Ref": "S3DeploymentRootKey" + }, + "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseDataSourceE8B787D0Name": { + "Fn::GetAtt": [ + "Exercise", + "Outputs.transformerrootstackExerciseExerciseDataSourceE8B787D0Name" + ] + }, + "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseTable2F3E478ERef": { + "Fn::GetAtt": [ + "Exercise", + "Outputs.transformerrootstackExerciseExerciseTable2F3E478ERef" + ] + } + }, + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/stacks/ConnectionStack.json" + ] + ] + } + }, + "DependsOn": [ + "Exercise", + "GraphQLAPITransformerSchema3CB2AE18" ] - ] - } - } - }, - "GraphQLAPIIdOutput": { - "Description": "Your GraphQL API ID.", - "Value": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "Export": { - "Name": { - "Fn::Join": [ - ":", - [ - { - "Ref": "AWS::StackName" - }, - "GraphQLApiId" + }, + "CustomResourcesjson": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "AppSyncApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "AppSyncApiName": { + "Ref": "AppSyncApiName" + }, + "env": { + "Ref": "env" + }, + "S3DeploymentBucket": { + "Ref": "S3DeploymentBucket" + }, + "S3DeploymentRootKey": { + "Ref": "S3DeploymentRootKey" + } + }, + "TemplateURL": { + "Fn::Join": [ + "/", + [ + "https://s3.amazonaws.com", + { + "Ref": "S3DeploymentBucket" + }, + { + "Ref": "S3DeploymentRootKey" + }, + "stacks", + "CustomResources.json" + ] + ] + } + }, + "DependsOn": [ + "GraphQLAPI", + "GraphQLAPITransformerSchema3CB2AE18", + "WorkoutProgram", + "Exercise", + "Meal", + "ConnectionStack" ] - ] } - } }, - "GraphQLAPIEndpointOutput": { - "Description": "Your GraphQL API endpoint.", - "Value": { - "Fn::GetAtt": [ - "GraphQLAPI", - "GraphQLUrl" - ] - }, - "Export": { - "Name": { - "Fn::Join": [ - ":", - [ - { - "Ref": "AWS::StackName" - }, - "GraphQLApiEndpoint" - ] - ] + "Outputs": { + "GraphQLAPIKeyOutput": { + "Description": "Your GraphQL API ID.", + "Value": { + "Fn::GetAtt": [ + "GraphQLAPIDefaultApiKey215A6DD7", + "ApiKey" + ] + }, + "Export": { + "Name": { + "Fn::Join": [ + ":", + [ + { + "Ref": "AWS::StackName" + }, + "GraphQLApiKey" + ] + ] + } + } + }, + "GraphQLAPIIdOutput": { + "Description": "Your GraphQL API ID.", + "Value": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "Export": { + "Name": { + "Fn::Join": [ + ":", + [ + { + "Ref": "AWS::StackName" + }, + "GraphQLApiId" + ] + ] + } + } + }, + "GraphQLAPIEndpointOutput": { + "Description": "Your GraphQL API endpoint.", + "Value": { + "Fn::GetAtt": [ + "GraphQLAPI", + "GraphQLUrl" + ] + }, + "Export": { + "Name": { + "Fn::Join": [ + ":", + [ + { + "Ref": "AWS::StackName" + }, + "GraphQLApiEndpoint" + ] + ] + } + } } - } } - }, - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-AppSync\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/parameters.json index 3cd47253316..8cb3b427185 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/parameters.json @@ -4,10 +4,10 @@ "DynamoDBEnableServerSideEncryption": false, "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, - "S3DeploymentBucket": "amplify-fitnesstracker-main-0683c-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/96fdcde6a80859ead18d697e115cb9bd809fa98a" + "S3DeploymentBucket": "amplify-fitnesstracker-main-6fc9a-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa" } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/ConnectionStack.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/ConnectionStack.json index 37b698b468d..a407b2cb80e 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/ConnectionStack.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/ConnectionStack.json @@ -111,7 +111,7 @@ { "Ref": "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseTable2F3E478ERef" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/Exercise.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/Exercise.json index cc800da40df..a9eeaa78710 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/Exercise.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/Exercise.json @@ -503,7 +503,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -598,7 +598,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -729,7 +729,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -881,7 +881,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1030,7 +1030,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1067,7 +1067,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1104,7 +1104,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1141,7 +1141,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1172,7 +1172,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/Meal.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/Meal.json index ee4ac331787..1f6a60f3fb6 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/Meal.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/Meal.json @@ -482,7 +482,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -580,7 +580,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -711,7 +711,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -863,7 +863,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1012,7 +1012,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1082,7 +1082,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1122,7 +1122,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1162,7 +1162,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/WorkoutProgram.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/WorkoutProgram.json index 8d494295f5d..d65c9f90968 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/WorkoutProgram.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/WorkoutProgram.json @@ -503,7 +503,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -604,7 +604,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -771,7 +771,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -959,7 +959,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1111,7 +1111,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1232,7 +1232,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1278,7 +1278,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1324,7 +1324,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1403,7 +1403,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/cli-inputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/cli-inputs.json index 3dee4f09639..06b33fdf9b2 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/cli-inputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/cli-inputs.json @@ -5,13 +5,13 @@ "serviceName": "AppSync", "defaultAuthType": { "mode": "AMAZON_COGNITO_USER_POOLS", - "cognitoUserPoolId": "authfitnesstracker6b0fc1196b0fc119" + "cognitoUserPoolId": "authfitnesstracker9ceb2e7c9ceb2e7c" }, "additionalAuthTypes": [ { "mode": "API_KEY", "expirationTime": 7, - "apiKeyExpirationDate": "2026-03-14T19:43:17.245Z", + "apiKeyExpirationDate": "2026-03-29T02:07:08.737Z", "keyDescription": "graphql" } ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/parameters.json index e0d654b084c..dd8ecd65ac8 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/parameters.json @@ -4,7 +4,7 @@ "DynamoDBEnableServerSideEncryption": false, "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/nutritionapi/build/nutritionapi-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/nutritionapi/build/nutritionapi-cloudformation-template.json index ab25d629b86..d0fe820973d 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/nutritionapi/build/nutritionapi-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/nutritionapi/build/nutritionapi-cloudformation-template.json @@ -1,10 +1,10 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-API Gateway\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "API Gateway Resource for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -344,7 +344,7 @@ "-", [ { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "AdminGroupRole" ] @@ -666,7 +666,7 @@ "Name": "nutritionapi" } }, - "nutritionapiDefault4XXResponse7a61ed16": { + "nutritionapiDefault4XXResponse22a5dbe5": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -681,7 +681,7 @@ } } }, - "nutritionapiDefault5XXResponse7a61ed16": { + "nutritionapiDefault5XXResponse22a5dbe5": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -696,7 +696,7 @@ } } }, - "DeploymentAPIGWnutritionapi3a6bc816": { + "DeploymentAPIGWnutritionapi7e86ac76": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -714,8 +714,8 @@ } }, "DependsOn": [ - "nutritionapiDefault4XXResponse7a61ed16", - "nutritionapiDefault5XXResponse7a61ed16" + "nutritionapiDefault4XXResponse22a5dbe5", + "nutritionapiDefault5XXResponse22a5dbe5" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker6b0fc1196b0fc119/build/auth-trigger-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/auth-trigger-cloudformation-template.json similarity index 94% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker6b0fc1196b0fc119/build/auth-trigger-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/auth-trigger-cloudformation-template.json index 549c2c6d721..94bf04af18a 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker6b0fc1196b0fc119/build/auth-trigger-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/auth-trigger-cloudformation-template.json @@ -11,13 +11,13 @@ "userpoolArn": { "Type": "String" }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupName": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { "Type": "String" }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupArn": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { "Type": "String" }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupLambdaExecutionRole": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole": { "Type": "String" } }, @@ -37,7 +37,7 @@ "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "functionfitnesstracker6b0fc1196b0fc119PreSignupName" + "Ref": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" }, "Principal": "cognito-idp.amazonaws.com", "SourceArn": { @@ -137,13 +137,13 @@ "lambdaConfig": [ { "triggerType": "PreSignUp", - "lambdaFunctionName": "fitnesstracker6b0fc1196b0fc119PreSignup", + "lambdaFunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "lambdaFunctionArn": { - "Ref": "functionfitnesstracker6b0fc1196b0fc119PreSignupArn" + "Ref": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" } } ], - "nonce": "bd98400d-2d3c-435d-9a07-d071be38ca5f" + "nonce": "a3ec1075-1f5a-4a6d-9bb3-6caf273873db" }, "DependsOn": [ "authTriggerFn7FCFA449", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/fitnesstracker6b0fc1196b0fc119/build/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json similarity index 93% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/fitnesstracker6b0fc1196b0fc119/build/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json index 6fd7a4879cc..79def9e5efb 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/fitnesstracker6b0fc1196b0fc119/build/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json @@ -1,17 +1,17 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "Amplify Cognito Stack for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { "Type": "String" }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupArn": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { "Type": "String", - "Default": "functionfitnesstracker6b0fc1196b0fc119PreSignupArn" + "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupName": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { "Type": "String", - "Default": "functionfitnesstracker6b0fc1196b0fc119PreSignupName" + "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" }, "identityPoolName": { "Type": "String" @@ -216,7 +216,7 @@ "UserPoolClientWeb": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes6b0fc119_app_clientWeb", + "ClientName": "fitnes9ceb2e7c_app_clientWeb", "RefreshTokenValidity": { "Ref": "userpoolClientRefreshTokenValidity" }, @@ -234,7 +234,7 @@ "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes6b0fc119_app_client", + "ClientName": "fitnes9ceb2e7c_app_client", "GenerateSecret": { "Ref": "userpoolClientGenerateSecret" }, @@ -277,7 +277,7 @@ "Fn::Join": [ "", [ - "upClientLambdaRole6b0fc119", + "upClientLambdaRole9ceb2e7c", { "Fn::Select": [ 3, @@ -349,12 +349,12 @@ "IdentityPoolName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker6b0fc119_identitypool_6b0fc119", + "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", { "Fn::Join": [ "", [ - "fitnesstracker6b0fc119_identitypool_6b0fc119__", + "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", { "Ref": "env" } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker6b0fc1196b0fc119/build/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/parameters.json similarity index 77% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker6b0fc1196b0fc119/build/parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/parameters.json index 95f8a8d6700..b80b3f56b64 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker6b0fc1196b0fc119/build/parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/parameters.json @@ -1,8 +1,8 @@ { - "identityPoolName": "fitnesstracker6b0fc119_identitypool_6b0fc119", + "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes6b0fc119", - "userPoolName": "fitnesstracker6b0fc119_userpool_6b0fc119", + "resourceNameTruncated": "fitnes9ceb2e7c", + "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", "autoVerifiedAttributes": [ "email" ], @@ -22,17 +22,17 @@ ], "aliasAttributes": [], "userpoolClientGenerateSecret": false, - "userpoolClientRefreshTokenValidity": "30", + "userpoolClientRefreshTokenValidity": 30, "userpoolClientWriteAttributes": [ "email" ], "userpoolClientReadAttributes": [ "email" ], - "userpoolClientLambdaRole": "fitnes6b0fc119_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "6b0fc119", - "resourceName": "fitnesstracker6b0fc1196b0fc119", + "sharedId": "9ceb2e7c", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -62,7 +62,7 @@ "dependsOn": [ { "category": "function", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "triggerProvider": "Cognito", "attributes": [ "Arn", @@ -72,6 +72,6 @@ ], "permissions": [], "authTriggerConnections": [ - "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker6b0fc1196b0fc119PreSignup\"}" + "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}" ] } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker6b0fc1196b0fc119/cli-inputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/cli-inputs.json similarity index 77% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker6b0fc1196b0fc119/cli-inputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/cli-inputs.json index 016e071a17a..81dda741522 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker6b0fc1196b0fc119/cli-inputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/cli-inputs.json @@ -1,10 +1,10 @@ { "version": "1", "cognitoConfig": { - "identityPoolName": "fitnesstracker6b0fc119_identitypool_6b0fc119", + "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes6b0fc119", - "userPoolName": "fitnesstracker6b0fc119_userpool_6b0fc119", + "resourceNameTruncated": "fitnes9ceb2e7c", + "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", "autoVerifiedAttributes": [ "email" ], @@ -24,17 +24,17 @@ ], "aliasAttributes": [], "userpoolClientGenerateSecret": false, - "userpoolClientRefreshTokenValidity": "30", + "userpoolClientRefreshTokenValidity": 30, "userpoolClientWriteAttributes": [ "email" ], "userpoolClientReadAttributes": [ "email" ], - "userpoolClientLambdaRole": "fitnes6b0fc119_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "6b0fc119", - "resourceName": "fitnesstracker6b0fc1196b0fc119", + "sharedId": "9ceb2e7c", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json index 0741b0ac99f..12c7040bd48 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json @@ -1,5 +1,5 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito-UserPool-Groups\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "Root Stack for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { @@ -11,21 +11,21 @@ "UnauthRoleArn": { "Type": "String" }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, - "authfitnesstracker6b0fc1196b0fc119IdentityPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119IdentityPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" }, - "authfitnesstracker6b0fc1196b0fc119AppClientID": { + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119AppClientID" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID" }, - "authfitnesstracker6b0fc1196b0fc119AppClientIDWeb": { + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119AppClientIDWeb" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb" } }, "Conditions": { @@ -52,7 +52,7 @@ ] }, "UserPoolId": { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } } }, @@ -72,7 +72,7 @@ "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": { - "Ref": "authfitnesstracker6b0fc1196b0fc119IdentityPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" } }, "ForAnyValue:StringLike": { @@ -87,7 +87,7 @@ "", [ { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "-AdminGroupRole" ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/adminapi/build/adminapi-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/adminapi/build/adminapi-cloudformation-template.json index 9a9f4cf8794..fe0413d381e 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/adminapi/build/adminapi-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/adminapi/build/adminapi-cloudformation-template.json @@ -1,10 +1,10 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-API Gateway\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "API Gateway Resource for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -104,7 +104,7 @@ "-", [ { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "AdminGroupRole" ] @@ -426,7 +426,7 @@ "Name": "adminapi" } }, - "adminapiDefault4XXResponseb1888203": { + "adminapiDefault4XXResponsec0c67e32": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -441,7 +441,7 @@ } } }, - "adminapiDefault5XXResponseb1888203": { + "adminapiDefault5XXResponsec0c67e32": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -456,7 +456,7 @@ } } }, - "DeploymentAPIGWadminapi62a7fdcd": { + "DeploymentAPIGWadminapia8449e95": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -474,8 +474,8 @@ } }, "DependsOn": [ - "adminapiDefault4XXResponseb1888203", - "adminapiDefault5XXResponseb1888203" + "adminapiDefault4XXResponsec0c67e32", + "adminapiDefault5XXResponsec0c67e32" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/fitnesstracker/build/cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/fitnesstracker/build/cloudformation-template.json index 78e0d8c0c01..651f9ceb637 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/fitnesstracker/build/cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/fitnesstracker/build/cloudformation-template.json @@ -129,7 +129,7 @@ ] }, "Description": "graphql", - "Expires": 1773517628 + "Expires": 1774896554 } }, "GraphQLAPINONEDS95A13CF0": { @@ -604,6 +604,5 @@ } } } - }, - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-AppSync\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" + } } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/nutritionapi/build/nutritionapi-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/nutritionapi/build/nutritionapi-cloudformation-template.json index ab25d629b86..1c507689fc5 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/nutritionapi/build/nutritionapi-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/nutritionapi/build/nutritionapi-cloudformation-template.json @@ -1,10 +1,10 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-API Gateway\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "API Gateway Resource for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -344,7 +344,7 @@ "-", [ { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "AdminGroupRole" ] @@ -666,7 +666,7 @@ "Name": "nutritionapi" } }, - "nutritionapiDefault4XXResponse7a61ed16": { + "nutritionapiDefault4XXResponse59a22bc9": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -681,7 +681,7 @@ } } }, - "nutritionapiDefault5XXResponse7a61ed16": { + "nutritionapiDefault5XXResponse59a22bc9": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -696,7 +696,7 @@ } } }, - "DeploymentAPIGWnutritionapi3a6bc816": { + "DeploymentAPIGWnutritionapifc67c40b": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -714,8 +714,8 @@ } }, "DependsOn": [ - "nutritionapiDefault4XXResponse7a61ed16", - "nutritionapiDefault5XXResponse7a61ed16" + "nutritionapiDefault4XXResponse59a22bc9", + "nutritionapiDefault5XXResponse59a22bc9" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/fitnesstracker6b0fc1196b0fc119/build/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json similarity index 93% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/fitnesstracker6b0fc1196b0fc119/build/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json index 6fd7a4879cc..79def9e5efb 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/fitnesstracker6b0fc1196b0fc119/build/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json @@ -1,17 +1,17 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "Amplify Cognito Stack for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { "Type": "String" }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupArn": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { "Type": "String", - "Default": "functionfitnesstracker6b0fc1196b0fc119PreSignupArn" + "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupName": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { "Type": "String", - "Default": "functionfitnesstracker6b0fc1196b0fc119PreSignupName" + "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" }, "identityPoolName": { "Type": "String" @@ -216,7 +216,7 @@ "UserPoolClientWeb": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes6b0fc119_app_clientWeb", + "ClientName": "fitnes9ceb2e7c_app_clientWeb", "RefreshTokenValidity": { "Ref": "userpoolClientRefreshTokenValidity" }, @@ -234,7 +234,7 @@ "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes6b0fc119_app_client", + "ClientName": "fitnes9ceb2e7c_app_client", "GenerateSecret": { "Ref": "userpoolClientGenerateSecret" }, @@ -277,7 +277,7 @@ "Fn::Join": [ "", [ - "upClientLambdaRole6b0fc119", + "upClientLambdaRole9ceb2e7c", { "Fn::Select": [ 3, @@ -349,12 +349,12 @@ "IdentityPoolName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker6b0fc119_identitypool_6b0fc119", + "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", { "Fn::Join": [ "", [ - "fitnesstracker6b0fc119_identitypool_6b0fc119__", + "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", { "Ref": "env" } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json index 0741b0ac99f..12c7040bd48 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json @@ -1,5 +1,5 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito-UserPool-Groups\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "Root Stack for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { @@ -11,21 +11,21 @@ "UnauthRoleArn": { "Type": "String" }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, - "authfitnesstracker6b0fc1196b0fc119IdentityPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119IdentityPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" }, - "authfitnesstracker6b0fc1196b0fc119AppClientID": { + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119AppClientID" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID" }, - "authfitnesstracker6b0fc1196b0fc119AppClientIDWeb": { + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119AppClientIDWeb" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb" } }, "Conditions": { @@ -52,7 +52,7 @@ ] }, "UserPoolId": { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } } }, @@ -72,7 +72,7 @@ "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": { - "Ref": "authfitnesstracker6b0fc1196b0fc119IdentityPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" } }, "ForAnyValue:StringLike": { @@ -87,7 +87,7 @@ "", [ { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "-AdminGroupRole" ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json index 7732e28d356..5345516d4d9 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json @@ -202,7 +202,7 @@ "APIGatewayAuthStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", "Parameters": { "authRoleName": { "Ref": "AuthRoleName" @@ -211,15 +211,15 @@ "Ref": "UnauthRoleName" }, "env": "main", - "nutritionapi": { + "adminapi": { "Fn::GetAtt": [ - "apinutritionapi", + "apiadminapi", "Outputs.ApiId" ] }, - "adminapi": { + "nutritionapi": { "Fn::GetAtt": [ - "apiadminapi", + "apinutritionapi", "Outputs.ApiId" ] } @@ -229,100 +229,141 @@ "AuthTriggerCustomLambdaStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", "Parameters": { "env": "main", "userpoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, "userpoolArn": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolArn" ] }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupLambdaExecutionRole": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole": { "Fn::GetAtt": [ - "functionfitnesstracker6b0fc1196b0fc119PreSignup", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", "Outputs.LambdaExecutionRoleArn" ] }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupArn": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { "Fn::GetAtt": [ - "functionfitnesstracker6b0fc1196b0fc119PreSignup", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", "Outputs.Arn" ] }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupName": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { "Fn::GetAtt": [ - "functionfitnesstracker6b0fc1196b0fc119PreSignup", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", "Outputs.Name" ] } } }, "DependsOn": [ - "authfitnesstracker6b0fc1196b0fc119", - "functionfitnesstracker6b0fc1196b0fc119PreSignup" + "authfitnesstracker9ceb2e7c9ceb2e7c", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup" ] }, - "authuserPoolGroups": { + "apiadminapi": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", "Parameters": { - "AuthRoleArn": { + "functionadminName": { "Fn::GetAtt": [ - "AuthRole", - "Arn" + "functionadmin", + "Outputs.Name" ] }, - "UnauthRoleArn": { + "functionadminArn": { "Fn::GetAtt": [ - "UnauthRole", - "Arn" + "functionadmin", + "Outputs.Arn" ] }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, - "authfitnesstracker6b0fc1196b0fc119AppClientIDWeb": { + "authuserPoolGroupsAdminGroupRole": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.AppClientIDWeb" + "authuserPoolGroups", + "Outputs.AdminGroupRole" ] }, - "authfitnesstracker6b0fc1196b0fc119AppClientID": { + "env": "main" + } + } + }, + "apifitnesstracker": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/cloudformation-template.json", + "Parameters": { + "AppSyncApiName": "fitnesstracker", + "DynamoDBBillingMode": "PAY_PER_REQUEST", + "DynamoDBEnableServerSideEncryption": false, + "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.AppClientID" + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.UserPoolId" + ] + }, + "S3DeploymentBucket": "amplify-fitnesstracker-main-6fc9a-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa", + "env": "main" + } + } + }, + "apinutritionapi": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", + "Parameters": { + "functionlognutritionName": { + "Fn::GetAtt": [ + "functionlognutrition", + "Outputs.Name" ] }, - "authfitnesstracker6b0fc1196b0fc119IdentityPoolId": { + "functionlognutritionArn": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.IdentityPoolId" + "functionlognutrition", + "Outputs.Arn" + ] + }, + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.AdminGroupRole" ] }, "env": "main" } } }, - "authfitnesstracker6b0fc1196b0fc119": { + "authfitnesstracker9ceb2e7c9ceb2e7c": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json", "Parameters": { - "identityPoolName": "fitnesstracker6b0fc119_identitypool_6b0fc119", + "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes6b0fc119", - "userPoolName": "fitnesstracker6b0fc119_userpool_6b0fc119", + "resourceNameTruncated": "fitnes9ceb2e7c", + "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", "autoVerifiedAttributes": "email", "mfaConfiguration": "OFF", "mfaTypes": "SMS Text Message", @@ -336,13 +377,13 @@ "requiredAttributes": "email", "aliasAttributes": "", "userpoolClientGenerateSecret": false, - "userpoolClientRefreshTokenValidity": "30", + "userpoolClientRefreshTokenValidity": 30, "userpoolClientWriteAttributes": "email", "userpoolClientReadAttributes": "email", - "userpoolClientLambdaRole": "fitnes6b0fc119_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "6b0fc119", - "resourceName": "fitnesstracker6b0fc1196b0fc119", + "sharedId": "9ceb2e7c", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -369,139 +410,98 @@ "breakCircularDependency": true, "dependsOn": "[object Object]", "permissions": "", - "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker6b0fc1196b0fc119PreSignup\"}", + "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}", "env": "main" } } }, - "functionfitnesstracker6b0fc1196b0fc119PreSignup": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json", - "Parameters": { - "modules": "email-filter-allowlist", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup", - "DOMAINALLOWLIST": "amazon.com", - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/fitnesstracker6b0fc1196b0fc119PreSignup-555a623867446f4a3843-build.zip", - "env": "main" - } - } - }, - "functionlognutrition": { + "authuserPoolGroups": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", - "apifitnesstrackerGraphQLAPIIdOutput": { + "AuthRoleArn": { "Fn::GetAtt": [ - "apifitnesstracker", - "Outputs.GraphQLAPIIdOutput" + "AuthRole", + "Arn" ] }, - "env": "main" - } - } - }, - "functionadmin": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", - "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/admin-536f797874787247392f-build.zip", - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "UnauthRoleArn": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "UnauthRole", + "Arn" + ] + }, + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.AppClientIDWeb" + ] + }, + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.AppClientID" + ] + }, + "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.IdentityPoolId" + ] + }, "env": "main" } } }, - "apifitnesstracker": { + "functionadmin": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", "Parameters": { - "AppSyncApiName": "fitnesstracker", - "DynamoDBBillingMode": "PAY_PER_REQUEST", - "DynamoDBEnableServerSideEncryption": false, - "AuthCognitoUserPoolId": { + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/admin-765632787437744e386e-build.zip", + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, - "S3DeploymentBucket": "amplify-fitnesstracker-main-0683c-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/96fdcde6a80859ead18d697e115cb9bd809fa98a", "env": "main" } } }, - "apinutritionapi": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json", "Parameters": { - "functionlognutritionName": { - "Fn::GetAtt": [ - "functionlognutrition", - "Outputs.Name" - ] - }, - "functionlognutritionArn": { - "Fn::GetAtt": [ - "functionlognutrition", - "Outputs.Arn" - ] - }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { - "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.UserPoolId" - ] - }, - "authuserPoolGroupsAdminGroupRole": { - "Fn::GetAtt": [ - "authuserPoolGroups", - "Outputs.AdminGroupRole" - ] - }, + "modules": "email-filter-allowlist", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "DOMAINALLOWLIST": "amazon.com", + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip", "env": "main" } } }, - "apiadminapi": { + "functionlognutrition": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", "Parameters": { - "functionadminName": { - "Fn::GetAtt": [ - "functionadmin", - "Outputs.Name" - ] - }, - "functionadminArn": { - "Fn::GetAtt": [ - "functionadmin", - "Outputs.Arn" - ] - }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { - "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.UserPoolId" - ] - }, - "authuserPoolGroupsAdminGroupRole": { + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", + "apifitnesstrackerGraphQLAPIIdOutput": { "Fn::GetAtt": [ - "authuserPoolGroups", - "Outputs.AdminGroupRole" + "apifitnesstracker", + "Outputs.GraphQLAPIIdOutput" ] }, "env": "main" @@ -512,7 +512,7 @@ "DependsOn": [ "AuthRole", "UnauthRole", - "authfitnesstracker6b0fc1196b0fc119" + "authfitnesstracker9ceb2e7c9ceb2e7c" ], "Type": "AWS::Lambda::Function", "Properties": { @@ -622,7 +622,7 @@ }, "idpId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.IdentityPoolId" ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/admin/admin-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/admin/admin-cloudformation-template.json index 2dbe7e47d6b..aaa8618655d 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/admin/admin-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/admin/admin-cloudformation-template.json @@ -16,9 +16,9 @@ "s3Key": { "Type": "String" }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } }, "Conditions": { @@ -74,8 +74,8 @@ "REGION": { "Ref": "AWS::Region" }, - "AUTH_FITNESSTRACKER6B0FC1196B0FC119_USERPOOLID": { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": { + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } } }, @@ -96,12 +96,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRole8a95290d", + "fitnesstrackerLambdaRole64f55d16", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRole8a95290d", + "fitnesstrackerLambdaRole64f55d16", "-", { "Ref": "env" @@ -220,7 +220,7 @@ }, ":userpool/", { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } ] ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json similarity index 95% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json index c0cf3b931f5..04a3c261a89 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json @@ -71,12 +71,12 @@ "FunctionName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker6b0fc1196b0fc119PreSignup", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", { "Fn::Join": [ "", [ - "fitnesstracker6b0fc1196b0fc119PreSignup", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "-", { "Ref": "env" @@ -129,12 +129,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker6b0fc1196b0fc119PreSignup", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", { "Fn::Join": [ "", [ - "fitnesstracker6b0fc1196b0fc119PreSignup", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/lognutrition/lognutrition-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/lognutrition/lognutrition-cloudformation-template.json index fd10c7f0ba5..e1789ef2c20 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/lognutrition/lognutrition-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/lognutrition/lognutrition-cloudformation-template.json @@ -122,12 +122,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRolee7dd41c6", + "fitnesstrackerLambdaRole8dc6052c", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRolee7dd41c6", + "fitnesstrackerLambdaRole8dc6052c", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/root-cloudformation-stack.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/root-cloudformation-stack.json index 7732e28d356..5345516d4d9 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/root-cloudformation-stack.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/root-cloudformation-stack.json @@ -202,7 +202,7 @@ "APIGatewayAuthStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", "Parameters": { "authRoleName": { "Ref": "AuthRoleName" @@ -211,15 +211,15 @@ "Ref": "UnauthRoleName" }, "env": "main", - "nutritionapi": { + "adminapi": { "Fn::GetAtt": [ - "apinutritionapi", + "apiadminapi", "Outputs.ApiId" ] }, - "adminapi": { + "nutritionapi": { "Fn::GetAtt": [ - "apiadminapi", + "apinutritionapi", "Outputs.ApiId" ] } @@ -229,100 +229,141 @@ "AuthTriggerCustomLambdaStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", "Parameters": { "env": "main", "userpoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, "userpoolArn": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolArn" ] }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupLambdaExecutionRole": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole": { "Fn::GetAtt": [ - "functionfitnesstracker6b0fc1196b0fc119PreSignup", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", "Outputs.LambdaExecutionRoleArn" ] }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupArn": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { "Fn::GetAtt": [ - "functionfitnesstracker6b0fc1196b0fc119PreSignup", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", "Outputs.Arn" ] }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupName": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { "Fn::GetAtt": [ - "functionfitnesstracker6b0fc1196b0fc119PreSignup", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", "Outputs.Name" ] } } }, "DependsOn": [ - "authfitnesstracker6b0fc1196b0fc119", - "functionfitnesstracker6b0fc1196b0fc119PreSignup" + "authfitnesstracker9ceb2e7c9ceb2e7c", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup" ] }, - "authuserPoolGroups": { + "apiadminapi": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", "Parameters": { - "AuthRoleArn": { + "functionadminName": { "Fn::GetAtt": [ - "AuthRole", - "Arn" + "functionadmin", + "Outputs.Name" ] }, - "UnauthRoleArn": { + "functionadminArn": { "Fn::GetAtt": [ - "UnauthRole", - "Arn" + "functionadmin", + "Outputs.Arn" ] }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, - "authfitnesstracker6b0fc1196b0fc119AppClientIDWeb": { + "authuserPoolGroupsAdminGroupRole": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.AppClientIDWeb" + "authuserPoolGroups", + "Outputs.AdminGroupRole" ] }, - "authfitnesstracker6b0fc1196b0fc119AppClientID": { + "env": "main" + } + } + }, + "apifitnesstracker": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/cloudformation-template.json", + "Parameters": { + "AppSyncApiName": "fitnesstracker", + "DynamoDBBillingMode": "PAY_PER_REQUEST", + "DynamoDBEnableServerSideEncryption": false, + "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.AppClientID" + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.UserPoolId" + ] + }, + "S3DeploymentBucket": "amplify-fitnesstracker-main-6fc9a-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa", + "env": "main" + } + } + }, + "apinutritionapi": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", + "Parameters": { + "functionlognutritionName": { + "Fn::GetAtt": [ + "functionlognutrition", + "Outputs.Name" ] }, - "authfitnesstracker6b0fc1196b0fc119IdentityPoolId": { + "functionlognutritionArn": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.IdentityPoolId" + "functionlognutrition", + "Outputs.Arn" + ] + }, + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.AdminGroupRole" ] }, "env": "main" } } }, - "authfitnesstracker6b0fc1196b0fc119": { + "authfitnesstracker9ceb2e7c9ceb2e7c": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json", "Parameters": { - "identityPoolName": "fitnesstracker6b0fc119_identitypool_6b0fc119", + "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes6b0fc119", - "userPoolName": "fitnesstracker6b0fc119_userpool_6b0fc119", + "resourceNameTruncated": "fitnes9ceb2e7c", + "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", "autoVerifiedAttributes": "email", "mfaConfiguration": "OFF", "mfaTypes": "SMS Text Message", @@ -336,13 +377,13 @@ "requiredAttributes": "email", "aliasAttributes": "", "userpoolClientGenerateSecret": false, - "userpoolClientRefreshTokenValidity": "30", + "userpoolClientRefreshTokenValidity": 30, "userpoolClientWriteAttributes": "email", "userpoolClientReadAttributes": "email", - "userpoolClientLambdaRole": "fitnes6b0fc119_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "6b0fc119", - "resourceName": "fitnesstracker6b0fc1196b0fc119", + "sharedId": "9ceb2e7c", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -369,139 +410,98 @@ "breakCircularDependency": true, "dependsOn": "[object Object]", "permissions": "", - "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker6b0fc1196b0fc119PreSignup\"}", + "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}", "env": "main" } } }, - "functionfitnesstracker6b0fc1196b0fc119PreSignup": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json", - "Parameters": { - "modules": "email-filter-allowlist", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup", - "DOMAINALLOWLIST": "amazon.com", - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/fitnesstracker6b0fc1196b0fc119PreSignup-555a623867446f4a3843-build.zip", - "env": "main" - } - } - }, - "functionlognutrition": { + "authuserPoolGroups": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", - "apifitnesstrackerGraphQLAPIIdOutput": { + "AuthRoleArn": { "Fn::GetAtt": [ - "apifitnesstracker", - "Outputs.GraphQLAPIIdOutput" + "AuthRole", + "Arn" ] }, - "env": "main" - } - } - }, - "functionadmin": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", - "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/admin-536f797874787247392f-build.zip", - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "UnauthRoleArn": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "UnauthRole", + "Arn" + ] + }, + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.AppClientIDWeb" + ] + }, + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.AppClientID" + ] + }, + "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker9ceb2e7c9ceb2e7c", + "Outputs.IdentityPoolId" + ] + }, "env": "main" } } }, - "apifitnesstracker": { + "functionadmin": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", "Parameters": { - "AppSyncApiName": "fitnesstracker", - "DynamoDBBillingMode": "PAY_PER_REQUEST", - "DynamoDBEnableServerSideEncryption": false, - "AuthCognitoUserPoolId": { + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/admin-765632787437744e386e-build.zip", + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, - "S3DeploymentBucket": "amplify-fitnesstracker-main-0683c-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/96fdcde6a80859ead18d697e115cb9bd809fa98a", "env": "main" } } }, - "apinutritionapi": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json", "Parameters": { - "functionlognutritionName": { - "Fn::GetAtt": [ - "functionlognutrition", - "Outputs.Name" - ] - }, - "functionlognutritionArn": { - "Fn::GetAtt": [ - "functionlognutrition", - "Outputs.Arn" - ] - }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { - "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.UserPoolId" - ] - }, - "authuserPoolGroupsAdminGroupRole": { - "Fn::GetAtt": [ - "authuserPoolGroups", - "Outputs.AdminGroupRole" - ] - }, + "modules": "email-filter-allowlist", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "DOMAINALLOWLIST": "amazon.com", + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip", "env": "main" } } }, - "apiadminapi": { + "functionlognutrition": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", "Parameters": { - "functionadminName": { - "Fn::GetAtt": [ - "functionadmin", - "Outputs.Name" - ] - }, - "functionadminArn": { - "Fn::GetAtt": [ - "functionadmin", - "Outputs.Arn" - ] - }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { - "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", - "Outputs.UserPoolId" - ] - }, - "authuserPoolGroupsAdminGroupRole": { + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", + "apifitnesstrackerGraphQLAPIIdOutput": { "Fn::GetAtt": [ - "authuserPoolGroups", - "Outputs.AdminGroupRole" + "apifitnesstracker", + "Outputs.GraphQLAPIIdOutput" ] }, "env": "main" @@ -512,7 +512,7 @@ "DependsOn": [ "AuthRole", "UnauthRole", - "authfitnesstracker6b0fc1196b0fc119" + "authfitnesstracker9ceb2e7c9ceb2e7c" ], "Type": "AWS::Lambda::Function", "Properties": { @@ -622,7 +622,7 @@ }, "idpId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.IdentityPoolId" ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/backend-config.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/backend-config.json index 4d3f1b5f607..3267de076bd 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/backend-config.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/backend-config.json @@ -15,7 +15,7 @@ "UserPoolId" ], "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119" + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" }, { "attributes": [ @@ -35,7 +35,7 @@ "UserPoolId" ], "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119" + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" } ], "output": { @@ -43,7 +43,7 @@ "additionalAuthenticationProviders": [ { "apiKeyConfig": { - "apiKeyExpirationDate": "2026-03-14T19:43:17.245Z", + "apiKeyExpirationDate": "2026-03-29T02:07:08.737Z", "apiKeyExpirationDays": 7, "description": "graphql" }, @@ -53,7 +53,7 @@ "defaultAuthentication": { "authenticationType": "AMAZON_COGNITO_USER_POOLS", "userPoolConfig": { - "userPoolId": "authfitnesstracker6b0fc1196b0fc119" + "userPoolId": "authfitnesstracker9ceb2e7c9ceb2e7c" } } } @@ -76,7 +76,7 @@ "UserPoolId" ], "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119" + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" }, { "attributes": [ @@ -91,7 +91,7 @@ } }, "auth": { - "fitnesstracker6b0fc1196b0fc119": { + "fitnesstracker9ceb2e7c9ceb2e7c": { "customAuth": false, "dependsOn": [ { @@ -100,7 +100,7 @@ "Name" ], "category": "function", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "triggerProvider": "Cognito" } ], @@ -135,7 +135,7 @@ "IdentityPoolId" ], "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119" + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" } ], "providerPlugin": "awscloudformation", @@ -151,13 +151,13 @@ "UserPoolId" ], "category": "auth", - "resourceName": "fitnesstracker6b0fc1196b0fc119" + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" } ], "providerPlugin": "awscloudformation", "service": "Lambda" }, - "fitnesstracker6b0fc1196b0fc119PreSignup": { + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup": { "build": true, "providerPlugin": "awscloudformation", "service": "Lambda" @@ -194,27 +194,27 @@ } ] }, - "AMPLIFY_function_fitnesstracker6b0fc1196b0fc119PreSignup_DOMAINALLOWLIST": { + "AMPLIFY_function_fitnesstracker9ceb2e7c9ceb2e7cPreSignup_DOMAINALLOWLIST": { "usedBy": [ { "category": "function", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup" + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" } ] }, - "AMPLIFY_function_fitnesstracker6b0fc1196b0fc119PreSignup_deploymentBucketName": { + "AMPLIFY_function_fitnesstracker9ceb2e7c9ceb2e7cPreSignup_deploymentBucketName": { "usedBy": [ { "category": "function", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup" + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" } ] }, - "AMPLIFY_function_fitnesstracker6b0fc1196b0fc119PreSignup_s3Key": { + "AMPLIFY_function_fitnesstracker9ceb2e7c9ceb2e7cPreSignup_s3Key": { "usedBy": [ { "category": "function", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup" + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" } ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/admin/admin-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/admin/admin-cloudformation-template.json index 2dbe7e47d6b..aaa8618655d 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/admin/admin-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/admin/admin-cloudformation-template.json @@ -16,9 +16,9 @@ "s3Key": { "Type": "String" }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } }, "Conditions": { @@ -74,8 +74,8 @@ "REGION": { "Ref": "AWS::Region" }, - "AUTH_FITNESSTRACKER6B0FC1196B0FC119_USERPOOLID": { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": { + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } } }, @@ -96,12 +96,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRole8a95290d", + "fitnesstrackerLambdaRole64f55d16", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRole8a95290d", + "fitnesstrackerLambdaRole64f55d16", "-", { "Ref": "env" @@ -220,7 +220,7 @@ }, ":userpool/", { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } ] ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/admin/function-parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/admin/function-parameters.json index bbf9b6e174e..c3c652077d2 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/admin/function-parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/admin/function-parameters.json @@ -1,7 +1,7 @@ { "permissions": { "auth": { - "fitnesstracker6b0fc1196b0fc119": [ + "fitnesstracker9ceb2e7c9ceb2e7c": [ "read" ] } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/parameters.json deleted file mode 100644 index 0d5ce52faf8..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/parameters.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "modules": "email-filter-allowlist", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup" -} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/amplify.state b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/amplify.state similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/amplify.state rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/amplify.state diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/custom-policies.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/custom-policies.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/custom-policies.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/custom-policies.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json similarity index 95% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json index c0cf3b931f5..04a3c261a89 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json @@ -71,12 +71,12 @@ "FunctionName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker6b0fc1196b0fc119PreSignup", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", { "Fn::Join": [ "", [ - "fitnesstracker6b0fc1196b0fc119PreSignup", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "-", { "Ref": "env" @@ -129,12 +129,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker6b0fc1196b0fc119PreSignup", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", { "Fn::Join": [ "", [ - "fitnesstracker6b0fc1196b0fc119PreSignup", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/function-parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/function-parameters.json similarity index 61% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/function-parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/function-parameters.json index bc563179c95..911d754ad38 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/function-parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/function-parameters.json @@ -3,14 +3,14 @@ "modules": [ "email-filter-allowlist" ], - "parentResource": "fitnesstracker6b0fc1196b0fc119", - "functionName": "fitnesstracker6b0fc1196b0fc119PreSignup", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup", + "parentResource": "fitnesstracker9ceb2e7c9ceb2e7c", + "functionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "parentStack": "auth", "triggerEnvs": "[]", "triggerDir": "/snapshot/amplify-cli/build/node_modules/@aws-amplify/amplify-category-auth/provider-utils/awscloudformation/triggers/PreSignup", "triggerTemplate": "PreSignup.json.ejs", "triggerEventPath": "PreSignup.event.json", - "roleName": "fitnesstracker6b0fc1196b0fc119PreSignup", + "roleName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "skipEdit": true } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/parameters.json new file mode 100644 index 00000000000..22e01f31ee2 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/parameters.json @@ -0,0 +1,4 @@ +{ + "modules": "email-filter-allowlist", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" +} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/email-filter-allowlist.js b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/email-filter-allowlist.js similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/email-filter-allowlist.js rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/email-filter-allowlist.js diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/event.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/event.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/event.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/event.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/index.js b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/index.js similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/index.js rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/index.js diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/package.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/package.json similarity index 78% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/package.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/package.json index 41f579f68ee..af2b3ccd67f 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/package.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/package.json @@ -1,5 +1,5 @@ { - "name": "fitnesstracker6b0fc1196b0fc119PreSignup", + "name": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "version": "2.0.0", "description": "Lambda function generated by Amplify", "main": "index.js", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/yarn.lock b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/yarn.lock similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker6b0fc1196b0fc119PreSignup/src/yarn.lock rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/yarn.lock diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/lognutrition/lognutrition-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/lognutrition/lognutrition-cloudformation-template.json index fd10c7f0ba5..e1789ef2c20 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/lognutrition/lognutrition-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/lognutrition/lognutrition-cloudformation-template.json @@ -122,12 +122,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRolee7dd41c6", + "fitnesstrackerLambdaRole8dc6052c", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRolee7dd41c6", + "fitnesstrackerLambdaRole8dc6052c", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/types/amplify-dependent-resources-ref.d.ts b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/types/amplify-dependent-resources-ref.d.ts index 6f55222ff36..378b7faee9a 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/types/amplify-dependent-resources-ref.d.ts +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/types/amplify-dependent-resources-ref.d.ts @@ -17,7 +17,7 @@ export type AmplifyDependentResourcesAttributes = { } }, "auth": { - "fitnesstracker6b0fc1196b0fc119": { + "fitnesstracker9ceb2e7c9ceb2e7c": { "AppClientID": "string", "AppClientIDWeb": "string", "IdentityPoolId": "string", @@ -38,7 +38,7 @@ export type AmplifyDependentResourcesAttributes = { "Name": "string", "Region": "string" }, - "fitnesstracker6b0fc1196b0fc119PreSignup": { + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup": { "Arn": "string", "LambdaExecutionRole": "string", "LambdaExecutionRoleArn": "string", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/team-provider-info.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/team-provider-info.json index 93402c3697a..c471cdfb02c 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/team-provider-info.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/team-provider-info.json @@ -1,36 +1,36 @@ { "main": { "awscloudformation": { - "AuthRoleName": "amplify-fitnesstracker-main-0683c-authRole", - "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-0683c-unauthRole", - "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-0683c-authRole", + "AuthRoleName": "amplify-fitnesstracker-main-6fc9a-authRole", + "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole", + "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole", "Region": "us-east-1", - "DeploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "UnauthRoleName": "amplify-fitnesstracker-main-0683c-unauthRole", - "StackName": "amplify-fitnesstracker-main-0683c", - "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-0683c/8ef87630-1a5b-11f1-84f6-12153bdc35f9", + "DeploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "UnauthRoleName": "amplify-fitnesstracker-main-6fc9a-unauthRole", + "StackName": "amplify-fitnesstracker-main-6fc9a", + "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a/d1ee9bf0-2590-11f1-8e36-1220ebfe67af", "AmplifyAppId": "fitnesstracker", - "APIGatewayAuthURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", - "AuthTriggerTemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json" + "APIGatewayAuthURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", + "AuthTriggerTemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json" }, "categories": { "auth": { - "fitnesstracker6b0fc1196b0fc119": {}, + "fitnesstracker9ceb2e7c9ceb2e7c": {}, "userPoolGroups": {} }, "function": { - "fitnesstracker6b0fc1196b0fc119PreSignup": { + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup": { "DOMAINALLOWLIST": "amazon.com", - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/fitnesstracker6b0fc1196b0fc119PreSignup-555a623867446f4a3843-build.zip" + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip" }, "lognutrition": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip" }, "admin": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/admin-536f797874787247392f-build.zip" + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/admin-765632787437744e386e-build.zip" } }, "api": { diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataAmplifyTableManagerNestedStackA-1A2OIOGDUJDM8.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataAmplifyTableManagerNestedStackA-1A2OIOGDUJDM8.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.outputs.json new file mode 100644 index 00000000000..163e9b73460 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.outputs.json @@ -0,0 +1,6 @@ +[ + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent9609CD96Arn", + "OutputValue": "arn:aws:lambda:us-east-1:123456789012:function:amplify-fitnesstracker-ge-TableManagerCustomProvid-533GcbPIs8Jk" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.parameters.json new file mode 100644 index 00000000000..2874d152002 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.parameters.json @@ -0,0 +1,6 @@ +[ + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId", + "ParameterValue": "uhg6hv7zmzav5doaroa4tocwv4" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataAmplifyTableManagerNestedStackA-1A2OIOGDUJDM8.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.template.json similarity index 92% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataAmplifyTableManagerNestedStackA-1A2OIOGDUJDM8.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.template.json index 674975d4a97..1e57eb1dcab 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataAmplifyTableManagerNestedStackA-1A2OIOGDUJDM8.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.template.json @@ -54,7 +54,7 @@ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/*-${apiId}-${envName}", { "apiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "envName": "NONE" } @@ -64,7 +64,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tableName}", { - "tableName": "WorkoutProgram-2aikutabnvbuhlzmh4mvkg3eji-main" + "tableName": "WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main" } ] }, @@ -72,7 +72,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tableName}", { - "tableName": "Exercise-2aikutabnvbuhlzmh4mvkg3eji-main" + "tableName": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main" } ] }, @@ -80,7 +80,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tableName}", { - "tableName": "Meal-2aikutabnvbuhlzmh4mvkg3eji-main" + "tableName": "Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main" } ] } @@ -126,7 +126,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/AmplifyTableManager/AmplifyManagedTableIsCompleteRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/AmplifyManagedTableIsCompleteRole/Resource" } }, "AmplifyManagedTableOnEventRoleB4E71DEA": { @@ -183,7 +183,7 @@ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/*-${apiId}-${envName}", { "apiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "envName": "NONE" } @@ -193,7 +193,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tableName}", { - "tableName": "WorkoutProgram-2aikutabnvbuhlzmh4mvkg3eji-main" + "tableName": "WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main" } ] }, @@ -201,7 +201,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tableName}", { - "tableName": "Exercise-2aikutabnvbuhlzmh4mvkg3eji-main" + "tableName": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main" } ] }, @@ -209,7 +209,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tableName}", { - "tableName": "Meal-2aikutabnvbuhlzmh4mvkg3eji-main" + "tableName": "Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main" } ] } @@ -255,7 +255,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/AmplifyTableManager/AmplifyManagedTableOnEventRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/AmplifyManagedTableOnEventRole/Resource" } }, "AmplifyManagedTableOnEventRoleDefaultPolicyF6DABCB6": { @@ -281,7 +281,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/AmplifyTableManager/AmplifyManagedTableOnEventRole/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/AmplifyManagedTableOnEventRole/DefaultPolicy/Resource" } }, "TableManagerCustomProviderframeworkonEvent1DFC2ECC": { @@ -293,7 +293,7 @@ }, "S3Key": "f2c5bec0e463cae18d0bf683be5923ae6bd676a06af1a994bdfa076a66ac07d6.zip" }, - "Description": "AmplifyManagedTable - onEvent (amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/AmplifyTableManager/TableManagerCustomProvider)", + "Description": "AmplifyManagedTable - onEvent (amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/TableManagerCustomProvider)", "Environment": { "Variables": { "WAITER_STATE_MACHINE_ARN": { @@ -338,7 +338,7 @@ "AmplifyManagedTableOnEventRoleB4E71DEA" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/AmplifyTableManager/TableManagerCustomProvider/framework-onEvent/Resource", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/TableManagerCustomProvider/framework-onEvent/Resource", "aws:asset:path": "asset.f2c5bec0e463cae18d0bf683be5923ae6bd676a06af1a994bdfa076a66ac07d6", "aws:asset:is-bundled": false, "aws:asset:property": "Code" @@ -353,7 +353,7 @@ }, "S3Key": "f2c5bec0e463cae18d0bf683be5923ae6bd676a06af1a994bdfa076a66ac07d6.zip" }, - "Description": "AmplifyManagedTable - isComplete (amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/AmplifyTableManager/TableManagerCustomProvider)", + "Description": "AmplifyManagedTable - isComplete (amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/TableManagerCustomProvider)", "Handler": "amplify-table-manager-handler.isComplete", "Role": { "Fn::GetAtt": [ @@ -390,7 +390,7 @@ "AmplifyManagedTableIsCompleteRoleF825222C" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/AmplifyTableManager/TableManagerCustomProvider/framework-isComplete/Resource", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/TableManagerCustomProvider/framework-isComplete/Resource", "aws:asset:path": "asset.f2c5bec0e463cae18d0bf683be5923ae6bd676a06af1a994bdfa076a66ac07d6", "aws:asset:is-bundled": false, "aws:asset:property": "Code" @@ -435,7 +435,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/AmplifyTableManager/AmplifyTableWaiterStateMachine/Role/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/AmplifyTableWaiterStateMachine/Role/Resource" } }, "AmplifyTableWaiterStateMachineRoleDefaultPolicy89F3836A": { @@ -480,7 +480,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/AmplifyTableManager/AmplifyTableWaiterStateMachine/Role/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/AmplifyTableWaiterStateMachine/Role/DefaultPolicy/Resource" } }, "AmplifyTableWaiterStateMachine060600BC": { @@ -513,16 +513,16 @@ "AmplifyTableWaiterStateMachineRole470BE899" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/AmplifyTableManager/AmplifyTableWaiterStateMachine/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/AmplifyTableWaiterStateMachine/Resource" } }, "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/zWNyw6CMBBFv4V9GXm4cCsmLo2BDyBDGclAaROmSEzDvxtAV+fcnMXNIDunkES4SKzbITbcQHiQeGorj3pQuEgdGEcIpTOkbi+78+kM6882D1uVwbFpEcJ9ttqzs1v7+6okr1GEvMB1g5IcilkP5AsUWlVJ4uZJk9pr5bFj2+1nv7Aq61qCXk7vLIP0AknUC3M8zdbzSFAe/ALgt1g4zwAAAA==" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/zWNQQ6CMBBFz8K+jAgs3IqJS2PgAGRoR1IobcIUiWl6dwPo6r2ft/g55GUJWYIrp1KNqdEdhAexJ9V4lKPAldugcYJQO0Pi9rI7n85o+dnmYVEYnDqFEO6LlV47u7W/R8FFi8zkGa4bBBdQLXIkXyFTFDWxW2ZJYq+Nx17bfj/7hSisUwQDn955DucLZMnAWqfzYr2eCOqDX96JKODPAAAA" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/AmplifyTableManager/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -794,12 +794,12 @@ } }, "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { "Type": "String" } }, "Outputs": { - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent6EDC1D70Arn": { + "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent9609CD96Arn": { "Value": { "Fn::GetAtt": [ "TableManagerCustomProviderframeworkonEvent1DFC2ECC", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataConnectionStackNestedStackConne-1PZTW5BMDQ740.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataConnectionStackNestedStackConne-1PZTW5BMDQ740.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-auth179371D7-T5KTLQB5RTR1.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.outputs.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-auth179371D7-T5KTLQB5RTR1.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.outputs.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.parameters.json new file mode 100644 index 00000000000..a0c53ba02c5 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.parameters.json @@ -0,0 +1,30 @@ +[ + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name", + "ParameterValue": "NONE_DS" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseNestedStackExerciseNestedStackResourceC9DAC2F3Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseTableECDBC610TableArn", + "ParameterValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId", + "ParameterValue": "uhg6hv7zmzav5doaroa4tocwv4" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseNestedStackExerciseNestedStackResourceC9DAC2F3Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseDataSourceDCCBFD77Name", + "ParameterValue": "ExerciseTable" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref", + "ParameterValue": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataConnectionStackNestedStackConne-1PZTW5BMDQ740.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.template.json similarity index 80% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataConnectionStackNestedStackConne-1PZTW5BMDQ740.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.template.json index 84e6e9fc44e..46466c82645 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataConnectionStackNestedStackConne-1PZTW5BMDQ740.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.template.json @@ -4,10 +4,10 @@ "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "WorkoutProgramexercisesauth0Function", @@ -17,17 +17,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/ConnectionStack/WorkoutProgramexercisesauth0Function/WorkoutProgramexercisesauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/ConnectionStack/WorkoutProgramexercisesauth0Function/WorkoutProgramexercisesauth0Function.AppSyncFunction" } }, "WorkoutProgramExercisesDataResolverFnWorkoutProgramExercisesDataResolverFnAppSyncFunctionA9FFE7A3": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseNestedStackExerciseNestedStackResource558D738COutputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseExerciseDataSource6949CF09Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseNestedStackExerciseNestedStackResourceC9DAC2F3Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseDataSourceDCCBFD77Name" }, "FunctionVersion": "2018-05-29", "Name": "WorkoutProgramExercisesDataResolverFn", @@ -39,14 +39,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/ConnectionStack/WorkoutProgramExercisesDataResolverFn/WorkoutProgramExercisesDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/ConnectionStack/WorkoutProgramExercisesDataResolverFn/WorkoutProgramExercisesDataResolverFn.AppSyncFunction" } }, "WorkoutProgramexercisesResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "exercises", "Kind": "PIPELINE", @@ -72,7 +72,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"WorkoutProgram\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"exercises\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -88,7 +88,7 @@ "Fn::Split": [ ":", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseNestedStackExerciseNestedStackResource558D738COutputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseExerciseTable318B1DEBTableArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseNestedStackExerciseNestedStackResourceC9DAC2F3Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseTableECDBC610TableArn" } ] } @@ -108,7 +108,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -120,11 +120,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -134,16 +134,16 @@ "TypeName": "WorkoutProgram" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/ConnectionStack/workoutProgramExercisesResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/ConnectionStack/workoutProgramExercisesResolver" } }, "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/yXMsQ6CMBCA4WdhLycUB1chcXSAByBnOUgBr6TXQgzh3Q06ffmXX4O+5pAluElquimd7Qv2J0mgrgloJoWbtLsULYpQELifKCmgjGaiUKKQwmWRDxvYq54fkU2wjivHvR2ixzNU1XNN4uaV/HGo36MJOFgeDsWuIxjlsmoN+Q2yZBRrUx852DdB/fcLM5uzFKcAAAA=" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/yXMsQ6CMBCA4WdhLycWBlchcXSAByBnOUgBr6TXQgzh3Q06ffmXX4MuCsgS3CQ13ZTO9gX7kyRQ1wQ0k8JN2l3yFkUoCNxPlORQRjNRKFFI4bLIhw3sVc+PyCZYx5Xj3g7R4xmq6rkmcfNK/jjU79EEHCwPh2LXEYxyWbWG6w2yZBRrUx852DdB/fcLf5ddvqcAAAA=" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/ConnectionStack/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/ConnectionStack/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -415,25 +415,25 @@ } }, "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseNestedStackExerciseNestedStackResource558D738COutputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseExerciseDataSource6949CF09Name": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseNestedStackExerciseNestedStackResourceC9DAC2F3Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseDataSourceDCCBFD77Name": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseNestedStackExerciseNestedStackResource558D738COutputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseExerciseTable318B1DEBTableArn": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseNestedStackExerciseNestedStackResourceC9DAC2F3Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseTableECDBC610TableArn": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { "Type": "String" } } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataExerciseNestedStackExerciseNest-GSLDGK4G6DEO.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataExerciseNestedStackExerciseNest-GSLDGK4G6DEO.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.outputs.json new file mode 100644 index 00000000000..bc97b58fab7 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.outputs.json @@ -0,0 +1,22 @@ +[ + { + "OutputKey": "GetAttExerciseTableName", + "OutputValue": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main", + "Description": "Your DynamoDB table name.", + "ExportName": "uhg6hv7zmzav5doaroa4tocwv4:GetAtt:ExerciseTable:Name" + }, + { + "OutputKey": "GetAttExerciseTableStreamArn", + "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main/stream/2026-03-22T02:14:28.559", + "Description": "Your DynamoDB table StreamArn.", + "ExportName": "uhg6hv7zmzav5doaroa4tocwv4:GetAtt:ExerciseTable:StreamArn" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseDataSourceDCCBFD77Name", + "OutputValue": "ExerciseTable" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseTableECDBC610TableArn", + "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.parameters.json new file mode 100644 index 00000000000..38cdcad28a9 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.parameters.json @@ -0,0 +1,46 @@ +[ + { + "ParameterKey": "DynamoDBModelTableReadIOPS", + "ParameterValue": "5" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + }, + { + "ParameterKey": "DynamoDBEnableServerSideEncryption", + "ParameterValue": "true" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" + }, + { + "ParameterKey": "DynamoDBEnablePointInTimeRecovery", + "ParameterValue": "false" + }, + { + "ParameterKey": "DynamoDBBillingMode", + "ParameterValue": "PAY_PER_REQUEST" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name", + "ParameterValue": "NONE_DS" + }, + { + "ParameterKey": "DynamoDBModelTableWriteIOPS", + "ParameterValue": "5" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId", + "ParameterValue": "uhg6hv7zmzav5doaroa4tocwv4" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183", + "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:amplify-fitnesstracker-ge-TableManagerCustomProvid-533GcbPIs8Jk" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref", + "ParameterValue": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataExerciseNestedStackExerciseNest-GSLDGK4G6DEO.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.template.json similarity index 85% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataExerciseNestedStackExerciseNest-GSLDGK4G6DEO.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.template.json index 37c0c5366f5..51d8ce95a98 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataExerciseNestedStackExerciseNest-GSLDGK4G6DEO.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.template.json @@ -37,22 +37,22 @@ ], "Description": "Enable server side encryption powered by KMS." }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource9E5C3FE8Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerTableMana3F678B61": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { "Type": "String" } }, @@ -353,9 +353,9 @@ "Type": "Custom::ImportedAmplifyDynamoDBTable", "Properties": { "ServiceToken": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource9E5C3FE8Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerTableMana3F678B61" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183" }, - "tableName": "Exercise-2aikutabnvbuhlzmh4mvkg3eji-main", + "tableName": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main", "attributeDefinitions": [ { "attributeName": "id", @@ -444,7 +444,7 @@ "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/ExerciseTable/Default/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/ExerciseTable/Default/Default" } }, "ExerciseIAMRole28D09384": { @@ -487,7 +487,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}", { - "tablename": "Exercise-2aikutabnvbuhlzmh4mvkg3eji-main" + "tablename": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main" } ] }, @@ -495,7 +495,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}/*", { - "tablename": "Exercise-2aikutabnvbuhlzmh4mvkg3eji-main" + "tablename": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main" } ] } @@ -513,7 +513,7 @@ [ "ExerciseIAMRoled0d0e6-", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "-NONE" ] @@ -543,14 +543,14 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/ExerciseIAMRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/ExerciseIAMRole/Resource" } }, "ExerciseDataSource": { "Type": "AWS::AppSync::DataSource", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DynamoDBConfig": { "AwsRegion": { @@ -596,17 +596,17 @@ "ExerciseIAMRole28D09384" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/ExerciseDataSource/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/ExerciseDataSource/Resource" } }, "QuerygetExerciseauth0FunctionQuerygetExerciseauth0FunctionAppSyncFunction0AC70BDB": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerygetExerciseauth0Function", @@ -616,17 +616,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/QuerygetExerciseauth0Function/QuerygetExerciseauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/QuerygetExerciseauth0Function/QuerygetExerciseauth0Function.AppSyncFunction" } }, "QuerygetExercisepostAuth0FunctionQuerygetExercisepostAuth0FunctionAppSyncFunction6287EBF7": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerygetExercisepostAuth0Function", @@ -636,14 +636,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/QuerygetExercisepostAuth0Function/QuerygetExercisepostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/QuerygetExercisepostAuth0Function/QuerygetExercisepostAuth0Function.AppSyncFunction" } }, "QueryGetExerciseDataResolverFnQueryGetExerciseDataResolverFnAppSyncFunction73149704": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -664,14 +664,14 @@ "ExerciseDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/QueryGetExerciseDataResolverFn/QueryGetExerciseDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/QueryGetExerciseDataResolverFn/QueryGetExerciseDataResolverFn.AppSyncFunction" } }, "GetExerciseResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "getExercise", "Kind": "PIPELINE", @@ -703,7 +703,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Query\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"getExercise\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -742,7 +742,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -754,11 +754,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -768,17 +768,17 @@ "TypeName": "Query" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/queryGetExerciseResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/queryGetExerciseResolver" } }, "QuerylistExercisesauth0FunctionQuerylistExercisesauth0FunctionAppSyncFunction51A6AD03": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerylistExercisesauth0Function", @@ -788,17 +788,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/QuerylistExercisesauth0Function/QuerylistExercisesauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/QuerylistExercisesauth0Function/QuerylistExercisesauth0Function.AppSyncFunction" } }, "QuerylistExercisespostAuth0FunctionQuerylistExercisespostAuth0FunctionAppSyncFunction0E7A24F2": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerylistExercisespostAuth0Function", @@ -808,14 +808,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/QuerylistExercisespostAuth0Function/QuerylistExercisespostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/QuerylistExercisespostAuth0Function/QuerylistExercisespostAuth0Function.AppSyncFunction" } }, "QueryListExercisesDataResolverFnQueryListExercisesDataResolverFnAppSyncFunction0818DDCE": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -836,14 +836,14 @@ "ExerciseDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/QueryListExercisesDataResolverFn/QueryListExercisesDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/QueryListExercisesDataResolverFn/QueryListExercisesDataResolverFn.AppSyncFunction" } }, "ListExerciseResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "listExercises", "Kind": "PIPELINE", @@ -875,7 +875,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Query\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"listExercises\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -914,7 +914,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -926,11 +926,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -940,17 +940,17 @@ "TypeName": "Query" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/queryListExercisesResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/queryListExercisesResolver" } }, "MutationcreateExerciseinit0FunctionMutationcreateExerciseinit0FunctionAppSyncFunction007007C2": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateExerciseinit0Function", @@ -960,17 +960,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/MutationcreateExerciseinit0Function/MutationcreateExerciseinit0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationcreateExerciseinit0Function/MutationcreateExerciseinit0Function.AppSyncFunction" } }, "MutationcreateExerciseauth0FunctionMutationcreateExerciseauth0FunctionAppSyncFunction06E6FB6C": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateExerciseauth0Function", @@ -980,17 +980,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/MutationcreateExerciseauth0Function/MutationcreateExerciseauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationcreateExerciseauth0Function/MutationcreateExerciseauth0Function.AppSyncFunction" } }, "MutationcreateExercisepostAuth0FunctionMutationcreateExercisepostAuth0FunctionAppSyncFunctionFAC86A10": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateExercisepostAuth0Function", @@ -1000,14 +1000,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/MutationcreateExercisepostAuth0Function/MutationcreateExercisepostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationcreateExercisepostAuth0Function/MutationcreateExercisepostAuth0Function.AppSyncFunction" } }, "MutationCreateExerciseDataResolverFnMutationCreateExerciseDataResolverFnAppSyncFunction9F8EC7E0": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1028,14 +1028,14 @@ "ExerciseDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/MutationCreateExerciseDataResolverFn/MutationCreateExerciseDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationCreateExerciseDataResolverFn/MutationCreateExerciseDataResolverFn.AppSyncFunction" } }, "CreateExerciseResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "createExercise", "Kind": "PIPELINE", @@ -1073,7 +1073,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"createExercise\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1112,7 +1112,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1124,11 +1124,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1138,17 +1138,17 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/mutationCreateExerciseResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/mutationCreateExerciseResolver" } }, "MutationupdateExerciseinit0FunctionMutationupdateExerciseinit0FunctionAppSyncFunction2DE5E607": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationupdateExerciseinit0Function", @@ -1158,14 +1158,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/MutationupdateExerciseinit0Function/MutationupdateExerciseinit0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationupdateExerciseinit0Function/MutationupdateExerciseinit0Function.AppSyncFunction" } }, "MutationupdateExerciseauth0FunctionMutationupdateExerciseauth0FunctionAppSyncFunction2CE5BE66": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1186,17 +1186,17 @@ "ExerciseDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/MutationupdateExerciseauth0Function/MutationupdateExerciseauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationupdateExerciseauth0Function/MutationupdateExerciseauth0Function.AppSyncFunction" } }, "MutationupdateExercisepostAuth0FunctionMutationupdateExercisepostAuth0FunctionAppSyncFunction25628A67": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationupdateExercisepostAuth0Function", @@ -1206,14 +1206,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/MutationupdateExercisepostAuth0Function/MutationupdateExercisepostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationupdateExercisepostAuth0Function/MutationupdateExercisepostAuth0Function.AppSyncFunction" } }, "MutationUpdateExerciseDataResolverFnMutationUpdateExerciseDataResolverFnAppSyncFunctionD0CB335C": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1234,14 +1234,14 @@ "ExerciseDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/MutationUpdateExerciseDataResolverFn/MutationUpdateExerciseDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationUpdateExerciseDataResolverFn/MutationUpdateExerciseDataResolverFn.AppSyncFunction" } }, "UpdateExerciseResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "updateExercise", "Kind": "PIPELINE", @@ -1279,7 +1279,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"updateExercise\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1318,7 +1318,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1330,11 +1330,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1344,14 +1344,14 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/mutationUpdateExerciseResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/mutationUpdateExerciseResolver" } }, "MutationdeleteExerciseauth0FunctionMutationdeleteExerciseauth0FunctionAppSyncFunctionC2D9DFF8": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1372,17 +1372,17 @@ "ExerciseDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/MutationdeleteExerciseauth0Function/MutationdeleteExerciseauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationdeleteExerciseauth0Function/MutationdeleteExerciseauth0Function.AppSyncFunction" } }, "MutationdeleteExercisepostAuth0FunctionMutationdeleteExercisepostAuth0FunctionAppSyncFunction990C3B7B": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationdeleteExercisepostAuth0Function", @@ -1392,14 +1392,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/MutationdeleteExercisepostAuth0Function/MutationdeleteExercisepostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationdeleteExercisepostAuth0Function/MutationdeleteExercisepostAuth0Function.AppSyncFunction" } }, "MutationDeleteExerciseDataResolverFnMutationDeleteExerciseDataResolverFnAppSyncFunction91D88DD6": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1420,14 +1420,14 @@ "ExerciseDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/MutationDeleteExerciseDataResolverFn/MutationDeleteExerciseDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationDeleteExerciseDataResolverFn/MutationDeleteExerciseDataResolverFn.AppSyncFunction" } }, "DeleteExerciseResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "deleteExercise", "Kind": "PIPELINE", @@ -1459,7 +1459,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"deleteExercise\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1498,7 +1498,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1510,11 +1510,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1524,17 +1524,17 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/mutationDeleteExerciseResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/mutationDeleteExerciseResolver" } }, "SubscriptiononCreateExerciseauth0FunctionSubscriptiononCreateExerciseauth0FunctionAppSyncFunctionC50A81C7": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononCreateExerciseauth0Function", @@ -1544,17 +1544,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/SubscriptiononCreateExerciseauth0Function/SubscriptiononCreateExerciseauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptiononCreateExerciseauth0Function/SubscriptiononCreateExerciseauth0Function.AppSyncFunction" } }, "SubscriptiononCreateExercisepostAuth0FunctionSubscriptiononCreateExercisepostAuth0FunctionAppSyncFunction5A196A51": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononCreateExercisepostAuth0Function", @@ -1564,17 +1564,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/SubscriptiononCreateExercisepostAuth0Function/SubscriptiononCreateExercisepostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptiononCreateExercisepostAuth0Function/SubscriptiononCreateExercisepostAuth0Function.AppSyncFunction" } }, "SubscriptionOnCreateExerciseDataResolverFnSubscriptionOnCreateExerciseDataResolverFnAppSyncFunctionAB5DF306": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnCreateExerciseDataResolverFn", @@ -1586,14 +1586,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/SubscriptionOnCreateExerciseDataResolverFn/SubscriptionOnCreateExerciseDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptionOnCreateExerciseDataResolverFn/SubscriptionOnCreateExerciseDataResolverFn.AppSyncFunction" } }, "SubscriptiononCreateExerciseResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "onCreateExercise", "Kind": "PIPELINE", @@ -1625,7 +1625,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onCreateExercise\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1637,7 +1637,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1649,11 +1649,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1663,17 +1663,17 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/subscriptionOnCreateExerciseResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/subscriptionOnCreateExerciseResolver" } }, "SubscriptiononUpdateExerciseauth0FunctionSubscriptiononUpdateExerciseauth0FunctionAppSyncFunction9193D2A0": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononUpdateExerciseauth0Function", @@ -1683,17 +1683,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/SubscriptiononUpdateExerciseauth0Function/SubscriptiononUpdateExerciseauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptiononUpdateExerciseauth0Function/SubscriptiononUpdateExerciseauth0Function.AppSyncFunction" } }, "SubscriptiononUpdateExercisepostAuth0FunctionSubscriptiononUpdateExercisepostAuth0FunctionAppSyncFunctionDE028CEA": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononUpdateExercisepostAuth0Function", @@ -1703,17 +1703,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/SubscriptiononUpdateExercisepostAuth0Function/SubscriptiononUpdateExercisepostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptiononUpdateExercisepostAuth0Function/SubscriptiononUpdateExercisepostAuth0Function.AppSyncFunction" } }, "SubscriptionOnUpdateExerciseDataResolverFnSubscriptionOnUpdateExerciseDataResolverFnAppSyncFunctionA7AA88CA": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnUpdateExerciseDataResolverFn", @@ -1725,14 +1725,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/SubscriptionOnUpdateExerciseDataResolverFn/SubscriptionOnUpdateExerciseDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptionOnUpdateExerciseDataResolverFn/SubscriptionOnUpdateExerciseDataResolverFn.AppSyncFunction" } }, "SubscriptiononUpdateExerciseResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "onUpdateExercise", "Kind": "PIPELINE", @@ -1764,7 +1764,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onUpdateExercise\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1776,7 +1776,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1788,11 +1788,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1802,17 +1802,17 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/subscriptionOnUpdateExerciseResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/subscriptionOnUpdateExerciseResolver" } }, "SubscriptiononDeleteExerciseauth0FunctionSubscriptiononDeleteExerciseauth0FunctionAppSyncFunction54DF160B": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononDeleteExerciseauth0Function", @@ -1822,17 +1822,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/SubscriptiononDeleteExerciseauth0Function/SubscriptiononDeleteExerciseauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptiononDeleteExerciseauth0Function/SubscriptiononDeleteExerciseauth0Function.AppSyncFunction" } }, "SubscriptiononDeleteExercisepostAuth0FunctionSubscriptiononDeleteExercisepostAuth0FunctionAppSyncFunctionAF03921E": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononDeleteExercisepostAuth0Function", @@ -1842,17 +1842,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/SubscriptiononDeleteExercisepostAuth0Function/SubscriptiononDeleteExercisepostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptiononDeleteExercisepostAuth0Function/SubscriptiononDeleteExercisepostAuth0Function.AppSyncFunction" } }, "SubscriptionOnDeleteExerciseDataResolverFnSubscriptionOnDeleteExerciseDataResolverFnAppSyncFunctionA2A2A8C9": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnDeleteExerciseDataResolverFn", @@ -1864,14 +1864,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/SubscriptionOnDeleteExerciseDataResolverFn/SubscriptionOnDeleteExerciseDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptionOnDeleteExerciseDataResolverFn/SubscriptionOnDeleteExerciseDataResolverFn.AppSyncFunction" } }, "SubscriptiononDeleteExerciseResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "onDeleteExercise", "Kind": "PIPELINE", @@ -1903,7 +1903,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onDeleteExercise\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1915,7 +1915,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1927,11 +1927,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1941,17 +1941,17 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/subscriptionOnDeleteExerciseResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/subscriptionOnDeleteExerciseResolver" } }, "ExerciseOwnerDataResolverFnExerciseOwnerDataResolverFnAppSyncFunction8652EC02": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "ExerciseOwnerDataResolverFn", @@ -1963,14 +1963,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/ExerciseOwnerDataResolverFn/ExerciseOwnerDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/ExerciseOwnerDataResolverFn/ExerciseOwnerDataResolverFn.AppSyncFunction" } }, "ExerciseownerResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "owner", "Kind": "PIPELINE", @@ -1990,7 +1990,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Exercise\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"owner\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -2002,7 +2002,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -2014,11 +2014,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -2028,16 +2028,16 @@ "TypeName": "Exercise" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/exerciseOwnerResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/exerciseOwnerResolver" } }, "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/1WOwW6DMAyGn6X34LV0h11Xqh63CXavTGJQCjgodlpViHefoFOnnX5/8if7zyF/3cF2gzfJrOuy3tcwfZAouUrRdqZo+AsjDqQUFygCO68+sClJQoqWTJFEw/CHDT9nvMl5cnfGIbgavrHu6YBCxuMAUxn6hx16mg2Oo9zZwnRc9WN9RMXqefI/nRLbpUQRuPFtirg2+v3cXynORvZnFCEVeF/CyB4OyXakS4F5cT+TjknNuq4UW8/tbDg4gou8XPMcdm+w3VzE+ywmVj8QlI/8AXh83Gc2AQAA" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/1WOwW6DMAyGn6X31OtoD7uuoB63CXavTGJQCjgodlpViHefoFOnnX5/8if7zyA7HGC3wZtsreu2va9h+iBRcpWi7Uze8BdGHEgpLpAHdl59YFOShBQtmTyJhuEPG37OeJPz5O6MQ3A1fGPd0xGFjMcBpjL0Dzv0NBscR7mzhalY9aIuULF6nvxPp8R2KZEHbnybIq6Nfj/3V4qzkf0ZRUgF3pcwsodjsh3pUmBe3M+kY1KzrivF1nM7Gw6O4CIv1yyD1zfYbS7i/TYmVj8QlI/8AVayTVs2AQAA" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -2057,7 +2057,7 @@ ":", [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "GetAtt:ExerciseTable:StreamArn" ] @@ -2067,14 +2067,14 @@ }, "GetAttExerciseTableName": { "Description": "Your DynamoDB table name.", - "Value": "Exercise-2aikutabnvbuhlzmh4mvkg3eji-main", + "Value": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main", "Export": { "Name": { "Fn::Join": [ ":", [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "GetAtt:ExerciseTable:Name" ] @@ -2082,7 +2082,7 @@ } } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseExerciseDataSource6949CF09Name": { + "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseDataSourceDCCBFD77Name": { "Value": { "Fn::GetAtt": [ "ExerciseDataSource", @@ -2090,7 +2090,7 @@ ] } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseExerciseTable318B1DEBTableArn": { + "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseTableECDBC610TableArn": { "Value": { "Fn::GetAtt": [ "ExerciseTable", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataMealNestedStackMealNestedStackR-8W0VUDLMFHA1.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataMealNestedStackMealNestedStackR-8W0VUDLMFHA1.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.outputs.json new file mode 100644 index 00000000000..806d542aba6 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.outputs.json @@ -0,0 +1,18 @@ +[ + { + "OutputKey": "GetAttMealTableName", + "OutputValue": "Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main", + "Description": "Your DynamoDB table name.", + "ExportName": "uhg6hv7zmzav5doaroa4tocwv4:GetAtt:MealTable:Name" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataMealMealTableFD0BC2A7TableArn", + "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main" + }, + { + "OutputKey": "GetAttMealTableStreamArn", + "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main/stream/2026-03-22T02:14:27.982", + "Description": "Your DynamoDB table StreamArn.", + "ExportName": "uhg6hv7zmzav5doaroa4tocwv4:GetAtt:MealTable:StreamArn" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.parameters.json new file mode 100644 index 00000000000..38cdcad28a9 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.parameters.json @@ -0,0 +1,46 @@ +[ + { + "ParameterKey": "DynamoDBModelTableReadIOPS", + "ParameterValue": "5" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + }, + { + "ParameterKey": "DynamoDBEnableServerSideEncryption", + "ParameterValue": "true" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" + }, + { + "ParameterKey": "DynamoDBEnablePointInTimeRecovery", + "ParameterValue": "false" + }, + { + "ParameterKey": "DynamoDBBillingMode", + "ParameterValue": "PAY_PER_REQUEST" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name", + "ParameterValue": "NONE_DS" + }, + { + "ParameterKey": "DynamoDBModelTableWriteIOPS", + "ParameterValue": "5" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId", + "ParameterValue": "uhg6hv7zmzav5doaroa4tocwv4" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183", + "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:amplify-fitnesstracker-ge-TableManagerCustomProvid-533GcbPIs8Jk" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref", + "ParameterValue": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataMealNestedStackMealNestedStackR-8W0VUDLMFHA1.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.template.json similarity index 85% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataMealNestedStackMealNestedStackR-8W0VUDLMFHA1.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.template.json index 1d01befbf84..9a63657aa60 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataMealNestedStackMealNestedStackR-8W0VUDLMFHA1.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.template.json @@ -37,22 +37,22 @@ ], "Description": "Enable server side encryption powered by KMS." }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource9E5C3FE8Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerTableMana3F678B61": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { "Type": "String" } }, @@ -353,9 +353,9 @@ "Type": "Custom::ImportedAmplifyDynamoDBTable", "Properties": { "ServiceToken": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource9E5C3FE8Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerTableMana3F678B61" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183" }, - "tableName": "Meal-2aikutabnvbuhlzmh4mvkg3eji-main", + "tableName": "Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main", "attributeDefinitions": [ { "attributeName": "id", @@ -418,7 +418,7 @@ "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/MealTable/Default/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MealTable/Default/Default" } }, "MealIAMRoleEDE19E15": { @@ -461,7 +461,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}", { - "tablename": "Meal-2aikutabnvbuhlzmh4mvkg3eji-main" + "tablename": "Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main" } ] }, @@ -469,7 +469,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}/*", { - "tablename": "Meal-2aikutabnvbuhlzmh4mvkg3eji-main" + "tablename": "Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main" } ] } @@ -487,7 +487,7 @@ [ "MealIAMRole54b7fd-", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "-NONE" ] @@ -517,14 +517,14 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/MealIAMRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MealIAMRole/Resource" } }, "MealDataSource": { "Type": "AWS::AppSync::DataSource", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DynamoDBConfig": { "AwsRegion": { @@ -570,17 +570,17 @@ "MealIAMRoleEDE19E15" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/MealDataSource/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MealDataSource/Resource" } }, "QuerygetMealauth0FunctionQuerygetMealauth0FunctionAppSyncFunction3EC25F21": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerygetMealauth0Function", @@ -590,17 +590,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/QuerygetMealauth0Function/QuerygetMealauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/QuerygetMealauth0Function/QuerygetMealauth0Function.AppSyncFunction" } }, "QuerygetMealpostAuth0FunctionQuerygetMealpostAuth0FunctionAppSyncFunction9E0F196D": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerygetMealpostAuth0Function", @@ -610,14 +610,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/QuerygetMealpostAuth0Function/QuerygetMealpostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/QuerygetMealpostAuth0Function/QuerygetMealpostAuth0Function.AppSyncFunction" } }, "QueryGetMealDataResolverFnQueryGetMealDataResolverFnAppSyncFunction8B80E67B": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -638,14 +638,14 @@ "MealDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/QueryGetMealDataResolverFn/QueryGetMealDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/QueryGetMealDataResolverFn/QueryGetMealDataResolverFn.AppSyncFunction" } }, "GetMealResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "getMeal", "Kind": "PIPELINE", @@ -677,7 +677,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Query\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"getMeal\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -716,7 +716,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -728,11 +728,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -742,17 +742,17 @@ "TypeName": "Query" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/queryGetMealResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/queryGetMealResolver" } }, "QuerylistMealsauth0FunctionQuerylistMealsauth0FunctionAppSyncFunctionB47607B5": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerylistMealsauth0Function", @@ -762,17 +762,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/QuerylistMealsauth0Function/QuerylistMealsauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/QuerylistMealsauth0Function/QuerylistMealsauth0Function.AppSyncFunction" } }, "QuerylistMealspostAuth0FunctionQuerylistMealspostAuth0FunctionAppSyncFunction15CC850C": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerylistMealspostAuth0Function", @@ -782,14 +782,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/QuerylistMealspostAuth0Function/QuerylistMealspostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/QuerylistMealspostAuth0Function/QuerylistMealspostAuth0Function.AppSyncFunction" } }, "QueryListMealsDataResolverFnQueryListMealsDataResolverFnAppSyncFunction3EE87F58": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -810,14 +810,14 @@ "MealDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/QueryListMealsDataResolverFn/QueryListMealsDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/QueryListMealsDataResolverFn/QueryListMealsDataResolverFn.AppSyncFunction" } }, "ListMealResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "listMeals", "Kind": "PIPELINE", @@ -849,7 +849,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Query\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"listMeals\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -888,7 +888,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -900,11 +900,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -914,17 +914,17 @@ "TypeName": "Query" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/queryListMealsResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/queryListMealsResolver" } }, "MutationcreateMealinit0FunctionMutationcreateMealinit0FunctionAppSyncFunctionC8456643": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateMealinit0Function", @@ -934,17 +934,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/MutationcreateMealinit0Function/MutationcreateMealinit0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationcreateMealinit0Function/MutationcreateMealinit0Function.AppSyncFunction" } }, "MutationcreateMealauth0FunctionMutationcreateMealauth0FunctionAppSyncFunction746792DB": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateMealauth0Function", @@ -954,17 +954,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/MutationcreateMealauth0Function/MutationcreateMealauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationcreateMealauth0Function/MutationcreateMealauth0Function.AppSyncFunction" } }, "MutationcreateMealpostAuth0FunctionMutationcreateMealpostAuth0FunctionAppSyncFunctionF0FDFBD0": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateMealpostAuth0Function", @@ -974,14 +974,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/MutationcreateMealpostAuth0Function/MutationcreateMealpostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationcreateMealpostAuth0Function/MutationcreateMealpostAuth0Function.AppSyncFunction" } }, "MutationCreateMealDataResolverFnMutationCreateMealDataResolverFnAppSyncFunction3A7E3265": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1002,14 +1002,14 @@ "MealDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/MutationCreateMealDataResolverFn/MutationCreateMealDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationCreateMealDataResolverFn/MutationCreateMealDataResolverFn.AppSyncFunction" } }, "CreateMealResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "createMeal", "Kind": "PIPELINE", @@ -1047,7 +1047,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"createMeal\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1086,7 +1086,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1098,11 +1098,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1112,17 +1112,17 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/mutationCreateMealResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/mutationCreateMealResolver" } }, "MutationupdateMealinit0FunctionMutationupdateMealinit0FunctionAppSyncFunction80065D7F": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationupdateMealinit0Function", @@ -1132,14 +1132,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/MutationupdateMealinit0Function/MutationupdateMealinit0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationupdateMealinit0Function/MutationupdateMealinit0Function.AppSyncFunction" } }, "MutationupdateMealauth0FunctionMutationupdateMealauth0FunctionAppSyncFunctionEFC9C205": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1160,17 +1160,17 @@ "MealDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/MutationupdateMealauth0Function/MutationupdateMealauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationupdateMealauth0Function/MutationupdateMealauth0Function.AppSyncFunction" } }, "MutationupdateMealpostAuth0FunctionMutationupdateMealpostAuth0FunctionAppSyncFunction5B29DBED": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationupdateMealpostAuth0Function", @@ -1180,14 +1180,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/MutationupdateMealpostAuth0Function/MutationupdateMealpostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationupdateMealpostAuth0Function/MutationupdateMealpostAuth0Function.AppSyncFunction" } }, "MutationUpdateMealDataResolverFnMutationUpdateMealDataResolverFnAppSyncFunction7CE88037": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1208,14 +1208,14 @@ "MealDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/MutationUpdateMealDataResolverFn/MutationUpdateMealDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationUpdateMealDataResolverFn/MutationUpdateMealDataResolverFn.AppSyncFunction" } }, "UpdateMealResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "updateMeal", "Kind": "PIPELINE", @@ -1253,7 +1253,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"updateMeal\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1292,7 +1292,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1304,11 +1304,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1318,14 +1318,14 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/mutationUpdateMealResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/mutationUpdateMealResolver" } }, "MutationdeleteMealauth0FunctionMutationdeleteMealauth0FunctionAppSyncFunction5A3C8FCE": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1346,17 +1346,17 @@ "MealDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/MutationdeleteMealauth0Function/MutationdeleteMealauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationdeleteMealauth0Function/MutationdeleteMealauth0Function.AppSyncFunction" } }, "MutationdeleteMealpostAuth0FunctionMutationdeleteMealpostAuth0FunctionAppSyncFunctionC9BB36B8": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationdeleteMealpostAuth0Function", @@ -1366,14 +1366,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/MutationdeleteMealpostAuth0Function/MutationdeleteMealpostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationdeleteMealpostAuth0Function/MutationdeleteMealpostAuth0Function.AppSyncFunction" } }, "MutationDeleteMealDataResolverFnMutationDeleteMealDataResolverFnAppSyncFunctionB6415754": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1394,14 +1394,14 @@ "MealDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/MutationDeleteMealDataResolverFn/MutationDeleteMealDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationDeleteMealDataResolverFn/MutationDeleteMealDataResolverFn.AppSyncFunction" } }, "DeleteMealResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "deleteMeal", "Kind": "PIPELINE", @@ -1433,7 +1433,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"deleteMeal\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1472,7 +1472,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1484,11 +1484,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1498,17 +1498,17 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/mutationDeleteMealResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/mutationDeleteMealResolver" } }, "SubscriptiononCreateMealauth0FunctionSubscriptiononCreateMealauth0FunctionAppSyncFunction8AF26F94": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononCreateMealauth0Function", @@ -1518,17 +1518,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/SubscriptiononCreateMealauth0Function/SubscriptiononCreateMealauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptiononCreateMealauth0Function/SubscriptiononCreateMealauth0Function.AppSyncFunction" } }, "SubscriptiononCreateMealpostAuth0FunctionSubscriptiononCreateMealpostAuth0FunctionAppSyncFunction820A2BD2": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononCreateMealpostAuth0Function", @@ -1538,17 +1538,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/SubscriptiononCreateMealpostAuth0Function/SubscriptiononCreateMealpostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptiononCreateMealpostAuth0Function/SubscriptiononCreateMealpostAuth0Function.AppSyncFunction" } }, "SubscriptionOnCreateMealDataResolverFnSubscriptionOnCreateMealDataResolverFnAppSyncFunctionF1334F8F": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnCreateMealDataResolverFn", @@ -1560,14 +1560,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/SubscriptionOnCreateMealDataResolverFn/SubscriptionOnCreateMealDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptionOnCreateMealDataResolverFn/SubscriptionOnCreateMealDataResolverFn.AppSyncFunction" } }, "SubscriptiononCreateMealResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "onCreateMeal", "Kind": "PIPELINE", @@ -1599,7 +1599,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onCreateMeal\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1611,7 +1611,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1623,11 +1623,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1637,17 +1637,17 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/subscriptionOnCreateMealResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/subscriptionOnCreateMealResolver" } }, "SubscriptiononUpdateMealauth0FunctionSubscriptiononUpdateMealauth0FunctionAppSyncFunction2DF3B7A1": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononUpdateMealauth0Function", @@ -1657,17 +1657,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/SubscriptiononUpdateMealauth0Function/SubscriptiononUpdateMealauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptiononUpdateMealauth0Function/SubscriptiononUpdateMealauth0Function.AppSyncFunction" } }, "SubscriptiononUpdateMealpostAuth0FunctionSubscriptiononUpdateMealpostAuth0FunctionAppSyncFunction6DDD0917": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononUpdateMealpostAuth0Function", @@ -1677,17 +1677,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/SubscriptiononUpdateMealpostAuth0Function/SubscriptiononUpdateMealpostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptiononUpdateMealpostAuth0Function/SubscriptiononUpdateMealpostAuth0Function.AppSyncFunction" } }, "SubscriptionOnUpdateMealDataResolverFnSubscriptionOnUpdateMealDataResolverFnAppSyncFunction7E09A153": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnUpdateMealDataResolverFn", @@ -1699,14 +1699,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/SubscriptionOnUpdateMealDataResolverFn/SubscriptionOnUpdateMealDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptionOnUpdateMealDataResolverFn/SubscriptionOnUpdateMealDataResolverFn.AppSyncFunction" } }, "SubscriptiononUpdateMealResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "onUpdateMeal", "Kind": "PIPELINE", @@ -1738,7 +1738,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onUpdateMeal\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1750,7 +1750,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1762,11 +1762,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1776,17 +1776,17 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/subscriptionOnUpdateMealResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/subscriptionOnUpdateMealResolver" } }, "SubscriptiononDeleteMealauth0FunctionSubscriptiononDeleteMealauth0FunctionAppSyncFunctionE50EF48C": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononDeleteMealauth0Function", @@ -1796,17 +1796,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/SubscriptiononDeleteMealauth0Function/SubscriptiononDeleteMealauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptiononDeleteMealauth0Function/SubscriptiononDeleteMealauth0Function.AppSyncFunction" } }, "SubscriptiononDeleteMealpostAuth0FunctionSubscriptiononDeleteMealpostAuth0FunctionAppSyncFunction6FA10C5F": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononDeleteMealpostAuth0Function", @@ -1816,17 +1816,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/SubscriptiononDeleteMealpostAuth0Function/SubscriptiononDeleteMealpostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptiononDeleteMealpostAuth0Function/SubscriptiononDeleteMealpostAuth0Function.AppSyncFunction" } }, "SubscriptionOnDeleteMealDataResolverFnSubscriptionOnDeleteMealDataResolverFnAppSyncFunction0A2F61AD": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnDeleteMealDataResolverFn", @@ -1838,14 +1838,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/SubscriptionOnDeleteMealDataResolverFn/SubscriptionOnDeleteMealDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptionOnDeleteMealDataResolverFn/SubscriptionOnDeleteMealDataResolverFn.AppSyncFunction" } }, "SubscriptiononDeleteMealResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "onDeleteMeal", "Kind": "PIPELINE", @@ -1877,7 +1877,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onDeleteMeal\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1889,7 +1889,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1901,11 +1901,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1915,16 +1915,16 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/subscriptionOnDeleteMealResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/subscriptionOnDeleteMealResolver" } }, "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/1WOwW6DMAyGn6X34LV0h11Xqh63CXavTGJQCjgodlpViHefoFOnnX5/8if7zyF/3cF2gzfJrOuy3tcwfZAouUrRdqZo+AsjDqQUFygCO68+sClJQoqWTJFEw/CHDT9nvMl5cnfGIbgavrHu6YBCxuMAUxn6hx16mg2Oo9zZwnRc9WN9RMXqefI/nRLbpUQRuPFtirg2+v3cXynORvZnFCEVeF/CyB4OyXakS4F5cT+TjknNuq4UW8/tbDg4gou8XPMcdm+w3VzE+ywmVj8QlI/8AXh83Gc2AQAA" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/1WOwW6DMAyGn6X31OtoD7uuoB63CXavTGJQCjgodlpViHefoFOnnX5/8if7zyA7HGC3wZtsreu2va9h+iBRcpWi7Uze8BdGHEgpLpAHdl59YFOShBQtmTyJhuEPG37OeJPz5O6MQ3A1fGPd0xGFjMcBpjL0Dzv0NBscR7mzhalY9aIuULF6nvxPp8R2KZEHbnybIq6Nfj/3V4qzkf0ZRUgF3pcwsodjsh3pUmBe3M+kY1KzrivF1nM7Gw6O4CIv1yyD1zfYbS7i/TYmVj8QlI/8AVayTVs2AQAA" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -1944,7 +1944,7 @@ ":", [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "GetAtt:MealTable:StreamArn" ] @@ -1954,14 +1954,14 @@ }, "GetAttMealTableName": { "Description": "Your DynamoDB table name.", - "Value": "Meal-2aikutabnvbuhlzmh4mvkg3eji-main", + "Value": "Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main", "Export": { "Name": { "Fn::Join": [ ":", [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "GetAtt:MealTable:Name" ] @@ -1969,7 +1969,7 @@ } } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataMealMealTableFB0A2E92TableArn": { + "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataMealMealTableFD0BC2A7TableArn": { "Value": { "Fn::GetAtt": [ "MealTable", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataWorkoutProgramNestedStackWorkou-1KL1EWK5B27DM.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataWorkoutProgramNestedStackWorkou-1KL1EWK5B27DM.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataWorkoutProgramNestedStackWorkou-1KL1EWK5B27DM.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.outputs.json similarity index 54% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataWorkoutProgramNestedStackWorkou-1KL1EWK5B27DM.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.outputs.json index eb6fbe78fd0..8547db3c37e 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataWorkoutProgramNestedStackWorkou-1KL1EWK5B27DM.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.outputs.json @@ -1,14 +1,14 @@ [ { "OutputKey": "GetAttWorkoutProgramTableStreamArn", - "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/WorkoutProgram-2aikutabnvbuhlzmh4mvkg3eji-main/stream/2026-03-07T19:48:24.327", + "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main/stream/2026-03-22T02:13:40.073", "Description": "Your DynamoDB table StreamArn.", - "ExportName": "aolmivry45bvbmfywwm6tb542u:GetAtt:WorkoutProgramTable:StreamArn" + "ExportName": "uhg6hv7zmzav5doaroa4tocwv4:GetAtt:WorkoutProgramTable:StreamArn" }, { "OutputKey": "GetAttWorkoutProgramTableName", - "OutputValue": "WorkoutProgram-2aikutabnvbuhlzmh4mvkg3eji-main", + "OutputValue": "WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main", "Description": "Your DynamoDB table name.", - "ExportName": "aolmivry45bvbmfywwm6tb542u:GetAtt:WorkoutProgramTable:Name" + "ExportName": "uhg6hv7zmzav5doaroa4tocwv4:GetAtt:WorkoutProgramTable:Name" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.parameters.json new file mode 100644 index 00000000000..38cdcad28a9 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.parameters.json @@ -0,0 +1,46 @@ +[ + { + "ParameterKey": "DynamoDBModelTableReadIOPS", + "ParameterValue": "5" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + }, + { + "ParameterKey": "DynamoDBEnableServerSideEncryption", + "ParameterValue": "true" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" + }, + { + "ParameterKey": "DynamoDBEnablePointInTimeRecovery", + "ParameterValue": "false" + }, + { + "ParameterKey": "DynamoDBBillingMode", + "ParameterValue": "PAY_PER_REQUEST" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name", + "ParameterValue": "NONE_DS" + }, + { + "ParameterKey": "DynamoDBModelTableWriteIOPS", + "ParameterValue": "5" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId", + "ParameterValue": "uhg6hv7zmzav5doaroa4tocwv4" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183", + "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:amplify-fitnesstracker-ge-TableManagerCustomProvid-533GcbPIs8Jk" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref", + "ParameterValue": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataWorkoutProgramNestedStackWorkou-1KL1EWK5B27DM.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.template.json similarity index 85% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataWorkoutProgramNestedStackWorkou-1KL1EWK5B27DM.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.template.json index c00ea2d0428..60c31d30707 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataWorkoutProgramNestedStackWorkou-1KL1EWK5B27DM.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.template.json @@ -37,22 +37,22 @@ ], "Description": "Enable server side encryption powered by KMS." }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource9E5C3FE8Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerTableMana3F678B61": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { "Type": "String" } }, @@ -353,9 +353,9 @@ "Type": "Custom::ImportedAmplifyDynamoDBTable", "Properties": { "ServiceToken": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource9E5C3FE8Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerTableMana3F678B61" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183" }, - "tableName": "WorkoutProgram-2aikutabnvbuhlzmh4mvkg3eji-main", + "tableName": "WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main", "attributeDefinitions": [ { "attributeName": "id", @@ -418,7 +418,7 @@ "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/WorkoutProgramTable/Default/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/WorkoutProgramTable/Default/Default" } }, "WorkoutProgramIAMRoleB75B98D5": { @@ -461,7 +461,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}", { - "tablename": "WorkoutProgram-2aikutabnvbuhlzmh4mvkg3eji-main" + "tablename": "WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main" } ] }, @@ -469,7 +469,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}/*", { - "tablename": "WorkoutProgram-2aikutabnvbuhlzmh4mvkg3eji-main" + "tablename": "WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main" } ] } @@ -487,7 +487,7 @@ [ "WorkoutProgramIAMRol516c57-", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "-NONE" ] @@ -517,14 +517,14 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/WorkoutProgramIAMRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/WorkoutProgramIAMRole/Resource" } }, "WorkoutProgramDataSource": { "Type": "AWS::AppSync::DataSource", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DynamoDBConfig": { "AwsRegion": { @@ -570,17 +570,17 @@ "WorkoutProgramIAMRoleB75B98D5" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/WorkoutProgramDataSource/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/WorkoutProgramDataSource/Resource" } }, "QuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunctionF61649FE": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerygetWorkoutProgramauth0Function", @@ -590,17 +590,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/QuerygetWorkoutProgramauth0Function/QuerygetWorkoutProgramauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/QuerygetWorkoutProgramauth0Function/QuerygetWorkoutProgramauth0Function.AppSyncFunction" } }, "QuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction3557039E": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerygetWorkoutProgrampostAuth0Function", @@ -610,14 +610,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/QuerygetWorkoutProgrampostAuth0Function/QuerygetWorkoutProgrampostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/QuerygetWorkoutProgrampostAuth0Function/QuerygetWorkoutProgrampostAuth0Function.AppSyncFunction" } }, "QueryGetWorkoutProgramDataResolverFnQueryGetWorkoutProgramDataResolverFnAppSyncFunctionDFD5C9FA": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -638,14 +638,14 @@ "WorkoutProgramDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/QueryGetWorkoutProgramDataResolverFn/QueryGetWorkoutProgramDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/QueryGetWorkoutProgramDataResolverFn/QueryGetWorkoutProgramDataResolverFn.AppSyncFunction" } }, "GetWorkoutProgramResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "getWorkoutProgram", "Kind": "PIPELINE", @@ -677,7 +677,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Query\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"getWorkoutProgram\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -716,7 +716,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -728,11 +728,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -742,17 +742,17 @@ "TypeName": "Query" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/queryGetWorkoutProgramResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/queryGetWorkoutProgramResolver" } }, "QuerylistWorkoutProgramsauth0FunctionQuerylistWorkoutProgramsauth0FunctionAppSyncFunctionEDC95461": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerylistWorkoutProgramsauth0Function", @@ -762,17 +762,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/QuerylistWorkoutProgramsauth0Function/QuerylistWorkoutProgramsauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/QuerylistWorkoutProgramsauth0Function/QuerylistWorkoutProgramsauth0Function.AppSyncFunction" } }, "QuerylistWorkoutProgramspostAuth0FunctionQuerylistWorkoutProgramspostAuth0FunctionAppSyncFunction784BDD23": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerylistWorkoutProgramspostAuth0Function", @@ -782,14 +782,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/QuerylistWorkoutProgramspostAuth0Function/QuerylistWorkoutProgramspostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/QuerylistWorkoutProgramspostAuth0Function/QuerylistWorkoutProgramspostAuth0Function.AppSyncFunction" } }, "QueryListWorkoutProgramsDataResolverFnQueryListWorkoutProgramsDataResolverFnAppSyncFunctionC43C9A14": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -810,14 +810,14 @@ "WorkoutProgramDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/QueryListWorkoutProgramsDataResolverFn/QueryListWorkoutProgramsDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/QueryListWorkoutProgramsDataResolverFn/QueryListWorkoutProgramsDataResolverFn.AppSyncFunction" } }, "ListWorkoutProgramResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "listWorkoutPrograms", "Kind": "PIPELINE", @@ -849,7 +849,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Query\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"listWorkoutPrograms\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -888,7 +888,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -900,11 +900,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -914,17 +914,17 @@ "TypeName": "Query" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/queryListWorkoutProgramsResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/queryListWorkoutProgramsResolver" } }, "MutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD050B3C1": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateWorkoutPrograminit0Function", @@ -934,17 +934,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/MutationcreateWorkoutPrograminit0Function/MutationcreateWorkoutPrograminit0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationcreateWorkoutPrograminit0Function/MutationcreateWorkoutPrograminit0Function.AppSyncFunction" } }, "MutationcreateWorkoutProgramauth0FunctionMutationcreateWorkoutProgramauth0FunctionAppSyncFunction6165E2A5": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateWorkoutProgramauth0Function", @@ -954,17 +954,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/MutationcreateWorkoutProgramauth0Function/MutationcreateWorkoutProgramauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationcreateWorkoutProgramauth0Function/MutationcreateWorkoutProgramauth0Function.AppSyncFunction" } }, "MutationcreateWorkoutProgrampostAuth0FunctionMutationcreateWorkoutProgrampostAuth0FunctionAppSyncFunctionC1F2C501": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateWorkoutProgrampostAuth0Function", @@ -974,14 +974,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/MutationcreateWorkoutProgrampostAuth0Function/MutationcreateWorkoutProgrampostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationcreateWorkoutProgrampostAuth0Function/MutationcreateWorkoutProgrampostAuth0Function.AppSyncFunction" } }, "MutationCreateWorkoutProgramDataResolverFnMutationCreateWorkoutProgramDataResolverFnAppSyncFunction20E77E8E": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1002,14 +1002,14 @@ "WorkoutProgramDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/MutationCreateWorkoutProgramDataResolverFn/MutationCreateWorkoutProgramDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationCreateWorkoutProgramDataResolverFn/MutationCreateWorkoutProgramDataResolverFn.AppSyncFunction" } }, "CreateWorkoutProgramResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "createWorkoutProgram", "Kind": "PIPELINE", @@ -1047,7 +1047,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"createWorkoutProgram\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1086,7 +1086,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1098,11 +1098,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1112,17 +1112,17 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/mutationCreateWorkoutProgramResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/mutationCreateWorkoutProgramResolver" } }, "MutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionDF7D6DB3": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationupdateWorkoutPrograminit0Function", @@ -1132,14 +1132,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/MutationupdateWorkoutPrograminit0Function/MutationupdateWorkoutPrograminit0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationupdateWorkoutPrograminit0Function/MutationupdateWorkoutPrograminit0Function.AppSyncFunction" } }, "MutationupdateWorkoutProgramauth0FunctionMutationupdateWorkoutProgramauth0FunctionAppSyncFunction5B1F99AE": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1160,17 +1160,17 @@ "WorkoutProgramDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/MutationupdateWorkoutProgramauth0Function/MutationupdateWorkoutProgramauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationupdateWorkoutProgramauth0Function/MutationupdateWorkoutProgramauth0Function.AppSyncFunction" } }, "MutationupdateWorkoutProgrampostAuth0FunctionMutationupdateWorkoutProgrampostAuth0FunctionAppSyncFunction848486DA": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationupdateWorkoutProgrampostAuth0Function", @@ -1180,14 +1180,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/MutationupdateWorkoutProgrampostAuth0Function/MutationupdateWorkoutProgrampostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationupdateWorkoutProgrampostAuth0Function/MutationupdateWorkoutProgrampostAuth0Function.AppSyncFunction" } }, "MutationUpdateWorkoutProgramDataResolverFnMutationUpdateWorkoutProgramDataResolverFnAppSyncFunctionC239D12F": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1208,14 +1208,14 @@ "WorkoutProgramDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/MutationUpdateWorkoutProgramDataResolverFn/MutationUpdateWorkoutProgramDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationUpdateWorkoutProgramDataResolverFn/MutationUpdateWorkoutProgramDataResolverFn.AppSyncFunction" } }, "UpdateWorkoutProgramResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "updateWorkoutProgram", "Kind": "PIPELINE", @@ -1253,7 +1253,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"updateWorkoutProgram\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1292,7 +1292,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1304,11 +1304,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1318,14 +1318,14 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/mutationUpdateWorkoutProgramResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/mutationUpdateWorkoutProgramResolver" } }, "MutationdeleteWorkoutProgramauth0FunctionMutationdeleteWorkoutProgramauth0FunctionAppSyncFunctionCF8FDD99": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1346,17 +1346,17 @@ "WorkoutProgramDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/MutationdeleteWorkoutProgramauth0Function/MutationdeleteWorkoutProgramauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationdeleteWorkoutProgramauth0Function/MutationdeleteWorkoutProgramauth0Function.AppSyncFunction" } }, "MutationdeleteWorkoutProgrampostAuth0FunctionMutationdeleteWorkoutProgrampostAuth0FunctionAppSyncFunction1A56FB4E": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationdeleteWorkoutProgrampostAuth0Function", @@ -1366,14 +1366,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/MutationdeleteWorkoutProgrampostAuth0Function/MutationdeleteWorkoutProgrampostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationdeleteWorkoutProgrampostAuth0Function/MutationdeleteWorkoutProgrampostAuth0Function.AppSyncFunction" } }, "MutationDeleteWorkoutProgramDataResolverFnMutationDeleteWorkoutProgramDataResolverFnAppSyncFunction57D3FA26": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1394,14 +1394,14 @@ "WorkoutProgramDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/MutationDeleteWorkoutProgramDataResolverFn/MutationDeleteWorkoutProgramDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationDeleteWorkoutProgramDataResolverFn/MutationDeleteWorkoutProgramDataResolverFn.AppSyncFunction" } }, "DeleteWorkoutProgramResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "deleteWorkoutProgram", "Kind": "PIPELINE", @@ -1433,7 +1433,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"deleteWorkoutProgram\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1472,7 +1472,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1484,11 +1484,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1498,17 +1498,17 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/mutationDeleteWorkoutProgramResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/mutationDeleteWorkoutProgramResolver" } }, "SubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncFunctionBA1C0577": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononCreateWorkoutProgramauth0Function", @@ -1518,17 +1518,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/SubscriptiononCreateWorkoutProgramauth0Function/SubscriptiononCreateWorkoutProgramauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptiononCreateWorkoutProgramauth0Function/SubscriptiononCreateWorkoutProgramauth0Function.AppSyncFunction" } }, "SubscriptiononCreateWorkoutProgrampostAuth0FunctionSubscriptiononCreateWorkoutProgrampostAuth0FunctionAppSyncFunction1FBC8B34": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononCreateWorkoutProgrampostAuth0Function", @@ -1538,17 +1538,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/SubscriptiononCreateWorkoutProgrampostAuth0Function/SubscriptiononCreateWorkoutProgrampostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptiononCreateWorkoutProgrampostAuth0Function/SubscriptiononCreateWorkoutProgrampostAuth0Function.AppSyncFunction" } }, "SubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunction4E344723": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnCreateWorkoutProgramDataResolverFn", @@ -1560,14 +1560,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/SubscriptionOnCreateWorkoutProgramDataResolverFn/SubscriptionOnCreateWorkoutProgramDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptionOnCreateWorkoutProgramDataResolverFn/SubscriptionOnCreateWorkoutProgramDataResolverFn.AppSyncFunction" } }, "SubscriptiononCreateWorkoutProgramResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "onCreateWorkoutProgram", "Kind": "PIPELINE", @@ -1599,7 +1599,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onCreateWorkoutProgram\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1611,7 +1611,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1623,11 +1623,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1637,17 +1637,17 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/subscriptionOnCreateWorkoutProgramResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/subscriptionOnCreateWorkoutProgramResolver" } }, "SubscriptiononUpdateWorkoutProgramauth0FunctionSubscriptiononUpdateWorkoutProgramauth0FunctionAppSyncFunctionEC33DFA9": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononUpdateWorkoutProgramauth0Function", @@ -1657,17 +1657,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/SubscriptiononUpdateWorkoutProgramauth0Function/SubscriptiononUpdateWorkoutProgramauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptiononUpdateWorkoutProgramauth0Function/SubscriptiononUpdateWorkoutProgramauth0Function.AppSyncFunction" } }, "SubscriptiononUpdateWorkoutProgrampostAuth0FunctionSubscriptiononUpdateWorkoutProgrampostAuth0FunctionAppSyncFunctionB64D3021": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononUpdateWorkoutProgrampostAuth0Function", @@ -1677,17 +1677,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/SubscriptiononUpdateWorkoutProgrampostAuth0Function/SubscriptiononUpdateWorkoutProgrampostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptiononUpdateWorkoutProgrampostAuth0Function/SubscriptiononUpdateWorkoutProgrampostAuth0Function.AppSyncFunction" } }, "SubscriptionOnUpdateWorkoutProgramDataResolverFnSubscriptionOnUpdateWorkoutProgramDataResolverFnAppSyncFunction09BC3352": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnUpdateWorkoutProgramDataResolverFn", @@ -1699,14 +1699,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/SubscriptionOnUpdateWorkoutProgramDataResolverFn/SubscriptionOnUpdateWorkoutProgramDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptionOnUpdateWorkoutProgramDataResolverFn/SubscriptionOnUpdateWorkoutProgramDataResolverFn.AppSyncFunction" } }, "SubscriptiononUpdateWorkoutProgramResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "onUpdateWorkoutProgram", "Kind": "PIPELINE", @@ -1738,7 +1738,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onUpdateWorkoutProgram\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1750,7 +1750,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1762,11 +1762,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1776,17 +1776,17 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/subscriptionOnUpdateWorkoutProgramResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/subscriptionOnUpdateWorkoutProgramResolver" } }, "SubscriptiononDeleteWorkoutProgramauth0FunctionSubscriptiononDeleteWorkoutProgramauth0FunctionAppSyncFunction798D646D": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononDeleteWorkoutProgramauth0Function", @@ -1796,17 +1796,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/SubscriptiononDeleteWorkoutProgramauth0Function/SubscriptiononDeleteWorkoutProgramauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptiononDeleteWorkoutProgramauth0Function/SubscriptiononDeleteWorkoutProgramauth0Function.AppSyncFunction" } }, "SubscriptiononDeleteWorkoutProgrampostAuth0FunctionSubscriptiononDeleteWorkoutProgrampostAuth0FunctionAppSyncFunctionF1F4A2FC": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononDeleteWorkoutProgrampostAuth0Function", @@ -1816,17 +1816,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/SubscriptiononDeleteWorkoutProgrampostAuth0Function/SubscriptiononDeleteWorkoutProgrampostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptiononDeleteWorkoutProgrampostAuth0Function/SubscriptiononDeleteWorkoutProgrampostAuth0Function.AppSyncFunction" } }, "SubscriptionOnDeleteWorkoutProgramDataResolverFnSubscriptionOnDeleteWorkoutProgramDataResolverFnAppSyncFunction7AE965FB": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnDeleteWorkoutProgramDataResolverFn", @@ -1838,14 +1838,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/SubscriptionOnDeleteWorkoutProgramDataResolverFn/SubscriptionOnDeleteWorkoutProgramDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptionOnDeleteWorkoutProgramDataResolverFn/SubscriptionOnDeleteWorkoutProgramDataResolverFn.AppSyncFunction" } }, "SubscriptiononDeleteWorkoutProgramResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "onDeleteWorkoutProgram", "Kind": "PIPELINE", @@ -1877,7 +1877,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onDeleteWorkoutProgram\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1889,7 +1889,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1901,11 +1901,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1915,17 +1915,17 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/subscriptionOnDeleteWorkoutProgramResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/subscriptionOnDeleteWorkoutProgramResolver" } }, "WorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunction6C8EE914": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" }, "FunctionVersion": "2018-05-29", "Name": "WorkoutProgramOwnerDataResolverFn", @@ -1937,14 +1937,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/WorkoutProgramOwnerDataResolverFn/WorkoutProgramOwnerDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/WorkoutProgramOwnerDataResolverFn/WorkoutProgramOwnerDataResolverFn.AppSyncFunction" } }, "WorkoutProgramownerResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "FieldName": "owner", "Kind": "PIPELINE", @@ -1964,7 +1964,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"WorkoutProgram\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"owner\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1976,7 +1976,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1988,11 +1988,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -2002,16 +2002,16 @@ "TypeName": "WorkoutProgram" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/workoutProgramOwnerResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/workoutProgramOwnerResolver" } }, "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/1WOwW6DMAyGn6X34LV0h11Xqh63CXavTGJQCjgodlpViHefoFOnnX5/8if7zyF/3cF2gzfJrOuy3tcwfZAouUrRdqZo+AsjDqQUFygCO68+sClJQoqWTJFEw/CHDT9nvMl5cnfGIbgavrHu6YBCxuMAUxn6hx16mg2Oo9zZwnRc9WN9RMXqefI/nRLbpUQRuPFtirg2+v3cXynORvZnFCEVeF/CyB4OyXakS4F5cT+TjknNuq4UW8/tbDg4gou8XPMcdm+w3VzE+ywmVj8QlI/8AXh83Gc2AQAA" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/1WOwW6DMAyGn6X31OtoD7uuoB63CXavTGJQCjgodlpViHefoFOnnX5/8if7zyA7HGC3wZtsreu2va9h+iBRcpWi7Uze8BdGHEgpLpAHdl59YFOShBQtmTyJhuEPG37OeJPz5O6MQ3A1fGPd0xGFjMcBpjL0Dzv0NBscR7mzhalY9aIuULF6nvxPp8R2KZEHbnybIq6Nfj/3V4qzkf0ZRUgF3pcwsodjsh3pUmBe3M+kY1KzrivF1nM7Gw6O4CIv1yyD1zfYbS7i/TYmVj8QlI/8AVayTVs2AQAA" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -2031,7 +2031,7 @@ ":", [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "GetAtt:WorkoutProgramTable:StreamArn" ] @@ -2041,14 +2041,14 @@ }, "GetAttWorkoutProgramTableName": { "Description": "Your DynamoDB table name.", - "Value": "WorkoutProgram-2aikutabnvbuhlzmh4mvkg3eji-main", + "Value": "WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main", "Export": { "Name": { "Fn::Join": [ ":", [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" }, "GetAtt:WorkoutProgramTable:Name" ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-auth179371D7-T5KTLQB5RTR1.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.description.txt similarity index 52% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-auth179371D7-T5KTLQB5RTR1.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.description.txt index 813452072ac..72751282334 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-auth179371D7-T5KTLQB5RTR1.description.txt +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.description.txt @@ -1 +1 @@ -{"createdOn":"Linux","createdBy":"AmplifyPipelineDeploy","createdWith":"1.11.1","stackType":"auth-Cognito","metadata":{}} \ No newline at end of file +{"createdOn":"Linux","createdBy":"AmplifyPipelineDeploy","createdWith":"1.11.2","stackType":"auth-Cognito","metadata":{}} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.outputs.json new file mode 100644 index 00000000000..acc4660e422 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.outputs.json @@ -0,0 +1,38 @@ +[ + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPoolAppClientE9EEF58ARef", + "OutputValue": "dgddko7evul00or8262g7n9ub" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref", + "OutputValue": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn", + "OutputValue": "arn:aws:lambda:us-east-1:123456789012:function:admin-gen2-main" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FRef", + "OutputValue": "admin-gen2-main" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref", + "OutputValue": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref", + "OutputValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref", + "OutputValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref", + "OutputValue": "us-east-1_mQEsDQ1lC" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authfitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaB4152CB6Ref", + "OutputValue": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-APIGatewayAuthStack-2YRT3JXB74ES.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.parameters.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-APIGatewayAuthStack-2YRT3JXB74ES.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.parameters.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-auth179371D7-T5KTLQB5RTR1.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json similarity index 89% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-auth179371D7-T5KTLQB5RTR1.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json index 1b25badf7c6..eabf888a35e 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-auth179371D7-T5KTLQB5RTR1.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json @@ -1,5 +1,5 @@ { - "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.11.1\",\"stackType\":\"auth-Cognito\",\"metadata\":{}}", + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.11.2\",\"stackType\":\"auth-Cognito\",\"metadata\":{}}", "Resources": { "amplifyAuthUserPool4BA7F805": { "Type": "AWS::Cognito::UserPool", @@ -23,7 +23,7 @@ "LambdaConfig": { "PreSignUp": { "Fn::GetAtt": [ - "fitnesstracker6b0fc1196b0fc119PreSignupgen2mainlambda552B59F7", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambda9B996C42", "Arn" ] } @@ -72,7 +72,7 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/amplifyAuth/UserPool/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/Resource" } }, "amplifyAuthUserPoolPreSignUpCognito55F45D8E": { @@ -81,7 +81,7 @@ "Action": "lambda:InvokeFunction", "FunctionName": { "Fn::GetAtt": [ - "fitnesstracker6b0fc1196b0fc119PreSignupgen2mainlambda552B59F7", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambda9B996C42", "Arn" ] }, @@ -94,7 +94,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/amplifyAuth/UserPool/PreSignUpCognito" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/PreSignUpCognito" } }, "amplifyAuthUserPoolNativeAppClient79534448": { @@ -117,7 +117,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/NativeAppClient/Resource" } }, "amplifyAuthUserPoolAppClient2626C6F8": { @@ -151,7 +151,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/amplifyAuth/UserPoolAppClient/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPoolAppClient/Resource" } }, "amplifyAuthIdentityPool3FDE84CC": { @@ -205,7 +205,7 @@ "SupportedLoginProviders": {} }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/amplifyAuth/IdentityPool" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/IdentityPool" } }, "amplifyAuthauthenticatedUserRoleD8DA3689": { @@ -257,7 +257,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/amplifyAuth/authenticatedUserRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/authenticatedUserRole/Resource" } }, "amplifyAuthunauthenticatedUserRole2B524D9E": { @@ -309,7 +309,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/amplifyAuth/unauthenticatedUserRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/unauthenticatedUserRole/Resource" } }, "amplifyAuthIdentityPoolRoleAttachment045F17C8": { @@ -363,7 +363,7 @@ "amplifyAuthUserPoolAppClient2626C6F8" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/amplifyAuth/IdentityPoolRoleAttachment" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/IdentityPoolRoleAttachment" } }, "amplifyAuthAdminGroupRole766878DC": { @@ -415,7 +415,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/amplifyAuth/AdminGroupRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroupRole/Resource" } }, "amplifyAuthAdminGroupCC42FF04": { @@ -434,10 +434,10 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/amplifyAuth/AdminGroup" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroup" } }, - "fitnesstracker6b0fc1196b0fc119PreSignupgen2mainlambdaServiceRole4099EE40": { + "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { @@ -481,7 +481,7 @@ }, { "Key": "amplify:friendly-name", - "Value": "fitnesstracker6b0fc1196b0fc119PreSignup-gen2-main" + "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" }, { "Key": "created-by", @@ -490,10 +490,10 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/fitnesstracker6b0fc1196b0fc119PreSignup-gen2-main-lambda/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/ServiceRole/Resource" } }, - "fitnesstracker6b0fc1196b0fc119PreSignupgen2mainlambda552B59F7": { + "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambda9B996C42": { "Type": "AWS::Lambda::Function", "Properties": { "Architectures": [ @@ -503,7 +503,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "6a32c10425f870bd089bcc5e1fa62637d7ec836e4ff6843940c7c0ca1b22e010.zip" + "S3Key": "760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371.zip" }, "Environment": { "Variables": { @@ -518,12 +518,12 @@ "EphemeralStorage": { "Size": 512 }, - "FunctionName": "fitnesstracker6b0fc1196b0fc119PreSignup-gen2-main", + "FunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", "Handler": "index.handler", "MemorySize": 128, "Role": { "Fn::GetAtt": [ - "fitnesstracker6b0fc1196b0fc119PreSignupgen2mainlambdaServiceRole4099EE40", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE", "Arn" ] }, @@ -543,7 +543,7 @@ }, { "Key": "amplify:friendly-name", - "Value": "fitnesstracker6b0fc1196b0fc119PreSignup-gen2-main" + "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" }, { "Key": "created-by", @@ -553,11 +553,11 @@ "Timeout": 25 }, "DependsOn": [ - "fitnesstracker6b0fc1196b0fc119PreSignupgen2mainlambdaServiceRole4099EE40" + "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/fitnesstracker6b0fc1196b0fc119PreSignup-gen2-main-lambda/Resource", - "aws:asset:path": "asset.6a32c10425f870bd089bcc5e1fa62637d7ec836e4ff6843940c7c0ca1b22e010", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/Resource", + "aws:asset:path": "asset.760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371", "aws:asset:is-bundled": true, "aws:asset:property": "Code" } @@ -565,7 +565,7 @@ "AMPLIFYAUTHUSERPOOLIDParameterCC466CA3": { "Type": "AWS::SSM::Parameter", "Properties": { - "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-f6c5a5beb3/AMPLIFY_AUTH_USERPOOL_ID", + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID", "Tags": { "amplify:app-id": "fitnesstracker", "amplify:branch-name": "gen2-main", @@ -578,7 +578,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/AMPLIFY_AUTH_USERPOOL_IDParameter/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/AMPLIFY_AUTH_USERPOOL_IDParameter/Resource" } }, "admingen2mainlambdaServiceRole439B1792": { @@ -634,7 +634,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/admin-gen2-main-lambda/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/Resource" } }, "admingen2mainlambdaServiceRoleDefaultPolicy0F640A9C": { @@ -661,7 +661,7 @@ { "Ref": "AWS::AccountId" }, - ":parameter/amplify/resource_reference/fitnesstracker/gen2main-branch-f6c5a5beb3/AMPLIFY_AUTH_USERPOOL_ID" + ":parameter/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID" ] ] } @@ -677,7 +677,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/admin-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" } }, "admingen2mainlambdaECF7211C": { @@ -690,15 +690,15 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "f45cbae1f6bc1783cca1ba23dbdd65d02718c1e52af14f40058b0e620d368ca9.zip" + "S3Key": "4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a.zip" }, "Environment": { "Variables": { "ENV": "gen2-main", "REGION": "us-east-1", - "AMPLIFY_SSM_ENV_CONFIG": "{\"AMPLIFY_AUTH_USERPOOL_ID\":{\"path\":\"/amplify/resource_reference/fitnesstracker/gen2main-branch-f6c5a5beb3/AMPLIFY_AUTH_USERPOOL_ID\"}}", + "AMPLIFY_SSM_ENV_CONFIG": "{\"AMPLIFY_AUTH_USERPOOL_ID\":{\"path\":\"/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID\"}}", "AMPLIFY_AUTH_USERPOOL_ID": "", - "AUTH_FITNESSTRACKER6B0FC1196B0FC119_USERPOOLID": { + "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": { "Ref": "amplifyAuthUserPool4BA7F805" } } @@ -744,8 +744,8 @@ "admingen2mainlambdaServiceRole439B1792" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/admin-gen2-main-lambda/Resource", - "aws:asset:path": "asset.f45cbae1f6bc1783cca1ba23dbdd65d02718c1e52af14f40058b0e620d368ca9", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/Resource", + "aws:asset:path": "asset.4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a", "aws:asset:is-bundled": true, "aws:asset:property": "Code" } @@ -776,7 +776,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/userpoolAccess1/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess1/Resource" } }, "userpoolAccess268F187DB": { @@ -805,7 +805,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/userpoolAccess2/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess2/Resource" } }, "userpoolAccess3956C62F8": { @@ -834,7 +834,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/userpoolAccess3/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess3/Resource" } }, "userpoolAccess4A84025C3": { @@ -863,7 +863,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/userpoolAccess4/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess4/Resource" } }, "userpoolAccess585E2FB32": { @@ -892,7 +892,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/userpoolAccess5/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess5/Resource" } }, "userpoolAccess600DA4CB0": { @@ -921,7 +921,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/userpoolAccess6/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess6/Resource" } }, "userpoolAccess76F9C91C1": { @@ -950,16 +950,16 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/userpoolAccess7/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess7/Resource" } }, "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/12NzW7CQAyEn4X74kLooVeI1KoXFBH1HC0bkzrZn2rtFKFV3r3aoLSop5mxPZ8LKJ63sFnpK69NO6wtnSEdkQXbWrQZlL5yk0zoPEmA9MEYqxCsKi/+1y+mtIReHld/k/cWvZDclvJjPgWLexFtPt2//lsM49ekrHbnVkMqL77C6IiZgs93r6M3QsFPirSDlEF5PGsVLJlbjne3YBofWuwZjrMsBMW7RjOjMOyzKN7BYTQDykEzKmYHqZZIvqt01A4F44xewjSpuVeL7sh3k8pfoOen76KA7QtsVj0TrePohRzC6a4/ExlBjn4BAAA=" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/12NzW7CQAyEn4X74tLAoVeI1KoXFBH1HC0bkzrZn2rtFKFV3r3aoLSop5mxPZ8LKHY72Kz0ldemHdaWzpCOyIJtLdoMSl+5SSZ0niRA+mCMVQhWlRf/6xdTWkIvj6u/yXuLXkhuS/kxn4LFvYg2n+5f/y2G8WtSVrtzqyGVF19hdMRMwee719EboeAnRdpByqA8nrUKlswtx7tbMI0PLfYMx1kWguJto5lRGPZZFG/hMJoB5aAZFbODVEsk31U6aoeCcUYvYZrU3KtFd+S7SeUv0PPTd1HA8wtsVj0TrePohRzC6a4/caZnM34BAAA=" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -1231,42 +1231,42 @@ } }, "Outputs": { - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthUserPool82133007Ref": { + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref": { "Value": { "Ref": "amplifyAuthUserPool4BA7F805" } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthUserPoolAppClient1C98798ERef": { + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPoolAppClientE9EEF58ARef": { "Value": { "Ref": "amplifyAuthUserPoolAppClient2626C6F8" } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef": { + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { "Value": { "Ref": "amplifyAuthIdentityPool3FDE84CC" } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authfitnesstracker6b0fc1196b0fc119PreSignupgen2mainlambda8F8CF17DRef": { + "amplifyfitnesstrackergen2mainbrancha09655d799authfitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaB4152CB6Ref": { "Value": { - "Ref": "fitnesstracker6b0fc1196b0fc119PreSignupgen2mainlambda552B59F7" + "Ref": "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambda9B996C42" } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authadmingen2mainlambda2E47DE6ARef": { + "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FRef": { "Value": { "Ref": "admingen2mainlambdaECF7211C" } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref": { + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { "Value": { "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref": { + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { "Value": { "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authadmingen2mainlambda2E47DE6AArn": { + "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn": { "Value": { "Fn::GetAtt": [ "admingen2mainlambdaECF7211C", @@ -1274,7 +1274,7 @@ ] } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthAdminGroupRole5A967615Ref": { + "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { "Value": { "Ref": "amplifyAuthAdminGroupRole766878DC" } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-data7552DF31-FY14PTEHE5GQ.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-data7552DF31-FY14PTEHE5GQ.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.outputs.json new file mode 100644 index 00000000000..43bc96aaa6b --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.outputs.json @@ -0,0 +1,26 @@ +[ + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Ref", + "OutputValue": "lognutrition-gen2-main" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId", + "OutputValue": "uhg6hv7zmzav5doaroa4tocwv4" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIDefaultApiKeyE10BC731ApiKey", + "OutputValue": "da2-mpyed5y2pvbcjl2qcbxuq2rspe" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAGraphQLUrl", + "OutputValue": "https://7ltandzu5zbxvcqrr24edz4hym.appsync-api.us-east-1.amazonaws.com/graphql" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn", + "OutputValue": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-gen2-main" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsDeploymentCustomResource1536MiB8E4BD6ABDestinationBucketArn", + "OutputValue": "arn:aws:s3:::amplify-fitnesstracker-ge-amplifydataamplifycodege-cxlnc2wmwnpq" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.parameters.json new file mode 100644 index 00000000000..59d1fb810b6 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.parameters.json @@ -0,0 +1,38 @@ +[ + { + "ParameterKey": "DynamoDBModelTableReadIOPS", + "ParameterValue": "5" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + }, + { + "ParameterKey": "DynamoDBEnableServerSideEncryption", + "ParameterValue": "true" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" + }, + { + "ParameterKey": "DynamoDBEnablePointInTimeRecovery", + "ParameterValue": "false" + }, + { + "ParameterKey": "DynamoDBBillingMode", + "ParameterValue": "PAY_PER_REQUEST" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref", + "ParameterValue": "us-east-1_mQEsDQ1lC" + }, + { + "ParameterKey": "DynamoDBModelTableWriteIOPS", + "ParameterValue": "5" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref", + "ParameterValue": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-data7552DF31-FY14PTEHE5GQ.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.template.json similarity index 79% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-data7552DF31-FY14PTEHE5GQ.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.template.json index 39c737dc172..b49a224a022 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-data7552DF31-FY14PTEHE5GQ.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.template.json @@ -39,12 +39,12 @@ }, "DefaultAction": "ALLOW", "UserPoolId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthUserPool82133007Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref" } } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/GraphQLAPI/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/GraphQLAPI/Resource" } }, "amplifyDataGraphQLAPITransformerSchemaFF50A789": { @@ -61,7 +61,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/GraphQLAPI/TransformerSchema" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/GraphQLAPI/TransformerSchema" } }, "amplifyDataGraphQLAPIDefaultApiKey1C8ED374": { @@ -74,10 +74,10 @@ ] }, "Description": "graphql", - "Expires": 1773522369 + "Expires": 1774832761 }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/GraphQLAPI/DefaultApiKey" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/GraphQLAPI/DefaultApiKey" } }, "amplifyDataGraphQLAPINONEDS684BF699": { @@ -94,14 +94,14 @@ "Type": "NONE" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/GraphQLAPI/NONE_DS/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/GraphQLAPI/NONE_DS/Resource" } }, "amplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource86290833": { "Type": "AWS::CloudFormation::Stack", "Properties": { "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { "Fn::GetAtt": [ "amplifyDataGraphQLAPI42A6FA33", "ApiId" @@ -146,7 +146,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/51e1b566c1eddfef856b0c956bcc5b30aa4b16208f076a0ff02bff63a3ee4809.json" + "/e196781c904575721375d59a240f99923ff104a298c1fdf313ff66f196d891d8.json" ] ] } @@ -154,8 +154,8 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/AmplifyTableManager.NestedStack/AmplifyTableManager.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManager431A2250.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager.NestedStack/AmplifyTableManager.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerF6C912A7.nested.template.json", "aws:asset:property": "TemplateURL" } }, @@ -178,32 +178,32 @@ "DynamoDBEnableServerSideEncryption": { "Ref": "DynamoDBEnableServerSideEncryption" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource9E5C3FE8Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerTableMana3F678B61": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183": { "Fn::GetAtt": [ "amplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource86290833", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent6EDC1D70Arn" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent9609CD96Arn" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { "Fn::GetAtt": [ "amplifyDataGraphQLAPI42A6FA33", "ApiId" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name": { "Fn::GetAtt": [ "amplifyDataGraphQLAPINONEDS684BF699", "Name" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" } }, "Tags": [ @@ -244,7 +244,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/c45168ea7376178271bfb19561c5170ad2de6c10b71a705e86603c77aa1bbae6.json" + "/17902e785c4e729dbb0ee9d37a4e996a4642c2e06d8a5cac3d6a9e88732b03bc.json" ] ] } @@ -255,8 +255,8 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/WorkoutProgram.NestedStack/WorkoutProgram.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataWorkoutProgramC83B24CA.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram.NestedStack/WorkoutProgram.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataWorkoutProgramF3A49908.nested.template.json", "aws:asset:property": "TemplateURL" } }, @@ -279,32 +279,32 @@ "DynamoDBEnableServerSideEncryption": { "Ref": "DynamoDBEnableServerSideEncryption" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource9E5C3FE8Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerTableMana3F678B61": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183": { "Fn::GetAtt": [ "amplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource86290833", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent6EDC1D70Arn" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent9609CD96Arn" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { "Fn::GetAtt": [ "amplifyDataGraphQLAPI42A6FA33", "ApiId" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name": { "Fn::GetAtt": [ "amplifyDataGraphQLAPINONEDS684BF699", "Name" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" } }, "Tags": [ @@ -345,7 +345,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/a53b312213fbb1827508ffd012a27dc746f1b05e1d3b1bedafecaabdd669ab3b.json" + "/12d625aa6cd011e2e75d539e7054752a21e29f1cc060ee87fcaf8108f16d6fea.json" ] ] } @@ -356,8 +356,8 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Exercise.NestedStack/Exercise.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExercise19714B23.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise.NestedStack/Exercise.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExercise9942F32B.nested.template.json", "aws:asset:property": "TemplateURL" } }, @@ -380,32 +380,32 @@ "DynamoDBEnableServerSideEncryption": { "Ref": "DynamoDBEnableServerSideEncryption" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource9E5C3FE8Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerTableMana3F678B61": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183": { "Fn::GetAtt": [ "amplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource86290833", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent6EDC1D70Arn" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent9609CD96Arn" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { "Fn::GetAtt": [ "amplifyDataGraphQLAPI42A6FA33", "ApiId" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name": { "Fn::GetAtt": [ "amplifyDataGraphQLAPINONEDS684BF699", "Name" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" } }, "Tags": [ @@ -446,7 +446,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/ef31568ac34d85a733913a1b8a780b8db342e33302334dc9e3409b797c66550c.json" + "/e0909ac34eda8c3d4fe59e45563f423b9a8202895c2c90834cb65221aabbb46d.json" ] ] } @@ -457,8 +457,8 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/Meal.NestedStack/Meal.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataMealB9714D72.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal.NestedStack/Meal.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataMeal7D390DE4.nested.template.json", "aws:asset:property": "TemplateURL" } }, @@ -466,38 +466,38 @@ "Type": "AWS::CloudFormation::Stack", "Properties": { "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { "Fn::GetAtt": [ "amplifyDataGraphQLAPI42A6FA33", "ApiId" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name": { "Fn::GetAtt": [ "amplifyDataGraphQLAPINONEDS684BF699", "Name" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseNestedStackExerciseNestedStackResource558D738COutputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseExerciseDataSource6949CF09Name": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseNestedStackExerciseNestedStackResourceC9DAC2F3Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseDataSourceDCCBFD77Name": { "Fn::GetAtt": [ "amplifyDataExerciseNestedStackExerciseNestedStackResource73533B79", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseExerciseDataSource6949CF09Name" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseDataSourceDCCBFD77Name" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseNestedStackExerciseNestedStackResource558D738COutputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseExerciseTable318B1DEBTableArn": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseNestedStackExerciseNestedStackResourceC9DAC2F3Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseTableECDBC610TableArn": { "Fn::GetAtt": [ "amplifyDataExerciseNestedStackExerciseNestedStackResource73533B79", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseExerciseTable318B1DEBTableArn" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseTableECDBC610TableArn" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" } }, "Tags": [ @@ -538,7 +538,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/ae3c588bb7e63507d1e7939f5593ec23500867f74096f6bddc37548350d47191.json" + "/55d3af84db44ef02e9712cd140af686369ed562a906a5cd15fdf4071b773b4b0.json" ] ] } @@ -550,8 +550,8 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/ConnectionStack.NestedStack/ConnectionStack.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataConnectionStack40486637.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/ConnectionStack.NestedStack/ConnectionStack.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataConnectionStackC9FBC7D1.nested.template.json", "aws:asset:property": "TemplateURL" } }, @@ -607,7 +607,7 @@ "Value": "true" }, { - "Key": "aws-cdk:cr-owned:8b89f787", + "Key": "aws-cdk:cr-owned:1f2b0d25", "Value": "true" }, { @@ -619,7 +619,7 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsBucket/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsBucket/Resource" } }, "amplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsBucketPolicyF1C1C548": { @@ -674,7 +674,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsBucket/Policy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsBucket/Policy/Resource" } }, "amplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsBucketAutoDeleteObjectsCustomResource437F26F5": { @@ -696,7 +696,7 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsBucket/AutoDeleteObjectsCustomResource/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsBucket/AutoDeleteObjectsCustomResource/Default" } }, "amplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsDeploymentAwsCliLayerE322F905": { @@ -711,7 +711,7 @@ "Description": "/opt/awscli/aws" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsDeployment/AwsCliLayer/Resource", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsDeployment/AwsCliLayer/Resource", "aws:asset:path": "asset.0cfdecad2260a3a84ad0c2d08a77e03c9d25e26c7b52f26b1e1faf97aef92f18.zip", "aws:asset:is-bundled": false, "aws:asset:property": "Content" @@ -753,7 +753,7 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsDeployment/CustomResource-1536MiB/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsDeployment/CustomResource-1536MiB/Default" } }, "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": { @@ -778,7 +778,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/Custom::S3AutoDeleteObjectsCustomResourceProvider/Role" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/Custom::S3AutoDeleteObjectsCustomResourceProvider/Role" } }, "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": { @@ -817,7 +817,7 @@ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", "aws:asset:property": "Code" } @@ -871,7 +871,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiB/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiB/ServiceRole/Resource" } }, "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiBServiceRoleDefaultPolicyFF1C635B": { @@ -1005,7 +1005,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiB/ServiceRole/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiB/ServiceRole/DefaultPolicy/Resource" } }, "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiBC5D8AB21": { @@ -1061,7 +1061,7 @@ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiBServiceRoleA41FC8C2" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiB/Resource", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiB/Resource", "aws:asset:path": "asset.3423a042b818e31c1e34a19d6689ab2e5f9b70fcbe9e71df66f241b20a200bd9", "aws:asset:is-bundled": false, "aws:asset:property": "Code" @@ -1088,7 +1088,7 @@ "Value": "true" }, { - "Key": "aws-cdk:cr-owned:5e69a07d", + "Key": "aws-cdk:cr-owned:d9a91a74", "Value": "true" }, { @@ -1100,7 +1100,7 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/modelIntrospectionSchemaBucket/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/modelIntrospectionSchemaBucket/Resource" } }, "modelIntrospectionSchemaBucketPolicy4DAB0D15": { @@ -1189,7 +1189,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/modelIntrospectionSchemaBucket/Policy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/modelIntrospectionSchemaBucket/Policy/Resource" } }, "modelIntrospectionSchemaBucketAutoDeleteObjectsCustomResourceFE57309F": { @@ -1211,7 +1211,7 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/modelIntrospectionSchemaBucket/AutoDeleteObjectsCustomResource/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/modelIntrospectionSchemaBucket/AutoDeleteObjectsCustomResource/Default" } }, "modelIntrospectionSchemaBucketDeploymentAwsCliLayer13C432F7": { @@ -1226,7 +1226,7 @@ "Description": "/opt/awscli/aws" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/modelIntrospectionSchemaBucketDeployment/AwsCliLayer/Resource", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/modelIntrospectionSchemaBucketDeployment/AwsCliLayer/Resource", "aws:asset:path": "asset.0cfdecad2260a3a84ad0c2d08a77e03c9d25e26c7b52f26b1e1faf97aef92f18.zip", "aws:asset:is-bundled": false, "aws:asset:property": "Content" @@ -1262,13 +1262,13 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/modelIntrospectionSchemaBucketDeployment/CustomResource-1536MiB/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/modelIntrospectionSchemaBucketDeployment/CustomResource-1536MiB/Default" } }, "AMPLIFYDATAGRAPHQLENDPOINTParameter1C2CBB16": { "Type": "AWS::SSM::Parameter", "Properties": { - "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-f6c5a5beb3/AMPLIFY_DATA_GRAPHQL_ENDPOINT", + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_DATA_GRAPHQL_ENDPOINT", "Tags": { "amplify:app-id": "fitnesstracker", "amplify:branch-name": "gen2-main", @@ -1284,13 +1284,13 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/AMPLIFY_DATA_GRAPHQL_ENDPOINTParameter/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/AMPLIFY_DATA_GRAPHQL_ENDPOINTParameter/Resource" } }, "AMPLIFYDATAMODELINTROSPECTIONSCHEMABUCKETNAMEParameter47BF4F44": { "Type": "AWS::SSM::Parameter", "Properties": { - "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-f6c5a5beb3/AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_BUCKET_NAME", + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_BUCKET_NAME", "Tags": { "amplify:app-id": "fitnesstracker", "amplify:branch-name": "gen2-main", @@ -1303,13 +1303,13 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_BUCKET_NAMEParameter/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_BUCKET_NAMEParameter/Resource" } }, "AMPLIFYDATAMODELINTROSPECTIONSCHEMAKEYParameterB6AEAE8A": { "Type": "AWS::SSM::Parameter", "Properties": { - "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-f6c5a5beb3/AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_KEY", + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_KEY", "Tags": { "amplify:app-id": "fitnesstracker", "amplify:branch-name": "gen2-main", @@ -1320,13 +1320,13 @@ "Value": "modelIntrospectionSchema.json" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_KEYParameter/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_KEYParameter/Resource" } }, "AMPLIFYDATADEFAULTNAMEParameterE7C23CC4": { "Type": "AWS::SSM::Parameter", "Properties": { - "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-f6c5a5beb3/AMPLIFY_DATA_DEFAULT_NAME", + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_DATA_DEFAULT_NAME", "Tags": { "amplify:app-id": "fitnesstracker", "amplify:branch-name": "gen2-main", @@ -1337,7 +1337,7 @@ "Value": "amplifyData" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/AMPLIFY_DATA_DEFAULT_NAMEParameter/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/AMPLIFY_DATA_DEFAULT_NAMEParameter/Resource" } }, "lognutritiongen2mainlambdaServiceRoleEF64897B": { @@ -1393,7 +1393,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/lognutrition-gen2-main-lambda/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/lognutrition-gen2-main-lambda/ServiceRole/Resource" } }, "lognutritiongen2mainlambdaServiceRoleDefaultPolicy710D0C37": { @@ -1421,12 +1421,14 @@ "dynamodb:PartiQLDelete" ], "Effect": "Allow", - "Resource": { - "Fn::GetAtt": [ - "amplifyDataMealNestedStackMealNestedStackResourceDA3F2B9A", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataMealMealTableFB0A2E92TableArn" - ] - } + "Resource": [ + { + "Fn::GetAtt": [ + "amplifyDataMealNestedStackMealNestedStackResourceDA3F2B9A", + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataMealMealTableFD0BC2A7TableArn" + ] + } + ] } ], "Version": "2012-10-17" @@ -1439,7 +1441,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/lognutrition-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/lognutrition-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" } }, "lognutritiongen2mainlambda9BD8C969": { @@ -1452,7 +1454,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "91d03de9e89259cdf1c49e12563840635aabe14d176a5bbbae382bf753f0f415.zip" + "S3Key": "95bfa16faa7a499bfbb1e8a9f09b98f992b7cb9d303063244fd1159bf57c0ed7.zip" }, "Environment": { "Variables": { @@ -1468,7 +1470,7 @@ "API_FITNESSTRACKER_MEALTABLE_ARN": { "Fn::GetAtt": [ "amplifyDataMealNestedStackMealNestedStackResourceDA3F2B9A", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataMealMealTableFB0A2E92TableArn" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataMealMealTableFD0BC2A7TableArn" ] }, "API_FITNESSTRACKER_MEALTABLE_NAME": { @@ -1486,7 +1488,7 @@ { "Fn::GetAtt": [ "amplifyDataMealNestedStackMealNestedStackResourceDA3F2B9A", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataMealMealTableFB0A2E92TableArn" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataMealMealTableFD0BC2A7TableArn" ] } ] @@ -1541,8 +1543,8 @@ "lognutritiongen2mainlambdaServiceRoleEF64897B" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/lognutrition-gen2-main-lambda/Resource", - "aws:asset:path": "asset.91d03de9e89259cdf1c49e12563840635aabe14d176a5bbbae382bf753f0f415", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/lognutrition-gen2-main-lambda/Resource", + "aws:asset:path": "asset.95bfa16faa7a499bfbb1e8a9f09b98f992b7cb9d303063244fd1159bf57c0ed7", "aws:asset:is-bundled": true, "aws:asset:property": "Code" } @@ -1550,10 +1552,10 @@ "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/11RS2+DMAz+Lb2nWct22JVSbYdVVVekXZEbDE2bB4tDEUL89ynQwrbT97Bi+4sjHr2s+WoBDS1Ffl0qeeLdHsljnnoQV3ZEsrUTyKChrIOqotYI3r07qM7fKq7kBghZUpjB+dzFlfylUnFGDcGIK/mBLdtbg1vwkI5Nk8LMqmf0zLtNLa7oQ+XORjhYJUU723c9irBDeJ11OVbKthqN52NpOxkMiNATjwP0TIE+5cC7pDA7aNF9oSNpDUulKRV6a95qI3xwJpIUk9kzCZp3R6uGEAPOK46sZ0Sad6l30pQHcKDRoxvqD/FYIzM2xwvx/QDzkKQw4xmSmrzV0zHCyAe/d1AhRAYNCSV53FCi5JCLDXlTD6U05Z/h/5oenL3JHN34mWEhfqGnWxTx9StfLS4k5dLVxkuN/DjiD79VxsM+AgAA" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/6VSTW/bMAz9Lc1ZUdu0h6E318F6aJFlMbDLMASMTKdM9OGJcjND8H8fZDVJ156KnUi+J5KPFGdydnsrry7gwFNV76eaNjIukAPWVQC1Fytk13mFAg68jtC23Fsl44OH9vm3Llq6B0ZRNnZEvj8VLb2JKvWMBhJQtPSIvVg4i3MIUOWiZWPP0SD4Rsb7Tu0xJCZ7P+PE0B+yk7vJW5FJDt/IkWKZnxZdcHPUGPDbZocq8GQQ/5X9S2Rq6TSp/qwpx59QlhOqAAEN2k8K+5h81JV2n7a2jjW22vWJfk2anwABzBhYFskMQoPZ1CBj2dgn6NH/QM/krKjIbjUGZ792VoWEnJyyOYGDIDAyrpweP2+05+1kbxDMRsYqeLLbJXgwGNCP/DE4ylhbV+OO5WI05yZlY/P5lR0HZ05HmFoe/dcKOg2xhgMrTbI4cKlpnEuM81YBtmS3/zR/V3Tp3QvV6PMykyC548uX2Uxef5FXFzsmmvrOBjIoV9n+BdBFrHc2AwAA" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -1596,16 +1598,16 @@ ], "Description": "Enable server side encryption powered by KMS." }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthUserPool82133007Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { "Type": "String" } }, @@ -1876,12 +1878,12 @@ } }, "Outputs": { - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3datalognutritiongen2mainlambdaB5F1A17DRef": { + "amplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Ref": { "Value": { "Ref": "lognutritiongen2mainlambda9BD8C969" } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId": { + "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { "Value": { "Fn::GetAtt": [ "amplifyDataGraphQLAPI42A6FA33", @@ -1889,7 +1891,7 @@ ] } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3GraphQLUrl": { + "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAGraphQLUrl": { "Value": { "Fn::GetAtt": [ "amplifyDataGraphQLAPI42A6FA33", @@ -1897,7 +1899,7 @@ ] } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsDeploymentCustomResource1536MiB31EBB484DestinationBucketArn": { + "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsDeploymentCustomResource1536MiB8E4BD6ABDestinationBucketArn": { "Value": { "Fn::GetAtt": [ "amplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsDeploymentCustomResource1536MiB21775929", @@ -1905,7 +1907,7 @@ ] } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPIDefaultApiKeyDA026B5BApiKey": { + "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIDefaultApiKeyE10BC731ApiKey": { "Value": { "Fn::GetAtt": [ "amplifyDataGraphQLAPIDefaultApiKey1C8ED374", @@ -1913,7 +1915,7 @@ ] } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3datalognutritiongen2mainlambdaB5F1A17DArn": { + "amplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn": { "Value": { "Fn::GetAtt": [ "lognutritiongen2mainlambda9BD8C969", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistackadminapi43EA27F6-1G3WMFGGD1GX.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.description.txt similarity index 55% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistackadminapi43EA27F6-1G3WMFGGD1GX.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.description.txt index 7cc23c581cc..1e3215c63d9 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistackadminapi43EA27F6-1G3WMFGGD1GX.description.txt +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.description.txt @@ -1 +1 @@ -{"createdOn":"Linux","createdBy":"AmplifyPipelineDeploy","createdWith":"1.21.0","stackType":"custom","metadata":{}} \ No newline at end of file +{"createdOn":"Linux","createdBy":"AmplifyPipelineDeploy","createdWith":"1.21.1","stackType":"custom","metadata":{}} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.outputs.json new file mode 100644 index 00000000000..177131508c3 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.outputs.json @@ -0,0 +1,14 @@ +[ + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApiDeploymentStageprod3A54AD90Ref", + "OutputValue": "prod" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi59ABC85BRef", + "OutputValue": "rr7ckdesd4" + }, + { + "OutputKey": "RestApiEndpoint0551178A", + "OutputValue": "https://rr7ckdesd4.execute-api.us-east-1.amazonaws.com/prod/" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.parameters.json new file mode 100644 index 00000000000..eacc7e7d488 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.parameters.json @@ -0,0 +1,14 @@ +[ + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn", + "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:admin-gen2-main" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistackadminapi43EA27F6-1G3WMFGGD1GX.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.template.json similarity index 84% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistackadminapi43EA27F6-1G3WMFGGD1GX.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.template.json index ca5da1112a3..d7912bc3ee7 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistackadminapi43EA27F6-1G3WMFGGD1GX.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.template.json @@ -1,5 +1,5 @@ { - "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.21.0\",\"stackType\":\"custom\",\"metadata\":{}}", + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.21.1\",\"stackType\":\"custom\",\"metadata\":{}}", "Resources": { "RestApi0C43BF4B": { "Type": "AWS::ApiGateway::RestApi", @@ -25,7 +25,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/RestApi/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Resource" } }, "RestApiCloudWatchRoleE3ED6605": { @@ -79,7 +79,7 @@ "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/RestApi/CloudWatchRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/CloudWatchRole/Resource" } }, "RestApiAccount7C83CF5A": { @@ -98,10 +98,10 @@ "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/RestApi/Account" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Account" } }, - "RestApiDeployment180EC503f08cc8dc32d322e8ee0491887bc17f7c": { + "RestApiDeployment180EC503546d318a996a44726021c4af228bfd46": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "Automatically created by the RestApi construct", @@ -120,7 +120,7 @@ "RestApiDefault5XXD8CFC37C" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/RestApi/Deployment/Resource", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Deployment/Resource", "aws:cdk:do-not-refactor": true } }, @@ -128,7 +128,7 @@ "Type": "AWS::ApiGateway::Stage", "Properties": { "DeploymentId": { - "Ref": "RestApiDeployment180EC503f08cc8dc32d322e8ee0491887bc17f7c" + "Ref": "RestApiDeployment180EC503546d318a996a44726021c4af228bfd46" }, "RestApiId": { "Ref": "RestApi0C43BF4B" @@ -157,7 +157,7 @@ "RestApiAccount7C83CF5A" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/RestApi/DeploymentStage.prod/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/DeploymentStage.prod/Resource" } }, "RestApiadmin6E2AFAD8": { @@ -175,7 +175,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/RestApi/Default/admin/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/Resource" } }, "RestApiadminOPTIONS9579A88D": { @@ -218,15 +218,15 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/RestApi/Default/admin/OPTIONS/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/OPTIONS/Resource" } }, - "RestApiadminANYApiPermissionamplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistackadminapiRestApi69C11D3EANYadmin44C7AD40": { + "RestApiadminANYApiPermissionamplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi22C035AEANYadmin44FFEED1": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authadmingen2mainlambda2E47DE6AArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn" }, "Principal": "apigateway.amazonaws.com", "SourceArn": { @@ -259,15 +259,15 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/RestApi/Default/admin/ANY/ApiPermission.amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistackadminapiRestApi69C11D3E.ANY..admin" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/ANY/ApiPermission.amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi22C035AE.ANY..admin" } }, - "RestApiadminANYApiPermissionTestamplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistackadminapiRestApi69C11D3EANYadminA60A94A3": { + "RestApiadminANYApiPermissionTestamplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi22C035AEANYadminD21F14BB": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authadmingen2mainlambda2E47DE6AArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn" }, "Principal": "apigateway.amazonaws.com", "SourceArn": { @@ -296,7 +296,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/RestApi/Default/admin/ANY/ApiPermission.Test.amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistackadminapiRestApi69C11D3E.ANY..admin" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/ANY/ApiPermission.Test.amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi22C035AE.ANY..admin" } }, "RestApiadminANY959B010C": { @@ -321,7 +321,7 @@ }, ":lambda:path/2015-03-31/functions/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authadmingen2mainlambda2E47DE6AArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn" }, "/invocations" ] @@ -336,7 +336,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/RestApi/Default/admin/ANY/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/ANY/Resource" } }, "RestApiadminproxy34EEEF46": { @@ -351,7 +351,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/Resource" } }, "RestApiadminproxyOPTIONS0428B0AB": { @@ -394,15 +394,15 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/OPTIONS/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/OPTIONS/Resource" } }, - "RestApiadminproxyANYApiPermissionamplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistackadminapiRestApi69C11D3EANYadminproxyDF28059D": { + "RestApiadminproxyANYApiPermissionamplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi22C035AEANYadminproxy15EA3F86": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authadmingen2mainlambda2E47DE6AArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn" }, "Principal": "apigateway.amazonaws.com", "SourceArn": { @@ -435,15 +435,15 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/ANY/ApiPermission.amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistackadminapiRestApi69C11D3E.ANY..admin.{proxy+}" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/ANY/ApiPermission.amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi22C035AE.ANY..admin.{proxy+}" } }, - "RestApiadminproxyANYApiPermissionTestamplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistackadminapiRestApi69C11D3EANYadminproxy4FB2BF17": { + "RestApiadminproxyANYApiPermissionTestamplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi22C035AEANYadminproxyCA6BDB78": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authadmingen2mainlambda2E47DE6AArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn" }, "Principal": "apigateway.amazonaws.com", "SourceArn": { @@ -472,7 +472,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/ANY/ApiPermission.Test.amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistackadminapiRestApi69C11D3E.ANY..admin.{proxy+}" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/ANY/ApiPermission.Test.amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi22C035AE.ANY..admin.{proxy+}" } }, "RestApiadminproxyANYAD871D2E": { @@ -497,7 +497,7 @@ }, ":lambda:path/2015-03-31/functions/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authadmingen2mainlambda2E47DE6AArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn" }, "/invocations" ] @@ -512,7 +512,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/ANY/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/ANY/Resource" } }, "RestApiDefault4XX291F46B7": { @@ -530,7 +530,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/RestApi/Default4XX/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default4XX/Resource" } }, "RestApiDefault5XXD8CFC37C": { @@ -548,7 +548,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/RestApi/Default5XX/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default5XX/Resource" } }, "Gen1adminapiPolicy55C22DB4": { @@ -575,7 +575,7 @@ { "Ref": "AWS::AccountId" }, - ":kh5xa5hayh/*/GET/*" + ":bbk7dedp01/*/GET/*" ] ] } @@ -586,12 +586,12 @@ "PolicyName": "Gen1adminapiPolicy55C22DB4", "Roles": [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" } ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/Gen1adminapiPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/Gen1adminapiPolicy/Resource" } }, "adminAdminPolicyED58DCB3": { @@ -659,21 +659,21 @@ "PolicyName": "adminAdminPolicyED58DCB3", "Roles": [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthAdminGroupRole5A967615Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref" } ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/adminAdminPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/adminAdminPolicy/Resource" } }, "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/12Oz07DMAyHn2X31GwVh10HSJyAKXsA5CVmZMs/1e5KVfXdUUgFEyd/vy927Bba+w2sVzhwY+yl8e4I0yuxkD0ImovCgd8nzO6EQgOOMGli2WWnHj/iDe6MSX0U9UTZpzFQlGJv0kHwRMVV0MSp7ww9IP+F5c/KLySfyRa10L5LX+Pv83O9RxPnFPln9L9azisrZuUwwKSTr0tK3SfvzFhipVl5DEeLUAx1wTG7FOfS8NZL7mVWMVmCM99d2xY2W1ivzuxc0/VRXCDQtX4DFZnJJlMBAAA=" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/12Oz07DMAyHn2X3NIxqh10HSJyAKXsA5CVmeMs/1S5dVfXdUUgFEyd/vy927Fa3m41er2DgxrpL4+mop1dkQXcQsBcFA79PkOkEggOMejLIssukHj/iDe6sTX0U9YTZpzFglGJv0kHghMVVMMip7yw+AP+F5c/KLyifyRW10L5L1/H3+bneY5Bzivwz+l8t55UVsyIIejLJ1yWl7pMnO5ZYaVYewtGBLga7QMyU4lwa3nrJvcwqJof6zHdfbavvt3q9OjNR0/VRKKA2tX4D1w/yhFMBAAA=" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -705,12 +705,12 @@ ] } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistackadminapiRestApi9C3E9536Ref": { + "amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi59ABC85BRef": { "Value": { "Ref": "RestApi0C43BF4B" } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistackadminapiRestApiDeploymentStageprodEE0CE72ARef": { + "amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApiDeploymentStageprod3A54AD90Ref": { "Value": { "Ref": "RestApiDeploymentStageprod3855DE66" } @@ -983,13 +983,13 @@ } }, "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authadmingen2mainlambda2E47DE6AArn": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthAdminGroupRole5A967615Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { "Type": "String" } } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistacknutritionapi72914ECD-UEOCVVQH4SZ3.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.description.txt similarity index 55% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistacknutritionapi72914ECD-UEOCVVQH4SZ3.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.description.txt index 7cc23c581cc..1e3215c63d9 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistacknutritionapi72914ECD-UEOCVVQH4SZ3.description.txt +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.description.txt @@ -1 +1 @@ -{"createdOn":"Linux","createdBy":"AmplifyPipelineDeploy","createdWith":"1.21.0","stackType":"custom","metadata":{}} \ No newline at end of file +{"createdOn":"Linux","createdBy":"AmplifyPipelineDeploy","createdWith":"1.21.1","stackType":"custom","metadata":{}} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.outputs.json new file mode 100644 index 00000000000..28d30bc1428 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.outputs.json @@ -0,0 +1,14 @@ +[ + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiDeploymentStageprodD1246DCDRef", + "OutputValue": "prod" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApi1438AE73Ref", + "OutputValue": "e2y3anael5" + }, + { + "OutputKey": "RestApiEndpoint0551178A", + "OutputValue": "https://e2y3anael5.execute-api.us-east-1.amazonaws.com/prod/" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.parameters.json new file mode 100644 index 00000000000..6ad66ae9091 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.parameters.json @@ -0,0 +1,14 @@ +[ + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn", + "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-gen2-main" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistacknutritionapi72914ECD-UEOCVVQH4SZ3.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.template.json similarity index 88% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistacknutritionapi72914ECD-UEOCVVQH4SZ3.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.template.json index e42063e577c..332fbac6f2c 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistacknutritionapi72914ECD-UEOCVVQH4SZ3.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.template.json @@ -1,5 +1,5 @@ { - "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.21.0\",\"stackType\":\"custom\",\"metadata\":{}}", + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.21.1\",\"stackType\":\"custom\",\"metadata\":{}}", "Resources": { "RestApi0C43BF4B": { "Type": "AWS::ApiGateway::RestApi", @@ -25,7 +25,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Resource" } }, "RestApiCloudWatchRoleE3ED6605": { @@ -79,7 +79,7 @@ "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/CloudWatchRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/CloudWatchRole/Resource" } }, "RestApiAccount7C83CF5A": { @@ -98,10 +98,10 @@ "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/Account" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Account" } }, - "RestApiDeployment180EC50348ad1ceaa83769d36410f648a7ea8c9b": { + "RestApiDeployment180EC503d495388c1d958d92be722f42111dede2": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "Automatically created by the RestApi construct", @@ -121,7 +121,7 @@ "RestApiDefault5XXD8CFC37C" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/Deployment/Resource", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Deployment/Resource", "aws:cdk:do-not-refactor": true } }, @@ -129,7 +129,7 @@ "Type": "AWS::ApiGateway::Stage", "Properties": { "DeploymentId": { - "Ref": "RestApiDeployment180EC50348ad1ceaa83769d36410f648a7ea8c9b" + "Ref": "RestApiDeployment180EC503d495388c1d958d92be722f42111dede2" }, "RestApiId": { "Ref": "RestApi0C43BF4B" @@ -158,7 +158,7 @@ "RestApiAccount7C83CF5A" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/DeploymentStage.prod/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/DeploymentStage.prod/Resource" } }, "RestApinutrition3942DEFC": { @@ -176,7 +176,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/Default/nutrition/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/Resource" } }, "RestApinutritionlog525763DE": { @@ -191,7 +191,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/Resource" } }, "RestApinutritionlogOPTIONS0916370A": { @@ -234,15 +234,15 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/OPTIONS/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/OPTIONS/Resource" } }, - "RestApinutritionlogANYApiPermissionamplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistacknutritionapiRestApi5CE4D05DANYnutritionlogB9582A16": { + "RestApinutritionlogANYApiPermissionamplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiBC4946DCANYnutritionlog9FE434DE": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataNestedStackdataNestedStackResource1172CA08Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3datalognutritiongen2mainlambdaB5F1A17DArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn" }, "Principal": "apigateway.amazonaws.com", "SourceArn": { @@ -275,15 +275,15 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/ANY/ApiPermission.amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistacknutritionapiRestApi5CE4D05D.ANY..nutrition.log" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/ANY/ApiPermission.amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiBC4946DC.ANY..nutrition.log" } }, - "RestApinutritionlogANYApiPermissionTestamplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistacknutritionapiRestApi5CE4D05DANYnutritionlog4B62744A": { + "RestApinutritionlogANYApiPermissionTestamplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiBC4946DCANYnutritionlog638CFC51": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataNestedStackdataNestedStackResource1172CA08Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3datalognutritiongen2mainlambdaB5F1A17DArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn" }, "Principal": "apigateway.amazonaws.com", "SourceArn": { @@ -312,7 +312,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/ANY/ApiPermission.Test.amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistacknutritionapiRestApi5CE4D05D.ANY..nutrition.log" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/ANY/ApiPermission.Test.amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiBC4946DC.ANY..nutrition.log" } }, "RestApinutritionlogANY08C15E55": { @@ -337,7 +337,7 @@ }, ":lambda:path/2015-03-31/functions/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataNestedStackdataNestedStackResource1172CA08Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3datalognutritiongen2mainlambdaB5F1A17DArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn" }, "/invocations" ] @@ -352,7 +352,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/ANY/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/ANY/Resource" } }, "RestApinutritionlogproxyA0E81954": { @@ -367,7 +367,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/Resource" } }, "RestApinutritionlogproxyOPTIONS695D781E": { @@ -410,15 +410,15 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/OPTIONS/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/OPTIONS/Resource" } }, - "RestApinutritionlogproxyANYApiPermissionamplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistacknutritionapiRestApi5CE4D05DANYnutritionlogproxyB2113086": { + "RestApinutritionlogproxyANYApiPermissionamplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiBC4946DCANYnutritionlogproxy049F99D2": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataNestedStackdataNestedStackResource1172CA08Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3datalognutritiongen2mainlambdaB5F1A17DArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn" }, "Principal": "apigateway.amazonaws.com", "SourceArn": { @@ -451,15 +451,15 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/ANY/ApiPermission.amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistacknutritionapiRestApi5CE4D05D.ANY..nutrition.log.{proxy+}" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/ANY/ApiPermission.amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiBC4946DC.ANY..nutrition.log.{proxy+}" } }, - "RestApinutritionlogproxyANYApiPermissionTestamplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistacknutritionapiRestApi5CE4D05DANYnutritionlogproxy05563614": { + "RestApinutritionlogproxyANYApiPermissionTestamplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiBC4946DCANYnutritionlogproxyE4A0E696": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataNestedStackdataNestedStackResource1172CA08Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3datalognutritiongen2mainlambdaB5F1A17DArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn" }, "Principal": "apigateway.amazonaws.com", "SourceArn": { @@ -488,7 +488,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/ANY/ApiPermission.Test.amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistacknutritionapiRestApi5CE4D05D.ANY..nutrition.log.{proxy+}" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/ANY/ApiPermission.Test.amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiBC4946DC.ANY..nutrition.log.{proxy+}" } }, "RestApinutritionlogproxyANY89358520": { @@ -513,7 +513,7 @@ }, ":lambda:path/2015-03-31/functions/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataNestedStackdataNestedStackResource1172CA08Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3datalognutritiongen2mainlambdaB5F1A17DArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn" }, "/invocations" ] @@ -528,7 +528,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/ANY/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/ANY/Resource" } }, "RestApiDefault4XX291F46B7": { @@ -546,7 +546,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/Default4XX/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default4XX/Resource" } }, "RestApiDefault5XXD8CFC37C": { @@ -564,7 +564,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/RestApi/Default5XX/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default5XX/Resource" } }, "Gen1nutritionapiPolicyAC846721": { @@ -592,7 +592,7 @@ { "Ref": "AWS::AccountId" }, - ":6smuxn28tb/*/POST/*" + ":ekto8iln0h/*/POST/*" ] ] }, @@ -612,7 +612,7 @@ { "Ref": "AWS::AccountId" }, - ":6smuxn28tb/*/GET/*" + ":ekto8iln0h/*/GET/*" ] ] }, @@ -632,7 +632,7 @@ { "Ref": "AWS::AccountId" }, - ":6smuxn28tb/*/PUT/*" + ":ekto8iln0h/*/PUT/*" ] ] }, @@ -652,7 +652,7 @@ { "Ref": "AWS::AccountId" }, - ":6smuxn28tb/*/DELETE/*" + ":ekto8iln0h/*/DELETE/*" ] ] } @@ -664,12 +664,12 @@ "PolicyName": "Gen1nutritionapiPolicyAC846721", "Roles": [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" } ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/Gen1nutritionapiPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/Gen1nutritionapiPolicy/Resource" } }, "nutritionlogAuthPolicyF60C3901": { @@ -881,12 +881,12 @@ "PolicyName": "nutritionlogAuthPolicyF60C3901", "Roles": [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" } ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/nutritionlogAuthPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/nutritionlogAuthPolicy/Resource" } }, "nutritionlogAdminPolicy5FCB013F": { @@ -1098,21 +1098,21 @@ "PolicyName": "nutritionlogAdminPolicy5FCB013F", "Roles": [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthAdminGroupRole5A967615Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref" } ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/nutritionlogAdminPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/nutritionlogAdminPolicy/Resource" } }, "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/12Oz07DMAyHn2X31GwVh10HSJyAKXsA5CVmZMs/1e5KVfXdUUgFEyd/vy927Bba+w2sVzhwY+yl8e4I0yuxkD0ImovCgd8nzO6EQgOOMGli2WWnHj/iDe6MSX0U9UTZpzFQlGJv0kHwRMVV0MSp7ww9IP+F5c/KLySfyRa10L5LX+Pv83O9RxPnFPln9L9azisrZuUwwKSTr0tK3SfvzFhipVl5DEeLUAx1wTG7FOfS8NZL7mVWMVmCM99d2xY2W1ivzuxc0/VRXCDQtX4DFZnJJlMBAAA=" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/12Oz07DMAyHn2X3NIxqh10HSJyAKXsA5CVmeMs/1S5dVfXdUUgFEyd/vy927Fa3m41er2DgxrpL4+mop1dkQXcQsBcFA79PkOkEggOMejLIssukHj/iDe6sTX0U9YTZpzFglGJv0kHghMVVMMip7yw+AP+F5c/KLyifyRW10L5L1/H3+bneY5Bzivwz+l8t55UVsyIIejLJ1yWl7pMnO5ZYaVYewtGBLga7QMyU4lwa3nrJvcwqJof6zHdfbavvt3q9OjNR0/VRKKA2tX4D1w/yhFMBAAA=" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -1144,12 +1144,12 @@ ] } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistacknutritionapiRestApi33E7E7D9Ref": { + "amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApi1438AE73Ref": { "Value": { "Ref": "RestApi0C43BF4B" } }, - "amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistacknutritionapiRestApiDeploymentStageprod4B62A983Ref": { + "amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiDeploymentStageprodD1246DCDRef": { "Value": { "Ref": "RestApiDeploymentStageprod3855DE66" } @@ -1422,13 +1422,13 @@ } }, "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataNestedStackdataNestedStackResource1172CA08Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3datalognutritiongen2mainlambdaB5F1A17DArn": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthAdminGroupRole5A967615Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { "Type": "String" } } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.description.txt similarity index 56% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.description.txt index b40731368ef..afc6ec23957 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3.description.txt +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.description.txt @@ -1 +1 @@ -{"createdOn":"Linux","createdBy":"AmplifyPipelineDeploy","createdWith":"1.21.0","stackType":"root","metadata":{}} \ No newline at end of file +{"createdOn":"Linux","createdBy":"AmplifyPipelineDeploy","createdWith":"1.21.1","stackType":"root","metadata":{}} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.outputs.json similarity index 77% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.outputs.json index 00773074c3f..4a2f22d3f04 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.outputs.json @@ -1,7 +1,7 @@ [ { "OutputKey": "webClientId", - "OutputValue": "2mph5n4c194d3ogp33evjku9cg" + "OutputValue": "dgddko7evul00or8262g7n9ub" }, { "OutputKey": "socialProviders", @@ -17,7 +17,7 @@ }, { "OutputKey": "oauthClientId", - "OutputValue": "2mph5n4c194d3ogp33evjku9cg" + "OutputValue": "dgddko7evul00or8262g7n9ub" }, { "OutputKey": "allowUnauthenticatedIdentities", @@ -53,7 +53,7 @@ }, { "OutputKey": "awsAppsyncApiKey", - "OutputValue": "da2-ebjsxuyj6nccppdwuy2ozljcla" + "OutputValue": "da2-mpyed5y2pvbcjl2qcbxuq2rspe" }, { "OutputKey": "awsAppsyncAuthenticationType", @@ -61,7 +61,7 @@ }, { "OutputKey": "customOutputs", - "OutputValue": "{\"custom\":{\"API\":{\"adminapi-gen2-main\":{\"endpoint\":\"https://42m7vp2bob.execute-api.us-east-1.amazonaws.com/prod\",\"region\":\"us-east-1\",\"apiName\":\"adminapi-gen2-main\"},\"nutritionapi-gen2-main\":{\"endpoint\":\"https://nimt9s6hi5.execute-api.us-east-1.amazonaws.com/prod\",\"region\":\"us-east-1\",\"apiName\":\"nutritionapi-gen2-main\"}}},\"version\":\"1.4\"}" + "OutputValue": "{\"custom\":{\"API\":{\"adminapi-gen2-main\":{\"endpoint\":\"https://rr7ckdesd4.execute-api.us-east-1.amazonaws.com/prod\",\"region\":\"us-east-1\",\"apiName\":\"adminapi-gen2-main\"},\"nutritionapi-gen2-main\":{\"endpoint\":\"https://e2y3anael5.execute-api.us-east-1.amazonaws.com/prod\",\"region\":\"us-east-1\",\"apiName\":\"nutritionapi-gen2-main\"}}},\"version\":\"1.4\"}" }, { "OutputKey": "oauthRedirectSignIn", @@ -73,11 +73,11 @@ }, { "OutputKey": "awsAppsyncApiEndpoint", - "OutputValue": "https://77wvqbitijagpavjez3eammdna.appsync-api.us-east-1.amazonaws.com/graphql" + "OutputValue": "https://7ltandzu5zbxvcqrr24edz4hym.appsync-api.us-east-1.amazonaws.com/graphql" }, { "OutputKey": "awsAppsyncApiId", - "OutputValue": "aolmivry45bvbmfywwm6tb542u" + "OutputValue": "uhg6hv7zmzav5doaroa4tocwv4" }, { "OutputKey": "authRegion", @@ -85,7 +85,7 @@ }, { "OutputKey": "amplifyApiModelSchemaS3Uri", - "OutputValue": "s3://amplify-fitnesstracker-gen-amplifydataamplifycodege-cm7x3zuy98og/model-schema.graphql" + "OutputValue": "s3://amplify-fitnesstracker-ge-amplifydataamplifycodege-cxlnc2wmwnpq/model-schema.graphql" }, { "OutputKey": "groups", @@ -93,7 +93,7 @@ }, { "OutputKey": "definedFunctions", - "OutputValue": "[\"fitnesstracker6b0fc1196b0fc119PreSignup-gen2-main\",\"admin-gen2-main\",\"lognutrition-gen2-main\"]" + "OutputValue": "[\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main\",\"admin-gen2-main\",\"lognutrition-gen2-main\"]" }, { "OutputKey": "passwordlessOptions", @@ -117,11 +117,11 @@ }, { "OutputKey": "userPoolId", - "OutputValue": "us-east-1_MZOGAx4cE" + "OutputValue": "us-east-1_mQEsDQ1lC" }, { "OutputKey": "identityPoolId", - "OutputValue": "us-east-1:6528409f-13ea-46fb-987a-ad861eedaad6" + "OutputValue": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" }, { "OutputKey": "verificationMechanisms", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.parameters.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.parameters.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.template.json similarity index 80% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.template.json index 816410eaeec..5c0f04feaf7 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.template.json @@ -1,5 +1,5 @@ { - "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.21.0\",\"stackType\":\"root\",\"metadata\":{}}", + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.21.1\",\"stackType\":\"root\",\"metadata\":{}}", "Metadata": { "AWS::Amplify::Platform": { "version": "1", @@ -72,7 +72,7 @@ "Value": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthUserPool82133007Ref" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref" ] } }, @@ -80,7 +80,7 @@ "Value": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthUserPoolAppClient1C98798ERef" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPoolAppClientE9EEF58ARef" ] } }, @@ -88,7 +88,7 @@ "Value": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" ] } }, @@ -146,7 +146,7 @@ "Value": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthUserPoolAppClient1C98798ERef" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPoolAppClientE9EEF58ARef" ] } }, @@ -162,21 +162,21 @@ { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3authfitnesstracker6b0fc1196b0fc119PreSignupgen2mainlambda8F8CF17DRef" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authfitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaB4152CB6Ref" ] }, "\",\"", { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3authadmingen2mainlambda2E47DE6ARef" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FRef" ] }, "\",\"", { "Fn::GetAtt": [ "data7552DF31", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3datalognutritiongen2mainlambdaB5F1A17DRef" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Ref" ] }, "\"]" @@ -188,7 +188,7 @@ "Value": { "Fn::GetAtt": [ "data7552DF31", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" ] } }, @@ -196,7 +196,7 @@ "Value": { "Fn::GetAtt": [ "data7552DF31", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3GraphQLUrl" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAGraphQLUrl" ] } }, @@ -229,7 +229,7 @@ { "Fn::GetAtt": [ "data7552DF31", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsDeploymentCustomResource1536MiB31EBB484DestinationBucketArn" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsDeploymentCustomResource1536MiB8E4BD6ABDestinationBucketArn" ] } ] @@ -249,7 +249,7 @@ "Value": { "Fn::GetAtt": [ "data7552DF31", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPIDefaultApiKeyDA026B5BApiKey" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIDefaultApiKeyE10BC731ApiKey" ] } }, @@ -265,7 +265,7 @@ { "Fn::GetAtt": [ "restapistackadminapi43EA27F6", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistackadminapiRestApi9C3E9536Ref" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi59ABC85BRef" ] }, ".execute-api.", @@ -280,7 +280,7 @@ { "Fn::GetAtt": [ "restapistackadminapi43EA27F6", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistackadminapiRestApiDeploymentStageprodEE0CE72ARef" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApiDeploymentStageprod3A54AD90Ref" ] }, "\",\"region\":\"", @@ -291,7 +291,7 @@ { "Fn::GetAtt": [ "restapistacknutritionapi72914ECD", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistacknutritionapiRestApi33E7E7D9Ref" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApi1438AE73Ref" ] }, ".execute-api.", @@ -306,7 +306,7 @@ { "Fn::GetAtt": [ "restapistacknutritionapi72914ECD", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistacknutritionapiRestApiDeploymentStageprod4B62A983Ref" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiDeploymentStageprodD1246DCDRef" ] }, "\",\"region\":\"", @@ -369,7 +369,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/AmplifyBranchLinker/CustomResourceLambda/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/AmplifyBranchLinker/CustomResourceLambda/ServiceRole/Resource" } }, "AmplifyBranchLinkerCustomResourceLambdaServiceRoleDefaultPolicy86099CA1": { @@ -396,7 +396,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/AmplifyBranchLinker/CustomResourceLambda/ServiceRole/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/AmplifyBranchLinker/CustomResourceLambda/ServiceRole/DefaultPolicy/Resource" } }, "AmplifyBranchLinkerCustomResourceLambda582AC093": { @@ -406,7 +406,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "1a757fd2e48bffd6245369585c61b0ce615ce78053da4f4387a9c069127512c0.zip" + "S3Key": "c46b855c2bbfeb6a46b246009556bfe72f2c2079543b813d7312946ee01480a0.zip" }, "Handler": "index.handler", "Role": { @@ -441,8 +441,8 @@ "AmplifyBranchLinkerCustomResourceLambdaServiceRole3DDCBC03" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/AmplifyBranchLinker/CustomResourceLambda/Resource", - "aws:asset:path": "asset.1a757fd2e48bffd6245369585c61b0ce615ce78053da4f4387a9c069127512c0", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/AmplifyBranchLinker/CustomResourceLambda/Resource", + "aws:asset:path": "asset.c46b855c2bbfeb6a46b246009556bfe72f2c2079543b813d7312946ee01480a0", "aws:asset:is-bundled": true, "aws:asset:property": "Code" } @@ -496,7 +496,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/AmplifyBranchLinker/CustomResourceProvider/framework-onEvent/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/AmplifyBranchLinker/CustomResourceProvider/framework-onEvent/ServiceRole/Resource" } }, "AmplifyBranchLinkerCustomResourceProviderframeworkonEventServiceRoleDefaultPolicy38AAE412": { @@ -551,7 +551,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/AmplifyBranchLinker/CustomResourceProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/AmplifyBranchLinker/CustomResourceProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource" } }, "AmplifyBranchLinkerCustomResourceProviderframeworkonEvent3B23F900": { @@ -563,7 +563,7 @@ }, "S3Key": "07a90cc3efdfc34da22208dcd9d211f06f5b0e01b21e778edc7c3966b1f61d57.zip" }, - "Description": "AWS CDK resource provider framework - onEvent (amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/AmplifyBranchLinker/CustomResourceProvider)", + "Description": "AWS CDK resource provider framework - onEvent (amplify-fitnesstracker-gen2main-branch-a09655d799/AmplifyBranchLinker/CustomResourceProvider)", "Environment": { "Variables": { "USER_ON_EVENT_FUNCTION_ARN": { @@ -611,7 +611,7 @@ "AmplifyBranchLinkerCustomResourceProviderframeworkonEventServiceRole92A035EB" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/AmplifyBranchLinker/CustomResourceProvider/framework-onEvent/Resource", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/AmplifyBranchLinker/CustomResourceProvider/framework-onEvent/Resource", "aws:asset:path": "asset.07a90cc3efdfc34da22208dcd9d211f06f5b0e01b21e778edc7c3966b1f61d57", "aws:asset:is-bundled": false, "aws:asset:property": "Code" @@ -632,7 +632,7 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/AmplifyBranchLinker/CustomResource/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/AmplifyBranchLinker/CustomResource/Default" } }, "auth179371D7": { @@ -672,7 +672,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/e52c9bb6ad548fe086a3001e50d8a3a36a62877d32be522ac8a5e1690c00a794.json" + "/c98b0e8b3d82622c79869766e34c83f60f8a4afd502c4e1e8c8a7727a5ba0dd6.json" ] ] } @@ -680,8 +680,8 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/auth.NestedStack/auth.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3auth14C5D305.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth.NestedStack/auth.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799auth8002D454.nested.template.json", "aws:asset:property": "TemplateURL" } }, @@ -689,28 +689,28 @@ "Type": "AWS::CloudFormation::Stack", "Properties": { "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthUserPool82133007Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthUserPool82133007Ref" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" ] } }, @@ -748,7 +748,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/17bdd06ff46b5c99217013edb3cdb2e284f6a5942f7bc36239c10f6b1da19592.json" + "/9af9fdc04980936cf2e97dd00dd4f23f7c8d09e874b4d1759996528c6b1b2ad0.json" ] ] } @@ -756,8 +756,8 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/data.NestedStack/data.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataED3487CD.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data.NestedStack/data.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799data7EFD86C7.nested.template.json", "aws:asset:property": "TemplateURL" } }, @@ -765,22 +765,22 @@ "Type": "AWS::CloudFormation::Stack", "Properties": { "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authadmingen2mainlambda2E47DE6AArn": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3authadmingen2mainlambda2E47DE6AArn" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthAdminGroupRole5A967615Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthAdminGroupRole5A967615Ref" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref" ] } }, @@ -818,7 +818,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/e439aa95599da7840f4d3dbd426f708cb124815fc9e644487d1aa70d17adc94a.json" + "/02247b1aa7791fcc8cd6660bc8c0d6b04aea06c33687347dbdce86e7cb25d36d.json" ] ] } @@ -826,8 +826,8 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-adminapi.NestedStack/rest-api-stack-adminapi.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistackadminapi3404F2D5.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi.NestedStack/rest-api-stack-adminapi.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapi0C1629F8.nested.template.json", "aws:asset:property": "TemplateURL" } }, @@ -835,22 +835,22 @@ "Type": "AWS::CloudFormation::Stack", "Properties": { "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataNestedStackdataNestedStackResource1172CA08Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3datalognutritiongen2mainlambdaB5F1A17DArn": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn": { "Fn::GetAtt": [ "data7552DF31", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3datalognutritiongen2mainlambdaB5F1A17DArn" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" ] }, - "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthAdminGroupRole5A967615Ref": { + "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthAdminGroupRole5A967615Ref" + "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref" ] } }, @@ -888,7 +888,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/3fa005c13e160860bca05bdd866cc7bad1f73d84083432328d2f8dd258bddf0f.json" + "/230c849ea4015778484fa403f7ff7cb83d41e7a5b4a53ea1a867dc966a2f0081.json" ] ] } @@ -896,18 +896,18 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/rest-api-stack-nutritionapi.NestedStack/rest-api-stack-nutritionapi.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistacknutritionapiE9E77A9E.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi.NestedStack/rest-api-stack-nutritionapi.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapi279DE088.nested.template.json", "aws:asset:property": "TemplateURL" } }, "CDKMetadata": { "Type": "AWS::CDK::Metadata", "Properties": { - "Analytics": "v2:deflate64:H4sIAAAAAAAA/02PzWrDQAyEnyV3WU2cHHptDD22wXkAo6yVIP/slpU2oRi/e/C6LT19I4YZNCWWhx1uN/TQwrV9McgFp7OR66G6+s9kX8mAHtpMA42XlhofWu4UPzLek3cmwYPQiFMdBl5SmacwiPtezlXNoPuGVNkU3xaA7vGYXM92JGVY63Gqrv6v9VfMM+TI2egm/gYuqYWxiawhRceKpxju0nKEKjv1j5Gf+afzrhmWCdjpy70scfeK202nIkVM3mRkrFc+AUTtSG0ZAQAA" + "Analytics": "v2:deflate64:H4sIAAAAAAAA/02PzWrDQAyEnyV3WU2dHHJtDD22wXkAo6yVIP/slpU2oRi/e/C6LT19I4YZNCWW+z1uN/TQwrV9McgFp7OR66G6+s9kX8mAHtpMA42XlhofWu4UPzLek3cmwYPQiFMdBl5SmacwiPtezlXNoLuGVNkU3xaA7vCYXM92JGVY63Gqrv6v9VfMM+TI2egm/gYuqYWxiawhRceKpxju0nKEKjv1j5Gf+afzrhmWCdjpy70s8fWA202nIkVM3mRkrFc+AXlCmgwZAQAA" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-f6c5a5beb3/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataAmplifyTableManagerNestedStackA-1A2OIOGDUJDM8.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataAmplifyTableManagerNestedStackA-1A2OIOGDUJDM8.outputs.json deleted file mode 100644 index 8b5776bb764..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataAmplifyTableManagerNestedStackA-1A2OIOGDUJDM8.outputs.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent6EDC1D70Arn", - "OutputValue": "arn:aws:lambda:us-east-1:123456789012:function:amplify-fitnesstracker-gen-TableManagerCustomProvid-jfKSxmnonqJ5" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataAmplifyTableManagerNestedStackA-1A2OIOGDUJDM8.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataAmplifyTableManagerNestedStackA-1A2OIOGDUJDM8.parameters.json deleted file mode 100644 index 89c4b9427ca..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataAmplifyTableManagerNestedStackA-1A2OIOGDUJDM8.parameters.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId", - "ParameterValue": "aolmivry45bvbmfywwm6tb542u" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataConnectionStackNestedStackConne-1PZTW5BMDQ740.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataConnectionStackNestedStackConne-1PZTW5BMDQ740.parameters.json deleted file mode 100644 index 0195dc97253..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataConnectionStackNestedStackConne-1PZTW5BMDQ740.parameters.json +++ /dev/null @@ -1,30 +0,0 @@ -[ - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName", - "ParameterValue": "NONE_DS" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref", - "ParameterValue": "amplify-fitnesstracker-gen-amplifyAuthauthenticatedU-ROG8INaCaQWH" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref", - "ParameterValue": "amplify-fitnesstracker-gen-amplifyAuthunauthenticate-xt24LpqBVS1s" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId", - "ParameterValue": "aolmivry45bvbmfywwm6tb542u" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseNestedStackExerciseNestedStackResource558D738COutputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseExerciseDataSource6949CF09Name", - "ParameterValue": "ExerciseTable" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseNestedStackExerciseNestedStackResource558D738COutputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseExerciseTable318B1DEBTableArn", - "ParameterValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Exercise-2aikutabnvbuhlzmh4mvkg3eji-main" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef", - "ParameterValue": "us-east-1:6528409f-13ea-46fb-987a-ad861eedaad6" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataExerciseNestedStackExerciseNest-GSLDGK4G6DEO.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataExerciseNestedStackExerciseNest-GSLDGK4G6DEO.outputs.json deleted file mode 100644 index b505b6a1e85..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataExerciseNestedStackExerciseNest-GSLDGK4G6DEO.outputs.json +++ /dev/null @@ -1,22 +0,0 @@ -[ - { - "OutputKey": "GetAttExerciseTableName", - "OutputValue": "Exercise-2aikutabnvbuhlzmh4mvkg3eji-main", - "Description": "Your DynamoDB table name.", - "ExportName": "aolmivry45bvbmfywwm6tb542u:GetAtt:ExerciseTable:Name" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseExerciseTable318B1DEBTableArn", - "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Exercise-2aikutabnvbuhlzmh4mvkg3eji-main" - }, - { - "OutputKey": "GetAttExerciseTableStreamArn", - "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Exercise-2aikutabnvbuhlzmh4mvkg3eji-main/stream/2026-03-07T19:49:12.813", - "Description": "Your DynamoDB table StreamArn.", - "ExportName": "aolmivry45bvbmfywwm6tb542u:GetAtt:ExerciseTable:StreamArn" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataExerciseExerciseDataSource6949CF09Name", - "OutputValue": "ExerciseTable" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataExerciseNestedStackExerciseNest-GSLDGK4G6DEO.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataExerciseNestedStackExerciseNest-GSLDGK4G6DEO.parameters.json deleted file mode 100644 index d6dedca64c5..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataExerciseNestedStackExerciseNest-GSLDGK4G6DEO.parameters.json +++ /dev/null @@ -1,46 +0,0 @@ -[ - { - "ParameterKey": "DynamoDBModelTableReadIOPS", - "ParameterValue": "5" - }, - { - "ParameterKey": "DynamoDBEnableServerSideEncryption", - "ParameterValue": "true" - }, - { - "ParameterKey": "DynamoDBEnablePointInTimeRecovery", - "ParameterValue": "false" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName", - "ParameterValue": "NONE_DS" - }, - { - "ParameterKey": "DynamoDBBillingMode", - "ParameterValue": "PAY_PER_REQUEST" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref", - "ParameterValue": "amplify-fitnesstracker-gen-amplifyAuthauthenticatedU-ROG8INaCaQWH" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref", - "ParameterValue": "amplify-fitnesstracker-gen-amplifyAuthunauthenticate-xt24LpqBVS1s" - }, - { - "ParameterKey": "DynamoDBModelTableWriteIOPS", - "ParameterValue": "5" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId", - "ParameterValue": "aolmivry45bvbmfywwm6tb542u" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource9E5C3FE8Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerTableMana3F678B61", - "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:amplify-fitnesstracker-gen-TableManagerCustomProvid-jfKSxmnonqJ5" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef", - "ParameterValue": "us-east-1:6528409f-13ea-46fb-987a-ad861eedaad6" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataMealNestedStackMealNestedStackR-8W0VUDLMFHA1.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataMealNestedStackMealNestedStackR-8W0VUDLMFHA1.outputs.json deleted file mode 100644 index f1b98ddb27f..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataMealNestedStackMealNestedStackR-8W0VUDLMFHA1.outputs.json +++ /dev/null @@ -1,18 +0,0 @@ -[ - { - "OutputKey": "GetAttMealTableName", - "OutputValue": "Meal-2aikutabnvbuhlzmh4mvkg3eji-main", - "Description": "Your DynamoDB table name.", - "ExportName": "aolmivry45bvbmfywwm6tb542u:GetAtt:MealTable:Name" - }, - { - "OutputKey": "GetAttMealTableStreamArn", - "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Meal-2aikutabnvbuhlzmh4mvkg3eji-main/stream/2026-03-07T19:49:12.348", - "Description": "Your DynamoDB table StreamArn.", - "ExportName": "aolmivry45bvbmfywwm6tb542u:GetAtt:MealTable:StreamArn" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataMealMealTableFB0A2E92TableArn", - "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Meal-2aikutabnvbuhlzmh4mvkg3eji-main" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataMealNestedStackMealNestedStackR-8W0VUDLMFHA1.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataMealNestedStackMealNestedStackR-8W0VUDLMFHA1.parameters.json deleted file mode 100644 index d6dedca64c5..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataMealNestedStackMealNestedStackR-8W0VUDLMFHA1.parameters.json +++ /dev/null @@ -1,46 +0,0 @@ -[ - { - "ParameterKey": "DynamoDBModelTableReadIOPS", - "ParameterValue": "5" - }, - { - "ParameterKey": "DynamoDBEnableServerSideEncryption", - "ParameterValue": "true" - }, - { - "ParameterKey": "DynamoDBEnablePointInTimeRecovery", - "ParameterValue": "false" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName", - "ParameterValue": "NONE_DS" - }, - { - "ParameterKey": "DynamoDBBillingMode", - "ParameterValue": "PAY_PER_REQUEST" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref", - "ParameterValue": "amplify-fitnesstracker-gen-amplifyAuthauthenticatedU-ROG8INaCaQWH" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref", - "ParameterValue": "amplify-fitnesstracker-gen-amplifyAuthunauthenticate-xt24LpqBVS1s" - }, - { - "ParameterKey": "DynamoDBModelTableWriteIOPS", - "ParameterValue": "5" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId", - "ParameterValue": "aolmivry45bvbmfywwm6tb542u" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource9E5C3FE8Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerTableMana3F678B61", - "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:amplify-fitnesstracker-gen-TableManagerCustomProvid-jfKSxmnonqJ5" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef", - "ParameterValue": "us-east-1:6528409f-13ea-46fb-987a-ad861eedaad6" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataWorkoutProgramNestedStackWorkou-1KL1EWK5B27DM.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataWorkoutProgramNestedStackWorkou-1KL1EWK5B27DM.parameters.json deleted file mode 100644 index d6dedca64c5..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a-amplifyDataWorkoutProgramNestedStackWorkou-1KL1EWK5B27DM.parameters.json +++ /dev/null @@ -1,46 +0,0 @@ -[ - { - "ParameterKey": "DynamoDBModelTableReadIOPS", - "ParameterValue": "5" - }, - { - "ParameterKey": "DynamoDBEnableServerSideEncryption", - "ParameterValue": "true" - }, - { - "ParameterKey": "DynamoDBEnablePointInTimeRecovery", - "ParameterValue": "false" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPINONEDSBA892CCCName", - "ParameterValue": "NONE_DS" - }, - { - "ParameterKey": "DynamoDBBillingMode", - "ParameterValue": "PAY_PER_REQUEST" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref", - "ParameterValue": "amplify-fitnesstracker-gen-amplifyAuthauthenticatedU-ROG8INaCaQWH" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref", - "ParameterValue": "amplify-fitnesstracker-gen-amplifyAuthunauthenticate-xt24LpqBVS1s" - }, - { - "ParameterKey": "DynamoDBModelTableWriteIOPS", - "ParameterValue": "5" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId", - "ParameterValue": "aolmivry45bvbmfywwm6tb542u" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource9E5C3FE8Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyTableManagerTableMana3F678B61", - "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:amplify-fitnesstracker-gen-TableManagerCustomProvid-jfKSxmnonqJ5" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef", - "ParameterValue": "us-east-1:6528409f-13ea-46fb-987a-ad861eedaad6" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-auth179371D7-T5KTLQB5RTR1.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-auth179371D7-T5KTLQB5RTR1.outputs.json deleted file mode 100644 index 3385d925170..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-auth179371D7-T5KTLQB5RTR1.outputs.json +++ /dev/null @@ -1,38 +0,0 @@ -[ - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref", - "OutputValue": "amplify-fitnesstracker-gen-amplifyAuthunauthenticate-xt24LpqBVS1s" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authfitnesstracker6b0fc1196b0fc119PreSignupgen2mainlambda8F8CF17DRef", - "OutputValue": "fitnesstracker6b0fc1196b0fc119PreSignup-gen2-main" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef", - "OutputValue": "us-east-1:6528409f-13ea-46fb-987a-ad861eedaad6" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authadmingen2mainlambda2E47DE6ARef", - "OutputValue": "admin-gen2-main" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref", - "OutputValue": "amplify-fitnesstracker-gen-amplifyAuthauthenticatedU-ROG8INaCaQWH" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthUserPoolAppClient1C98798ERef", - "OutputValue": "2mph5n4c194d3ogp33evjku9cg" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthUserPool82133007Ref", - "OutputValue": "us-east-1_MZOGAx4cE" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthAdminGroupRole5A967615Ref", - "OutputValue": "amplify-fitnesstracker-gen-amplifyAuthAdminGroupRole-Xedsy5EWmRnv" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3authadmingen2mainlambda2E47DE6AArn", - "OutputValue": "arn:aws:lambda:us-east-1:123456789012:function:admin-gen2-main" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-data7552DF31-FY14PTEHE5GQ.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-data7552DF31-FY14PTEHE5GQ.outputs.json deleted file mode 100644 index 325fbbcc212..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-data7552DF31-FY14PTEHE5GQ.outputs.json +++ /dev/null @@ -1,26 +0,0 @@ -[ - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3datalognutritiongen2mainlambdaB5F1A17DRef", - "OutputValue": "lognutrition-gen2-main" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3GraphQLUrl", - "OutputValue": "https://77wvqbitijagpavjez3eammdna.appsync-api.us-east-1.amazonaws.com/graphql" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPI530714E3ApiId", - "OutputValue": "aolmivry45bvbmfywwm6tb542u" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsDeploymentCustomResource1536MiB31EBB484DestinationBucketArn", - "OutputValue": "arn:aws:s3:::amplify-fitnesstracker-gen-amplifydataamplifycodege-cm7x3zuy98og" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3datalognutritiongen2mainlambdaB5F1A17DArn", - "OutputValue": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-gen2-main" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3dataamplifyDataGraphQLAPIDefaultApiKeyDA026B5BApiKey", - "OutputValue": "da2-ebjsxuyj6nccppdwuy2ozljcla" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-data7552DF31-FY14PTEHE5GQ.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-data7552DF31-FY14PTEHE5GQ.parameters.json deleted file mode 100644 index 415648b03ad..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-data7552DF31-FY14PTEHE5GQ.parameters.json +++ /dev/null @@ -1,38 +0,0 @@ -[ - { - "ParameterKey": "DynamoDBModelTableReadIOPS", - "ParameterValue": "5" - }, - { - "ParameterKey": "DynamoDBEnableServerSideEncryption", - "ParameterValue": "true" - }, - { - "ParameterKey": "DynamoDBEnablePointInTimeRecovery", - "ParameterValue": "false" - }, - { - "ParameterKey": "DynamoDBBillingMode", - "ParameterValue": "PAY_PER_REQUEST" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthUserPool82133007Ref", - "ParameterValue": "us-east-1_MZOGAx4cE" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref", - "ParameterValue": "amplify-fitnesstracker-gen-amplifyAuthauthenticatedU-ROG8INaCaQWH" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthunauthenticatedUserRole0595D315Ref", - "ParameterValue": "amplify-fitnesstracker-gen-amplifyAuthunauthenticate-xt24LpqBVS1s" - }, - { - "ParameterKey": "DynamoDBModelTableWriteIOPS", - "ParameterValue": "5" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthIdentityPoolE5B9CC1CRef", - "ParameterValue": "us-east-1:6528409f-13ea-46fb-987a-ad861eedaad6" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistackadminapi43EA27F6-1G3WMFGGD1GX.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistackadminapi43EA27F6-1G3WMFGGD1GX.outputs.json deleted file mode 100644 index 6cbc04ee262..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistackadminapi43EA27F6-1G3WMFGGD1GX.outputs.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistackadminapiRestApiDeploymentStageprodEE0CE72ARef", - "OutputValue": "prod" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistackadminapiRestApi9C3E9536Ref", - "OutputValue": "42m7vp2bob" - }, - { - "OutputKey": "RestApiEndpoint0551178A", - "OutputValue": "https://42m7vp2bob.execute-api.us-east-1.amazonaws.com/prod/" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistackadminapi43EA27F6-1G3WMFGGD1GX.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistackadminapi43EA27F6-1G3WMFGGD1GX.parameters.json deleted file mode 100644 index 215aaea3bae..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistackadminapi43EA27F6-1G3WMFGGD1GX.parameters.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref", - "ParameterValue": "amplify-fitnesstracker-gen-amplifyAuthauthenticatedU-ROG8INaCaQWH" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authadmingen2mainlambda2E47DE6AArn", - "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:admin-gen2-main" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthAdminGroupRole5A967615Ref", - "ParameterValue": "amplify-fitnesstracker-gen-amplifyAuthAdminGroupRole-Xedsy5EWmRnv" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistacknutritionapi72914ECD-UEOCVVQH4SZ3.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistacknutritionapi72914ECD-UEOCVVQH4SZ3.outputs.json deleted file mode 100644 index 023c38fdbac..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistacknutritionapi72914ECD-UEOCVVQH4SZ3.outputs.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistacknutritionapiRestApiDeploymentStageprod4B62A983Ref", - "OutputValue": "prod" - }, - { - "OutputKey": "RestApiEndpoint0551178A", - "OutputValue": "https://nimt9s6hi5.execute-api.us-east-1.amazonaws.com/prod/" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbranchf6c5a5beb3restapistacknutritionapiRestApi33E7E7D9Ref", - "OutputValue": "nimt9s6hi5" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistacknutritionapi72914ECD-UEOCVVQH4SZ3.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistacknutritionapi72914ECD-UEOCVVQH4SZ3.parameters.json deleted file mode 100644 index daeda5987b9..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-f6c5a5beb3-restapistacknutritionapi72914ECD-UEOCVVQH4SZ3.parameters.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3dataNestedStackdataNestedStackResource1172CA08Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3datalognutritiongen2mainlambdaB5F1A17DArn", - "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-gen2-main" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthauthenticatedUserRoleB67A2B52Ref", - "ParameterValue": "amplify-fitnesstracker-gen-amplifyAuthauthenticatedU-ROG8INaCaQWH" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranchf6c5a5beb3authNestedStackauthNestedStackResourceC6E94DB9Outputsamplifyfitnesstrackergen2mainbranchf6c5a5beb3authamplifyAuthAdminGroupRole5A967615Ref", - "ParameterValue": "amplify-fitnesstracker-gen-amplifyAuthAdminGroupRole-Xedsy5EWmRnv" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS.outputs.json deleted file mode 100644 index 92f4a2d5ae6..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS.outputs.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - { - "OutputKey": "GraphQLAPIIdOutput", - "OutputValue": "2aikutabnvbuhlzmh4mvkg3eji", - "Description": "Your GraphQL API ID.", - "ExportName": "amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS:GraphQLApiId" - }, - { - "OutputKey": "GraphQLAPIEndpointOutput", - "OutputValue": "https://azg6sgrevzehjmrpkcghyncvci.appsync-api.us-east-1.amazonaws.com/graphql", - "Description": "Your GraphQL API endpoint.", - "ExportName": "amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS:GraphQLApiEndpoint" - }, - { - "OutputKey": "GraphQLAPIKeyOutput", - "OutputValue": "da2-fakeapikey00000000000000", - "Description": "Your GraphQL API ID.", - "ExportName": "amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS:GraphQLApiKey" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authfitnesstracker6b0fc1196b0fc119-IU8FJDZI54QH.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authfitnesstracker6b0fc1196b0fc119-IU8FJDZI54QH.description.txt deleted file mode 100644 index 28ba956271c..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authfitnesstracker6b0fc1196b0fc119-IU8FJDZI54QH.description.txt +++ /dev/null @@ -1 +0,0 @@ -{"createdOn":"Mac","createdBy":"Amplify","createdWith":"14.2.5","stackType":"auth-Cognito","metadata":{"whyContinueWithGen1":"Prefer not to answer"}} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authfitnesstracker6b0fc1196b0fc119-IU8FJDZI54QH.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authfitnesstracker6b0fc1196b0fc119-IU8FJDZI54QH.template.json deleted file mode 100644 index 6fd7a4879cc..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authfitnesstracker6b0fc1196b0fc119-IU8FJDZI54QH.template.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", - "AWSTemplateFormatVersion": "2010-09-09", - "Parameters": { - "env": { - "Type": "String" - }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupArn": { - "Type": "String", - "Default": "functionfitnesstracker6b0fc1196b0fc119PreSignupArn" - }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupName": { - "Type": "String", - "Default": "functionfitnesstracker6b0fc1196b0fc119PreSignupName" - }, - "identityPoolName": { - "Type": "String" - }, - "allowUnauthenticatedIdentities": { - "Type": "String" - }, - "resourceNameTruncated": { - "Type": "String" - }, - "userPoolName": { - "Type": "String" - }, - "autoVerifiedAttributes": { - "Type": "CommaDelimitedList" - }, - "mfaConfiguration": { - "Type": "String" - }, - "mfaTypes": { - "Type": "CommaDelimitedList" - }, - "smsAuthenticationMessage": { - "Type": "String" - }, - "smsVerificationMessage": { - "Type": "String" - }, - "emailVerificationSubject": { - "Type": "String" - }, - "emailVerificationMessage": { - "Type": "String" - }, - "defaultPasswordPolicy": { - "Type": "String" - }, - "passwordPolicyMinLength": { - "Type": "String" - }, - "passwordPolicyCharacters": { - "Type": "CommaDelimitedList" - }, - "requiredAttributes": { - "Type": "CommaDelimitedList" - }, - "aliasAttributes": { - "Type": "CommaDelimitedList" - }, - "userpoolClientGenerateSecret": { - "Type": "String" - }, - "userpoolClientRefreshTokenValidity": { - "Type": "String" - }, - "userpoolClientWriteAttributes": { - "Type": "CommaDelimitedList" - }, - "userpoolClientReadAttributes": { - "Type": "CommaDelimitedList" - }, - "userpoolClientLambdaRole": { - "Type": "String" - }, - "userpoolClientSetAttributes": { - "Type": "String" - }, - "sharedId": { - "Type": "String" - }, - "resourceName": { - "Type": "String" - }, - "authSelections": { - "Type": "String" - }, - "useDefault": { - "Type": "String" - }, - "thirdPartyAuth": { - "Type": "String" - }, - "userPoolGroups": { - "Type": "String" - }, - "adminQueries": { - "Type": "String" - }, - "triggers": { - "Type": "String" - }, - "hostedUI": { - "Type": "String" - }, - "userPoolGroupList": { - "Type": "CommaDelimitedList" - }, - "serviceName": { - "Type": "String" - }, - "usernameCaseSensitive": { - "Type": "String" - }, - "useEnabledMfas": { - "Type": "String" - }, - "authRoleArn": { - "Type": "String" - }, - "unauthRoleArn": { - "Type": "String" - }, - "breakCircularDependency": { - "Type": "String" - }, - "dependsOn": { - "Type": "CommaDelimitedList" - }, - "permissions": { - "Type": "CommaDelimitedList" - }, - "authTriggerConnections": { - "Type": "CommaDelimitedList" - } - }, - "Conditions": { - "ShouldNotCreateEnvResources": { - "Fn::Equals": [ - { - "Ref": "env" - }, - "NONE" - ] - } - }, - "Resources": { - "UserPool": { - "Type": "AWS::Cognito::UserPool", - "Properties": { - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": { - "Ref": "emailVerificationMessage" - }, - "EmailVerificationSubject": { - "Ref": "emailVerificationSubject" - }, - "MfaConfiguration": { - "Ref": "mfaConfiguration" - }, - "Policies": { - "PasswordPolicy": { - "MinimumLength": { - "Ref": "passwordPolicyMinLength" - }, - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false - } - }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true - } - ], - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "userPoolName" - }, - { - "Fn::Join": [ - "", - [ - { - "Ref": "userPoolName" - }, - "-", - { - "Ref": "env" - } - ] - ] - } - ] - }, - "UsernameConfiguration": { - "CaseSensitive": false - } - } - }, - "UserPoolClientWeb": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "fitnes6b0fc119_app_clientWeb", - "RefreshTokenValidity": { - "Ref": "userpoolClientRefreshTokenValidity" - }, - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": { - "Ref": "UserPool" - } - }, - "DependsOn": [ - "UserPool" - ] - }, - "UserPoolClient": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "fitnes6b0fc119_app_client", - "GenerateSecret": { - "Ref": "userpoolClientGenerateSecret" - }, - "RefreshTokenValidity": { - "Ref": "userpoolClientRefreshTokenValidity" - }, - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": { - "Ref": "UserPool" - } - }, - "DependsOn": [ - "UserPool" - ] - }, - "UserPoolClientRole": { - "Type": "AWS::IAM::Role", - "Properties": { - "AssumeRolePolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "Service": "lambda.amazonaws.com" - }, - "Action": "sts:AssumeRole" - } - ] - }, - "RoleName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "userpoolClientLambdaRole" - }, - { - "Fn::Join": [ - "", - [ - "upClientLambdaRole6b0fc119", - { - "Fn::Select": [ - 3, - { - "Fn::Split": [ - "-", - { - "Ref": "AWS::StackName" - } - ] - } - ] - }, - "-", - { - "Ref": "env" - } - ] - ] - } - ] - } - } - }, - "IdentityPool": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": { - "Ref": "allowUnauthenticatedIdentities" - }, - "CognitoIdentityProviders": [ - { - "ClientId": { - "Ref": "UserPoolClient" - }, - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": { - "Ref": "UserPool" - } - } - ] - } - }, - { - "ClientId": { - "Ref": "UserPoolClientWeb" - }, - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": { - "Ref": "UserPool" - } - } - ] - } - } - ], - "IdentityPoolName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - "fitnesstracker6b0fc119_identitypool_6b0fc119", - { - "Fn::Join": [ - "", - [ - "fitnesstracker6b0fc119_identitypool_6b0fc119__", - { - "Ref": "env" - } - ] - ] - } - ] - } - } - }, - "IdentityPoolRoleMap": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": { - "Ref": "IdentityPool" - }, - "RoleMappings": { - "UserPoolClientRoleMapping": { - "AmbiguousRoleResolution": "AuthenticatedRole", - "IdentityProvider": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${userPool}:${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "userPool": { - "Ref": "UserPool" - }, - "client": { - "Ref": "UserPoolClient" - } - } - ] - }, - "Type": "Token" - }, - "UserPoolWebClientRoleMapping": { - "AmbiguousRoleResolution": "AuthenticatedRole", - "IdentityProvider": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${userPool}:${webClient}", - { - "region": { - "Ref": "AWS::Region" - }, - "userPool": { - "Ref": "UserPool" - }, - "webClient": { - "Ref": "UserPoolClientWeb" - } - } - ] - }, - "Type": "Token" - } - }, - "Roles": { - "unauthenticated": { - "Ref": "unauthRoleArn" - }, - "authenticated": { - "Ref": "authRoleArn" - } - } - }, - "DependsOn": [ - "IdentityPool", - "UserPoolClient", - "UserPoolClientWeb" - ] - } - }, - "Outputs": { - "IdentityPoolId": { - "Description": "Id for the identity pool", - "Value": { - "Ref": "IdentityPool" - } - }, - "IdentityPoolName": { - "Value": { - "Fn::GetAtt": [ - "IdentityPool", - "Name" - ] - } - }, - "UserPoolId": { - "Description": "Id for the user pool", - "Value": { - "Ref": "UserPool" - } - }, - "UserPoolArn": { - "Description": "Arn for the user pool", - "Value": { - "Fn::GetAtt": [ - "UserPool", - "Arn" - ] - } - }, - "UserPoolName": { - "Value": { - "Ref": "userPoolName" - } - }, - "AppClientIDWeb": { - "Description": "The user pool app client id for web", - "Value": { - "Ref": "UserPoolClientWeb" - } - }, - "AppClientID": { - "Description": "The user pool app client id", - "Value": { - "Ref": "UserPoolClient" - } - } - } -} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authuserPoolGroups-1RDWF2H8163RP.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authuserPoolGroups-1RDWF2H8163RP.description.txt deleted file mode 100644 index aa91c019d71..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authuserPoolGroups-1RDWF2H8163RP.description.txt +++ /dev/null @@ -1 +0,0 @@ -{"createdOn":"Mac","createdBy":"Amplify","createdWith":"14.2.5","stackType":"auth-Cognito-UserPool-Groups","metadata":{"whyContinueWithGen1":"Prefer not to answer"}} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authuserPoolGroups-1RDWF2H8163RP.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authuserPoolGroups-1RDWF2H8163RP.outputs.json deleted file mode 100644 index 65c2f629405..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authuserPoolGroups-1RDWF2H8163RP.outputs.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - { - "OutputKey": "AdminGroupRole", - "OutputValue": "arn:aws:iam::123456789012:role/us-east-1_u3DbKJdMj-AdminGroupRole" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authuserPoolGroups-1RDWF2H8163RP.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authuserPoolGroups-1RDWF2H8163RP.parameters.json deleted file mode 100644 index 008b590398b..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authuserPoolGroups-1RDWF2H8163RP.parameters.json +++ /dev/null @@ -1,30 +0,0 @@ -[ - { - "ParameterKey": "authfitnesstracker6b0fc1196b0fc119AppClientIDWeb", - "ParameterValue": "7rgr70g6grv2t7e4jstuq5uuqg" - }, - { - "ParameterKey": "UnauthRoleArn", - "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-0683c-unauthRole" - }, - { - "ParameterKey": "authfitnesstracker6b0fc1196b0fc119UserPoolId", - "ParameterValue": "us-east-1_u3DbKJdMj" - }, - { - "ParameterKey": "authfitnesstracker6b0fc1196b0fc119AppClientID", - "ParameterValue": "7s3vppsutj69af1r91u7tm2a45" - }, - { - "ParameterKey": "AuthRoleArn", - "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-0683c-authRole" - }, - { - "ParameterKey": "authfitnesstracker6b0fc1196b0fc119IdentityPoolId", - "ParameterValue": "us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db" - }, - { - "ParameterKey": "env", - "ParameterValue": "main" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionfitnesstracker6b0fc1196b0fc119PreSignup-IQSLCEZIETI0.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionfitnesstracker6b0fc1196b0fc119PreSignup-IQSLCEZIETI0.template.json deleted file mode 100644 index c0cf3b931f5..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionfitnesstracker6b0fc1196b0fc119PreSignup-IQSLCEZIETI0.template.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "AWSTemplateFormatVersion": "2010-09-09", - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", - "Parameters": { - "DOMAINBLACKLIST": { - "Type": "String", - "Default": "" - }, - "DOMAINALLOWLIST": { - "Type": "String", - "Default": "" - }, - "modules": { - "Type": "String", - "Default": "", - "Description": "Comma-delimited list of modules to be executed by a lambda trigger. Sent to resource as an env variable." - }, - "resourceName": { - "Type": "String", - "Default": "" - }, - "trigger": { - "Type": "String", - "Default": "true" - }, - "functionName": { - "Type": "String", - "Default": "" - }, - "roleName": { - "Type": "String", - "Default": "" - }, - "parentResource": { - "Type": "String", - "Default": "" - }, - "parentStack": { - "Type": "String", - "Default": "" - }, - "env": { - "Type": "String" - }, - "deploymentBucketName": { - "Type": "String" - }, - "s3Key": { - "Type": "String" - } - }, - "Conditions": { - "ShouldNotCreateEnvResources": { - "Fn::Equals": [ - { - "Ref": "env" - }, - "NONE" - ] - } - }, - "Resources": { - "LambdaFunction": { - "Type": "AWS::Lambda::Function", - "Metadata": { - "aws:asset:path": "./src", - "aws:asset:property": "Code" - }, - "Properties": { - "Handler": "index.handler", - "FunctionName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - "fitnesstracker6b0fc1196b0fc119PreSignup", - { - "Fn::Join": [ - "", - [ - "fitnesstracker6b0fc1196b0fc119PreSignup", - "-", - { - "Ref": "env" - } - ] - ] - } - ] - }, - "Environment": { - "Variables": { - "ENV": { - "Ref": "env" - }, - "MODULES": { - "Ref": "modules" - }, - "REGION": { - "Ref": "AWS::Region" - }, - "DOMAINALLOWLIST": { - "Ref": "DOMAINALLOWLIST" - }, - "DOMAINBLACKLIST": { - "Ref": "DOMAINBLACKLIST" - } - } - }, - "Role": { - "Fn::GetAtt": [ - "LambdaExecutionRole", - "Arn" - ] - }, - "Runtime": "nodejs22.x", - "Timeout": 25, - "Code": { - "S3Bucket": { - "Ref": "deploymentBucketName" - }, - "S3Key": { - "Ref": "s3Key" - } - } - } - }, - "LambdaExecutionRole": { - "Type": "AWS::IAM::Role", - "Properties": { - "RoleName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - "fitnesstracker6b0fc1196b0fc119PreSignup", - { - "Fn::Join": [ - "", - [ - "fitnesstracker6b0fc1196b0fc119PreSignup", - "-", - { - "Ref": "env" - } - ] - ] - } - ] - }, - "AssumeRolePolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "Service": [ - "lambda.amazonaws.com" - ] - }, - "Action": [ - "sts:AssumeRole" - ] - } - ] - } - } - }, - "lambdaexecutionpolicy": { - "DependsOn": [ - "LambdaExecutionRole" - ], - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyName": "lambda-execution-policy", - "Roles": [ - { - "Ref": "LambdaExecutionRole" - } - ], - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": [ - "logs:CreateLogGroup", - "logs:CreateLogStream", - "logs:PutLogEvents" - ], - "Resource": { - "Fn::Sub": [ - "arn:aws:logs:${region}:${account}:log-group:/aws/lambda/${lambda}:log-stream:*", - { - "region": { - "Ref": "AWS::Region" - }, - "account": { - "Ref": "AWS::AccountId" - }, - "lambda": { - "Ref": "LambdaFunction" - } - } - ] - } - } - ] - } - } - } - }, - "Outputs": { - "Name": { - "Value": { - "Ref": "LambdaFunction" - } - }, - "Arn": { - "Value": { - "Fn::GetAtt": [ - "LambdaFunction", - "Arn" - ] - } - }, - "LambdaExecutionRole": { - "Value": { - "Ref": "LambdaExecutionRole" - } - }, - "LambdaExecutionRoleArn": { - "Value": { - "Fn::GetAtt": [ - "LambdaExecutionRole", - "Arn" - ] - } - }, - "Region": { - "Value": { - "Ref": "AWS::Region" - } - } - } -} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c.parameters.json deleted file mode 100644 index e4f2f4d49c0..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c.parameters.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "ParameterKey": "AuthRoleName", - "ParameterValue": "amplify-fitnesstracker-main-0683c-authRole" - }, - { - "ParameterKey": "DeploymentBucketName", - "ParameterValue": "amplify-fitnesstracker-main-0683c-deployment" - }, - { - "ParameterKey": "UnauthRoleName", - "ParameterValue": "amplify-fitnesstracker-main-0683c-unauthRole" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-APIGatewayAuthStack-2YRT3JXB74ES.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-APIGatewayAuthStack-2YRT3JXB74ES.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-AuthTriggerCustomLambdaStack-ME2HIO3WXG9U.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.outputs.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-AuthTriggerCustomLambdaStack-ME2HIO3WXG9U.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.outputs.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-APIGatewayAuthStack-2YRT3JXB74ES.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.parameters.json similarity index 56% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-APIGatewayAuthStack-2YRT3JXB74ES.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.parameters.json index 7a9296e421a..1e1034aadbb 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-APIGatewayAuthStack-2YRT3JXB74ES.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.parameters.json @@ -1,19 +1,19 @@ [ { "ParameterKey": "authRoleName", - "ParameterValue": "amplify-fitnesstracker-main-0683c-authRole" + "ParameterValue": "amplify-fitnesstracker-main-6fc9a-authRole" }, { "ParameterKey": "nutritionapi", - "ParameterValue": "6smuxn28tb" + "ParameterValue": "ekto8iln0h" }, { "ParameterKey": "unauthRoleName", - "ParameterValue": "amplify-fitnesstracker-main-0683c-unauthRole" + "ParameterValue": "amplify-fitnesstracker-main-6fc9a-unauthRole" }, { "ParameterKey": "adminapi", - "ParameterValue": "kh5xa5hayh" + "ParameterValue": "bbk7dedp01" }, { "ParameterKey": "env", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-APIGatewayAuthStack-2YRT3JXB74ES.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.template.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-APIGatewayAuthStack-2YRT3JXB74ES.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.template.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-AuthTriggerCustomLambdaStack-ME2HIO3WXG9U.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-AuthTriggerCustomLambdaStack-ME2HIO3WXG9U.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-ConnectionStack-MFCAEX2L0CKC.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.outputs.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-ConnectionStack-MFCAEX2L0CKC.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.outputs.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-AuthTriggerCustomLambdaStack-ME2HIO3WXG9U.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.parameters.json similarity index 50% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-AuthTriggerCustomLambdaStack-ME2HIO3WXG9U.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.parameters.json index dbc97b6c78e..25d39b2699c 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-AuthTriggerCustomLambdaStack-ME2HIO3WXG9U.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.parameters.json @@ -1,19 +1,15 @@ [ { - "ParameterKey": "userpoolId", - "ParameterValue": "us-east-1_u3DbKJdMj" - }, - { - "ParameterKey": "functionfitnesstracker6b0fc1196b0fc119PreSignupLambdaExecutionRole", - "ParameterValue": "arn:aws:iam::123456789012:role/fitnesstracker6b0fc1196b0fc119PreSignup-main" + "ParameterKey": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName", + "ParameterValue": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" }, { - "ParameterKey": "functionfitnesstracker6b0fc1196b0fc119PreSignupName", - "ParameterValue": "fitnesstracker6b0fc1196b0fc119PreSignup-main" + "ParameterKey": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole", + "ParameterValue": "arn:aws:iam::123456789012:role/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" }, { - "ParameterKey": "functionfitnesstracker6b0fc1196b0fc119PreSignupArn", - "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker6b0fc1196b0fc119PreSignup-main" + "ParameterKey": "userpoolId", + "ParameterValue": "us-east-1_LAwe5ZJrw" }, { "ParameterKey": "env", @@ -21,6 +17,10 @@ }, { "ParameterKey": "userpoolArn", - "ParameterValue": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_u3DbKJdMj" + "ParameterValue": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_LAwe5ZJrw" + }, + { + "ParameterKey": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn", + "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-AuthTriggerCustomLambdaStack-ME2HIO3WXG9U.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.template.json similarity index 94% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-AuthTriggerCustomLambdaStack-ME2HIO3WXG9U.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.template.json index d6957843a14..6e288286c2b 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-AuthTriggerCustomLambdaStack-ME2HIO3WXG9U.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.template.json @@ -11,13 +11,13 @@ "userpoolArn": { "Type": "String" }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupName": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { "Type": "String" }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupArn": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { "Type": "String" }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupLambdaExecutionRole": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole": { "Type": "String" } }, @@ -37,7 +37,7 @@ "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "functionfitnesstracker6b0fc1196b0fc119PreSignupName" + "Ref": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" }, "Principal": "cognito-idp.amazonaws.com", "SourceArn": { @@ -137,13 +137,13 @@ "lambdaConfig": [ { "triggerType": "PreSignUp", - "lambdaFunctionName": "fitnesstracker6b0fc1196b0fc119PreSignup", + "lambdaFunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "lambdaFunctionArn": { - "Ref": "functionfitnesstracker6b0fc1196b0fc119PreSignupArn" + "Ref": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" } } ], - "nonce": "7cd6005c-9c8e-4220-8301-da63a38e9760" + "nonce": "81488207-64cc-4968-a2ba-e30eebc5a128" }, "DependsOn": [ "authTriggerFn7FCFA449", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apiadminapi-T8AKDMEB7K09.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apiadminapi-T8AKDMEB7K09.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apiadminapi-T8AKDMEB7K09.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.outputs.json similarity index 75% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apiadminapi-T8AKDMEB7K09.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.outputs.json index f7824fb4182..5bf3ae2705a 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apiadminapi-T8AKDMEB7K09.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.outputs.json @@ -6,12 +6,12 @@ }, { "OutputKey": "RootUrl", - "OutputValue": "https://kh5xa5hayh.execute-api.us-east-1.amazonaws.com/main", + "OutputValue": "https://bbk7dedp01.execute-api.us-east-1.amazonaws.com/main", "Description": "Root URL of the API gateway" }, { "OutputKey": "ApiId", - "OutputValue": "kh5xa5hayh", + "OutputValue": "bbk7dedp01", "Description": "API ID (prefix of API URL)" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apiadminapi-T8AKDMEB7K09.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.parameters.json similarity index 76% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apiadminapi-T8AKDMEB7K09.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.parameters.json index 8547d0750f0..bdd4c3def03 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apiadminapi-T8AKDMEB7K09.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.parameters.json @@ -3,20 +3,20 @@ "ParameterKey": "functionadminArn", "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:admin-main" }, - { - "ParameterKey": "authfitnesstracker6b0fc1196b0fc119UserPoolId", - "ParameterValue": "us-east-1_u3DbKJdMj" - }, { "ParameterKey": "functionadminName", "ParameterValue": "admin-main" }, + { + "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId", + "ParameterValue": "us-east-1_LAwe5ZJrw" + }, { "ParameterKey": "env", "ParameterValue": "main" }, { "ParameterKey": "authuserPoolGroupsAdminGroupRole", - "ParameterValue": "arn:aws:iam::123456789012:role/us-east-1_u3DbKJdMj-AdminGroupRole" + "ParameterValue": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apiadminapi-T8AKDMEB7K09.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.template.json similarity index 97% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apiadminapi-T8AKDMEB7K09.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.template.json index 6183a2fcf64..fe0413d381e 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apiadminapi-T8AKDMEB7K09.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.template.json @@ -2,9 +2,9 @@ "Description": "API Gateway Resource for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -104,7 +104,7 @@ "-", [ { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "AdminGroupRole" ] @@ -426,7 +426,7 @@ "Name": "adminapi" } }, - "adminapiDefault4XXResponse3222e4e8": { + "adminapiDefault4XXResponsec0c67e32": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -441,7 +441,7 @@ } } }, - "adminapiDefault5XXResponse3222e4e8": { + "adminapiDefault5XXResponsec0c67e32": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -456,7 +456,7 @@ } } }, - "DeploymentAPIGWadminapi48d8979a": { + "DeploymentAPIGWadminapia8449e95": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -474,8 +474,8 @@ } }, "DependsOn": [ - "adminapiDefault4XXResponse3222e4e8", - "adminapiDefault5XXResponse3222e4e8" + "adminapiDefault4XXResponsec0c67e32", + "adminapiDefault5XXResponsec0c67e32" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-ConnectionStack-MFCAEX2L0CKC.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-ConnectionStack-MFCAEX2L0CKC.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.outputs.json new file mode 100644 index 00000000000..0637a088a01 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.outputs.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-ConnectionStack-MFCAEX2L0CKC.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.parameters.json similarity index 75% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-ConnectionStack-MFCAEX2L0CKC.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.parameters.json index 91bc23d610e..f9efb116ff2 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-ConnectionStack-MFCAEX2L0CKC.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.parameters.json @@ -1,7 +1,7 @@ [ { "ParameterKey": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref", - "ParameterValue": "amplify-appsync-files/96fdcde6a80859ead18d697e115cb9bd809fa98a" + "ParameterValue": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa" }, { "ParameterKey": "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name", @@ -9,15 +9,15 @@ }, { "ParameterKey": "referencetotransformerrootstackGraphQLAPI20497F53ApiId", - "ParameterValue": "2aikutabnvbuhlzmh4mvkg3eji" + "ParameterValue": "4ebr7lx7bbhnpeo5dbtcvdajdm" }, { "ParameterKey": "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseTable2F3E478ERef", - "ParameterValue": "Exercise-2aikutabnvbuhlzmh4mvkg3eji-main" + "ParameterValue": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main" }, { "ParameterKey": "referencetotransformerrootstackS3DeploymentBucket7592718ARef", - "ParameterValue": "amplify-fitnesstracker-main-0683c-deployment" + "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" }, { "ParameterKey": "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseDataSourceE8B787D0Name", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-ConnectionStack-MFCAEX2L0CKC.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.template.json similarity index 98% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-ConnectionStack-MFCAEX2L0CKC.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.template.json index c1c6aa9683f..a407b2cb80e 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-ConnectionStack-MFCAEX2L0CKC.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.template.json @@ -111,7 +111,7 @@ { "Ref": "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseTable2F3E478ERef" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-CustomResourcesjson-1N9JBA3LG1LSR.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-CustomResourcesjson-1N9JBA3LG1LSR.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-CustomResourcesjson-1N9JBA3LG1LSR.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.outputs.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-CustomResourcesjson-1N9JBA3LG1LSR.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.outputs.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-CustomResourcesjson-1N9JBA3LG1LSR.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.parameters.json similarity index 60% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-CustomResourcesjson-1N9JBA3LG1LSR.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.parameters.json index d52782c7820..3392dad0b9a 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-CustomResourcesjson-1N9JBA3LG1LSR.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.parameters.json @@ -1,11 +1,11 @@ [ { "ParameterKey": "S3DeploymentBucket", - "ParameterValue": "amplify-fitnesstracker-main-0683c-deployment" + "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" }, { "ParameterKey": "AppSyncApiId", - "ParameterValue": "2aikutabnvbuhlzmh4mvkg3eji" + "ParameterValue": "4ebr7lx7bbhnpeo5dbtcvdajdm" }, { "ParameterKey": "env", @@ -13,7 +13,7 @@ }, { "ParameterKey": "S3DeploymentRootKey", - "ParameterValue": "amplify-appsync-files/96fdcde6a80859ead18d697e115cb9bd809fa98a" + "ParameterValue": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa" }, { "ParameterKey": "AppSyncApiName", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-CustomResourcesjson-1N9JBA3LG1LSR.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.template.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-CustomResourcesjson-1N9JBA3LG1LSR.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.template.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Exercise-5FATTNCL6XOQ.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Exercise-5FATTNCL6XOQ.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Exercise-5FATTNCL6XOQ.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.outputs.json similarity index 62% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Exercise-5FATTNCL6XOQ.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.outputs.json index da274bd8921..605d333444d 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Exercise-5FATTNCL6XOQ.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.outputs.json @@ -5,24 +5,24 @@ }, { "OutputKey": "GetAttExerciseTableName", - "OutputValue": "Exercise-2aikutabnvbuhlzmh4mvkg3eji-main", + "OutputValue": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main", "Description": "Your DynamoDB table name.", - "ExportName": "2aikutabnvbuhlzmh4mvkg3eji:GetAtt:ExerciseTable:Name" + "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:ExerciseTable:Name" }, { "OutputKey": "GetAttExerciseDataSourceName", "OutputValue": "ExerciseTable", "Description": "Your model DataSource name.", - "ExportName": "2aikutabnvbuhlzmh4mvkg3eji:GetAtt:ExerciseDataSource:Name" + "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:ExerciseDataSource:Name" }, { "OutputKey": "transformerrootstackExerciseExerciseTable2F3E478ERef", - "OutputValue": "Exercise-2aikutabnvbuhlzmh4mvkg3eji-main" + "OutputValue": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main" }, { "OutputKey": "GetAttExerciseTableStreamArn", - "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Exercise-2aikutabnvbuhlzmh4mvkg3eji-main/stream/2026-03-07T19:49:12.813", + "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main/stream/2026-03-22T02:14:28.559", "Description": "Your DynamoDB table StreamArn.", - "ExportName": "2aikutabnvbuhlzmh4mvkg3eji:GetAtt:ExerciseTable:StreamArn" + "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:ExerciseTable:StreamArn" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Exercise-5FATTNCL6XOQ.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.parameters.json similarity index 83% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Exercise-5FATTNCL6XOQ.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.parameters.json index bca438b6758..3cb59b48c2a 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Exercise-5FATTNCL6XOQ.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.parameters.json @@ -5,7 +5,7 @@ }, { "ParameterKey": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref", - "ParameterValue": "amplify-appsync-files/96fdcde6a80859ead18d697e115cb9bd809fa98a" + "ParameterValue": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa" }, { "ParameterKey": "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name", @@ -17,27 +17,27 @@ }, { "ParameterKey": "referencetotransformerrootstackGraphQLAPI20497F53ApiId", - "ParameterValue": "2aikutabnvbuhlzmh4mvkg3eji" + "ParameterValue": "4ebr7lx7bbhnpeo5dbtcvdajdm" }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId", - "ParameterValue": "mn5wca276raehbbj7ablvuzuyy" + "ParameterValue": "hljr36qmybdc5hsavbkunnih3q" }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncF52D36F4F", - "ParameterValue": "pjy2pklvwjg77kzmfes5eplwca" + "ParameterValue": "xzf3ab4birf23mtipkhxkd73wm" }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId", - "ParameterValue": "tjmf4nbjffc6baz6izyfa7zoee" + "ParameterValue": "mj463mjvznbcle6nf32tzkleca" }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId", - "ParameterValue": "gcj7zbxan5cnhovaulvkfubw3u" + "ParameterValue": "tja5qhhl2faydie7dowyhihm3e" }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId", - "ParameterValue": "go273nioyjckvme7sxyuctdzma" + "ParameterValue": "ryadbffrprh35offyqpul6fxjy" }, { "ParameterKey": "DynamoDBEnableServerSideEncryption", @@ -49,7 +49,7 @@ }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId", - "ParameterValue": "2tyj3o3hzbcedjajmqiuiqkmki" + "ParameterValue": "n6yiskbqkvgwbma5c5wt7tluga" }, { "ParameterKey": "DynamoDBModelTableWriteIOPS", @@ -57,7 +57,7 @@ }, { "ParameterKey": "referencetotransformerrootstackS3DeploymentBucket7592718ARef", - "ParameterValue": "amplify-fitnesstracker-main-0683c-deployment" + "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" }, { "ParameterKey": "referencetotransformerrootstackenv10C5A902Ref", @@ -65,6 +65,6 @@ }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C", - "ParameterValue": "daqve7kbmzhx7iugbpnuykgqmi" + "ParameterValue": "25aslddh5rearbzsmjsddncqae" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Exercise-5FATTNCL6XOQ.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.template.json similarity index 98% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Exercise-5FATTNCL6XOQ.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.template.json index bc7724b533f..a9eeaa78710 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Exercise-5FATTNCL6XOQ.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.template.json @@ -503,7 +503,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -598,7 +598,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -729,7 +729,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -881,7 +881,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1030,7 +1030,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1067,7 +1067,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1104,7 +1104,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1141,7 +1141,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1172,7 +1172,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Meal-T0IHN7YLGV2P.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Meal-T0IHN7YLGV2P.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Meal-T0IHN7YLGV2P.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.outputs.json similarity index 57% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Meal-T0IHN7YLGV2P.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.outputs.json index b4d3ff64313..370e3c11bea 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Meal-T0IHN7YLGV2P.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.outputs.json @@ -1,20 +1,20 @@ [ { "OutputKey": "GetAttMealTableName", - "OutputValue": "Meal-2aikutabnvbuhlzmh4mvkg3eji-main", + "OutputValue": "Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main", "Description": "Your DynamoDB table name.", - "ExportName": "2aikutabnvbuhlzmh4mvkg3eji:GetAtt:MealTable:Name" + "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:MealTable:Name" }, { "OutputKey": "GetAttMealDataSourceName", "OutputValue": "MealTable", "Description": "Your model DataSource name.", - "ExportName": "2aikutabnvbuhlzmh4mvkg3eji:GetAtt:MealDataSource:Name" + "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:MealDataSource:Name" }, { "OutputKey": "GetAttMealTableStreamArn", - "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Meal-2aikutabnvbuhlzmh4mvkg3eji-main/stream/2026-03-07T19:49:12.348", + "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main/stream/2026-03-22T02:14:27.982", "Description": "Your DynamoDB table StreamArn.", - "ExportName": "2aikutabnvbuhlzmh4mvkg3eji:GetAtt:MealTable:StreamArn" + "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:MealTable:StreamArn" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Meal-T0IHN7YLGV2P.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.parameters.json similarity index 83% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Meal-T0IHN7YLGV2P.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.parameters.json index 16cab91f61c..5a5e6a8d5b9 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Meal-T0IHN7YLGV2P.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.parameters.json @@ -5,7 +5,7 @@ }, { "ParameterKey": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref", - "ParameterValue": "amplify-appsync-files/96fdcde6a80859ead18d697e115cb9bd809fa98a" + "ParameterValue": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa" }, { "ParameterKey": "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name", @@ -17,19 +17,19 @@ }, { "ParameterKey": "referencetotransformerrootstackGraphQLAPI20497F53ApiId", - "ParameterValue": "2aikutabnvbuhlzmh4mvkg3eji" + "ParameterValue": "4ebr7lx7bbhnpeo5dbtcvdajdm" }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId", - "ParameterValue": "mn5wca276raehbbj7ablvuzuyy" + "ParameterValue": "hljr36qmybdc5hsavbkunnih3q" }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId", - "ParameterValue": "gcj7zbxan5cnhovaulvkfubw3u" + "ParameterValue": "tja5qhhl2faydie7dowyhihm3e" }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId", - "ParameterValue": "go273nioyjckvme7sxyuctdzma" + "ParameterValue": "ryadbffrprh35offyqpul6fxjy" }, { "ParameterKey": "DynamoDBEnableServerSideEncryption", @@ -45,7 +45,7 @@ }, { "ParameterKey": "referencetotransformerrootstackS3DeploymentBucket7592718ARef", - "ParameterValue": "amplify-fitnesstracker-main-0683c-deployment" + "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" }, { "ParameterKey": "referencetotransformerrootstackenv10C5A902Ref", @@ -53,6 +53,6 @@ }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C", - "ParameterValue": "daqve7kbmzhx7iugbpnuykgqmi" + "ParameterValue": "25aslddh5rearbzsmjsddncqae" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Meal-T0IHN7YLGV2P.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.template.json similarity index 98% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Meal-T0IHN7YLGV2P.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.template.json index 17b23d06950..1f6a60f3fb6 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-Meal-T0IHN7YLGV2P.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.template.json @@ -482,7 +482,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -580,7 +580,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -711,7 +711,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -863,7 +863,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1012,7 +1012,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1082,7 +1082,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1122,7 +1122,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1162,7 +1162,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-WorkoutProgram-1LQLU2DSLQ8HT.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-WorkoutProgram-1LQLU2DSLQ8HT.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-WorkoutProgram-1LQLU2DSLQ8HT.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.outputs.json similarity index 72% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-WorkoutProgram-1LQLU2DSLQ8HT.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.outputs.json index 065eb378801..a9d00f3d146 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-WorkoutProgram-1LQLU2DSLQ8HT.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.outputs.json @@ -1,48 +1,48 @@ [ { "OutputKey": "transformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId", - "OutputValue": "tjmf4nbjffc6baz6izyfa7zoee" + "OutputValue": "mj463mjvznbcle6nf32tzkleca" }, { "OutputKey": "transformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncFunction55BF88AFFunctionId", - "OutputValue": "pjy2pklvwjg77kzmfes5eplwca" + "OutputValue": "xzf3ab4birf23mtipkhxkd73wm" }, { "OutputKey": "GetAttWorkoutProgramTableStreamArn", - "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/WorkoutProgram-2aikutabnvbuhlzmh4mvkg3eji-main/stream/2026-03-07T19:48:24.327", + "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main/stream/2026-03-22T02:13:40.073", "Description": "Your DynamoDB table StreamArn.", - "ExportName": "2aikutabnvbuhlzmh4mvkg3eji:GetAtt:WorkoutProgramTable:StreamArn" + "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:WorkoutProgramTable:StreamArn" }, { "OutputKey": "transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId", - "OutputValue": "gcj7zbxan5cnhovaulvkfubw3u" + "OutputValue": "tja5qhhl2faydie7dowyhihm3e" }, { "OutputKey": "GetAttWorkoutProgramTableName", - "OutputValue": "WorkoutProgram-2aikutabnvbuhlzmh4mvkg3eji-main", + "OutputValue": "WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main", "Description": "Your DynamoDB table name.", - "ExportName": "2aikutabnvbuhlzmh4mvkg3eji:GetAtt:WorkoutProgramTable:Name" + "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:WorkoutProgramTable:Name" }, { "OutputKey": "transformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId", - "OutputValue": "2tyj3o3hzbcedjajmqiuiqkmki" + "OutputValue": "n6yiskbqkvgwbma5c5wt7tluga" }, { "OutputKey": "GetAttWorkoutProgramDataSourceName", "OutputValue": "WorkoutProgramTable", "Description": "Your model DataSource name.", - "ExportName": "2aikutabnvbuhlzmh4mvkg3eji:GetAtt:WorkoutProgramDataSource:Name" + "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:WorkoutProgramDataSource:Name" }, { "OutputKey": "transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId", - "OutputValue": "mn5wca276raehbbj7ablvuzuyy" + "OutputValue": "hljr36qmybdc5hsavbkunnih3q" }, { "OutputKey": "transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId", - "OutputValue": "daqve7kbmzhx7iugbpnuykgqmi" + "OutputValue": "25aslddh5rearbzsmjsddncqae" }, { "OutputKey": "transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId", - "OutputValue": "go273nioyjckvme7sxyuctdzma" + "OutputValue": "ryadbffrprh35offyqpul6fxjy" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-WorkoutProgram-1LQLU2DSLQ8HT.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.parameters.json similarity index 82% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-WorkoutProgram-1LQLU2DSLQ8HT.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.parameters.json index 956ab094ba8..8893d0ab615 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-WorkoutProgram-1LQLU2DSLQ8HT.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.parameters.json @@ -5,7 +5,7 @@ }, { "ParameterKey": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref", - "ParameterValue": "amplify-appsync-files/96fdcde6a80859ead18d697e115cb9bd809fa98a" + "ParameterValue": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa" }, { "ParameterKey": "DynamoDBEnableServerSideEncryption", @@ -25,7 +25,7 @@ }, { "ParameterKey": "referencetotransformerrootstackGraphQLAPI20497F53ApiId", - "ParameterValue": "2aikutabnvbuhlzmh4mvkg3eji" + "ParameterValue": "4ebr7lx7bbhnpeo5dbtcvdajdm" }, { "ParameterKey": "DynamoDBModelTableWriteIOPS", @@ -33,7 +33,7 @@ }, { "ParameterKey": "referencetotransformerrootstackS3DeploymentBucket7592718ARef", - "ParameterValue": "amplify-fitnesstracker-main-0683c-deployment" + "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" }, { "ParameterKey": "referencetotransformerrootstackenv10C5A902Ref", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-WorkoutProgram-1LQLU2DSLQ8HT.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.template.json similarity index 98% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-WorkoutProgram-1LQLU2DSLQ8HT.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.template.json index 231e86502e9..d65c9f90968 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS-WorkoutProgram-1LQLU2DSLQ8HT.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.template.json @@ -503,7 +503,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -604,7 +604,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -771,7 +771,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -959,7 +959,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1111,7 +1111,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1232,7 +1232,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1278,7 +1278,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1324,7 +1324,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1403,7 +1403,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.outputs.json new file mode 100644 index 00000000000..134e76829d9 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.outputs.json @@ -0,0 +1,20 @@ +[ + { + "OutputKey": "GraphQLAPIIdOutput", + "OutputValue": "4ebr7lx7bbhnpeo5dbtcvdajdm", + "Description": "Your GraphQL API ID.", + "ExportName": "amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ:GraphQLApiId" + }, + { + "OutputKey": "GraphQLAPIEndpointOutput", + "OutputValue": "https://3oyjlwrrofhp7jlc37qna22jva.appsync-api.us-east-1.amazonaws.com/graphql", + "Description": "Your GraphQL API endpoint.", + "ExportName": "amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ:GraphQLApiEndpoint" + }, + { + "OutputKey": "GraphQLAPIKeyOutput", + "OutputValue": "da2-2kuyxda27ncmpool2a2bjanloy", + "Description": "Your GraphQL API ID.", + "ExportName": "amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ:GraphQLApiKey" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.parameters.json similarity index 79% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.parameters.json index 2c851c9541e..be04a0ba450 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.parameters.json @@ -17,7 +17,7 @@ }, { "ParameterKey": "S3DeploymentBucket", - "ParameterValue": "amplify-fitnesstracker-main-0683c-deployment" + "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" }, { "ParameterKey": "DynamoDBModelTableWriteIOPS", @@ -29,7 +29,7 @@ }, { "ParameterKey": "S3DeploymentRootKey", - "ParameterValue": "amplify-appsync-files/96fdcde6a80859ead18d697e115cb9bd809fa98a" + "ParameterValue": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa" }, { "ParameterKey": "AppSyncApiName", @@ -37,6 +37,6 @@ }, { "ParameterKey": "AuthCognitoUserPoolId", - "ParameterValue": "us-east-1_u3DbKJdMj" + "ParameterValue": "us-east-1_LAwe5ZJrw" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.template.json similarity index 99% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.template.json index 91ce2688779..651f9ceb637 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apifitnesstracker-1T86UW9NDGVCS.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.template.json @@ -129,7 +129,7 @@ ] }, "Description": "graphql", - "Expires": 1773519059 + "Expires": 1774896554 } }, "GraphQLAPINONEDS95A13CF0": { diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apinutritionapi-8ILYUUGF5PGJ.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apinutritionapi-8ILYUUGF5PGJ.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apinutritionapi-8ILYUUGF5PGJ.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.outputs.json similarity index 75% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apinutritionapi-8ILYUUGF5PGJ.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.outputs.json index c3e846b6c49..f5dfcac1e91 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apinutritionapi-8ILYUUGF5PGJ.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.outputs.json @@ -6,12 +6,12 @@ }, { "OutputKey": "RootUrl", - "OutputValue": "https://6smuxn28tb.execute-api.us-east-1.amazonaws.com/main", + "OutputValue": "https://ekto8iln0h.execute-api.us-east-1.amazonaws.com/main", "Description": "Root URL of the API gateway" }, { "OutputKey": "ApiId", - "OutputValue": "6smuxn28tb", + "OutputValue": "ekto8iln0h", "Description": "API ID (prefix of API URL)" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apinutritionapi-8ILYUUGF5PGJ.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.parameters.json similarity index 77% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apinutritionapi-8ILYUUGF5PGJ.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.parameters.json index 42fc8635726..e09e968f491 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apinutritionapi-8ILYUUGF5PGJ.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.parameters.json @@ -1,8 +1,4 @@ [ - { - "ParameterKey": "authfitnesstracker6b0fc1196b0fc119UserPoolId", - "ParameterValue": "us-east-1_u3DbKJdMj" - }, { "ParameterKey": "functionlognutritionArn", "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-main" @@ -11,12 +7,16 @@ "ParameterKey": "functionlognutritionName", "ParameterValue": "lognutrition-main" }, + { + "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId", + "ParameterValue": "us-east-1_LAwe5ZJrw" + }, { "ParameterKey": "env", "ParameterValue": "main" }, { "ParameterKey": "authuserPoolGroupsAdminGroupRole", - "ParameterValue": "arn:aws:iam::123456789012:role/us-east-1_u3DbKJdMj-AdminGroupRole" + "ParameterValue": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apinutritionapi-8ILYUUGF5PGJ.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.template.json similarity index 98% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apinutritionapi-8ILYUUGF5PGJ.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.template.json index 0c19f7dd33c..1c507689fc5 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-apinutritionapi-8ILYUUGF5PGJ.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.template.json @@ -2,9 +2,9 @@ "Description": "API Gateway Resource for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -344,7 +344,7 @@ "-", [ { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "AdminGroupRole" ] @@ -666,7 +666,7 @@ "Name": "nutritionapi" } }, - "nutritionapiDefault4XXResponsec3b6f366": { + "nutritionapiDefault4XXResponse59a22bc9": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -681,7 +681,7 @@ } } }, - "nutritionapiDefault5XXResponsec3b6f366": { + "nutritionapiDefault5XXResponse59a22bc9": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -696,7 +696,7 @@ } } }, - "DeploymentAPIGWnutritionapi6697cfda": { + "DeploymentAPIGWnutritionapifc67c40b": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -714,8 +714,8 @@ } }, "DependsOn": [ - "nutritionapiDefault4XXResponsec3b6f366", - "nutritionapiDefault5XXResponsec3b6f366" + "nutritionapiDefault4XXResponse59a22bc9", + "nutritionapiDefault5XXResponse59a22bc9" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.description.txt new file mode 100644 index 00000000000..be81ecbcfe2 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.description.txt @@ -0,0 +1 @@ +Amplify Cognito Stack for AWS Amplify CLI \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authfitnesstracker6b0fc1196b0fc119-IU8FJDZI54QH.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.outputs.json similarity index 62% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authfitnesstracker6b0fc1196b0fc119-IU8FJDZI54QH.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.outputs.json index 08653517f4e..d991571da12 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authfitnesstracker6b0fc1196b0fc119-IU8FJDZI54QH.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.outputs.json @@ -1,35 +1,35 @@ [ { "OutputKey": "UserPoolId", - "OutputValue": "us-east-1_u3DbKJdMj", + "OutputValue": "us-east-1_LAwe5ZJrw", "Description": "Id for the user pool" }, { "OutputKey": "AppClientIDWeb", - "OutputValue": "7rgr70g6grv2t7e4jstuq5uuqg", + "OutputValue": "4bk8odk8blrf65ptk2dffug25k", "Description": "The user pool app client id for web" }, { "OutputKey": "AppClientID", - "OutputValue": "7s3vppsutj69af1r91u7tm2a45", + "OutputValue": "12hkvqjabpisei771tiefdhs76", "Description": "The user pool app client id" }, { "OutputKey": "IdentityPoolId", - "OutputValue": "us-east-1:48e665cb-fd1f-483f-83c3-a11110c013db", + "OutputValue": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d", "Description": "Id for the identity pool" }, { "OutputKey": "UserPoolArn", - "OutputValue": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_u3DbKJdMj", + "OutputValue": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_LAwe5ZJrw", "Description": "Arn for the user pool" }, { "OutputKey": "IdentityPoolName", - "OutputValue": "fitnesstracker6b0fc119_identitypool_6b0fc119__main" + "OutputValue": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__main" }, { "OutputKey": "UserPoolName", - "OutputValue": "fitnesstracker6b0fc119_userpool_6b0fc119" + "OutputValue": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.parameters.json new file mode 100644 index 00000000000..d99a1808184 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.parameters.json @@ -0,0 +1,178 @@ +[ + { + "ParameterKey": "authRoleArn", + "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" + }, + { + "ParameterKey": "autoVerifiedAttributes", + "ParameterValue": "email" + }, + { + "ParameterKey": "allowUnauthenticatedIdentities", + "ParameterValue": "false" + }, + { + "ParameterKey": "hostedUI", + "ParameterValue": "false" + }, + { + "ParameterKey": "smsVerificationMessage", + "ParameterValue": "Your verification code is {####}" + }, + { + "ParameterKey": "userpoolClientReadAttributes", + "ParameterValue": "email" + }, + { + "ParameterKey": "breakCircularDependency", + "ParameterValue": "true" + }, + { + "ParameterKey": "mfaTypes", + "ParameterValue": "SMS Text Message" + }, + { + "ParameterKey": "emailVerificationSubject", + "ParameterValue": "Your verification code" + }, + { + "ParameterKey": "sharedId", + "ParameterValue": "9ceb2e7c" + }, + { + "ParameterKey": "useDefault", + "ParameterValue": "manual" + }, + { + "ParameterKey": "userpoolClientGenerateSecret", + "ParameterValue": "false" + }, + { + "ParameterKey": "mfaConfiguration", + "ParameterValue": "OFF" + }, + { + "ParameterKey": "identityPoolName", + "ParameterValue": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c" + }, + { + "ParameterKey": "thirdPartyAuth", + "ParameterValue": "false" + }, + { + "ParameterKey": "userPoolGroupList", + "ParameterValue": "Admin" + }, + { + "ParameterKey": "authSelections", + "ParameterValue": "identityPoolAndUserPool" + }, + { + "ParameterKey": "adminQueries", + "ParameterValue": "false" + }, + { + "ParameterKey": "permissions", + "ParameterValue": "" + }, + { + "ParameterKey": "resourceNameTruncated", + "ParameterValue": "fitnes9ceb2e7c" + }, + { + "ParameterKey": "userPoolGroups", + "ParameterValue": "true" + }, + { + "ParameterKey": "smsAuthenticationMessage", + "ParameterValue": "Your authentication code is {####}" + }, + { + "ParameterKey": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn", + "ParameterValue": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" + }, + { + "ParameterKey": "passwordPolicyMinLength", + "ParameterValue": "8" + }, + { + "ParameterKey": "userPoolName", + "ParameterValue": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c" + }, + { + "ParameterKey": "userpoolClientWriteAttributes", + "ParameterValue": "email" + }, + { + "ParameterKey": "dependsOn", + "ParameterValue": "[object Object]" + }, + { + "ParameterKey": "useEnabledMfas", + "ParameterValue": "true" + }, + { + "ParameterKey": "usernameCaseSensitive", + "ParameterValue": "false" + }, + { + "ParameterKey": "resourceName", + "ParameterValue": "fitnesstracker9ceb2e7c9ceb2e7c" + }, + { + "ParameterKey": "env", + "ParameterValue": "main" + }, + { + "ParameterKey": "triggers", + "ParameterValue": "{\"PreSignup\":[\"email-filter-allowlist\"]}" + }, + { + "ParameterKey": "serviceName", + "ParameterValue": "Cognito" + }, + { + "ParameterKey": "emailVerificationMessage", + "ParameterValue": "Your verification code is {####}" + }, + { + "ParameterKey": "userpoolClientRefreshTokenValidity", + "ParameterValue": "30" + }, + { + "ParameterKey": "userpoolClientSetAttributes", + "ParameterValue": "false" + }, + { + "ParameterKey": "unauthRoleArn", + "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole" + }, + { + "ParameterKey": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName", + "ParameterValue": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" + }, + { + "ParameterKey": "requiredAttributes", + "ParameterValue": "email" + }, + { + "ParameterKey": "passwordPolicyCharacters", + "ParameterValue": "" + }, + { + "ParameterKey": "authTriggerConnections", + "ParameterValue": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}" + }, + { + "ParameterKey": "aliasAttributes", + "ParameterValue": "" + }, + { + "ParameterKey": "userpoolClientLambdaRole", + "ParameterValue": "fitnes9ceb2e7c_userpoolclient_lambda_role" + }, + { + "ParameterKey": "defaultPasswordPolicy", + "ParameterValue": "false" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.template.json new file mode 100644 index 00000000000..79def9e5efb --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.template.json @@ -0,0 +1,480 @@ +{ + "Description": "Amplify Cognito Stack for AWS Amplify CLI", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "env": { + "Type": "String" + }, + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { + "Type": "String", + "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" + }, + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { + "Type": "String", + "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" + }, + "identityPoolName": { + "Type": "String" + }, + "allowUnauthenticatedIdentities": { + "Type": "String" + }, + "resourceNameTruncated": { + "Type": "String" + }, + "userPoolName": { + "Type": "String" + }, + "autoVerifiedAttributes": { + "Type": "CommaDelimitedList" + }, + "mfaConfiguration": { + "Type": "String" + }, + "mfaTypes": { + "Type": "CommaDelimitedList" + }, + "smsAuthenticationMessage": { + "Type": "String" + }, + "smsVerificationMessage": { + "Type": "String" + }, + "emailVerificationSubject": { + "Type": "String" + }, + "emailVerificationMessage": { + "Type": "String" + }, + "defaultPasswordPolicy": { + "Type": "String" + }, + "passwordPolicyMinLength": { + "Type": "String" + }, + "passwordPolicyCharacters": { + "Type": "CommaDelimitedList" + }, + "requiredAttributes": { + "Type": "CommaDelimitedList" + }, + "aliasAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientGenerateSecret": { + "Type": "String" + }, + "userpoolClientRefreshTokenValidity": { + "Type": "String" + }, + "userpoolClientWriteAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientReadAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientLambdaRole": { + "Type": "String" + }, + "userpoolClientSetAttributes": { + "Type": "String" + }, + "sharedId": { + "Type": "String" + }, + "resourceName": { + "Type": "String" + }, + "authSelections": { + "Type": "String" + }, + "useDefault": { + "Type": "String" + }, + "thirdPartyAuth": { + "Type": "String" + }, + "userPoolGroups": { + "Type": "String" + }, + "adminQueries": { + "Type": "String" + }, + "triggers": { + "Type": "String" + }, + "hostedUI": { + "Type": "String" + }, + "userPoolGroupList": { + "Type": "CommaDelimitedList" + }, + "serviceName": { + "Type": "String" + }, + "usernameCaseSensitive": { + "Type": "String" + }, + "useEnabledMfas": { + "Type": "String" + }, + "authRoleArn": { + "Type": "String" + }, + "unauthRoleArn": { + "Type": "String" + }, + "breakCircularDependency": { + "Type": "String" + }, + "dependsOn": { + "Type": "CommaDelimitedList" + }, + "permissions": { + "Type": "CommaDelimitedList" + }, + "authTriggerConnections": { + "Type": "CommaDelimitedList" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "UserPool": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": { + "Ref": "emailVerificationMessage" + }, + "EmailVerificationSubject": { + "Ref": "emailVerificationSubject" + }, + "MfaConfiguration": { + "Ref": "mfaConfiguration" + }, + "Policies": { + "PasswordPolicy": { + "MinimumLength": { + "Ref": "passwordPolicyMinLength" + }, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userPoolName" + }, + { + "Fn::Join": [ + "", + [ + { + "Ref": "userPoolName" + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "UserPoolClientWeb": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "fitnes9ceb2e7c_app_clientWeb", + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "UserPoolClient": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "fitnes9ceb2e7c_app_client", + "GenerateSecret": { + "Ref": "userpoolClientGenerateSecret" + }, + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "UserPoolClientRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + }, + "Action": "sts:AssumeRole" + } + ] + }, + "RoleName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userpoolClientLambdaRole" + }, + { + "Fn::Join": [ + "", + [ + "upClientLambdaRole9ceb2e7c", + { + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + { + "Ref": "AWS::StackName" + } + ] + } + ] + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + } + } + }, + "IdentityPool": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": { + "Ref": "allowUnauthenticatedIdentities" + }, + "CognitoIdentityProviders": [ + { + "ClientId": { + "Ref": "UserPoolClient" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + }, + { + "ClientId": { + "Ref": "UserPoolClientWeb" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", + { + "Fn::Join": [ + "", + [ + "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", + { + "Ref": "env" + } + ] + ] + } + ] + } + } + }, + "IdentityPoolRoleMap": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": { + "Ref": "IdentityPool" + }, + "RoleMappings": { + "UserPoolClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": { + "Ref": "UserPool" + }, + "client": { + "Ref": "UserPoolClient" + } + } + ] + }, + "Type": "Token" + }, + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${webClient}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": { + "Ref": "UserPool" + }, + "webClient": { + "Ref": "UserPoolClientWeb" + } + } + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": { + "Ref": "unauthRoleArn" + }, + "authenticated": { + "Ref": "authRoleArn" + } + } + }, + "DependsOn": [ + "IdentityPool", + "UserPoolClient", + "UserPoolClientWeb" + ] + } + }, + "Outputs": { + "IdentityPoolId": { + "Description": "Id for the identity pool", + "Value": { + "Ref": "IdentityPool" + } + }, + "IdentityPoolName": { + "Value": { + "Fn::GetAtt": [ + "IdentityPool", + "Name" + ] + } + }, + "UserPoolId": { + "Description": "Id for the user pool", + "Value": { + "Ref": "UserPool" + } + }, + "UserPoolArn": { + "Description": "Arn for the user pool", + "Value": { + "Fn::GetAtt": [ + "UserPool", + "Arn" + ] + } + }, + "UserPoolName": { + "Value": { + "Ref": "userPoolName" + } + }, + "AppClientIDWeb": { + "Description": "The user pool app client id for web", + "Value": { + "Ref": "UserPoolClientWeb" + } + }, + "AppClientID": { + "Description": "The user pool app client id", + "Value": { + "Ref": "UserPoolClient" + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.outputs.json new file mode 100644 index 00000000000..33ee4fb9a64 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.outputs.json @@ -0,0 +1,6 @@ +[ + { + "OutputKey": "AdminGroupRole", + "OutputValue": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.parameters.json new file mode 100644 index 00000000000..3a84ecd1058 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.parameters.json @@ -0,0 +1,30 @@ +[ + { + "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb", + "ParameterValue": "4bk8odk8blrf65ptk2dffug25k" + }, + { + "ParameterKey": "UnauthRoleArn", + "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole" + }, + { + "ParameterKey": "AuthRoleArn", + "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" + }, + { + "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId", + "ParameterValue": "us-east-1_LAwe5ZJrw" + }, + { + "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId", + "ParameterValue": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d" + }, + { + "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID", + "ParameterValue": "12hkvqjabpisei771tiefdhs76" + }, + { + "ParameterKey": "env", + "ParameterValue": "main" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authuserPoolGroups-1RDWF2H8163RP.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.template.json similarity index 69% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authuserPoolGroups-1RDWF2H8163RP.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.template.json index 0741b0ac99f..12c7040bd48 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-authuserPoolGroups-1RDWF2H8163RP.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.template.json @@ -1,5 +1,5 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito-UserPool-Groups\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "Root Stack for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { @@ -11,21 +11,21 @@ "UnauthRoleArn": { "Type": "String" }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, - "authfitnesstracker6b0fc1196b0fc119IdentityPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119IdentityPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" }, - "authfitnesstracker6b0fc1196b0fc119AppClientID": { + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119AppClientID" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID" }, - "authfitnesstracker6b0fc1196b0fc119AppClientIDWeb": { + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119AppClientIDWeb" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb" } }, "Conditions": { @@ -52,7 +52,7 @@ ] }, "UserPoolId": { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } } }, @@ -72,7 +72,7 @@ "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": { - "Ref": "authfitnesstracker6b0fc1196b0fc119IdentityPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" } }, "ForAnyValue:StringLike": { @@ -87,7 +87,7 @@ "", [ { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" }, "-AdminGroupRole" ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionadmin-1COFLOF4D1C47.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionadmin-1COFLOF4D1C47.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionadmin-1COFLOF4D1C47.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.outputs.json similarity index 82% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionadmin-1COFLOF4D1C47.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.outputs.json index 27a0f946070..5e51899ca79 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionadmin-1COFLOF4D1C47.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.outputs.json @@ -1,7 +1,7 @@ [ { "OutputKey": "LambdaExecutionRoleArn", - "OutputValue": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole8a95290d-main" + "OutputValue": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole64f55d16-main" }, { "OutputKey": "Region", @@ -17,6 +17,6 @@ }, { "OutputKey": "LambdaExecutionRole", - "OutputValue": "fitnesstrackerLambdaRole8a95290d-main" + "OutputValue": "fitnesstrackerLambdaRole64f55d16-main" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionadmin-1COFLOF4D1C47.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.parameters.json similarity index 52% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionadmin-1COFLOF4D1C47.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.parameters.json index 483014cc753..1752e93cb4d 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionadmin-1COFLOF4D1C47.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.parameters.json @@ -5,15 +5,15 @@ }, { "ParameterKey": "s3Key", - "ParameterValue": "amplify-builds/admin-536f797874787247392f-build.zip" + "ParameterValue": "amplify-builds/admin-765632787437744e386e-build.zip" }, { - "ParameterKey": "authfitnesstracker6b0fc1196b0fc119UserPoolId", - "ParameterValue": "us-east-1_u3DbKJdMj" + "ParameterKey": "deploymentBucketName", + "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" }, { - "ParameterKey": "deploymentBucketName", - "ParameterValue": "amplify-fitnesstracker-main-0683c-deployment" + "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId", + "ParameterValue": "us-east-1_LAwe5ZJrw" }, { "ParameterKey": "env", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionadmin-1COFLOF4D1C47.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.template.json similarity index 93% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionadmin-1COFLOF4D1C47.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.template.json index 2dbe7e47d6b..aaa8618655d 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionadmin-1COFLOF4D1C47.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.template.json @@ -16,9 +16,9 @@ "s3Key": { "Type": "String" }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Type": "String", - "Default": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } }, "Conditions": { @@ -74,8 +74,8 @@ "REGION": { "Ref": "AWS::Region" }, - "AUTH_FITNESSTRACKER6B0FC1196B0FC119_USERPOOLID": { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": { + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } } }, @@ -96,12 +96,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRole8a95290d", + "fitnesstrackerLambdaRole64f55d16", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRole8a95290d", + "fitnesstrackerLambdaRole64f55d16", "-", { "Ref": "env" @@ -220,7 +220,7 @@ }, ":userpool/", { - "Ref": "authfitnesstracker6b0fc1196b0fc119UserPoolId" + "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" } ] ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionfitnesstracker6b0fc1196b0fc119PreSignup-IQSLCEZIETI0.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionfitnesstracker6b0fc1196b0fc119PreSignup-IQSLCEZIETI0.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionfitnesstracker6b0fc1196b0fc119PreSignup-IQSLCEZIETI0.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.outputs.json similarity index 63% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionfitnesstracker6b0fc1196b0fc119PreSignup-IQSLCEZIETI0.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.outputs.json index cbe5d2d6675..cfe685f3804 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionfitnesstracker6b0fc1196b0fc119PreSignup-IQSLCEZIETI0.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.outputs.json @@ -1,7 +1,7 @@ [ { "OutputKey": "LambdaExecutionRoleArn", - "OutputValue": "arn:aws:iam::123456789012:role/fitnesstracker6b0fc1196b0fc119PreSignup-main" + "OutputValue": "arn:aws:iam::123456789012:role/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" }, { "OutputKey": "Region", @@ -9,14 +9,14 @@ }, { "OutputKey": "Arn", - "OutputValue": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker6b0fc1196b0fc119PreSignup-main" + "OutputValue": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" }, { "OutputKey": "Name", - "OutputValue": "fitnesstracker6b0fc1196b0fc119PreSignup-main" + "OutputValue": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" }, { "OutputKey": "LambdaExecutionRole", - "OutputValue": "fitnesstracker6b0fc1196b0fc119PreSignup-main" + "OutputValue": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionfitnesstracker6b0fc1196b0fc119PreSignup-IQSLCEZIETI0.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.parameters.json similarity index 77% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionfitnesstracker6b0fc1196b0fc119PreSignup-IQSLCEZIETI0.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.parameters.json index 592cb027916..92a5d88d7b5 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionfitnesstracker6b0fc1196b0fc119PreSignup-IQSLCEZIETI0.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.parameters.json @@ -5,7 +5,7 @@ }, { "ParameterKey": "s3Key", - "ParameterValue": "amplify-builds/fitnesstracker6b0fc1196b0fc119PreSignup-555a623867446f4a3843-build.zip" + "ParameterValue": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip" }, { "ParameterKey": "functionName", @@ -21,7 +21,7 @@ }, { "ParameterKey": "deploymentBucketName", - "ParameterValue": "amplify-fitnesstracker-main-0683c-deployment" + "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" }, { "ParameterKey": "DOMAINBLACKLIST", @@ -33,7 +33,7 @@ }, { "ParameterKey": "resourceName", - "ParameterValue": "fitnesstracker6b0fc1196b0fc119PreSignup" + "ParameterValue": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" }, { "ParameterKey": "trigger", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.template.json new file mode 100644 index 00000000000..04a3c261a89 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.template.json @@ -0,0 +1,242 @@ +{ + "AWSTemplateFormatVersion": "2010-09-09", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Parameters": { + "DOMAINBLACKLIST": { + "Type": "String", + "Default": "" + }, + "DOMAINALLOWLIST": { + "Type": "String", + "Default": "" + }, + "modules": { + "Type": "String", + "Default": "", + "Description": "Comma-delimited list of modules to be executed by a lambda trigger. Sent to resource as an env variable." + }, + "resourceName": { + "Type": "String", + "Default": "" + }, + "trigger": { + "Type": "String", + "Default": "true" + }, + "functionName": { + "Type": "String", + "Default": "" + }, + "roleName": { + "Type": "String", + "Default": "" + }, + "parentResource": { + "Type": "String", + "Default": "" + }, + "parentStack": { + "Type": "String", + "Default": "" + }, + "env": { + "Type": "String" + }, + "deploymentBucketName": { + "Type": "String" + }, + "s3Key": { + "Type": "String" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "LambdaFunction": { + "Type": "AWS::Lambda::Function", + "Metadata": { + "aws:asset:path": "./src", + "aws:asset:property": "Code" + }, + "Properties": { + "Handler": "index.handler", + "FunctionName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + { + "Fn::Join": [ + "", + [ + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "Environment": { + "Variables": { + "ENV": { + "Ref": "env" + }, + "MODULES": { + "Ref": "modules" + }, + "REGION": { + "Ref": "AWS::Region" + }, + "DOMAINALLOWLIST": { + "Ref": "DOMAINALLOWLIST" + }, + "DOMAINBLACKLIST": { + "Ref": "DOMAINBLACKLIST" + } + } + }, + "Role": { + "Fn::GetAtt": [ + "LambdaExecutionRole", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 25, + "Code": { + "S3Bucket": { + "Ref": "deploymentBucketName" + }, + "S3Key": { + "Ref": "s3Key" + } + } + } + }, + "LambdaExecutionRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "RoleName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + { + "Fn::Join": [ + "", + [ + "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": [ + "lambda.amazonaws.com" + ] + }, + "Action": [ + "sts:AssumeRole" + ] + } + ] + } + } + }, + "lambdaexecutionpolicy": { + "DependsOn": [ + "LambdaExecutionRole" + ], + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyName": "lambda-execution-policy", + "Roles": [ + { + "Ref": "LambdaExecutionRole" + } + ], + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Resource": { + "Fn::Sub": [ + "arn:aws:logs:${region}:${account}:log-group:/aws/lambda/${lambda}:log-stream:*", + { + "region": { + "Ref": "AWS::Region" + }, + "account": { + "Ref": "AWS::AccountId" + }, + "lambda": { + "Ref": "LambdaFunction" + } + } + ] + } + } + ] + } + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Ref": "LambdaFunction" + } + }, + "Arn": { + "Value": { + "Fn::GetAtt": [ + "LambdaFunction", + "Arn" + ] + } + }, + "LambdaExecutionRole": { + "Value": { + "Ref": "LambdaExecutionRole" + } + }, + "LambdaExecutionRoleArn": { + "Value": { + "Fn::GetAtt": [ + "LambdaExecutionRole", + "Arn" + ] + } + }, + "Region": { + "Value": { + "Ref": "AWS::Region" + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionlognutrition-10VHW25DVQUYL.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionlognutrition-10VHW25DVQUYL.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionlognutrition-10VHW25DVQUYL.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.outputs.json similarity index 83% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionlognutrition-10VHW25DVQUYL.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.outputs.json index 0687ea2fe72..8016fe38118 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionlognutrition-10VHW25DVQUYL.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.outputs.json @@ -1,7 +1,7 @@ [ { "OutputKey": "LambdaExecutionRoleArn", - "OutputValue": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRolee7dd41c6-main" + "OutputValue": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole8dc6052c-main" }, { "OutputKey": "Region", @@ -17,6 +17,6 @@ }, { "OutputKey": "LambdaExecutionRole", - "OutputValue": "fitnesstrackerLambdaRolee7dd41c6-main" + "OutputValue": "fitnesstrackerLambdaRole8dc6052c-main" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionlognutrition-10VHW25DVQUYL.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.parameters.json similarity index 77% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionlognutrition-10VHW25DVQUYL.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.parameters.json index 887bbd3b71a..2e5abe71d79 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionlognutrition-10VHW25DVQUYL.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.parameters.json @@ -5,7 +5,7 @@ }, { "ParameterKey": "apifitnesstrackerGraphQLAPIIdOutput", - "ParameterValue": "2aikutabnvbuhlzmh4mvkg3eji" + "ParameterValue": "4ebr7lx7bbhnpeo5dbtcvdajdm" }, { "ParameterKey": "s3Key", @@ -13,7 +13,7 @@ }, { "ParameterKey": "deploymentBucketName", - "ParameterValue": "amplify-fitnesstracker-main-0683c-deployment" + "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" }, { "ParameterKey": "env", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionlognutrition-10VHW25DVQUYL.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.template.json similarity index 98% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionlognutrition-10VHW25DVQUYL.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.template.json index fd10c7f0ba5..e1789ef2c20 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c-functionlognutrition-10VHW25DVQUYL.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.template.json @@ -122,12 +122,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRolee7dd41c6", + "fitnesstrackerLambdaRole8dc6052c", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRolee7dd41c6", + "fitnesstrackerLambdaRole8dc6052c", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.description.txt new file mode 100644 index 00000000000..daf66c0bc85 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.description.txt @@ -0,0 +1 @@ +Root Stack for AWS Amplify CLI \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.outputs.json similarity index 56% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.outputs.json index c3871838d76..89e90b54519 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.outputs.json @@ -1,42 +1,42 @@ [ { "OutputKey": "AuthRoleName", - "OutputValue": "amplify-fitnesstracker-main-0683c-authRole" + "OutputValue": "amplify-fitnesstracker-main-6fc9a-authRole" }, { "OutputKey": "UnauthRoleArn", - "OutputValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-0683c-unauthRole" + "OutputValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole" }, { "OutputKey": "AuthRoleArn", - "OutputValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-0683c-authRole" + "OutputValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" }, { "OutputKey": "Region", "OutputValue": "us-east-1", "Description": "CloudFormation provider root stack Region", - "ExportName": "amplify-fitnesstracker-main-0683c-Region" + "ExportName": "amplify-fitnesstracker-main-6fc9a-Region" }, { "OutputKey": "DeploymentBucketName", - "OutputValue": "amplify-fitnesstracker-main-0683c-deployment", + "OutputValue": "amplify-fitnesstracker-main-6fc9a-deployment", "Description": "CloudFormation provider root stack deployment bucket name", - "ExportName": "amplify-fitnesstracker-main-0683c-DeploymentBucketName" + "ExportName": "amplify-fitnesstracker-main-6fc9a-DeploymentBucketName" }, { "OutputKey": "UnauthRoleName", - "OutputValue": "amplify-fitnesstracker-main-0683c-unauthRole" + "OutputValue": "amplify-fitnesstracker-main-6fc9a-unauthRole" }, { "OutputKey": "StackName", - "OutputValue": "amplify-fitnesstracker-main-0683c", + "OutputValue": "amplify-fitnesstracker-main-6fc9a", "Description": "CloudFormation provider root stack ID", - "ExportName": "amplify-fitnesstracker-main-0683c-StackName" + "ExportName": "amplify-fitnesstracker-main-6fc9a-StackName" }, { "OutputKey": "StackId", - "OutputValue": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-0683c/8ef87630-1a5b-11f1-84f6-12153bdc35f9", + "OutputValue": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a/d1ee9bf0-2590-11f1-8e36-1220ebfe67af", "Description": "CloudFormation provider root stack name", - "ExportName": "amplify-fitnesstracker-main-0683c-StackId" + "ExportName": "amplify-fitnesstracker-main-6fc9a-StackId" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.parameters.json new file mode 100644 index 00000000000..e4f0b36fccf --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.parameters.json @@ -0,0 +1,14 @@ +[ + { + "ParameterKey": "AuthRoleName", + "ParameterValue": "amplify-fitnesstracker-main-6fc9a-authRole" + }, + { + "ParameterKey": "DeploymentBucketName", + "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" + }, + { + "ParameterKey": "UnauthRoleName", + "ParameterValue": "amplify-fitnesstracker-main-6fc9a-unauthRole" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.template.json similarity index 85% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.template.json index 3c1652a8af6..5345516d4d9 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-0683c.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.template.json @@ -202,7 +202,7 @@ "APIGatewayAuthStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", "Parameters": { "authRoleName": { "Ref": "AuthRoleName" @@ -229,50 +229,50 @@ "AuthTriggerCustomLambdaStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", "Parameters": { "env": "main", "userpoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, "userpoolArn": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolArn" ] }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupLambdaExecutionRole": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole": { "Fn::GetAtt": [ - "functionfitnesstracker6b0fc1196b0fc119PreSignup", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", "Outputs.LambdaExecutionRoleArn" ] }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupArn": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { "Fn::GetAtt": [ - "functionfitnesstracker6b0fc1196b0fc119PreSignup", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", "Outputs.Arn" ] }, - "functionfitnesstracker6b0fc1196b0fc119PreSignupName": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { "Fn::GetAtt": [ - "functionfitnesstracker6b0fc1196b0fc119PreSignup", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", "Outputs.Name" ] } } }, "DependsOn": [ - "authfitnesstracker6b0fc1196b0fc119", - "functionfitnesstracker6b0fc1196b0fc119PreSignup" + "authfitnesstracker9ceb2e7c9ceb2e7c", + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup" ] }, "apiadminapi": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", "Parameters": { "functionadminName": { "Fn::GetAtt": [ @@ -286,9 +286,9 @@ "Outputs.Arn" ] }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, @@ -305,19 +305,19 @@ "apifitnesstracker": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/cloudformation-template.json", "Parameters": { "AppSyncApiName": "fitnesstracker", "DynamoDBBillingMode": "PAY_PER_REQUEST", "DynamoDBEnableServerSideEncryption": false, "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, - "S3DeploymentBucket": "amplify-fitnesstracker-main-0683c-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/96fdcde6a80859ead18d697e115cb9bd809fa98a", + "S3DeploymentBucket": "amplify-fitnesstracker-main-6fc9a-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa", "env": "main" } } @@ -325,7 +325,7 @@ "apinutritionapi": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", "Parameters": { "functionlognutritionName": { "Fn::GetAtt": [ @@ -339,9 +339,9 @@ "Outputs.Arn" ] }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, @@ -355,15 +355,15 @@ } } }, - "authfitnesstracker6b0fc1196b0fc119": { + "authfitnesstracker9ceb2e7c9ceb2e7c": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/fitnesstracker6b0fc1196b0fc119-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json", "Parameters": { - "identityPoolName": "fitnesstracker6b0fc119_identitypool_6b0fc119", + "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes6b0fc119", - "userPoolName": "fitnesstracker6b0fc119_userpool_6b0fc119", + "resourceNameTruncated": "fitnes9ceb2e7c", + "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", "autoVerifiedAttributes": "email", "mfaConfiguration": "OFF", "mfaTypes": "SMS Text Message", @@ -377,13 +377,13 @@ "requiredAttributes": "email", "aliasAttributes": "", "userpoolClientGenerateSecret": false, - "userpoolClientRefreshTokenValidity": "30", + "userpoolClientRefreshTokenValidity": 30, "userpoolClientWriteAttributes": "email", "userpoolClientReadAttributes": "email", - "userpoolClientLambdaRole": "fitnes6b0fc119_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "6b0fc119", - "resourceName": "fitnesstracker6b0fc1196b0fc119", + "sharedId": "9ceb2e7c", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -410,7 +410,7 @@ "breakCircularDependency": true, "dependsOn": "[object Object]", "permissions": "", - "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker6b0fc1196b0fc119PreSignup\"}", + "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}", "env": "main" } } @@ -418,7 +418,7 @@ "authuserPoolGroups": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", "Parameters": { "AuthRoleArn": { "Fn::GetAtt": [ @@ -432,27 +432,27 @@ "Arn" ] }, - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, - "authfitnesstracker6b0fc1196b0fc119AppClientIDWeb": { + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.AppClientIDWeb" ] }, - "authfitnesstracker6b0fc1196b0fc119AppClientID": { + "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.AppClientID" ] }, - "authfitnesstracker6b0fc1196b0fc119IdentityPoolId": { + "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.IdentityPoolId" ] }, @@ -463,13 +463,13 @@ "functionadmin": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/admin-536f797874787247392f-build.zip", - "authfitnesstracker6b0fc1196b0fc119UserPoolId": { + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/admin-765632787437744e386e-build.zip", + "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.UserPoolId" ] }, @@ -477,16 +477,16 @@ } } }, - "functionfitnesstracker6b0fc1196b0fc119PreSignup": { + "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/fitnesstracker6b0fc1196b0fc119PreSignup-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json", "Parameters": { "modules": "email-filter-allowlist", - "resourceName": "fitnesstracker6b0fc1196b0fc119PreSignup", + "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", "DOMAINALLOWLIST": "amazon.com", - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", - "s3Key": "amplify-builds/fitnesstracker6b0fc1196b0fc119PreSignup-555a623867446f4a3843-build.zip", + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "s3Key": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip", "env": "main" } } @@ -494,9 +494,9 @@ "functionlognutrition": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-0683c-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-0683c-deployment", + "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", "apifitnesstrackerGraphQLAPIIdOutput": { "Fn::GetAtt": [ @@ -512,7 +512,7 @@ "DependsOn": [ "AuthRole", "UnauthRole", - "authfitnesstracker6b0fc1196b0fc119" + "authfitnesstracker9ceb2e7c9ceb2e7c" ], "Type": "AWS::Lambda::Function", "Properties": { @@ -622,7 +622,7 @@ }, "idpId": { "Fn::GetAtt": [ - "authfitnesstracker6b0fc1196b0fc119", + "authfitnesstracker9ceb2e7c9ceb2e7c", "Outputs.IdentityPoolId" ] }, diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts index fae31be1fe0..19fb1885fc5 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/refactor.test.ts @@ -72,6 +72,10 @@ test('mood-board snapshot', async () => { await testSnapshot('mood-board'); }); +test('fitness-tracker snapshot', async () => { + await testSnapshot('fitness-tracker'); +}); + async function testSnapshot(appName: string, appOptions?: MigrationAppOptions, customize?: (app: MigrationApp) => Promise) { await MigrationApp.run( appName, From 8c3aac1d476afc40edff0d164d4cbcbb21f5ddcd Mon Sep 17 00:00:00 2001 From: Eli Polonsky Date: Mon, 23 Mar 2026 20:55:55 -0400 Subject: [PATCH 46/70] chore: update snapshots --- ...179371D7-W7QZVETRVIH-holding.mappings.json | 8 ++-- ...7-W7QZVETRVIH-holding.source.template.json | 4 +- ...799-auth179371D7-W7QZVETRVIH.mappings.json | 40 +++++++++---------- ...h179371D7-W7QZVETRVIH.target.template.json | 4 +- ...799-auth179371D7-W7QZVETRVIH.mappings.json | 8 ++-- ...h179371D7-W7QZVETRVIH.target.template.json | 4 +- ...799-auth179371D7-W7QZVETRVIH.template.json | 4 +- 7 files changed, 36 insertions(+), 36 deletions(-) diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.mappings.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.mappings.json index 83c0978f566..d4a27b982d7 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.mappings.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04", - "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH" + "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH", + "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04" }, "Destination": { - "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04", - "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding" + "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding", + "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.source.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.source.template.json index 5684a232e16..d8eba261f95 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.source.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.source.template.json @@ -247,7 +247,7 @@ "FunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-fitnesstracker9ceb2e7c9ce-xZE38EFlQueh", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE", "Runtime": "nodejs22.x", "Tags": [ { @@ -423,7 +423,7 @@ "FunctionName": "admin-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-admingen2mainlambdaServic-oHrOsDr6WPUj", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/admingen2mainlambdaServiceRole439B1792", "Runtime": "nodejs22.x", "Tags": [ { diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json index 4091bf8545c..ae2c9056571 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json @@ -1,52 +1,52 @@ [ { "Source": { - "LogicalResourceId": "UserPool", - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD/9ac07e10-2594-11f1-aee1-0affcf84f6bb" + "StackName": "amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD", + "LogicalResourceId": "UserPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPool4BA7F805", - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/785891a0-25fd-11f1-b51f-0e3e40e955b5" + "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "LogicalResourceId": "UserPoolClientWeb", - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD/9ac07e10-2594-11f1-aee1-0affcf84f6bb" + "StackName": "amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD", + "LogicalResourceId": "UserPoolClientWeb" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8", - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/785891a0-25fd-11f1-b51f-0e3e40e955b5" + "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "LogicalResourceId": "UserPoolClient", - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD/9ac07e10-2594-11f1-aee1-0affcf84f6bb" + "StackName": "amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD", + "LogicalResourceId": "UserPoolClient" }, "Destination": { - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448", - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/785891a0-25fd-11f1-b51f-0e3e40e955b5" + "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "LogicalResourceId": "IdentityPool", - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD/9ac07e10-2594-11f1-aee1-0affcf84f6bb" + "StackName": "amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD", + "LogicalResourceId": "IdentityPool" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC", - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/785891a0-25fd-11f1-b51f-0e3e40e955b5" + "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "LogicalResourceId": "IdentityPoolRoleMap", - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD/9ac07e10-2594-11f1-aee1-0affcf84f6bb" + "StackName": "amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD", + "LogicalResourceId": "IdentityPoolRoleMap" }, "Destination": { - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8", - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/785891a0-25fd-11f1-b51f-0e3e40e955b5" + "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json index 99f8612dcd5..45938309e4f 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json @@ -259,7 +259,7 @@ "FunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-fitnesstracker9ceb2e7c9ce-xZE38EFlQueh", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE", "Runtime": "nodejs22.x", "Tags": [ { @@ -435,7 +435,7 @@ "FunctionName": "admin-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-admingen2mainlambdaServic-oHrOsDr6WPUj", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/admingen2mainlambdaServiceRole439B1792", "Runtime": "nodejs22.x", "Tags": [ { diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json index 86252db88e5..fb65e230dc8 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json @@ -1,12 +1,12 @@ [ { "Source": { - "LogicalResourceId": "AdminGroup", - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV/af7405c0-2594-11f1-8524-0affd2875eef" + "StackName": "amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV", + "LogicalResourceId": "AdminGroup" }, "Destination": { - "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04", - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/785891a0-25fd-11f1-b51f-0e3e40e955b5" + "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH", + "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json index e72ec0278ac..20656b6f77f 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json @@ -247,7 +247,7 @@ "FunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-fitnesstracker9ceb2e7c9ce-xZE38EFlQueh", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE", "Runtime": "nodejs22.x", "Tags": [ { @@ -423,7 +423,7 @@ "FunctionName": "admin-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-admingen2mainlambdaServic-oHrOsDr6WPUj", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/admingen2mainlambdaServiceRole439B1792", "Runtime": "nodejs22.x", "Tags": [ { diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json index 4b2c614ebc7..9cefa411a99 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json @@ -465,7 +465,7 @@ "FunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-fitnesstracker9ceb2e7c9ce-xZE38EFlQueh", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE", "Runtime": "nodejs22.x", "Tags": [ { @@ -641,7 +641,7 @@ "FunctionName": "admin-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-admingen2mainlambdaServic-oHrOsDr6WPUj", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/admingen2mainlambdaServiceRole439B1792", "Runtime": "nodejs22.x", "Tags": [ { From 8822035b7f53f51d6bf1b4f040da2a573bc7ea10 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Mon, 23 Mar 2026 22:27:37 -0400 Subject: [PATCH 47/70] refactor(cli-internal): simplify beforeMove/afterMove to take stack ID Replace RefactorBlueprint parameter with gen2StackId string in beforeMove and afterMove. Both methods now fetch templates and build resource mappings independently from the blueprint, reading the actual stack state at plan time. This decouples holding stack operations from the main move mappings. Add info/debug helpers to CategoryRefactorer base class. Move empty-mappings guard from plan() into move(). Add debug logging to beforeMove and afterMove for traceability. Update fitness-tracker generate snapshots for resource naming. --- Prompt: commit my changes. --- ...79371D7-SEM95NL3BKFT-holding.mappings.json | 8 +- ...-SEM95NL3BKFT-holding.target.template.json | 42 +-- ...79371D7-DAPL7YOMHRB4-holding.mappings.json | 8 +- ...-DAPL7YOMHRB4-holding.target.template.json | 42 +-- .../email-filter-allowlist.js | 0 .../event.json | 0 .../index.js | 0 .../resource.ts | 4 +- .../amplify/auth/resource.ts | 4 +- .../amplify/backend.ts | 302 +++++++++--------- .../amplify/data/resource.ts | 6 +- ...7-W7QZVETRVIH-holding.target.template.json | 42 +-- ...h179371D7-UGINV3RD10-holding.mappings.json | 8 +- ...D7-UGINV3RD10-holding.target.template.json | 42 +-- ...9371D7-1RF1TAQPAA1WW-holding.mappings.json | 8 +- ...1RF1TAQPAA1WW-holding.target.template.json | 42 +-- ...79371D7-CFDKYQIOG2UJ-holding.mappings.json | 8 +- ...-CFDKYQIOG2UJ-holding.target.template.json | 42 +-- .../refactor/workflow/category-refactorer.ts | 25 +- .../workflow/forward-category-refactorer.ts | 63 ++-- .../workflow/rollback-category-refactorer.ts | 49 +-- 21 files changed, 389 insertions(+), 356 deletions(-) rename amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/email-filter-allowlist.js (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/event.json (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/index.js (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/{fitnesstracker6b0fc1196b0fc119PreSignup => fitnesstracker9ceb2e7c9ceb2e7cPreSignup}/resource.ts (74%) diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json index e82e33ad210..759c58ea547 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.mappings.json @@ -12,21 +12,21 @@ { "Source": { "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" }, "Destination": { "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" }, "Destination": { "StackName": "amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { diff --git a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json index 0ac961a05d0..281c9db4335 100644 --- a/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json +++ b/amplify-migration-apps/backend-only/_snapshot.post.refactor/refactor.__from__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT.__to__.amplify-backendonly-gen2main-branch-8e0f260810-auth179371D7-SEM95NL3BKFT-holding.target.template.json @@ -71,6 +71,27 @@ "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPool/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_W9u2NBSRe" + }, + "Metadata": { + "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -103,27 +124,6 @@ "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPoolAppClient/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_W9u2NBSRe" - }, - "Metadata": { - "aws:cdk:path": "amplify-backendonly-gen2main-branch-8e0f260810/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json index 0ba71166ed4..514e117ec84 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.mappings.json @@ -12,21 +12,21 @@ { "Source": { "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" }, "Destination": { "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" }, "Destination": { "StackName": "amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json index a4cc052dc53..95c69630c2f 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4.__to__.amplify-discussions-gen2main-branch-96dfd1dc44-auth179371D7-DAPL7YOMHRB4-holding.target.template.json @@ -76,6 +76,27 @@ "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPool/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 172800, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_olNpwuJIL" + }, + "Metadata": { + "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -108,27 +129,6 @@ "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPoolAppClient/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 172800, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_olNpwuJIL" - }, - "Metadata": { - "aws:cdk:path": "amplify-discussions-gen2main-branch-96dfd1dc44/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker6b0fc1196b0fc119PreSignup/email-filter-allowlist.js b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/email-filter-allowlist.js similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker6b0fc1196b0fc119PreSignup/email-filter-allowlist.js rename to amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/email-filter-allowlist.js diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker6b0fc1196b0fc119PreSignup/event.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/event.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker6b0fc1196b0fc119PreSignup/event.json rename to amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/event.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker6b0fc1196b0fc119PreSignup/index.js b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/index.js similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker6b0fc1196b0fc119PreSignup/index.js rename to amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/index.js diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker6b0fc1196b0fc119PreSignup/resource.ts b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/resource.ts similarity index 74% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker6b0fc1196b0fc119PreSignup/resource.ts rename to amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/resource.ts index 06a0de5e1b4..70e84323b8a 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker6b0fc1196b0fc119PreSignup/resource.ts +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/resource.ts @@ -2,9 +2,9 @@ import { defineFunction } from '@aws-amplify/backend'; const branchName = process.env.AWS_BRANCH ?? 'sandbox'; -export const fitnesstracker6b0fc1196b0fc119PreSignup = defineFunction({ +export const fitnesstracker9ceb2e7c9ceb2e7cPreSignup = defineFunction({ entry: './index.js', - name: `fitnesstracker6b0fc1196b0fc119PreSignup-${branchName}`, + name: `fitnesstracker9ceb2e7c9ceb2e7cPreSignup-${branchName}`, timeoutSeconds: 25, memoryMB: 128, environment: { diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/resource.ts b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/resource.ts index f75b172e34b..d8023f79ff8 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/resource.ts +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/resource.ts @@ -1,5 +1,5 @@ import { defineAuth } from '@aws-amplify/backend'; -import { fitnesstracker6b0fc1196b0fc119PreSignup } from './fitnesstracker6b0fc1196b0fc119PreSignup/resource'; +import { fitnesstracker9ceb2e7c9ceb2e7cPreSignup } from './fitnesstracker9ceb2e7c9ceb2e7cPreSignup/resource'; import { admin } from '../function/admin/resource'; export const auth = defineAuth({ @@ -17,7 +17,7 @@ export const auth = defineAuth({ }, groups: ['Admin'], triggers: { - preSignUp: fitnesstracker6b0fc1196b0fc119PreSignup, + preSignUp: fitnesstracker9ceb2e7c9ceb2e7cPreSignup, }, multifactor: { mode: 'OFF', diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/backend.ts b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/backend.ts index 874325a08aa..d38165f9a65 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/backend.ts +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/backend.ts @@ -1,8 +1,8 @@ import { auth } from './auth/resource'; import { data } from './data/resource'; -import { fitnesstracker6b0fc1196b0fc119PreSignup } from './auth/fitnesstracker6b0fc1196b0fc119PreSignup/resource'; -import { lognutrition } from './function/lognutrition/resource'; import { admin } from './function/admin/resource'; +import { fitnesstracker9ceb2e7c9ceb2e7cPreSignup } from './auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/resource'; +import { lognutrition } from './function/lognutrition/resource'; import { RestApi, LambdaIntegration, @@ -12,77 +12,108 @@ import { } from 'aws-cdk-lib/aws-apigateway'; import { Policy, PolicyStatement } from 'aws-cdk-lib/aws-iam'; import { defineBackend } from '@aws-amplify/backend'; -import { Duration, Stack } from 'aws-cdk-lib'; +import { Stack, Duration } from 'aws-cdk-lib'; const backend = defineBackend({ auth, data, - fitnesstracker6b0fc1196b0fc119PreSignup, - lognutrition, admin, + fitnesstracker9ceb2e7c9ceb2e7cPreSignup, + lognutrition, }); -const cfnUserPool = backend.auth.resources.cfnResources.cfnUserPool; -cfnUserPool.usernameAttributes = undefined; -cfnUserPool.policies = { - passwordPolicy: { - minimumLength: 8, - requireUppercase: false, - requireLowercase: false, - requireNumbers: false, - requireSymbols: false, - temporaryPasswordValidityDays: 7, +const branchName = process.env.AWS_BRANCH ?? 'sandbox'; +const adminapiStack = backend.createStack('rest-api-stack-adminapi'); +const adminapiApi = new RestApi(adminapiStack, 'RestApi', { + restApiName: `adminapi-${branchName}`, +}); +adminapiApi.addGatewayResponse('Default4XX', { + type: ResponseType.DEFAULT_4XX, + responseHeaders: { + 'Access-Control-Allow-Origin': "'*'", + 'Access-Control-Allow-Headers': + "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'", + 'Access-Control-Allow-Methods': "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'", + 'Access-Control-Expose-Headers': "'Date,X-Amzn-ErrorType'", }, -}; -const cfnIdentityPool = backend.auth.resources.cfnResources.cfnIdentityPool; -cfnIdentityPool.allowUnauthenticatedIdentities = false; -const userPool = backend.auth.resources.userPool; -userPool.addClient('NativeAppClient', { - refreshTokenValidity: Duration.days(30), - enableTokenRevocation: true, - enablePropagateAdditionalUserContextData: false, - authSessionValidity: Duration.minutes(3), - disableOAuth: true, - generateSecret: false, }); -const branchName = process.env.AWS_BRANCH ?? 'sandbox'; -backend.fitnesstracker6b0fc1196b0fc119PreSignup.resources.cfnResources.cfnFunction.functionName = `fitnesstracker6b0fc1196b0fc119PreSignup-${branchName}`; -backend.lognutrition.resources.cfnResources.cfnFunction.functionName = `lognutrition-${branchName}`; -backend.lognutrition.addEnvironment( - 'API_FITNESSTRACKER_GRAPHQLAPIIDOUTPUT', - backend.data.apiId -); -backend.lognutrition.addEnvironment( - 'API_FITNESSTRACKER_MEALTABLE_ARN', - backend.data.resources.tables['Meal'].tableArn -); -backend.lognutrition.addEnvironment( - 'API_FITNESSTRACKER_MEALTABLE_NAME', - backend.data.resources.tables['Meal'].tableName +adminapiApi.addGatewayResponse('Default5XX', { + type: ResponseType.DEFAULT_5XX, + responseHeaders: { + 'Access-Control-Allow-Origin': "'*'", + 'Access-Control-Allow-Headers': + "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'", + 'Access-Control-Allow-Methods': "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'", + 'Access-Control-Expose-Headers': "'Date,X-Amzn-ErrorType'", + }, +}); +const adminIntegration = new LambdaIntegration(backend.admin.resources.lambda); +const gen1adminapiApi = RestApi.fromRestApiAttributes( + adminapiStack, + 'Gen1adminapiApi', + { + restApiId: 'bbk7dedp01', + rootResourceId: 'bbk7dedp01-root', + } ); -backend.data.resources.tables['Meal'].grant( - backend.lognutrition.resources.lambda, - 'dynamodb:Put*', - 'dynamodb:Create*', - 'dynamodb:BatchWriteItem', - 'dynamodb:PartiQLInsert', - 'dynamodb:Get*', - 'dynamodb:BatchGetItem', - 'dynamodb:List*', - 'dynamodb:Describe*', - 'dynamodb:Scan', - 'dynamodb:Query', - 'dynamodb:PartiQLSelect', - 'dynamodb:Update*', - 'dynamodb:RestoreTable*', - 'dynamodb:PartiQLUpdate', - 'dynamodb:Delete*', - 'dynamodb:PartiQLDelete' +const gen1adminapiPolicy = new Policy(adminapiStack, 'Gen1adminapiPolicy', { + statements: [ + new PolicyStatement({ + actions: ['execute-api:Invoke'], + resources: [`${gen1adminapiApi.arnForExecuteApi('GET', '/*')}`], + }), + ], +}); +backend.auth.resources.authenticatedUserIamRole.attachInlinePolicy( + gen1adminapiPolicy ); -backend.admin.resources.cfnResources.cfnFunction.functionName = `admin-${branchName}`; -backend.admin.addEnvironment( - 'AUTH_FITNESSTRACKER6B0FC1196B0FC119_USERPOOLID', - backend.auth.resources.userPool.userPoolId +const adminResource = adminapiApi.root.addResource('admin', { + defaultMethodOptions: { + authorizationType: AuthorizationType.IAM, + }, + defaultCorsPreflightOptions: { + allowOrigins: Cors.ALL_ORIGINS, + allowMethods: Cors.ALL_METHODS, + allowHeaders: [ + 'Content-Type', + 'X-Amz-Date', + 'Authorization', + 'X-Api-Key', + 'X-Amz-Security-Token', + 'X-Amz-User-Agent', + ], + statusCode: 200, + }, +}); +adminResource.addMethod('ANY', adminIntegration); +adminResource.addProxy({ + anyMethod: true, + defaultIntegration: adminIntegration, +}); +// /admin - Admin group only +backend.auth.resources.groups['Admin'].role.attachInlinePolicy( + new Policy(adminapiStack, 'adminAdminPolicy', { + statements: [ + new PolicyStatement({ + actions: ['execute-api:Invoke'], + resources: [ + adminapiApi.arnForExecuteApi('GET', '/admin'), + adminapiApi.arnForExecuteApi('GET', '/admin/*'), + ], + }), + ], + }) ); +backend.addOutput({ + custom: { + API: { + [adminapiApi.restApiName]: { + endpoint: adminapiApi.url.slice(0, -1), + region: Stack.of(adminapiApi).region, + apiName: adminapiApi.restApiName, + }, + }, + }, +}); const cfnGraphqlApi = backend.data.resources.cfnResources.cfnGraphqlApi; cfnGraphqlApi.additionalAuthenticationProviders = [ { @@ -120,8 +151,8 @@ const gen1nutritionapiApi = RestApi.fromRestApiAttributes( nutritionapiStack, 'Gen1nutritionapiApi', { - restApiId: '6smuxn28tb', - rootResourceId: '6smuxn28tb-root', + restApiId: 'ekto8iln0h', + rootResourceId: 'ekto8iln0h-root', } ); const gen1nutritionapiPolicy = new Policy( @@ -220,95 +251,64 @@ backend.addOutput({ }, }, }); -const adminapiStack = backend.createStack('rest-api-stack-adminapi'); -const adminapiApi = new RestApi(adminapiStack, 'RestApi', { - restApiName: `adminapi-${branchName}`, -}); -adminapiApi.addGatewayResponse('Default4XX', { - type: ResponseType.DEFAULT_4XX, - responseHeaders: { - 'Access-Control-Allow-Origin': "'*'", - 'Access-Control-Allow-Headers': - "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'", - 'Access-Control-Allow-Methods': "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'", - 'Access-Control-Expose-Headers': "'Date,X-Amzn-ErrorType'", - }, -}); -adminapiApi.addGatewayResponse('Default5XX', { - type: ResponseType.DEFAULT_5XX, - responseHeaders: { - 'Access-Control-Allow-Origin': "'*'", - 'Access-Control-Allow-Headers': - "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'", - 'Access-Control-Allow-Methods': "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'", - 'Access-Control-Expose-Headers': "'Date,X-Amzn-ErrorType'", +const cfnUserPool = backend.auth.resources.cfnResources.cfnUserPool; +cfnUserPool.usernameAttributes = undefined; +cfnUserPool.policies = { + passwordPolicy: { + minimumLength: 8, + requireUppercase: false, + requireLowercase: false, + requireNumbers: false, + requireSymbols: false, + temporaryPasswordValidityDays: 7, }, +}; +const cfnIdentityPool = backend.auth.resources.cfnResources.cfnIdentityPool; +cfnIdentityPool.allowUnauthenticatedIdentities = false; +const userPool = backend.auth.resources.userPool; +userPool.addClient('NativeAppClient', { + refreshTokenValidity: Duration.days(30), + enableTokenRevocation: true, + enablePropagateAdditionalUserContextData: false, + authSessionValidity: Duration.minutes(3), + disableOAuth: true, + generateSecret: false, }); -const adminIntegration = new LambdaIntegration(backend.admin.resources.lambda); -const gen1adminapiApi = RestApi.fromRestApiAttributes( - adminapiStack, - 'Gen1adminapiApi', - { - restApiId: 'kh5xa5hayh', - rootResourceId: 'kh5xa5hayh-root', - } +backend.admin.resources.cfnResources.cfnFunction.functionName = `admin-${branchName}`; +backend.admin.addEnvironment( + 'AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID', + backend.auth.resources.userPool.userPoolId ); -const gen1adminapiPolicy = new Policy(adminapiStack, 'Gen1adminapiPolicy', { - statements: [ - new PolicyStatement({ - actions: ['execute-api:Invoke'], - resources: [`${gen1adminapiApi.arnForExecuteApi('GET', '/*')}`], - }), - ], -}); -backend.auth.resources.authenticatedUserIamRole.attachInlinePolicy( - gen1adminapiPolicy +backend.fitnesstracker9ceb2e7c9ceb2e7cPreSignup.resources.cfnResources.cfnFunction.functionName = `fitnesstracker9ceb2e7c9ceb2e7cPreSignup-${branchName}`; +backend.lognutrition.resources.cfnResources.cfnFunction.functionName = `lognutrition-${branchName}`; +backend.lognutrition.addEnvironment( + 'API_FITNESSTRACKER_GRAPHQLAPIIDOUTPUT', + backend.data.apiId ); -const adminResource = adminapiApi.root.addResource('admin', { - defaultMethodOptions: { - authorizationType: AuthorizationType.IAM, - }, - defaultCorsPreflightOptions: { - allowOrigins: Cors.ALL_ORIGINS, - allowMethods: Cors.ALL_METHODS, - allowHeaders: [ - 'Content-Type', - 'X-Amz-Date', - 'Authorization', - 'X-Api-Key', - 'X-Amz-Security-Token', - 'X-Amz-User-Agent', - ], - statusCode: 200, - }, -}); -adminResource.addMethod('ANY', adminIntegration); -adminResource.addProxy({ - anyMethod: true, - defaultIntegration: adminIntegration, -}); -// /admin - Admin group only -backend.auth.resources.groups['Admin'].role.attachInlinePolicy( - new Policy(adminapiStack, 'adminAdminPolicy', { - statements: [ - new PolicyStatement({ - actions: ['execute-api:Invoke'], - resources: [ - adminapiApi.arnForExecuteApi('GET', '/admin'), - adminapiApi.arnForExecuteApi('GET', '/admin/*'), - ], - }), - ], - }) +backend.lognutrition.addEnvironment( + 'API_FITNESSTRACKER_MEALTABLE_ARN', + backend.data.resources.tables['Meal'].tableArn +); +backend.lognutrition.addEnvironment( + 'API_FITNESSTRACKER_MEALTABLE_NAME', + backend.data.resources.tables['Meal'].tableName +); +backend.data.resources.tables['Meal'].grant( + backend.lognutrition.resources.lambda, + 'dynamodb:Put*', + 'dynamodb:Create*', + 'dynamodb:BatchWriteItem', + 'dynamodb:PartiQLInsert', + 'dynamodb:Get*', + 'dynamodb:BatchGetItem', + 'dynamodb:List*', + 'dynamodb:Describe*', + 'dynamodb:Scan', + 'dynamodb:Query', + 'dynamodb:PartiQLSelect', + 'dynamodb:Update*', + 'dynamodb:RestoreTable*', + 'dynamodb:PartiQLUpdate', + 'dynamodb:Delete*', + 'dynamodb:PartiQLDelete' ); -backend.addOutput({ - custom: { - API: { - [adminapiApi.restApiName]: { - endpoint: adminapiApi.url.slice(0, -1), - region: Stack.of(adminapiApi).region, - apiName: adminapiApi.restApiName, - }, - }, - }, -}); diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/data/resource.ts b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/data/resource.ts index f0cd5d66650..395962b74db 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/data/resource.ts +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/data/resource.ts @@ -38,9 +38,9 @@ export const data = defineData({ //The "branchname" variable needs to be the same as your deployment branch if you want to reuse your Gen1 app tables branchName: 'main', modelNameToTableNameMapping: { - WorkoutProgram: 'WorkoutProgram-2aikutabnvbuhlzmh4mvkg3eji-main', - Exercise: 'Exercise-2aikutabnvbuhlzmh4mvkg3eji-main', - Meal: 'Meal-2aikutabnvbuhlzmh4mvkg3eji-main', + WorkoutProgram: 'WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main', + Exercise: 'Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main', + Meal: 'Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main', }, }, ], diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.target.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.target.template.json index 5bce33938d8..7dc317d8e76 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.target.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.target.template.json @@ -71,6 +71,27 @@ "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_mQEsDQ1lC" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -103,27 +124,6 @@ "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPoolAppClient/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_mQEsDQ1lC" - }, - "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json index 79538fa7fde..1c699ef3e6d 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.mappings.json @@ -12,21 +12,21 @@ { "Source": { "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" }, "Destination": { "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" }, "Destination": { "StackName": "amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { diff --git a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json index 56297208ba2..f9691d6822f 100644 --- a/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json +++ b/amplify-migration-apps/mood-board/_snapshot.post.refactor/refactor.__from__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10.__to__.amplify-moodboard-gen2main-branch-f7e4caeabb-auth179371D7-UGINV3RD10-holding.target.template.json @@ -71,6 +71,27 @@ "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_1A4RMvPNr" + }, + "Metadata": { + "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -103,27 +124,6 @@ "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPoolAppClient/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_1A4RMvPNr" - }, - "Metadata": { - "aws:cdk:path": "amplify-moodboard-gen2main-branch-f7e4caeabb/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json index 3ff71e8af10..c32bf4971d4 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.mappings.json @@ -12,21 +12,21 @@ { "Source": { "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" }, "Destination": { "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" }, "Destination": { "StackName": "amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { diff --git a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json index f86fae3e9c3..38ef9ab99c9 100644 --- a/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json +++ b/amplify-migration-apps/product-catalog/_snapshot.post.refactor/refactor.__from__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW.__to__.amplify-productcatalog-gen2main-branch-4b79ec0f9a-auth179371D7-1RF1TAQPAA1WW-holding.target.template.json @@ -71,6 +71,27 @@ "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPool/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_OFRBVzhq5" + }, + "Metadata": { + "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -103,27 +124,6 @@ "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPoolAppClient/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_OFRBVzhq5" - }, - "Metadata": { - "aws:cdk:path": "amplify-productcatalog-gen2main-branch-4b79ec0f9a/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json index f31a9ecca03..ff5c6741705 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.mappings.json @@ -12,21 +12,21 @@ { "Source": { "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" }, "Destination": { "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" }, "Destination": { "StackName": "amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { diff --git a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json index 779bb840e47..8656382c8f9 100644 --- a/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json +++ b/amplify-migration-apps/project-boards/_snapshot.post.refactor/refactor.__from__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ.__to__.amplify-projectboards-gen2main-branch-886dbd2dec-auth179371D7-CFDKYQIOG2UJ-holding.target.template.json @@ -71,6 +71,27 @@ "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPool/Resource" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_pXlpWF7QY" + }, + "Metadata": { + "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { @@ -103,27 +124,6 @@ "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPoolAppClient/Resource" } }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "AllowedOAuthFlowsUserPoolClient": false, - "AuthSessionValidity": 3, - "EnablePropagateAdditionalUserContextData": false, - "EnableTokenRevocation": true, - "GenerateSecret": false, - "RefreshTokenValidity": 43200, - "SupportedIdentityProviders": [ - "COGNITO" - ], - "TokenValidityUnits": { - "RefreshToken": "minutes" - }, - "UserPoolId": "us-east-1_pXlpWF7QY" - }, - "Metadata": { - "aws:cdk:path": "amplify-projectboards-gen2main-branch-886dbd2dec/auth/amplifyAuth/UserPool/NativeAppClient/Resource" - } - }, "amplifyAuthIdentityPool3FDE84CC": { "Type": "AWS::Cognito::IdentityPool", "Properties": { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts index 8d7a9baaad5..422178d913f 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/category-refactorer.ts @@ -2,7 +2,7 @@ import { Parameter, ResourceMapping } from '@aws-sdk/client-cloudformation'; import { AmplifyError } from '@aws-amplify/amplify-cli-core'; import { CFNResource, CFNTemplate } from '../../cfn-template'; import { Planner } from '../../planner'; -import { AmplifyMigrationOperation, buildNoopOperation } from '../../_operation'; +import { AmplifyMigrationOperation } from '../../_operation'; import { AwsClients } from '../../aws-clients'; import { StackFacade } from '../stack-facade'; import { Cfn } from '../cfn'; @@ -87,10 +87,6 @@ export abstract class CategoryRefactorer implements Planner { const targetResources = this.filterResourcesByType(target.resolvedTemplate); const mappings = await this.buildResourceMappings(sourceResources, targetResources, source.stackId, target.stackId); - if (mappings.length === 0) { - this.logger.pop(); - return [buildNoopOperation(this.resource)]; - } source = addPlaceHolderIfNeeded(source, mappings); @@ -98,9 +94,9 @@ export abstract class CategoryRefactorer implements Planner { const updateSourceOps = await this.updateSource(source); const updateTargetOps = await this.updateTarget(target); - const beforeMoveOps = await this.beforeMove(blueprint); + const beforeMoveOps = await this.beforeMove(blueprint.targetStackId); const moveOps = await this.move(blueprint); - const afterMoveOps = await this.afterMove(blueprint); + const afterMoveOps = await this.afterMove(blueprint.sourceStackId); const operations = [...updateSourceOps, ...updateTargetOps, ...beforeMoveOps, ...moveOps, ...afterMoveOps]; this.logger.pop(); @@ -133,14 +129,14 @@ export abstract class CategoryRefactorer implements Planner { * Forward: moves Gen2 resources to holding stack. * Rollback: no-op. */ - protected abstract beforeMove(blueprint: RefactorBlueprint): Promise | AmplifyMigrationOperation[]; + protected abstract beforeMove(gen2StackId: string): Promise; /** * Post-move operations. * Forward: empty. * Rollback: restores holding stack resources into Gen2. */ - protected abstract afterMove(blueprint: RefactorBlueprint): Promise; + protected abstract afterMove(gen2StackId: string): Promise; // -- Shared workflow (concrete) -- @@ -233,6 +229,9 @@ export abstract class CategoryRefactorer implements Planner { * Templates are fetched and resolved fresh at execution time. */ protected async move(blueprint: RefactorBlueprint): Promise { + if (blueprint.mappings.length === 0) { + return []; + } const sourceStackName = extractStackNameFromId(blueprint.sourceStackId); const targetStackName = extractStackNameFromId(blueprint.targetStackId); @@ -294,6 +293,14 @@ export abstract class CategoryRefactorer implements Planner { } return `${table.toString()}\n`; } + + protected info(message: string) { + this.logger.info(`[${this.resource.category}/${this.resource.resourceName}] ${message}`); + } + + protected debug(message: string) { + this.logger.debug(`[${this.resource.category}/${this.resource.resourceName}] ${message}`); + } } function addPlaceHolderIfNeeded(source: ResolvedStack, mappings: ResourceMapping[]): ResolvedStack { diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index a470a55b25c..0bc62949eb2 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -7,7 +7,7 @@ import { resolveOutputs } from '../resolvers/cfn-output-resolver'; import { resolveDependencies } from '../resolvers/cfn-dependency-resolver'; import { resolveConditions } from '../resolvers/cfn-condition-resolver'; import { extractStackNameFromId } from '../utils'; -import { CategoryRefactorer, RefactorBlueprint, ResolvedStack } from './category-refactorer'; +import { CategoryRefactorer, ResolvedStack } from './category-refactorer'; /** * Forward direction base: moves resources from Gen1 (source) to Gen2 (target). @@ -20,7 +20,7 @@ import { CategoryRefactorer, RefactorBlueprint, ResolvedStack } from './category export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { /** * Matches source resources to target resources by type. - * Subclasses can override match() for custom disambiguation. + * Sub-classes can override match() for custom disambiguation. */ protected async buildResourceMappings( sourceResources: Map, @@ -126,16 +126,25 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { * Moves Gen2 resources to a holding stack before the main refactor. * Templates are fetched fresh at execution time. */ - protected async beforeMove(blueprint: RefactorBlueprint): Promise { - if (blueprint.mappings.length === 0) return []; - - const gen2StackName = extractStackNameFromId(blueprint.targetStackId); + protected async beforeMove(gen2StackId: string): Promise { + const gen2StackName = extractStackNameFromId(gen2StackId); const holdingStackName = this.getHoldingStackName(gen2StackName); - const resourceMappings: ResourceMapping[] = blueprint.mappings.map((m) => ({ - Source: { StackName: gen2StackName, LogicalResourceId: m.Destination.LogicalResourceId }, - Destination: { StackName: holdingStackName, LogicalResourceId: m.Destination.LogicalResourceId }, - })); + this.debug(`Fetching template of gen2 stack: ${gen2StackName}`); + const gen2StackTemplate = await this.gen2Branch.fetchTemplate(gen2StackName); + const resources = this.filterResourcesByType(gen2StackTemplate); + this.debug(`Found ${resources.size} resources to move from stack: ${gen2StackName}`); + + const resourceMappings: ResourceMapping[] = []; + for (const logicalId of resources.keys()) { + this.debug(`Registering ${logicalId} to move from ${gen2StackName} to ${holdingStackName}`); + resourceMappings.push({ + Source: { StackName: gen2StackName, LogicalResourceId: logicalId }, + Destination: { StackName: holdingStackName, LogicalResourceId: logicalId }, + }); + } + + this.debug(`Locating holding stack: ${holdingStackName}`); const holdingStack = await this.cfn.findStack(holdingStackName); const operations: AmplifyMigrationOperation[] = []; @@ -151,20 +160,22 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { }); } - operations.push({ - resource: this.resource, - validate: () => undefined, - describe: async () => { - const header = `Move ${blueprint.mappings.length} resource(s) from '${gen2StackName}' to '${extractStackNameFromId( - holdingStackName, - )}'`; - const table = this.renderMappingTable(resourceMappings); - return [`${header}\n\n${table}`]; - }, - execute: async () => { - await this.cfn.refactor(resourceMappings, this.resource); - }, - }); + if (resourceMappings.length > 0) { + operations.push({ + resource: this.resource, + validate: () => undefined, + describe: async () => { + const header = `Move ${resourceMappings.length} resource(s) from '${gen2StackName}' to '${extractStackNameFromId( + holdingStackName, + )}'`; + const table = this.renderMappingTable(resourceMappings); + return [`${header}\n\n${table}`]; + }, + execute: async () => { + await this.cfn.refactor(resourceMappings, this.resource); + }, + }); + } return operations; } @@ -172,13 +183,15 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { /** * Forward: no post-move operations. Holding stack survives for rollback. */ - protected async afterMove(): Promise { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + protected async afterMove(_gen2StackId: string): Promise { return []; } /** * Hook for OAuth parameter resolution. Override in auth category. */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars protected async resolveOAuthParameters(parameters: Parameter[], _outputs: Output[]): Promise { return parameters; } diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index a8be4677409..a39a767d063 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -6,13 +6,7 @@ import { resolveParameters } from '../resolvers/cfn-parameter-resolver'; import { resolveOutputs } from '../resolvers/cfn-output-resolver'; import { resolveDependencies } from '../resolvers/cfn-dependency-resolver'; import { extractStackNameFromId } from '../utils'; -import { - CategoryRefactorer, - MIGRATION_PLACEHOLDER_LOGICAL_ID, - PLACEHOLDER_RESOURCE, - RefactorBlueprint, - ResolvedStack, -} from './category-refactorer'; +import { CategoryRefactorer, MIGRATION_PLACEHOLDER_LOGICAL_ID, PLACEHOLDER_RESOURCE, ResolvedStack } from './category-refactorer'; /** * Rollback direction base: moves resources from Gen2 (source) back to Gen1 (target). @@ -53,7 +47,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { } /** - * Returns the Gen1 logical ID for a Gen2 resource. Subclasses implement per category. + * Returns the Gen1 logical ID for a Gen2 resource. Sub-classes implement per category. */ protected abstract targetLogicalId(sourceId: string, sourceResource: CFNResource): string | undefined; @@ -97,7 +91,8 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { /** * Rollback: no pre-move operations. */ - protected beforeMove(_blueprint: RefactorBlueprint): AmplifyMigrationOperation[] { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + protected async beforeMove(_gen2StackId: string): Promise { return []; } @@ -105,17 +100,35 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { * Restores holding stack resources into Gen2. * Templates are fetched fresh at execution time. */ - protected async afterMove(blueprint: RefactorBlueprint): Promise { - const gen2StackName = blueprint.sourceStackId; - const holdingStackName = this.getHoldingStackName(extractStackNameFromId(gen2StackName)); + protected async afterMove(gen2StackId: string): Promise { + const gen2StackName = extractStackNameFromId(gen2StackId); + const holdingStackName = this.getHoldingStackName(gen2StackName); + this.debug(`Locating holding stack: ${holdingStackName}`); const holdingStack = await this.cfn.findStack(holdingStackName); - if (!holdingStack) return []; + if (!holdingStack) { + this.debug(`Holding stack ${holdingStackName} not found. Nothing to do.`); + return []; + } + + this.debug(`Fetching template of holding stack: ${holdingStackName}`); + const holdingStackTemplate = await this.gen2Branch.fetchTemplate(holdingStackName); + const resources = this.filterResourcesByType(holdingStackTemplate); + this.debug(`Found ${resources.size} resources to move from stack: ${holdingStackName}`); + + const resourceMappings: ResourceMapping[] = []; + for (const logicalId of resources.keys()) { + this.debug(`Registering ${logicalId} to move from ${holdingStackName} to ${gen2StackName}`); + resourceMappings.push({ + Source: { StackName: holdingStackName, LogicalResourceId: logicalId }, + Destination: { StackName: gen2StackName, LogicalResourceId: logicalId }, + }); + } - const resourceMappings: ResourceMapping[] = blueprint.mappings.map((m) => ({ - Source: { StackName: holdingStackName, LogicalResourceId: m.Source.LogicalResourceId }, - Destination: { StackName: gen2StackName, LogicalResourceId: m.Source.LogicalResourceId }, - })); + if (resourceMappings.length === 0) { + this.debug(`No resources were registered for move from ${holdingStackName} to ${gen2StackName}. Nothing to do.`); + return []; + } return [ { @@ -139,7 +152,7 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { resource: this.resource, validate: () => undefined, describe: async () => { - const header = `Move ${blueprint.mappings.length} resource(s) from '${extractStackNameFromId( + const header = `Move ${resourceMappings.length} resource(s) from '${extractStackNameFromId( holdingStackName, )}' to '${extractStackNameFromId(gen2StackName)}'`; const table = this.renderMappingTable(resourceMappings); From 72fdab79966f1afcac550d946018f77629e9d7e7 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Mon, 23 Mar 2026 22:36:46 -0400 Subject: [PATCH 48/70] test(cli-internal): fix tests for beforeMove/afterMove signature change Update beforeMove tests to pass gen2StackId string and mock GetTemplateCommand for Gen2 template fetch. Update afterMove tests to pass gen2StackId string. Update plan orchestration tests for new operation counts (no early no-op return). --- Prompt: run all cli package tests and fix what's needed. --- .../workflow/category-refactorer.test.ts | 6 +- .../forward-category-refactorer.test.ts | 64 +++++++------------ .../rollback-category-refactorer.test.ts | 22 +------ 3 files changed, 27 insertions(+), 65 deletions(-) diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/category-refactorer.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/category-refactorer.test.ts index 183cb67225a..76823efd440 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/category-refactorer.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/category-refactorer.test.ts @@ -184,7 +184,7 @@ describe('CategoryRefactorer.plan() orchestration — via StorageS3ForwardRefact }, cfn, ).plan(); - expect(ops).toHaveLength(1); // no-op operation + expect(ops).toHaveLength(3); // updateSource + updateTarget + beforeMove (holding) }); it('produces updateSource → updateTarget → beforeMove → move for forward plan', async () => { @@ -272,7 +272,7 @@ describe('StorageS3RollbackRefactorer.plan() — rollback without holding stack' ).plan(); // Resources already exist in Gen1 target, so rollback produces no-op - expect(ops).toHaveLength(1); // no-op operation + expect(ops).toHaveLength(2); // updateSource + updateTarget only }); }); @@ -364,7 +364,7 @@ describe('Analytics wiring tests', () => { ).plan(); // Resources already exist in Gen1 target, so rollback produces no-op - expect(ops).toHaveLength(1); // no-op operation + expect(ops).toHaveLength(2); // updateSource + updateTarget only }); }); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts index 4478faf4a1b..ac2abae42ee 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts @@ -1,5 +1,4 @@ import { ForwardCategoryRefactorer } from '../../../../../commands/gen2-migration/refactor/workflow/forward-category-refactorer'; -import { RefactorBlueprint } from '../../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; import { AwsClients } from '../../../../../commands/gen2-migration/aws-clients'; import { StackFacade } from '../../../../../commands/gen2-migration/refactor/stack-facade'; import { Cfn } from '../../../../../commands/gen2-migration/refactor/cfn'; @@ -31,13 +30,17 @@ class TestForwardRefactorer extends ForwardCategoryRefactorer { } } -function makeBlueprint(mappings: ResourceMapping[]): RefactorBlueprint { - return { - sourceStackId: 'gen1-stack', - targetStackId: 'gen2-stack', - mappings, - }; -} +const GEN2_TEMPLATE_WITH_BUCKET = JSON.stringify({ + AWSTemplateFormatVersion: '2010-09-09', + Resources: { MyBucket: { Type: 'AWS::S3::Bucket', Properties: {} } }, + Outputs: {}, +}); + +const GEN2_TEMPLATE_NO_BUCKET = JSON.stringify({ + AWSTemplateFormatVersion: '2010-09-09', + Resources: { Lambda: { Type: 'AWS::Lambda::Function', Properties: {} } }, + Outputs: {}, +}); describe('ForwardCategoryRefactorer.beforeMove', () => { let cfnMock: ReturnType; @@ -47,8 +50,12 @@ describe('ForwardCategoryRefactorer.beforeMove', () => { }); afterEach(() => cfnMock.restore()); - it('returns empty operations when no mappings', async () => { + it('returns empty operations when gen2 stack has no matching resources', async () => { + cfnMock.on(GetTemplateCommand).resolves({ TemplateBody: GEN2_TEMPLATE_NO_BUCKET }); + cfnMock.on(DescribeStacksCommand).resolves({ Stacks: [] }); + const clients = new AwsClients({ region: 'us-east-1' }); + (clients as any).cloudFormation = new CloudFormationClient({}); const cfn = new Cfn(new CloudFormationClient({}), noOpLogger()); const refactorer = new TestForwardRefactorer( new StackFacade(clients, 'g1'), @@ -60,13 +67,12 @@ describe('ForwardCategoryRefactorer.beforeMove', () => { { category: 'storage', resourceName: 'test', service: 'S3', key: 'storage:S3' as const }, cfn, ); - const blueprint = makeBlueprint([]); - const operations = await (refactorer as any).beforeMove(blueprint); + const operations = await (refactorer as any).beforeMove('gen2-stack'); expect(operations).toHaveLength(0); }); - it('creates holding stack operation when mappings exist', async () => { + it('creates holding stack operation when gen2 stack has matching resources', async () => { cfnMock.on(DescribeStacksCommand).resolves({ Stacks: [] }); cfnMock.on(CreateStackRefactorCommand).resolves({ StackRefactorId: 'r1' }); cfnMock @@ -74,13 +80,7 @@ describe('ForwardCategoryRefactorer.beforeMove', () => { .resolves({ Status: StackRefactorStatus.CREATE_COMPLETE, ExecutionStatus: StackRefactorExecutionStatus.EXECUTE_COMPLETE }); cfnMock.on(ExecuteStackRefactorCommand).resolves({}); cfnMock.on(DescribeStackResourcesCommand).resolves({ StackResources: [] }); - cfnMock.on(GetTemplateCommand).resolves({ - TemplateBody: JSON.stringify({ - AWSTemplateFormatVersion: '2010-09-09', - Resources: { MyBucket: { Type: 'AWS::S3::Bucket', Properties: {} } }, - Outputs: {}, - }), - }); + cfnMock.on(GetTemplateCommand).resolves({ TemplateBody: GEN2_TEMPLATE_WITH_BUCKET }); const clients = new AwsClients({ region: 'us-east-1' }); (clients as any).cloudFormation = new CloudFormationClient({}); @@ -96,14 +96,7 @@ describe('ForwardCategoryRefactorer.beforeMove', () => { cfn, ); - const blueprint = makeBlueprint([ - { - Source: { StackName: 'gen1-stack', LogicalResourceId: 'S3Bucket' }, - Destination: { StackName: 'gen2-stack', LogicalResourceId: 'MyBucket' }, - }, - ]); - - const operations = await (refactorer as any).beforeMove(blueprint); + const operations = await (refactorer as any).beforeMove('gen2-stack'); expect(operations).toHaveLength(1); expect(await operations[0].describe()).toEqual([expect.stringContaining('holding')]); }); @@ -121,13 +114,7 @@ describe('ForwardCategoryRefactorer.beforeMove', () => { .resolves({ Status: StackRefactorStatus.CREATE_COMPLETE, ExecutionStatus: StackRefactorExecutionStatus.EXECUTE_COMPLETE }); cfnMock.on(ExecuteStackRefactorCommand).resolves({}); cfnMock.on(DescribeStackResourcesCommand).resolves({ StackResources: [] }); - cfnMock.on(GetTemplateCommand).resolves({ - TemplateBody: JSON.stringify({ - AWSTemplateFormatVersion: '2010-09-09', - Resources: { MyBucket: { Type: 'AWS::S3::Bucket', Properties: {} } }, - Outputs: {}, - }), - }); + cfnMock.on(GetTemplateCommand).resolves({ TemplateBody: GEN2_TEMPLATE_WITH_BUCKET }); const clients = new AwsClients({ region: 'us-east-1' }); (clients as any).cloudFormation = new CloudFormationClient({}); @@ -143,14 +130,7 @@ describe('ForwardCategoryRefactorer.beforeMove', () => { cfn, ); - const blueprint = makeBlueprint([ - { - Source: { StackName: 'gen1-stack', LogicalResourceId: 'S3Bucket' }, - Destination: { StackName: 'gen2-stack', LogicalResourceId: 'MyBucket' }, - }, - ]); - - const operations = await (refactorer as any).beforeMove(blueprint); + const operations = await (refactorer as any).beforeMove('gen2-stack'); expect(operations).toHaveLength(2); await operations[0].execute(); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.test.ts index b787b952b5e..658094e11f4 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.test.ts @@ -1,6 +1,5 @@ import { RollbackCategoryRefactorer } from '../../../../../commands/gen2-migration/refactor/workflow/rollback-category-refactorer'; import { CFNResource, CFNTemplate } from '../../../../../commands/gen2-migration/cfn-template'; -import { RefactorBlueprint } from '../../../../../commands/gen2-migration/refactor/workflow/category-refactorer'; import { AwsClients } from '../../../../../commands/gen2-migration/aws-clients'; import { StackFacade } from '../../../../../commands/gen2-migration/refactor/stack-facade'; import { Cfn } from '../../../../../commands/gen2-migration/refactor/cfn'; @@ -36,14 +35,6 @@ class TestRollbackRefactorer extends RollbackCategoryRefactorer { } } -function makeBlueprint(mappings: ResourceMapping[]): RefactorBlueprint { - return { - sourceStackId: 'gen2-auth-stack-id', - targetStackId: 'gen1-stack-id', - mappings, - }; -} - describe('RollbackCategoryRefactorer.afterMove', () => { let cfnMock: ReturnType; @@ -89,14 +80,7 @@ describe('RollbackCategoryRefactorer.afterMove', () => { cfn, ); - const blueprint = makeBlueprint([ - { - Source: { StackName: 'gen2-auth-stack-id', LogicalResourceId: 'MyBucket' }, - Destination: { StackName: 'gen1-stack-id', LogicalResourceId: 'S3Bucket' }, - }, - ]); - - const operations = await (refactorer as any).afterMove(blueprint); + const operations = await (refactorer as any).afterMove('gen2-auth-stack-id'); // 2 operations: update holding with placeholder, refactor back to Gen2 expect(operations).toHaveLength(2); @@ -121,9 +105,7 @@ describe('RollbackCategoryRefactorer.afterMove', () => { cfn, ); - const blueprint = makeBlueprint([]); - - const operations = await (refactorer as any).afterMove(blueprint); + const operations = await (refactorer as any).afterMove('gen2-auth-stack-id'); expect(operations).toHaveLength(0); }); }); From d398c7711222b8d6ff6db6860b5af1475399243d Mon Sep 17 00:00:00 2001 From: Eli Polonsky Date: Tue, 24 Mar 2026 00:11:17 -0400 Subject: [PATCH 49/70] chore: recapture snapshot --- .../fitness-tracker/README.md | 28 - .../email-filter-allowlist.js | 0 .../event.json | 0 .../index.js | 0 .../resource.ts | 8 +- .../amplify/auth/resource.ts | 4 +- .../amplify/backend.ts | 16 +- .../amplify/data/resource.ts | 6 +- ...9371D7-19RM9R3LOXG8I-holding.mappings.json | 12 + ...9RM9R3LOXG8I-holding.source.template.json} | 158 +-- ...9RM9R3LOXG8I-holding.target.template.json} | 36 +- ...179371D7-W7QZVETRVIH-holding.mappings.json | 12 - ...799-auth179371D7-W7QZVETRVIH.mappings.json | 52 - ...799-auth179371D7-W7QZVETRVIH.mappings.json | 12 - ...b-auth179371D7-19RM9R3LOXG8I.mappings.json | 52 + ...9371D7-19RM9R3LOXG8I.source.template.json} | 28 +- ...9371D7-19RM9R3LOXG8I.target.template.json} | 164 +-- ...b-auth179371D7-19RM9R3LOXG8I.mappings.json | 12 + ...9371D7-19RM9R3LOXG8I.source.template.json} | 24 +- ...9371D7-19RM9R3LOXG8I.target.template.json} | 162 +-- ...uth179371D7-19RM9R3LOXG8I.parameters.json} | 0 ...-auth179371D7-19RM9R3LOXG8I.template.json} | 160 +-- ...serPoolGroups-MXIW00J9KSSV.parameters.json | 30 - ...45533f55455-1DWODNQZOZ508.parameters.json} | 34 +- ...5545533f55455-1DWODNQZOZ508.template.json} | 62 +- ...erPoolGroups-19G9G5Q52J3XF.parameters.json | 30 + ...serPoolGroups-19G9G5Q52J3XF.template.json} | 28 +- .../#current-cloud-backend/amplify-meta.json | 464 +++---- .../adminapi-cloudformation-template.json | 18 +- .../build/cloudformation-template.json | 1173 +++++++++-------- .../api/fitnesstracker/build/parameters.json | 6 +- .../build/stacks/ConnectionStack.json | 2 +- .../fitnesstracker/build/stacks/Exercise.json | 18 +- .../api/fitnesstracker/build/stacks/Meal.json | 16 +- .../build/stacks/WorkoutProgram.json | 18 +- .../api/fitnesstracker/cli-inputs.json | 4 +- .../api/fitnesstracker/parameters.json | 2 +- .../nutritionapi-cloudformation-template.json | 18 +- .../auth-trigger-cloudformation-template.json | 14 +- ...545533f55455-cloudformation-template.json} | 20 +- .../build/parameters.json | 16 +- .../cli-inputs.json | 12 +- ...serPoolGroups-cloudformation-template.json | 24 +- .../adminapi-cloudformation-template.json | 18 +- .../build/cloudformation-template.json | 5 +- .../nutritionapi-cloudformation-template.json | 18 +- ...545533f55455-cloudformation-template.json} | 20 +- ...serPoolGroups-cloudformation-template.json | 24 +- .../build/root-cloudformation-stack.json | 276 ++-- .../admin/admin-cloudformation-template.json | 14 +- ...455PreSignup-cloudformation-template.json} | 8 +- .../lognutrition-cloudformation-template.json | 4 +- .../build/root-cloudformation-stack.json | 276 ++-- .../backend-config.json | 32 +- .../admin/admin-cloudformation-template.json | 14 +- .../function/admin/function-parameters.json | 2 +- .../amplify.state | 0 .../custom-policies.json | 0 ...455PreSignup-cloudformation-template.json} | 8 +- .../function-parameters.json | 8 +- .../parameters.json | 4 + .../src/email-filter-allowlist.js | 0 .../src/event.json | 0 .../src/index.js | 0 .../src/package.json | 2 +- .../src/yarn.lock | 0 .../parameters.json | 4 - .../lognutrition-cloudformation-template.json | 4 +- .../amplify/backend/amplify-meta.json | 460 +++---- .../adminapi-cloudformation-template.json | 18 +- .../build/cloudformation-template.json | 1173 +++++++++-------- .../api/fitnesstracker/build/parameters.json | 6 +- .../build/stacks/ConnectionStack.json | 2 +- .../fitnesstracker/build/stacks/Exercise.json | 18 +- .../api/fitnesstracker/build/stacks/Meal.json | 16 +- .../build/stacks/WorkoutProgram.json | 18 +- .../api/fitnesstracker/cli-inputs.json | 4 +- .../api/fitnesstracker/parameters.json | 2 +- .../nutritionapi-cloudformation-template.json | 18 +- .../auth-trigger-cloudformation-template.json | 14 +- ...545533f55455-cloudformation-template.json} | 20 +- .../build/parameters.json | 16 +- .../cli-inputs.json | 12 +- ...serPoolGroups-cloudformation-template.json | 24 +- .../adminapi-cloudformation-template.json | 18 +- .../build/cloudformation-template.json | 5 +- .../nutritionapi-cloudformation-template.json | 18 +- ...545533f55455-cloudformation-template.json} | 20 +- ...serPoolGroups-cloudformation-template.json | 24 +- .../build/root-cloudformation-stack.json | 276 ++-- .../admin/admin-cloudformation-template.json | 14 +- ...455PreSignup-cloudformation-template.json} | 8 +- .../lognutrition-cloudformation-template.json | 4 +- .../build/root-cloudformation-stack.json | 276 ++-- .../amplify/backend/backend-config.json | 32 +- .../admin/admin-cloudformation-template.json | 14 +- .../function/admin/function-parameters.json | 2 +- .../amplify.state | 0 .../custom-policies.json | 0 ...455PreSignup-cloudformation-template.json} | 8 +- .../function-parameters.json | 8 +- .../parameters.json | 4 + .../src/email-filter-allowlist.js | 0 .../src/event.json | 0 .../src/index.js | 0 .../src/package.json | 2 +- .../src/yarn.lock | 0 .../parameters.json | 4 - .../lognutrition-cloudformation-template.json | 4 +- .../amplify-dependent-resources-ref.d.ts | 4 +- .../amplify/team-provider-info.json | 32 +- ...NestedStackA-75CKIPDMA8E7.description.txt} | 0 ...agerNestedStackA-75CKIPDMA8E7.outputs.json | 6 + ...rNestedStackA-75CKIPDMA8E7.parameters.json | 6 + ...erNestedStackA-75CKIPDMA8E7.template.json} | 42 +- ...edStackConne-WNK2ROR3OZN0.description.txt} | 0 ...estedStackConne-WNK2ROR3OZN0.outputs.json} | 0 ...tedStackConne-WNK2ROR3OZN0.parameters.json | 30 + ...stedStackConne-WNK2ROR3OZN0.template.json} | 42 +- ...xerciseNest-1P5371DGLAVUG.description.txt} | 0 ...ackExerciseNest-1P5371DGLAVUG.outputs.json | 22 + ...xerciseNest-1P5371DGLAVUG.parameters.json} | 32 +- ...kExerciseNest-1P5371DGLAVUG.template.json} | 298 ++--- ...NestedStackR-A8J8VTBF4SWH.description.txt} | 0 ...MealNestedStackR-A8J8VTBF4SWH.outputs.json | 18 + ...NestedStackR-A8J8VTBF4SWH.parameters.json} | 32 +- ...alNestedStackR-A8J8VTBF4SWH.template.json} | 278 ++-- ...StackWorkou-162Z9OPH7DXYW.description.txt} | 0 ...tedStackWorkou-162Z9OPH7DXYW.outputs.json} | 8 +- ...StackWorkou-162Z9OPH7DXYW.parameters.json} | 32 +- ...edStackWorkou-162Z9OPH7DXYW.template.json} | 294 ++--- ...uth179371D7-19RM9R3LOXG8I.description.txt} | 0 ...eb-auth179371D7-19RM9R3LOXG8I.outputs.json | 38 + ...uth179371D7-19RM9R3LOXG8I.parameters.json} | 0 ...-auth179371D7-19RM9R3LOXG8I.template.json} | 102 +- ...ata7552DF31-1601DAFBL31V0.description.txt} | 0 ...eb-data7552DF31-1601DAFBL31V0.outputs.json | 26 + ...ata7552DF31-1601DAFBL31V0.parameters.json} | 24 +- ...-data7552DF31-1601DAFBL31V0.template.json} | 216 +-- ...api43EA27F6-156QTXWFLKBBU.description.txt} | 0 ...dminapi43EA27F6-156QTXWFLKBBU.outputs.json | 14 + ...napi43EA27F6-156QTXWFLKBBU.parameters.json | 14 + ...inapi43EA27F6-156QTXWFLKBBU.template.json} | 80 +- ...api72914ECD-13FDREQON6AQG.description.txt} | 0 ...tionapi72914ECD-13FDREQON6AQG.outputs.json | 14 + ...napi72914ECD-13FDREQON6AQG.parameters.json | 14 + ...onapi72914ECD-13FDREQON6AQG.template.json} | 92 +- ...en2main-branch-400746baeb.description.txt} | 0 ...r-gen2main-branch-400746baeb.outputs.json} | 20 +- ...en2main-branch-400746baeb.parameters.json} | 0 ...-gen2main-branch-400746baeb.template.json} | 116 +- ...agerNestedStackA-NPJK8GP5TJ4A.outputs.json | 6 - ...rNestedStackA-NPJK8GP5TJ4A.parameters.json | 6 - ...edStackConne-1Q5Y2AFMDU94J.parameters.json | 30 - ...ackExerciseNest-1FIMJDNV42OQ7.outputs.json | 22 - ...ealNestedStackR-1T4FU8CXY0GK6.outputs.json | 18 - ...d799-auth179371D7-W7QZVETRVIH.outputs.json | 38 - ...799-data7552DF31-11R0N9NYGZMM.outputs.json | 26 - ...dminapi43EA27F6-1RS06T9AL8ZH6.outputs.json | 14 - ...napi43EA27F6-1RS06T9AL8ZH6.parameters.json | 14 - ...tionapi72914ECD-1738NNTUFA9K8.outputs.json | 14 - ...napi72914ECD-1738NNTUFA9K8.parameters.json | 14 - ...pifitnesstracker-8NP6OMMBJJBQ.outputs.json | 20 - ...2e7c9ceb2e7c-13Y9822PMAATD.description.txt | 1 - ...eb2e7c9ceb2e7c-13Y9822PMAATD.template.json | 480 ------- ...thuserPoolGroups-MXIW00J9KSSV.outputs.json | 6 - ...serPoolGroups-MXIW00J9KSSV.parameters.json | 30 - ...eb2e7cPreSignup-3S3GBRYFYV12.template.json | 242 ---- ...-fitnesstracker-main-6fc9a.description.txt | 1 - ...-fitnesstracker-main-6fc9a.parameters.json | 14 - ...ayAuthStack-1PX292PE83STS.description.txt} | 0 ...tewayAuthStack-1PX292PE83STS.outputs.json} | 0 ...ayAuthStack-1PX292PE83STS.parameters.json} | 8 +- ...ewayAuthStack-1PX292PE83STS.template.json} | 0 ...mLambdaStack-TT7MSI2O15CI.description.txt} | 0 ...stomLambdaStack-TT7MSI2O15CI.outputs.json} | 0 ...mLambdaStack-TT7MSI2O15CI.parameters.json} | 20 +- ...tomLambdaStack-TT7MSI2O15CI.template.json} | 14 +- ...-apiadminapi-NIM0OPDFSKJR.description.txt} | 0 ...537-apiadminapi-NIM0OPDFSKJR.outputs.json} | 4 +- ...-apiadminapi-NIM0OPDFSKJR.parameters.json} | 6 +- ...37-apiadminapi-NIM0OPDFSKJR.template.json} | 16 +- ...nectionStack-96IMUMC3YX9X.description.txt} | 0 ...ConnectionStack-96IMUMC3YX9X.outputs.json} | 0 ...nectionStack-96IMUMC3YX9X.parameters.json} | 8 +- ...onnectionStack-96IMUMC3YX9X.template.json} | 2 +- ...sourcesjson-1FVS02E9NW5PX.description.txt} | 0 ...mResourcesjson-1FVS02E9NW5PX.outputs.json} | 0 ...sourcesjson-1FVS02E9NW5PX.parameters.json} | 6 +- ...Resourcesjson-1FVS02E9NW5PX.template.json} | 0 ...SYX-Exercise-FLH6MX715G6M.description.txt} | 0 ...S45SYX-Exercise-FLH6MX715G6M.outputs.json} | 12 +- ...SYX-Exercise-FLH6MX715G6M.parameters.json} | 20 +- ...45SYX-Exercise-FLH6MX715G6M.template.json} | 18 +- ...9S45SYX-Meal-PHGUK3IXO0QL.description.txt} | 0 ...NTH9S45SYX-Meal-PHGUK3IXO0QL.outputs.json} | 10 +- ...9S45SYX-Meal-PHGUK3IXO0QL.parameters.json} | 14 +- ...TH9S45SYX-Meal-PHGUK3IXO0QL.template.json} | 16 +- ...rkoutProgram-DSQSG720758E.description.txt} | 0 ...-WorkoutProgram-DSQSG720758E.outputs.json} | 24 +- ...rkoutProgram-DSQSG720758E.parameters.json} | 6 +- ...WorkoutProgram-DSQSG720758E.template.json} | 18 +- ...nesstracker-103NTH9S45SYX.description.txt} | 0 ...ifitnesstracker-103NTH9S45SYX.outputs.json | 20 + ...nesstracker-103NTH9S45SYX.parameters.json} | 6 +- ...itnesstracker-103NTH9S45SYX.template.json} | 2 +- ...nutritionapi-HLNAE81TRC4B.description.txt} | 0 ...apinutritionapi-HLNAE81TRC4B.outputs.json} | 4 +- ...nutritionapi-HLNAE81TRC4B.parameters.json} | 10 +- ...pinutritionapi-HLNAE81TRC4B.template.json} | 16 +- ...545533f55455-1DWODNQZOZ508.description.txt | 1 + ...f5545533f55455-1DWODNQZOZ508.outputs.json} | 14 +- ...45533f55455-1DWODNQZOZ508.parameters.json} | 34 +- ...f5545533f55455-1DWODNQZOZ508.template.json | 480 +++++++ ...erPoolGroups-19G9G5Q52J3XF.description.txt | 1 + ...huserPoolGroups-19G9G5Q52J3XF.outputs.json | 6 + ...erPoolGroups-19G9G5Q52J3XF.parameters.json | 30 + ...serPoolGroups-19G9G5Q52J3XF.template.json} | 24 +- ...nctionadmin-1XHD95ED0WDDQ.description.txt} | 0 ...-functionadmin-1XHD95ED0WDDQ.outputs.json} | 4 +- ...nctionadmin-1XHD95ED0WDDQ.parameters.json} | 8 +- ...functionadmin-1XHD95ED0WDDQ.template.json} | 14 +- ...55PreSignup-1NSDWT8P6Z7SU.description.txt} | 0 ...55455PreSignup-1NSDWT8P6Z7SU.outputs.json} | 8 +- ...55PreSignup-1NSDWT8P6Z7SU.parameters.json} | 6 +- ...55455PreSignup-1NSDWT8P6Z7SU.template.json | 242 ++++ ...ognutrition-13HP6USYKZ4YI.description.txt} | 0 ...onlognutrition-13HP6USYKZ4YI.outputs.json} | 4 +- ...ognutrition-13HP6USYKZ4YI.parameters.json} | 4 +- ...nlognutrition-13HP6USYKZ4YI.template.json} | 4 +- ...fitnesstracker-main-a0537.description.txt} | 0 ...fy-fitnesstracker-main-a0537.outputs.json} | 22 +- ...-fitnesstracker-main-a0537.parameters.json | 14 + ...y-fitnesstracker-main-a0537.template.json} | 108 +- 234 files changed, 5242 insertions(+), 5266 deletions(-) rename amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/email-filter-allowlist.js (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/event.json (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/index.js (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/resource.ts (74%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.mappings.json rename amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/{refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.source.template.json => refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.source.template.json} (85%) rename amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/{refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.target.template.json => refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.target.template.json} (87%) delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.mappings.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.mappings.json rename amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/{refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.source.template.json => refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.source.template.json} (81%) rename amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/{refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json => refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.target.template.json} (85%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.mappings.json rename amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/{refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.source.template.json => refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.source.template.json} (63%) rename amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/{refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json => refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.target.template.json} (85%) rename amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/{update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.parameters.json => update.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.parameters.json} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/{update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json => update.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.template.json} (86%) delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/{update.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.parameters.json => update.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.parameters.json} (83%) rename amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/{update.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.template.json => update.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.template.json} (81%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/{update.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.template.json => update.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.template.json} (62%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/{fitnesstracker9ceb2e7c9ceb2e7c => fitnesstracker33f5545533f55455}/build/auth-trigger-cloudformation-template.json (94%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/{backend/awscloudformation/build/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json => #current-cloud-backend/auth/fitnesstracker33f5545533f55455/build/fitnesstracker33f5545533f55455-cloudformation-template.json} (93%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/{backend/auth/fitnesstracker9ceb2e7c9ceb2e7c => #current-cloud-backend/auth/fitnesstracker33f5545533f55455}/build/parameters.json (79%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/{fitnesstracker9ceb2e7c9ceb2e7c => fitnesstracker33f5545533f55455}/cli-inputs.json (80%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/{fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json => fitnesstracker33f5545533f55455/build/fitnesstracker33f5545533f55455-cloudformation-template.json} (93%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/{backend/awscloudformation/build/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json => #current-cloud-backend/awscloudformation/build/function/fitnesstracker33f5545533f55455PreSignup/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json} (95%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/amplify.state (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/custom-policies.json (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/{backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json => #current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json} (95%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/function-parameters.json (61%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/src/email-filter-allowlist.js (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/src/event.json (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/src/index.js (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/src/package.json (78%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/src/yarn.lock (100%) delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/{fitnesstracker9ceb2e7c9ceb2e7c => fitnesstracker33f5545533f55455}/build/auth-trigger-cloudformation-template.json (94%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/{#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json => backend/auth/fitnesstracker33f5545533f55455/build/fitnesstracker33f5545533f55455-cloudformation-template.json} (93%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/{#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c => backend/auth/fitnesstracker33f5545533f55455}/build/parameters.json (79%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/{fitnesstracker9ceb2e7c9ceb2e7c => fitnesstracker33f5545533f55455}/cli-inputs.json (80%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/{auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json => awscloudformation/build/auth/fitnesstracker33f5545533f55455/build/fitnesstracker33f5545533f55455-cloudformation-template.json} (93%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/{#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json => backend/awscloudformation/build/function/fitnesstracker33f5545533f55455PreSignup/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json} (95%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/amplify.state (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/custom-policies.json (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/{#current-cloud-backend/awscloudformation/build/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json => backend/function/fitnesstracker33f5545533f55455PreSignup/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json} (95%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/function-parameters.json (61%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/src/email-filter-allowlist.js (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/src/event.json (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/src/index.js (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/src/package.json (78%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/{fitnesstracker9ceb2e7c9ceb2e7cPreSignup => fitnesstracker33f5545533f55455PreSignup}/src/yarn.lock (100%) delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.description.txt => amplify-fitnesstracker-gen2main-branch-4007-amplifyDataAmplifyTableManagerNestedStackA-75CKIPDMA8E7.description.txt} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataAmplifyTableManagerNestedStackA-75CKIPDMA8E7.outputs.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataAmplifyTableManagerNestedStackA-75CKIPDMA8E7.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.template.json => amplify-fitnesstracker-gen2main-branch-4007-amplifyDataAmplifyTableManagerNestedStackA-75CKIPDMA8E7.template.json} (93%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.description.txt => amplify-fitnesstracker-gen2main-branch-4007-amplifyDataConnectionStackNestedStackConne-WNK2ROR3OZN0.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.outputs.json => amplify-fitnesstracker-gen2main-branch-4007-amplifyDataConnectionStackNestedStackConne-WNK2ROR3OZN0.outputs.json} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataConnectionStackNestedStackConne-WNK2ROR3OZN0.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.template.json => amplify-fitnesstracker-gen2main-branch-4007-amplifyDataConnectionStackNestedStackConne-WNK2ROR3OZN0.template.json} (81%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.description.txt => amplify-fitnesstracker-gen2main-branch-4007-amplifyDataExerciseNestedStackExerciseNest-1P5371DGLAVUG.description.txt} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataExerciseNestedStackExerciseNest-1P5371DGLAVUG.outputs.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.parameters.json => amplify-fitnesstracker-gen2main-branch-4007-amplifyDataExerciseNestedStackExerciseNest-1P5371DGLAVUG.parameters.json} (51%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.template.json => amplify-fitnesstracker-gen2main-branch-4007-amplifyDataExerciseNestedStackExerciseNest-1P5371DGLAVUG.template.json} (85%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.description.txt => amplify-fitnesstracker-gen2main-branch-4007-amplifyDataMealNestedStackMealNestedStackR-A8J8VTBF4SWH.description.txt} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataMealNestedStackMealNestedStackR-A8J8VTBF4SWH.outputs.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.parameters.json => amplify-fitnesstracker-gen2main-branch-4007-amplifyDataMealNestedStackMealNestedStackR-A8J8VTBF4SWH.parameters.json} (51%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.template.json => amplify-fitnesstracker-gen2main-branch-4007-amplifyDataMealNestedStackMealNestedStackR-A8J8VTBF4SWH.template.json} (85%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.description.txt => amplify-fitnesstracker-gen2main-branch-4007-amplifyDataWorkoutProgramNestedStackWorkou-162Z9OPH7DXYW.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.outputs.json => amplify-fitnesstracker-gen2main-branch-4007-amplifyDataWorkoutProgramNestedStackWorkou-162Z9OPH7DXYW.outputs.json} (54%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.parameters.json => amplify-fitnesstracker-gen2main-branch-4007-amplifyDataWorkoutProgramNestedStackWorkou-162Z9OPH7DXYW.parameters.json} (51%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.template.json => amplify-fitnesstracker-gen2main-branch-4007-amplifyDataWorkoutProgramNestedStackWorkou-162Z9OPH7DXYW.template.json} (85%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.description.txt => amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.description.txt} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.outputs.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.parameters.json => amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.parameters.json} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json => amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.template.json} (90%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.description.txt => amplify-fitnesstracker-gen2main-branch-400746baeb-data7552DF31-1601DAFBL31V0.description.txt} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-data7552DF31-1601DAFBL31V0.outputs.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.parameters.json => amplify-fitnesstracker-gen2main-branch-400746baeb-data7552DF31-1601DAFBL31V0.parameters.json} (52%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.template.json => amplify-fitnesstracker-gen2main-branch-400746baeb-data7552DF31-1601DAFBL31V0.template.json} (80%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.description.txt => amplify-fitnesstracker-gen2main-branch-400746baeb-restapistackadminapi43EA27F6-156QTXWFLKBBU.description.txt} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistackadminapi43EA27F6-156QTXWFLKBBU.outputs.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistackadminapi43EA27F6-156QTXWFLKBBU.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.template.json => amplify-fitnesstracker-gen2main-branch-400746baeb-restapistackadminapi43EA27F6-156QTXWFLKBBU.template.json} (86%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.description.txt => amplify-fitnesstracker-gen2main-branch-400746baeb-restapistacknutritionapi72914ECD-13FDREQON6AQG.description.txt} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistacknutritionapi72914ECD-13FDREQON6AQG.outputs.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistacknutritionapi72914ECD-13FDREQON6AQG.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.template.json => amplify-fitnesstracker-gen2main-branch-400746baeb-restapistacknutritionapi72914ECD-13FDREQON6AQG.template.json} (89%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a09655d799.description.txt => amplify-fitnesstracker-gen2main-branch-400746baeb.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a09655d799.outputs.json => amplify-fitnesstracker-gen2main-branch-400746baeb.outputs.json} (79%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a09655d799.parameters.json => amplify-fitnesstracker-gen2main-branch-400746baeb.parameters.json} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-gen2main-branch-a09655d799.template.json => amplify-fitnesstracker-gen2main-branch-400746baeb.template.json} (81%) delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.parameters.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.parameters.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.parameters.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.parameters.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.description.txt delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.template.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.outputs.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.parameters.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.template.json delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.description.txt delete mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.description.txt => amplify-fitnesstracker-main-a0537-APIGatewayAuthStack-1PX292PE83STS.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.outputs.json => amplify-fitnesstracker-main-a0537-APIGatewayAuthStack-1PX292PE83STS.outputs.json} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.parameters.json => amplify-fitnesstracker-main-a0537-APIGatewayAuthStack-1PX292PE83STS.parameters.json} (56%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.template.json => amplify-fitnesstracker-main-a0537-APIGatewayAuthStack-1PX292PE83STS.template.json} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.description.txt => amplify-fitnesstracker-main-a0537-AuthTriggerCustomLambdaStack-TT7MSI2O15CI.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.outputs.json => amplify-fitnesstracker-main-a0537-AuthTriggerCustomLambdaStack-TT7MSI2O15CI.outputs.json} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.parameters.json => amplify-fitnesstracker-main-a0537-AuthTriggerCustomLambdaStack-TT7MSI2O15CI.parameters.json} (50%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.template.json => amplify-fitnesstracker-main-a0537-AuthTriggerCustomLambdaStack-TT7MSI2O15CI.template.json} (94%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.description.txt => amplify-fitnesstracker-main-a0537-apiadminapi-NIM0OPDFSKJR.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.outputs.json => amplify-fitnesstracker-main-a0537-apiadminapi-NIM0OPDFSKJR.outputs.json} (75%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.parameters.json => amplify-fitnesstracker-main-a0537-apiadminapi-NIM0OPDFSKJR.parameters.json} (76%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.template.json => amplify-fitnesstracker-main-a0537-apiadminapi-NIM0OPDFSKJR.template.json} (97%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.description.txt => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-ConnectionStack-96IMUMC3YX9X.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.outputs.json => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-ConnectionStack-96IMUMC3YX9X.outputs.json} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.parameters.json => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-ConnectionStack-96IMUMC3YX9X.parameters.json} (75%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.template.json => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-ConnectionStack-96IMUMC3YX9X.template.json} (98%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.description.txt => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-CustomResourcesjson-1FVS02E9NW5PX.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.outputs.json => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-CustomResourcesjson-1FVS02E9NW5PX.outputs.json} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.parameters.json => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-CustomResourcesjson-1FVS02E9NW5PX.parameters.json} (60%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.template.json => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-CustomResourcesjson-1FVS02E9NW5PX.template.json} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.description.txt => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Exercise-FLH6MX715G6M.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.outputs.json => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Exercise-FLH6MX715G6M.outputs.json} (62%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.parameters.json => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Exercise-FLH6MX715G6M.parameters.json} (83%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.template.json => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Exercise-FLH6MX715G6M.template.json} (98%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.description.txt => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Meal-PHGUK3IXO0QL.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.outputs.json => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Meal-PHGUK3IXO0QL.outputs.json} (57%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.parameters.json => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Meal-PHGUK3IXO0QL.parameters.json} (83%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.template.json => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Meal-PHGUK3IXO0QL.template.json} (98%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.description.txt => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-WorkoutProgram-DSQSG720758E.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.outputs.json => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-WorkoutProgram-DSQSG720758E.outputs.json} (72%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.parameters.json => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-WorkoutProgram-DSQSG720758E.parameters.json} (82%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.template.json => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-WorkoutProgram-DSQSG720758E.template.json} (98%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.description.txt => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX.description.txt} (100%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX.outputs.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.parameters.json => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX.parameters.json} (79%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.template.json => amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX.template.json} (99%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.description.txt => amplify-fitnesstracker-main-a0537-apinutritionapi-HLNAE81TRC4B.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.outputs.json => amplify-fitnesstracker-main-a0537-apinutritionapi-HLNAE81TRC4B.outputs.json} (75%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.parameters.json => amplify-fitnesstracker-main-a0537-apinutritionapi-HLNAE81TRC4B.parameters.json} (77%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.template.json => amplify-fitnesstracker-main-a0537-apinutritionapi-HLNAE81TRC4B.template.json} (98%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.description.txt rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.outputs.json => amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.outputs.json} (62%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.parameters.json => amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.parameters.json} (83%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.template.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.description.txt create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.outputs.json create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.template.json => amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.template.json} (69%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.description.txt => amplify-fitnesstracker-main-a0537-functionadmin-1XHD95ED0WDDQ.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.outputs.json => amplify-fitnesstracker-main-a0537-functionadmin-1XHD95ED0WDDQ.outputs.json} (82%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.parameters.json => amplify-fitnesstracker-main-a0537-functionadmin-1XHD95ED0WDDQ.parameters.json} (52%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.template.json => amplify-fitnesstracker-main-a0537-functionadmin-1XHD95ED0WDDQ.template.json} (93%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.description.txt => amplify-fitnesstracker-main-a0537-functionfitnesstracker33f5545533f55455PreSignup-1NSDWT8P6Z7SU.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.outputs.json => amplify-fitnesstracker-main-a0537-functionfitnesstracker33f5545533f55455PreSignup-1NSDWT8P6Z7SU.outputs.json} (63%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.parameters.json => amplify-fitnesstracker-main-a0537-functionfitnesstracker33f5545533f55455PreSignup-1NSDWT8P6Z7SU.parameters.json} (77%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionfitnesstracker33f5545533f55455PreSignup-1NSDWT8P6Z7SU.template.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.description.txt => amplify-fitnesstracker-main-a0537-functionlognutrition-13HP6USYKZ4YI.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.outputs.json => amplify-fitnesstracker-main-a0537-functionlognutrition-13HP6USYKZ4YI.outputs.json} (83%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.parameters.json => amplify-fitnesstracker-main-a0537-functionlognutrition-13HP6USYKZ4YI.parameters.json} (77%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.template.json => amplify-fitnesstracker-main-a0537-functionlognutrition-13HP6USYKZ4YI.template.json} (98%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.description.txt => amplify-fitnesstracker-main-a0537.description.txt} (100%) rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a.outputs.json => amplify-fitnesstracker-main-a0537.outputs.json} (56%) create mode 100644 amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537.parameters.json rename amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/{amplify-fitnesstracker-main-6fc9a.template.json => amplify-fitnesstracker-main-a0537.template.json} (85%) diff --git a/amplify-migration-apps/fitness-tracker/README.md b/amplify-migration-apps/fitness-tracker/README.md index bb575803389..569b1cfd9de 100644 --- a/amplify-migration-apps/fitness-tracker/README.md +++ b/amplify-migration-apps/fitness-tracker/README.md @@ -300,30 +300,6 @@ npx amplify gen2-migration generate + branchName: "gen2-main" ``` -**Edit in `./amplify/backend.ts`:** - -Navigate to the Amplify Console to find the `` and `` on the ApiGateway AWS Console. For example: - -![](./images/gen1-rest-api-id.png) -![](./images/gen1-root-resource-id.png) - -```diff -+ const gen1RestApi = RestApi.fromRestApiAttributes(restApiStack, "Gen1RestApi", { -+ restApiId: '', -+ rootResourceId: '', -+ }) -+ const gen1RestApiPolicy = new Policy(restApiStack, "Gen1RestApiPolicy", { -+ statements: [ -+ new PolicyStatement({ -+ actions: ["execute-api:Invoke"], -+ resources: [`${gen1RestApi.arnForExecuteApi("*", "/*")}`] -+ }) -+ ] -+ }); -+ backend.auth.resources.authenticatedUserIamRole.attachInlinePolicy(gen1RestApiPolicy); -``` - - **Edit in `./amplify/function/lognutrition/resource.ts`:** ```diff @@ -489,10 +465,6 @@ Now connect the `gen2-main` branch to the hosting service: ![](./images/add-gen2-main-branch.png) ![](./images/deploying-gen2-main-branch.png) -> Note: REST API currently cannot be accessed via the Gen2 app due to some CORS misconfiguration that is -unrelated to the automatic migration process. It is likely a problem with the manually written REST API definitions -and needs to be addressed for the app to fully work. - Wait for the deployment to finish successfully. Next, locate the root stack of the Gen2 branch: ![](./images/find-gen2-stack.png) diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/email-filter-allowlist.js b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker33f5545533f55455PreSignup/email-filter-allowlist.js similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/email-filter-allowlist.js rename to amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker33f5545533f55455PreSignup/email-filter-allowlist.js diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/event.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker33f5545533f55455PreSignup/event.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/event.json rename to amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker33f5545533f55455PreSignup/event.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/index.js b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker33f5545533f55455PreSignup/index.js similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/index.js rename to amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker33f5545533f55455PreSignup/index.js diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/resource.ts b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker33f5545533f55455PreSignup/resource.ts similarity index 74% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/resource.ts rename to amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker33f5545533f55455PreSignup/resource.ts index 70e84323b8a..718f48a6ae7 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/resource.ts +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker33f5545533f55455PreSignup/resource.ts @@ -2,17 +2,17 @@ import { defineFunction } from '@aws-amplify/backend'; const branchName = process.env.AWS_BRANCH ?? 'sandbox'; -export const fitnesstracker9ceb2e7c9ceb2e7cPreSignup = defineFunction({ +export const fitnesstracker33f5545533f55455PreSignup = defineFunction({ entry: './index.js', - name: `fitnesstracker9ceb2e7c9ceb2e7cPreSignup-${branchName}`, + name: `fitnesstracker33f5545533f55455PreSignup-${branchName}`, timeoutSeconds: 25, memoryMB: 128, environment: { - ENV: `${branchName}`, MODULES: 'email-filter-allowlist', - REGION: 'us-east-1', DOMAINALLOWLIST: 'amazon.com', DOMAINBLACKLIST: '', + ENV: `${branchName}`, + REGION: 'us-east-1', }, runtime: 22, }); diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/resource.ts b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/resource.ts index d8023f79ff8..49dafe755f2 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/resource.ts +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/resource.ts @@ -1,5 +1,5 @@ import { defineAuth } from '@aws-amplify/backend'; -import { fitnesstracker9ceb2e7c9ceb2e7cPreSignup } from './fitnesstracker9ceb2e7c9ceb2e7cPreSignup/resource'; +import { fitnesstracker33f5545533f55455PreSignup } from './fitnesstracker33f5545533f55455PreSignup/resource'; import { admin } from '../function/admin/resource'; export const auth = defineAuth({ @@ -17,7 +17,7 @@ export const auth = defineAuth({ }, groups: ['Admin'], triggers: { - preSignUp: fitnesstracker9ceb2e7c9ceb2e7cPreSignup, + preSignUp: fitnesstracker33f5545533f55455PreSignup, }, multifactor: { mode: 'OFF', diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/backend.ts b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/backend.ts index d38165f9a65..313c6c83f23 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/backend.ts +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/backend.ts @@ -1,7 +1,7 @@ import { auth } from './auth/resource'; import { data } from './data/resource'; import { admin } from './function/admin/resource'; -import { fitnesstracker9ceb2e7c9ceb2e7cPreSignup } from './auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/resource'; +import { fitnesstracker33f5545533f55455PreSignup } from './auth/fitnesstracker33f5545533f55455PreSignup/resource'; import { lognutrition } from './function/lognutrition/resource'; import { RestApi, @@ -18,7 +18,7 @@ const backend = defineBackend({ auth, data, admin, - fitnesstracker9ceb2e7c9ceb2e7cPreSignup, + fitnesstracker33f5545533f55455PreSignup, lognutrition, }); const branchName = process.env.AWS_BRANCH ?? 'sandbox'; @@ -51,8 +51,8 @@ const gen1adminapiApi = RestApi.fromRestApiAttributes( adminapiStack, 'Gen1adminapiApi', { - restApiId: 'bbk7dedp01', - rootResourceId: 'bbk7dedp01-root', + restApiId: 'oxq86r59h6', + rootResourceId: 'gzkugf7nca', } ); const gen1adminapiPolicy = new Policy(adminapiStack, 'Gen1adminapiPolicy', { @@ -151,8 +151,8 @@ const gen1nutritionapiApi = RestApi.fromRestApiAttributes( nutritionapiStack, 'Gen1nutritionapiApi', { - restApiId: 'ekto8iln0h', - rootResourceId: 'ekto8iln0h-root', + restApiId: 'hmydcaubcb', + rootResourceId: '038x4g299a', } ); const gen1nutritionapiPolicy = new Policy( @@ -276,10 +276,10 @@ userPool.addClient('NativeAppClient', { }); backend.admin.resources.cfnResources.cfnFunction.functionName = `admin-${branchName}`; backend.admin.addEnvironment( - 'AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID', + 'AUTH_FITNESSTRACKER33F5545533F55455_USERPOOLID', backend.auth.resources.userPool.userPoolId ); -backend.fitnesstracker9ceb2e7c9ceb2e7cPreSignup.resources.cfnResources.cfnFunction.functionName = `fitnesstracker9ceb2e7c9ceb2e7cPreSignup-${branchName}`; +backend.fitnesstracker33f5545533f55455PreSignup.resources.cfnResources.cfnFunction.functionName = `fitnesstracker33f5545533f55455PreSignup-${branchName}`; backend.lognutrition.resources.cfnResources.cfnFunction.functionName = `lognutrition-${branchName}`; backend.lognutrition.addEnvironment( 'API_FITNESSTRACKER_GRAPHQLAPIIDOUTPUT', diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/data/resource.ts b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/data/resource.ts index 395962b74db..26962a0c071 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/data/resource.ts +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/data/resource.ts @@ -38,9 +38,9 @@ export const data = defineData({ //The "branchname" variable needs to be the same as your deployment branch if you want to reuse your Gen1 app tables branchName: 'main', modelNameToTableNameMapping: { - WorkoutProgram: 'WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main', - Exercise: 'Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main', - Meal: 'Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main', + WorkoutProgram: 'WorkoutProgram-jzwb5p2vcbd2ldlnlxokgjcjby-main', + Exercise: 'Exercise-jzwb5p2vcbd2ldlnlxokgjcjby-main', + Meal: 'Meal-jzwb5p2vcbd2ldlnlxokgjcjby-main', }, }, ], diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.mappings.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.mappings.json new file mode 100644 index 00000000000..da95a3f5dc4 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.mappings.json @@ -0,0 +1,12 @@ +[ + { + "Source": { + "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I", + "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04" + }, + "Destination": { + "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding", + "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04" + } + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.source.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.source.template.json similarity index 85% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.source.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.source.template.json index d8eba261f95..cb8aa896b71 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.source.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.source.template.json @@ -5,12 +5,12 @@ "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", - "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", + "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker33f5545533f55455PreSignup-gen2-main", "Principal": "cognito-idp.amazonaws.com", - "SourceArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "SourceArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/PreSignUpCognito" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPool/PreSignUpCognito" } }, "amplifyAuthauthenticatedUserRoleD8DA3689": { @@ -22,7 +22,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "cognito-identity.amazonaws.com:aud": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -60,7 +60,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/authenticatedUserRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/authenticatedUserRole/Resource" } }, "amplifyAuthunauthenticatedUserRole2B524D9E": { @@ -72,7 +72,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "cognito-identity.amazonaws.com:aud": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -110,7 +110,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/unauthenticatedUserRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/unauthenticatedUserRole/Resource" } }, "amplifyAuthAdminGroupRole766878DC": { @@ -122,7 +122,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "cognito-identity.amazonaws.com:aud": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -160,10 +160,10 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroupRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/AdminGroupRole/Resource" } }, - "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE": { + "fitnesstracker33f5545533f55455PreSignupgen2mainlambdaServiceRole713FCE90": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { @@ -207,7 +207,7 @@ }, { "Key": "amplify:friendly-name", - "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + "Value": "fitnesstracker33f5545533f55455PreSignup-gen2-main" }, { "Key": "created-by", @@ -216,10 +216,10 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/fitnesstracker33f5545533f55455PreSignup-gen2-main-lambda/ServiceRole/Resource" } }, - "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambda9B996C42": { + "fitnesstracker33f5545533f55455PreSignupgen2mainlambda1F6BAF02": { "Type": "AWS::Lambda::Function", "Properties": { "Architectures": [ @@ -229,7 +229,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371.zip" + "S3Key": "9f9c01e67674891c2af7783b0075317068ffc260976375cef1a2fb293d54b4f7.zip" }, "Environment": { "Variables": { @@ -244,10 +244,10 @@ "EphemeralStorage": { "Size": 512 }, - "FunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", + "FunctionName": "fitnesstracker33f5545533f55455PreSignup-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-fitnesstracker33f5545533f-4xULtIdI9U7p", "Runtime": "nodejs22.x", "Tags": [ { @@ -264,7 +264,7 @@ }, { "Key": "amplify:friendly-name", - "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + "Value": "fitnesstracker33f5545533f55455PreSignup-gen2-main" }, { "Key": "created-by", @@ -274,8 +274,8 @@ "Timeout": 25 }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/Resource", - "aws:asset:path": "asset.760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/fitnesstracker33f5545533f55455PreSignup-gen2-main-lambda/Resource", + "aws:asset:path": "asset.9f9c01e67674891c2af7783b0075317068ffc260976375cef1a2fb293d54b4f7", "aws:asset:is-bundled": true, "aws:asset:property": "Code" } @@ -283,7 +283,7 @@ "AMPLIFYAUTHUSERPOOLIDParameterCC466CA3": { "Type": "AWS::SSM::Parameter", "Properties": { - "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID", + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_AUTH_USERPOOL_ID", "Tags": { "amplify:app-id": "fitnesstracker", "amplify:branch-name": "gen2-main", @@ -291,10 +291,10 @@ "created-by": "amplify" }, "Type": "String", - "Value": "us-east-1_mQEsDQ1lC" + "Value": "us-east-1_KGveHFLxc" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/AMPLIFY_AUTH_USERPOOL_IDParameter/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/AMPLIFY_AUTH_USERPOOL_IDParameter/Resource" } }, "admingen2mainlambdaServiceRole439B1792": { @@ -350,7 +350,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/admin-gen2-main-lambda/ServiceRole/Resource" } }, "admingen2mainlambdaServiceRoleDefaultPolicy0F640A9C": { @@ -377,7 +377,7 @@ { "Ref": "AWS::AccountId" }, - ":parameter/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID" + ":parameter/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_AUTH_USERPOOL_ID" ] ] } @@ -393,7 +393,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/admin-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" } }, "admingen2mainlambdaECF7211C": { @@ -406,15 +406,15 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a.zip" + "S3Key": "b92a661741ad73057aa08e5c49f164a180c0bb1ad1d4be9740e7154f2b916a62.zip" }, "Environment": { "Variables": { "ENV": "gen2-main", "REGION": "us-east-1", - "AMPLIFY_SSM_ENV_CONFIG": "{\"AMPLIFY_AUTH_USERPOOL_ID\":{\"path\":\"/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID\"}}", + "AMPLIFY_SSM_ENV_CONFIG": "{\"AMPLIFY_AUTH_USERPOOL_ID\":{\"path\":\"/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_AUTH_USERPOOL_ID\"}}", "AMPLIFY_AUTH_USERPOOL_ID": "", - "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": "us-east-1_mQEsDQ1lC" + "AUTH_FITNESSTRACKER33F5545533F55455_USERPOOLID": "us-east-1_KGveHFLxc" } }, "EphemeralStorage": { @@ -423,7 +423,7 @@ "FunctionName": "admin-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/admingen2mainlambdaServiceRole439B1792", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-admingen2mainlambdaServic-BeMjaVS7HTg0", "Runtime": "nodejs22.x", "Tags": [ { @@ -450,8 +450,8 @@ "Timeout": 25 }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/Resource", - "aws:asset:path": "asset.4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/admin-gen2-main-lambda/Resource", + "aws:asset:path": "asset.b92a661741ad73057aa08e5c49f164a180c0bb1ad1d4be9740e7154f2b916a62", "aws:asset:is-bundled": true, "aws:asset:property": "Code" } @@ -464,7 +464,7 @@ { "Action": "cognito-idp:AdminGetDevice", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -477,7 +477,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess1/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess1/Resource" } }, "userpoolAccess268F187DB": { @@ -488,7 +488,7 @@ { "Action": "cognito-idp:AdminGetUser", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -501,7 +501,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess2/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess2/Resource" } }, "userpoolAccess3956C62F8": { @@ -512,7 +512,7 @@ { "Action": "cognito-idp:AdminListDevices", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -525,7 +525,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess3/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess3/Resource" } }, "userpoolAccess4A84025C3": { @@ -536,7 +536,7 @@ { "Action": "cognito-idp:AdminListGroupsForUser", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -549,7 +549,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess4/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess4/Resource" } }, "userpoolAccess585E2FB32": { @@ -560,7 +560,7 @@ { "Action": "cognito-idp:ListUsers", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -573,7 +573,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess5/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess5/Resource" } }, "userpoolAccess600DA4CB0": { @@ -584,7 +584,7 @@ { "Action": "cognito-idp:ListUsersInGroup", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -597,7 +597,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess6/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess6/Resource" } }, "userpoolAccess76F9C91C1": { @@ -608,7 +608,7 @@ { "Action": "cognito-idp:ListGroups", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -621,7 +621,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess7/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess7/Resource" } }, "CDKMetadata": { @@ -630,7 +630,7 @@ "Analytics": "v2:deflate64:H4sIAAAAAAAA/12NzW7CQAyEn4X74tLAoVeI1KoXFBH1HC0bkzrZn2rtFKFV3r3aoLSop5mxPZ8LKHY72Kz0ldemHdaWzpCOyIJtLdoMSl+5SSZ0niRA+mCMVQhWlRf/6xdTWkIvj6u/yXuLXkhuS/kxn4LFvYg2n+5f/y2G8WtSVrtzqyGVF19hdMRMwee719EboeAnRdpByqA8nrUKlswtx7tbMI0PLfYMx1kWguJto5lRGPZZFG/hMJoB5aAZFbODVEsk31U6aoeCcUYvYZrU3KtFd+S7SeUv0PPTd1HA8wtsVj0TrePohRzC6a4/caZnM34BAAA=" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" }, @@ -668,7 +668,7 @@ "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", + "fitnesstracker33f55455_userpool_33f55455", "-", "main" ] @@ -682,24 +682,24 @@ "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes9ceb2e7c_app_clientWeb", + "ClientName": "fitnes33f55455_app_clientWeb", "RefreshTokenValidity": "30", "TokenValidityUnits": { "RefreshToken": "days" }, - "UserPoolId": "us-east-1_LAwe5ZJrw" + "UserPoolId": "us-east-1_iguxCIcMS" } }, "amplifyAuthUserPoolNativeAppClient79534448": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes9ceb2e7c_app_client", + "ClientName": "fitnes33f55455_app_client", "GenerateSecret": "false", "RefreshTokenValidity": "30", "TokenValidityUnits": { "RefreshToken": "days" }, - "UserPoolId": "us-east-1_LAwe5ZJrw" + "UserPoolId": "us-east-1_iguxCIcMS" } }, "amplifyAuthIdentityPool3FDE84CC": { @@ -708,7 +708,7 @@ "AllowUnauthenticatedIdentities": "false", "CognitoIdentityProviders": [ { - "ClientId": "12hkvqjabpisei771tiefdhs76", + "ClientId": "3s8jcv7nflisr91emephrr2a9s", "ProviderName": { "Fn::Sub": [ "cognito-idp.${region}.amazonaws.com/${client}", @@ -716,13 +716,13 @@ "region": { "Ref": "AWS::Region" }, - "client": "us-east-1_LAwe5ZJrw" + "client": "us-east-1_iguxCIcMS" } ] } }, { - "ClientId": "4bk8odk8blrf65ptk2dffug25k", + "ClientId": "29bubgvfbbqkp4k60rl7oaqd8s", "ProviderName": { "Fn::Sub": [ "cognito-idp.${region}.amazonaws.com/${client}", @@ -730,7 +730,7 @@ "region": { "Ref": "AWS::Region" }, - "client": "us-east-1_LAwe5ZJrw" + "client": "us-east-1_iguxCIcMS" } ] } @@ -740,7 +740,7 @@ "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", + "fitnesstracker33f55455_identitypool_33f55455__", "main" ] ] @@ -750,7 +750,7 @@ "amplifyAuthIdentityPoolRoleAttachment045F17C8": { "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "IdentityPoolId": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d", + "IdentityPoolId": "us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022", "RoleMappings": { "UserPoolClientRoleMapping": { "AmbiguousRoleResolution": "AuthenticatedRole", @@ -761,8 +761,8 @@ "region": { "Ref": "AWS::Region" }, - "userPool": "us-east-1_LAwe5ZJrw", - "client": "12hkvqjabpisei771tiefdhs76" + "userPool": "us-east-1_iguxCIcMS", + "client": "3s8jcv7nflisr91emephrr2a9s" } ] }, @@ -777,8 +777,8 @@ "region": { "Ref": "AWS::Region" }, - "userPool": "us-east-1_LAwe5ZJrw", - "webClient": "4bk8odk8blrf65ptk2dffug25k" + "userPool": "us-east-1_iguxCIcMS", + "webClient": "29bubgvfbbqkp4k60rl7oaqd8s" } ] }, @@ -786,8 +786,8 @@ } }, "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole", - "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-unauthRole", + "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-authRole" } } } @@ -1059,32 +1059,32 @@ } }, "Outputs": { - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref": { - "Value": "us-east-1_mQEsDQ1lC" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolBF05A444Ref": { + "Value": "us-east-1_KGveHFLxc" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPoolAppClientE9EEF58ARef": { - "Value": "dgddko7evul00or8262g7n9ub" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolAppClient1903AFDARef": { + "Value": "1o40oi80febsgsdamen2i1gnfd" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { - "Value": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref": { + "Value": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authfitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaB4152CB6Ref": { - "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + "amplifyfitnesstrackergen2mainbranch400746baebauthfitnesstracker33f5545533f55455PreSignupgen2mainlambda2B17C7BARef": { + "Value": "fitnesstracker33f5545533f55455PreSignup-gen2-main" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FRef": { + "amplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Ref": { "Value": "admin-gen2-main" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { - "Value": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-fF1WwIKcoHtV" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { - "Value": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-RtuRf8ygfomA" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn": { + "amplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Arn": { "Value": "arn:aws:lambda:us-east-1:123456789012:function:admin-gen2-main" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { - "Value": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthAdminGroupRoleC37E0196Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-jIdkeXSZarK4" } } } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.target.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.target.template.json similarity index 87% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.target.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.target.template.json index 7dc317d8e76..042061fab68 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.target.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.target.template.json @@ -22,7 +22,7 @@ "EmailVerificationMessage": "Your verification code is {####}", "EmailVerificationSubject": "Your verification code", "LambdaConfig": { - "PreSignUp": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + "PreSignUp": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker33f5545533f55455PreSignup-gen2-main" }, "MfaConfiguration": "OFF", "Policies": { @@ -68,7 +68,7 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPool/Resource" } }, "amplifyAuthUserPoolNativeAppClient79534448": { @@ -86,10 +86,10 @@ "TokenValidityUnits": { "RefreshToken": "minutes" }, - "UserPoolId": "us-east-1_mQEsDQ1lC" + "UserPoolId": "us-east-1_KGveHFLxc" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPool/NativeAppClient/Resource" } }, "amplifyAuthUserPoolAppClient2626C6F8": { @@ -118,10 +118,10 @@ "SupportedIdentityProviders": [ "COGNITO" ], - "UserPoolId": "us-east-1_mQEsDQ1lC" + "UserPoolId": "us-east-1_KGveHFLxc" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPoolAppClient/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPoolAppClient/Resource" } }, "amplifyAuthIdentityPool3FDE84CC": { @@ -130,7 +130,7 @@ "AllowUnauthenticatedIdentities": false, "CognitoIdentityProviders": [ { - "ClientId": "dgddko7evul00or8262g7n9ub", + "ClientId": "1o40oi80febsgsdamen2i1gnfd", "ProviderName": { "Fn::Join": [ "", @@ -140,7 +140,7 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - "us-east-1_mQEsDQ1lC" + "us-east-1_KGveHFLxc" ] ] } @@ -171,13 +171,13 @@ "SupportedLoginProviders": {} }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/IdentityPool" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/IdentityPool" } }, "amplifyAuthIdentityPoolRoleAttachment045F17C8": { "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "IdentityPoolId": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842", + "IdentityPoolId": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3", "RoleMappings": { "UserPoolWebClientRoleMapping": { "AmbiguousRoleResolution": "AuthenticatedRole", @@ -190,9 +190,9 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - "us-east-1_mQEsDQ1lC", + "us-east-1_KGveHFLxc", ":", - "dgddko7evul00or8262g7n9ub" + "1o40oi80febsgsdamen2i1gnfd" ] ] }, @@ -200,12 +200,12 @@ } }, "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc", - "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthunauthenticate-RtuRf8ygfomA", + "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-fF1WwIKcoHtV" } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/IdentityPoolRoleAttachment" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/IdentityPoolRoleAttachment" } }, "amplifyAuthAdminGroupCC42FF04": { @@ -213,11 +213,11 @@ "Properties": { "GroupName": "Admin", "Precedence": 0, - "RoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR", - "UserPoolId": "us-east-1_mQEsDQ1lC" + "RoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-jIdkeXSZarK4", + "UserPoolId": "us-east-1_KGveHFLxc" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroup" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/AdminGroup" } } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.mappings.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.mappings.json deleted file mode 100644 index d4a27b982d7..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding.mappings.json +++ /dev/null @@ -1,12 +0,0 @@ -[ - { - "Source": { - "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH", - "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04" - }, - "Destination": { - "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH-holding", - "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04" - } - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json deleted file mode 100644 index ae2c9056571..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json +++ /dev/null @@ -1,52 +0,0 @@ -[ - { - "Source": { - "StackName": "amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD", - "LogicalResourceId": "UserPool" - }, - "Destination": { - "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH", - "LogicalResourceId": "amplifyAuthUserPool4BA7F805" - } - }, - { - "Source": { - "StackName": "amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD", - "LogicalResourceId": "UserPoolClientWeb" - }, - "Destination": { - "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH", - "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" - } - }, - { - "Source": { - "StackName": "amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD", - "LogicalResourceId": "UserPoolClient" - }, - "Destination": { - "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH", - "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" - } - }, - { - "Source": { - "StackName": "amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD", - "LogicalResourceId": "IdentityPool" - }, - "Destination": { - "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH", - "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" - } - }, - { - "Source": { - "StackName": "amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD", - "LogicalResourceId": "IdentityPoolRoleMap" - }, - "Destination": { - "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH", - "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" - } - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json deleted file mode 100644 index fb65e230dc8..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.mappings.json +++ /dev/null @@ -1,12 +0,0 @@ -[ - { - "Source": { - "StackName": "amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV", - "LogicalResourceId": "AdminGroup" - }, - "Destination": { - "StackName": "amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH", - "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04" - } - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.mappings.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.mappings.json new file mode 100644 index 00000000000..369dad3a96d --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.mappings.json @@ -0,0 +1,52 @@ +[ + { + "Source": { + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508/0525fab0-272e-11f1-be1e-0ecc63820e19", + "LogicalResourceId": "UserPool" + }, + "Destination": { + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/a48ae490-2732-11f1-99cb-12d4bb1e164d", + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + } + }, + { + "Source": { + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508/0525fab0-272e-11f1-be1e-0ecc63820e19", + "LogicalResourceId": "UserPoolClientWeb" + }, + "Destination": { + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/a48ae490-2732-11f1-99cb-12d4bb1e164d", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + } + }, + { + "Source": { + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508/0525fab0-272e-11f1-be1e-0ecc63820e19", + "LogicalResourceId": "UserPoolClient" + }, + "Destination": { + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/a48ae490-2732-11f1-99cb-12d4bb1e164d", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + } + }, + { + "Source": { + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508/0525fab0-272e-11f1-be1e-0ecc63820e19", + "LogicalResourceId": "IdentityPool" + }, + "Destination": { + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/a48ae490-2732-11f1-99cb-12d4bb1e164d", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + } + }, + { + "Source": { + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508/0525fab0-272e-11f1-be1e-0ecc63820e19", + "LogicalResourceId": "IdentityPoolRoleMap" + }, + "Destination": { + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/a48ae490-2732-11f1-99cb-12d4bb1e164d", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + } + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.source.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.source.template.json similarity index 81% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.source.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.source.template.json index f9e2dd40e74..747de2cd975 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.source.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.source.template.json @@ -1,17 +1,17 @@ { - "Description": "Amplify Cognito Stack for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { "Type": "String" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { + "functionfitnesstracker33f5545533f55455PreSignupArn": { "Type": "String", - "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" + "Default": "functionfitnesstracker33f5545533f55455PreSignupArn" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { + "functionfitnesstracker33f5545533f55455PreSignupName": { "Type": "String", - "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" + "Default": "functionfitnesstracker33f5545533f55455PreSignupName" }, "identityPoolName": { "Type": "String" @@ -165,14 +165,14 @@ "Fn::Join": [ "", [ - "upClientLambdaRole9ceb2e7c", + "upClientLambdaRole33f55455", { "Fn::Select": [ 3, { "Fn::Split": [ "-", - "amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD" + "amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508" ] } ] @@ -188,29 +188,29 @@ "Outputs": { "IdentityPoolId": { "Description": "Id for the identity pool", - "Value": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d" + "Value": "us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022" }, "IdentityPoolName": { - "Value": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__main" + "Value": "fitnesstracker33f55455_identitypool_33f55455__main" }, "UserPoolId": { "Description": "Id for the user pool", - "Value": "us-east-1_LAwe5ZJrw" + "Value": "us-east-1_iguxCIcMS" }, "UserPoolArn": { "Description": "Arn for the user pool", - "Value": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_LAwe5ZJrw" + "Value": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_iguxCIcMS" }, "UserPoolName": { - "Value": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c" + "Value": "fitnesstracker33f55455_userpool_33f55455" }, "AppClientIDWeb": { "Description": "The user pool app client id for web", - "Value": "4bk8odk8blrf65ptk2dffug25k" + "Value": "29bubgvfbbqkp4k60rl7oaqd8s" }, "AppClientID": { "Description": "The user pool app client id", - "Value": "12hkvqjabpisei771tiefdhs76" + "Value": "3s8jcv7nflisr91emephrr2a9s" } } } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.target.template.json similarity index 85% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.target.template.json index 45938309e4f..34e96d7f10a 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.target.template.json @@ -5,12 +5,12 @@ "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", - "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", + "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker33f5545533f55455PreSignup-gen2-main", "Principal": "cognito-idp.amazonaws.com", - "SourceArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "SourceArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/PreSignUpCognito" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPool/PreSignUpCognito" } }, "amplifyAuthauthenticatedUserRoleD8DA3689": { @@ -22,7 +22,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "cognito-identity.amazonaws.com:aud": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -60,7 +60,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/authenticatedUserRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/authenticatedUserRole/Resource" } }, "amplifyAuthunauthenticatedUserRole2B524D9E": { @@ -72,7 +72,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "cognito-identity.amazonaws.com:aud": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -110,7 +110,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/unauthenticatedUserRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/unauthenticatedUserRole/Resource" } }, "amplifyAuthAdminGroupRole766878DC": { @@ -122,7 +122,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "cognito-identity.amazonaws.com:aud": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -160,7 +160,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroupRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/AdminGroupRole/Resource" } }, "amplifyAuthAdminGroupCC42FF04": { @@ -168,14 +168,14 @@ "Properties": { "GroupName": "Admin", "Precedence": 0, - "RoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR", - "UserPoolId": "us-east-1_mQEsDQ1lC" + "RoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-jIdkeXSZarK4", + "UserPoolId": "us-east-1_KGveHFLxc" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroup" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/AdminGroup" } }, - "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE": { + "fitnesstracker33f5545533f55455PreSignupgen2mainlambdaServiceRole713FCE90": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { @@ -219,7 +219,7 @@ }, { "Key": "amplify:friendly-name", - "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + "Value": "fitnesstracker33f5545533f55455PreSignup-gen2-main" }, { "Key": "created-by", @@ -228,10 +228,10 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/fitnesstracker33f5545533f55455PreSignup-gen2-main-lambda/ServiceRole/Resource" } }, - "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambda9B996C42": { + "fitnesstracker33f5545533f55455PreSignupgen2mainlambda1F6BAF02": { "Type": "AWS::Lambda::Function", "Properties": { "Architectures": [ @@ -241,7 +241,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371.zip" + "S3Key": "9f9c01e67674891c2af7783b0075317068ffc260976375cef1a2fb293d54b4f7.zip" }, "Environment": { "Variables": { @@ -256,10 +256,10 @@ "EphemeralStorage": { "Size": 512 }, - "FunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", + "FunctionName": "fitnesstracker33f5545533f55455PreSignup-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-fitnesstracker33f5545533f-4xULtIdI9U7p", "Runtime": "nodejs22.x", "Tags": [ { @@ -276,7 +276,7 @@ }, { "Key": "amplify:friendly-name", - "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + "Value": "fitnesstracker33f5545533f55455PreSignup-gen2-main" }, { "Key": "created-by", @@ -286,8 +286,8 @@ "Timeout": 25 }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/Resource", - "aws:asset:path": "asset.760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/fitnesstracker33f5545533f55455PreSignup-gen2-main-lambda/Resource", + "aws:asset:path": "asset.9f9c01e67674891c2af7783b0075317068ffc260976375cef1a2fb293d54b4f7", "aws:asset:is-bundled": true, "aws:asset:property": "Code" } @@ -295,7 +295,7 @@ "AMPLIFYAUTHUSERPOOLIDParameterCC466CA3": { "Type": "AWS::SSM::Parameter", "Properties": { - "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID", + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_AUTH_USERPOOL_ID", "Tags": { "amplify:app-id": "fitnesstracker", "amplify:branch-name": "gen2-main", @@ -303,10 +303,10 @@ "created-by": "amplify" }, "Type": "String", - "Value": "us-east-1_mQEsDQ1lC" + "Value": "us-east-1_KGveHFLxc" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/AMPLIFY_AUTH_USERPOOL_IDParameter/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/AMPLIFY_AUTH_USERPOOL_IDParameter/Resource" } }, "admingen2mainlambdaServiceRole439B1792": { @@ -362,7 +362,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/admin-gen2-main-lambda/ServiceRole/Resource" } }, "admingen2mainlambdaServiceRoleDefaultPolicy0F640A9C": { @@ -389,7 +389,7 @@ { "Ref": "AWS::AccountId" }, - ":parameter/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID" + ":parameter/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_AUTH_USERPOOL_ID" ] ] } @@ -405,7 +405,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/admin-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" } }, "admingen2mainlambdaECF7211C": { @@ -418,15 +418,15 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a.zip" + "S3Key": "b92a661741ad73057aa08e5c49f164a180c0bb1ad1d4be9740e7154f2b916a62.zip" }, "Environment": { "Variables": { "ENV": "gen2-main", "REGION": "us-east-1", - "AMPLIFY_SSM_ENV_CONFIG": "{\"AMPLIFY_AUTH_USERPOOL_ID\":{\"path\":\"/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID\"}}", + "AMPLIFY_SSM_ENV_CONFIG": "{\"AMPLIFY_AUTH_USERPOOL_ID\":{\"path\":\"/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_AUTH_USERPOOL_ID\"}}", "AMPLIFY_AUTH_USERPOOL_ID": "", - "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": "us-east-1_mQEsDQ1lC" + "AUTH_FITNESSTRACKER33F5545533F55455_USERPOOLID": "us-east-1_KGveHFLxc" } }, "EphemeralStorage": { @@ -435,7 +435,7 @@ "FunctionName": "admin-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/admingen2mainlambdaServiceRole439B1792", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-admingen2mainlambdaServic-BeMjaVS7HTg0", "Runtime": "nodejs22.x", "Tags": [ { @@ -462,8 +462,8 @@ "Timeout": 25 }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/Resource", - "aws:asset:path": "asset.4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/admin-gen2-main-lambda/Resource", + "aws:asset:path": "asset.b92a661741ad73057aa08e5c49f164a180c0bb1ad1d4be9740e7154f2b916a62", "aws:asset:is-bundled": true, "aws:asset:property": "Code" } @@ -476,7 +476,7 @@ { "Action": "cognito-idp:AdminGetDevice", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -489,7 +489,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess1/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess1/Resource" } }, "userpoolAccess268F187DB": { @@ -500,7 +500,7 @@ { "Action": "cognito-idp:AdminGetUser", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -513,7 +513,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess2/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess2/Resource" } }, "userpoolAccess3956C62F8": { @@ -524,7 +524,7 @@ { "Action": "cognito-idp:AdminListDevices", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -537,7 +537,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess3/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess3/Resource" } }, "userpoolAccess4A84025C3": { @@ -548,7 +548,7 @@ { "Action": "cognito-idp:AdminListGroupsForUser", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -561,7 +561,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess4/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess4/Resource" } }, "userpoolAccess585E2FB32": { @@ -572,7 +572,7 @@ { "Action": "cognito-idp:ListUsers", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -585,7 +585,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess5/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess5/Resource" } }, "userpoolAccess600DA4CB0": { @@ -596,7 +596,7 @@ { "Action": "cognito-idp:ListUsersInGroup", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -609,7 +609,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess6/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess6/Resource" } }, "userpoolAccess76F9C91C1": { @@ -620,7 +620,7 @@ { "Action": "cognito-idp:ListGroups", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -633,7 +633,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess7/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess7/Resource" } }, "CDKMetadata": { @@ -642,7 +642,7 @@ "Analytics": "v2:deflate64:H4sIAAAAAAAA/12NzW7CQAyEn4X74tLAoVeI1KoXFBH1HC0bkzrZn2rtFKFV3r3aoLSop5mxPZ8LKHY72Kz0ldemHdaWzpCOyIJtLdoMSl+5SSZ0niRA+mCMVQhWlRf/6xdTWkIvj6u/yXuLXkhuS/kxn4LFvYg2n+5f/y2G8WtSVrtzqyGVF19hdMRMwee719EboeAnRdpByqA8nrUKlswtx7tbMI0PLfYMx1kWguJto5lRGPZZFG/hMJoB5aAZFbODVEsk31U6aoeCcUYvYZrU3KtFd+S7SeUv0PPTd1HA8wtsVj0TrePohRzC6a4/caZnM34BAAA=" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" }, @@ -680,7 +680,7 @@ "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", + "fitnesstracker33f55455_userpool_33f55455", "-", "main" ] @@ -694,24 +694,24 @@ "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes9ceb2e7c_app_clientWeb", + "ClientName": "fitnes33f55455_app_clientWeb", "RefreshTokenValidity": "30", "TokenValidityUnits": { "RefreshToken": "days" }, - "UserPoolId": "us-east-1_LAwe5ZJrw" + "UserPoolId": "us-east-1_iguxCIcMS" } }, "amplifyAuthUserPoolNativeAppClient79534448": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes9ceb2e7c_app_client", + "ClientName": "fitnes33f55455_app_client", "GenerateSecret": "false", "RefreshTokenValidity": "30", "TokenValidityUnits": { "RefreshToken": "days" }, - "UserPoolId": "us-east-1_LAwe5ZJrw" + "UserPoolId": "us-east-1_iguxCIcMS" } }, "amplifyAuthIdentityPool3FDE84CC": { @@ -720,7 +720,7 @@ "AllowUnauthenticatedIdentities": "false", "CognitoIdentityProviders": [ { - "ClientId": "12hkvqjabpisei771tiefdhs76", + "ClientId": "3s8jcv7nflisr91emephrr2a9s", "ProviderName": { "Fn::Sub": [ "cognito-idp.${region}.amazonaws.com/${client}", @@ -728,13 +728,13 @@ "region": { "Ref": "AWS::Region" }, - "client": "us-east-1_LAwe5ZJrw" + "client": "us-east-1_iguxCIcMS" } ] } }, { - "ClientId": "4bk8odk8blrf65ptk2dffug25k", + "ClientId": "29bubgvfbbqkp4k60rl7oaqd8s", "ProviderName": { "Fn::Sub": [ "cognito-idp.${region}.amazonaws.com/${client}", @@ -742,7 +742,7 @@ "region": { "Ref": "AWS::Region" }, - "client": "us-east-1_LAwe5ZJrw" + "client": "us-east-1_iguxCIcMS" } ] } @@ -752,7 +752,7 @@ "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", + "fitnesstracker33f55455_identitypool_33f55455__", "main" ] ] @@ -762,7 +762,7 @@ "amplifyAuthIdentityPoolRoleAttachment045F17C8": { "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "IdentityPoolId": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d", + "IdentityPoolId": "us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022", "RoleMappings": { "UserPoolClientRoleMapping": { "AmbiguousRoleResolution": "AuthenticatedRole", @@ -773,8 +773,8 @@ "region": { "Ref": "AWS::Region" }, - "userPool": "us-east-1_LAwe5ZJrw", - "client": "12hkvqjabpisei771tiefdhs76" + "userPool": "us-east-1_iguxCIcMS", + "client": "3s8jcv7nflisr91emephrr2a9s" } ] }, @@ -789,8 +789,8 @@ "region": { "Ref": "AWS::Region" }, - "userPool": "us-east-1_LAwe5ZJrw", - "webClient": "4bk8odk8blrf65ptk2dffug25k" + "userPool": "us-east-1_iguxCIcMS", + "webClient": "29bubgvfbbqkp4k60rl7oaqd8s" } ] }, @@ -798,8 +798,8 @@ } }, "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole", - "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-unauthRole", + "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-authRole" } } } @@ -1071,32 +1071,32 @@ } }, "Outputs": { - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref": { - "Value": "us-east-1_mQEsDQ1lC" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolBF05A444Ref": { + "Value": "us-east-1_KGveHFLxc" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPoolAppClientE9EEF58ARef": { - "Value": "dgddko7evul00or8262g7n9ub" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolAppClient1903AFDARef": { + "Value": "1o40oi80febsgsdamen2i1gnfd" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { - "Value": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref": { + "Value": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authfitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaB4152CB6Ref": { - "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + "amplifyfitnesstrackergen2mainbranch400746baebauthfitnesstracker33f5545533f55455PreSignupgen2mainlambda2B17C7BARef": { + "Value": "fitnesstracker33f5545533f55455PreSignup-gen2-main" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FRef": { + "amplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Ref": { "Value": "admin-gen2-main" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { - "Value": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-fF1WwIKcoHtV" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { - "Value": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-RtuRf8ygfomA" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn": { + "amplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Arn": { "Value": "arn:aws:lambda:us-east-1:123456789012:function:admin-gen2-main" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { - "Value": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthAdminGroupRoleC37E0196Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-jIdkeXSZarK4" } } } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.mappings.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.mappings.json new file mode 100644 index 00000000000..f8f4676ef5a --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.mappings.json @@ -0,0 +1,12 @@ +[ + { + "Source": { + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF/19fc4ca0-272e-11f1-a89c-0affce72f097", + "LogicalResourceId": "AdminGroup" + }, + "Destination": { + "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/a48ae490-2732-11f1-99cb-12d4bb1e164d", + "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04" + } + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.source.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.source.template.json similarity index 63% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.source.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.source.template.json index d90598764f2..4f2192b77e7 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.source.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.source.template.json @@ -1,5 +1,5 @@ { - "Description": "Root Stack for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito-UserPool-Groups\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { @@ -11,21 +11,21 @@ "UnauthRoleArn": { "Type": "String" }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" }, - "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { + "authfitnesstracker33f5545533f55455IdentityPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" + "Default": "authfitnesstracker33f5545533f55455IdentityPoolId" }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { + "authfitnesstracker33f5545533f55455AppClientID": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID" + "Default": "authfitnesstracker33f5545533f55455AppClientID" }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { + "authfitnesstracker33f5545533f55455AppClientIDWeb": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb" + "Default": "authfitnesstracker33f5545533f55455AppClientIDWeb" } }, "Conditions": { @@ -52,7 +52,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d" + "cognito-identity.amazonaws.com:aud": "us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -65,7 +65,7 @@ "Fn::Join": [ "", [ - "us-east-1_LAwe5ZJrw", + "us-east-1_iguxCIcMS", "-AdminGroupRole" ] ] @@ -75,7 +75,7 @@ }, "Outputs": { "AdminGroupRole": { - "Value": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole" + "Value": "arn:aws:iam::123456789012:role/us-east-1_iguxCIcMS-AdminGroupRole" } } } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.target.template.json similarity index 85% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.target.template.json index 20656b6f77f..b5fcf1180e6 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.__to__.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.target.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.target.template.json @@ -5,12 +5,12 @@ "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", - "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", + "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker33f5545533f55455PreSignup-gen2-main", "Principal": "cognito-idp.amazonaws.com", - "SourceArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "SourceArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/PreSignUpCognito" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPool/PreSignUpCognito" } }, "amplifyAuthauthenticatedUserRoleD8DA3689": { @@ -22,7 +22,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "cognito-identity.amazonaws.com:aud": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -60,7 +60,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/authenticatedUserRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/authenticatedUserRole/Resource" } }, "amplifyAuthunauthenticatedUserRole2B524D9E": { @@ -72,7 +72,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "cognito-identity.amazonaws.com:aud": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -110,7 +110,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/unauthenticatedUserRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/unauthenticatedUserRole/Resource" } }, "amplifyAuthAdminGroupRole766878DC": { @@ -122,7 +122,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "cognito-identity.amazonaws.com:aud": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -160,10 +160,10 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroupRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/AdminGroupRole/Resource" } }, - "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE": { + "fitnesstracker33f5545533f55455PreSignupgen2mainlambdaServiceRole713FCE90": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { @@ -207,7 +207,7 @@ }, { "Key": "amplify:friendly-name", - "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + "Value": "fitnesstracker33f5545533f55455PreSignup-gen2-main" }, { "Key": "created-by", @@ -216,10 +216,10 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/fitnesstracker33f5545533f55455PreSignup-gen2-main-lambda/ServiceRole/Resource" } }, - "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambda9B996C42": { + "fitnesstracker33f5545533f55455PreSignupgen2mainlambda1F6BAF02": { "Type": "AWS::Lambda::Function", "Properties": { "Architectures": [ @@ -229,7 +229,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371.zip" + "S3Key": "9f9c01e67674891c2af7783b0075317068ffc260976375cef1a2fb293d54b4f7.zip" }, "Environment": { "Variables": { @@ -244,10 +244,10 @@ "EphemeralStorage": { "Size": 512 }, - "FunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", + "FunctionName": "fitnesstracker33f5545533f55455PreSignup-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-fitnesstracker33f5545533f-4xULtIdI9U7p", "Runtime": "nodejs22.x", "Tags": [ { @@ -264,7 +264,7 @@ }, { "Key": "amplify:friendly-name", - "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + "Value": "fitnesstracker33f5545533f55455PreSignup-gen2-main" }, { "Key": "created-by", @@ -274,8 +274,8 @@ "Timeout": 25 }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/Resource", - "aws:asset:path": "asset.760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/fitnesstracker33f5545533f55455PreSignup-gen2-main-lambda/Resource", + "aws:asset:path": "asset.9f9c01e67674891c2af7783b0075317068ffc260976375cef1a2fb293d54b4f7", "aws:asset:is-bundled": true, "aws:asset:property": "Code" } @@ -283,7 +283,7 @@ "AMPLIFYAUTHUSERPOOLIDParameterCC466CA3": { "Type": "AWS::SSM::Parameter", "Properties": { - "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID", + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_AUTH_USERPOOL_ID", "Tags": { "amplify:app-id": "fitnesstracker", "amplify:branch-name": "gen2-main", @@ -291,10 +291,10 @@ "created-by": "amplify" }, "Type": "String", - "Value": "us-east-1_mQEsDQ1lC" + "Value": "us-east-1_KGveHFLxc" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/AMPLIFY_AUTH_USERPOOL_IDParameter/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/AMPLIFY_AUTH_USERPOOL_IDParameter/Resource" } }, "admingen2mainlambdaServiceRole439B1792": { @@ -350,7 +350,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/admin-gen2-main-lambda/ServiceRole/Resource" } }, "admingen2mainlambdaServiceRoleDefaultPolicy0F640A9C": { @@ -377,7 +377,7 @@ { "Ref": "AWS::AccountId" }, - ":parameter/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID" + ":parameter/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_AUTH_USERPOOL_ID" ] ] } @@ -393,7 +393,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/admin-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" } }, "admingen2mainlambdaECF7211C": { @@ -406,15 +406,15 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a.zip" + "S3Key": "b92a661741ad73057aa08e5c49f164a180c0bb1ad1d4be9740e7154f2b916a62.zip" }, "Environment": { "Variables": { "ENV": "gen2-main", "REGION": "us-east-1", - "AMPLIFY_SSM_ENV_CONFIG": "{\"AMPLIFY_AUTH_USERPOOL_ID\":{\"path\":\"/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID\"}}", + "AMPLIFY_SSM_ENV_CONFIG": "{\"AMPLIFY_AUTH_USERPOOL_ID\":{\"path\":\"/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_AUTH_USERPOOL_ID\"}}", "AMPLIFY_AUTH_USERPOOL_ID": "", - "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": "us-east-1_mQEsDQ1lC" + "AUTH_FITNESSTRACKER33F5545533F55455_USERPOOLID": "us-east-1_KGveHFLxc" } }, "EphemeralStorage": { @@ -423,7 +423,7 @@ "FunctionName": "admin-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/admingen2mainlambdaServiceRole439B1792", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-admingen2mainlambdaServic-BeMjaVS7HTg0", "Runtime": "nodejs22.x", "Tags": [ { @@ -450,8 +450,8 @@ "Timeout": 25 }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/Resource", - "aws:asset:path": "asset.4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/admin-gen2-main-lambda/Resource", + "aws:asset:path": "asset.b92a661741ad73057aa08e5c49f164a180c0bb1ad1d4be9740e7154f2b916a62", "aws:asset:is-bundled": true, "aws:asset:property": "Code" } @@ -464,7 +464,7 @@ { "Action": "cognito-idp:AdminGetDevice", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -477,7 +477,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess1/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess1/Resource" } }, "userpoolAccess268F187DB": { @@ -488,7 +488,7 @@ { "Action": "cognito-idp:AdminGetUser", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -501,7 +501,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess2/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess2/Resource" } }, "userpoolAccess3956C62F8": { @@ -512,7 +512,7 @@ { "Action": "cognito-idp:AdminListDevices", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -525,7 +525,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess3/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess3/Resource" } }, "userpoolAccess4A84025C3": { @@ -536,7 +536,7 @@ { "Action": "cognito-idp:AdminListGroupsForUser", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -549,7 +549,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess4/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess4/Resource" } }, "userpoolAccess585E2FB32": { @@ -560,7 +560,7 @@ { "Action": "cognito-idp:ListUsers", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -573,7 +573,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess5/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess5/Resource" } }, "userpoolAccess600DA4CB0": { @@ -584,7 +584,7 @@ { "Action": "cognito-idp:ListUsersInGroup", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -597,7 +597,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess6/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess6/Resource" } }, "userpoolAccess76F9C91C1": { @@ -608,7 +608,7 @@ { "Action": "cognito-idp:ListGroups", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -621,7 +621,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess7/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess7/Resource" } }, "CDKMetadata": { @@ -630,7 +630,7 @@ "Analytics": "v2:deflate64:H4sIAAAAAAAA/12NzW7CQAyEn4X74tLAoVeI1KoXFBH1HC0bkzrZn2rtFKFV3r3aoLSop5mxPZ8LKHY72Kz0ldemHdaWzpCOyIJtLdoMSl+5SSZ0niRA+mCMVQhWlRf/6xdTWkIvj6u/yXuLXkhuS/kxn4LFvYg2n+5f/y2G8WtSVrtzqyGVF19hdMRMwee719EboeAnRdpByqA8nrUKlswtx7tbMI0PLfYMx1kWguJto5lRGPZZFG/hMJoB5aAZFbODVEsk31U6aoeCcUYvYZrU3KtFd+S7SeUv0PPTd1HA8wtsVj0TrePohRzC6a4/caZnM34BAAA=" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" }, @@ -668,7 +668,7 @@ "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", + "fitnesstracker33f55455_userpool_33f55455", "-", "main" ] @@ -682,24 +682,24 @@ "amplifyAuthUserPoolAppClient2626C6F8": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes9ceb2e7c_app_clientWeb", + "ClientName": "fitnes33f55455_app_clientWeb", "RefreshTokenValidity": "30", "TokenValidityUnits": { "RefreshToken": "days" }, - "UserPoolId": "us-east-1_LAwe5ZJrw" + "UserPoolId": "us-east-1_iguxCIcMS" } }, "amplifyAuthUserPoolNativeAppClient79534448": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes9ceb2e7c_app_client", + "ClientName": "fitnes33f55455_app_client", "GenerateSecret": "false", "RefreshTokenValidity": "30", "TokenValidityUnits": { "RefreshToken": "days" }, - "UserPoolId": "us-east-1_LAwe5ZJrw" + "UserPoolId": "us-east-1_iguxCIcMS" } }, "amplifyAuthIdentityPool3FDE84CC": { @@ -708,7 +708,7 @@ "AllowUnauthenticatedIdentities": "false", "CognitoIdentityProviders": [ { - "ClientId": "12hkvqjabpisei771tiefdhs76", + "ClientId": "3s8jcv7nflisr91emephrr2a9s", "ProviderName": { "Fn::Sub": [ "cognito-idp.${region}.amazonaws.com/${client}", @@ -716,13 +716,13 @@ "region": { "Ref": "AWS::Region" }, - "client": "us-east-1_LAwe5ZJrw" + "client": "us-east-1_iguxCIcMS" } ] } }, { - "ClientId": "4bk8odk8blrf65ptk2dffug25k", + "ClientId": "29bubgvfbbqkp4k60rl7oaqd8s", "ProviderName": { "Fn::Sub": [ "cognito-idp.${region}.amazonaws.com/${client}", @@ -730,7 +730,7 @@ "region": { "Ref": "AWS::Region" }, - "client": "us-east-1_LAwe5ZJrw" + "client": "us-east-1_iguxCIcMS" } ] } @@ -740,7 +740,7 @@ "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", + "fitnesstracker33f55455_identitypool_33f55455__", "main" ] ] @@ -750,7 +750,7 @@ "amplifyAuthIdentityPoolRoleAttachment045F17C8": { "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "IdentityPoolId": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d", + "IdentityPoolId": "us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022", "RoleMappings": { "UserPoolClientRoleMapping": { "AmbiguousRoleResolution": "AuthenticatedRole", @@ -761,8 +761,8 @@ "region": { "Ref": "AWS::Region" }, - "userPool": "us-east-1_LAwe5ZJrw", - "client": "12hkvqjabpisei771tiefdhs76" + "userPool": "us-east-1_iguxCIcMS", + "client": "3s8jcv7nflisr91emephrr2a9s" } ] }, @@ -777,8 +777,8 @@ "region": { "Ref": "AWS::Region" }, - "userPool": "us-east-1_LAwe5ZJrw", - "webClient": "4bk8odk8blrf65ptk2dffug25k" + "userPool": "us-east-1_iguxCIcMS", + "webClient": "29bubgvfbbqkp4k60rl7oaqd8s" } ] }, @@ -786,8 +786,8 @@ } }, "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole", - "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-unauthRole", + "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-authRole" } } }, @@ -797,8 +797,8 @@ "Description": "override success", "GroupName": "Admin", "Precedence": 1, - "RoleArn": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole", - "UserPoolId": "us-east-1_LAwe5ZJrw" + "RoleArn": "arn:aws:iam::123456789012:role/us-east-1_iguxCIcMS-AdminGroupRole", + "UserPoolId": "us-east-1_iguxCIcMS" } } }, @@ -1069,32 +1069,32 @@ } }, "Outputs": { - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref": { - "Value": "us-east-1_mQEsDQ1lC" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolBF05A444Ref": { + "Value": "us-east-1_KGveHFLxc" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPoolAppClientE9EEF58ARef": { - "Value": "dgddko7evul00or8262g7n9ub" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolAppClient1903AFDARef": { + "Value": "1o40oi80febsgsdamen2i1gnfd" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { - "Value": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref": { + "Value": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authfitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaB4152CB6Ref": { - "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + "amplifyfitnesstrackergen2mainbranch400746baebauthfitnesstracker33f5545533f55455PreSignupgen2mainlambda2B17C7BARef": { + "Value": "fitnesstracker33f5545533f55455PreSignup-gen2-main" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FRef": { + "amplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Ref": { "Value": "admin-gen2-main" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { - "Value": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-fF1WwIKcoHtV" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { - "Value": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-RtuRf8ygfomA" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn": { + "amplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Arn": { "Value": "arn:aws:lambda:us-east-1:123456789012:function:admin-gen2-main" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { - "Value": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthAdminGroupRoleC37E0196Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-jIdkeXSZarK4" } } } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.parameters.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.parameters.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.template.json similarity index 86% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.template.json index 9cefa411a99..3e470ef8187 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.template.json @@ -21,7 +21,7 @@ "EmailVerificationMessage": "Your verification code is {####}", "EmailVerificationSubject": "Your verification code", "LambdaConfig": { - "PreSignUp": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + "PreSignUp": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker33f5545533f55455PreSignup-gen2-main" }, "MfaConfiguration": "OFF", "Policies": { @@ -67,19 +67,19 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPool/Resource" } }, "amplifyAuthUserPoolPreSignUpCognito55F45D8E": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", - "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", + "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker33f5545533f55455PreSignup-gen2-main", "Principal": "cognito-idp.amazonaws.com", - "SourceArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "SourceArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/PreSignUpCognito" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPool/PreSignUpCognito" } }, "amplifyAuthUserPoolNativeAppClient79534448": { @@ -97,10 +97,10 @@ "TokenValidityUnits": { "RefreshToken": "minutes" }, - "UserPoolId": "us-east-1_mQEsDQ1lC" + "UserPoolId": "us-east-1_KGveHFLxc" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPool/NativeAppClient/Resource" } }, "amplifyAuthUserPoolAppClient2626C6F8": { @@ -129,10 +129,10 @@ "SupportedIdentityProviders": [ "COGNITO" ], - "UserPoolId": "us-east-1_mQEsDQ1lC" + "UserPoolId": "us-east-1_KGveHFLxc" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPoolAppClient/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPoolAppClient/Resource" } }, "amplifyAuthIdentityPool3FDE84CC": { @@ -141,7 +141,7 @@ "AllowUnauthenticatedIdentities": false, "CognitoIdentityProviders": [ { - "ClientId": "dgddko7evul00or8262g7n9ub", + "ClientId": "1o40oi80febsgsdamen2i1gnfd", "ProviderName": { "Fn::Join": [ "", @@ -151,7 +151,7 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - "us-east-1_mQEsDQ1lC" + "us-east-1_KGveHFLxc" ] ] } @@ -182,7 +182,7 @@ "SupportedLoginProviders": {} }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/IdentityPool" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/IdentityPool" } }, "amplifyAuthauthenticatedUserRoleD8DA3689": { @@ -194,7 +194,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "cognito-identity.amazonaws.com:aud": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -232,7 +232,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/authenticatedUserRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/authenticatedUserRole/Resource" } }, "amplifyAuthunauthenticatedUserRole2B524D9E": { @@ -244,7 +244,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "cognito-identity.amazonaws.com:aud": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" @@ -282,13 +282,13 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/unauthenticatedUserRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/unauthenticatedUserRole/Resource" } }, "amplifyAuthIdentityPoolRoleAttachment045F17C8": { "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "IdentityPoolId": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842", + "IdentityPoolId": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3", "RoleMappings": { "UserPoolWebClientRoleMapping": { "AmbiguousRoleResolution": "AuthenticatedRole", @@ -301,9 +301,9 @@ "Ref": "AWS::Region" }, ".amazonaws.com/", - "us-east-1_mQEsDQ1lC", + "us-east-1_KGveHFLxc", ":", - "dgddko7evul00or8262g7n9ub" + "1o40oi80febsgsdamen2i1gnfd" ] ] }, @@ -311,12 +311,12 @@ } }, "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc", - "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthunauthenticate-RtuRf8ygfomA", + "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-fF1WwIKcoHtV" } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/IdentityPoolRoleAttachment" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/IdentityPoolRoleAttachment" } }, "amplifyAuthAdminGroupRole766878DC": { @@ -328,7 +328,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "cognito-identity.amazonaws.com:aud": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -366,7 +366,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroupRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/AdminGroupRole/Resource" } }, "amplifyAuthAdminGroupCC42FF04": { @@ -374,14 +374,14 @@ "Properties": { "GroupName": "Admin", "Precedence": 0, - "RoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR", - "UserPoolId": "us-east-1_mQEsDQ1lC" + "RoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-jIdkeXSZarK4", + "UserPoolId": "us-east-1_KGveHFLxc" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroup" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/AdminGroup" } }, - "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE": { + "fitnesstracker33f5545533f55455PreSignupgen2mainlambdaServiceRole713FCE90": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { @@ -425,7 +425,7 @@ }, { "Key": "amplify:friendly-name", - "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + "Value": "fitnesstracker33f5545533f55455PreSignup-gen2-main" }, { "Key": "created-by", @@ -434,10 +434,10 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/fitnesstracker33f5545533f55455PreSignup-gen2-main-lambda/ServiceRole/Resource" } }, - "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambda9B996C42": { + "fitnesstracker33f5545533f55455PreSignupgen2mainlambda1F6BAF02": { "Type": "AWS::Lambda::Function", "Properties": { "Architectures": [ @@ -447,7 +447,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371.zip" + "S3Key": "9f9c01e67674891c2af7783b0075317068ffc260976375cef1a2fb293d54b4f7.zip" }, "Environment": { "Variables": { @@ -462,10 +462,10 @@ "EphemeralStorage": { "Size": 512 }, - "FunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", + "FunctionName": "fitnesstracker33f5545533f55455PreSignup-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-fitnesstracker33f5545533f-4xULtIdI9U7p", "Runtime": "nodejs22.x", "Tags": [ { @@ -482,7 +482,7 @@ }, { "Key": "amplify:friendly-name", - "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + "Value": "fitnesstracker33f5545533f55455PreSignup-gen2-main" }, { "Key": "created-by", @@ -492,8 +492,8 @@ "Timeout": 25 }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/Resource", - "aws:asset:path": "asset.760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/fitnesstracker33f5545533f55455PreSignup-gen2-main-lambda/Resource", + "aws:asset:path": "asset.9f9c01e67674891c2af7783b0075317068ffc260976375cef1a2fb293d54b4f7", "aws:asset:is-bundled": true, "aws:asset:property": "Code" } @@ -501,7 +501,7 @@ "AMPLIFYAUTHUSERPOOLIDParameterCC466CA3": { "Type": "AWS::SSM::Parameter", "Properties": { - "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID", + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_AUTH_USERPOOL_ID", "Tags": { "amplify:app-id": "fitnesstracker", "amplify:branch-name": "gen2-main", @@ -509,10 +509,10 @@ "created-by": "amplify" }, "Type": "String", - "Value": "us-east-1_mQEsDQ1lC" + "Value": "us-east-1_KGveHFLxc" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/AMPLIFY_AUTH_USERPOOL_IDParameter/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/AMPLIFY_AUTH_USERPOOL_IDParameter/Resource" } }, "admingen2mainlambdaServiceRole439B1792": { @@ -568,7 +568,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/admin-gen2-main-lambda/ServiceRole/Resource" } }, "admingen2mainlambdaServiceRoleDefaultPolicy0F640A9C": { @@ -595,7 +595,7 @@ { "Ref": "AWS::AccountId" }, - ":parameter/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID" + ":parameter/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_AUTH_USERPOOL_ID" ] ] } @@ -611,7 +611,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/admin-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" } }, "admingen2mainlambdaECF7211C": { @@ -624,15 +624,15 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a.zip" + "S3Key": "b92a661741ad73057aa08e5c49f164a180c0bb1ad1d4be9740e7154f2b916a62.zip" }, "Environment": { "Variables": { "ENV": "gen2-main", "REGION": "us-east-1", - "AMPLIFY_SSM_ENV_CONFIG": "{\"AMPLIFY_AUTH_USERPOOL_ID\":{\"path\":\"/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID\"}}", + "AMPLIFY_SSM_ENV_CONFIG": "{\"AMPLIFY_AUTH_USERPOOL_ID\":{\"path\":\"/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_AUTH_USERPOOL_ID\"}}", "AMPLIFY_AUTH_USERPOOL_ID": "", - "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": "us-east-1_mQEsDQ1lC" + "AUTH_FITNESSTRACKER33F5545533F55455_USERPOOLID": "us-east-1_KGveHFLxc" } }, "EphemeralStorage": { @@ -641,7 +641,7 @@ "FunctionName": "admin-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH/admingen2mainlambdaServiceRole439B1792", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-admingen2mainlambdaServic-BeMjaVS7HTg0", "Runtime": "nodejs22.x", "Tags": [ { @@ -668,8 +668,8 @@ "Timeout": 25 }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/Resource", - "aws:asset:path": "asset.4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/admin-gen2-main-lambda/Resource", + "aws:asset:path": "asset.b92a661741ad73057aa08e5c49f164a180c0bb1ad1d4be9740e7154f2b916a62", "aws:asset:is-bundled": true, "aws:asset:property": "Code" } @@ -682,7 +682,7 @@ { "Action": "cognito-idp:AdminGetDevice", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -695,7 +695,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess1/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess1/Resource" } }, "userpoolAccess268F187DB": { @@ -706,7 +706,7 @@ { "Action": "cognito-idp:AdminGetUser", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -719,7 +719,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess2/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess2/Resource" } }, "userpoolAccess3956C62F8": { @@ -730,7 +730,7 @@ { "Action": "cognito-idp:AdminListDevices", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -743,7 +743,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess3/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess3/Resource" } }, "userpoolAccess4A84025C3": { @@ -754,7 +754,7 @@ { "Action": "cognito-idp:AdminListGroupsForUser", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -767,7 +767,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess4/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess4/Resource" } }, "userpoolAccess585E2FB32": { @@ -778,7 +778,7 @@ { "Action": "cognito-idp:ListUsers", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -791,7 +791,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess5/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess5/Resource" } }, "userpoolAccess600DA4CB0": { @@ -802,7 +802,7 @@ { "Action": "cognito-idp:ListUsersInGroup", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -815,7 +815,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess6/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess6/Resource" } }, "userpoolAccess76F9C91C1": { @@ -826,7 +826,7 @@ { "Action": "cognito-idp:ListGroups", "Effect": "Allow", - "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_mQEsDQ1lC" + "Resource": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_KGveHFLxc" } ], "Version": "2012-10-17" @@ -839,7 +839,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess7/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess7/Resource" } }, "CDKMetadata": { @@ -848,7 +848,7 @@ "Analytics": "v2:deflate64:H4sIAAAAAAAA/12NzW7CQAyEn4X74tLAoVeI1KoXFBH1HC0bkzrZn2rtFKFV3r3aoLSop5mxPZ8LKHY72Kz0ldemHdaWzpCOyIJtLdoMSl+5SSZ0niRA+mCMVQhWlRf/6xdTWkIvj6u/yXuLXkhuS/kxn4LFvYg2n+5f/y2G8WtSVrtzqyGVF19hdMRMwee719EboeAnRdpByqA8nrUKlswtx7tbMI0PLfYMx1kWguJto5lRGPZZFG/hMJoB5aAZFbODVEsk31U6aoeCcUYvYZrU3KtFd+S7SeUv0PPTd1HA8wtsVj0TrePohRzC6a4/caZnM34BAAA=" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -1120,32 +1120,32 @@ } }, "Outputs": { - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref": { - "Value": "us-east-1_mQEsDQ1lC" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolBF05A444Ref": { + "Value": "us-east-1_KGveHFLxc" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPoolAppClientE9EEF58ARef": { - "Value": "dgddko7evul00or8262g7n9ub" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolAppClient1903AFDARef": { + "Value": "1o40oi80febsgsdamen2i1gnfd" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { - "Value": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref": { + "Value": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authfitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaB4152CB6Ref": { - "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + "amplifyfitnesstrackergen2mainbranch400746baebauthfitnesstracker33f5545533f55455PreSignupgen2mainlambda2B17C7BARef": { + "Value": "fitnesstracker33f5545533f55455PreSignup-gen2-main" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FRef": { + "amplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Ref": { "Value": "admin-gen2-main" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { - "Value": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-fF1WwIKcoHtV" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { - "Value": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-RtuRf8ygfomA" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn": { + "amplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Arn": { "Value": "arn:aws:lambda:us-east-1:123456789012:function:admin-gen2-main" }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { - "Value": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR" + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthAdminGroupRoleC37E0196Ref": { + "Value": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-jIdkeXSZarK4" } } } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.parameters.json deleted file mode 100644 index 3a84ecd1058..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.parameters.json +++ /dev/null @@ -1,30 +0,0 @@ -[ - { - "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb", - "ParameterValue": "4bk8odk8blrf65ptk2dffug25k" - }, - { - "ParameterKey": "UnauthRoleArn", - "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole" - }, - { - "ParameterKey": "AuthRoleArn", - "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" - }, - { - "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId", - "ParameterValue": "us-east-1_LAwe5ZJrw" - }, - { - "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId", - "ParameterValue": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d" - }, - { - "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID", - "ParameterValue": "12hkvqjabpisei771tiefdhs76" - }, - { - "ParameterKey": "env", - "ParameterValue": "main" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.parameters.json similarity index 83% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.parameters.json index d99a1808184..01043034b58 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.parameters.json @@ -1,7 +1,7 @@ [ { "ParameterKey": "authRoleArn", - "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" + "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-authRole" }, { "ParameterKey": "autoVerifiedAttributes", @@ -37,7 +37,7 @@ }, { "ParameterKey": "sharedId", - "ParameterValue": "9ceb2e7c" + "ParameterValue": "33f55455" }, { "ParameterKey": "useDefault", @@ -53,7 +53,7 @@ }, { "ParameterKey": "identityPoolName", - "ParameterValue": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c" + "ParameterValue": "fitnesstracker33f55455_identitypool_33f55455" }, { "ParameterKey": "thirdPartyAuth", @@ -75,9 +75,13 @@ "ParameterKey": "permissions", "ParameterValue": "" }, + { + "ParameterKey": "functionfitnesstracker33f5545533f55455PreSignupArn", + "ParameterValue": "functionfitnesstracker33f5545533f55455PreSignupArn" + }, { "ParameterKey": "resourceNameTruncated", - "ParameterValue": "fitnes9ceb2e7c" + "ParameterValue": "fitnes33f55455" }, { "ParameterKey": "userPoolGroups", @@ -87,17 +91,13 @@ "ParameterKey": "smsAuthenticationMessage", "ParameterValue": "Your authentication code is {####}" }, - { - "ParameterKey": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn", - "ParameterValue": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" - }, { "ParameterKey": "passwordPolicyMinLength", "ParameterValue": "8" }, { "ParameterKey": "userPoolName", - "ParameterValue": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c" + "ParameterValue": "fitnesstracker33f55455_userpool_33f55455" }, { "ParameterKey": "userpoolClientWriteAttributes", @@ -111,13 +111,17 @@ "ParameterKey": "useEnabledMfas", "ParameterValue": "true" }, + { + "ParameterKey": "functionfitnesstracker33f5545533f55455PreSignupName", + "ParameterValue": "functionfitnesstracker33f5545533f55455PreSignupName" + }, { "ParameterKey": "usernameCaseSensitive", "ParameterValue": "false" }, { "ParameterKey": "resourceName", - "ParameterValue": "fitnesstracker9ceb2e7c9ceb2e7c" + "ParameterValue": "fitnesstracker33f5545533f55455" }, { "ParameterKey": "env", @@ -145,11 +149,7 @@ }, { "ParameterKey": "unauthRoleArn", - "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole" - }, - { - "ParameterKey": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName", - "ParameterValue": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" + "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-unauthRole" }, { "ParameterKey": "requiredAttributes", @@ -161,7 +161,7 @@ }, { "ParameterKey": "authTriggerConnections", - "ParameterValue": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}" + "ParameterValue": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker33f5545533f55455PreSignup\"}" }, { "ParameterKey": "aliasAttributes", @@ -169,7 +169,7 @@ }, { "ParameterKey": "userpoolClientLambdaRole", - "ParameterValue": "fitnes9ceb2e7c_userpoolclient_lambda_role" + "ParameterValue": "fitnes33f55455_userpoolclient_lambda_role" }, { "ParameterKey": "defaultPasswordPolicy", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.template.json similarity index 81% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.template.json index 54e1b22232a..cf501295b33 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.template.json @@ -1,17 +1,17 @@ { - "Description": "Amplify Cognito Stack for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { "Type": "String" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { + "functionfitnesstracker33f5545533f55455PreSignupArn": { "Type": "String", - "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" + "Default": "functionfitnesstracker33f5545533f55455PreSignupArn" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { + "functionfitnesstracker33f5545533f55455PreSignupName": { "Type": "String", - "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" + "Default": "functionfitnesstracker33f5545533f55455PreSignupName" }, "identityPoolName": { "Type": "String" @@ -180,7 +180,7 @@ "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", + "fitnesstracker33f55455_userpool_33f55455", "-", "main" ] @@ -194,24 +194,24 @@ "UserPoolClientWeb": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes9ceb2e7c_app_clientWeb", + "ClientName": "fitnes33f55455_app_clientWeb", "RefreshTokenValidity": "30", "TokenValidityUnits": { "RefreshToken": "days" }, - "UserPoolId": "us-east-1_LAwe5ZJrw" + "UserPoolId": "us-east-1_iguxCIcMS" } }, "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes9ceb2e7c_app_client", + "ClientName": "fitnes33f55455_app_client", "GenerateSecret": "false", "RefreshTokenValidity": "30", "TokenValidityUnits": { "RefreshToken": "days" }, - "UserPoolId": "us-east-1_LAwe5ZJrw" + "UserPoolId": "us-east-1_iguxCIcMS" } }, "UserPoolClientRole": { @@ -233,14 +233,14 @@ "Fn::Join": [ "", [ - "upClientLambdaRole9ceb2e7c", + "upClientLambdaRole33f55455", { "Fn::Select": [ 3, { "Fn::Split": [ "-", - "amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD" + "amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508" ] } ] @@ -258,7 +258,7 @@ "AllowUnauthenticatedIdentities": "false", "CognitoIdentityProviders": [ { - "ClientId": "12hkvqjabpisei771tiefdhs76", + "ClientId": "3s8jcv7nflisr91emephrr2a9s", "ProviderName": { "Fn::Sub": [ "cognito-idp.${region}.amazonaws.com/${client}", @@ -266,13 +266,13 @@ "region": { "Ref": "AWS::Region" }, - "client": "us-east-1_LAwe5ZJrw" + "client": "us-east-1_iguxCIcMS" } ] } }, { - "ClientId": "4bk8odk8blrf65ptk2dffug25k", + "ClientId": "29bubgvfbbqkp4k60rl7oaqd8s", "ProviderName": { "Fn::Sub": [ "cognito-idp.${region}.amazonaws.com/${client}", @@ -280,7 +280,7 @@ "region": { "Ref": "AWS::Region" }, - "client": "us-east-1_LAwe5ZJrw" + "client": "us-east-1_iguxCIcMS" } ] } @@ -290,7 +290,7 @@ "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", + "fitnesstracker33f55455_identitypool_33f55455__", "main" ] ] @@ -300,7 +300,7 @@ "IdentityPoolRoleMap": { "Type": "AWS::Cognito::IdentityPoolRoleAttachment", "Properties": { - "IdentityPoolId": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d", + "IdentityPoolId": "us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022", "RoleMappings": { "UserPoolClientRoleMapping": { "AmbiguousRoleResolution": "AuthenticatedRole", @@ -311,8 +311,8 @@ "region": { "Ref": "AWS::Region" }, - "userPool": "us-east-1_LAwe5ZJrw", - "client": "12hkvqjabpisei771tiefdhs76" + "userPool": "us-east-1_iguxCIcMS", + "client": "3s8jcv7nflisr91emephrr2a9s" } ] }, @@ -327,8 +327,8 @@ "region": { "Ref": "AWS::Region" }, - "userPool": "us-east-1_LAwe5ZJrw", - "webClient": "4bk8odk8blrf65ptk2dffug25k" + "userPool": "us-east-1_iguxCIcMS", + "webClient": "29bubgvfbbqkp4k60rl7oaqd8s" } ] }, @@ -336,8 +336,8 @@ } }, "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole", - "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-unauthRole", + "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-authRole" } } } @@ -345,29 +345,29 @@ "Outputs": { "IdentityPoolId": { "Description": "Id for the identity pool", - "Value": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d" + "Value": "us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022" }, "IdentityPoolName": { - "Value": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__main" + "Value": "fitnesstracker33f55455_identitypool_33f55455__main" }, "UserPoolId": { "Description": "Id for the user pool", - "Value": "us-east-1_LAwe5ZJrw" + "Value": "us-east-1_iguxCIcMS" }, "UserPoolArn": { "Description": "Arn for the user pool", - "Value": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_LAwe5ZJrw" + "Value": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_iguxCIcMS" }, "UserPoolName": { - "Value": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c" + "Value": "fitnesstracker33f55455_userpool_33f55455" }, "AppClientIDWeb": { "Description": "The user pool app client id for web", - "Value": "4bk8odk8blrf65ptk2dffug25k" + "Value": "29bubgvfbbqkp4k60rl7oaqd8s" }, "AppClientID": { "Description": "The user pool app client id", - "Value": "12hkvqjabpisei771tiefdhs76" + "Value": "3s8jcv7nflisr91emephrr2a9s" } } } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.parameters.json new file mode 100644 index 00000000000..11a65b7a7e8 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.parameters.json @@ -0,0 +1,30 @@ +[ + { + "ParameterKey": "UnauthRoleArn", + "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-unauthRole" + }, + { + "ParameterKey": "authfitnesstracker33f5545533f55455IdentityPoolId", + "ParameterValue": "us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022" + }, + { + "ParameterKey": "AuthRoleArn", + "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-authRole" + }, + { + "ParameterKey": "authfitnesstracker33f5545533f55455UserPoolId", + "ParameterValue": "us-east-1_iguxCIcMS" + }, + { + "ParameterKey": "env", + "ParameterValue": "main" + }, + { + "ParameterKey": "authfitnesstracker33f5545533f55455AppClientIDWeb", + "ParameterValue": "29bubgvfbbqkp4k60rl7oaqd8s" + }, + { + "ParameterKey": "authfitnesstracker33f5545533f55455AppClientID", + "ParameterValue": "3s8jcv7nflisr91emephrr2a9s" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.template.json similarity index 62% rename from amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.template.json index 641c5596807..0b1b48d7a2e 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.template.json @@ -1,5 +1,5 @@ { - "Description": "Root Stack for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito-UserPool-Groups\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { @@ -11,21 +11,21 @@ "UnauthRoleArn": { "Type": "String" }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" }, - "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { + "authfitnesstracker33f5545533f55455IdentityPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" + "Default": "authfitnesstracker33f5545533f55455IdentityPoolId" }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { + "authfitnesstracker33f5545533f55455AppClientID": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID" + "Default": "authfitnesstracker33f5545533f55455AppClientID" }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { + "authfitnesstracker33f5545533f55455AppClientIDWeb": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb" + "Default": "authfitnesstracker33f5545533f55455AppClientIDWeb" } }, "Conditions": { @@ -43,8 +43,8 @@ "Description": "override success", "GroupName": "Admin", "Precedence": 1, - "RoleArn": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole", - "UserPoolId": "us-east-1_LAwe5ZJrw" + "RoleArn": "arn:aws:iam::123456789012:role/us-east-1_iguxCIcMS-AdminGroupRole", + "UserPoolId": "us-east-1_iguxCIcMS" } }, "AdminGroupRole": { @@ -62,7 +62,7 @@ "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { - "cognito-identity.amazonaws.com:aud": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d" + "cognito-identity.amazonaws.com:aud": "us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" @@ -75,7 +75,7 @@ "Fn::Join": [ "", [ - "us-east-1_LAwe5ZJrw", + "us-east-1_iguxCIcMS", "-AdminGroupRole" ] ] @@ -85,7 +85,7 @@ }, "Outputs": { "AdminGroupRole": { - "Value": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole" + "Value": "arn:aws:iam::123456789012:role/us-east-1_iguxCIcMS-AdminGroupRole" } } } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/amplify-meta.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/amplify-meta.json index 96397ae9746..8334327a376 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/amplify-meta.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/amplify-meta.json @@ -1,313 +1,313 @@ { "providers": { "awscloudformation": { - "AuthRoleName": "amplify-fitnesstracker-main-6fc9a-authRole", - "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole", - "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole", + "AuthRoleName": "amplify-fitnesstracker-main-a0537-authRole", + "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-unauthRole", + "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-authRole", "Region": "us-east-1", - "DeploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "UnauthRoleName": "amplify-fitnesstracker-main-6fc9a-unauthRole", - "StackName": "amplify-fitnesstracker-main-6fc9a", - "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a/d1ee9bf0-2590-11f1-8e36-1220ebfe67af", + "DeploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "UnauthRoleName": "amplify-fitnesstracker-main-a0537-unauthRole", + "StackName": "amplify-fitnesstracker-main-a0537", + "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-a0537/1749a530-272d-11f1-a465-0e5f0b5f7853", "AmplifyAppId": "fitnesstracker", - "APIGatewayAuthURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", - "AuthTriggerTemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json" + "APIGatewayAuthURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", + "AuthTriggerTemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json" } }, - "api": { - "adminapi": { + "auth": { + "userPoolGroups": { + "service": "Cognito-UserPool-Groups", + "providerPlugin": "awscloudformation", "dependsOn": [ { - "attributes": [ - "Name", - "Arn" - ], - "category": "function", - "resourceName": "admin" - }, - { - "attributes": [ - "UserPoolId" - ], "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" - }, - { + "resourceName": "fitnesstracker33f5545533f55455", "attributes": [ - "AdminGroupRole" - ], - "category": "auth", - "resourceName": "userPoolGroups" + "UserPoolId", + "AppClientIDWeb", + "AppClientID", + "IdentityPoolId" + ] } ], - "providerPlugin": "awscloudformation", - "service": "API Gateway", - "output": { - "ApiName": "adminapi", - "RootUrl": "https://bbk7dedp01.execute-api.us-east-1.amazonaws.com/main", - "ApiId": "bbk7dedp01" - }, - "lastPushTimeStamp": "2026-03-23T18:51:33.560Z", + "lastPushTimeStamp": "2026-03-24T03:10:58.631Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", - "logicalId": "apiadminapi" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "logicalId": "authuserPoolGroups" }, - "lastPushDirHash": "SI1snudM0j/SqX5HIasSB/7nF3k=" - }, - "fitnesstracker": { - "dependsOn": [ - { - "attributes": [ - "UserPoolId" - ], - "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" - } - ], "output": { - "authConfig": { - "additionalAuthenticationProviders": [ - { - "apiKeyConfig": { - "apiKeyExpirationDate": "2026-03-29T02:07:08.737Z", - "apiKeyExpirationDays": 7, - "description": "graphql" - }, - "authenticationType": "API_KEY" - } - ], - "defaultAuthentication": { - "authenticationType": "AMAZON_COGNITO_USER_POOLS", - "userPoolConfig": { - "userPoolId": "authfitnesstracker9ceb2e7c9ceb2e7c" - } - } - }, - "GraphQLAPIIdOutput": "4ebr7lx7bbhnpeo5dbtcvdajdm", - "GraphQLAPIEndpointOutput": "https://3oyjlwrrofhp7jlc37qna22jva.appsync-api.us-east-1.amazonaws.com/graphql", - "GraphQLAPIKeyOutput": "da2-2kuyxda27ncmpool2a2bjanloy" + "AdminGroupRole": "arn:aws:iam::123456789012:role/us-east-1_iguxCIcMS-AdminGroupRole" }, - "providerPlugin": "awscloudformation", - "service": "AppSync", - "lastPushTimeStamp": "2026-03-23T18:51:33.560Z", - "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/cloudformation-template.json", - "logicalId": "apifitnesstracker" - }, - "lastPushDirHash": "sVImeaG/Q60+Vbb0gARPejjN99o=" + "lastPushDirHash": "5G4uAlMxN8rsFD1jyeLTya9ahFM=" }, - "nutritionapi": { - "dependsOn": [ - { - "attributes": [ - "Name", - "Arn" - ], - "category": "function", - "resourceName": "lognutrition" - }, - { - "attributes": [ - "UserPoolId" - ], - "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" - }, - { - "attributes": [ - "AdminGroupRole" - ], - "category": "auth", - "resourceName": "userPoolGroups" - } - ], + "fitnesstracker33f5545533f55455": { + "service": "Cognito", "providerPlugin": "awscloudformation", - "service": "API Gateway", - "output": { - "ApiName": "nutritionapi", - "RootUrl": "https://ekto8iln0h.execute-api.us-east-1.amazonaws.com/main", - "ApiId": "ekto8iln0h" - }, - "lastPushTimeStamp": "2026-03-23T18:51:33.560Z", - "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", - "logicalId": "apinutritionapi" - }, - "lastPushDirHash": "5JwuGoxSHfV3nT5/dIukaklIOKI=" - } - }, - "auth": { - "fitnesstracker9ceb2e7c9ceb2e7c": { - "customAuth": false, "dependsOn": [ { + "category": "function", + "resourceName": "fitnesstracker33f5545533f55455PreSignup", + "triggerProvider": "Cognito", "attributes": [ "Arn", "Name" - ], - "category": "function", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", - "triggerProvider": "Cognito" + ] } ], + "customAuth": false, "frontendAuthConfig": { - "mfaConfiguration": "OFF", - "mfaTypes": [ - "SMS" + "socialProviders": [], + "usernameAttributes": [], + "signupAttributes": [ + "EMAIL" ], "passwordProtectionSettings": { - "passwordPolicyCharacters": [], - "passwordPolicyMinLength": 8 + "passwordPolicyMinLength": 8, + "passwordPolicyCharacters": [] }, - "signupAttributes": [ - "EMAIL" + "mfaConfiguration": "OFF", + "mfaTypes": [ + "SMS" ], - "socialProviders": [], - "usernameAttributes": [], "verificationMechanisms": [ "EMAIL" ] }, - "providerPlugin": "awscloudformation", - "service": "Cognito", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/fitnesstracker33f5545533f55455-cloudformation-template.json", + "logicalId": "authfitnesstracker33f5545533f55455" + }, + "lastPushTimeStamp": "2026-03-24T03:10:58.631Z", "output": { - "UserPoolId": "us-east-1_LAwe5ZJrw", - "AppClientIDWeb": "4bk8odk8blrf65ptk2dffug25k", - "AppClientID": "12hkvqjabpisei771tiefdhs76", - "IdentityPoolId": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d", - "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_LAwe5ZJrw", - "IdentityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__main", - "UserPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c" + "UserPoolId": "us-east-1_iguxCIcMS", + "AppClientIDWeb": "29bubgvfbbqkp4k60rl7oaqd8s", + "AppClientID": "3s8jcv7nflisr91emephrr2a9s", + "IdentityPoolId": "us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022", + "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_iguxCIcMS", + "IdentityPoolName": "fitnesstracker33f55455_identitypool_33f55455__main", + "UserPoolName": "fitnesstracker33f55455_userpool_33f55455" + }, + "lastPushDirHash": "0UqXAz+SYrchlHkWJtyjmhwNAyw=" + } + }, + "function": { + "fitnesstracker33f5545533f55455PreSignup": { + "build": true, + "providerPlugin": "awscloudformation", + "service": "Lambda", + "lastBuildTimeStamp": "2026-03-24T03:03:03.155Z", + "lastBuildType": "PROD", + "lastPackageTimeStamp": "2026-03-24T03:03:03.215Z", + "distZipFilename": "fitnesstracker33f5545533f55455PreSignup-68374859444c45627749-build.zip", + "s3Bucket": { + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/fitnesstracker33f5545533f55455PreSignup-68374859444c45627749-build.zip" }, - "lastPushTimeStamp": "2026-03-23T18:51:33.560Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json", - "logicalId": "authfitnesstracker9ceb2e7c9ceb2e7c" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json", + "logicalId": "functionfitnesstracker33f5545533f55455PreSignup" }, - "lastPushDirHash": "LHa1sE4caL7GAFx9RONHvmVgPVo=" + "lastPushTimeStamp": "2026-03-24T03:10:58.631Z", + "output": { + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstracker33f5545533f55455PreSignup-main", + "Region": "us-east-1", + "Arn": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker33f5545533f55455PreSignup-main", + "Name": "fitnesstracker33f5545533f55455PreSignup-main", + "LambdaExecutionRole": "fitnesstracker33f5545533f55455PreSignup-main" + }, + "lastPushDirHash": "kHZgvjW478Vk1rWRqWN9hZbma+U=" }, - "userPoolGroups": { + "lognutrition": { + "build": true, + "providerPlugin": "awscloudformation", + "service": "Lambda", "dependsOn": [ { - "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", + "category": "api", + "resourceName": "fitnesstracker", "attributes": [ - "UserPoolId", - "AppClientIDWeb", - "AppClientID", - "IdentityPoolId" + "GraphQLAPIIdOutput" ] } ], - "providerPlugin": "awscloudformation", - "service": "Cognito-UserPool-Groups", - "output": { - "AdminGroupRole": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole" + "lastBuildTimeStamp": "2026-03-24T03:03:04.944Z", + "lastBuildType": "PROD", + "lastPackageTimeStamp": "2026-03-24T03:03:05.883Z", + "distZipFilename": "lognutrition-554b5263566866516c6c-build.zip", + "s3Bucket": { + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip" }, - "lastPushTimeStamp": "2026-03-23T18:51:33.560Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", - "logicalId": "authuserPoolGroups" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "logicalId": "functionlognutrition" }, - "lastPushDirHash": "5G4uAlMxN8rsFD1jyeLTya9ahFM=" - } - }, - "function": { + "lastPushTimeStamp": "2026-03-24T03:10:58.631Z", + "output": { + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole2824d4b4-main", + "Region": "us-east-1", + "Arn": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-main", + "Name": "lognutrition-main", + "LambdaExecutionRole": "fitnesstrackerLambdaRole2824d4b4-main" + }, + "lastPushDirHash": "KAgg7Tg7xQWrkPA+Y7AX2th1kaI=" + }, "admin": { "build": true, + "providerPlugin": "awscloudformation", + "service": "Lambda", "dependsOn": [ { + "category": "auth", + "resourceName": "fitnesstracker33f5545533f55455", "attributes": [ "UserPoolId" - ], - "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" + ] } ], - "providerPlugin": "awscloudformation", - "service": "Lambda", - "output": { - "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole64f55d16-main", - "Region": "us-east-1", - "Arn": "arn:aws:lambda:us-east-1:123456789012:function:admin-main", - "Name": "admin-main", - "LambdaExecutionRole": "fitnesstrackerLambdaRole64f55d16-main" + "lastBuildTimeStamp": "2026-03-24T03:03:08.363Z", + "lastBuildType": "PROD", + "lastPackageTimeStamp": "2026-03-24T03:03:14.781Z", + "distZipFilename": "admin-7934694b6d366c486d32-build.zip", + "s3Bucket": { + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/admin-7934694b6d366c486d32-build.zip" }, - "lastPushTimeStamp": "2026-03-23T18:51:33.560Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", "logicalId": "functionadmin" }, - "s3Bucket": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/admin-765632787437744e386e-build.zip" + "lastPushTimeStamp": "2026-03-24T03:10:58.631Z", + "output": { + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole4a08108a-main", + "Region": "us-east-1", + "Arn": "arn:aws:lambda:us-east-1:123456789012:function:admin-main", + "Name": "admin-main", + "LambdaExecutionRole": "fitnesstrackerLambdaRole4a08108a-main" }, - "lastBuildTimeStamp": "2026-03-23T18:49:08.046Z", - "lastBuildType": "PROD", - "lastPackageTimeStamp": "2026-03-23T18:49:10.871Z", - "distZipFilename": "admin-765632787437744e386e-build.zip", - "lastPushDirHash": "slgY/GyKAD6Yg8mD7maeOXp9x1k=" - }, - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup": { - "build": true, + "lastPushDirHash": "20iOEIOvyMwayeWUC08s9NsJkTA=" + } + }, + "api": { + "fitnesstracker": { + "service": "AppSync", "providerPlugin": "awscloudformation", - "service": "Lambda", + "dependsOn": [ + { + "category": "auth", + "resourceName": "fitnesstracker33f5545533f55455", + "attributes": [ + "UserPoolId" + ] + } + ], "output": { - "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main", - "Region": "us-east-1", - "Arn": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main", - "Name": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main", - "LambdaExecutionRole": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" + "authConfig": { + "defaultAuthentication": { + "authenticationType": "AMAZON_COGNITO_USER_POOLS", + "userPoolConfig": { + "userPoolId": "authfitnesstracker33f5545533f55455" + } + }, + "additionalAuthenticationProviders": [ + { + "authenticationType": "API_KEY", + "apiKeyConfig": { + "apiKeyExpirationDays": 7, + "apiKeyExpirationDate": "2026-03-31T02:59:49.009Z", + "description": "graphql" + } + } + ] + }, + "GraphQLAPIIdOutput": "jzwb5p2vcbd2ldlnlxokgjcjby", + "GraphQLAPIEndpointOutput": "https://lqftdnws2zb75jcuwdcmx23wdi.appsync-api.us-east-1.amazonaws.com/graphql", + "GraphQLAPIKeyOutput": "da2-fakeapikey00000000000000" }, - "lastPushTimeStamp": "2026-03-23T18:51:33.560Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json", - "logicalId": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup" - }, - "s3Bucket": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/cloudformation-template.json", + "logicalId": "apifitnesstracker" }, - "lastBuildTimeStamp": "2026-03-23T18:49:12.334Z", - "lastBuildType": "PROD", - "lastPackageTimeStamp": "2026-03-23T18:49:12.345Z", - "distZipFilename": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip", - "lastPushDirHash": "qol/s4yC6lAAoI+0jAPoRyuH394=" + "lastPushTimeStamp": "2026-03-24T03:10:58.631Z", + "lastPushDirHash": "RCtlX/RFS23/RTpTpKEuv4XLh08=" }, - "lognutrition": { - "build": true, + "nutritionapi": { + "service": "API Gateway", + "providerPlugin": "awscloudformation", "dependsOn": [ { + "category": "function", + "resourceName": "lognutrition", "attributes": [ - "GraphQLAPIIdOutput" - ], - "category": "api", - "resourceName": "fitnesstracker" + "Name", + "Arn" + ] + }, + { + "category": "auth", + "resourceName": "fitnesstracker33f5545533f55455", + "attributes": [ + "UserPoolId" + ] + }, + { + "category": "auth", + "resourceName": "userPoolGroups", + "attributes": [ + "AdminGroupRole" + ] } ], - "providerPlugin": "awscloudformation", - "service": "Lambda", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", + "logicalId": "apinutritionapi" + }, + "lastPushTimeStamp": "2026-03-24T03:10:58.631Z", "output": { - "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole8dc6052c-main", - "Region": "us-east-1", - "Arn": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-main", - "Name": "lognutrition-main", - "LambdaExecutionRole": "fitnesstrackerLambdaRole8dc6052c-main" + "ApiName": "nutritionapi", + "RootUrl": "https://hmydcaubcb.execute-api.us-east-1.amazonaws.com/main", + "ApiId": "hmydcaubcb" }, - "lastPushTimeStamp": "2026-03-23T18:51:33.560Z", + "lastPushDirHash": "5JwuGoxSHfV3nT5/dIukaklIOKI=" + }, + "adminapi": { + "service": "API Gateway", + "providerPlugin": "awscloudformation", + "dependsOn": [ + { + "category": "function", + "resourceName": "admin", + "attributes": [ + "Name", + "Arn" + ] + }, + { + "category": "auth", + "resourceName": "fitnesstracker33f5545533f55455", + "attributes": [ + "UserPoolId" + ] + }, + { + "category": "auth", + "resourceName": "userPoolGroups", + "attributes": [ + "AdminGroupRole" + ] + } + ], "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", - "logicalId": "functionlognutrition" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", + "logicalId": "apiadminapi" }, - "s3Bucket": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip" + "lastPushTimeStamp": "2026-03-24T03:10:58.631Z", + "output": { + "ApiName": "adminapi", + "RootUrl": "https://oxq86r59h6.execute-api.us-east-1.amazonaws.com/main", + "ApiId": "oxq86r59h6" }, - "lastBuildTimeStamp": "2026-03-23T18:49:13.048Z", - "lastBuildType": "PROD", - "lastPackageTimeStamp": "2026-03-23T18:49:13.590Z", - "distZipFilename": "lognutrition-554b5263566866516c6c-build.zip", - "lastPushDirHash": "cvWf4K5nJd9hIYUUzDbXROaTzek=" + "lastPushDirHash": "SI1snudM0j/SqX5HIasSB/7nF3k=" } } } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/adminapi/build/adminapi-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/adminapi/build/adminapi-cloudformation-template.json index fe0413d381e..63a8fcdb155 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/adminapi/build/adminapi-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/adminapi/build/adminapi-cloudformation-template.json @@ -1,10 +1,10 @@ { - "Description": "API Gateway Resource for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-API Gateway\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -104,7 +104,7 @@ "-", [ { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" }, "AdminGroupRole" ] @@ -426,7 +426,7 @@ "Name": "adminapi" } }, - "adminapiDefault4XXResponsec0c67e32": { + "adminapiDefault4XXResponse0e27c647": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -441,7 +441,7 @@ } } }, - "adminapiDefault5XXResponsec0c67e32": { + "adminapiDefault5XXResponse0e27c647": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -456,7 +456,7 @@ } } }, - "DeploymentAPIGWadminapia8449e95": { + "DeploymentAPIGWadminapiad7711e6": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -474,8 +474,8 @@ } }, "DependsOn": [ - "adminapiDefault4XXResponsec0c67e32", - "adminapiDefault5XXResponsec0c67e32" + "adminapiDefault4XXResponse0e27c647", + "adminapiDefault5XXResponse0e27c647" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/cloudformation-template.json index 521e37ff3e1..cd07bb81a76 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/cloudformation-template.json @@ -1,608 +1,609 @@ { - "Parameters": { - "env": { - "Type": "String", - "Default": "NONE" - }, - "AppSyncApiName": { - "Type": "String", - "Default": "AppSyncSimpleTransform" - }, - "AuthCognitoUserPoolId": { - "Type": "String" - }, - "DynamoDBModelTableReadIOPS": { - "Type": "Number", - "Default": 5, - "Description": "The number of read IOPS the table should support." - }, - "DynamoDBModelTableWriteIOPS": { - "Type": "Number", - "Default": 5, - "Description": "The number of write IOPS the table should support." - }, - "DynamoDBBillingMode": { - "Type": "String", - "Default": "PAY_PER_REQUEST", - "AllowedValues": [ - "PAY_PER_REQUEST", - "PROVISIONED" - ], - "Description": "Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes." - }, - "DynamoDBEnablePointInTimeRecovery": { - "Type": "String", - "Default": "false", - "AllowedValues": [ - "true", - "false" - ], - "Description": "Whether to enable Point in Time Recovery on the table." - }, - "DynamoDBEnableServerSideEncryption": { - "Type": "String", - "Default": "true", - "AllowedValues": [ - "true", - "false" - ], - "Description": "Enable server side encryption powered by KMS." - }, - "S3DeploymentBucket": { - "Type": "String", - "Description": "An S3 Bucket name where assets are deployed" + "Parameters": { + "env": { + "Type": "String", + "Default": "NONE" + }, + "AppSyncApiName": { + "Type": "String", + "Default": "AppSyncSimpleTransform" + }, + "AuthCognitoUserPoolId": { + "Type": "String" + }, + "DynamoDBModelTableReadIOPS": { + "Type": "Number", + "Default": 5, + "Description": "The number of read IOPS the table should support." + }, + "DynamoDBModelTableWriteIOPS": { + "Type": "Number", + "Default": 5, + "Description": "The number of write IOPS the table should support." + }, + "DynamoDBBillingMode": { + "Type": "String", + "Default": "PAY_PER_REQUEST", + "AllowedValues": [ + "PAY_PER_REQUEST", + "PROVISIONED" + ], + "Description": "Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes." + }, + "DynamoDBEnablePointInTimeRecovery": { + "Type": "String", + "Default": "false", + "AllowedValues": [ + "true", + "false" + ], + "Description": "Whether to enable Point in Time Recovery on the table." + }, + "DynamoDBEnableServerSideEncryption": { + "Type": "String", + "Default": "true", + "AllowedValues": [ + "true", + "false" + ], + "Description": "Enable server side encryption powered by KMS." + }, + "S3DeploymentBucket": { + "Type": "String", + "Description": "An S3 Bucket name where assets are deployed" + }, + "S3DeploymentRootKey": { + "Type": "String", + "Description": "An S3 key relative to the S3DeploymentBucket that points to the root of the deployment directory." + } + }, + "Resources": { + "GraphQLAPI": { + "Type": "AWS::AppSync::GraphQLApi", + "Properties": { + "AdditionalAuthenticationProviders": [ + { + "AuthenticationType": "API_KEY" + } + ], + "AuthenticationType": "AMAZON_COGNITO_USER_POOLS", + "Name": { + "Fn::Join": [ + "", + [ + { + "Ref": "AppSyncApiName" + }, + "-", + { + "Ref": "env" + } + ] + ] }, - "S3DeploymentRootKey": { - "Type": "String", - "Description": "An S3 key relative to the S3DeploymentBucket that points to the root of the deployment directory." + "UserPoolConfig": { + "AwsRegion": { + "Ref": "AWS::Region" + }, + "DefaultAction": "ALLOW", + "UserPoolId": { + "Ref": "AuthCognitoUserPoolId" + } } + } }, - "Resources": { - "GraphQLAPI": { - "Type": "AWS::AppSync::GraphQLApi", - "Properties": { - "AdditionalAuthenticationProviders": [ - { - "AuthenticationType": "API_KEY" - } - ], - "AuthenticationType": "AMAZON_COGNITO_USER_POOLS", - "Name": { - "Fn::Join": [ - "", - [ - { - "Ref": "AppSyncApiName" - }, - "-", - { - "Ref": "env" - } - ] - ] - }, - "UserPoolConfig": { - "AwsRegion": { - "Ref": "AWS::Region" - }, - "DefaultAction": "ALLOW", - "UserPoolId": { - "Ref": "AuthCognitoUserPoolId" - } - } - } - }, - "GraphQLAPITransformerSchema3CB2AE18": { - "Type": "AWS::AppSync::GraphQLSchema", - "Properties": { - "ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "DefinitionS3Location": { - "Fn::Join": [ - "", - [ - "s3://", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/schema.graphql" - ] - ] - } - } + "GraphQLAPITransformerSchema3CB2AE18": { + "Type": "AWS::AppSync::GraphQLSchema", + "Properties": { + "ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] }, - "GraphQLAPIDefaultApiKey215A6DD7": { - "Type": "AWS::AppSync::ApiKey", - "Properties": { - "ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "Description": "graphql", - "Expires": 1774896554 - } + "DefinitionS3Location": { + "Fn::Join": [ + "", + [ + "s3://", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/schema.graphql" + ] + ] + } + } + }, + "GraphQLAPIDefaultApiKey215A6DD7": { + "Type": "AWS::AppSync::ApiKey", + "Properties": { + "ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] }, - "GraphQLAPINONEDS95A13CF0": { - "Type": "AWS::AppSync::DataSource", - "Properties": { - "ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "Description": "None Data Source for Pipeline functions", - "Name": "NONE_DS", - "Type": "NONE" - } + "Description": "graphql", + "Expires": 1774926196 + } + }, + "GraphQLAPINONEDS95A13CF0": { + "Type": "AWS::AppSync::DataSource", + "Properties": { + "ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] }, - "WorkoutProgram": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "DynamoDBModelTableReadIOPS": { - "Ref": "DynamoDBModelTableReadIOPS" - }, - "DynamoDBModelTableWriteIOPS": { - "Ref": "DynamoDBModelTableWriteIOPS" - }, - "DynamoDBBillingMode": { - "Ref": "DynamoDBBillingMode" - }, - "DynamoDBEnablePointInTimeRecovery": { - "Ref": "DynamoDBEnablePointInTimeRecovery" - }, - "DynamoDBEnableServerSideEncryption": { - "Ref": "DynamoDBEnableServerSideEncryption" - }, - "referencetotransformerrootstackenv10C5A902Ref": { - "Ref": "env" - }, - "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { - "Fn::GetAtt": [ - "GraphQLAPINONEDS95A13CF0", - "Name" - ] - }, - "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { - "Ref": "S3DeploymentBucket" - }, - "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { - "Ref": "S3DeploymentRootKey" - } - }, - "TemplateURL": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/stacks/WorkoutProgram.json" - ] - ] - } - }, - "DependsOn": [ - "GraphQLAPITransformerSchema3CB2AE18" + "Description": "None Data Source for Pipeline functions", + "Name": "NONE_DS", + "Type": "NONE" + } + }, + "WorkoutProgram": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "DynamoDBModelTableReadIOPS": { + "Ref": "DynamoDBModelTableReadIOPS" + }, + "DynamoDBModelTableWriteIOPS": { + "Ref": "DynamoDBModelTableWriteIOPS" + }, + "DynamoDBBillingMode": { + "Ref": "DynamoDBBillingMode" + }, + "DynamoDBEnablePointInTimeRecovery": { + "Ref": "DynamoDBEnablePointInTimeRecovery" + }, + "DynamoDBEnableServerSideEncryption": { + "Ref": "DynamoDBEnableServerSideEncryption" + }, + "referencetotransformerrootstackenv10C5A902Ref": { + "Ref": "env" + }, + "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" ] - }, - "Exercise": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "DynamoDBModelTableReadIOPS": { - "Ref": "DynamoDBModelTableReadIOPS" - }, - "DynamoDBModelTableWriteIOPS": { - "Ref": "DynamoDBModelTableWriteIOPS" - }, - "DynamoDBBillingMode": { - "Ref": "DynamoDBBillingMode" - }, - "DynamoDBEnablePointInTimeRecovery": { - "Ref": "DynamoDBEnablePointInTimeRecovery" - }, - "DynamoDBEnableServerSideEncryption": { - "Ref": "DynamoDBEnableServerSideEncryption" - }, - "referencetotransformerrootstackenv10C5A902Ref": { - "Ref": "env" - }, - "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { - "Ref": "S3DeploymentBucket" - }, - "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { - "Ref": "S3DeploymentRootKey" - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId" - ] - }, - "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { - "Fn::GetAtt": [ - "GraphQLAPINONEDS95A13CF0", - "Name" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncF52D36F4F": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncFunction55BF88AFFunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId" - ] - } - }, - "TemplateURL": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/stacks/Exercise.json" - ] - ] - } - }, - "DependsOn": [ - "GraphQLAPITransformerSchema3CB2AE18" + }, + "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { + "Fn::GetAtt": [ + "GraphQLAPINONEDS95A13CF0", + "Name" ] + }, + "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { + "Ref": "S3DeploymentBucket" + }, + "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { + "Ref": "S3DeploymentRootKey" + } }, - "Meal": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "DynamoDBModelTableReadIOPS": { - "Ref": "DynamoDBModelTableReadIOPS" - }, - "DynamoDBModelTableWriteIOPS": { - "Ref": "DynamoDBModelTableWriteIOPS" - }, - "DynamoDBBillingMode": { - "Ref": "DynamoDBBillingMode" - }, - "DynamoDBEnablePointInTimeRecovery": { - "Ref": "DynamoDBEnablePointInTimeRecovery" - }, - "DynamoDBEnableServerSideEncryption": { - "Ref": "DynamoDBEnableServerSideEncryption" - }, - "referencetotransformerrootstackenv10C5A902Ref": { - "Ref": "env" - }, - "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { - "Fn::GetAtt": [ - "GraphQLAPINONEDS95A13CF0", - "Name" - ] - }, - "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { - "Ref": "S3DeploymentBucket" - }, - "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { - "Ref": "S3DeploymentRootKey" - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId" - ] - } - }, - "TemplateURL": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/stacks/Meal.json" - ] - ] - } - }, - "DependsOn": [ - "GraphQLAPITransformerSchema3CB2AE18" + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/stacks/WorkoutProgram.json" + ] + ] + } + }, + "DependsOn": [ + "GraphQLAPITransformerSchema3CB2AE18" + ] + }, + "Exercise": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "DynamoDBModelTableReadIOPS": { + "Ref": "DynamoDBModelTableReadIOPS" + }, + "DynamoDBModelTableWriteIOPS": { + "Ref": "DynamoDBModelTableWriteIOPS" + }, + "DynamoDBBillingMode": { + "Ref": "DynamoDBBillingMode" + }, + "DynamoDBEnablePointInTimeRecovery": { + "Ref": "DynamoDBEnablePointInTimeRecovery" + }, + "DynamoDBEnableServerSideEncryption": { + "Ref": "DynamoDBEnableServerSideEncryption" + }, + "referencetotransformerrootstackenv10C5A902Ref": { + "Ref": "env" + }, + "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { + "Ref": "S3DeploymentBucket" + }, + "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { + "Ref": "S3DeploymentRootKey" + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId" + ] + }, + "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { + "Fn::GetAtt": [ + "GraphQLAPINONEDS95A13CF0", + "Name" ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncF52D36F4F": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncFunction55BF88AFFunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId" + ] + } }, - "ConnectionStack": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { - "Fn::GetAtt": [ - "GraphQLAPINONEDS95A13CF0", - "Name" - ] - }, - "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { - "Ref": "S3DeploymentBucket" - }, - "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { - "Ref": "S3DeploymentRootKey" - }, - "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseDataSourceE8B787D0Name": { - "Fn::GetAtt": [ - "Exercise", - "Outputs.transformerrootstackExerciseExerciseDataSourceE8B787D0Name" - ] - }, - "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseTable2F3E478ERef": { - "Fn::GetAtt": [ - "Exercise", - "Outputs.transformerrootstackExerciseExerciseTable2F3E478ERef" - ] - } - }, - "TemplateURL": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/stacks/ConnectionStack.json" - ] - ] - } - }, - "DependsOn": [ - "Exercise", - "GraphQLAPITransformerSchema3CB2AE18" + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/stacks/Exercise.json" + ] + ] + } + }, + "DependsOn": [ + "GraphQLAPITransformerSchema3CB2AE18" + ] + }, + "Meal": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "DynamoDBModelTableReadIOPS": { + "Ref": "DynamoDBModelTableReadIOPS" + }, + "DynamoDBModelTableWriteIOPS": { + "Ref": "DynamoDBModelTableWriteIOPS" + }, + "DynamoDBBillingMode": { + "Ref": "DynamoDBBillingMode" + }, + "DynamoDBEnablePointInTimeRecovery": { + "Ref": "DynamoDBEnablePointInTimeRecovery" + }, + "DynamoDBEnableServerSideEncryption": { + "Ref": "DynamoDBEnableServerSideEncryption" + }, + "referencetotransformerrootstackenv10C5A902Ref": { + "Ref": "env" + }, + "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" ] + }, + "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { + "Fn::GetAtt": [ + "GraphQLAPINONEDS95A13CF0", + "Name" + ] + }, + "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { + "Ref": "S3DeploymentBucket" + }, + "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { + "Ref": "S3DeploymentRootKey" + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId" + ] + } }, - "CustomResourcesjson": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "AppSyncApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "AppSyncApiName": { - "Ref": "AppSyncApiName" - }, - "env": { - "Ref": "env" - }, - "S3DeploymentBucket": { - "Ref": "S3DeploymentBucket" - }, - "S3DeploymentRootKey": { - "Ref": "S3DeploymentRootKey" - } - }, - "TemplateURL": { - "Fn::Join": [ - "/", - [ - "https://s3.amazonaws.com", - { - "Ref": "S3DeploymentBucket" - }, - { - "Ref": "S3DeploymentRootKey" - }, - "stacks", - "CustomResources.json" - ] - ] - } - }, - "DependsOn": [ - "GraphQLAPI", - "GraphQLAPITransformerSchema3CB2AE18", - "WorkoutProgram", - "Exercise", - "Meal", - "ConnectionStack" + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/stacks/Meal.json" ] + ] } + }, + "DependsOn": [ + "GraphQLAPITransformerSchema3CB2AE18" + ] }, - "Outputs": { - "GraphQLAPIKeyOutput": { - "Description": "Your GraphQL API ID.", - "Value": { - "Fn::GetAtt": [ - "GraphQLAPIDefaultApiKey215A6DD7", - "ApiKey" - ] - }, - "Export": { - "Name": { - "Fn::Join": [ - ":", - [ - { - "Ref": "AWS::StackName" - }, - "GraphQLApiKey" - ] - ] - } - } + "ConnectionStack": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { + "Fn::GetAtt": [ + "GraphQLAPINONEDS95A13CF0", + "Name" + ] + }, + "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { + "Ref": "S3DeploymentBucket" + }, + "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { + "Ref": "S3DeploymentRootKey" + }, + "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseDataSourceE8B787D0Name": { + "Fn::GetAtt": [ + "Exercise", + "Outputs.transformerrootstackExerciseExerciseDataSourceE8B787D0Name" + ] + }, + "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseTable2F3E478ERef": { + "Fn::GetAtt": [ + "Exercise", + "Outputs.transformerrootstackExerciseExerciseTable2F3E478ERef" + ] + } }, - "GraphQLAPIIdOutput": { - "Description": "Your GraphQL API ID.", - "Value": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "Export": { - "Name": { - "Fn::Join": [ - ":", - [ - { - "Ref": "AWS::StackName" - }, - "GraphQLApiId" - ] - ] - } - } + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/stacks/ConnectionStack.json" + ] + ] + } + }, + "DependsOn": [ + "Exercise", + "GraphQLAPITransformerSchema3CB2AE18" + ] + }, + "CustomResourcesjson": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "AppSyncApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "AppSyncApiName": { + "Ref": "AppSyncApiName" + }, + "env": { + "Ref": "env" + }, + "S3DeploymentBucket": { + "Ref": "S3DeploymentBucket" + }, + "S3DeploymentRootKey": { + "Ref": "S3DeploymentRootKey" + } }, - "GraphQLAPIEndpointOutput": { - "Description": "Your GraphQL API endpoint.", - "Value": { - "Fn::GetAtt": [ - "GraphQLAPI", - "GraphQLUrl" - ] - }, - "Export": { - "Name": { - "Fn::Join": [ - ":", - [ - { - "Ref": "AWS::StackName" - }, - "GraphQLApiEndpoint" - ] - ] - } - } + "TemplateURL": { + "Fn::Join": [ + "/", + [ + "https://s3.amazonaws.com", + { + "Ref": "S3DeploymentBucket" + }, + { + "Ref": "S3DeploymentRootKey" + }, + "stacks", + "CustomResources.json" + ] + ] + } + }, + "DependsOn": [ + "GraphQLAPI", + "GraphQLAPITransformerSchema3CB2AE18", + "WorkoutProgram", + "Exercise", + "Meal", + "ConnectionStack" + ] + } + }, + "Outputs": { + "GraphQLAPIKeyOutput": { + "Description": "Your GraphQL API ID.", + "Value": { + "Fn::GetAtt": [ + "GraphQLAPIDefaultApiKey215A6DD7", + "ApiKey" + ] + }, + "Export": { + "Name": { + "Fn::Join": [ + ":", + [ + { + "Ref": "AWS::StackName" + }, + "GraphQLApiKey" + ] + ] + } + } + }, + "GraphQLAPIIdOutput": { + "Description": "Your GraphQL API ID.", + "Value": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "Export": { + "Name": { + "Fn::Join": [ + ":", + [ + { + "Ref": "AWS::StackName" + }, + "GraphQLApiId" + ] + ] + } + } + }, + "GraphQLAPIEndpointOutput": { + "Description": "Your GraphQL API endpoint.", + "Value": { + "Fn::GetAtt": [ + "GraphQLAPI", + "GraphQLUrl" + ] + }, + "Export": { + "Name": { + "Fn::Join": [ + ":", + [ + { + "Ref": "AWS::StackName" + }, + "GraphQLApiEndpoint" + ] + ] } + } } + }, + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-AppSync\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/parameters.json index 8cb3b427185..42555b61e79 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/parameters.json @@ -4,10 +4,10 @@ "DynamoDBEnableServerSideEncryption": false, "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, - "S3DeploymentBucket": "amplify-fitnesstracker-main-6fc9a-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa" + "S3DeploymentBucket": "amplify-fitnesstracker-main-a0537-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/67310f5f0a68cc163f9cc58da56e1409a2c21b1d" } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/ConnectionStack.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/ConnectionStack.json index a407b2cb80e..37b698b468d 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/ConnectionStack.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/ConnectionStack.json @@ -111,7 +111,7 @@ { "Ref": "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseTable2F3E478ERef" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/Exercise.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/Exercise.json index a9eeaa78710..cc800da40df 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/Exercise.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/Exercise.json @@ -503,7 +503,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -598,7 +598,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -729,7 +729,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -881,7 +881,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1030,7 +1030,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1067,7 +1067,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1104,7 +1104,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1141,7 +1141,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1172,7 +1172,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/Meal.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/Meal.json index 1f6a60f3fb6..ee4ac331787 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/Meal.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/Meal.json @@ -482,7 +482,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -580,7 +580,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -711,7 +711,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -863,7 +863,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1012,7 +1012,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1082,7 +1082,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1122,7 +1122,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1162,7 +1162,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/WorkoutProgram.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/WorkoutProgram.json index d65c9f90968..8d494295f5d 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/WorkoutProgram.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/build/stacks/WorkoutProgram.json @@ -503,7 +503,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -604,7 +604,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -771,7 +771,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -959,7 +959,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1111,7 +1111,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1232,7 +1232,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1278,7 +1278,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1324,7 +1324,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1403,7 +1403,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/cli-inputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/cli-inputs.json index 06b33fdf9b2..848a1768ba9 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/cli-inputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/cli-inputs.json @@ -5,13 +5,13 @@ "serviceName": "AppSync", "defaultAuthType": { "mode": "AMAZON_COGNITO_USER_POOLS", - "cognitoUserPoolId": "authfitnesstracker9ceb2e7c9ceb2e7c" + "cognitoUserPoolId": "authfitnesstracker33f5545533f55455" }, "additionalAuthTypes": [ { "mode": "API_KEY", "expirationTime": 7, - "apiKeyExpirationDate": "2026-03-29T02:07:08.737Z", + "apiKeyExpirationDate": "2026-03-31T02:59:49.009Z", "keyDescription": "graphql" } ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/parameters.json index dd8ecd65ac8..72d6b16ab57 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/fitnesstracker/parameters.json @@ -4,7 +4,7 @@ "DynamoDBEnableServerSideEncryption": false, "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/nutritionapi/build/nutritionapi-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/nutritionapi/build/nutritionapi-cloudformation-template.json index 1c507689fc5..ba07311cb22 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/nutritionapi/build/nutritionapi-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/api/nutritionapi/build/nutritionapi-cloudformation-template.json @@ -1,10 +1,10 @@ { - "Description": "API Gateway Resource for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-API Gateway\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -344,7 +344,7 @@ "-", [ { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" }, "AdminGroupRole" ] @@ -666,7 +666,7 @@ "Name": "nutritionapi" } }, - "nutritionapiDefault4XXResponse59a22bc9": { + "nutritionapiDefault4XXResponsef55128fc": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -681,7 +681,7 @@ } } }, - "nutritionapiDefault5XXResponse59a22bc9": { + "nutritionapiDefault5XXResponsef55128fc": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -696,7 +696,7 @@ } } }, - "DeploymentAPIGWnutritionapifc67c40b": { + "DeploymentAPIGWnutritionapi5caf0abc": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -714,8 +714,8 @@ } }, "DependsOn": [ - "nutritionapiDefault4XXResponse59a22bc9", - "nutritionapiDefault5XXResponse59a22bc9" + "nutritionapiDefault4XXResponsef55128fc", + "nutritionapiDefault5XXResponsef55128fc" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/auth-trigger-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker33f5545533f55455/build/auth-trigger-cloudformation-template.json similarity index 94% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/auth-trigger-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker33f5545533f55455/build/auth-trigger-cloudformation-template.json index 3123ddd2a0b..3d97c0ff654 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/auth-trigger-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker33f5545533f55455/build/auth-trigger-cloudformation-template.json @@ -11,13 +11,13 @@ "userpoolArn": { "Type": "String" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { + "functionfitnesstracker33f5545533f55455PreSignupName": { "Type": "String" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { + "functionfitnesstracker33f5545533f55455PreSignupArn": { "Type": "String" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole": { + "functionfitnesstracker33f5545533f55455PreSignupLambdaExecutionRole": { "Type": "String" } }, @@ -37,7 +37,7 @@ "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" + "Ref": "functionfitnesstracker33f5545533f55455PreSignupName" }, "Principal": "cognito-idp.amazonaws.com", "SourceArn": { @@ -137,13 +137,13 @@ "lambdaConfig": [ { "triggerType": "PreSignUp", - "lambdaFunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "lambdaFunctionName": "fitnesstracker33f5545533f55455PreSignup", "lambdaFunctionArn": { - "Ref": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" + "Ref": "functionfitnesstracker33f5545533f55455PreSignupArn" } } ], - "nonce": "582f2307-255c-4c76-8d0e-f9ee3bd19136" + "nonce": "ce3e930d-07f8-4cb9-a927-2ce7de23494f" }, "DependsOn": [ "authTriggerFn7FCFA449", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker33f5545533f55455/build/fitnesstracker33f5545533f55455-cloudformation-template.json similarity index 93% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker33f5545533f55455/build/fitnesstracker33f5545533f55455-cloudformation-template.json index 79def9e5efb..f5ed153a8fe 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker33f5545533f55455/build/fitnesstracker33f5545533f55455-cloudformation-template.json @@ -1,17 +1,17 @@ { - "Description": "Amplify Cognito Stack for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { "Type": "String" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { + "functionfitnesstracker33f5545533f55455PreSignupArn": { "Type": "String", - "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" + "Default": "functionfitnesstracker33f5545533f55455PreSignupArn" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { + "functionfitnesstracker33f5545533f55455PreSignupName": { "Type": "String", - "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" + "Default": "functionfitnesstracker33f5545533f55455PreSignupName" }, "identityPoolName": { "Type": "String" @@ -216,7 +216,7 @@ "UserPoolClientWeb": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes9ceb2e7c_app_clientWeb", + "ClientName": "fitnes33f55455_app_clientWeb", "RefreshTokenValidity": { "Ref": "userpoolClientRefreshTokenValidity" }, @@ -234,7 +234,7 @@ "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes9ceb2e7c_app_client", + "ClientName": "fitnes33f55455_app_client", "GenerateSecret": { "Ref": "userpoolClientGenerateSecret" }, @@ -277,7 +277,7 @@ "Fn::Join": [ "", [ - "upClientLambdaRole9ceb2e7c", + "upClientLambdaRole33f55455", { "Fn::Select": [ 3, @@ -349,12 +349,12 @@ "IdentityPoolName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", + "fitnesstracker33f55455_identitypool_33f55455", { "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", + "fitnesstracker33f55455_identitypool_33f55455__", { "Ref": "env" } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker33f5545533f55455/build/parameters.json similarity index 79% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker33f5545533f55455/build/parameters.json index b80b3f56b64..41d861ce59c 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker33f5545533f55455/build/parameters.json @@ -1,8 +1,8 @@ { - "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", + "identityPoolName": "fitnesstracker33f55455_identitypool_33f55455", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes9ceb2e7c", - "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", + "resourceNameTruncated": "fitnes33f55455", + "userPoolName": "fitnesstracker33f55455_userpool_33f55455", "autoVerifiedAttributes": [ "email" ], @@ -29,10 +29,10 @@ "userpoolClientReadAttributes": [ "email" ], - "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes33f55455_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "9ceb2e7c", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", + "sharedId": "33f55455", + "resourceName": "fitnesstracker33f5545533f55455", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -62,7 +62,7 @@ "dependsOn": [ { "category": "function", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "resourceName": "fitnesstracker33f5545533f55455PreSignup", "triggerProvider": "Cognito", "attributes": [ "Arn", @@ -72,6 +72,6 @@ ], "permissions": [], "authTriggerConnections": [ - "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}" + "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker33f5545533f55455PreSignup\"}" ] } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/cli-inputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker33f5545533f55455/cli-inputs.json similarity index 80% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/cli-inputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker33f5545533f55455/cli-inputs.json index 81dda741522..f8ecf9a776f 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/cli-inputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker33f5545533f55455/cli-inputs.json @@ -1,10 +1,10 @@ { "version": "1", "cognitoConfig": { - "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", + "identityPoolName": "fitnesstracker33f55455_identitypool_33f55455", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes9ceb2e7c", - "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", + "resourceNameTruncated": "fitnes33f55455", + "userPoolName": "fitnesstracker33f55455_userpool_33f55455", "autoVerifiedAttributes": [ "email" ], @@ -31,10 +31,10 @@ "userpoolClientReadAttributes": [ "email" ], - "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes33f55455_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "9ceb2e7c", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", + "sharedId": "33f55455", + "resourceName": "fitnesstracker33f5545533f55455", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json index 12c7040bd48..e34b9d7bd14 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json @@ -1,5 +1,5 @@ { - "Description": "Root Stack for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito-UserPool-Groups\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { @@ -11,21 +11,21 @@ "UnauthRoleArn": { "Type": "String" }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" }, - "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { + "authfitnesstracker33f5545533f55455IdentityPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" + "Default": "authfitnesstracker33f5545533f55455IdentityPoolId" }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { + "authfitnesstracker33f5545533f55455AppClientID": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID" + "Default": "authfitnesstracker33f5545533f55455AppClientID" }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { + "authfitnesstracker33f5545533f55455AppClientIDWeb": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb" + "Default": "authfitnesstracker33f5545533f55455AppClientIDWeb" } }, "Conditions": { @@ -52,7 +52,7 @@ ] }, "UserPoolId": { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" } } }, @@ -72,7 +72,7 @@ "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" + "Ref": "authfitnesstracker33f5545533f55455IdentityPoolId" } }, "ForAnyValue:StringLike": { @@ -87,7 +87,7 @@ "", [ { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" }, "-AdminGroupRole" ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/adminapi/build/adminapi-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/adminapi/build/adminapi-cloudformation-template.json index fe0413d381e..63a8fcdb155 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/adminapi/build/adminapi-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/adminapi/build/adminapi-cloudformation-template.json @@ -1,10 +1,10 @@ { - "Description": "API Gateway Resource for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-API Gateway\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -104,7 +104,7 @@ "-", [ { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" }, "AdminGroupRole" ] @@ -426,7 +426,7 @@ "Name": "adminapi" } }, - "adminapiDefault4XXResponsec0c67e32": { + "adminapiDefault4XXResponse0e27c647": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -441,7 +441,7 @@ } } }, - "adminapiDefault5XXResponsec0c67e32": { + "adminapiDefault5XXResponse0e27c647": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -456,7 +456,7 @@ } } }, - "DeploymentAPIGWadminapia8449e95": { + "DeploymentAPIGWadminapiad7711e6": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -474,8 +474,8 @@ } }, "DependsOn": [ - "adminapiDefault4XXResponsec0c67e32", - "adminapiDefault5XXResponsec0c67e32" + "adminapiDefault4XXResponse0e27c647", + "adminapiDefault5XXResponse0e27c647" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/fitnesstracker/build/cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/fitnesstracker/build/cloudformation-template.json index 651f9ceb637..cd07bb81a76 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/fitnesstracker/build/cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/fitnesstracker/build/cloudformation-template.json @@ -129,7 +129,7 @@ ] }, "Description": "graphql", - "Expires": 1774896554 + "Expires": 1774926196 } }, "GraphQLAPINONEDS95A13CF0": { @@ -604,5 +604,6 @@ } } } - } + }, + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-AppSync\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/nutritionapi/build/nutritionapi-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/nutritionapi/build/nutritionapi-cloudformation-template.json index 1c507689fc5..ba07311cb22 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/nutritionapi/build/nutritionapi-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/nutritionapi/build/nutritionapi-cloudformation-template.json @@ -1,10 +1,10 @@ { - "Description": "API Gateway Resource for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-API Gateway\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -344,7 +344,7 @@ "-", [ { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" }, "AdminGroupRole" ] @@ -666,7 +666,7 @@ "Name": "nutritionapi" } }, - "nutritionapiDefault4XXResponse59a22bc9": { + "nutritionapiDefault4XXResponsef55128fc": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -681,7 +681,7 @@ } } }, - "nutritionapiDefault5XXResponse59a22bc9": { + "nutritionapiDefault5XXResponsef55128fc": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -696,7 +696,7 @@ } } }, - "DeploymentAPIGWnutritionapifc67c40b": { + "DeploymentAPIGWnutritionapi5caf0abc": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -714,8 +714,8 @@ } }, "DependsOn": [ - "nutritionapiDefault4XXResponse59a22bc9", - "nutritionapiDefault5XXResponse59a22bc9" + "nutritionapiDefault4XXResponsef55128fc", + "nutritionapiDefault5XXResponsef55128fc" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/fitnesstracker33f5545533f55455/build/fitnesstracker33f5545533f55455-cloudformation-template.json similarity index 93% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/fitnesstracker33f5545533f55455/build/fitnesstracker33f5545533f55455-cloudformation-template.json index 79def9e5efb..f5ed153a8fe 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/fitnesstracker33f5545533f55455/build/fitnesstracker33f5545533f55455-cloudformation-template.json @@ -1,17 +1,17 @@ { - "Description": "Amplify Cognito Stack for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { "Type": "String" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { + "functionfitnesstracker33f5545533f55455PreSignupArn": { "Type": "String", - "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" + "Default": "functionfitnesstracker33f5545533f55455PreSignupArn" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { + "functionfitnesstracker33f5545533f55455PreSignupName": { "Type": "String", - "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" + "Default": "functionfitnesstracker33f5545533f55455PreSignupName" }, "identityPoolName": { "Type": "String" @@ -216,7 +216,7 @@ "UserPoolClientWeb": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes9ceb2e7c_app_clientWeb", + "ClientName": "fitnes33f55455_app_clientWeb", "RefreshTokenValidity": { "Ref": "userpoolClientRefreshTokenValidity" }, @@ -234,7 +234,7 @@ "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes9ceb2e7c_app_client", + "ClientName": "fitnes33f55455_app_client", "GenerateSecret": { "Ref": "userpoolClientGenerateSecret" }, @@ -277,7 +277,7 @@ "Fn::Join": [ "", [ - "upClientLambdaRole9ceb2e7c", + "upClientLambdaRole33f55455", { "Fn::Select": [ 3, @@ -349,12 +349,12 @@ "IdentityPoolName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", + "fitnesstracker33f55455_identitypool_33f55455", { "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", + "fitnesstracker33f55455_identitypool_33f55455__", { "Ref": "env" } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json index 12c7040bd48..e34b9d7bd14 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json @@ -1,5 +1,5 @@ { - "Description": "Root Stack for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito-UserPool-Groups\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { @@ -11,21 +11,21 @@ "UnauthRoleArn": { "Type": "String" }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" }, - "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { + "authfitnesstracker33f5545533f55455IdentityPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" + "Default": "authfitnesstracker33f5545533f55455IdentityPoolId" }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { + "authfitnesstracker33f5545533f55455AppClientID": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID" + "Default": "authfitnesstracker33f5545533f55455AppClientID" }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { + "authfitnesstracker33f5545533f55455AppClientIDWeb": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb" + "Default": "authfitnesstracker33f5545533f55455AppClientIDWeb" } }, "Conditions": { @@ -52,7 +52,7 @@ ] }, "UserPoolId": { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" } } }, @@ -72,7 +72,7 @@ "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" + "Ref": "authfitnesstracker33f5545533f55455IdentityPoolId" } }, "ForAnyValue:StringLike": { @@ -87,7 +87,7 @@ "", [ { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" }, "-AdminGroupRole" ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json index 5345516d4d9..3874b454557 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json @@ -202,7 +202,7 @@ "APIGatewayAuthStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", "Parameters": { "authRoleName": { "Ref": "AuthRoleName" @@ -211,15 +211,15 @@ "Ref": "UnauthRoleName" }, "env": "main", - "adminapi": { + "nutritionapi": { "Fn::GetAtt": [ - "apiadminapi", + "apinutritionapi", "Outputs.ApiId" ] }, - "nutritionapi": { + "adminapi": { "Fn::GetAtt": [ - "apinutritionapi", + "apiadminapi", "Outputs.ApiId" ] } @@ -229,141 +229,100 @@ "AuthTriggerCustomLambdaStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", "Parameters": { "env": "main", "userpoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, "userpoolArn": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolArn" ] }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole": { + "functionfitnesstracker33f5545533f55455PreSignupLambdaExecutionRole": { "Fn::GetAtt": [ - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "functionfitnesstracker33f5545533f55455PreSignup", "Outputs.LambdaExecutionRoleArn" ] }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { + "functionfitnesstracker33f5545533f55455PreSignupArn": { "Fn::GetAtt": [ - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "functionfitnesstracker33f5545533f55455PreSignup", "Outputs.Arn" ] }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { + "functionfitnesstracker33f5545533f55455PreSignupName": { "Fn::GetAtt": [ - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "functionfitnesstracker33f5545533f55455PreSignup", "Outputs.Name" ] } } }, "DependsOn": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup" + "authfitnesstracker33f5545533f55455", + "functionfitnesstracker33f5545533f55455PreSignup" ] }, - "apiadminapi": { + "authuserPoolGroups": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", "Parameters": { - "functionadminName": { - "Fn::GetAtt": [ - "functionadmin", - "Outputs.Name" - ] - }, - "functionadminArn": { - "Fn::GetAtt": [ - "functionadmin", - "Outputs.Arn" - ] - }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "AuthRoleArn": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.UserPoolId" + "AuthRole", + "Arn" ] }, - "authuserPoolGroupsAdminGroupRole": { + "UnauthRoleArn": { "Fn::GetAtt": [ - "authuserPoolGroups", - "Outputs.AdminGroupRole" + "UnauthRole", + "Arn" ] }, - "env": "main" - } - } - }, - "apifitnesstracker": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/cloudformation-template.json", - "Parameters": { - "AppSyncApiName": "fitnesstracker", - "DynamoDBBillingMode": "PAY_PER_REQUEST", - "DynamoDBEnableServerSideEncryption": false, - "AuthCognitoUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, - "S3DeploymentBucket": "amplify-fitnesstracker-main-6fc9a-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa", - "env": "main" - } - } - }, - "apinutritionapi": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", - "Parameters": { - "functionlognutritionName": { + "authfitnesstracker33f5545533f55455AppClientIDWeb": { "Fn::GetAtt": [ - "functionlognutrition", - "Outputs.Name" - ] - }, - "functionlognutritionArn": { - "Fn::GetAtt": [ - "functionlognutrition", - "Outputs.Arn" + "authfitnesstracker33f5545533f55455", + "Outputs.AppClientIDWeb" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455AppClientID": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.UserPoolId" + "authfitnesstracker33f5545533f55455", + "Outputs.AppClientID" ] }, - "authuserPoolGroupsAdminGroupRole": { + "authfitnesstracker33f5545533f55455IdentityPoolId": { "Fn::GetAtt": [ - "authuserPoolGroups", - "Outputs.AdminGroupRole" + "authfitnesstracker33f5545533f55455", + "Outputs.IdentityPoolId" ] }, "env": "main" } } }, - "authfitnesstracker9ceb2e7c9ceb2e7c": { + "authfitnesstracker33f5545533f55455": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/fitnesstracker33f5545533f55455-cloudformation-template.json", "Parameters": { - "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", + "identityPoolName": "fitnesstracker33f55455_identitypool_33f55455", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes9ceb2e7c", - "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", + "resourceNameTruncated": "fitnes33f55455", + "userPoolName": "fitnesstracker33f55455_userpool_33f55455", "autoVerifiedAttributes": "email", "mfaConfiguration": "OFF", "mfaTypes": "SMS Text Message", @@ -380,10 +339,10 @@ "userpoolClientRefreshTokenValidity": 30, "userpoolClientWriteAttributes": "email", "userpoolClientReadAttributes": "email", - "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes33f55455_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "9ceb2e7c", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", + "sharedId": "33f55455", + "resourceName": "fitnesstracker33f5545533f55455", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -410,98 +369,139 @@ "breakCircularDependency": true, "dependsOn": "[object Object]", "permissions": "", - "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}", + "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker33f5545533f55455PreSignup\"}", "env": "main" } } }, - "authuserPoolGroups": { + "functionfitnesstracker33f5545533f55455PreSignup": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json", "Parameters": { - "AuthRoleArn": { - "Fn::GetAtt": [ - "AuthRole", - "Arn" - ] - }, - "UnauthRoleArn": { + "modules": "email-filter-allowlist", + "resourceName": "fitnesstracker33f5545533f55455PreSignup", + "DOMAINALLOWLIST": "amazon.com", + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/fitnesstracker33f5545533f55455PreSignup-68374859444c45627749-build.zip", + "env": "main" + } + } + }, + "functionlognutrition": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "Parameters": { + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", + "apifitnesstrackerGraphQLAPIIdOutput": { "Fn::GetAtt": [ - "UnauthRole", - "Arn" + "apifitnesstracker", + "Outputs.GraphQLAPIIdOutput" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "env": "main" + } + } + }, + "functionadmin": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", + "Parameters": { + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/admin-7934694b6d366c486d32-build.zip", + "authfitnesstracker33f5545533f55455UserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { - "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.AppClientIDWeb" - ] - }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { - "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.AppClientID" - ] - }, - "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { - "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.IdentityPoolId" - ] - }, "env": "main" } } }, - "functionadmin": { + "apifitnesstracker": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/admin-765632787437744e386e-build.zip", - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "AppSyncApiName": "fitnesstracker", + "DynamoDBBillingMode": "PAY_PER_REQUEST", + "DynamoDBEnableServerSideEncryption": false, + "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, + "S3DeploymentBucket": "amplify-fitnesstracker-main-a0537-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/67310f5f0a68cc163f9cc58da56e1409a2c21b1d", "env": "main" } } }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup": { + "apinutritionapi": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", "Parameters": { - "modules": "email-filter-allowlist", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", - "DOMAINALLOWLIST": "amazon.com", - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip", + "functionlognutritionName": { + "Fn::GetAtt": [ + "functionlognutrition", + "Outputs.Name" + ] + }, + "functionlognutritionArn": { + "Fn::GetAtt": [ + "functionlognutrition", + "Outputs.Arn" + ] + }, + "authfitnesstracker33f5545533f55455UserPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker33f5545533f55455", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.AdminGroupRole" + ] + }, "env": "main" } } }, - "functionlognutrition": { + "apiadminapi": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", - "apifitnesstrackerGraphQLAPIIdOutput": { + "functionadminName": { "Fn::GetAtt": [ - "apifitnesstracker", - "Outputs.GraphQLAPIIdOutput" + "functionadmin", + "Outputs.Name" + ] + }, + "functionadminArn": { + "Fn::GetAtt": [ + "functionadmin", + "Outputs.Arn" + ] + }, + "authfitnesstracker33f5545533f55455UserPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker33f5545533f55455", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.AdminGroupRole" ] }, "env": "main" @@ -512,7 +512,7 @@ "DependsOn": [ "AuthRole", "UnauthRole", - "authfitnesstracker9ceb2e7c9ceb2e7c" + "authfitnesstracker33f5545533f55455" ], "Type": "AWS::Lambda::Function", "Properties": { @@ -622,7 +622,7 @@ }, "idpId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.IdentityPoolId" ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/admin/admin-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/admin/admin-cloudformation-template.json index aaa8618655d..57322afb5e3 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/admin/admin-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/admin/admin-cloudformation-template.json @@ -16,9 +16,9 @@ "s3Key": { "Type": "String" }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" } }, "Conditions": { @@ -74,8 +74,8 @@ "REGION": { "Ref": "AWS::Region" }, - "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "AUTH_FITNESSTRACKER33F5545533F55455_USERPOOLID": { + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" } } }, @@ -96,12 +96,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRole64f55d16", + "fitnesstrackerLambdaRole4a08108a", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRole64f55d16", + "fitnesstrackerLambdaRole4a08108a", "-", { "Ref": "env" @@ -220,7 +220,7 @@ }, ":userpool/", { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" } ] ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/fitnesstracker33f5545533f55455PreSignup/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json similarity index 95% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/fitnesstracker33f5545533f55455PreSignup/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json index 04a3c261a89..e53fff724cb 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/fitnesstracker33f5545533f55455PreSignup/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json @@ -71,12 +71,12 @@ "FunctionName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "fitnesstracker33f5545533f55455PreSignup", { "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "fitnesstracker33f5545533f55455PreSignup", "-", { "Ref": "env" @@ -129,12 +129,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "fitnesstracker33f5545533f55455PreSignup", { "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "fitnesstracker33f5545533f55455PreSignup", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/lognutrition/lognutrition-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/lognutrition/lognutrition-cloudformation-template.json index e1789ef2c20..34e97f53ec9 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/lognutrition/lognutrition-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/lognutrition/lognutrition-cloudformation-template.json @@ -122,12 +122,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRole8dc6052c", + "fitnesstrackerLambdaRole2824d4b4", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRole8dc6052c", + "fitnesstrackerLambdaRole2824d4b4", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/root-cloudformation-stack.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/root-cloudformation-stack.json index 5345516d4d9..3874b454557 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/root-cloudformation-stack.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/root-cloudformation-stack.json @@ -202,7 +202,7 @@ "APIGatewayAuthStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", "Parameters": { "authRoleName": { "Ref": "AuthRoleName" @@ -211,15 +211,15 @@ "Ref": "UnauthRoleName" }, "env": "main", - "adminapi": { + "nutritionapi": { "Fn::GetAtt": [ - "apiadminapi", + "apinutritionapi", "Outputs.ApiId" ] }, - "nutritionapi": { + "adminapi": { "Fn::GetAtt": [ - "apinutritionapi", + "apiadminapi", "Outputs.ApiId" ] } @@ -229,141 +229,100 @@ "AuthTriggerCustomLambdaStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", "Parameters": { "env": "main", "userpoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, "userpoolArn": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolArn" ] }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole": { + "functionfitnesstracker33f5545533f55455PreSignupLambdaExecutionRole": { "Fn::GetAtt": [ - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "functionfitnesstracker33f5545533f55455PreSignup", "Outputs.LambdaExecutionRoleArn" ] }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { + "functionfitnesstracker33f5545533f55455PreSignupArn": { "Fn::GetAtt": [ - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "functionfitnesstracker33f5545533f55455PreSignup", "Outputs.Arn" ] }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { + "functionfitnesstracker33f5545533f55455PreSignupName": { "Fn::GetAtt": [ - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "functionfitnesstracker33f5545533f55455PreSignup", "Outputs.Name" ] } } }, "DependsOn": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup" + "authfitnesstracker33f5545533f55455", + "functionfitnesstracker33f5545533f55455PreSignup" ] }, - "apiadminapi": { + "authuserPoolGroups": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", "Parameters": { - "functionadminName": { - "Fn::GetAtt": [ - "functionadmin", - "Outputs.Name" - ] - }, - "functionadminArn": { - "Fn::GetAtt": [ - "functionadmin", - "Outputs.Arn" - ] - }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "AuthRoleArn": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.UserPoolId" + "AuthRole", + "Arn" ] }, - "authuserPoolGroupsAdminGroupRole": { + "UnauthRoleArn": { "Fn::GetAtt": [ - "authuserPoolGroups", - "Outputs.AdminGroupRole" + "UnauthRole", + "Arn" ] }, - "env": "main" - } - } - }, - "apifitnesstracker": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/cloudformation-template.json", - "Parameters": { - "AppSyncApiName": "fitnesstracker", - "DynamoDBBillingMode": "PAY_PER_REQUEST", - "DynamoDBEnableServerSideEncryption": false, - "AuthCognitoUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, - "S3DeploymentBucket": "amplify-fitnesstracker-main-6fc9a-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa", - "env": "main" - } - } - }, - "apinutritionapi": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", - "Parameters": { - "functionlognutritionName": { + "authfitnesstracker33f5545533f55455AppClientIDWeb": { "Fn::GetAtt": [ - "functionlognutrition", - "Outputs.Name" - ] - }, - "functionlognutritionArn": { - "Fn::GetAtt": [ - "functionlognutrition", - "Outputs.Arn" + "authfitnesstracker33f5545533f55455", + "Outputs.AppClientIDWeb" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455AppClientID": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.UserPoolId" + "authfitnesstracker33f5545533f55455", + "Outputs.AppClientID" ] }, - "authuserPoolGroupsAdminGroupRole": { + "authfitnesstracker33f5545533f55455IdentityPoolId": { "Fn::GetAtt": [ - "authuserPoolGroups", - "Outputs.AdminGroupRole" + "authfitnesstracker33f5545533f55455", + "Outputs.IdentityPoolId" ] }, "env": "main" } } }, - "authfitnesstracker9ceb2e7c9ceb2e7c": { + "authfitnesstracker33f5545533f55455": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/fitnesstracker33f5545533f55455-cloudformation-template.json", "Parameters": { - "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", + "identityPoolName": "fitnesstracker33f55455_identitypool_33f55455", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes9ceb2e7c", - "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", + "resourceNameTruncated": "fitnes33f55455", + "userPoolName": "fitnesstracker33f55455_userpool_33f55455", "autoVerifiedAttributes": "email", "mfaConfiguration": "OFF", "mfaTypes": "SMS Text Message", @@ -380,10 +339,10 @@ "userpoolClientRefreshTokenValidity": 30, "userpoolClientWriteAttributes": "email", "userpoolClientReadAttributes": "email", - "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes33f55455_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "9ceb2e7c", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", + "sharedId": "33f55455", + "resourceName": "fitnesstracker33f5545533f55455", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -410,98 +369,139 @@ "breakCircularDependency": true, "dependsOn": "[object Object]", "permissions": "", - "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}", + "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker33f5545533f55455PreSignup\"}", "env": "main" } } }, - "authuserPoolGroups": { + "functionfitnesstracker33f5545533f55455PreSignup": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json", "Parameters": { - "AuthRoleArn": { - "Fn::GetAtt": [ - "AuthRole", - "Arn" - ] - }, - "UnauthRoleArn": { + "modules": "email-filter-allowlist", + "resourceName": "fitnesstracker33f5545533f55455PreSignup", + "DOMAINALLOWLIST": "amazon.com", + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/fitnesstracker33f5545533f55455PreSignup-68374859444c45627749-build.zip", + "env": "main" + } + } + }, + "functionlognutrition": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "Parameters": { + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", + "apifitnesstrackerGraphQLAPIIdOutput": { "Fn::GetAtt": [ - "UnauthRole", - "Arn" + "apifitnesstracker", + "Outputs.GraphQLAPIIdOutput" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "env": "main" + } + } + }, + "functionadmin": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", + "Parameters": { + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/admin-7934694b6d366c486d32-build.zip", + "authfitnesstracker33f5545533f55455UserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { - "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.AppClientIDWeb" - ] - }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { - "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.AppClientID" - ] - }, - "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { - "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.IdentityPoolId" - ] - }, "env": "main" } } }, - "functionadmin": { + "apifitnesstracker": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/admin-765632787437744e386e-build.zip", - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "AppSyncApiName": "fitnesstracker", + "DynamoDBBillingMode": "PAY_PER_REQUEST", + "DynamoDBEnableServerSideEncryption": false, + "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, + "S3DeploymentBucket": "amplify-fitnesstracker-main-a0537-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/67310f5f0a68cc163f9cc58da56e1409a2c21b1d", "env": "main" } } }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup": { + "apinutritionapi": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", "Parameters": { - "modules": "email-filter-allowlist", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", - "DOMAINALLOWLIST": "amazon.com", - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip", + "functionlognutritionName": { + "Fn::GetAtt": [ + "functionlognutrition", + "Outputs.Name" + ] + }, + "functionlognutritionArn": { + "Fn::GetAtt": [ + "functionlognutrition", + "Outputs.Arn" + ] + }, + "authfitnesstracker33f5545533f55455UserPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker33f5545533f55455", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.AdminGroupRole" + ] + }, "env": "main" } } }, - "functionlognutrition": { + "apiadminapi": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", - "apifitnesstrackerGraphQLAPIIdOutput": { + "functionadminName": { "Fn::GetAtt": [ - "apifitnesstracker", - "Outputs.GraphQLAPIIdOutput" + "functionadmin", + "Outputs.Name" + ] + }, + "functionadminArn": { + "Fn::GetAtt": [ + "functionadmin", + "Outputs.Arn" + ] + }, + "authfitnesstracker33f5545533f55455UserPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker33f5545533f55455", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.AdminGroupRole" ] }, "env": "main" @@ -512,7 +512,7 @@ "DependsOn": [ "AuthRole", "UnauthRole", - "authfitnesstracker9ceb2e7c9ceb2e7c" + "authfitnesstracker33f5545533f55455" ], "Type": "AWS::Lambda::Function", "Properties": { @@ -622,7 +622,7 @@ }, "idpId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.IdentityPoolId" ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/backend-config.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/backend-config.json index 3267de076bd..d15b0adea45 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/backend-config.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/backend-config.json @@ -15,7 +15,7 @@ "UserPoolId" ], "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" + "resourceName": "fitnesstracker33f5545533f55455" }, { "attributes": [ @@ -35,7 +35,7 @@ "UserPoolId" ], "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" + "resourceName": "fitnesstracker33f5545533f55455" } ], "output": { @@ -43,7 +43,7 @@ "additionalAuthenticationProviders": [ { "apiKeyConfig": { - "apiKeyExpirationDate": "2026-03-29T02:07:08.737Z", + "apiKeyExpirationDate": "2026-03-31T02:59:49.009Z", "apiKeyExpirationDays": 7, "description": "graphql" }, @@ -53,7 +53,7 @@ "defaultAuthentication": { "authenticationType": "AMAZON_COGNITO_USER_POOLS", "userPoolConfig": { - "userPoolId": "authfitnesstracker9ceb2e7c9ceb2e7c" + "userPoolId": "authfitnesstracker33f5545533f55455" } } } @@ -76,7 +76,7 @@ "UserPoolId" ], "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" + "resourceName": "fitnesstracker33f5545533f55455" }, { "attributes": [ @@ -91,7 +91,7 @@ } }, "auth": { - "fitnesstracker9ceb2e7c9ceb2e7c": { + "fitnesstracker33f5545533f55455": { "customAuth": false, "dependsOn": [ { @@ -100,7 +100,7 @@ "Name" ], "category": "function", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "resourceName": "fitnesstracker33f5545533f55455PreSignup", "triggerProvider": "Cognito" } ], @@ -135,7 +135,7 @@ "IdentityPoolId" ], "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" + "resourceName": "fitnesstracker33f5545533f55455" } ], "providerPlugin": "awscloudformation", @@ -151,13 +151,13 @@ "UserPoolId" ], "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" + "resourceName": "fitnesstracker33f5545533f55455" } ], "providerPlugin": "awscloudformation", "service": "Lambda" }, - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup": { + "fitnesstracker33f5545533f55455PreSignup": { "build": true, "providerPlugin": "awscloudformation", "service": "Lambda" @@ -194,27 +194,27 @@ } ] }, - "AMPLIFY_function_fitnesstracker9ceb2e7c9ceb2e7cPreSignup_DOMAINALLOWLIST": { + "AMPLIFY_function_fitnesstracker33f5545533f55455PreSignup_DOMAINALLOWLIST": { "usedBy": [ { "category": "function", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" + "resourceName": "fitnesstracker33f5545533f55455PreSignup" } ] }, - "AMPLIFY_function_fitnesstracker9ceb2e7c9ceb2e7cPreSignup_deploymentBucketName": { + "AMPLIFY_function_fitnesstracker33f5545533f55455PreSignup_deploymentBucketName": { "usedBy": [ { "category": "function", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" + "resourceName": "fitnesstracker33f5545533f55455PreSignup" } ] }, - "AMPLIFY_function_fitnesstracker9ceb2e7c9ceb2e7cPreSignup_s3Key": { + "AMPLIFY_function_fitnesstracker33f5545533f55455PreSignup_s3Key": { "usedBy": [ { "category": "function", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" + "resourceName": "fitnesstracker33f5545533f55455PreSignup" } ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/admin/admin-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/admin/admin-cloudformation-template.json index aaa8618655d..57322afb5e3 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/admin/admin-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/admin/admin-cloudformation-template.json @@ -16,9 +16,9 @@ "s3Key": { "Type": "String" }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" } }, "Conditions": { @@ -74,8 +74,8 @@ "REGION": { "Ref": "AWS::Region" }, - "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "AUTH_FITNESSTRACKER33F5545533F55455_USERPOOLID": { + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" } } }, @@ -96,12 +96,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRole64f55d16", + "fitnesstrackerLambdaRole4a08108a", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRole64f55d16", + "fitnesstrackerLambdaRole4a08108a", "-", { "Ref": "env" @@ -220,7 +220,7 @@ }, ":userpool/", { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" } ] ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/admin/function-parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/admin/function-parameters.json index c3c652077d2..f87ac79fa6f 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/admin/function-parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/admin/function-parameters.json @@ -1,7 +1,7 @@ { "permissions": { "auth": { - "fitnesstracker9ceb2e7c9ceb2e7c": [ + "fitnesstracker33f5545533f55455": [ "read" ] } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/amplify.state b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/amplify.state similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/amplify.state rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/amplify.state diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/custom-policies.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/custom-policies.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/custom-policies.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/custom-policies.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json similarity index 95% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json index 04a3c261a89..e53fff724cb 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json @@ -71,12 +71,12 @@ "FunctionName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "fitnesstracker33f5545533f55455PreSignup", { "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "fitnesstracker33f5545533f55455PreSignup", "-", { "Ref": "env" @@ -129,12 +129,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "fitnesstracker33f5545533f55455PreSignup", { "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "fitnesstracker33f5545533f55455PreSignup", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/function-parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/function-parameters.json similarity index 61% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/function-parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/function-parameters.json index 911d754ad38..ddc07525de2 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/function-parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/function-parameters.json @@ -3,14 +3,14 @@ "modules": [ "email-filter-allowlist" ], - "parentResource": "fitnesstracker9ceb2e7c9ceb2e7c", - "functionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "parentResource": "fitnesstracker33f5545533f55455", + "functionName": "fitnesstracker33f5545533f55455PreSignup", + "resourceName": "fitnesstracker33f5545533f55455PreSignup", "parentStack": "auth", "triggerEnvs": "[]", "triggerDir": "/snapshot/amplify-cli/build/node_modules/@aws-amplify/amplify-category-auth/provider-utils/awscloudformation/triggers/PreSignup", "triggerTemplate": "PreSignup.json.ejs", "triggerEventPath": "PreSignup.event.json", - "roleName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "roleName": "fitnesstracker33f5545533f55455PreSignup", "skipEdit": true } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/parameters.json new file mode 100644 index 00000000000..020628a583f --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/parameters.json @@ -0,0 +1,4 @@ +{ + "modules": "email-filter-allowlist", + "resourceName": "fitnesstracker33f5545533f55455PreSignup" +} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/email-filter-allowlist.js b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/src/email-filter-allowlist.js similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/email-filter-allowlist.js rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/src/email-filter-allowlist.js diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/event.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/src/event.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/event.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/src/event.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/index.js b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/src/index.js similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/index.js rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/src/index.js diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/package.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/src/package.json similarity index 78% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/package.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/src/package.json index af2b3ccd67f..9d1790c9a5c 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/package.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/src/package.json @@ -1,5 +1,5 @@ { - "name": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "name": "fitnesstracker33f5545533f55455PreSignup", "version": "2.0.0", "description": "Lambda function generated by Amplify", "main": "index.js", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/yarn.lock b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/src/yarn.lock similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/yarn.lock rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker33f5545533f55455PreSignup/src/yarn.lock diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/parameters.json deleted file mode 100644 index 22e01f31ee2..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/parameters.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "modules": "email-filter-allowlist", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" -} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/lognutrition/lognutrition-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/lognutrition/lognutrition-cloudformation-template.json index e1789ef2c20..34e97f53ec9 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/lognutrition/lognutrition-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/lognutrition/lognutrition-cloudformation-template.json @@ -122,12 +122,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRole8dc6052c", + "fitnesstrackerLambdaRole2824d4b4", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRole8dc6052c", + "fitnesstrackerLambdaRole2824d4b4", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/amplify-meta.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/amplify-meta.json index 3a167eb2204..8334327a376 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/amplify-meta.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/amplify-meta.json @@ -1,313 +1,313 @@ { "providers": { "awscloudformation": { - "AuthRoleName": "amplify-fitnesstracker-main-6fc9a-authRole", - "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole", - "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole", + "AuthRoleName": "amplify-fitnesstracker-main-a0537-authRole", + "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-unauthRole", + "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-authRole", "Region": "us-east-1", - "DeploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "UnauthRoleName": "amplify-fitnesstracker-main-6fc9a-unauthRole", - "StackName": "amplify-fitnesstracker-main-6fc9a", - "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a/d1ee9bf0-2590-11f1-8e36-1220ebfe67af", + "DeploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "UnauthRoleName": "amplify-fitnesstracker-main-a0537-unauthRole", + "StackName": "amplify-fitnesstracker-main-a0537", + "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-a0537/1749a530-272d-11f1-a465-0e5f0b5f7853", "AmplifyAppId": "fitnesstracker", - "APIGatewayAuthURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", - "AuthTriggerTemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json" + "APIGatewayAuthURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", + "AuthTriggerTemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json" } }, - "api": { - "adminapi": { + "auth": { + "userPoolGroups": { + "service": "Cognito-UserPool-Groups", + "providerPlugin": "awscloudformation", "dependsOn": [ { - "attributes": [ - "Name", - "Arn" - ], - "category": "function", - "resourceName": "admin" - }, - { - "attributes": [ - "UserPoolId" - ], "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" - }, - { + "resourceName": "fitnesstracker33f5545533f55455", "attributes": [ - "AdminGroupRole" - ], - "category": "auth", - "resourceName": "userPoolGroups" + "UserPoolId", + "AppClientIDWeb", + "AppClientID", + "IdentityPoolId" + ] } ], - "providerPlugin": "awscloudformation", - "service": "API Gateway", - "output": { - "ApiName": "adminapi", - "RootUrl": "https://bbk7dedp01.execute-api.us-east-1.amazonaws.com/main", - "ApiId": "bbk7dedp01" - }, - "lastPushTimeStamp": "2026-03-24T00:40:26.010Z", + "lastPushTimeStamp": "2026-03-24T03:10:58.631Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", - "logicalId": "apiadminapi" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "logicalId": "authuserPoolGroups" }, - "lastPushDirHash": "SI1snudM0j/SqX5HIasSB/7nF3k=" - }, - "fitnesstracker": { - "dependsOn": [ - { - "attributes": [ - "UserPoolId" - ], - "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" - } - ], "output": { - "authConfig": { - "additionalAuthenticationProviders": [ - { - "apiKeyConfig": { - "apiKeyExpirationDate": "2026-03-29T02:07:08.737Z", - "apiKeyExpirationDays": 7, - "description": "graphql" - }, - "authenticationType": "API_KEY" - } - ], - "defaultAuthentication": { - "authenticationType": "AMAZON_COGNITO_USER_POOLS", - "userPoolConfig": { - "userPoolId": "authfitnesstracker9ceb2e7c9ceb2e7c" - } - } - }, - "GraphQLAPIIdOutput": "4ebr7lx7bbhnpeo5dbtcvdajdm", - "GraphQLAPIEndpointOutput": "https://3oyjlwrrofhp7jlc37qna22jva.appsync-api.us-east-1.amazonaws.com/graphql", - "GraphQLAPIKeyOutput": "da2-2kuyxda27ncmpool2a2bjanloy" + "AdminGroupRole": "arn:aws:iam::123456789012:role/us-east-1_iguxCIcMS-AdminGroupRole" }, - "providerPlugin": "awscloudformation", - "service": "AppSync", - "lastPushTimeStamp": "2026-03-24T00:40:26.014Z", - "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/cloudformation-template.json", - "logicalId": "apifitnesstracker" - }, - "lastPushDirHash": "sVImeaG/Q60+Vbb0gARPejjN99o=" + "lastPushDirHash": "5G4uAlMxN8rsFD1jyeLTya9ahFM=" }, - "nutritionapi": { - "dependsOn": [ - { - "attributes": [ - "Name", - "Arn" - ], - "category": "function", - "resourceName": "lognutrition" - }, - { - "attributes": [ - "UserPoolId" - ], - "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" - }, - { - "attributes": [ - "AdminGroupRole" - ], - "category": "auth", - "resourceName": "userPoolGroups" - } - ], + "fitnesstracker33f5545533f55455": { + "service": "Cognito", "providerPlugin": "awscloudformation", - "service": "API Gateway", - "output": { - "ApiName": "nutritionapi", - "RootUrl": "https://ekto8iln0h.execute-api.us-east-1.amazonaws.com/main", - "ApiId": "ekto8iln0h" - }, - "lastPushTimeStamp": "2026-03-24T00:40:26.016Z", - "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", - "logicalId": "apinutritionapi" - }, - "lastPushDirHash": "5JwuGoxSHfV3nT5/dIukaklIOKI=" - } - }, - "auth": { - "fitnesstracker9ceb2e7c9ceb2e7c": { - "customAuth": false, "dependsOn": [ { + "category": "function", + "resourceName": "fitnesstracker33f5545533f55455PreSignup", + "triggerProvider": "Cognito", "attributes": [ "Arn", "Name" - ], - "category": "function", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", - "triggerProvider": "Cognito" + ] } ], + "customAuth": false, "frontendAuthConfig": { - "mfaConfiguration": "OFF", - "mfaTypes": [ - "SMS" + "socialProviders": [], + "usernameAttributes": [], + "signupAttributes": [ + "EMAIL" ], "passwordProtectionSettings": { "passwordPolicyMinLength": 8, "passwordPolicyCharacters": [] }, - "signupAttributes": [ - "EMAIL" + "mfaConfiguration": "OFF", + "mfaTypes": [ + "SMS" ], - "socialProviders": [], - "usernameAttributes": [], "verificationMechanisms": [ "EMAIL" ] }, - "providerPlugin": "awscloudformation", - "service": "Cognito", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/fitnesstracker33f5545533f55455-cloudformation-template.json", + "logicalId": "authfitnesstracker33f5545533f55455" + }, + "lastPushTimeStamp": "2026-03-24T03:10:58.631Z", "output": { - "UserPoolId": "us-east-1_LAwe5ZJrw", - "AppClientIDWeb": "4bk8odk8blrf65ptk2dffug25k", - "AppClientID": "12hkvqjabpisei771tiefdhs76", - "IdentityPoolId": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d", - "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_LAwe5ZJrw", - "IdentityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__main", - "UserPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c" + "UserPoolId": "us-east-1_iguxCIcMS", + "AppClientIDWeb": "29bubgvfbbqkp4k60rl7oaqd8s", + "AppClientID": "3s8jcv7nflisr91emephrr2a9s", + "IdentityPoolId": "us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022", + "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_iguxCIcMS", + "IdentityPoolName": "fitnesstracker33f55455_identitypool_33f55455__main", + "UserPoolName": "fitnesstracker33f55455_userpool_33f55455" + }, + "lastPushDirHash": "0UqXAz+SYrchlHkWJtyjmhwNAyw=" + } + }, + "function": { + "fitnesstracker33f5545533f55455PreSignup": { + "build": true, + "providerPlugin": "awscloudformation", + "service": "Lambda", + "lastBuildTimeStamp": "2026-03-24T03:03:03.155Z", + "lastBuildType": "PROD", + "lastPackageTimeStamp": "2026-03-24T03:03:03.215Z", + "distZipFilename": "fitnesstracker33f5545533f55455PreSignup-68374859444c45627749-build.zip", + "s3Bucket": { + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/fitnesstracker33f5545533f55455PreSignup-68374859444c45627749-build.zip" }, - "lastPushTimeStamp": "2026-03-24T00:40:26.019Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json", - "logicalId": "authfitnesstracker9ceb2e7c9ceb2e7c" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json", + "logicalId": "functionfitnesstracker33f5545533f55455PreSignup" }, - "lastPushDirHash": "LHa1sE4caL7GAFx9RONHvmVgPVo=" + "lastPushTimeStamp": "2026-03-24T03:10:58.631Z", + "output": { + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstracker33f5545533f55455PreSignup-main", + "Region": "us-east-1", + "Arn": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker33f5545533f55455PreSignup-main", + "Name": "fitnesstracker33f5545533f55455PreSignup-main", + "LambdaExecutionRole": "fitnesstracker33f5545533f55455PreSignup-main" + }, + "lastPushDirHash": "kHZgvjW478Vk1rWRqWN9hZbma+U=" }, - "userPoolGroups": { + "lognutrition": { + "build": true, + "providerPlugin": "awscloudformation", + "service": "Lambda", "dependsOn": [ { - "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", + "category": "api", + "resourceName": "fitnesstracker", "attributes": [ - "UserPoolId", - "AppClientIDWeb", - "AppClientID", - "IdentityPoolId" + "GraphQLAPIIdOutput" ] } ], - "providerPlugin": "awscloudformation", - "service": "Cognito-UserPool-Groups", - "output": { - "AdminGroupRole": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole" + "lastBuildTimeStamp": "2026-03-24T03:03:04.944Z", + "lastBuildType": "PROD", + "lastPackageTimeStamp": "2026-03-24T03:03:05.883Z", + "distZipFilename": "lognutrition-554b5263566866516c6c-build.zip", + "s3Bucket": { + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip" }, - "lastPushTimeStamp": "2026-03-24T00:40:27.730Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", - "logicalId": "authuserPoolGroups" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "logicalId": "functionlognutrition" }, - "lastPushDirHash": "5G4uAlMxN8rsFD1jyeLTya9ahFM=" - } - }, - "function": { + "lastPushTimeStamp": "2026-03-24T03:10:58.631Z", + "output": { + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole2824d4b4-main", + "Region": "us-east-1", + "Arn": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-main", + "Name": "lognutrition-main", + "LambdaExecutionRole": "fitnesstrackerLambdaRole2824d4b4-main" + }, + "lastPushDirHash": "KAgg7Tg7xQWrkPA+Y7AX2th1kaI=" + }, "admin": { "build": true, + "providerPlugin": "awscloudformation", + "service": "Lambda", "dependsOn": [ { + "category": "auth", + "resourceName": "fitnesstracker33f5545533f55455", "attributes": [ "UserPoolId" - ], - "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" + ] } ], - "providerPlugin": "awscloudformation", - "service": "Lambda", - "output": { - "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole64f55d16-main", - "Region": "us-east-1", - "Arn": "arn:aws:lambda:us-east-1:123456789012:function:admin-main", - "Name": "admin-main", - "LambdaExecutionRole": "fitnesstrackerLambdaRole64f55d16-main" + "lastBuildTimeStamp": "2026-03-24T03:03:08.363Z", + "lastBuildType": "PROD", + "lastPackageTimeStamp": "2026-03-24T03:03:14.781Z", + "distZipFilename": "admin-7934694b6d366c486d32-build.zip", + "s3Bucket": { + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/admin-7934694b6d366c486d32-build.zip" }, - "lastPushTimeStamp": "2026-03-24T00:40:26.026Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", "logicalId": "functionadmin" }, - "s3Bucket": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/admin-765632787437744e386e-build.zip" + "lastPushTimeStamp": "2026-03-24T03:10:58.631Z", + "output": { + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole4a08108a-main", + "Region": "us-east-1", + "Arn": "arn:aws:lambda:us-east-1:123456789012:function:admin-main", + "Name": "admin-main", + "LambdaExecutionRole": "fitnesstrackerLambdaRole4a08108a-main" }, - "lastBuildTimeStamp": "2026-03-23T18:49:08.046Z", - "lastBuildType": "PROD", - "lastPackageTimeStamp": "2026-03-23T18:49:10.871Z", - "distZipFilename": "admin-765632787437744e386e-build.zip", - "lastPushDirHash": "slgY/GyKAD6Yg8mD7maeOXp9x1k=" - }, - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup": { - "build": true, + "lastPushDirHash": "20iOEIOvyMwayeWUC08s9NsJkTA=" + } + }, + "api": { + "fitnesstracker": { + "service": "AppSync", "providerPlugin": "awscloudformation", - "service": "Lambda", + "dependsOn": [ + { + "category": "auth", + "resourceName": "fitnesstracker33f5545533f55455", + "attributes": [ + "UserPoolId" + ] + } + ], "output": { - "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main", - "Region": "us-east-1", - "Arn": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main", - "Name": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main", - "LambdaExecutionRole": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" + "authConfig": { + "defaultAuthentication": { + "authenticationType": "AMAZON_COGNITO_USER_POOLS", + "userPoolConfig": { + "userPoolId": "authfitnesstracker33f5545533f55455" + } + }, + "additionalAuthenticationProviders": [ + { + "authenticationType": "API_KEY", + "apiKeyConfig": { + "apiKeyExpirationDays": 7, + "apiKeyExpirationDate": "2026-03-31T02:59:49.009Z", + "description": "graphql" + } + } + ] + }, + "GraphQLAPIIdOutput": "jzwb5p2vcbd2ldlnlxokgjcjby", + "GraphQLAPIEndpointOutput": "https://lqftdnws2zb75jcuwdcmx23wdi.appsync-api.us-east-1.amazonaws.com/graphql", + "GraphQLAPIKeyOutput": "da2-fakeapikey00000000000000" }, - "lastPushTimeStamp": "2026-03-24T00:40:26.029Z", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json", - "logicalId": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup" - }, - "s3Bucket": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/cloudformation-template.json", + "logicalId": "apifitnesstracker" }, - "lastBuildTimeStamp": "2026-03-23T18:49:12.334Z", - "lastBuildType": "PROD", - "lastPackageTimeStamp": "2026-03-23T18:49:12.345Z", - "distZipFilename": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip", - "lastPushDirHash": "qol/s4yC6lAAoI+0jAPoRyuH394=" + "lastPushTimeStamp": "2026-03-24T03:10:58.631Z", + "lastPushDirHash": "RCtlX/RFS23/RTpTpKEuv4XLh08=" }, - "lognutrition": { - "build": true, + "nutritionapi": { + "service": "API Gateway", + "providerPlugin": "awscloudformation", "dependsOn": [ { + "category": "function", + "resourceName": "lognutrition", "attributes": [ - "GraphQLAPIIdOutput" - ], - "category": "api", - "resourceName": "fitnesstracker" + "Name", + "Arn" + ] + }, + { + "category": "auth", + "resourceName": "fitnesstracker33f5545533f55455", + "attributes": [ + "UserPoolId" + ] + }, + { + "category": "auth", + "resourceName": "userPoolGroups", + "attributes": [ + "AdminGroupRole" + ] } ], - "providerPlugin": "awscloudformation", - "service": "Lambda", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", + "logicalId": "apinutritionapi" + }, + "lastPushTimeStamp": "2026-03-24T03:10:58.631Z", "output": { - "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole8dc6052c-main", - "Region": "us-east-1", - "Arn": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-main", - "Name": "lognutrition-main", - "LambdaExecutionRole": "fitnesstrackerLambdaRole8dc6052c-main" + "ApiName": "nutritionapi", + "RootUrl": "https://hmydcaubcb.execute-api.us-east-1.amazonaws.com/main", + "ApiId": "hmydcaubcb" }, - "lastPushTimeStamp": "2026-03-24T00:40:26.035Z", + "lastPushDirHash": "5JwuGoxSHfV3nT5/dIukaklIOKI=" + }, + "adminapi": { + "service": "API Gateway", + "providerPlugin": "awscloudformation", + "dependsOn": [ + { + "category": "function", + "resourceName": "admin", + "attributes": [ + "Name", + "Arn" + ] + }, + { + "category": "auth", + "resourceName": "fitnesstracker33f5545533f55455", + "attributes": [ + "UserPoolId" + ] + }, + { + "category": "auth", + "resourceName": "userPoolGroups", + "attributes": [ + "AdminGroupRole" + ] + } + ], "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", - "logicalId": "functionlognutrition" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", + "logicalId": "apiadminapi" }, - "s3Bucket": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip" + "lastPushTimeStamp": "2026-03-24T03:10:58.631Z", + "output": { + "ApiName": "adminapi", + "RootUrl": "https://oxq86r59h6.execute-api.us-east-1.amazonaws.com/main", + "ApiId": "oxq86r59h6" }, - "lastBuildTimeStamp": "2026-03-23T18:49:13.048Z", - "lastBuildType": "PROD", - "lastPackageTimeStamp": "2026-03-23T18:49:13.590Z", - "distZipFilename": "lognutrition-554b5263566866516c6c-build.zip", - "lastPushDirHash": "cvWf4K5nJd9hIYUUzDbXROaTzek=" + "lastPushDirHash": "SI1snudM0j/SqX5HIasSB/7nF3k=" } } } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/adminapi/build/adminapi-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/adminapi/build/adminapi-cloudformation-template.json index 03f897a5ce3..63a8fcdb155 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/adminapi/build/adminapi-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/adminapi/build/adminapi-cloudformation-template.json @@ -1,10 +1,10 @@ { - "Description": "API Gateway Resource for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-API Gateway\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -104,7 +104,7 @@ "-", [ { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" }, "AdminGroupRole" ] @@ -426,7 +426,7 @@ "Name": "adminapi" } }, - "adminapiDefault4XXResponse85f5ca6c": { + "adminapiDefault4XXResponse0e27c647": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -441,7 +441,7 @@ } } }, - "adminapiDefault5XXResponse85f5ca6c": { + "adminapiDefault5XXResponse0e27c647": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -456,7 +456,7 @@ } } }, - "DeploymentAPIGWadminapi7b0e0b8f": { + "DeploymentAPIGWadminapiad7711e6": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -474,8 +474,8 @@ } }, "DependsOn": [ - "adminapiDefault4XXResponse85f5ca6c", - "adminapiDefault5XXResponse85f5ca6c" + "adminapiDefault4XXResponse0e27c647", + "adminapiDefault5XXResponse0e27c647" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/cloudformation-template.json index a82fa55dc68..cd07bb81a76 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/cloudformation-template.json @@ -1,608 +1,609 @@ { - "Parameters": { - "env": { - "Type": "String", - "Default": "NONE" - }, - "AppSyncApiName": { - "Type": "String", - "Default": "AppSyncSimpleTransform" - }, - "AuthCognitoUserPoolId": { - "Type": "String" - }, - "DynamoDBModelTableReadIOPS": { - "Type": "Number", - "Default": 5, - "Description": "The number of read IOPS the table should support." - }, - "DynamoDBModelTableWriteIOPS": { - "Type": "Number", - "Default": 5, - "Description": "The number of write IOPS the table should support." - }, - "DynamoDBBillingMode": { - "Type": "String", - "Default": "PAY_PER_REQUEST", - "AllowedValues": [ - "PAY_PER_REQUEST", - "PROVISIONED" - ], - "Description": "Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes." - }, - "DynamoDBEnablePointInTimeRecovery": { - "Type": "String", - "Default": "false", - "AllowedValues": [ - "true", - "false" - ], - "Description": "Whether to enable Point in Time Recovery on the table." - }, - "DynamoDBEnableServerSideEncryption": { - "Type": "String", - "Default": "true", - "AllowedValues": [ - "true", - "false" - ], - "Description": "Enable server side encryption powered by KMS." - }, - "S3DeploymentBucket": { - "Type": "String", - "Description": "An S3 Bucket name where assets are deployed" + "Parameters": { + "env": { + "Type": "String", + "Default": "NONE" + }, + "AppSyncApiName": { + "Type": "String", + "Default": "AppSyncSimpleTransform" + }, + "AuthCognitoUserPoolId": { + "Type": "String" + }, + "DynamoDBModelTableReadIOPS": { + "Type": "Number", + "Default": 5, + "Description": "The number of read IOPS the table should support." + }, + "DynamoDBModelTableWriteIOPS": { + "Type": "Number", + "Default": 5, + "Description": "The number of write IOPS the table should support." + }, + "DynamoDBBillingMode": { + "Type": "String", + "Default": "PAY_PER_REQUEST", + "AllowedValues": [ + "PAY_PER_REQUEST", + "PROVISIONED" + ], + "Description": "Configure @model types to create DynamoDB tables with PAY_PER_REQUEST or PROVISIONED billing modes." + }, + "DynamoDBEnablePointInTimeRecovery": { + "Type": "String", + "Default": "false", + "AllowedValues": [ + "true", + "false" + ], + "Description": "Whether to enable Point in Time Recovery on the table." + }, + "DynamoDBEnableServerSideEncryption": { + "Type": "String", + "Default": "true", + "AllowedValues": [ + "true", + "false" + ], + "Description": "Enable server side encryption powered by KMS." + }, + "S3DeploymentBucket": { + "Type": "String", + "Description": "An S3 Bucket name where assets are deployed" + }, + "S3DeploymentRootKey": { + "Type": "String", + "Description": "An S3 key relative to the S3DeploymentBucket that points to the root of the deployment directory." + } + }, + "Resources": { + "GraphQLAPI": { + "Type": "AWS::AppSync::GraphQLApi", + "Properties": { + "AdditionalAuthenticationProviders": [ + { + "AuthenticationType": "API_KEY" + } + ], + "AuthenticationType": "AMAZON_COGNITO_USER_POOLS", + "Name": { + "Fn::Join": [ + "", + [ + { + "Ref": "AppSyncApiName" + }, + "-", + { + "Ref": "env" + } + ] + ] }, - "S3DeploymentRootKey": { - "Type": "String", - "Description": "An S3 key relative to the S3DeploymentBucket that points to the root of the deployment directory." + "UserPoolConfig": { + "AwsRegion": { + "Ref": "AWS::Region" + }, + "DefaultAction": "ALLOW", + "UserPoolId": { + "Ref": "AuthCognitoUserPoolId" + } } + } }, - "Resources": { - "GraphQLAPI": { - "Type": "AWS::AppSync::GraphQLApi", - "Properties": { - "AdditionalAuthenticationProviders": [ - { - "AuthenticationType": "API_KEY" - } - ], - "AuthenticationType": "AMAZON_COGNITO_USER_POOLS", - "Name": { - "Fn::Join": [ - "", - [ - { - "Ref": "AppSyncApiName" - }, - "-", - { - "Ref": "env" - } - ] - ] - }, - "UserPoolConfig": { - "AwsRegion": { - "Ref": "AWS::Region" - }, - "DefaultAction": "ALLOW", - "UserPoolId": { - "Ref": "AuthCognitoUserPoolId" - } - } - } - }, - "GraphQLAPITransformerSchema3CB2AE18": { - "Type": "AWS::AppSync::GraphQLSchema", - "Properties": { - "ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "DefinitionS3Location": { - "Fn::Join": [ - "", - [ - "s3://", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/schema.graphql" - ] - ] - } - } + "GraphQLAPITransformerSchema3CB2AE18": { + "Type": "AWS::AppSync::GraphQLSchema", + "Properties": { + "ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] }, - "GraphQLAPIDefaultApiKey215A6DD7": { - "Type": "AWS::AppSync::ApiKey", - "Properties": { - "ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "Description": "graphql", - "Expires": 1774917627 - } + "DefinitionS3Location": { + "Fn::Join": [ + "", + [ + "s3://", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/schema.graphql" + ] + ] + } + } + }, + "GraphQLAPIDefaultApiKey215A6DD7": { + "Type": "AWS::AppSync::ApiKey", + "Properties": { + "ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] }, - "GraphQLAPINONEDS95A13CF0": { - "Type": "AWS::AppSync::DataSource", - "Properties": { - "ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "Description": "None Data Source for Pipeline functions", - "Name": "NONE_DS", - "Type": "NONE" - } + "Description": "graphql", + "Expires": 1774926196 + } + }, + "GraphQLAPINONEDS95A13CF0": { + "Type": "AWS::AppSync::DataSource", + "Properties": { + "ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] }, - "WorkoutProgram": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "DynamoDBModelTableReadIOPS": { - "Ref": "DynamoDBModelTableReadIOPS" - }, - "DynamoDBModelTableWriteIOPS": { - "Ref": "DynamoDBModelTableWriteIOPS" - }, - "DynamoDBBillingMode": { - "Ref": "DynamoDBBillingMode" - }, - "DynamoDBEnablePointInTimeRecovery": { - "Ref": "DynamoDBEnablePointInTimeRecovery" - }, - "DynamoDBEnableServerSideEncryption": { - "Ref": "DynamoDBEnableServerSideEncryption" - }, - "referencetotransformerrootstackenv10C5A902Ref": { - "Ref": "env" - }, - "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { - "Fn::GetAtt": [ - "GraphQLAPINONEDS95A13CF0", - "Name" - ] - }, - "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { - "Ref": "S3DeploymentBucket" - }, - "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { - "Ref": "S3DeploymentRootKey" - } - }, - "TemplateURL": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/stacks/WorkoutProgram.json" - ] - ] - } - }, - "DependsOn": [ - "GraphQLAPITransformerSchema3CB2AE18" + "Description": "None Data Source for Pipeline functions", + "Name": "NONE_DS", + "Type": "NONE" + } + }, + "WorkoutProgram": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "DynamoDBModelTableReadIOPS": { + "Ref": "DynamoDBModelTableReadIOPS" + }, + "DynamoDBModelTableWriteIOPS": { + "Ref": "DynamoDBModelTableWriteIOPS" + }, + "DynamoDBBillingMode": { + "Ref": "DynamoDBBillingMode" + }, + "DynamoDBEnablePointInTimeRecovery": { + "Ref": "DynamoDBEnablePointInTimeRecovery" + }, + "DynamoDBEnableServerSideEncryption": { + "Ref": "DynamoDBEnableServerSideEncryption" + }, + "referencetotransformerrootstackenv10C5A902Ref": { + "Ref": "env" + }, + "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" ] - }, - "Exercise": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "DynamoDBModelTableReadIOPS": { - "Ref": "DynamoDBModelTableReadIOPS" - }, - "DynamoDBModelTableWriteIOPS": { - "Ref": "DynamoDBModelTableWriteIOPS" - }, - "DynamoDBBillingMode": { - "Ref": "DynamoDBBillingMode" - }, - "DynamoDBEnablePointInTimeRecovery": { - "Ref": "DynamoDBEnablePointInTimeRecovery" - }, - "DynamoDBEnableServerSideEncryption": { - "Ref": "DynamoDBEnableServerSideEncryption" - }, - "referencetotransformerrootstackenv10C5A902Ref": { - "Ref": "env" - }, - "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { - "Ref": "S3DeploymentBucket" - }, - "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { - "Ref": "S3DeploymentRootKey" - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId" - ] - }, - "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { - "Fn::GetAtt": [ - "GraphQLAPINONEDS95A13CF0", - "Name" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncF52D36F4F": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncFunction55BF88AFFunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId" - ] - } - }, - "TemplateURL": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/stacks/Exercise.json" - ] - ] - } - }, - "DependsOn": [ - "GraphQLAPITransformerSchema3CB2AE18" + }, + "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { + "Fn::GetAtt": [ + "GraphQLAPINONEDS95A13CF0", + "Name" ] + }, + "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { + "Ref": "S3DeploymentBucket" + }, + "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { + "Ref": "S3DeploymentRootKey" + } }, - "Meal": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "DynamoDBModelTableReadIOPS": { - "Ref": "DynamoDBModelTableReadIOPS" - }, - "DynamoDBModelTableWriteIOPS": { - "Ref": "DynamoDBModelTableWriteIOPS" - }, - "DynamoDBBillingMode": { - "Ref": "DynamoDBBillingMode" - }, - "DynamoDBEnablePointInTimeRecovery": { - "Ref": "DynamoDBEnablePointInTimeRecovery" - }, - "DynamoDBEnableServerSideEncryption": { - "Ref": "DynamoDBEnableServerSideEncryption" - }, - "referencetotransformerrootstackenv10C5A902Ref": { - "Ref": "env" - }, - "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { - "Fn::GetAtt": [ - "GraphQLAPINONEDS95A13CF0", - "Name" - ] - }, - "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { - "Ref": "S3DeploymentBucket" - }, - "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { - "Ref": "S3DeploymentRootKey" - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId" - ] - }, - "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C": { - "Fn::GetAtt": [ - "WorkoutProgram", - "Outputs.transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId" - ] - } - }, - "TemplateURL": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/stacks/Meal.json" - ] - ] - } - }, - "DependsOn": [ - "GraphQLAPITransformerSchema3CB2AE18" + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/stacks/WorkoutProgram.json" + ] + ] + } + }, + "DependsOn": [ + "GraphQLAPITransformerSchema3CB2AE18" + ] + }, + "Exercise": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "DynamoDBModelTableReadIOPS": { + "Ref": "DynamoDBModelTableReadIOPS" + }, + "DynamoDBModelTableWriteIOPS": { + "Ref": "DynamoDBModelTableWriteIOPS" + }, + "DynamoDBBillingMode": { + "Ref": "DynamoDBBillingMode" + }, + "DynamoDBEnablePointInTimeRecovery": { + "Ref": "DynamoDBEnablePointInTimeRecovery" + }, + "DynamoDBEnableServerSideEncryption": { + "Ref": "DynamoDBEnableServerSideEncryption" + }, + "referencetotransformerrootstackenv10C5A902Ref": { + "Ref": "env" + }, + "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { + "Ref": "S3DeploymentBucket" + }, + "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { + "Ref": "S3DeploymentRootKey" + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId" + ] + }, + "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { + "Fn::GetAtt": [ + "GraphQLAPINONEDS95A13CF0", + "Name" ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncF52D36F4F": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncFunction55BF88AFFunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId" + ] + } }, - "ConnectionStack": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { - "Fn::GetAtt": [ - "GraphQLAPINONEDS95A13CF0", - "Name" - ] - }, - "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { - "Ref": "S3DeploymentBucket" - }, - "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { - "Ref": "S3DeploymentRootKey" - }, - "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseDataSourceE8B787D0Name": { - "Fn::GetAtt": [ - "Exercise", - "Outputs.transformerrootstackExerciseExerciseDataSourceE8B787D0Name" - ] - }, - "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseTable2F3E478ERef": { - "Fn::GetAtt": [ - "Exercise", - "Outputs.transformerrootstackExerciseExerciseTable2F3E478ERef" - ] - } - }, - "TemplateURL": { - "Fn::Join": [ - "", - [ - "https://s3.", - { - "Ref": "AWS::Region" - }, - ".", - { - "Ref": "AWS::URLSuffix" - }, - "/", - { - "Ref": "S3DeploymentBucket" - }, - "/", - { - "Ref": "S3DeploymentRootKey" - }, - "/stacks/ConnectionStack.json" - ] - ] - } - }, - "DependsOn": [ - "Exercise", - "GraphQLAPITransformerSchema3CB2AE18" + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/stacks/Exercise.json" + ] + ] + } + }, + "DependsOn": [ + "GraphQLAPITransformerSchema3CB2AE18" + ] + }, + "Meal": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "DynamoDBModelTableReadIOPS": { + "Ref": "DynamoDBModelTableReadIOPS" + }, + "DynamoDBModelTableWriteIOPS": { + "Ref": "DynamoDBModelTableWriteIOPS" + }, + "DynamoDBBillingMode": { + "Ref": "DynamoDBBillingMode" + }, + "DynamoDBEnablePointInTimeRecovery": { + "Ref": "DynamoDBEnablePointInTimeRecovery" + }, + "DynamoDBEnableServerSideEncryption": { + "Ref": "DynamoDBEnableServerSideEncryption" + }, + "referencetotransformerrootstackenv10C5A902Ref": { + "Ref": "env" + }, + "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" ] + }, + "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { + "Fn::GetAtt": [ + "GraphQLAPINONEDS95A13CF0", + "Name" + ] + }, + "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { + "Ref": "S3DeploymentBucket" + }, + "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { + "Ref": "S3DeploymentRootKey" + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId" + ] + }, + "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C": { + "Fn::GetAtt": [ + "WorkoutProgram", + "Outputs.transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId" + ] + } }, - "CustomResourcesjson": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "Parameters": { - "AppSyncApiId": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "AppSyncApiName": { - "Ref": "AppSyncApiName" - }, - "env": { - "Ref": "env" - }, - "S3DeploymentBucket": { - "Ref": "S3DeploymentBucket" - }, - "S3DeploymentRootKey": { - "Ref": "S3DeploymentRootKey" - } - }, - "TemplateURL": { - "Fn::Join": [ - "/", - [ - "https://s3.amazonaws.com", - { - "Ref": "S3DeploymentBucket" - }, - { - "Ref": "S3DeploymentRootKey" - }, - "stacks", - "CustomResources.json" - ] - ] - } - }, - "DependsOn": [ - "GraphQLAPI", - "GraphQLAPITransformerSchema3CB2AE18", - "WorkoutProgram", - "Exercise", - "Meal", - "ConnectionStack" + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/stacks/Meal.json" ] + ] } + }, + "DependsOn": [ + "GraphQLAPITransformerSchema3CB2AE18" + ] }, - "Outputs": { - "GraphQLAPIKeyOutput": { - "Description": "Your GraphQL API ID.", - "Value": { - "Fn::GetAtt": [ - "GraphQLAPIDefaultApiKey215A6DD7", - "ApiKey" - ] - }, - "Export": { - "Name": { - "Fn::Join": [ - ":", - [ - { - "Ref": "AWS::StackName" - }, - "GraphQLApiKey" - ] - ] - } - } + "ConnectionStack": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "referencetotransformerrootstackGraphQLAPI20497F53ApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name": { + "Fn::GetAtt": [ + "GraphQLAPINONEDS95A13CF0", + "Name" + ] + }, + "referencetotransformerrootstackS3DeploymentBucket7592718ARef": { + "Ref": "S3DeploymentBucket" + }, + "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref": { + "Ref": "S3DeploymentRootKey" + }, + "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseDataSourceE8B787D0Name": { + "Fn::GetAtt": [ + "Exercise", + "Outputs.transformerrootstackExerciseExerciseDataSourceE8B787D0Name" + ] + }, + "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseTable2F3E478ERef": { + "Fn::GetAtt": [ + "Exercise", + "Outputs.transformerrootstackExerciseExerciseTable2F3E478ERef" + ] + } }, - "GraphQLAPIIdOutput": { - "Description": "Your GraphQL API ID.", - "Value": { - "Fn::GetAtt": [ - "GraphQLAPI", - "ApiId" - ] - }, - "Export": { - "Name": { - "Fn::Join": [ - ":", - [ - { - "Ref": "AWS::StackName" - }, - "GraphQLApiId" - ] - ] - } - } + "TemplateURL": { + "Fn::Join": [ + "", + [ + "https://s3.", + { + "Ref": "AWS::Region" + }, + ".", + { + "Ref": "AWS::URLSuffix" + }, + "/", + { + "Ref": "S3DeploymentBucket" + }, + "/", + { + "Ref": "S3DeploymentRootKey" + }, + "/stacks/ConnectionStack.json" + ] + ] + } + }, + "DependsOn": [ + "Exercise", + "GraphQLAPITransformerSchema3CB2AE18" + ] + }, + "CustomResourcesjson": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "Parameters": { + "AppSyncApiId": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "AppSyncApiName": { + "Ref": "AppSyncApiName" + }, + "env": { + "Ref": "env" + }, + "S3DeploymentBucket": { + "Ref": "S3DeploymentBucket" + }, + "S3DeploymentRootKey": { + "Ref": "S3DeploymentRootKey" + } }, - "GraphQLAPIEndpointOutput": { - "Description": "Your GraphQL API endpoint.", - "Value": { - "Fn::GetAtt": [ - "GraphQLAPI", - "GraphQLUrl" - ] - }, - "Export": { - "Name": { - "Fn::Join": [ - ":", - [ - { - "Ref": "AWS::StackName" - }, - "GraphQLApiEndpoint" - ] - ] - } - } + "TemplateURL": { + "Fn::Join": [ + "/", + [ + "https://s3.amazonaws.com", + { + "Ref": "S3DeploymentBucket" + }, + { + "Ref": "S3DeploymentRootKey" + }, + "stacks", + "CustomResources.json" + ] + ] + } + }, + "DependsOn": [ + "GraphQLAPI", + "GraphQLAPITransformerSchema3CB2AE18", + "WorkoutProgram", + "Exercise", + "Meal", + "ConnectionStack" + ] + } + }, + "Outputs": { + "GraphQLAPIKeyOutput": { + "Description": "Your GraphQL API ID.", + "Value": { + "Fn::GetAtt": [ + "GraphQLAPIDefaultApiKey215A6DD7", + "ApiKey" + ] + }, + "Export": { + "Name": { + "Fn::Join": [ + ":", + [ + { + "Ref": "AWS::StackName" + }, + "GraphQLApiKey" + ] + ] + } + } + }, + "GraphQLAPIIdOutput": { + "Description": "Your GraphQL API ID.", + "Value": { + "Fn::GetAtt": [ + "GraphQLAPI", + "ApiId" + ] + }, + "Export": { + "Name": { + "Fn::Join": [ + ":", + [ + { + "Ref": "AWS::StackName" + }, + "GraphQLApiId" + ] + ] + } + } + }, + "GraphQLAPIEndpointOutput": { + "Description": "Your GraphQL API endpoint.", + "Value": { + "Fn::GetAtt": [ + "GraphQLAPI", + "GraphQLUrl" + ] + }, + "Export": { + "Name": { + "Fn::Join": [ + ":", + [ + { + "Ref": "AWS::StackName" + }, + "GraphQLApiEndpoint" + ] + ] } + } } + }, + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-AppSync\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/parameters.json index 8cb3b427185..42555b61e79 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/parameters.json @@ -4,10 +4,10 @@ "DynamoDBEnableServerSideEncryption": false, "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, - "S3DeploymentBucket": "amplify-fitnesstracker-main-6fc9a-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa" + "S3DeploymentBucket": "amplify-fitnesstracker-main-a0537-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/67310f5f0a68cc163f9cc58da56e1409a2c21b1d" } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/ConnectionStack.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/ConnectionStack.json index a407b2cb80e..37b698b468d 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/ConnectionStack.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/ConnectionStack.json @@ -111,7 +111,7 @@ { "Ref": "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseTable2F3E478ERef" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/Exercise.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/Exercise.json index a9eeaa78710..cc800da40df 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/Exercise.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/Exercise.json @@ -503,7 +503,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -598,7 +598,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -729,7 +729,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -881,7 +881,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1030,7 +1030,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1067,7 +1067,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1104,7 +1104,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1141,7 +1141,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1172,7 +1172,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/Meal.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/Meal.json index 1f6a60f3fb6..ee4ac331787 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/Meal.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/Meal.json @@ -482,7 +482,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -580,7 +580,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -711,7 +711,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -863,7 +863,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1012,7 +1012,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1082,7 +1082,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1122,7 +1122,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1162,7 +1162,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/WorkoutProgram.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/WorkoutProgram.json index d65c9f90968..8d494295f5d 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/WorkoutProgram.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/build/stacks/WorkoutProgram.json @@ -503,7 +503,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -604,7 +604,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -771,7 +771,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -959,7 +959,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1111,7 +1111,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1232,7 +1232,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1278,7 +1278,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1324,7 +1324,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1403,7 +1403,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/cli-inputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/cli-inputs.json index 06b33fdf9b2..848a1768ba9 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/cli-inputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/cli-inputs.json @@ -5,13 +5,13 @@ "serviceName": "AppSync", "defaultAuthType": { "mode": "AMAZON_COGNITO_USER_POOLS", - "cognitoUserPoolId": "authfitnesstracker9ceb2e7c9ceb2e7c" + "cognitoUserPoolId": "authfitnesstracker33f5545533f55455" }, "additionalAuthTypes": [ { "mode": "API_KEY", "expirationTime": 7, - "apiKeyExpirationDate": "2026-03-29T02:07:08.737Z", + "apiKeyExpirationDate": "2026-03-31T02:59:49.009Z", "keyDescription": "graphql" } ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/parameters.json index dd8ecd65ac8..72d6b16ab57 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/fitnesstracker/parameters.json @@ -4,7 +4,7 @@ "DynamoDBEnableServerSideEncryption": false, "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/nutritionapi/build/nutritionapi-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/nutritionapi/build/nutritionapi-cloudformation-template.json index d0fe820973d..ba07311cb22 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/nutritionapi/build/nutritionapi-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/api/nutritionapi/build/nutritionapi-cloudformation-template.json @@ -1,10 +1,10 @@ { - "Description": "API Gateway Resource for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-API Gateway\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -344,7 +344,7 @@ "-", [ { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" }, "AdminGroupRole" ] @@ -666,7 +666,7 @@ "Name": "nutritionapi" } }, - "nutritionapiDefault4XXResponse22a5dbe5": { + "nutritionapiDefault4XXResponsef55128fc": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -681,7 +681,7 @@ } } }, - "nutritionapiDefault5XXResponse22a5dbe5": { + "nutritionapiDefault5XXResponsef55128fc": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -696,7 +696,7 @@ } } }, - "DeploymentAPIGWnutritionapi7e86ac76": { + "DeploymentAPIGWnutritionapi5caf0abc": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -714,8 +714,8 @@ } }, "DependsOn": [ - "nutritionapiDefault4XXResponse22a5dbe5", - "nutritionapiDefault5XXResponse22a5dbe5" + "nutritionapiDefault4XXResponsef55128fc", + "nutritionapiDefault5XXResponsef55128fc" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/auth-trigger-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker33f5545533f55455/build/auth-trigger-cloudformation-template.json similarity index 94% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/auth-trigger-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker33f5545533f55455/build/auth-trigger-cloudformation-template.json index 94bf04af18a..3d97c0ff654 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/auth-trigger-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker33f5545533f55455/build/auth-trigger-cloudformation-template.json @@ -11,13 +11,13 @@ "userpoolArn": { "Type": "String" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { + "functionfitnesstracker33f5545533f55455PreSignupName": { "Type": "String" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { + "functionfitnesstracker33f5545533f55455PreSignupArn": { "Type": "String" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole": { + "functionfitnesstracker33f5545533f55455PreSignupLambdaExecutionRole": { "Type": "String" } }, @@ -37,7 +37,7 @@ "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" + "Ref": "functionfitnesstracker33f5545533f55455PreSignupName" }, "Principal": "cognito-idp.amazonaws.com", "SourceArn": { @@ -137,13 +137,13 @@ "lambdaConfig": [ { "triggerType": "PreSignUp", - "lambdaFunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "lambdaFunctionName": "fitnesstracker33f5545533f55455PreSignup", "lambdaFunctionArn": { - "Ref": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" + "Ref": "functionfitnesstracker33f5545533f55455PreSignupArn" } } ], - "nonce": "a3ec1075-1f5a-4a6d-9bb3-6caf273873db" + "nonce": "ce3e930d-07f8-4cb9-a927-2ce7de23494f" }, "DependsOn": [ "authTriggerFn7FCFA449", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker33f5545533f55455/build/fitnesstracker33f5545533f55455-cloudformation-template.json similarity index 93% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker33f5545533f55455/build/fitnesstracker33f5545533f55455-cloudformation-template.json index 79def9e5efb..f5ed153a8fe 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker33f5545533f55455/build/fitnesstracker33f5545533f55455-cloudformation-template.json @@ -1,17 +1,17 @@ { - "Description": "Amplify Cognito Stack for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { "Type": "String" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { + "functionfitnesstracker33f5545533f55455PreSignupArn": { "Type": "String", - "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" + "Default": "functionfitnesstracker33f5545533f55455PreSignupArn" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { + "functionfitnesstracker33f5545533f55455PreSignupName": { "Type": "String", - "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" + "Default": "functionfitnesstracker33f5545533f55455PreSignupName" }, "identityPoolName": { "Type": "String" @@ -216,7 +216,7 @@ "UserPoolClientWeb": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes9ceb2e7c_app_clientWeb", + "ClientName": "fitnes33f55455_app_clientWeb", "RefreshTokenValidity": { "Ref": "userpoolClientRefreshTokenValidity" }, @@ -234,7 +234,7 @@ "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes9ceb2e7c_app_client", + "ClientName": "fitnes33f55455_app_client", "GenerateSecret": { "Ref": "userpoolClientGenerateSecret" }, @@ -277,7 +277,7 @@ "Fn::Join": [ "", [ - "upClientLambdaRole9ceb2e7c", + "upClientLambdaRole33f55455", { "Fn::Select": [ 3, @@ -349,12 +349,12 @@ "IdentityPoolName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", + "fitnesstracker33f55455_identitypool_33f55455", { "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", + "fitnesstracker33f55455_identitypool_33f55455__", { "Ref": "env" } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker33f5545533f55455/build/parameters.json similarity index 79% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker33f5545533f55455/build/parameters.json index b80b3f56b64..41d861ce59c 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker33f5545533f55455/build/parameters.json @@ -1,8 +1,8 @@ { - "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", + "identityPoolName": "fitnesstracker33f55455_identitypool_33f55455", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes9ceb2e7c", - "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", + "resourceNameTruncated": "fitnes33f55455", + "userPoolName": "fitnesstracker33f55455_userpool_33f55455", "autoVerifiedAttributes": [ "email" ], @@ -29,10 +29,10 @@ "userpoolClientReadAttributes": [ "email" ], - "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes33f55455_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "9ceb2e7c", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", + "sharedId": "33f55455", + "resourceName": "fitnesstracker33f5545533f55455", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -62,7 +62,7 @@ "dependsOn": [ { "category": "function", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "resourceName": "fitnesstracker33f5545533f55455PreSignup", "triggerProvider": "Cognito", "attributes": [ "Arn", @@ -72,6 +72,6 @@ ], "permissions": [], "authTriggerConnections": [ - "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}" + "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker33f5545533f55455PreSignup\"}" ] } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/cli-inputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker33f5545533f55455/cli-inputs.json similarity index 80% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/cli-inputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker33f5545533f55455/cli-inputs.json index 81dda741522..f8ecf9a776f 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/cli-inputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker33f5545533f55455/cli-inputs.json @@ -1,10 +1,10 @@ { "version": "1", "cognitoConfig": { - "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", + "identityPoolName": "fitnesstracker33f55455_identitypool_33f55455", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes9ceb2e7c", - "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", + "resourceNameTruncated": "fitnes33f55455", + "userPoolName": "fitnesstracker33f55455_userpool_33f55455", "autoVerifiedAttributes": [ "email" ], @@ -31,10 +31,10 @@ "userpoolClientReadAttributes": [ "email" ], - "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes33f55455_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "9ceb2e7c", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", + "sharedId": "33f55455", + "resourceName": "fitnesstracker33f5545533f55455", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json index 12c7040bd48..e34b9d7bd14 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json @@ -1,5 +1,5 @@ { - "Description": "Root Stack for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito-UserPool-Groups\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { @@ -11,21 +11,21 @@ "UnauthRoleArn": { "Type": "String" }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" }, - "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { + "authfitnesstracker33f5545533f55455IdentityPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" + "Default": "authfitnesstracker33f5545533f55455IdentityPoolId" }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { + "authfitnesstracker33f5545533f55455AppClientID": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID" + "Default": "authfitnesstracker33f5545533f55455AppClientID" }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { + "authfitnesstracker33f5545533f55455AppClientIDWeb": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb" + "Default": "authfitnesstracker33f5545533f55455AppClientIDWeb" } }, "Conditions": { @@ -52,7 +52,7 @@ ] }, "UserPoolId": { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" } } }, @@ -72,7 +72,7 @@ "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" + "Ref": "authfitnesstracker33f5545533f55455IdentityPoolId" } }, "ForAnyValue:StringLike": { @@ -87,7 +87,7 @@ "", [ { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" }, "-AdminGroupRole" ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/adminapi/build/adminapi-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/adminapi/build/adminapi-cloudformation-template.json index fe0413d381e..63a8fcdb155 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/adminapi/build/adminapi-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/adminapi/build/adminapi-cloudformation-template.json @@ -1,10 +1,10 @@ { - "Description": "API Gateway Resource for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-API Gateway\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -104,7 +104,7 @@ "-", [ { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" }, "AdminGroupRole" ] @@ -426,7 +426,7 @@ "Name": "adminapi" } }, - "adminapiDefault4XXResponsec0c67e32": { + "adminapiDefault4XXResponse0e27c647": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -441,7 +441,7 @@ } } }, - "adminapiDefault5XXResponsec0c67e32": { + "adminapiDefault5XXResponse0e27c647": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -456,7 +456,7 @@ } } }, - "DeploymentAPIGWadminapia8449e95": { + "DeploymentAPIGWadminapiad7711e6": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -474,8 +474,8 @@ } }, "DependsOn": [ - "adminapiDefault4XXResponsec0c67e32", - "adminapiDefault5XXResponsec0c67e32" + "adminapiDefault4XXResponse0e27c647", + "adminapiDefault5XXResponse0e27c647" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/fitnesstracker/build/cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/fitnesstracker/build/cloudformation-template.json index 651f9ceb637..cd07bb81a76 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/fitnesstracker/build/cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/fitnesstracker/build/cloudformation-template.json @@ -129,7 +129,7 @@ ] }, "Description": "graphql", - "Expires": 1774896554 + "Expires": 1774926196 } }, "GraphQLAPINONEDS95A13CF0": { @@ -604,5 +604,6 @@ } } } - } + }, + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-AppSync\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/nutritionapi/build/nutritionapi-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/nutritionapi/build/nutritionapi-cloudformation-template.json index 1c507689fc5..ba07311cb22 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/nutritionapi/build/nutritionapi-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/nutritionapi/build/nutritionapi-cloudformation-template.json @@ -1,10 +1,10 @@ { - "Description": "API Gateway Resource for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-API Gateway\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -344,7 +344,7 @@ "-", [ { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" }, "AdminGroupRole" ] @@ -666,7 +666,7 @@ "Name": "nutritionapi" } }, - "nutritionapiDefault4XXResponse59a22bc9": { + "nutritionapiDefault4XXResponsef55128fc": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -681,7 +681,7 @@ } } }, - "nutritionapiDefault5XXResponse59a22bc9": { + "nutritionapiDefault5XXResponsef55128fc": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -696,7 +696,7 @@ } } }, - "DeploymentAPIGWnutritionapifc67c40b": { + "DeploymentAPIGWnutritionapi5caf0abc": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -714,8 +714,8 @@ } }, "DependsOn": [ - "nutritionapiDefault4XXResponse59a22bc9", - "nutritionapiDefault5XXResponse59a22bc9" + "nutritionapiDefault4XXResponsef55128fc", + "nutritionapiDefault5XXResponsef55128fc" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/fitnesstracker33f5545533f55455/build/fitnesstracker33f5545533f55455-cloudformation-template.json similarity index 93% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/fitnesstracker33f5545533f55455/build/fitnesstracker33f5545533f55455-cloudformation-template.json index 79def9e5efb..f5ed153a8fe 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/auth/fitnesstracker9ceb2e7c9ceb2e7c/build/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/fitnesstracker33f5545533f55455/build/fitnesstracker33f5545533f55455-cloudformation-template.json @@ -1,17 +1,17 @@ { - "Description": "Amplify Cognito Stack for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { "Type": "String" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { + "functionfitnesstracker33f5545533f55455PreSignupArn": { "Type": "String", - "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" + "Default": "functionfitnesstracker33f5545533f55455PreSignupArn" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { + "functionfitnesstracker33f5545533f55455PreSignupName": { "Type": "String", - "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" + "Default": "functionfitnesstracker33f5545533f55455PreSignupName" }, "identityPoolName": { "Type": "String" @@ -216,7 +216,7 @@ "UserPoolClientWeb": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes9ceb2e7c_app_clientWeb", + "ClientName": "fitnes33f55455_app_clientWeb", "RefreshTokenValidity": { "Ref": "userpoolClientRefreshTokenValidity" }, @@ -234,7 +234,7 @@ "UserPoolClient": { "Type": "AWS::Cognito::UserPoolClient", "Properties": { - "ClientName": "fitnes9ceb2e7c_app_client", + "ClientName": "fitnes33f55455_app_client", "GenerateSecret": { "Ref": "userpoolClientGenerateSecret" }, @@ -277,7 +277,7 @@ "Fn::Join": [ "", [ - "upClientLambdaRole9ceb2e7c", + "upClientLambdaRole33f55455", { "Fn::Select": [ 3, @@ -349,12 +349,12 @@ "IdentityPoolName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", + "fitnesstracker33f55455_identitypool_33f55455", { "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", + "fitnesstracker33f55455_identitypool_33f55455__", { "Ref": "env" } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json index 12c7040bd48..e34b9d7bd14 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json @@ -1,5 +1,5 @@ { - "Description": "Root Stack for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito-UserPool-Groups\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { @@ -11,21 +11,21 @@ "UnauthRoleArn": { "Type": "String" }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" }, - "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { + "authfitnesstracker33f5545533f55455IdentityPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" + "Default": "authfitnesstracker33f5545533f55455IdentityPoolId" }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { + "authfitnesstracker33f5545533f55455AppClientID": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID" + "Default": "authfitnesstracker33f5545533f55455AppClientID" }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { + "authfitnesstracker33f5545533f55455AppClientIDWeb": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb" + "Default": "authfitnesstracker33f5545533f55455AppClientIDWeb" } }, "Conditions": { @@ -52,7 +52,7 @@ ] }, "UserPoolId": { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" } } }, @@ -72,7 +72,7 @@ "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" + "Ref": "authfitnesstracker33f5545533f55455IdentityPoolId" } }, "ForAnyValue:StringLike": { @@ -87,7 +87,7 @@ "", [ { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" }, "-AdminGroupRole" ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json index 5345516d4d9..3874b454557 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json @@ -202,7 +202,7 @@ "APIGatewayAuthStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", "Parameters": { "authRoleName": { "Ref": "AuthRoleName" @@ -211,15 +211,15 @@ "Ref": "UnauthRoleName" }, "env": "main", - "adminapi": { + "nutritionapi": { "Fn::GetAtt": [ - "apiadminapi", + "apinutritionapi", "Outputs.ApiId" ] }, - "nutritionapi": { + "adminapi": { "Fn::GetAtt": [ - "apinutritionapi", + "apiadminapi", "Outputs.ApiId" ] } @@ -229,141 +229,100 @@ "AuthTriggerCustomLambdaStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", "Parameters": { "env": "main", "userpoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, "userpoolArn": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolArn" ] }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole": { + "functionfitnesstracker33f5545533f55455PreSignupLambdaExecutionRole": { "Fn::GetAtt": [ - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "functionfitnesstracker33f5545533f55455PreSignup", "Outputs.LambdaExecutionRoleArn" ] }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { + "functionfitnesstracker33f5545533f55455PreSignupArn": { "Fn::GetAtt": [ - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "functionfitnesstracker33f5545533f55455PreSignup", "Outputs.Arn" ] }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { + "functionfitnesstracker33f5545533f55455PreSignupName": { "Fn::GetAtt": [ - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "functionfitnesstracker33f5545533f55455PreSignup", "Outputs.Name" ] } } }, "DependsOn": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup" + "authfitnesstracker33f5545533f55455", + "functionfitnesstracker33f5545533f55455PreSignup" ] }, - "apiadminapi": { + "authuserPoolGroups": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", "Parameters": { - "functionadminName": { - "Fn::GetAtt": [ - "functionadmin", - "Outputs.Name" - ] - }, - "functionadminArn": { - "Fn::GetAtt": [ - "functionadmin", - "Outputs.Arn" - ] - }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "AuthRoleArn": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.UserPoolId" + "AuthRole", + "Arn" ] }, - "authuserPoolGroupsAdminGroupRole": { + "UnauthRoleArn": { "Fn::GetAtt": [ - "authuserPoolGroups", - "Outputs.AdminGroupRole" + "UnauthRole", + "Arn" ] }, - "env": "main" - } - } - }, - "apifitnesstracker": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/cloudformation-template.json", - "Parameters": { - "AppSyncApiName": "fitnesstracker", - "DynamoDBBillingMode": "PAY_PER_REQUEST", - "DynamoDBEnableServerSideEncryption": false, - "AuthCognitoUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, - "S3DeploymentBucket": "amplify-fitnesstracker-main-6fc9a-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa", - "env": "main" - } - } - }, - "apinutritionapi": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", - "Parameters": { - "functionlognutritionName": { + "authfitnesstracker33f5545533f55455AppClientIDWeb": { "Fn::GetAtt": [ - "functionlognutrition", - "Outputs.Name" - ] - }, - "functionlognutritionArn": { - "Fn::GetAtt": [ - "functionlognutrition", - "Outputs.Arn" + "authfitnesstracker33f5545533f55455", + "Outputs.AppClientIDWeb" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455AppClientID": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.UserPoolId" + "authfitnesstracker33f5545533f55455", + "Outputs.AppClientID" ] }, - "authuserPoolGroupsAdminGroupRole": { + "authfitnesstracker33f5545533f55455IdentityPoolId": { "Fn::GetAtt": [ - "authuserPoolGroups", - "Outputs.AdminGroupRole" + "authfitnesstracker33f5545533f55455", + "Outputs.IdentityPoolId" ] }, "env": "main" } } }, - "authfitnesstracker9ceb2e7c9ceb2e7c": { + "authfitnesstracker33f5545533f55455": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/fitnesstracker33f5545533f55455-cloudformation-template.json", "Parameters": { - "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", + "identityPoolName": "fitnesstracker33f55455_identitypool_33f55455", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes9ceb2e7c", - "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", + "resourceNameTruncated": "fitnes33f55455", + "userPoolName": "fitnesstracker33f55455_userpool_33f55455", "autoVerifiedAttributes": "email", "mfaConfiguration": "OFF", "mfaTypes": "SMS Text Message", @@ -380,10 +339,10 @@ "userpoolClientRefreshTokenValidity": 30, "userpoolClientWriteAttributes": "email", "userpoolClientReadAttributes": "email", - "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes33f55455_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "9ceb2e7c", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", + "sharedId": "33f55455", + "resourceName": "fitnesstracker33f5545533f55455", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -410,98 +369,139 @@ "breakCircularDependency": true, "dependsOn": "[object Object]", "permissions": "", - "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}", + "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker33f5545533f55455PreSignup\"}", "env": "main" } } }, - "authuserPoolGroups": { + "functionfitnesstracker33f5545533f55455PreSignup": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json", "Parameters": { - "AuthRoleArn": { - "Fn::GetAtt": [ - "AuthRole", - "Arn" - ] - }, - "UnauthRoleArn": { + "modules": "email-filter-allowlist", + "resourceName": "fitnesstracker33f5545533f55455PreSignup", + "DOMAINALLOWLIST": "amazon.com", + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/fitnesstracker33f5545533f55455PreSignup-68374859444c45627749-build.zip", + "env": "main" + } + } + }, + "functionlognutrition": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "Parameters": { + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", + "apifitnesstrackerGraphQLAPIIdOutput": { "Fn::GetAtt": [ - "UnauthRole", - "Arn" + "apifitnesstracker", + "Outputs.GraphQLAPIIdOutput" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "env": "main" + } + } + }, + "functionadmin": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", + "Parameters": { + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/admin-7934694b6d366c486d32-build.zip", + "authfitnesstracker33f5545533f55455UserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { - "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.AppClientIDWeb" - ] - }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { - "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.AppClientID" - ] - }, - "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { - "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.IdentityPoolId" - ] - }, "env": "main" } } }, - "functionadmin": { + "apifitnesstracker": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/admin-765632787437744e386e-build.zip", - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "AppSyncApiName": "fitnesstracker", + "DynamoDBBillingMode": "PAY_PER_REQUEST", + "DynamoDBEnableServerSideEncryption": false, + "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, + "S3DeploymentBucket": "amplify-fitnesstracker-main-a0537-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/67310f5f0a68cc163f9cc58da56e1409a2c21b1d", "env": "main" } } }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup": { + "apinutritionapi": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", "Parameters": { - "modules": "email-filter-allowlist", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", - "DOMAINALLOWLIST": "amazon.com", - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip", + "functionlognutritionName": { + "Fn::GetAtt": [ + "functionlognutrition", + "Outputs.Name" + ] + }, + "functionlognutritionArn": { + "Fn::GetAtt": [ + "functionlognutrition", + "Outputs.Arn" + ] + }, + "authfitnesstracker33f5545533f55455UserPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker33f5545533f55455", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.AdminGroupRole" + ] + }, "env": "main" } } }, - "functionlognutrition": { + "apiadminapi": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", - "apifitnesstrackerGraphQLAPIIdOutput": { + "functionadminName": { "Fn::GetAtt": [ - "apifitnesstracker", - "Outputs.GraphQLAPIIdOutput" + "functionadmin", + "Outputs.Name" + ] + }, + "functionadminArn": { + "Fn::GetAtt": [ + "functionadmin", + "Outputs.Arn" + ] + }, + "authfitnesstracker33f5545533f55455UserPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker33f5545533f55455", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.AdminGroupRole" ] }, "env": "main" @@ -512,7 +512,7 @@ "DependsOn": [ "AuthRole", "UnauthRole", - "authfitnesstracker9ceb2e7c9ceb2e7c" + "authfitnesstracker33f5545533f55455" ], "Type": "AWS::Lambda::Function", "Properties": { @@ -622,7 +622,7 @@ }, "idpId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.IdentityPoolId" ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/admin/admin-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/admin/admin-cloudformation-template.json index aaa8618655d..57322afb5e3 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/admin/admin-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/admin/admin-cloudformation-template.json @@ -16,9 +16,9 @@ "s3Key": { "Type": "String" }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" } }, "Conditions": { @@ -74,8 +74,8 @@ "REGION": { "Ref": "AWS::Region" }, - "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "AUTH_FITNESSTRACKER33F5545533F55455_USERPOOLID": { + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" } } }, @@ -96,12 +96,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRole64f55d16", + "fitnesstrackerLambdaRole4a08108a", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRole64f55d16", + "fitnesstrackerLambdaRole4a08108a", "-", { "Ref": "env" @@ -220,7 +220,7 @@ }, ":userpool/", { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" } ] ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/fitnesstracker33f5545533f55455PreSignup/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json similarity index 95% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/fitnesstracker33f5545533f55455PreSignup/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json index 04a3c261a89..e53fff724cb 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/fitnesstracker33f5545533f55455PreSignup/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json @@ -71,12 +71,12 @@ "FunctionName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "fitnesstracker33f5545533f55455PreSignup", { "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "fitnesstracker33f5545533f55455PreSignup", "-", { "Ref": "env" @@ -129,12 +129,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "fitnesstracker33f5545533f55455PreSignup", { "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "fitnesstracker33f5545533f55455PreSignup", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/lognutrition/lognutrition-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/lognutrition/lognutrition-cloudformation-template.json index e1789ef2c20..34e97f53ec9 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/lognutrition/lognutrition-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/lognutrition/lognutrition-cloudformation-template.json @@ -122,12 +122,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRole8dc6052c", + "fitnesstrackerLambdaRole2824d4b4", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRole8dc6052c", + "fitnesstrackerLambdaRole2824d4b4", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/root-cloudformation-stack.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/root-cloudformation-stack.json index 5345516d4d9..3874b454557 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/root-cloudformation-stack.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/awscloudformation/build/root-cloudformation-stack.json @@ -202,7 +202,7 @@ "APIGatewayAuthStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", "Parameters": { "authRoleName": { "Ref": "AuthRoleName" @@ -211,15 +211,15 @@ "Ref": "UnauthRoleName" }, "env": "main", - "adminapi": { + "nutritionapi": { "Fn::GetAtt": [ - "apiadminapi", + "apinutritionapi", "Outputs.ApiId" ] }, - "nutritionapi": { + "adminapi": { "Fn::GetAtt": [ - "apinutritionapi", + "apiadminapi", "Outputs.ApiId" ] } @@ -229,141 +229,100 @@ "AuthTriggerCustomLambdaStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", "Parameters": { "env": "main", "userpoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, "userpoolArn": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolArn" ] }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole": { + "functionfitnesstracker33f5545533f55455PreSignupLambdaExecutionRole": { "Fn::GetAtt": [ - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "functionfitnesstracker33f5545533f55455PreSignup", "Outputs.LambdaExecutionRoleArn" ] }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { + "functionfitnesstracker33f5545533f55455PreSignupArn": { "Fn::GetAtt": [ - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "functionfitnesstracker33f5545533f55455PreSignup", "Outputs.Arn" ] }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { + "functionfitnesstracker33f5545533f55455PreSignupName": { "Fn::GetAtt": [ - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "functionfitnesstracker33f5545533f55455PreSignup", "Outputs.Name" ] } } }, "DependsOn": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup" + "authfitnesstracker33f5545533f55455", + "functionfitnesstracker33f5545533f55455PreSignup" ] }, - "apiadminapi": { + "authuserPoolGroups": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", "Parameters": { - "functionadminName": { - "Fn::GetAtt": [ - "functionadmin", - "Outputs.Name" - ] - }, - "functionadminArn": { - "Fn::GetAtt": [ - "functionadmin", - "Outputs.Arn" - ] - }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "AuthRoleArn": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.UserPoolId" + "AuthRole", + "Arn" ] }, - "authuserPoolGroupsAdminGroupRole": { + "UnauthRoleArn": { "Fn::GetAtt": [ - "authuserPoolGroups", - "Outputs.AdminGroupRole" + "UnauthRole", + "Arn" ] }, - "env": "main" - } - } - }, - "apifitnesstracker": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/cloudformation-template.json", - "Parameters": { - "AppSyncApiName": "fitnesstracker", - "DynamoDBBillingMode": "PAY_PER_REQUEST", - "DynamoDBEnableServerSideEncryption": false, - "AuthCognitoUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, - "S3DeploymentBucket": "amplify-fitnesstracker-main-6fc9a-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa", - "env": "main" - } - } - }, - "apinutritionapi": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", - "Parameters": { - "functionlognutritionName": { + "authfitnesstracker33f5545533f55455AppClientIDWeb": { "Fn::GetAtt": [ - "functionlognutrition", - "Outputs.Name" - ] - }, - "functionlognutritionArn": { - "Fn::GetAtt": [ - "functionlognutrition", - "Outputs.Arn" + "authfitnesstracker33f5545533f55455", + "Outputs.AppClientIDWeb" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455AppClientID": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.UserPoolId" + "authfitnesstracker33f5545533f55455", + "Outputs.AppClientID" ] }, - "authuserPoolGroupsAdminGroupRole": { + "authfitnesstracker33f5545533f55455IdentityPoolId": { "Fn::GetAtt": [ - "authuserPoolGroups", - "Outputs.AdminGroupRole" + "authfitnesstracker33f5545533f55455", + "Outputs.IdentityPoolId" ] }, "env": "main" } } }, - "authfitnesstracker9ceb2e7c9ceb2e7c": { + "authfitnesstracker33f5545533f55455": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/fitnesstracker33f5545533f55455-cloudformation-template.json", "Parameters": { - "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", + "identityPoolName": "fitnesstracker33f55455_identitypool_33f55455", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes9ceb2e7c", - "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", + "resourceNameTruncated": "fitnes33f55455", + "userPoolName": "fitnesstracker33f55455_userpool_33f55455", "autoVerifiedAttributes": "email", "mfaConfiguration": "OFF", "mfaTypes": "SMS Text Message", @@ -380,10 +339,10 @@ "userpoolClientRefreshTokenValidity": 30, "userpoolClientWriteAttributes": "email", "userpoolClientReadAttributes": "email", - "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes33f55455_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "9ceb2e7c", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", + "sharedId": "33f55455", + "resourceName": "fitnesstracker33f5545533f55455", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -410,98 +369,139 @@ "breakCircularDependency": true, "dependsOn": "[object Object]", "permissions": "", - "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}", + "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker33f5545533f55455PreSignup\"}", "env": "main" } } }, - "authuserPoolGroups": { + "functionfitnesstracker33f5545533f55455PreSignup": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json", "Parameters": { - "AuthRoleArn": { - "Fn::GetAtt": [ - "AuthRole", - "Arn" - ] - }, - "UnauthRoleArn": { + "modules": "email-filter-allowlist", + "resourceName": "fitnesstracker33f5545533f55455PreSignup", + "DOMAINALLOWLIST": "amazon.com", + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/fitnesstracker33f5545533f55455PreSignup-68374859444c45627749-build.zip", + "env": "main" + } + } + }, + "functionlognutrition": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "Parameters": { + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", + "apifitnesstrackerGraphQLAPIIdOutput": { "Fn::GetAtt": [ - "UnauthRole", - "Arn" + "apifitnesstracker", + "Outputs.GraphQLAPIIdOutput" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "env": "main" + } + } + }, + "functionadmin": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", + "Parameters": { + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/admin-7934694b6d366c486d32-build.zip", + "authfitnesstracker33f5545533f55455UserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { - "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.AppClientIDWeb" - ] - }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { - "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.AppClientID" - ] - }, - "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { - "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "Outputs.IdentityPoolId" - ] - }, "env": "main" } } }, - "functionadmin": { + "apifitnesstracker": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/admin-765632787437744e386e-build.zip", - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "AppSyncApiName": "fitnesstracker", + "DynamoDBBillingMode": "PAY_PER_REQUEST", + "DynamoDBEnableServerSideEncryption": false, + "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, + "S3DeploymentBucket": "amplify-fitnesstracker-main-a0537-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/67310f5f0a68cc163f9cc58da56e1409a2c21b1d", "env": "main" } } }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup": { + "apinutritionapi": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", "Parameters": { - "modules": "email-filter-allowlist", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", - "DOMAINALLOWLIST": "amazon.com", - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip", + "functionlognutritionName": { + "Fn::GetAtt": [ + "functionlognutrition", + "Outputs.Name" + ] + }, + "functionlognutritionArn": { + "Fn::GetAtt": [ + "functionlognutrition", + "Outputs.Arn" + ] + }, + "authfitnesstracker33f5545533f55455UserPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker33f5545533f55455", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.AdminGroupRole" + ] + }, "env": "main" } } }, - "functionlognutrition": { + "apiadminapi": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", - "apifitnesstrackerGraphQLAPIIdOutput": { + "functionadminName": { "Fn::GetAtt": [ - "apifitnesstracker", - "Outputs.GraphQLAPIIdOutput" + "functionadmin", + "Outputs.Name" + ] + }, + "functionadminArn": { + "Fn::GetAtt": [ + "functionadmin", + "Outputs.Arn" + ] + }, + "authfitnesstracker33f5545533f55455UserPoolId": { + "Fn::GetAtt": [ + "authfitnesstracker33f5545533f55455", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.AdminGroupRole" ] }, "env": "main" @@ -512,7 +512,7 @@ "DependsOn": [ "AuthRole", "UnauthRole", - "authfitnesstracker9ceb2e7c9ceb2e7c" + "authfitnesstracker33f5545533f55455" ], "Type": "AWS::Lambda::Function", "Properties": { @@ -622,7 +622,7 @@ }, "idpId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.IdentityPoolId" ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/backend-config.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/backend-config.json index 3267de076bd..d15b0adea45 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/backend-config.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/backend-config.json @@ -15,7 +15,7 @@ "UserPoolId" ], "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" + "resourceName": "fitnesstracker33f5545533f55455" }, { "attributes": [ @@ -35,7 +35,7 @@ "UserPoolId" ], "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" + "resourceName": "fitnesstracker33f5545533f55455" } ], "output": { @@ -43,7 +43,7 @@ "additionalAuthenticationProviders": [ { "apiKeyConfig": { - "apiKeyExpirationDate": "2026-03-29T02:07:08.737Z", + "apiKeyExpirationDate": "2026-03-31T02:59:49.009Z", "apiKeyExpirationDays": 7, "description": "graphql" }, @@ -53,7 +53,7 @@ "defaultAuthentication": { "authenticationType": "AMAZON_COGNITO_USER_POOLS", "userPoolConfig": { - "userPoolId": "authfitnesstracker9ceb2e7c9ceb2e7c" + "userPoolId": "authfitnesstracker33f5545533f55455" } } } @@ -76,7 +76,7 @@ "UserPoolId" ], "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" + "resourceName": "fitnesstracker33f5545533f55455" }, { "attributes": [ @@ -91,7 +91,7 @@ } }, "auth": { - "fitnesstracker9ceb2e7c9ceb2e7c": { + "fitnesstracker33f5545533f55455": { "customAuth": false, "dependsOn": [ { @@ -100,7 +100,7 @@ "Name" ], "category": "function", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "resourceName": "fitnesstracker33f5545533f55455PreSignup", "triggerProvider": "Cognito" } ], @@ -135,7 +135,7 @@ "IdentityPoolId" ], "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" + "resourceName": "fitnesstracker33f5545533f55455" } ], "providerPlugin": "awscloudformation", @@ -151,13 +151,13 @@ "UserPoolId" ], "category": "auth", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c" + "resourceName": "fitnesstracker33f5545533f55455" } ], "providerPlugin": "awscloudformation", "service": "Lambda" }, - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup": { + "fitnesstracker33f5545533f55455PreSignup": { "build": true, "providerPlugin": "awscloudformation", "service": "Lambda" @@ -194,27 +194,27 @@ } ] }, - "AMPLIFY_function_fitnesstracker9ceb2e7c9ceb2e7cPreSignup_DOMAINALLOWLIST": { + "AMPLIFY_function_fitnesstracker33f5545533f55455PreSignup_DOMAINALLOWLIST": { "usedBy": [ { "category": "function", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" + "resourceName": "fitnesstracker33f5545533f55455PreSignup" } ] }, - "AMPLIFY_function_fitnesstracker9ceb2e7c9ceb2e7cPreSignup_deploymentBucketName": { + "AMPLIFY_function_fitnesstracker33f5545533f55455PreSignup_deploymentBucketName": { "usedBy": [ { "category": "function", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" + "resourceName": "fitnesstracker33f5545533f55455PreSignup" } ] }, - "AMPLIFY_function_fitnesstracker9ceb2e7c9ceb2e7cPreSignup_s3Key": { + "AMPLIFY_function_fitnesstracker33f5545533f55455PreSignup_s3Key": { "usedBy": [ { "category": "function", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" + "resourceName": "fitnesstracker33f5545533f55455PreSignup" } ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/admin/admin-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/admin/admin-cloudformation-template.json index aaa8618655d..57322afb5e3 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/admin/admin-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/admin/admin-cloudformation-template.json @@ -16,9 +16,9 @@ "s3Key": { "Type": "String" }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" } }, "Conditions": { @@ -74,8 +74,8 @@ "REGION": { "Ref": "AWS::Region" }, - "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "AUTH_FITNESSTRACKER33F5545533F55455_USERPOOLID": { + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" } } }, @@ -96,12 +96,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRole64f55d16", + "fitnesstrackerLambdaRole4a08108a", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRole64f55d16", + "fitnesstrackerLambdaRole4a08108a", "-", { "Ref": "env" @@ -220,7 +220,7 @@ }, ":userpool/", { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" } ] ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/admin/function-parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/admin/function-parameters.json index c3c652077d2..f87ac79fa6f 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/admin/function-parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/admin/function-parameters.json @@ -1,7 +1,7 @@ { "permissions": { "auth": { - "fitnesstracker9ceb2e7c9ceb2e7c": [ + "fitnesstracker33f5545533f55455": [ "read" ] } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/amplify.state b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/amplify.state similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/amplify.state rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/amplify.state diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/custom-policies.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/custom-policies.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/custom-policies.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/custom-policies.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json similarity index 95% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json index 04a3c261a89..e53fff724cb 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json @@ -71,12 +71,12 @@ "FunctionName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "fitnesstracker33f5545533f55455PreSignup", { "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "fitnesstracker33f5545533f55455PreSignup", "-", { "Ref": "env" @@ -129,12 +129,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "fitnesstracker33f5545533f55455PreSignup", { "Fn::Join": [ "", [ - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "fitnesstracker33f5545533f55455PreSignup", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/function-parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/function-parameters.json similarity index 61% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/function-parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/function-parameters.json index 911d754ad38..ddc07525de2 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/function-parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/function-parameters.json @@ -3,14 +3,14 @@ "modules": [ "email-filter-allowlist" ], - "parentResource": "fitnesstracker9ceb2e7c9ceb2e7c", - "functionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "parentResource": "fitnesstracker33f5545533f55455", + "functionName": "fitnesstracker33f5545533f55455PreSignup", + "resourceName": "fitnesstracker33f5545533f55455PreSignup", "parentStack": "auth", "triggerEnvs": "[]", "triggerDir": "/snapshot/amplify-cli/build/node_modules/@aws-amplify/amplify-category-auth/provider-utils/awscloudformation/triggers/PreSignup", "triggerTemplate": "PreSignup.json.ejs", "triggerEventPath": "PreSignup.event.json", - "roleName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "roleName": "fitnesstracker33f5545533f55455PreSignup", "skipEdit": true } \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/parameters.json new file mode 100644 index 00000000000..020628a583f --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/parameters.json @@ -0,0 +1,4 @@ +{ + "modules": "email-filter-allowlist", + "resourceName": "fitnesstracker33f5545533f55455PreSignup" +} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/email-filter-allowlist.js b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/src/email-filter-allowlist.js similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/email-filter-allowlist.js rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/src/email-filter-allowlist.js diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/event.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/src/event.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/event.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/src/event.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/index.js b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/src/index.js similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/index.js rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/src/index.js diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/package.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/src/package.json similarity index 78% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/package.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/src/package.json index af2b3ccd67f..9d1790c9a5c 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/package.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/src/package.json @@ -1,5 +1,5 @@ { - "name": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "name": "fitnesstracker33f5545533f55455PreSignup", "version": "2.0.0", "description": "Lambda function generated by Amplify", "main": "index.js", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/yarn.lock b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/src/yarn.lock similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/src/yarn.lock rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker33f5545533f55455PreSignup/src/yarn.lock diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/parameters.json deleted file mode 100644 index 22e01f31ee2..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup/parameters.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "modules": "email-filter-allowlist", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" -} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/lognutrition/lognutrition-cloudformation-template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/lognutrition/lognutrition-cloudformation-template.json index e1789ef2c20..34e97f53ec9 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/lognutrition/lognutrition-cloudformation-template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/function/lognutrition/lognutrition-cloudformation-template.json @@ -122,12 +122,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRole8dc6052c", + "fitnesstrackerLambdaRole2824d4b4", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRole8dc6052c", + "fitnesstrackerLambdaRole2824d4b4", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/types/amplify-dependent-resources-ref.d.ts b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/types/amplify-dependent-resources-ref.d.ts index 378b7faee9a..f717052117c 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/types/amplify-dependent-resources-ref.d.ts +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/backend/types/amplify-dependent-resources-ref.d.ts @@ -17,7 +17,7 @@ export type AmplifyDependentResourcesAttributes = { } }, "auth": { - "fitnesstracker9ceb2e7c9ceb2e7c": { + "fitnesstracker33f5545533f55455": { "AppClientID": "string", "AppClientIDWeb": "string", "IdentityPoolId": "string", @@ -38,7 +38,7 @@ export type AmplifyDependentResourcesAttributes = { "Name": "string", "Region": "string" }, - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup": { + "fitnesstracker33f5545533f55455PreSignup": { "Arn": "string", "LambdaExecutionRole": "string", "LambdaExecutionRoleArn": "string", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/team-provider-info.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/team-provider-info.json index c471cdfb02c..23d20a11c3f 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/team-provider-info.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.generate/amplify/team-provider-info.json @@ -1,36 +1,36 @@ { "main": { "awscloudformation": { - "AuthRoleName": "amplify-fitnesstracker-main-6fc9a-authRole", - "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole", - "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole", + "AuthRoleName": "amplify-fitnesstracker-main-a0537-authRole", + "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-unauthRole", + "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-authRole", "Region": "us-east-1", - "DeploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "UnauthRoleName": "amplify-fitnesstracker-main-6fc9a-unauthRole", - "StackName": "amplify-fitnesstracker-main-6fc9a", - "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a/d1ee9bf0-2590-11f1-8e36-1220ebfe67af", + "DeploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "UnauthRoleName": "amplify-fitnesstracker-main-a0537-unauthRole", + "StackName": "amplify-fitnesstracker-main-a0537", + "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-a0537/1749a530-272d-11f1-a465-0e5f0b5f7853", "AmplifyAppId": "fitnesstracker", - "APIGatewayAuthURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", - "AuthTriggerTemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json" + "APIGatewayAuthURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", + "AuthTriggerTemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json" }, "categories": { "auth": { - "fitnesstracker9ceb2e7c9ceb2e7c": {}, + "fitnesstracker33f5545533f55455": {}, "userPoolGroups": {} }, "function": { - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup": { + "fitnesstracker33f5545533f55455PreSignup": { "DOMAINALLOWLIST": "amazon.com", - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip" + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/fitnesstracker33f5545533f55455PreSignup-68374859444c45627749-build.zip" }, "lognutrition": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip" }, "admin": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/admin-765632787437744e386e-build.zip" + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/admin-7934694b6d366c486d32-build.zip" } }, "api": { diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataAmplifyTableManagerNestedStackA-75CKIPDMA8E7.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataAmplifyTableManagerNestedStackA-75CKIPDMA8E7.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataAmplifyTableManagerNestedStackA-75CKIPDMA8E7.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataAmplifyTableManagerNestedStackA-75CKIPDMA8E7.outputs.json new file mode 100644 index 00000000000..247a6aabec3 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataAmplifyTableManagerNestedStackA-75CKIPDMA8E7.outputs.json @@ -0,0 +1,6 @@ +[ + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent4D2D0CF9Arn", + "OutputValue": "arn:aws:lambda:us-east-1:123456789012:function:amplify-fitnesstracker-ge-TableManagerCustomProvid-tD7nAluDQILS" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataAmplifyTableManagerNestedStackA-75CKIPDMA8E7.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataAmplifyTableManagerNestedStackA-75CKIPDMA8E7.parameters.json new file mode 100644 index 00000000000..6d3d672c6ad --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataAmplifyTableManagerNestedStackA-75CKIPDMA8E7.parameters.json @@ -0,0 +1,6 @@ +[ + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId", + "ParameterValue": "jrmmxaml4ndpxmx4pmyk3bgv7u" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataAmplifyTableManagerNestedStackA-75CKIPDMA8E7.template.json similarity index 93% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataAmplifyTableManagerNestedStackA-75CKIPDMA8E7.template.json index 1e57eb1dcab..5cab0a1cea5 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataAmplifyTableManagerNestedStackA-75CKIPDMA8E7.template.json @@ -54,7 +54,7 @@ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/*-${apiId}-${envName}", { "apiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "envName": "NONE" } @@ -64,7 +64,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tableName}", { - "tableName": "WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main" + "tableName": "WorkoutProgram-jzwb5p2vcbd2ldlnlxokgjcjby-main" } ] }, @@ -72,7 +72,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tableName}", { - "tableName": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main" + "tableName": "Exercise-jzwb5p2vcbd2ldlnlxokgjcjby-main" } ] }, @@ -80,7 +80,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tableName}", { - "tableName": "Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main" + "tableName": "Meal-jzwb5p2vcbd2ldlnlxokgjcjby-main" } ] } @@ -126,7 +126,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/AmplifyManagedTableIsCompleteRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/AmplifyTableManager/AmplifyManagedTableIsCompleteRole/Resource" } }, "AmplifyManagedTableOnEventRoleB4E71DEA": { @@ -183,7 +183,7 @@ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/*-${apiId}-${envName}", { "apiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "envName": "NONE" } @@ -193,7 +193,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tableName}", { - "tableName": "WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main" + "tableName": "WorkoutProgram-jzwb5p2vcbd2ldlnlxokgjcjby-main" } ] }, @@ -201,7 +201,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tableName}", { - "tableName": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main" + "tableName": "Exercise-jzwb5p2vcbd2ldlnlxokgjcjby-main" } ] }, @@ -209,7 +209,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tableName}", { - "tableName": "Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main" + "tableName": "Meal-jzwb5p2vcbd2ldlnlxokgjcjby-main" } ] } @@ -255,7 +255,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/AmplifyManagedTableOnEventRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/AmplifyTableManager/AmplifyManagedTableOnEventRole/Resource" } }, "AmplifyManagedTableOnEventRoleDefaultPolicyF6DABCB6": { @@ -281,7 +281,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/AmplifyManagedTableOnEventRole/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/AmplifyTableManager/AmplifyManagedTableOnEventRole/DefaultPolicy/Resource" } }, "TableManagerCustomProviderframeworkonEvent1DFC2ECC": { @@ -293,7 +293,7 @@ }, "S3Key": "f2c5bec0e463cae18d0bf683be5923ae6bd676a06af1a994bdfa076a66ac07d6.zip" }, - "Description": "AmplifyManagedTable - onEvent (amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/TableManagerCustomProvider)", + "Description": "AmplifyManagedTable - onEvent (amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/AmplifyTableManager/TableManagerCustomProvider)", "Environment": { "Variables": { "WAITER_STATE_MACHINE_ARN": { @@ -338,7 +338,7 @@ "AmplifyManagedTableOnEventRoleB4E71DEA" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/TableManagerCustomProvider/framework-onEvent/Resource", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/AmplifyTableManager/TableManagerCustomProvider/framework-onEvent/Resource", "aws:asset:path": "asset.f2c5bec0e463cae18d0bf683be5923ae6bd676a06af1a994bdfa076a66ac07d6", "aws:asset:is-bundled": false, "aws:asset:property": "Code" @@ -353,7 +353,7 @@ }, "S3Key": "f2c5bec0e463cae18d0bf683be5923ae6bd676a06af1a994bdfa076a66ac07d6.zip" }, - "Description": "AmplifyManagedTable - isComplete (amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/TableManagerCustomProvider)", + "Description": "AmplifyManagedTable - isComplete (amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/AmplifyTableManager/TableManagerCustomProvider)", "Handler": "amplify-table-manager-handler.isComplete", "Role": { "Fn::GetAtt": [ @@ -390,7 +390,7 @@ "AmplifyManagedTableIsCompleteRoleF825222C" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/TableManagerCustomProvider/framework-isComplete/Resource", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/AmplifyTableManager/TableManagerCustomProvider/framework-isComplete/Resource", "aws:asset:path": "asset.f2c5bec0e463cae18d0bf683be5923ae6bd676a06af1a994bdfa076a66ac07d6", "aws:asset:is-bundled": false, "aws:asset:property": "Code" @@ -435,7 +435,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/AmplifyTableWaiterStateMachine/Role/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/AmplifyTableManager/AmplifyTableWaiterStateMachine/Role/Resource" } }, "AmplifyTableWaiterStateMachineRoleDefaultPolicy89F3836A": { @@ -480,7 +480,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/AmplifyTableWaiterStateMachine/Role/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/AmplifyTableManager/AmplifyTableWaiterStateMachine/Role/DefaultPolicy/Resource" } }, "AmplifyTableWaiterStateMachine060600BC": { @@ -513,7 +513,7 @@ "AmplifyTableWaiterStateMachineRole470BE899" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/AmplifyTableWaiterStateMachine/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/AmplifyTableManager/AmplifyTableWaiterStateMachine/Resource" } }, "CDKMetadata": { @@ -522,7 +522,7 @@ "Analytics": "v2:deflate64:H4sIAAAAAAAA/zWNQQ6CMBBFz8K+jAgs3IqJS2PgAGRoR1IobcIUiWl6dwPo6r2ft/g55GUJWYIrp1KNqdEdhAexJ9V4lKPAldugcYJQO0Pi9rI7n85o+dnmYVEYnDqFEO6LlV47u7W/R8FFi8zkGa4bBBdQLXIkXyFTFDWxW2ZJYq+Nx17bfj/7hSisUwQDn955DucLZMnAWqfzYr2eCOqDX96JKODPAAAA" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/AmplifyTableManager/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -794,12 +794,12 @@ } }, "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId": { "Type": "String" } }, "Outputs": { - "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent9609CD96Arn": { + "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent4D2D0CF9Arn": { "Value": { "Fn::GetAtt": [ "TableManagerCustomProviderframeworkonEvent1DFC2ECC", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataConnectionStackNestedStackConne-WNK2ROR3OZN0.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataConnectionStackNestedStackConne-WNK2ROR3OZN0.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataConnectionStackNestedStackConne-WNK2ROR3OZN0.outputs.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataConnectionStackNestedStackConne-WNK2ROR3OZN0.outputs.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataConnectionStackNestedStackConne-WNK2ROR3OZN0.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataConnectionStackNestedStackConne-WNK2ROR3OZN0.parameters.json new file mode 100644 index 00000000000..ed214a6fa9b --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataConnectionStackNestedStackConne-WNK2ROR3OZN0.parameters.json @@ -0,0 +1,30 @@ +[ + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseNestedStackExerciseNestedStackResourceA766B8C6Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseExerciseTableA7BD0631TableArn", + "ParameterValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Exercise-jzwb5p2vcbd2ldlnlxokgjcjby-main" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-RtuRf8ygfomA" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref", + "ParameterValue": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId", + "ParameterValue": "jrmmxaml4ndpxmx4pmyk3bgv7u" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseNestedStackExerciseNestedStackResourceA766B8C6Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseExerciseDataSourceA366FC05Name", + "ParameterValue": "ExerciseTable" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-fF1WwIKcoHtV" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name", + "ParameterValue": "NONE_DS" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataConnectionStackNestedStackConne-WNK2ROR3OZN0.template.json similarity index 81% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataConnectionStackNestedStackConne-WNK2ROR3OZN0.template.json index 46466c82645..3bf2b06531b 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataConnectionStackNestedStackConne-WNK2ROR3OZN0.template.json @@ -4,10 +4,10 @@ "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "WorkoutProgramexercisesauth0Function", @@ -17,17 +17,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/ConnectionStack/WorkoutProgramexercisesauth0Function/WorkoutProgramexercisesauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/ConnectionStack/WorkoutProgramexercisesauth0Function/WorkoutProgramexercisesauth0Function.AppSyncFunction" } }, "WorkoutProgramExercisesDataResolverFnWorkoutProgramExercisesDataResolverFnAppSyncFunctionA9FFE7A3": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseNestedStackExerciseNestedStackResourceC9DAC2F3Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseDataSourceDCCBFD77Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseNestedStackExerciseNestedStackResourceA766B8C6Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseExerciseDataSourceA366FC05Name" }, "FunctionVersion": "2018-05-29", "Name": "WorkoutProgramExercisesDataResolverFn", @@ -39,14 +39,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/ConnectionStack/WorkoutProgramExercisesDataResolverFn/WorkoutProgramExercisesDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/ConnectionStack/WorkoutProgramExercisesDataResolverFn/WorkoutProgramExercisesDataResolverFn.AppSyncFunction" } }, "WorkoutProgramexercisesResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "exercises", "Kind": "PIPELINE", @@ -72,7 +72,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"WorkoutProgram\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"exercises\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -88,7 +88,7 @@ "Fn::Split": [ ":", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseNestedStackExerciseNestedStackResourceC9DAC2F3Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseTableECDBC610TableArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseNestedStackExerciseNestedStackResourceA766B8C6Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseExerciseTableA7BD0631TableArn" } ] } @@ -108,7 +108,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -120,11 +120,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -134,7 +134,7 @@ "TypeName": "WorkoutProgram" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/ConnectionStack/workoutProgramExercisesResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/ConnectionStack/workoutProgramExercisesResolver" } }, "CDKMetadata": { @@ -143,7 +143,7 @@ "Analytics": "v2:deflate64:H4sIAAAAAAAA/yXMsQ6CMBCA4WdhLycWBlchcXSAByBnOUgBr6TXQgzh3Q06ffmXX4MuCsgS3CQ13ZTO9gX7kyRQ1wQ0k8JN2l3yFkUoCNxPlORQRjNRKFFI4bLIhw3sVc+PyCZYx5Xj3g7R4xmq6rkmcfNK/jjU79EEHCwPh2LXEYxyWbWG6w2yZBRrUx852DdB/fcLf5ddvqcAAAA=" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/ConnectionStack/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/ConnectionStack/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -415,25 +415,25 @@ } }, "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseNestedStackExerciseNestedStackResourceC9DAC2F3Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseDataSourceDCCBFD77Name": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseNestedStackExerciseNestedStackResourceA766B8C6Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseExerciseDataSourceA366FC05Name": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseNestedStackExerciseNestedStackResourceC9DAC2F3Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseTableECDBC610TableArn": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseNestedStackExerciseNestedStackResourceA766B8C6Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseExerciseTableA7BD0631TableArn": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref": { "Type": "String" } } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataExerciseNestedStackExerciseNest-1P5371DGLAVUG.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataExerciseNestedStackExerciseNest-1P5371DGLAVUG.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataExerciseNestedStackExerciseNest-1P5371DGLAVUG.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataExerciseNestedStackExerciseNest-1P5371DGLAVUG.outputs.json new file mode 100644 index 00000000000..b0c8e37470e --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataExerciseNestedStackExerciseNest-1P5371DGLAVUG.outputs.json @@ -0,0 +1,22 @@ +[ + { + "OutputKey": "GetAttExerciseTableName", + "OutputValue": "Exercise-jzwb5p2vcbd2ldlnlxokgjcjby-main", + "Description": "Your DynamoDB table name.", + "ExportName": "jrmmxaml4ndpxmx4pmyk3bgv7u:GetAtt:ExerciseTable:Name" + }, + { + "OutputKey": "GetAttExerciseTableStreamArn", + "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Exercise-jzwb5p2vcbd2ldlnlxokgjcjby-main/stream/2026-03-24T03:05:11.212", + "Description": "Your DynamoDB table StreamArn.", + "ExportName": "jrmmxaml4ndpxmx4pmyk3bgv7u:GetAtt:ExerciseTable:StreamArn" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseExerciseTableA7BD0631TableArn", + "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Exercise-jzwb5p2vcbd2ldlnlxokgjcjby-main" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseExerciseDataSourceA366FC05Name", + "OutputValue": "ExerciseTable" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataExerciseNestedStackExerciseNest-1P5371DGLAVUG.parameters.json similarity index 51% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataExerciseNestedStackExerciseNest-1P5371DGLAVUG.parameters.json index 38cdcad28a9..96d6ac2b889 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataExerciseNestedStackExerciseNest-1P5371DGLAVUG.parameters.json @@ -4,43 +4,43 @@ "ParameterValue": "5" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref", - "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-RtuRf8ygfomA" }, { "ParameterKey": "DynamoDBEnableServerSideEncryption", "ParameterValue": "true" }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref", - "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" - }, { "ParameterKey": "DynamoDBEnablePointInTimeRecovery", "ParameterValue": "false" }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref", + "ParameterValue": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" + }, { "ParameterKey": "DynamoDBBillingMode", "ParameterValue": "PAY_PER_REQUEST" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name", - "ParameterValue": "NONE_DS" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResourceE84470E2Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerTableMaE24831DE", + "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:amplify-fitnesstracker-ge-TableManagerCustomProvid-tD7nAluDQILS" }, { - "ParameterKey": "DynamoDBModelTableWriteIOPS", - "ParameterValue": "5" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId", + "ParameterValue": "jrmmxaml4ndpxmx4pmyk3bgv7u" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId", - "ParameterValue": "uhg6hv7zmzav5doaroa4tocwv4" + "ParameterKey": "DynamoDBModelTableWriteIOPS", + "ParameterValue": "5" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183", - "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:amplify-fitnesstracker-ge-TableManagerCustomProvid-533GcbPIs8Jk" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-fF1WwIKcoHtV" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref", - "ParameterValue": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name", + "ParameterValue": "NONE_DS" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataExerciseNestedStackExerciseNest-1P5371DGLAVUG.template.json similarity index 85% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataExerciseNestedStackExerciseNest-1P5371DGLAVUG.template.json index 51d8ce95a98..fa010d191e5 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataExerciseNestedStackExerciseNest-1P5371DGLAVUG.template.json @@ -37,22 +37,22 @@ ], "Description": "Enable server side encryption powered by KMS." }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResourceE84470E2Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerTableMaE24831DE": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref": { "Type": "String" } }, @@ -353,9 +353,9 @@ "Type": "Custom::ImportedAmplifyDynamoDBTable", "Properties": { "ServiceToken": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResourceE84470E2Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerTableMaE24831DE" }, - "tableName": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main", + "tableName": "Exercise-jzwb5p2vcbd2ldlnlxokgjcjby-main", "attributeDefinitions": [ { "attributeName": "id", @@ -444,7 +444,7 @@ "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/ExerciseTable/Default/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/ExerciseTable/Default/Default" } }, "ExerciseIAMRole28D09384": { @@ -487,7 +487,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}", { - "tablename": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main" + "tablename": "Exercise-jzwb5p2vcbd2ldlnlxokgjcjby-main" } ] }, @@ -495,7 +495,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}/*", { - "tablename": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main" + "tablename": "Exercise-jzwb5p2vcbd2ldlnlxokgjcjby-main" } ] } @@ -513,7 +513,7 @@ [ "ExerciseIAMRoled0d0e6-", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "-NONE" ] @@ -543,14 +543,14 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/ExerciseIAMRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/ExerciseIAMRole/Resource" } }, "ExerciseDataSource": { "Type": "AWS::AppSync::DataSource", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DynamoDBConfig": { "AwsRegion": { @@ -596,17 +596,17 @@ "ExerciseIAMRole28D09384" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/ExerciseDataSource/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/ExerciseDataSource/Resource" } }, "QuerygetExerciseauth0FunctionQuerygetExerciseauth0FunctionAppSyncFunction0AC70BDB": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerygetExerciseauth0Function", @@ -616,17 +616,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/QuerygetExerciseauth0Function/QuerygetExerciseauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/QuerygetExerciseauth0Function/QuerygetExerciseauth0Function.AppSyncFunction" } }, "QuerygetExercisepostAuth0FunctionQuerygetExercisepostAuth0FunctionAppSyncFunction6287EBF7": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerygetExercisepostAuth0Function", @@ -636,14 +636,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/QuerygetExercisepostAuth0Function/QuerygetExercisepostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/QuerygetExercisepostAuth0Function/QuerygetExercisepostAuth0Function.AppSyncFunction" } }, "QueryGetExerciseDataResolverFnQueryGetExerciseDataResolverFnAppSyncFunction73149704": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -664,14 +664,14 @@ "ExerciseDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/QueryGetExerciseDataResolverFn/QueryGetExerciseDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/QueryGetExerciseDataResolverFn/QueryGetExerciseDataResolverFn.AppSyncFunction" } }, "GetExerciseResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "getExercise", "Kind": "PIPELINE", @@ -703,7 +703,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Query\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"getExercise\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -742,7 +742,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -754,11 +754,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -768,17 +768,17 @@ "TypeName": "Query" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/queryGetExerciseResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/queryGetExerciseResolver" } }, "QuerylistExercisesauth0FunctionQuerylistExercisesauth0FunctionAppSyncFunction51A6AD03": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerylistExercisesauth0Function", @@ -788,17 +788,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/QuerylistExercisesauth0Function/QuerylistExercisesauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/QuerylistExercisesauth0Function/QuerylistExercisesauth0Function.AppSyncFunction" } }, "QuerylistExercisespostAuth0FunctionQuerylistExercisespostAuth0FunctionAppSyncFunction0E7A24F2": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerylistExercisespostAuth0Function", @@ -808,14 +808,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/QuerylistExercisespostAuth0Function/QuerylistExercisespostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/QuerylistExercisespostAuth0Function/QuerylistExercisespostAuth0Function.AppSyncFunction" } }, "QueryListExercisesDataResolverFnQueryListExercisesDataResolverFnAppSyncFunction0818DDCE": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -836,14 +836,14 @@ "ExerciseDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/QueryListExercisesDataResolverFn/QueryListExercisesDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/QueryListExercisesDataResolverFn/QueryListExercisesDataResolverFn.AppSyncFunction" } }, "ListExerciseResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "listExercises", "Kind": "PIPELINE", @@ -875,7 +875,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Query\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"listExercises\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -914,7 +914,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -926,11 +926,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -940,17 +940,17 @@ "TypeName": "Query" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/queryListExercisesResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/queryListExercisesResolver" } }, "MutationcreateExerciseinit0FunctionMutationcreateExerciseinit0FunctionAppSyncFunction007007C2": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateExerciseinit0Function", @@ -960,17 +960,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationcreateExerciseinit0Function/MutationcreateExerciseinit0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/MutationcreateExerciseinit0Function/MutationcreateExerciseinit0Function.AppSyncFunction" } }, "MutationcreateExerciseauth0FunctionMutationcreateExerciseauth0FunctionAppSyncFunction06E6FB6C": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateExerciseauth0Function", @@ -980,17 +980,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationcreateExerciseauth0Function/MutationcreateExerciseauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/MutationcreateExerciseauth0Function/MutationcreateExerciseauth0Function.AppSyncFunction" } }, "MutationcreateExercisepostAuth0FunctionMutationcreateExercisepostAuth0FunctionAppSyncFunctionFAC86A10": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateExercisepostAuth0Function", @@ -1000,14 +1000,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationcreateExercisepostAuth0Function/MutationcreateExercisepostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/MutationcreateExercisepostAuth0Function/MutationcreateExercisepostAuth0Function.AppSyncFunction" } }, "MutationCreateExerciseDataResolverFnMutationCreateExerciseDataResolverFnAppSyncFunction9F8EC7E0": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1028,14 +1028,14 @@ "ExerciseDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationCreateExerciseDataResolverFn/MutationCreateExerciseDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/MutationCreateExerciseDataResolverFn/MutationCreateExerciseDataResolverFn.AppSyncFunction" } }, "CreateExerciseResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "createExercise", "Kind": "PIPELINE", @@ -1073,7 +1073,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"createExercise\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1112,7 +1112,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1124,11 +1124,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1138,17 +1138,17 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/mutationCreateExerciseResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/mutationCreateExerciseResolver" } }, "MutationupdateExerciseinit0FunctionMutationupdateExerciseinit0FunctionAppSyncFunction2DE5E607": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationupdateExerciseinit0Function", @@ -1158,14 +1158,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationupdateExerciseinit0Function/MutationupdateExerciseinit0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/MutationupdateExerciseinit0Function/MutationupdateExerciseinit0Function.AppSyncFunction" } }, "MutationupdateExerciseauth0FunctionMutationupdateExerciseauth0FunctionAppSyncFunction2CE5BE66": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1186,17 +1186,17 @@ "ExerciseDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationupdateExerciseauth0Function/MutationupdateExerciseauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/MutationupdateExerciseauth0Function/MutationupdateExerciseauth0Function.AppSyncFunction" } }, "MutationupdateExercisepostAuth0FunctionMutationupdateExercisepostAuth0FunctionAppSyncFunction25628A67": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationupdateExercisepostAuth0Function", @@ -1206,14 +1206,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationupdateExercisepostAuth0Function/MutationupdateExercisepostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/MutationupdateExercisepostAuth0Function/MutationupdateExercisepostAuth0Function.AppSyncFunction" } }, "MutationUpdateExerciseDataResolverFnMutationUpdateExerciseDataResolverFnAppSyncFunctionD0CB335C": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1234,14 +1234,14 @@ "ExerciseDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationUpdateExerciseDataResolverFn/MutationUpdateExerciseDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/MutationUpdateExerciseDataResolverFn/MutationUpdateExerciseDataResolverFn.AppSyncFunction" } }, "UpdateExerciseResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "updateExercise", "Kind": "PIPELINE", @@ -1279,7 +1279,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"updateExercise\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1318,7 +1318,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1330,11 +1330,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1344,14 +1344,14 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/mutationUpdateExerciseResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/mutationUpdateExerciseResolver" } }, "MutationdeleteExerciseauth0FunctionMutationdeleteExerciseauth0FunctionAppSyncFunctionC2D9DFF8": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1372,17 +1372,17 @@ "ExerciseDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationdeleteExerciseauth0Function/MutationdeleteExerciseauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/MutationdeleteExerciseauth0Function/MutationdeleteExerciseauth0Function.AppSyncFunction" } }, "MutationdeleteExercisepostAuth0FunctionMutationdeleteExercisepostAuth0FunctionAppSyncFunction990C3B7B": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationdeleteExercisepostAuth0Function", @@ -1392,14 +1392,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationdeleteExercisepostAuth0Function/MutationdeleteExercisepostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/MutationdeleteExercisepostAuth0Function/MutationdeleteExercisepostAuth0Function.AppSyncFunction" } }, "MutationDeleteExerciseDataResolverFnMutationDeleteExerciseDataResolverFnAppSyncFunction91D88DD6": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1420,14 +1420,14 @@ "ExerciseDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/MutationDeleteExerciseDataResolverFn/MutationDeleteExerciseDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/MutationDeleteExerciseDataResolverFn/MutationDeleteExerciseDataResolverFn.AppSyncFunction" } }, "DeleteExerciseResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "deleteExercise", "Kind": "PIPELINE", @@ -1459,7 +1459,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"deleteExercise\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1498,7 +1498,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1510,11 +1510,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1524,17 +1524,17 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/mutationDeleteExerciseResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/mutationDeleteExerciseResolver" } }, "SubscriptiononCreateExerciseauth0FunctionSubscriptiononCreateExerciseauth0FunctionAppSyncFunctionC50A81C7": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononCreateExerciseauth0Function", @@ -1544,17 +1544,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptiononCreateExerciseauth0Function/SubscriptiononCreateExerciseauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/SubscriptiononCreateExerciseauth0Function/SubscriptiononCreateExerciseauth0Function.AppSyncFunction" } }, "SubscriptiononCreateExercisepostAuth0FunctionSubscriptiononCreateExercisepostAuth0FunctionAppSyncFunction5A196A51": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononCreateExercisepostAuth0Function", @@ -1564,17 +1564,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptiononCreateExercisepostAuth0Function/SubscriptiononCreateExercisepostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/SubscriptiononCreateExercisepostAuth0Function/SubscriptiononCreateExercisepostAuth0Function.AppSyncFunction" } }, "SubscriptionOnCreateExerciseDataResolverFnSubscriptionOnCreateExerciseDataResolverFnAppSyncFunctionAB5DF306": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnCreateExerciseDataResolverFn", @@ -1586,14 +1586,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptionOnCreateExerciseDataResolverFn/SubscriptionOnCreateExerciseDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/SubscriptionOnCreateExerciseDataResolverFn/SubscriptionOnCreateExerciseDataResolverFn.AppSyncFunction" } }, "SubscriptiononCreateExerciseResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "onCreateExercise", "Kind": "PIPELINE", @@ -1625,7 +1625,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onCreateExercise\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1637,7 +1637,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1649,11 +1649,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1663,17 +1663,17 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/subscriptionOnCreateExerciseResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/subscriptionOnCreateExerciseResolver" } }, "SubscriptiononUpdateExerciseauth0FunctionSubscriptiononUpdateExerciseauth0FunctionAppSyncFunction9193D2A0": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononUpdateExerciseauth0Function", @@ -1683,17 +1683,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptiononUpdateExerciseauth0Function/SubscriptiononUpdateExerciseauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/SubscriptiononUpdateExerciseauth0Function/SubscriptiononUpdateExerciseauth0Function.AppSyncFunction" } }, "SubscriptiononUpdateExercisepostAuth0FunctionSubscriptiononUpdateExercisepostAuth0FunctionAppSyncFunctionDE028CEA": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononUpdateExercisepostAuth0Function", @@ -1703,17 +1703,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptiononUpdateExercisepostAuth0Function/SubscriptiononUpdateExercisepostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/SubscriptiononUpdateExercisepostAuth0Function/SubscriptiononUpdateExercisepostAuth0Function.AppSyncFunction" } }, "SubscriptionOnUpdateExerciseDataResolverFnSubscriptionOnUpdateExerciseDataResolverFnAppSyncFunctionA7AA88CA": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnUpdateExerciseDataResolverFn", @@ -1725,14 +1725,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptionOnUpdateExerciseDataResolverFn/SubscriptionOnUpdateExerciseDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/SubscriptionOnUpdateExerciseDataResolverFn/SubscriptionOnUpdateExerciseDataResolverFn.AppSyncFunction" } }, "SubscriptiononUpdateExerciseResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "onUpdateExercise", "Kind": "PIPELINE", @@ -1764,7 +1764,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onUpdateExercise\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1776,7 +1776,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1788,11 +1788,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1802,17 +1802,17 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/subscriptionOnUpdateExerciseResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/subscriptionOnUpdateExerciseResolver" } }, "SubscriptiononDeleteExerciseauth0FunctionSubscriptiononDeleteExerciseauth0FunctionAppSyncFunction54DF160B": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononDeleteExerciseauth0Function", @@ -1822,17 +1822,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptiononDeleteExerciseauth0Function/SubscriptiononDeleteExerciseauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/SubscriptiononDeleteExerciseauth0Function/SubscriptiononDeleteExerciseauth0Function.AppSyncFunction" } }, "SubscriptiononDeleteExercisepostAuth0FunctionSubscriptiononDeleteExercisepostAuth0FunctionAppSyncFunctionAF03921E": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononDeleteExercisepostAuth0Function", @@ -1842,17 +1842,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptiononDeleteExercisepostAuth0Function/SubscriptiononDeleteExercisepostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/SubscriptiononDeleteExercisepostAuth0Function/SubscriptiononDeleteExercisepostAuth0Function.AppSyncFunction" } }, "SubscriptionOnDeleteExerciseDataResolverFnSubscriptionOnDeleteExerciseDataResolverFnAppSyncFunctionA2A2A8C9": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnDeleteExerciseDataResolverFn", @@ -1864,14 +1864,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/SubscriptionOnDeleteExerciseDataResolverFn/SubscriptionOnDeleteExerciseDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/SubscriptionOnDeleteExerciseDataResolverFn/SubscriptionOnDeleteExerciseDataResolverFn.AppSyncFunction" } }, "SubscriptiononDeleteExerciseResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "onDeleteExercise", "Kind": "PIPELINE", @@ -1903,7 +1903,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onDeleteExercise\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1915,7 +1915,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1927,11 +1927,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1941,17 +1941,17 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/subscriptionOnDeleteExerciseResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/subscriptionOnDeleteExerciseResolver" } }, "ExerciseOwnerDataResolverFnExerciseOwnerDataResolverFnAppSyncFunction8652EC02": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "ExerciseOwnerDataResolverFn", @@ -1963,14 +1963,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/ExerciseOwnerDataResolverFn/ExerciseOwnerDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/ExerciseOwnerDataResolverFn/ExerciseOwnerDataResolverFn.AppSyncFunction" } }, "ExerciseownerResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "owner", "Kind": "PIPELINE", @@ -1990,7 +1990,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Exercise\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"owner\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -2002,7 +2002,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -2014,11 +2014,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -2028,7 +2028,7 @@ "TypeName": "Exercise" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/exerciseOwnerResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/exerciseOwnerResolver" } }, "CDKMetadata": { @@ -2037,7 +2037,7 @@ "Analytics": "v2:deflate64:H4sIAAAAAAAA/1WOwW6DMAyGn6X31OtoD7uuoB63CXavTGJQCjgodlpViHefoFOnnX5/8if7zyA7HGC3wZtsreu2va9h+iBRcpWi7Uze8BdGHEgpLpAHdl59YFOShBQtmTyJhuEPG37OeJPz5O6MQ3A1fGPd0xGFjMcBpjL0Dzv0NBscR7mzhalY9aIuULF6nvxPp8R2KZEHbnybIq6Nfj/3V4qzkf0ZRUgF3pcwsodjsh3pUmBe3M+kY1KzrivF1nM7Gw6O4CIv1yyD1zfYbS7i/TYmVj8QlI/8AVayTVs2AQAA" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -2057,7 +2057,7 @@ ":", [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "GetAtt:ExerciseTable:StreamArn" ] @@ -2067,14 +2067,14 @@ }, "GetAttExerciseTableName": { "Description": "Your DynamoDB table name.", - "Value": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main", + "Value": "Exercise-jzwb5p2vcbd2ldlnlxokgjcjby-main", "Export": { "Name": { "Fn::Join": [ ":", [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "GetAtt:ExerciseTable:Name" ] @@ -2082,7 +2082,7 @@ } } }, - "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseDataSourceDCCBFD77Name": { + "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseExerciseDataSourceA366FC05Name": { "Value": { "Fn::GetAtt": [ "ExerciseDataSource", @@ -2090,7 +2090,7 @@ ] } }, - "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseTableECDBC610TableArn": { + "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseExerciseTableA7BD0631TableArn": { "Value": { "Fn::GetAtt": [ "ExerciseTable", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataMealNestedStackMealNestedStackR-A8J8VTBF4SWH.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataMealNestedStackMealNestedStackR-A8J8VTBF4SWH.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataMealNestedStackMealNestedStackR-A8J8VTBF4SWH.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataMealNestedStackMealNestedStackR-A8J8VTBF4SWH.outputs.json new file mode 100644 index 00000000000..bc276ddef47 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataMealNestedStackMealNestedStackR-A8J8VTBF4SWH.outputs.json @@ -0,0 +1,18 @@ +[ + { + "OutputKey": "GetAttMealTableName", + "OutputValue": "Meal-jzwb5p2vcbd2ldlnlxokgjcjby-main", + "Description": "Your DynamoDB table name.", + "ExportName": "jrmmxaml4ndpxmx4pmyk3bgv7u:GetAtt:MealTable:Name" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataMealMealTable5D540888TableArn", + "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Meal-jzwb5p2vcbd2ldlnlxokgjcjby-main" + }, + { + "OutputKey": "GetAttMealTableStreamArn", + "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Meal-jzwb5p2vcbd2ldlnlxokgjcjby-main/stream/2026-03-24T03:05:11.935", + "Description": "Your DynamoDB table StreamArn.", + "ExportName": "jrmmxaml4ndpxmx4pmyk3bgv7u:GetAtt:MealTable:StreamArn" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataMealNestedStackMealNestedStackR-A8J8VTBF4SWH.parameters.json similarity index 51% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataMealNestedStackMealNestedStackR-A8J8VTBF4SWH.parameters.json index 38cdcad28a9..96d6ac2b889 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataMealNestedStackMealNestedStackR-A8J8VTBF4SWH.parameters.json @@ -4,43 +4,43 @@ "ParameterValue": "5" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref", - "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-RtuRf8ygfomA" }, { "ParameterKey": "DynamoDBEnableServerSideEncryption", "ParameterValue": "true" }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref", - "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" - }, { "ParameterKey": "DynamoDBEnablePointInTimeRecovery", "ParameterValue": "false" }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref", + "ParameterValue": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" + }, { "ParameterKey": "DynamoDBBillingMode", "ParameterValue": "PAY_PER_REQUEST" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name", - "ParameterValue": "NONE_DS" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResourceE84470E2Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerTableMaE24831DE", + "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:amplify-fitnesstracker-ge-TableManagerCustomProvid-tD7nAluDQILS" }, { - "ParameterKey": "DynamoDBModelTableWriteIOPS", - "ParameterValue": "5" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId", + "ParameterValue": "jrmmxaml4ndpxmx4pmyk3bgv7u" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId", - "ParameterValue": "uhg6hv7zmzav5doaroa4tocwv4" + "ParameterKey": "DynamoDBModelTableWriteIOPS", + "ParameterValue": "5" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183", - "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:amplify-fitnesstracker-ge-TableManagerCustomProvid-533GcbPIs8Jk" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-fF1WwIKcoHtV" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref", - "ParameterValue": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name", + "ParameterValue": "NONE_DS" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataMealNestedStackMealNestedStackR-A8J8VTBF4SWH.template.json similarity index 85% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataMealNestedStackMealNestedStackR-A8J8VTBF4SWH.template.json index 9a63657aa60..b05d293abf6 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataMealNestedStackMealNestedStackR-A8J8VTBF4SWH.template.json @@ -37,22 +37,22 @@ ], "Description": "Enable server side encryption powered by KMS." }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResourceE84470E2Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerTableMaE24831DE": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref": { "Type": "String" } }, @@ -353,9 +353,9 @@ "Type": "Custom::ImportedAmplifyDynamoDBTable", "Properties": { "ServiceToken": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResourceE84470E2Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerTableMaE24831DE" }, - "tableName": "Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main", + "tableName": "Meal-jzwb5p2vcbd2ldlnlxokgjcjby-main", "attributeDefinitions": [ { "attributeName": "id", @@ -418,7 +418,7 @@ "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MealTable/Default/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/MealTable/Default/Default" } }, "MealIAMRoleEDE19E15": { @@ -461,7 +461,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}", { - "tablename": "Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main" + "tablename": "Meal-jzwb5p2vcbd2ldlnlxokgjcjby-main" } ] }, @@ -469,7 +469,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}/*", { - "tablename": "Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main" + "tablename": "Meal-jzwb5p2vcbd2ldlnlxokgjcjby-main" } ] } @@ -487,7 +487,7 @@ [ "MealIAMRole54b7fd-", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "-NONE" ] @@ -517,14 +517,14 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MealIAMRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/MealIAMRole/Resource" } }, "MealDataSource": { "Type": "AWS::AppSync::DataSource", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DynamoDBConfig": { "AwsRegion": { @@ -570,17 +570,17 @@ "MealIAMRoleEDE19E15" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MealDataSource/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/MealDataSource/Resource" } }, "QuerygetMealauth0FunctionQuerygetMealauth0FunctionAppSyncFunction3EC25F21": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerygetMealauth0Function", @@ -590,17 +590,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/QuerygetMealauth0Function/QuerygetMealauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/QuerygetMealauth0Function/QuerygetMealauth0Function.AppSyncFunction" } }, "QuerygetMealpostAuth0FunctionQuerygetMealpostAuth0FunctionAppSyncFunction9E0F196D": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerygetMealpostAuth0Function", @@ -610,14 +610,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/QuerygetMealpostAuth0Function/QuerygetMealpostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/QuerygetMealpostAuth0Function/QuerygetMealpostAuth0Function.AppSyncFunction" } }, "QueryGetMealDataResolverFnQueryGetMealDataResolverFnAppSyncFunction8B80E67B": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -638,14 +638,14 @@ "MealDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/QueryGetMealDataResolverFn/QueryGetMealDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/QueryGetMealDataResolverFn/QueryGetMealDataResolverFn.AppSyncFunction" } }, "GetMealResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "getMeal", "Kind": "PIPELINE", @@ -677,7 +677,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Query\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"getMeal\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -716,7 +716,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -728,11 +728,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -742,17 +742,17 @@ "TypeName": "Query" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/queryGetMealResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/queryGetMealResolver" } }, "QuerylistMealsauth0FunctionQuerylistMealsauth0FunctionAppSyncFunctionB47607B5": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerylistMealsauth0Function", @@ -762,17 +762,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/QuerylistMealsauth0Function/QuerylistMealsauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/QuerylistMealsauth0Function/QuerylistMealsauth0Function.AppSyncFunction" } }, "QuerylistMealspostAuth0FunctionQuerylistMealspostAuth0FunctionAppSyncFunction15CC850C": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerylistMealspostAuth0Function", @@ -782,14 +782,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/QuerylistMealspostAuth0Function/QuerylistMealspostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/QuerylistMealspostAuth0Function/QuerylistMealspostAuth0Function.AppSyncFunction" } }, "QueryListMealsDataResolverFnQueryListMealsDataResolverFnAppSyncFunction3EE87F58": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -810,14 +810,14 @@ "MealDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/QueryListMealsDataResolverFn/QueryListMealsDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/QueryListMealsDataResolverFn/QueryListMealsDataResolverFn.AppSyncFunction" } }, "ListMealResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "listMeals", "Kind": "PIPELINE", @@ -849,7 +849,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Query\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"listMeals\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -888,7 +888,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -900,11 +900,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -914,17 +914,17 @@ "TypeName": "Query" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/queryListMealsResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/queryListMealsResolver" } }, "MutationcreateMealinit0FunctionMutationcreateMealinit0FunctionAppSyncFunctionC8456643": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateMealinit0Function", @@ -934,17 +934,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationcreateMealinit0Function/MutationcreateMealinit0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/MutationcreateMealinit0Function/MutationcreateMealinit0Function.AppSyncFunction" } }, "MutationcreateMealauth0FunctionMutationcreateMealauth0FunctionAppSyncFunction746792DB": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateMealauth0Function", @@ -954,17 +954,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationcreateMealauth0Function/MutationcreateMealauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/MutationcreateMealauth0Function/MutationcreateMealauth0Function.AppSyncFunction" } }, "MutationcreateMealpostAuth0FunctionMutationcreateMealpostAuth0FunctionAppSyncFunctionF0FDFBD0": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateMealpostAuth0Function", @@ -974,14 +974,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationcreateMealpostAuth0Function/MutationcreateMealpostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/MutationcreateMealpostAuth0Function/MutationcreateMealpostAuth0Function.AppSyncFunction" } }, "MutationCreateMealDataResolverFnMutationCreateMealDataResolverFnAppSyncFunction3A7E3265": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1002,14 +1002,14 @@ "MealDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationCreateMealDataResolverFn/MutationCreateMealDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/MutationCreateMealDataResolverFn/MutationCreateMealDataResolverFn.AppSyncFunction" } }, "CreateMealResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "createMeal", "Kind": "PIPELINE", @@ -1047,7 +1047,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"createMeal\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1086,7 +1086,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1098,11 +1098,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1112,17 +1112,17 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/mutationCreateMealResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/mutationCreateMealResolver" } }, "MutationupdateMealinit0FunctionMutationupdateMealinit0FunctionAppSyncFunction80065D7F": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationupdateMealinit0Function", @@ -1132,14 +1132,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationupdateMealinit0Function/MutationupdateMealinit0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/MutationupdateMealinit0Function/MutationupdateMealinit0Function.AppSyncFunction" } }, "MutationupdateMealauth0FunctionMutationupdateMealauth0FunctionAppSyncFunctionEFC9C205": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1160,17 +1160,17 @@ "MealDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationupdateMealauth0Function/MutationupdateMealauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/MutationupdateMealauth0Function/MutationupdateMealauth0Function.AppSyncFunction" } }, "MutationupdateMealpostAuth0FunctionMutationupdateMealpostAuth0FunctionAppSyncFunction5B29DBED": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationupdateMealpostAuth0Function", @@ -1180,14 +1180,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationupdateMealpostAuth0Function/MutationupdateMealpostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/MutationupdateMealpostAuth0Function/MutationupdateMealpostAuth0Function.AppSyncFunction" } }, "MutationUpdateMealDataResolverFnMutationUpdateMealDataResolverFnAppSyncFunction7CE88037": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1208,14 +1208,14 @@ "MealDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationUpdateMealDataResolverFn/MutationUpdateMealDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/MutationUpdateMealDataResolverFn/MutationUpdateMealDataResolverFn.AppSyncFunction" } }, "UpdateMealResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "updateMeal", "Kind": "PIPELINE", @@ -1253,7 +1253,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"updateMeal\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1292,7 +1292,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1304,11 +1304,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1318,14 +1318,14 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/mutationUpdateMealResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/mutationUpdateMealResolver" } }, "MutationdeleteMealauth0FunctionMutationdeleteMealauth0FunctionAppSyncFunction5A3C8FCE": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1346,17 +1346,17 @@ "MealDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationdeleteMealauth0Function/MutationdeleteMealauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/MutationdeleteMealauth0Function/MutationdeleteMealauth0Function.AppSyncFunction" } }, "MutationdeleteMealpostAuth0FunctionMutationdeleteMealpostAuth0FunctionAppSyncFunctionC9BB36B8": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationdeleteMealpostAuth0Function", @@ -1366,14 +1366,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationdeleteMealpostAuth0Function/MutationdeleteMealpostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/MutationdeleteMealpostAuth0Function/MutationdeleteMealpostAuth0Function.AppSyncFunction" } }, "MutationDeleteMealDataResolverFnMutationDeleteMealDataResolverFnAppSyncFunctionB6415754": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1394,14 +1394,14 @@ "MealDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/MutationDeleteMealDataResolverFn/MutationDeleteMealDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/MutationDeleteMealDataResolverFn/MutationDeleteMealDataResolverFn.AppSyncFunction" } }, "DeleteMealResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "deleteMeal", "Kind": "PIPELINE", @@ -1433,7 +1433,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"deleteMeal\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1472,7 +1472,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1484,11 +1484,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1498,17 +1498,17 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/mutationDeleteMealResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/mutationDeleteMealResolver" } }, "SubscriptiononCreateMealauth0FunctionSubscriptiononCreateMealauth0FunctionAppSyncFunction8AF26F94": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononCreateMealauth0Function", @@ -1518,17 +1518,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptiononCreateMealauth0Function/SubscriptiononCreateMealauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/SubscriptiononCreateMealauth0Function/SubscriptiononCreateMealauth0Function.AppSyncFunction" } }, "SubscriptiononCreateMealpostAuth0FunctionSubscriptiononCreateMealpostAuth0FunctionAppSyncFunction820A2BD2": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononCreateMealpostAuth0Function", @@ -1538,17 +1538,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptiononCreateMealpostAuth0Function/SubscriptiononCreateMealpostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/SubscriptiononCreateMealpostAuth0Function/SubscriptiononCreateMealpostAuth0Function.AppSyncFunction" } }, "SubscriptionOnCreateMealDataResolverFnSubscriptionOnCreateMealDataResolverFnAppSyncFunctionF1334F8F": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnCreateMealDataResolverFn", @@ -1560,14 +1560,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptionOnCreateMealDataResolverFn/SubscriptionOnCreateMealDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/SubscriptionOnCreateMealDataResolverFn/SubscriptionOnCreateMealDataResolverFn.AppSyncFunction" } }, "SubscriptiononCreateMealResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "onCreateMeal", "Kind": "PIPELINE", @@ -1599,7 +1599,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onCreateMeal\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1611,7 +1611,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1623,11 +1623,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1637,17 +1637,17 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/subscriptionOnCreateMealResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/subscriptionOnCreateMealResolver" } }, "SubscriptiononUpdateMealauth0FunctionSubscriptiononUpdateMealauth0FunctionAppSyncFunction2DF3B7A1": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononUpdateMealauth0Function", @@ -1657,17 +1657,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptiononUpdateMealauth0Function/SubscriptiononUpdateMealauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/SubscriptiononUpdateMealauth0Function/SubscriptiononUpdateMealauth0Function.AppSyncFunction" } }, "SubscriptiononUpdateMealpostAuth0FunctionSubscriptiononUpdateMealpostAuth0FunctionAppSyncFunction6DDD0917": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononUpdateMealpostAuth0Function", @@ -1677,17 +1677,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptiononUpdateMealpostAuth0Function/SubscriptiononUpdateMealpostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/SubscriptiononUpdateMealpostAuth0Function/SubscriptiononUpdateMealpostAuth0Function.AppSyncFunction" } }, "SubscriptionOnUpdateMealDataResolverFnSubscriptionOnUpdateMealDataResolverFnAppSyncFunction7E09A153": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnUpdateMealDataResolverFn", @@ -1699,14 +1699,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptionOnUpdateMealDataResolverFn/SubscriptionOnUpdateMealDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/SubscriptionOnUpdateMealDataResolverFn/SubscriptionOnUpdateMealDataResolverFn.AppSyncFunction" } }, "SubscriptiononUpdateMealResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "onUpdateMeal", "Kind": "PIPELINE", @@ -1738,7 +1738,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onUpdateMeal\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1750,7 +1750,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1762,11 +1762,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1776,17 +1776,17 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/subscriptionOnUpdateMealResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/subscriptionOnUpdateMealResolver" } }, "SubscriptiononDeleteMealauth0FunctionSubscriptiononDeleteMealauth0FunctionAppSyncFunctionE50EF48C": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononDeleteMealauth0Function", @@ -1796,17 +1796,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptiononDeleteMealauth0Function/SubscriptiononDeleteMealauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/SubscriptiononDeleteMealauth0Function/SubscriptiononDeleteMealauth0Function.AppSyncFunction" } }, "SubscriptiononDeleteMealpostAuth0FunctionSubscriptiononDeleteMealpostAuth0FunctionAppSyncFunction6FA10C5F": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononDeleteMealpostAuth0Function", @@ -1816,17 +1816,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptiononDeleteMealpostAuth0Function/SubscriptiononDeleteMealpostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/SubscriptiononDeleteMealpostAuth0Function/SubscriptiononDeleteMealpostAuth0Function.AppSyncFunction" } }, "SubscriptionOnDeleteMealDataResolverFnSubscriptionOnDeleteMealDataResolverFnAppSyncFunction0A2F61AD": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnDeleteMealDataResolverFn", @@ -1838,14 +1838,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/SubscriptionOnDeleteMealDataResolverFn/SubscriptionOnDeleteMealDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/SubscriptionOnDeleteMealDataResolverFn/SubscriptionOnDeleteMealDataResolverFn.AppSyncFunction" } }, "SubscriptiononDeleteMealResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "onDeleteMeal", "Kind": "PIPELINE", @@ -1877,7 +1877,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onDeleteMeal\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1889,7 +1889,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1901,11 +1901,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1915,7 +1915,7 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/subscriptionOnDeleteMealResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/subscriptionOnDeleteMealResolver" } }, "CDKMetadata": { @@ -1924,7 +1924,7 @@ "Analytics": "v2:deflate64:H4sIAAAAAAAA/1WOwW6DMAyGn6X31OtoD7uuoB63CXavTGJQCjgodlpViHefoFOnnX5/8if7zyA7HGC3wZtsreu2va9h+iBRcpWi7Uze8BdGHEgpLpAHdl59YFOShBQtmTyJhuEPG37OeJPz5O6MQ3A1fGPd0xGFjMcBpjL0Dzv0NBscR7mzhalY9aIuULF6nvxPp8R2KZEHbnybIq6Nfj/3V4qzkf0ZRUgF3pcwsodjsh3pUmBe3M+kY1KzrivF1nM7Gw6O4CIv1yyD1zfYbS7i/TYmVj8QlI/8AVayTVs2AQAA" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -1944,7 +1944,7 @@ ":", [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "GetAtt:MealTable:StreamArn" ] @@ -1954,14 +1954,14 @@ }, "GetAttMealTableName": { "Description": "Your DynamoDB table name.", - "Value": "Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main", + "Value": "Meal-jzwb5p2vcbd2ldlnlxokgjcjby-main", "Export": { "Name": { "Fn::Join": [ ":", [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "GetAtt:MealTable:Name" ] @@ -1969,7 +1969,7 @@ } } }, - "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataMealMealTableFD0BC2A7TableArn": { + "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataMealMealTable5D540888TableArn": { "Value": { "Fn::GetAtt": [ "MealTable", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataWorkoutProgramNestedStackWorkou-162Z9OPH7DXYW.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataWorkoutProgramNestedStackWorkou-162Z9OPH7DXYW.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataWorkoutProgramNestedStackWorkou-162Z9OPH7DXYW.outputs.json similarity index 54% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataWorkoutProgramNestedStackWorkou-162Z9OPH7DXYW.outputs.json index 8547db3c37e..c750785a346 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataWorkoutProgramNestedStackWorkou-162Z9OPH7DXYW.outputs.json @@ -1,14 +1,14 @@ [ { "OutputKey": "GetAttWorkoutProgramTableStreamArn", - "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main/stream/2026-03-22T02:13:40.073", + "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/WorkoutProgram-jzwb5p2vcbd2ldlnlxokgjcjby-main/stream/2026-03-24T03:04:23.623", "Description": "Your DynamoDB table StreamArn.", - "ExportName": "uhg6hv7zmzav5doaroa4tocwv4:GetAtt:WorkoutProgramTable:StreamArn" + "ExportName": "jrmmxaml4ndpxmx4pmyk3bgv7u:GetAtt:WorkoutProgramTable:StreamArn" }, { "OutputKey": "GetAttWorkoutProgramTableName", - "OutputValue": "WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main", + "OutputValue": "WorkoutProgram-jzwb5p2vcbd2ldlnlxokgjcjby-main", "Description": "Your DynamoDB table name.", - "ExportName": "uhg6hv7zmzav5doaroa4tocwv4:GetAtt:WorkoutProgramTable:Name" + "ExportName": "jrmmxaml4ndpxmx4pmyk3bgv7u:GetAtt:WorkoutProgramTable:Name" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataWorkoutProgramNestedStackWorkou-162Z9OPH7DXYW.parameters.json similarity index 51% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataWorkoutProgramNestedStackWorkou-162Z9OPH7DXYW.parameters.json index 38cdcad28a9..96d6ac2b889 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataWorkoutProgramNestedStackWorkou-162Z9OPH7DXYW.parameters.json @@ -4,43 +4,43 @@ "ParameterValue": "5" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref", - "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-RtuRf8ygfomA" }, { "ParameterKey": "DynamoDBEnableServerSideEncryption", "ParameterValue": "true" }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref", - "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" - }, { "ParameterKey": "DynamoDBEnablePointInTimeRecovery", "ParameterValue": "false" }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref", + "ParameterValue": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" + }, { "ParameterKey": "DynamoDBBillingMode", "ParameterValue": "PAY_PER_REQUEST" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name", - "ParameterValue": "NONE_DS" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResourceE84470E2Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerTableMaE24831DE", + "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:amplify-fitnesstracker-ge-TableManagerCustomProvid-tD7nAluDQILS" }, { - "ParameterKey": "DynamoDBModelTableWriteIOPS", - "ParameterValue": "5" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId", + "ParameterValue": "jrmmxaml4ndpxmx4pmyk3bgv7u" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId", - "ParameterValue": "uhg6hv7zmzav5doaroa4tocwv4" + "ParameterKey": "DynamoDBModelTableWriteIOPS", + "ParameterValue": "5" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183", - "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:amplify-fitnesstracker-ge-TableManagerCustomProvid-533GcbPIs8Jk" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-fF1WwIKcoHtV" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref", - "ParameterValue": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name", + "ParameterValue": "NONE_DS" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataWorkoutProgramNestedStackWorkou-162Z9OPH7DXYW.template.json similarity index 85% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataWorkoutProgramNestedStackWorkou-162Z9OPH7DXYW.template.json index 60c31d30707..185f385ee91 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataWorkoutProgramNestedStackWorkou-93OL8N89CFYW.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-4007-amplifyDataWorkoutProgramNestedStackWorkou-162Z9OPH7DXYW.template.json @@ -37,22 +37,22 @@ ], "Description": "Enable server side encryption powered by KMS." }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResourceE84470E2Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerTableMaE24831DE": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref": { "Type": "String" } }, @@ -353,9 +353,9 @@ "Type": "Custom::ImportedAmplifyDynamoDBTable", "Properties": { "ServiceToken": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResourceE84470E2Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerTableMaE24831DE" }, - "tableName": "WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main", + "tableName": "WorkoutProgram-jzwb5p2vcbd2ldlnlxokgjcjby-main", "attributeDefinitions": [ { "attributeName": "id", @@ -418,7 +418,7 @@ "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/WorkoutProgramTable/Default/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/WorkoutProgramTable/Default/Default" } }, "WorkoutProgramIAMRoleB75B98D5": { @@ -461,7 +461,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}", { - "tablename": "WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main" + "tablename": "WorkoutProgram-jzwb5p2vcbd2ldlnlxokgjcjby-main" } ] }, @@ -469,7 +469,7 @@ "Fn::Sub": [ "arn:${AWS::Partition}:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}/*", { - "tablename": "WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main" + "tablename": "WorkoutProgram-jzwb5p2vcbd2ldlnlxokgjcjby-main" } ] } @@ -487,7 +487,7 @@ [ "WorkoutProgramIAMRol516c57-", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "-NONE" ] @@ -517,14 +517,14 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/WorkoutProgramIAMRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/WorkoutProgramIAMRole/Resource" } }, "WorkoutProgramDataSource": { "Type": "AWS::AppSync::DataSource", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DynamoDBConfig": { "AwsRegion": { @@ -570,17 +570,17 @@ "WorkoutProgramIAMRoleB75B98D5" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/WorkoutProgramDataSource/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/WorkoutProgramDataSource/Resource" } }, "QuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunctionF61649FE": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerygetWorkoutProgramauth0Function", @@ -590,17 +590,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/QuerygetWorkoutProgramauth0Function/QuerygetWorkoutProgramauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/QuerygetWorkoutProgramauth0Function/QuerygetWorkoutProgramauth0Function.AppSyncFunction" } }, "QuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction3557039E": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerygetWorkoutProgrampostAuth0Function", @@ -610,14 +610,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/QuerygetWorkoutProgrampostAuth0Function/QuerygetWorkoutProgrampostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/QuerygetWorkoutProgrampostAuth0Function/QuerygetWorkoutProgrampostAuth0Function.AppSyncFunction" } }, "QueryGetWorkoutProgramDataResolverFnQueryGetWorkoutProgramDataResolverFnAppSyncFunctionDFD5C9FA": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -638,14 +638,14 @@ "WorkoutProgramDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/QueryGetWorkoutProgramDataResolverFn/QueryGetWorkoutProgramDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/QueryGetWorkoutProgramDataResolverFn/QueryGetWorkoutProgramDataResolverFn.AppSyncFunction" } }, "GetWorkoutProgramResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "getWorkoutProgram", "Kind": "PIPELINE", @@ -677,7 +677,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Query\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"getWorkoutProgram\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -716,7 +716,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -728,11 +728,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -742,17 +742,17 @@ "TypeName": "Query" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/queryGetWorkoutProgramResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/queryGetWorkoutProgramResolver" } }, "QuerylistWorkoutProgramsauth0FunctionQuerylistWorkoutProgramsauth0FunctionAppSyncFunctionEDC95461": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerylistWorkoutProgramsauth0Function", @@ -762,17 +762,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/QuerylistWorkoutProgramsauth0Function/QuerylistWorkoutProgramsauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/QuerylistWorkoutProgramsauth0Function/QuerylistWorkoutProgramsauth0Function.AppSyncFunction" } }, "QuerylistWorkoutProgramspostAuth0FunctionQuerylistWorkoutProgramspostAuth0FunctionAppSyncFunction784BDD23": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "QuerylistWorkoutProgramspostAuth0Function", @@ -782,14 +782,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/QuerylistWorkoutProgramspostAuth0Function/QuerylistWorkoutProgramspostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/QuerylistWorkoutProgramspostAuth0Function/QuerylistWorkoutProgramspostAuth0Function.AppSyncFunction" } }, "QueryListWorkoutProgramsDataResolverFnQueryListWorkoutProgramsDataResolverFnAppSyncFunctionC43C9A14": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -810,14 +810,14 @@ "WorkoutProgramDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/QueryListWorkoutProgramsDataResolverFn/QueryListWorkoutProgramsDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/QueryListWorkoutProgramsDataResolverFn/QueryListWorkoutProgramsDataResolverFn.AppSyncFunction" } }, "ListWorkoutProgramResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "listWorkoutPrograms", "Kind": "PIPELINE", @@ -849,7 +849,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Query\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"listWorkoutPrograms\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -888,7 +888,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -900,11 +900,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -914,17 +914,17 @@ "TypeName": "Query" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/queryListWorkoutProgramsResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/queryListWorkoutProgramsResolver" } }, "MutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD050B3C1": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateWorkoutPrograminit0Function", @@ -934,17 +934,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationcreateWorkoutPrograminit0Function/MutationcreateWorkoutPrograminit0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/MutationcreateWorkoutPrograminit0Function/MutationcreateWorkoutPrograminit0Function.AppSyncFunction" } }, "MutationcreateWorkoutProgramauth0FunctionMutationcreateWorkoutProgramauth0FunctionAppSyncFunction6165E2A5": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateWorkoutProgramauth0Function", @@ -954,17 +954,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationcreateWorkoutProgramauth0Function/MutationcreateWorkoutProgramauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/MutationcreateWorkoutProgramauth0Function/MutationcreateWorkoutProgramauth0Function.AppSyncFunction" } }, "MutationcreateWorkoutProgrampostAuth0FunctionMutationcreateWorkoutProgrampostAuth0FunctionAppSyncFunctionC1F2C501": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationcreateWorkoutProgrampostAuth0Function", @@ -974,14 +974,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationcreateWorkoutProgrampostAuth0Function/MutationcreateWorkoutProgrampostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/MutationcreateWorkoutProgrampostAuth0Function/MutationcreateWorkoutProgrampostAuth0Function.AppSyncFunction" } }, "MutationCreateWorkoutProgramDataResolverFnMutationCreateWorkoutProgramDataResolverFnAppSyncFunction20E77E8E": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1002,14 +1002,14 @@ "WorkoutProgramDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationCreateWorkoutProgramDataResolverFn/MutationCreateWorkoutProgramDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/MutationCreateWorkoutProgramDataResolverFn/MutationCreateWorkoutProgramDataResolverFn.AppSyncFunction" } }, "CreateWorkoutProgramResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "createWorkoutProgram", "Kind": "PIPELINE", @@ -1047,7 +1047,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"createWorkoutProgram\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1086,7 +1086,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1098,11 +1098,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1112,17 +1112,17 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/mutationCreateWorkoutProgramResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/mutationCreateWorkoutProgramResolver" } }, "MutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionDF7D6DB3": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationupdateWorkoutPrograminit0Function", @@ -1132,14 +1132,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationupdateWorkoutPrograminit0Function/MutationupdateWorkoutPrograminit0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/MutationupdateWorkoutPrograminit0Function/MutationupdateWorkoutPrograminit0Function.AppSyncFunction" } }, "MutationupdateWorkoutProgramauth0FunctionMutationupdateWorkoutProgramauth0FunctionAppSyncFunction5B1F99AE": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1160,17 +1160,17 @@ "WorkoutProgramDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationupdateWorkoutProgramauth0Function/MutationupdateWorkoutProgramauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/MutationupdateWorkoutProgramauth0Function/MutationupdateWorkoutProgramauth0Function.AppSyncFunction" } }, "MutationupdateWorkoutProgrampostAuth0FunctionMutationupdateWorkoutProgrampostAuth0FunctionAppSyncFunction848486DA": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationupdateWorkoutProgrampostAuth0Function", @@ -1180,14 +1180,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationupdateWorkoutProgrampostAuth0Function/MutationupdateWorkoutProgrampostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/MutationupdateWorkoutProgrampostAuth0Function/MutationupdateWorkoutProgrampostAuth0Function.AppSyncFunction" } }, "MutationUpdateWorkoutProgramDataResolverFnMutationUpdateWorkoutProgramDataResolverFnAppSyncFunctionC239D12F": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1208,14 +1208,14 @@ "WorkoutProgramDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationUpdateWorkoutProgramDataResolverFn/MutationUpdateWorkoutProgramDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/MutationUpdateWorkoutProgramDataResolverFn/MutationUpdateWorkoutProgramDataResolverFn.AppSyncFunction" } }, "UpdateWorkoutProgramResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "updateWorkoutProgram", "Kind": "PIPELINE", @@ -1253,7 +1253,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"updateWorkoutProgram\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1292,7 +1292,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1304,11 +1304,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1318,14 +1318,14 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/mutationUpdateWorkoutProgramResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/mutationUpdateWorkoutProgramResolver" } }, "MutationdeleteWorkoutProgramauth0FunctionMutationdeleteWorkoutProgramauth0FunctionAppSyncFunctionCF8FDD99": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1346,17 +1346,17 @@ "WorkoutProgramDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationdeleteWorkoutProgramauth0Function/MutationdeleteWorkoutProgramauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/MutationdeleteWorkoutProgramauth0Function/MutationdeleteWorkoutProgramauth0Function.AppSyncFunction" } }, "MutationdeleteWorkoutProgrampostAuth0FunctionMutationdeleteWorkoutProgrampostAuth0FunctionAppSyncFunction1A56FB4E": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "MutationdeleteWorkoutProgrampostAuth0Function", @@ -1366,14 +1366,14 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationdeleteWorkoutProgrampostAuth0Function/MutationdeleteWorkoutProgrampostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/MutationdeleteWorkoutProgrampostAuth0Function/MutationdeleteWorkoutProgrampostAuth0Function.AppSyncFunction" } }, "MutationDeleteWorkoutProgramDataResolverFnMutationDeleteWorkoutProgramDataResolverFnAppSyncFunction57D3FA26": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { "Fn::GetAtt": [ @@ -1394,14 +1394,14 @@ "WorkoutProgramDataSource" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/MutationDeleteWorkoutProgramDataResolverFn/MutationDeleteWorkoutProgramDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/MutationDeleteWorkoutProgramDataResolverFn/MutationDeleteWorkoutProgramDataResolverFn.AppSyncFunction" } }, "DeleteWorkoutProgramResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "deleteWorkoutProgram", "Kind": "PIPELINE", @@ -1433,7 +1433,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Mutation\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"deleteWorkoutProgram\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"AMAZON_DYNAMODB\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n$util.qr($ctx.stash.put(\"tableName\", \"", { @@ -1472,7 +1472,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1484,11 +1484,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1498,17 +1498,17 @@ "TypeName": "Mutation" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/mutationDeleteWorkoutProgramResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/mutationDeleteWorkoutProgramResolver" } }, "SubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncFunctionBA1C0577": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononCreateWorkoutProgramauth0Function", @@ -1518,17 +1518,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptiononCreateWorkoutProgramauth0Function/SubscriptiononCreateWorkoutProgramauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/SubscriptiononCreateWorkoutProgramauth0Function/SubscriptiononCreateWorkoutProgramauth0Function.AppSyncFunction" } }, "SubscriptiononCreateWorkoutProgrampostAuth0FunctionSubscriptiononCreateWorkoutProgrampostAuth0FunctionAppSyncFunction1FBC8B34": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononCreateWorkoutProgrampostAuth0Function", @@ -1538,17 +1538,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptiononCreateWorkoutProgrampostAuth0Function/SubscriptiononCreateWorkoutProgrampostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/SubscriptiononCreateWorkoutProgrampostAuth0Function/SubscriptiononCreateWorkoutProgrampostAuth0Function.AppSyncFunction" } }, "SubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunction4E344723": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnCreateWorkoutProgramDataResolverFn", @@ -1560,14 +1560,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptionOnCreateWorkoutProgramDataResolverFn/SubscriptionOnCreateWorkoutProgramDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/SubscriptionOnCreateWorkoutProgramDataResolverFn/SubscriptionOnCreateWorkoutProgramDataResolverFn.AppSyncFunction" } }, "SubscriptiononCreateWorkoutProgramResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "onCreateWorkoutProgram", "Kind": "PIPELINE", @@ -1599,7 +1599,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onCreateWorkoutProgram\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1611,7 +1611,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1623,11 +1623,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1637,17 +1637,17 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/subscriptionOnCreateWorkoutProgramResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/subscriptionOnCreateWorkoutProgramResolver" } }, "SubscriptiononUpdateWorkoutProgramauth0FunctionSubscriptiononUpdateWorkoutProgramauth0FunctionAppSyncFunctionEC33DFA9": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononUpdateWorkoutProgramauth0Function", @@ -1657,17 +1657,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptiononUpdateWorkoutProgramauth0Function/SubscriptiononUpdateWorkoutProgramauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/SubscriptiononUpdateWorkoutProgramauth0Function/SubscriptiononUpdateWorkoutProgramauth0Function.AppSyncFunction" } }, "SubscriptiononUpdateWorkoutProgrampostAuth0FunctionSubscriptiononUpdateWorkoutProgrampostAuth0FunctionAppSyncFunctionB64D3021": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononUpdateWorkoutProgrampostAuth0Function", @@ -1677,17 +1677,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptiononUpdateWorkoutProgrampostAuth0Function/SubscriptiononUpdateWorkoutProgrampostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/SubscriptiononUpdateWorkoutProgrampostAuth0Function/SubscriptiononUpdateWorkoutProgrampostAuth0Function.AppSyncFunction" } }, "SubscriptionOnUpdateWorkoutProgramDataResolverFnSubscriptionOnUpdateWorkoutProgramDataResolverFnAppSyncFunction09BC3352": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnUpdateWorkoutProgramDataResolverFn", @@ -1699,14 +1699,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptionOnUpdateWorkoutProgramDataResolverFn/SubscriptionOnUpdateWorkoutProgramDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/SubscriptionOnUpdateWorkoutProgramDataResolverFn/SubscriptionOnUpdateWorkoutProgramDataResolverFn.AppSyncFunction" } }, "SubscriptiononUpdateWorkoutProgramResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "onUpdateWorkoutProgram", "Kind": "PIPELINE", @@ -1738,7 +1738,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onUpdateWorkoutProgram\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1750,7 +1750,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1762,11 +1762,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1776,17 +1776,17 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/subscriptionOnUpdateWorkoutProgramResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/subscriptionOnUpdateWorkoutProgramResolver" } }, "SubscriptiononDeleteWorkoutProgramauth0FunctionSubscriptiononDeleteWorkoutProgramauth0FunctionAppSyncFunction798D646D": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononDeleteWorkoutProgramauth0Function", @@ -1796,17 +1796,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptiononDeleteWorkoutProgramauth0Function/SubscriptiononDeleteWorkoutProgramauth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/SubscriptiononDeleteWorkoutProgramauth0Function/SubscriptiononDeleteWorkoutProgramauth0Function.AppSyncFunction" } }, "SubscriptiononDeleteWorkoutProgrampostAuth0FunctionSubscriptiononDeleteWorkoutProgrampostAuth0FunctionAppSyncFunctionF1F4A2FC": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptiononDeleteWorkoutProgrampostAuth0Function", @@ -1816,17 +1816,17 @@ "ResponseMappingTemplate": "$util.toJson({})" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptiononDeleteWorkoutProgrampostAuth0Function/SubscriptiononDeleteWorkoutProgrampostAuth0Function.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/SubscriptiononDeleteWorkoutProgrampostAuth0Function/SubscriptiononDeleteWorkoutProgrampostAuth0Function.AppSyncFunction" } }, "SubscriptionOnDeleteWorkoutProgramDataResolverFnSubscriptionOnDeleteWorkoutProgramDataResolverFnAppSyncFunction7AE965FB": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "SubscriptionOnDeleteWorkoutProgramDataResolverFn", @@ -1838,14 +1838,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/SubscriptionOnDeleteWorkoutProgramDataResolverFn/SubscriptionOnDeleteWorkoutProgramDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/SubscriptionOnDeleteWorkoutProgramDataResolverFn/SubscriptionOnDeleteWorkoutProgramDataResolverFn.AppSyncFunction" } }, "SubscriptiononDeleteWorkoutProgramResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "onDeleteWorkoutProgram", "Kind": "PIPELINE", @@ -1877,7 +1877,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"Subscription\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"onDeleteWorkoutProgram\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1889,7 +1889,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1901,11 +1901,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -1915,17 +1915,17 @@ "TypeName": "Subscription" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/subscriptionOnDeleteWorkoutProgramResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/subscriptionOnDeleteWorkoutProgramResolver" } }, "WorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunction6C8EE914": { "Type": "AWS::AppSync::FunctionConfiguration", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "DataSourceName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name" }, "FunctionVersion": "2018-05-29", "Name": "WorkoutProgramOwnerDataResolverFn", @@ -1937,14 +1937,14 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/WorkoutProgramOwnerDataResolverFn/WorkoutProgramOwnerDataResolverFn.AppSyncFunction" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/WorkoutProgramOwnerDataResolverFn/WorkoutProgramOwnerDataResolverFn.AppSyncFunction" } }, "WorkoutProgramownerResolver": { "Type": "AWS::AppSync::Resolver", "Properties": { "ApiId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "FieldName": "owner", "Kind": "PIPELINE", @@ -1964,7 +1964,7 @@ [ "$util.qr($ctx.stash.put(\"typeName\", \"WorkoutProgram\"))\n$util.qr($ctx.stash.put(\"fieldName\", \"owner\"))\n$util.qr($ctx.stash.put(\"conditions\", []))\n$util.qr($ctx.stash.put(\"metadata\", {}))\n$util.qr($ctx.stash.metadata.put(\"dataSourceType\", \"NONE\"))\n$util.qr($ctx.stash.metadata.put(\"apiId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"authRole\", \"arn:", { @@ -1976,7 +1976,7 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"unauthRole\", \"arn:", { @@ -1988,11 +1988,11 @@ }, ":assumed-role/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, "/CognitoIdentityCredentials\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" }, "\"))\n$util.qr($ctx.stash.put(\"adminRoles\", []))\n$util.toJson({})" ] @@ -2002,7 +2002,7 @@ "TypeName": "WorkoutProgram" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/workoutProgramOwnerResolver" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/workoutProgramOwnerResolver" } }, "CDKMetadata": { @@ -2011,7 +2011,7 @@ "Analytics": "v2:deflate64:H4sIAAAAAAAA/1WOwW6DMAyGn6X31OtoD7uuoB63CXavTGJQCjgodlpViHefoFOnnX5/8if7zyA7HGC3wZtsreu2va9h+iBRcpWi7Uze8BdGHEgpLpAHdl59YFOShBQtmTyJhuEPG37OeJPz5O6MQ3A1fGPd0xGFjMcBpjL0Dzv0NBscR7mzhalY9aIuULF6nvxPp8R2KZEHbnybIq6Nfj/3V4qzkf0ZRUgF3pcwsodjsh3pUmBe3M+kY1KzrivF1nM7Gw6O4CIv1yyD1zfYbS7i/TYmVj8QlI/8AVayTVs2AQAA" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -2031,7 +2031,7 @@ ":", [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "GetAtt:WorkoutProgramTable:StreamArn" ] @@ -2041,14 +2041,14 @@ }, "GetAttWorkoutProgramTableName": { "Description": "Your DynamoDB table name.", - "Value": "WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main", + "Value": "WorkoutProgram-jzwb5p2vcbd2ldlnlxokgjcjby-main", "Export": { "Name": { "Fn::Join": [ ":", [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" }, "GetAtt:WorkoutProgramTable:Name" ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.outputs.json new file mode 100644 index 00000000000..6ce6d9f7248 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.outputs.json @@ -0,0 +1,38 @@ +[ + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Arn", + "OutputValue": "arn:aws:lambda:us-east-1:123456789012:function:admin-gen2-main" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolBF05A444Ref", + "OutputValue": "us-east-1_KGveHFLxc" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthAdminGroupRoleC37E0196Ref", + "OutputValue": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-jIdkeXSZarK4" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref", + "OutputValue": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Ref", + "OutputValue": "admin-gen2-main" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef", + "OutputValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-RtuRf8ygfomA" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebauthfitnesstracker33f5545533f55455PreSignupgen2mainlambda2B17C7BARef", + "OutputValue": "fitnesstracker33f5545533f55455PreSignup-gen2-main" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolAppClient1903AFDARef", + "OutputValue": "1o40oi80febsgsdamen2i1gnfd" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref", + "OutputValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-fF1WwIKcoHtV" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.parameters.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.parameters.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.template.json similarity index 90% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.template.json index eabf888a35e..b2a19c89b11 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.template.json @@ -23,7 +23,7 @@ "LambdaConfig": { "PreSignUp": { "Fn::GetAtt": [ - "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambda9B996C42", + "fitnesstracker33f5545533f55455PreSignupgen2mainlambda1F6BAF02", "Arn" ] } @@ -72,7 +72,7 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPool/Resource" } }, "amplifyAuthUserPoolPreSignUpCognito55F45D8E": { @@ -81,7 +81,7 @@ "Action": "lambda:InvokeFunction", "FunctionName": { "Fn::GetAtt": [ - "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambda9B996C42", + "fitnesstracker33f5545533f55455PreSignupgen2mainlambda1F6BAF02", "Arn" ] }, @@ -94,7 +94,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/PreSignUpCognito" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPool/PreSignUpCognito" } }, "amplifyAuthUserPoolNativeAppClient79534448": { @@ -117,7 +117,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPool/NativeAppClient/Resource" } }, "amplifyAuthUserPoolAppClient2626C6F8": { @@ -151,7 +151,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/UserPoolAppClient/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPoolAppClient/Resource" } }, "amplifyAuthIdentityPool3FDE84CC": { @@ -205,7 +205,7 @@ "SupportedLoginProviders": {} }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/IdentityPool" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/IdentityPool" } }, "amplifyAuthauthenticatedUserRoleD8DA3689": { @@ -257,7 +257,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/authenticatedUserRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/authenticatedUserRole/Resource" } }, "amplifyAuthunauthenticatedUserRole2B524D9E": { @@ -309,7 +309,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/unauthenticatedUserRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/unauthenticatedUserRole/Resource" } }, "amplifyAuthIdentityPoolRoleAttachment045F17C8": { @@ -363,7 +363,7 @@ "amplifyAuthUserPoolAppClient2626C6F8" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/IdentityPoolRoleAttachment" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/IdentityPoolRoleAttachment" } }, "amplifyAuthAdminGroupRole766878DC": { @@ -415,7 +415,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroupRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/AdminGroupRole/Resource" } }, "amplifyAuthAdminGroupCC42FF04": { @@ -434,10 +434,10 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/amplifyAuth/AdminGroup" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/AdminGroup" } }, - "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE": { + "fitnesstracker33f5545533f55455PreSignupgen2mainlambdaServiceRole713FCE90": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { @@ -481,7 +481,7 @@ }, { "Key": "amplify:friendly-name", - "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + "Value": "fitnesstracker33f5545533f55455PreSignup-gen2-main" }, { "Key": "created-by", @@ -490,10 +490,10 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/fitnesstracker33f5545533f55455PreSignup-gen2-main-lambda/ServiceRole/Resource" } }, - "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambda9B996C42": { + "fitnesstracker33f5545533f55455PreSignupgen2mainlambda1F6BAF02": { "Type": "AWS::Lambda::Function", "Properties": { "Architectures": [ @@ -503,7 +503,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371.zip" + "S3Key": "9f9c01e67674891c2af7783b0075317068ffc260976375cef1a2fb293d54b4f7.zip" }, "Environment": { "Variables": { @@ -518,12 +518,12 @@ "EphemeralStorage": { "Size": 512 }, - "FunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main", + "FunctionName": "fitnesstracker33f5545533f55455PreSignup-gen2-main", "Handler": "index.handler", "MemorySize": 128, "Role": { "Fn::GetAtt": [ - "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE", + "fitnesstracker33f5545533f55455PreSignupgen2mainlambdaServiceRole713FCE90", "Arn" ] }, @@ -543,7 +543,7 @@ }, { "Key": "amplify:friendly-name", - "Value": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" + "Value": "fitnesstracker33f5545533f55455PreSignup-gen2-main" }, { "Key": "created-by", @@ -553,11 +553,11 @@ "Timeout": 25 }, "DependsOn": [ - "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaServiceRole059288DE" + "fitnesstracker33f5545533f55455PreSignupgen2mainlambdaServiceRole713FCE90" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main-lambda/Resource", - "aws:asset:path": "asset.760ad82965dad99ed53d951c493a36c4179e9dd370854fff7b2cd69b86fc3371", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/fitnesstracker33f5545533f55455PreSignup-gen2-main-lambda/Resource", + "aws:asset:path": "asset.9f9c01e67674891c2af7783b0075317068ffc260976375cef1a2fb293d54b4f7", "aws:asset:is-bundled": true, "aws:asset:property": "Code" } @@ -565,7 +565,7 @@ "AMPLIFYAUTHUSERPOOLIDParameterCC466CA3": { "Type": "AWS::SSM::Parameter", "Properties": { - "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID", + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_AUTH_USERPOOL_ID", "Tags": { "amplify:app-id": "fitnesstracker", "amplify:branch-name": "gen2-main", @@ -578,7 +578,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/AMPLIFY_AUTH_USERPOOL_IDParameter/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/AMPLIFY_AUTH_USERPOOL_IDParameter/Resource" } }, "admingen2mainlambdaServiceRole439B1792": { @@ -634,7 +634,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/admin-gen2-main-lambda/ServiceRole/Resource" } }, "admingen2mainlambdaServiceRoleDefaultPolicy0F640A9C": { @@ -661,7 +661,7 @@ { "Ref": "AWS::AccountId" }, - ":parameter/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID" + ":parameter/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_AUTH_USERPOOL_ID" ] ] } @@ -677,7 +677,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/admin-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" } }, "admingen2mainlambdaECF7211C": { @@ -690,15 +690,15 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a.zip" + "S3Key": "b92a661741ad73057aa08e5c49f164a180c0bb1ad1d4be9740e7154f2b916a62.zip" }, "Environment": { "Variables": { "ENV": "gen2-main", "REGION": "us-east-1", - "AMPLIFY_SSM_ENV_CONFIG": "{\"AMPLIFY_AUTH_USERPOOL_ID\":{\"path\":\"/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_AUTH_USERPOOL_ID\"}}", + "AMPLIFY_SSM_ENV_CONFIG": "{\"AMPLIFY_AUTH_USERPOOL_ID\":{\"path\":\"/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_AUTH_USERPOOL_ID\"}}", "AMPLIFY_AUTH_USERPOOL_ID": "", - "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": { + "AUTH_FITNESSTRACKER33F5545533F55455_USERPOOLID": { "Ref": "amplifyAuthUserPool4BA7F805" } } @@ -744,8 +744,8 @@ "admingen2mainlambdaServiceRole439B1792" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/admin-gen2-main-lambda/Resource", - "aws:asset:path": "asset.4e723dc014ae2f9078fd069f23775b347aee3a961eecd6ad8e96385276460c1a", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/admin-gen2-main-lambda/Resource", + "aws:asset:path": "asset.b92a661741ad73057aa08e5c49f164a180c0bb1ad1d4be9740e7154f2b916a62", "aws:asset:is-bundled": true, "aws:asset:property": "Code" } @@ -776,7 +776,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess1/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess1/Resource" } }, "userpoolAccess268F187DB": { @@ -805,7 +805,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess2/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess2/Resource" } }, "userpoolAccess3956C62F8": { @@ -834,7 +834,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess3/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess3/Resource" } }, "userpoolAccess4A84025C3": { @@ -863,7 +863,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess4/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess4/Resource" } }, "userpoolAccess585E2FB32": { @@ -892,7 +892,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess5/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess5/Resource" } }, "userpoolAccess600DA4CB0": { @@ -921,7 +921,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess6/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess6/Resource" } }, "userpoolAccess76F9C91C1": { @@ -950,7 +950,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/userpoolAccess7/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/userpoolAccess7/Resource" } }, "CDKMetadata": { @@ -959,7 +959,7 @@ "Analytics": "v2:deflate64:H4sIAAAAAAAA/12NzW7CQAyEn4X74tLAoVeI1KoXFBH1HC0bkzrZn2rtFKFV3r3aoLSop5mxPZ8LKHY72Kz0ldemHdaWzpCOyIJtLdoMSl+5SSZ0niRA+mCMVQhWlRf/6xdTWkIvj6u/yXuLXkhuS/kxn4LFvYg2n+5f/y2G8WtSVrtzqyGVF19hdMRMwee719EboeAnRdpByqA8nrUKlswtx7tbMI0PLfYMx1kWguJto5lRGPZZFG/hMJoB5aAZFbODVEsk31U6aoeCcUYvYZrU3KtFd+S7SeUv0PPTd1HA8wtsVj0TrePohRzC6a4/caZnM34BAAA=" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -1231,42 +1231,42 @@ } }, "Outputs": { - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref": { + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolBF05A444Ref": { "Value": { "Ref": "amplifyAuthUserPool4BA7F805" } }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPoolAppClientE9EEF58ARef": { + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolAppClient1903AFDARef": { "Value": { "Ref": "amplifyAuthUserPoolAppClient2626C6F8" } }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref": { "Value": { "Ref": "amplifyAuthIdentityPool3FDE84CC" } }, - "amplifyfitnesstrackergen2mainbrancha09655d799authfitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaB4152CB6Ref": { + "amplifyfitnesstrackergen2mainbranch400746baebauthfitnesstracker33f5545533f55455PreSignupgen2mainlambda2B17C7BARef": { "Value": { - "Ref": "fitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambda9B996C42" + "Ref": "fitnesstracker33f5545533f55455PreSignupgen2mainlambda1F6BAF02" } }, - "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FRef": { + "amplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Ref": { "Value": { "Ref": "admingen2mainlambdaECF7211C" } }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { "Value": { "Ref": "amplifyAuthauthenticatedUserRoleD8DA3689" } }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef": { "Value": { "Ref": "amplifyAuthunauthenticatedUserRole2B524D9E" } }, - "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn": { + "amplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Arn": { "Value": { "Fn::GetAtt": [ "admingen2mainlambdaECF7211C", @@ -1274,7 +1274,7 @@ ] } }, - "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { + "amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthAdminGroupRoleC37E0196Ref": { "Value": { "Ref": "amplifyAuthAdminGroupRole766878DC" } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-data7552DF31-1601DAFBL31V0.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-data7552DF31-1601DAFBL31V0.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-data7552DF31-1601DAFBL31V0.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-data7552DF31-1601DAFBL31V0.outputs.json new file mode 100644 index 00000000000..3083780a1d2 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-data7552DF31-1601DAFBL31V0.outputs.json @@ -0,0 +1,26 @@ +[ + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId", + "OutputValue": "jrmmxaml4ndpxmx4pmyk3bgv7u" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIDefaultApiKey7DAA10FCApiKey", + "OutputValue": "da2-s7g7rnzffjfsvp6a5as4utznce" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebdatalognutritiongen2mainlambda08A76FE8Arn", + "OutputValue": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-gen2-main" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BGraphQLUrl", + "OutputValue": "https://lpsucva2qjdofmkpzenwokjsue.appsync-api.us-east-1.amazonaws.com/graphql" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsDeploymentCustomResource1536MiB0917740FDestinationBucketArn", + "OutputValue": "arn:aws:s3:::amplify-fitnesstracker-ge-amplifydataamplifycodege-qcmnmg6hhy5m" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebdatalognutritiongen2mainlambda08A76FE8Ref", + "OutputValue": "lognutrition-gen2-main" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-data7552DF31-1601DAFBL31V0.parameters.json similarity index 52% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-data7552DF31-1601DAFBL31V0.parameters.json index 59d1fb810b6..6ecdf1c9579 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-data7552DF31-1601DAFBL31V0.parameters.json @@ -4,35 +4,35 @@ "ParameterValue": "5" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref", - "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-RtuRf8ygfomA" }, { "ParameterKey": "DynamoDBEnableServerSideEncryption", "ParameterValue": "true" }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref", - "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" - }, { "ParameterKey": "DynamoDBEnablePointInTimeRecovery", "ParameterValue": "false" }, { - "ParameterKey": "DynamoDBBillingMode", - "ParameterValue": "PAY_PER_REQUEST" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref", + "ParameterValue": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref", - "ParameterValue": "us-east-1_mQEsDQ1lC" + "ParameterKey": "DynamoDBBillingMode", + "ParameterValue": "PAY_PER_REQUEST" }, { "ParameterKey": "DynamoDBModelTableWriteIOPS", "ParameterValue": "5" }, { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref", - "ParameterValue": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolBF05A444Ref", + "ParameterValue": "us-east-1_KGveHFLxc" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-fF1WwIKcoHtV" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-data7552DF31-1601DAFBL31V0.template.json similarity index 80% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-data7552DF31-1601DAFBL31V0.template.json index b49a224a022..ac561915d3d 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-data7552DF31-1601DAFBL31V0.template.json @@ -39,12 +39,12 @@ }, "DefaultAction": "ALLOW", "UserPoolId": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolBF05A444Ref" } } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/GraphQLAPI/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/GraphQLAPI/Resource" } }, "amplifyDataGraphQLAPITransformerSchemaFF50A789": { @@ -61,7 +61,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/GraphQLAPI/TransformerSchema" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/GraphQLAPI/TransformerSchema" } }, "amplifyDataGraphQLAPIDefaultApiKey1C8ED374": { @@ -74,10 +74,10 @@ ] }, "Description": "graphql", - "Expires": 1774832761 + "Expires": 1774928171 }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/GraphQLAPI/DefaultApiKey" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/GraphQLAPI/DefaultApiKey" } }, "amplifyDataGraphQLAPINONEDS684BF699": { @@ -94,14 +94,14 @@ "Type": "NONE" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/GraphQLAPI/NONE_DS/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/GraphQLAPI/NONE_DS/Resource" } }, "amplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource86290833": { "Type": "AWS::CloudFormation::Stack", "Properties": { "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId": { "Fn::GetAtt": [ "amplifyDataGraphQLAPI42A6FA33", "ApiId" @@ -146,7 +146,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/e196781c904575721375d59a240f99923ff104a298c1fdf313ff66f196d891d8.json" + "/f37420166f9ac08186a3cdad4004870869529236abd5f4fbf5ce02519bd0d2d9.json" ] ] } @@ -154,8 +154,8 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyTableManager.NestedStack/AmplifyTableManager.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerF6C912A7.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/AmplifyTableManager.NestedStack/AmplifyTableManager.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManager8867D646.nested.template.json", "aws:asset:property": "TemplateURL" } }, @@ -178,32 +178,32 @@ "DynamoDBEnableServerSideEncryption": { "Ref": "DynamoDBEnableServerSideEncryption" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResourceE84470E2Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerTableMaE24831DE": { "Fn::GetAtt": [ "amplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource86290833", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent9609CD96Arn" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent4D2D0CF9Arn" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId": { "Fn::GetAtt": [ "amplifyDataGraphQLAPI42A6FA33", "ApiId" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name": { "Fn::GetAtt": [ "amplifyDataGraphQLAPINONEDS684BF699", "Name" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" } }, "Tags": [ @@ -244,7 +244,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/17902e785c4e729dbb0ee9d37a4e996a4642c2e06d8a5cac3d6a9e88732b03bc.json" + "/f49170eb7c9d78b1e4c6b9e7c434a75f6cb5412d1ebd22ebf34ddfdb7a0b1763.json" ] ] } @@ -255,8 +255,8 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/WorkoutProgram.NestedStack/WorkoutProgram.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataWorkoutProgramF3A49908.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/WorkoutProgram.NestedStack/WorkoutProgram.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataWorkoutProgramDF6E3FC5.nested.template.json", "aws:asset:property": "TemplateURL" } }, @@ -279,32 +279,32 @@ "DynamoDBEnableServerSideEncryption": { "Ref": "DynamoDBEnableServerSideEncryption" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResourceE84470E2Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerTableMaE24831DE": { "Fn::GetAtt": [ "amplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource86290833", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent9609CD96Arn" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent4D2D0CF9Arn" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId": { "Fn::GetAtt": [ "amplifyDataGraphQLAPI42A6FA33", "ApiId" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name": { "Fn::GetAtt": [ "amplifyDataGraphQLAPINONEDS684BF699", "Name" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" } }, "Tags": [ @@ -345,7 +345,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/12d625aa6cd011e2e75d539e7054752a21e29f1cc060ee87fcaf8108f16d6fea.json" + "/654e5882a5d4df0c80b2afc1f525ea4f0b5f32771060945aead2e22641a51060.json" ] ] } @@ -356,8 +356,8 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Exercise.NestedStack/Exercise.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExercise9942F32B.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Exercise.NestedStack/Exercise.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExercise2AF6D082.nested.template.json", "aws:asset:property": "TemplateURL" } }, @@ -380,32 +380,32 @@ "DynamoDBEnableServerSideEncryption": { "Ref": "DynamoDBEnableServerSideEncryption" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource89A06036Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableMa39604183": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResourceE84470E2Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerTableMaE24831DE": { "Fn::GetAtt": [ "amplifyDataAmplifyTableManagerNestedStackAmplifyTableManagerNestedStackResource86290833", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent9609CD96Arn" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent4D2D0CF9Arn" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId": { "Fn::GetAtt": [ "amplifyDataGraphQLAPI42A6FA33", "ApiId" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name": { "Fn::GetAtt": [ "amplifyDataGraphQLAPINONEDS684BF699", "Name" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" } }, "Tags": [ @@ -446,7 +446,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/e0909ac34eda8c3d4fe59e45563f423b9a8202895c2c90834cb65221aabbb46d.json" + "/90bc7c76efd60f7749effd654020bce258df5515192150cb2cffb73afb4b121a.json" ] ] } @@ -457,8 +457,8 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/Meal.NestedStack/Meal.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataMeal7D390DE4.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/Meal.NestedStack/Meal.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataMeal183E05A4.nested.template.json", "aws:asset:property": "TemplateURL" } }, @@ -466,38 +466,38 @@ "Type": "AWS::CloudFormation::Stack", "Properties": { "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId": { "Fn::GetAtt": [ "amplifyDataGraphQLAPI42A6FA33", "ApiId" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPINONEDSD2CC3624Name": { "Fn::GetAtt": [ "amplifyDataGraphQLAPINONEDS684BF699", "Name" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseNestedStackExerciseNestedStackResourceC9DAC2F3Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseDataSourceDCCBFD77Name": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseNestedStackExerciseNestedStackResourceA766B8C6Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseExerciseDataSourceA366FC05Name": { "Fn::GetAtt": [ "amplifyDataExerciseNestedStackExerciseNestedStackResource73533B79", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseDataSourceDCCBFD77Name" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseExerciseDataSourceA366FC05Name" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseNestedStackExerciseNestedStackResourceC9DAC2F3Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseTableECDBC610TableArn": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseNestedStackExerciseNestedStackResourceA766B8C6Outputsamplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseExerciseTableA7BD0631TableArn": { "Fn::GetAtt": [ "amplifyDataExerciseNestedStackExerciseNestedStackResource73533B79", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseTableECDBC610TableArn" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataExerciseExerciseTableA7BD0631TableArn" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref": { + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" } }, "Tags": [ @@ -538,7 +538,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/55d3af84db44ef02e9712cd140af686369ed562a906a5cd15fdf4071b773b4b0.json" + "/453d993ef8245185b0fdbb2c736c1d61b4ab7885cfa293984e7c652e2006f0d4.json" ] ] } @@ -550,8 +550,8 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/ConnectionStack.NestedStack/ConnectionStack.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataConnectionStackC9FBC7D1.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/ConnectionStack.NestedStack/ConnectionStack.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataConnectionStackBA42D0E4.nested.template.json", "aws:asset:property": "TemplateURL" } }, @@ -607,7 +607,7 @@ "Value": "true" }, { - "Key": "aws-cdk:cr-owned:1f2b0d25", + "Key": "aws-cdk:cr-owned:85b13048", "Value": "true" }, { @@ -619,7 +619,7 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsBucket/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsBucket/Resource" } }, "amplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsBucketPolicyF1C1C548": { @@ -674,7 +674,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsBucket/Policy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsBucket/Policy/Resource" } }, "amplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsBucketAutoDeleteObjectsCustomResource437F26F5": { @@ -696,7 +696,7 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsBucket/AutoDeleteObjectsCustomResource/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsBucket/AutoDeleteObjectsCustomResource/Default" } }, "amplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsDeploymentAwsCliLayerE322F905": { @@ -711,7 +711,7 @@ "Description": "/opt/awscli/aws" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsDeployment/AwsCliLayer/Resource", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsDeployment/AwsCliLayer/Resource", "aws:asset:path": "asset.0cfdecad2260a3a84ad0c2d08a77e03c9d25e26c7b52f26b1e1faf97aef92f18.zip", "aws:asset:is-bundled": false, "aws:asset:property": "Content" @@ -753,7 +753,7 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsDeployment/CustomResource-1536MiB/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/amplifyData/AmplifyCodegenAssets/AmplifyCodegenAssetsDeployment/CustomResource-1536MiB/Default" } }, "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": { @@ -778,7 +778,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/Custom::S3AutoDeleteObjectsCustomResourceProvider/Role" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/Custom::S3AutoDeleteObjectsCustomResourceProvider/Role" } }, "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": { @@ -817,7 +817,7 @@ "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler", "aws:asset:path": "asset.faa95a81ae7d7373f3e1f242268f904eb748d8d0fdd306e8a6fe515a1905a7d6", "aws:asset:property": "Code" } @@ -871,7 +871,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiB/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiB/ServiceRole/Resource" } }, "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiBServiceRoleDefaultPolicyFF1C635B": { @@ -1005,7 +1005,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiB/ServiceRole/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiB/ServiceRole/DefaultPolicy/Resource" } }, "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiBC5D8AB21": { @@ -1061,7 +1061,7 @@ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiBServiceRoleA41FC8C2" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiB/Resource", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/Custom::CDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C1536MiB/Resource", "aws:asset:path": "asset.3423a042b818e31c1e34a19d6689ab2e5f9b70fcbe9e71df66f241b20a200bd9", "aws:asset:is-bundled": false, "aws:asset:property": "Code" @@ -1088,7 +1088,7 @@ "Value": "true" }, { - "Key": "aws-cdk:cr-owned:d9a91a74", + "Key": "aws-cdk:cr-owned:eadf0ce8", "Value": "true" }, { @@ -1100,7 +1100,7 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/modelIntrospectionSchemaBucket/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/modelIntrospectionSchemaBucket/Resource" } }, "modelIntrospectionSchemaBucketPolicy4DAB0D15": { @@ -1189,7 +1189,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/modelIntrospectionSchemaBucket/Policy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/modelIntrospectionSchemaBucket/Policy/Resource" } }, "modelIntrospectionSchemaBucketAutoDeleteObjectsCustomResourceFE57309F": { @@ -1211,7 +1211,7 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/modelIntrospectionSchemaBucket/AutoDeleteObjectsCustomResource/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/modelIntrospectionSchemaBucket/AutoDeleteObjectsCustomResource/Default" } }, "modelIntrospectionSchemaBucketDeploymentAwsCliLayer13C432F7": { @@ -1226,7 +1226,7 @@ "Description": "/opt/awscli/aws" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/modelIntrospectionSchemaBucketDeployment/AwsCliLayer/Resource", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/modelIntrospectionSchemaBucketDeployment/AwsCliLayer/Resource", "aws:asset:path": "asset.0cfdecad2260a3a84ad0c2d08a77e03c9d25e26c7b52f26b1e1faf97aef92f18.zip", "aws:asset:is-bundled": false, "aws:asset:property": "Content" @@ -1262,13 +1262,13 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/modelIntrospectionSchemaBucketDeployment/CustomResource-1536MiB/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/modelIntrospectionSchemaBucketDeployment/CustomResource-1536MiB/Default" } }, "AMPLIFYDATAGRAPHQLENDPOINTParameter1C2CBB16": { "Type": "AWS::SSM::Parameter", "Properties": { - "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_DATA_GRAPHQL_ENDPOINT", + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_DATA_GRAPHQL_ENDPOINT", "Tags": { "amplify:app-id": "fitnesstracker", "amplify:branch-name": "gen2-main", @@ -1284,13 +1284,13 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/AMPLIFY_DATA_GRAPHQL_ENDPOINTParameter/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/AMPLIFY_DATA_GRAPHQL_ENDPOINTParameter/Resource" } }, "AMPLIFYDATAMODELINTROSPECTIONSCHEMABUCKETNAMEParameter47BF4F44": { "Type": "AWS::SSM::Parameter", "Properties": { - "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_BUCKET_NAME", + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_BUCKET_NAME", "Tags": { "amplify:app-id": "fitnesstracker", "amplify:branch-name": "gen2-main", @@ -1303,13 +1303,13 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_BUCKET_NAMEParameter/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_BUCKET_NAMEParameter/Resource" } }, "AMPLIFYDATAMODELINTROSPECTIONSCHEMAKEYParameterB6AEAE8A": { "Type": "AWS::SSM::Parameter", "Properties": { - "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_KEY", + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_KEY", "Tags": { "amplify:app-id": "fitnesstracker", "amplify:branch-name": "gen2-main", @@ -1320,13 +1320,13 @@ "Value": "modelIntrospectionSchema.json" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_KEYParameter/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/AMPLIFY_DATA_MODEL_INTROSPECTION_SCHEMA_KEYParameter/Resource" } }, "AMPLIFYDATADEFAULTNAMEParameterE7C23CC4": { "Type": "AWS::SSM::Parameter", "Properties": { - "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-a09655d799/AMPLIFY_DATA_DEFAULT_NAME", + "Name": "/amplify/resource_reference/fitnesstracker/gen2main-branch-400746baeb/AMPLIFY_DATA_DEFAULT_NAME", "Tags": { "amplify:app-id": "fitnesstracker", "amplify:branch-name": "gen2-main", @@ -1337,7 +1337,7 @@ "Value": "amplifyData" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/AMPLIFY_DATA_DEFAULT_NAMEParameter/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/AMPLIFY_DATA_DEFAULT_NAMEParameter/Resource" } }, "lognutritiongen2mainlambdaServiceRoleEF64897B": { @@ -1393,7 +1393,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/lognutrition-gen2-main-lambda/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/lognutrition-gen2-main-lambda/ServiceRole/Resource" } }, "lognutritiongen2mainlambdaServiceRoleDefaultPolicy710D0C37": { @@ -1425,7 +1425,7 @@ { "Fn::GetAtt": [ "amplifyDataMealNestedStackMealNestedStackResourceDA3F2B9A", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataMealMealTableFD0BC2A7TableArn" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataMealMealTable5D540888TableArn" ] } ] @@ -1441,7 +1441,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/lognutrition-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/lognutrition-gen2-main-lambda/ServiceRole/DefaultPolicy/Resource" } }, "lognutritiongen2mainlambda9BD8C969": { @@ -1454,7 +1454,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "95bfa16faa7a499bfbb1e8a9f09b98f992b7cb9d303063244fd1159bf57c0ed7.zip" + "S3Key": "2bcd86cf1eee34f16acb031224a530896ecfe84b4004ec66912a8281b73f0356.zip" }, "Environment": { "Variables": { @@ -1470,7 +1470,7 @@ "API_FITNESSTRACKER_MEALTABLE_ARN": { "Fn::GetAtt": [ "amplifyDataMealNestedStackMealNestedStackResourceDA3F2B9A", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataMealMealTableFD0BC2A7TableArn" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataMealMealTable5D540888TableArn" ] }, "API_FITNESSTRACKER_MEALTABLE_NAME": { @@ -1488,7 +1488,7 @@ { "Fn::GetAtt": [ "amplifyDataMealNestedStackMealNestedStackResourceDA3F2B9A", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataMealMealTableFD0BC2A7TableArn" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataMealMealTable5D540888TableArn" ] } ] @@ -1543,8 +1543,8 @@ "lognutritiongen2mainlambdaServiceRoleEF64897B" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/lognutrition-gen2-main-lambda/Resource", - "aws:asset:path": "asset.95bfa16faa7a499bfbb1e8a9f09b98f992b7cb9d303063244fd1159bf57c0ed7", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/lognutrition-gen2-main-lambda/Resource", + "aws:asset:path": "asset.2bcd86cf1eee34f16acb031224a530896ecfe84b4004ec66912a8281b73f0356", "aws:asset:is-bundled": true, "aws:asset:property": "Code" } @@ -1555,7 +1555,7 @@ "Analytics": "v2:deflate64:H4sIAAAAAAAA/6VSTW/bMAz9Lc1ZUdu0h6E318F6aJFlMbDLMASMTKdM9OGJcjND8H8fZDVJ156KnUi+J5KPFGdydnsrry7gwFNV76eaNjIukAPWVQC1Fytk13mFAg68jtC23Fsl44OH9vm3Llq6B0ZRNnZEvj8VLb2JKvWMBhJQtPSIvVg4i3MIUOWiZWPP0SD4Rsb7Tu0xJCZ7P+PE0B+yk7vJW5FJDt/IkWKZnxZdcHPUGPDbZocq8GQQ/5X9S2Rq6TSp/qwpx59QlhOqAAEN2k8K+5h81JV2n7a2jjW22vWJfk2anwABzBhYFskMQoPZ1CBj2dgn6NH/QM/krKjIbjUGZ792VoWEnJyyOYGDIDAyrpweP2+05+1kbxDMRsYqeLLbJXgwGNCP/DE4ylhbV+OO5WI05yZlY/P5lR0HZ05HmFoe/dcKOg2xhgMrTbI4cKlpnEuM81YBtmS3/zR/V3Tp3QvV6PMykyC548uX2Uxef5FXFzsmmvrOBjIoV9n+BdBFrHc2AwAA" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -1598,16 +1598,16 @@ ], "Description": "Enable server side encryption powered by KMS." }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolBF05A444Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref": { "Type": "String" } }, @@ -1878,12 +1878,12 @@ } }, "Outputs": { - "amplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Ref": { + "amplifyfitnesstrackergen2mainbranch400746baebdatalognutritiongen2mainlambda08A76FE8Ref": { "Value": { "Ref": "lognutritiongen2mainlambda9BD8C969" } }, - "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId": { + "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId": { "Value": { "Fn::GetAtt": [ "amplifyDataGraphQLAPI42A6FA33", @@ -1891,7 +1891,7 @@ ] } }, - "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAGraphQLUrl": { + "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BGraphQLUrl": { "Value": { "Fn::GetAtt": [ "amplifyDataGraphQLAPI42A6FA33", @@ -1899,7 +1899,7 @@ ] } }, - "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsDeploymentCustomResource1536MiB8E4BD6ABDestinationBucketArn": { + "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsDeploymentCustomResource1536MiB0917740FDestinationBucketArn": { "Value": { "Fn::GetAtt": [ "amplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsDeploymentCustomResource1536MiB21775929", @@ -1907,7 +1907,7 @@ ] } }, - "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIDefaultApiKeyE10BC731ApiKey": { + "amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIDefaultApiKey7DAA10FCApiKey": { "Value": { "Fn::GetAtt": [ "amplifyDataGraphQLAPIDefaultApiKey1C8ED374", @@ -1915,7 +1915,7 @@ ] } }, - "amplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn": { + "amplifyfitnesstrackergen2mainbranch400746baebdatalognutritiongen2mainlambda08A76FE8Arn": { "Value": { "Fn::GetAtt": [ "lognutritiongen2mainlambda9BD8C969", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistackadminapi43EA27F6-156QTXWFLKBBU.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistackadminapi43EA27F6-156QTXWFLKBBU.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistackadminapi43EA27F6-156QTXWFLKBBU.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistackadminapi43EA27F6-156QTXWFLKBBU.outputs.json new file mode 100644 index 00000000000..bbfcb44ca35 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistackadminapi43EA27F6-156QTXWFLKBBU.outputs.json @@ -0,0 +1,14 @@ +[ + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebrestapistackadminapiRestApi15E05C08Ref", + "OutputValue": "3tygfqh1kh" + }, + { + "OutputKey": "RestApiEndpoint0551178A", + "OutputValue": "https://3tygfqh1kh.execute-api.us-east-1.amazonaws.com/prod/" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebrestapistackadminapiRestApiDeploymentStageprodB49BA490Ref", + "OutputValue": "prod" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistackadminapi43EA27F6-156QTXWFLKBBU.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistackadminapi43EA27F6-156QTXWFLKBBU.parameters.json new file mode 100644 index 00000000000..b6b8c1039a9 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistackadminapi43EA27F6-156QTXWFLKBBU.parameters.json @@ -0,0 +1,14 @@ +[ + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthAdminGroupRoleC37E0196Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-jIdkeXSZarK4" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Arn", + "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:admin-gen2-main" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-fF1WwIKcoHtV" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistackadminapi43EA27F6-156QTXWFLKBBU.template.json similarity index 86% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistackadminapi43EA27F6-156QTXWFLKBBU.template.json index d7912bc3ee7..cfafb176428 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistackadminapi43EA27F6-156QTXWFLKBBU.template.json @@ -25,7 +25,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/RestApi/Resource" } }, "RestApiCloudWatchRoleE3ED6605": { @@ -79,7 +79,7 @@ "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/CloudWatchRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/RestApi/CloudWatchRole/Resource" } }, "RestApiAccount7C83CF5A": { @@ -98,10 +98,10 @@ "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Account" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/RestApi/Account" } }, - "RestApiDeployment180EC503546d318a996a44726021c4af228bfd46": { + "RestApiDeployment180EC5035a234307e06871ce9f41d5b69075e5fe": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "Automatically created by the RestApi construct", @@ -120,7 +120,7 @@ "RestApiDefault5XXD8CFC37C" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Deployment/Resource", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/RestApi/Deployment/Resource", "aws:cdk:do-not-refactor": true } }, @@ -128,7 +128,7 @@ "Type": "AWS::ApiGateway::Stage", "Properties": { "DeploymentId": { - "Ref": "RestApiDeployment180EC503546d318a996a44726021c4af228bfd46" + "Ref": "RestApiDeployment180EC5035a234307e06871ce9f41d5b69075e5fe" }, "RestApiId": { "Ref": "RestApi0C43BF4B" @@ -157,7 +157,7 @@ "RestApiAccount7C83CF5A" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/DeploymentStage.prod/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/RestApi/DeploymentStage.prod/Resource" } }, "RestApiadmin6E2AFAD8": { @@ -175,7 +175,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/RestApi/Default/admin/Resource" } }, "RestApiadminOPTIONS9579A88D": { @@ -218,15 +218,15 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/OPTIONS/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/RestApi/Default/admin/OPTIONS/Resource" } }, - "RestApiadminANYApiPermissionamplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi22C035AEANYadmin44FFEED1": { + "RestApiadminANYApiPermissionamplifyfitnesstrackergen2mainbranch400746baebrestapistackadminapiRestApi93F88D79ANYadmin6E3EDE44": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Arn" }, "Principal": "apigateway.amazonaws.com", "SourceArn": { @@ -259,15 +259,15 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/ANY/ApiPermission.amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi22C035AE.ANY..admin" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/RestApi/Default/admin/ANY/ApiPermission.amplifyfitnesstrackergen2mainbranch400746baebrestapistackadminapiRestApi93F88D79.ANY..admin" } }, - "RestApiadminANYApiPermissionTestamplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi22C035AEANYadminD21F14BB": { + "RestApiadminANYApiPermissionTestamplifyfitnesstrackergen2mainbranch400746baebrestapistackadminapiRestApi93F88D79ANYadmin68E49803": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Arn" }, "Principal": "apigateway.amazonaws.com", "SourceArn": { @@ -296,7 +296,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/ANY/ApiPermission.Test.amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi22C035AE.ANY..admin" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/RestApi/Default/admin/ANY/ApiPermission.Test.amplifyfitnesstrackergen2mainbranch400746baebrestapistackadminapiRestApi93F88D79.ANY..admin" } }, "RestApiadminANY959B010C": { @@ -321,7 +321,7 @@ }, ":lambda:path/2015-03-31/functions/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Arn" }, "/invocations" ] @@ -336,7 +336,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/ANY/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/RestApi/Default/admin/ANY/Resource" } }, "RestApiadminproxy34EEEF46": { @@ -351,7 +351,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/Resource" } }, "RestApiadminproxyOPTIONS0428B0AB": { @@ -394,15 +394,15 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/OPTIONS/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/OPTIONS/Resource" } }, - "RestApiadminproxyANYApiPermissionamplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi22C035AEANYadminproxy15EA3F86": { + "RestApiadminproxyANYApiPermissionamplifyfitnesstrackergen2mainbranch400746baebrestapistackadminapiRestApi93F88D79ANYadminproxyE1CD8302": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Arn" }, "Principal": "apigateway.amazonaws.com", "SourceArn": { @@ -435,15 +435,15 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/ANY/ApiPermission.amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi22C035AE.ANY..admin.{proxy+}" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/ANY/ApiPermission.amplifyfitnesstrackergen2mainbranch400746baebrestapistackadminapiRestApi93F88D79.ANY..admin.{proxy+}" } }, - "RestApiadminproxyANYApiPermissionTestamplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi22C035AEANYadminproxyCA6BDB78": { + "RestApiadminproxyANYApiPermissionTestamplifyfitnesstrackergen2mainbranch400746baebrestapistackadminapiRestApi93F88D79ANYadminproxyE5AA6688": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Arn" }, "Principal": "apigateway.amazonaws.com", "SourceArn": { @@ -472,7 +472,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/ANY/ApiPermission.Test.amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi22C035AE.ANY..admin.{proxy+}" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/ANY/ApiPermission.Test.amplifyfitnesstrackergen2mainbranch400746baebrestapistackadminapiRestApi93F88D79.ANY..admin.{proxy+}" } }, "RestApiadminproxyANYAD871D2E": { @@ -497,7 +497,7 @@ }, ":lambda:path/2015-03-31/functions/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Arn" }, "/invocations" ] @@ -512,7 +512,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/ANY/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/RestApi/Default/admin/{proxy+}/ANY/Resource" } }, "RestApiDefault4XX291F46B7": { @@ -530,7 +530,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default4XX/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/RestApi/Default4XX/Resource" } }, "RestApiDefault5XXD8CFC37C": { @@ -548,7 +548,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/RestApi/Default5XX/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/RestApi/Default5XX/Resource" } }, "Gen1adminapiPolicy55C22DB4": { @@ -575,7 +575,7 @@ { "Ref": "AWS::AccountId" }, - ":bbk7dedp01/*/GET/*" + ":oxq86r59h6/*/GET/*" ] ] } @@ -586,12 +586,12 @@ "PolicyName": "Gen1adminapiPolicy55C22DB4", "Roles": [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" } ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/Gen1adminapiPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/Gen1adminapiPolicy/Resource" } }, "adminAdminPolicyED58DCB3": { @@ -659,12 +659,12 @@ "PolicyName": "adminAdminPolicyED58DCB3", "Roles": [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthAdminGroupRoleC37E0196Ref" } ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/adminAdminPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/adminAdminPolicy/Resource" } }, "CDKMetadata": { @@ -673,7 +673,7 @@ "Analytics": "v2:deflate64:H4sIAAAAAAAA/12Oz07DMAyHn2X3NIxqh10HSJyAKXsA5CVmeMs/1S5dVfXdUUgFEyd/vy927Fa3m41er2DgxrpL4+mop1dkQXcQsBcFA79PkOkEggOMejLIssukHj/iDe6sTX0U9YTZpzFglGJv0kHghMVVMMip7yw+AP+F5c/KLyifyRW10L5L1/H3+bneY5Bzivwz+l8t55UVsyIIejLJ1yWl7pMnO5ZYaVYewtGBLga7QMyU4lwa3nrJvcwqJof6zHdfbavvt3q9OjNR0/VRKKA2tX4D1w/yhFMBAAA=" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -705,12 +705,12 @@ ] } }, - "amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi59ABC85BRef": { + "amplifyfitnesstrackergen2mainbranch400746baebrestapistackadminapiRestApi15E05C08Ref": { "Value": { "Ref": "RestApi0C43BF4B" } }, - "amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApiDeploymentStageprod3A54AD90Ref": { + "amplifyfitnesstrackergen2mainbranch400746baebrestapistackadminapiRestApiDeploymentStageprodB49BA490Ref": { "Value": { "Ref": "RestApiDeploymentStageprod3855DE66" } @@ -983,13 +983,13 @@ } }, "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Arn": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthAdminGroupRoleC37E0196Ref": { "Type": "String" } } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistacknutritionapi72914ECD-13FDREQON6AQG.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistacknutritionapi72914ECD-13FDREQON6AQG.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistacknutritionapi72914ECD-13FDREQON6AQG.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistacknutritionapi72914ECD-13FDREQON6AQG.outputs.json new file mode 100644 index 00000000000..a721256f026 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistacknutritionapi72914ECD-13FDREQON6AQG.outputs.json @@ -0,0 +1,14 @@ +[ + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebrestapistacknutritionapiRestApiEC7FBBC7Ref", + "OutputValue": "klqsuoycl8" + }, + { + "OutputKey": "RestApiEndpoint0551178A", + "OutputValue": "https://klqsuoycl8.execute-api.us-east-1.amazonaws.com/prod/" + }, + { + "OutputKey": "amplifyfitnesstrackergen2mainbranch400746baebrestapistacknutritionapiRestApiDeploymentStageprod41F1D9FFRef", + "OutputValue": "prod" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistacknutritionapi72914ECD-13FDREQON6AQG.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistacknutritionapi72914ECD-13FDREQON6AQG.parameters.json new file mode 100644 index 00000000000..b14479fe049 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistacknutritionapi72914ECD-13FDREQON6AQG.parameters.json @@ -0,0 +1,14 @@ +[ + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthAdminGroupRoleC37E0196Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-jIdkeXSZarK4" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataNestedStackdataNestedStackResource2B549F52Outputsamplifyfitnesstrackergen2mainbranch400746baebdatalognutritiongen2mainlambda08A76FE8Arn", + "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-gen2-main" + }, + { + "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref", + "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-fF1WwIKcoHtV" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistacknutritionapi72914ECD-13FDREQON6AQG.template.json similarity index 89% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistacknutritionapi72914ECD-13FDREQON6AQG.template.json index 332fbac6f2c..c0e5129c687 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb-restapistacknutritionapi72914ECD-13FDREQON6AQG.template.json @@ -25,7 +25,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/Resource" } }, "RestApiCloudWatchRoleE3ED6605": { @@ -79,7 +79,7 @@ "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/CloudWatchRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/CloudWatchRole/Resource" } }, "RestApiAccount7C83CF5A": { @@ -98,10 +98,10 @@ "UpdateReplacePolicy": "Retain", "DeletionPolicy": "Retain", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Account" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/Account" } }, - "RestApiDeployment180EC503d495388c1d958d92be722f42111dede2": { + "RestApiDeployment180EC50372b8910fb447646fe0ec851ddd88eb80": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "Automatically created by the RestApi construct", @@ -121,7 +121,7 @@ "RestApiDefault5XXD8CFC37C" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Deployment/Resource", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/Deployment/Resource", "aws:cdk:do-not-refactor": true } }, @@ -129,7 +129,7 @@ "Type": "AWS::ApiGateway::Stage", "Properties": { "DeploymentId": { - "Ref": "RestApiDeployment180EC503d495388c1d958d92be722f42111dede2" + "Ref": "RestApiDeployment180EC50372b8910fb447646fe0ec851ddd88eb80" }, "RestApiId": { "Ref": "RestApi0C43BF4B" @@ -158,7 +158,7 @@ "RestApiAccount7C83CF5A" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/DeploymentStage.prod/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/DeploymentStage.prod/Resource" } }, "RestApinutrition3942DEFC": { @@ -176,7 +176,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/Default/nutrition/Resource" } }, "RestApinutritionlog525763DE": { @@ -191,7 +191,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/Resource" } }, "RestApinutritionlogOPTIONS0916370A": { @@ -234,15 +234,15 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/OPTIONS/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/OPTIONS/Resource" } }, - "RestApinutritionlogANYApiPermissionamplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiBC4946DCANYnutritionlog9FE434DE": { + "RestApinutritionlogANYApiPermissionamplifyfitnesstrackergen2mainbranch400746baebrestapistacknutritionapiRestApi56F22D17ANYnutritionlog0E7B0360": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataNestedStackdataNestedStackResource2B549F52Outputsamplifyfitnesstrackergen2mainbranch400746baebdatalognutritiongen2mainlambda08A76FE8Arn" }, "Principal": "apigateway.amazonaws.com", "SourceArn": { @@ -275,15 +275,15 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/ANY/ApiPermission.amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiBC4946DC.ANY..nutrition.log" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/ANY/ApiPermission.amplifyfitnesstrackergen2mainbranch400746baebrestapistacknutritionapiRestApi56F22D17.ANY..nutrition.log" } }, - "RestApinutritionlogANYApiPermissionTestamplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiBC4946DCANYnutritionlog638CFC51": { + "RestApinutritionlogANYApiPermissionTestamplifyfitnesstrackergen2mainbranch400746baebrestapistacknutritionapiRestApi56F22D17ANYnutritionlogC943788E": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataNestedStackdataNestedStackResource2B549F52Outputsamplifyfitnesstrackergen2mainbranch400746baebdatalognutritiongen2mainlambda08A76FE8Arn" }, "Principal": "apigateway.amazonaws.com", "SourceArn": { @@ -312,7 +312,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/ANY/ApiPermission.Test.amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiBC4946DC.ANY..nutrition.log" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/ANY/ApiPermission.Test.amplifyfitnesstrackergen2mainbranch400746baebrestapistacknutritionapiRestApi56F22D17.ANY..nutrition.log" } }, "RestApinutritionlogANY08C15E55": { @@ -337,7 +337,7 @@ }, ":lambda:path/2015-03-31/functions/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataNestedStackdataNestedStackResource2B549F52Outputsamplifyfitnesstrackergen2mainbranch400746baebdatalognutritiongen2mainlambda08A76FE8Arn" }, "/invocations" ] @@ -352,7 +352,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/ANY/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/ANY/Resource" } }, "RestApinutritionlogproxyA0E81954": { @@ -367,7 +367,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/Resource" } }, "RestApinutritionlogproxyOPTIONS695D781E": { @@ -410,15 +410,15 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/OPTIONS/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/OPTIONS/Resource" } }, - "RestApinutritionlogproxyANYApiPermissionamplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiBC4946DCANYnutritionlogproxy049F99D2": { + "RestApinutritionlogproxyANYApiPermissionamplifyfitnesstrackergen2mainbranch400746baebrestapistacknutritionapiRestApi56F22D17ANYnutritionlogproxy30B465F0": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataNestedStackdataNestedStackResource2B549F52Outputsamplifyfitnesstrackergen2mainbranch400746baebdatalognutritiongen2mainlambda08A76FE8Arn" }, "Principal": "apigateway.amazonaws.com", "SourceArn": { @@ -451,15 +451,15 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/ANY/ApiPermission.amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiBC4946DC.ANY..nutrition.log.{proxy+}" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/ANY/ApiPermission.amplifyfitnesstrackergen2mainbranch400746baebrestapistacknutritionapiRestApi56F22D17.ANY..nutrition.log.{proxy+}" } }, - "RestApinutritionlogproxyANYApiPermissionTestamplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiBC4946DCANYnutritionlogproxyE4A0E696": { + "RestApinutritionlogproxyANYApiPermissionTestamplifyfitnesstrackergen2mainbranch400746baebrestapistacknutritionapiRestApi56F22D17ANYnutritionlogproxy7276060A": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataNestedStackdataNestedStackResource2B549F52Outputsamplifyfitnesstrackergen2mainbranch400746baebdatalognutritiongen2mainlambda08A76FE8Arn" }, "Principal": "apigateway.amazonaws.com", "SourceArn": { @@ -488,7 +488,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/ANY/ApiPermission.Test.amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiBC4946DC.ANY..nutrition.log.{proxy+}" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/ANY/ApiPermission.Test.amplifyfitnesstrackergen2mainbranch400746baebrestapistacknutritionapiRestApi56F22D17.ANY..nutrition.log.{proxy+}" } }, "RestApinutritionlogproxyANY89358520": { @@ -513,7 +513,7 @@ }, ":lambda:path/2015-03-31/functions/", { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataNestedStackdataNestedStackResource2B549F52Outputsamplifyfitnesstrackergen2mainbranch400746baebdatalognutritiongen2mainlambda08A76FE8Arn" }, "/invocations" ] @@ -528,7 +528,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/ANY/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/Default/nutrition/log/{proxy+}/ANY/Resource" } }, "RestApiDefault4XX291F46B7": { @@ -546,7 +546,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default4XX/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/Default4XX/Resource" } }, "RestApiDefault5XXD8CFC37C": { @@ -564,7 +564,7 @@ } }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/RestApi/Default5XX/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/RestApi/Default5XX/Resource" } }, "Gen1nutritionapiPolicyAC846721": { @@ -592,7 +592,7 @@ { "Ref": "AWS::AccountId" }, - ":ekto8iln0h/*/POST/*" + ":hmydcaubcb/*/POST/*" ] ] }, @@ -612,7 +612,7 @@ { "Ref": "AWS::AccountId" }, - ":ekto8iln0h/*/GET/*" + ":hmydcaubcb/*/GET/*" ] ] }, @@ -632,7 +632,7 @@ { "Ref": "AWS::AccountId" }, - ":ekto8iln0h/*/PUT/*" + ":hmydcaubcb/*/PUT/*" ] ] }, @@ -652,7 +652,7 @@ { "Ref": "AWS::AccountId" }, - ":ekto8iln0h/*/DELETE/*" + ":hmydcaubcb/*/DELETE/*" ] ] } @@ -664,12 +664,12 @@ "PolicyName": "Gen1nutritionapiPolicyAC846721", "Roles": [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" } ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/Gen1nutritionapiPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/Gen1nutritionapiPolicy/Resource" } }, "nutritionlogAuthPolicyF60C3901": { @@ -881,12 +881,12 @@ "PolicyName": "nutritionlogAuthPolicyF60C3901", "Roles": [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" } ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/nutritionlogAuthPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/nutritionlogAuthPolicy/Resource" } }, "nutritionlogAdminPolicy5FCB013F": { @@ -1098,12 +1098,12 @@ "PolicyName": "nutritionlogAdminPolicy5FCB013F", "Roles": [ { - "Ref": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref" + "Ref": "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthAdminGroupRoleC37E0196Ref" } ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/nutritionlogAdminPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/nutritionlogAdminPolicy/Resource" } }, "CDKMetadata": { @@ -1112,7 +1112,7 @@ "Analytics": "v2:deflate64:H4sIAAAAAAAA/12Oz07DMAyHn2X3NIxqh10HSJyAKXsA5CVmeMs/1S5dVfXdUUgFEyd/vy927Fa3m41er2DgxrpL4+mop1dkQXcQsBcFA79PkOkEggOMejLIssukHj/iDe6sTX0U9YTZpzFglGJv0kHghMVVMMip7yw+AP+F5c/KLyifyRW10L5L1/H3+bneY5Bzivwz+l8t55UVsyIIejLJ1yWl7pMnO5ZYaVYewtGBLga7QMyU4lwa3nrJvcwqJof6zHdfbavvt3q9OjNR0/VRKKA2tX4D1w/yhFMBAAA=" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } @@ -1144,12 +1144,12 @@ ] } }, - "amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApi1438AE73Ref": { + "amplifyfitnesstrackergen2mainbranch400746baebrestapistacknutritionapiRestApiEC7FBBC7Ref": { "Value": { "Ref": "RestApi0C43BF4B" } }, - "amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiDeploymentStageprodD1246DCDRef": { + "amplifyfitnesstrackergen2mainbranch400746baebrestapistacknutritionapiRestApiDeploymentStageprod41F1D9FFRef": { "Value": { "Ref": "RestApiDeploymentStageprod3855DE66" } @@ -1422,13 +1422,13 @@ } }, "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataNestedStackdataNestedStackResource2B549F52Outputsamplifyfitnesstrackergen2mainbranch400746baebdatalognutritiongen2mainlambda08A76FE8Arn": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { "Type": "String" }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthAdminGroupRoleC37E0196Ref": { "Type": "String" } } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb.outputs.json similarity index 79% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb.outputs.json index 4a2f22d3f04..c449c2cb961 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb.outputs.json @@ -1,7 +1,7 @@ [ { "OutputKey": "webClientId", - "OutputValue": "dgddko7evul00or8262g7n9ub" + "OutputValue": "1o40oi80febsgsdamen2i1gnfd" }, { "OutputKey": "socialProviders", @@ -17,7 +17,7 @@ }, { "OutputKey": "oauthClientId", - "OutputValue": "dgddko7evul00or8262g7n9ub" + "OutputValue": "1o40oi80febsgsdamen2i1gnfd" }, { "OutputKey": "allowUnauthenticatedIdentities", @@ -53,7 +53,7 @@ }, { "OutputKey": "awsAppsyncApiKey", - "OutputValue": "da2-mpyed5y2pvbcjl2qcbxuq2rspe" + "OutputValue": "da2-s7g7rnzffjfsvp6a5as4utznce" }, { "OutputKey": "awsAppsyncAuthenticationType", @@ -61,7 +61,7 @@ }, { "OutputKey": "customOutputs", - "OutputValue": "{\"custom\":{\"API\":{\"adminapi-gen2-main\":{\"endpoint\":\"https://rr7ckdesd4.execute-api.us-east-1.amazonaws.com/prod\",\"region\":\"us-east-1\",\"apiName\":\"adminapi-gen2-main\"},\"nutritionapi-gen2-main\":{\"endpoint\":\"https://e2y3anael5.execute-api.us-east-1.amazonaws.com/prod\",\"region\":\"us-east-1\",\"apiName\":\"nutritionapi-gen2-main\"}}},\"version\":\"1.4\"}" + "OutputValue": "{\"custom\":{\"API\":{\"adminapi-gen2-main\":{\"endpoint\":\"https://3tygfqh1kh.execute-api.us-east-1.amazonaws.com/prod\",\"region\":\"us-east-1\",\"apiName\":\"adminapi-gen2-main\"},\"nutritionapi-gen2-main\":{\"endpoint\":\"https://klqsuoycl8.execute-api.us-east-1.amazonaws.com/prod\",\"region\":\"us-east-1\",\"apiName\":\"nutritionapi-gen2-main\"}}},\"version\":\"1.4\"}" }, { "OutputKey": "oauthRedirectSignIn", @@ -73,11 +73,11 @@ }, { "OutputKey": "awsAppsyncApiEndpoint", - "OutputValue": "https://7ltandzu5zbxvcqrr24edz4hym.appsync-api.us-east-1.amazonaws.com/graphql" + "OutputValue": "https://lpsucva2qjdofmkpzenwokjsue.appsync-api.us-east-1.amazonaws.com/graphql" }, { "OutputKey": "awsAppsyncApiId", - "OutputValue": "uhg6hv7zmzav5doaroa4tocwv4" + "OutputValue": "jrmmxaml4ndpxmx4pmyk3bgv7u" }, { "OutputKey": "authRegion", @@ -85,7 +85,7 @@ }, { "OutputKey": "amplifyApiModelSchemaS3Uri", - "OutputValue": "s3://amplify-fitnesstracker-ge-amplifydataamplifycodege-cxlnc2wmwnpq/model-schema.graphql" + "OutputValue": "s3://amplify-fitnesstracker-ge-amplifydataamplifycodege-qcmnmg6hhy5m/model-schema.graphql" }, { "OutputKey": "groups", @@ -93,7 +93,7 @@ }, { "OutputKey": "definedFunctions", - "OutputValue": "[\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main\",\"admin-gen2-main\",\"lognutrition-gen2-main\"]" + "OutputValue": "[\"fitnesstracker33f5545533f55455PreSignup-gen2-main\",\"admin-gen2-main\",\"lognutrition-gen2-main\"]" }, { "OutputKey": "passwordlessOptions", @@ -117,11 +117,11 @@ }, { "OutputKey": "userPoolId", - "OutputValue": "us-east-1_mQEsDQ1lC" + "OutputValue": "us-east-1_KGveHFLxc" }, { "OutputKey": "identityPoolId", - "OutputValue": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" + "OutputValue": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3" }, { "OutputKey": "verificationMechanisms", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb.parameters.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb.parameters.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb.template.json similarity index 81% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb.template.json index 5c0f04feaf7..052eaffe513 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-400746baeb.template.json @@ -72,7 +72,7 @@ "Value": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolBF05A444Ref" ] } }, @@ -80,7 +80,7 @@ "Value": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPoolAppClientE9EEF58ARef" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolAppClient1903AFDARef" ] } }, @@ -88,7 +88,7 @@ "Value": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" ] } }, @@ -146,7 +146,7 @@ "Value": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPoolAppClientE9EEF58ARef" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolAppClient1903AFDARef" ] } }, @@ -162,21 +162,21 @@ { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authfitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaB4152CB6Ref" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebauthfitnesstracker33f5545533f55455PreSignupgen2mainlambda2B17C7BARef" ] }, "\",\"", { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FRef" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Ref" ] }, "\",\"", { "Fn::GetAtt": [ "data7552DF31", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Ref" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebdatalognutritiongen2mainlambda08A76FE8Ref" ] }, "\"]" @@ -188,7 +188,7 @@ "Value": { "Fn::GetAtt": [ "data7552DF31", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BApiId" ] } }, @@ -196,7 +196,7 @@ "Value": { "Fn::GetAtt": [ "data7552DF31", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAGraphQLUrl" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIEBB08D7BGraphQLUrl" ] } }, @@ -229,7 +229,7 @@ { "Fn::GetAtt": [ "data7552DF31", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsDeploymentCustomResource1536MiB8E4BD6ABDestinationBucketArn" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsDeploymentCustomResource1536MiB0917740FDestinationBucketArn" ] } ] @@ -249,7 +249,7 @@ "Value": { "Fn::GetAtt": [ "data7552DF31", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIDefaultApiKeyE10BC731ApiKey" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebdataamplifyDataGraphQLAPIDefaultApiKey7DAA10FCApiKey" ] } }, @@ -265,7 +265,7 @@ { "Fn::GetAtt": [ "restapistackadminapi43EA27F6", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi59ABC85BRef" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebrestapistackadminapiRestApi15E05C08Ref" ] }, ".execute-api.", @@ -280,7 +280,7 @@ { "Fn::GetAtt": [ "restapistackadminapi43EA27F6", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApiDeploymentStageprod3A54AD90Ref" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebrestapistackadminapiRestApiDeploymentStageprodB49BA490Ref" ] }, "\",\"region\":\"", @@ -291,7 +291,7 @@ { "Fn::GetAtt": [ "restapistacknutritionapi72914ECD", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApi1438AE73Ref" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebrestapistacknutritionapiRestApiEC7FBBC7Ref" ] }, ".execute-api.", @@ -306,7 +306,7 @@ { "Fn::GetAtt": [ "restapistacknutritionapi72914ECD", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiDeploymentStageprodD1246DCDRef" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebrestapistacknutritionapiRestApiDeploymentStageprod41F1D9FFRef" ] }, "\",\"region\":\"", @@ -369,7 +369,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/AmplifyBranchLinker/CustomResourceLambda/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/AmplifyBranchLinker/CustomResourceLambda/ServiceRole/Resource" } }, "AmplifyBranchLinkerCustomResourceLambdaServiceRoleDefaultPolicy86099CA1": { @@ -396,7 +396,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/AmplifyBranchLinker/CustomResourceLambda/ServiceRole/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/AmplifyBranchLinker/CustomResourceLambda/ServiceRole/DefaultPolicy/Resource" } }, "AmplifyBranchLinkerCustomResourceLambda582AC093": { @@ -406,7 +406,7 @@ "S3Bucket": { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "S3Key": "c46b855c2bbfeb6a46b246009556bfe72f2c2079543b813d7312946ee01480a0.zip" + "S3Key": "577f96ca22e59dc05e8bc39fd45b966f0ad8e25629b3b9b29d444de63fb17b12.zip" }, "Handler": "index.handler", "Role": { @@ -441,8 +441,8 @@ "AmplifyBranchLinkerCustomResourceLambdaServiceRole3DDCBC03" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/AmplifyBranchLinker/CustomResourceLambda/Resource", - "aws:asset:path": "asset.c46b855c2bbfeb6a46b246009556bfe72f2c2079543b813d7312946ee01480a0", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/AmplifyBranchLinker/CustomResourceLambda/Resource", + "aws:asset:path": "asset.577f96ca22e59dc05e8bc39fd45b966f0ad8e25629b3b9b29d444de63fb17b12", "aws:asset:is-bundled": true, "aws:asset:property": "Code" } @@ -496,7 +496,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/AmplifyBranchLinker/CustomResourceProvider/framework-onEvent/ServiceRole/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/AmplifyBranchLinker/CustomResourceProvider/framework-onEvent/ServiceRole/Resource" } }, "AmplifyBranchLinkerCustomResourceProviderframeworkonEventServiceRoleDefaultPolicy38AAE412": { @@ -551,7 +551,7 @@ ] }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/AmplifyBranchLinker/CustomResourceProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/AmplifyBranchLinker/CustomResourceProvider/framework-onEvent/ServiceRole/DefaultPolicy/Resource" } }, "AmplifyBranchLinkerCustomResourceProviderframeworkonEvent3B23F900": { @@ -563,7 +563,7 @@ }, "S3Key": "07a90cc3efdfc34da22208dcd9d211f06f5b0e01b21e778edc7c3966b1f61d57.zip" }, - "Description": "AWS CDK resource provider framework - onEvent (amplify-fitnesstracker-gen2main-branch-a09655d799/AmplifyBranchLinker/CustomResourceProvider)", + "Description": "AWS CDK resource provider framework - onEvent (amplify-fitnesstracker-gen2main-branch-400746baeb/AmplifyBranchLinker/CustomResourceProvider)", "Environment": { "Variables": { "USER_ON_EVENT_FUNCTION_ARN": { @@ -611,7 +611,7 @@ "AmplifyBranchLinkerCustomResourceProviderframeworkonEventServiceRole92A035EB" ], "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/AmplifyBranchLinker/CustomResourceProvider/framework-onEvent/Resource", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/AmplifyBranchLinker/CustomResourceProvider/framework-onEvent/Resource", "aws:asset:path": "asset.07a90cc3efdfc34da22208dcd9d211f06f5b0e01b21e778edc7c3966b1f61d57", "aws:asset:is-bundled": false, "aws:asset:property": "Code" @@ -632,7 +632,7 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/AmplifyBranchLinker/CustomResource/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/AmplifyBranchLinker/CustomResource/Default" } }, "auth179371D7": { @@ -672,7 +672,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/c98b0e8b3d82622c79869766e34c83f60f8a4afd502c4e1e8c8a7727a5ba0dd6.json" + "/cf42b4b21cde117f111d5c596f26c0d0d33834a6fcf5c3ca7ec443ab7b961ca6.json" ] ] } @@ -680,8 +680,8 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/auth.NestedStack/auth.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799auth8002D454.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth.NestedStack/auth.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbranch400746baebauthA2EE5AF1.nested.template.json", "aws:asset:property": "TemplateURL" } }, @@ -689,28 +689,28 @@ "Type": "AWS::CloudFormation::Stack", "Properties": { "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolBF05A444Ref": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthUserPoolBF05A444Ref" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthunauthenticatedUserRole444B7AFERef" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthIdentityPoolFB6D4845Ref" ] } }, @@ -748,7 +748,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/9af9fdc04980936cf2e97dd00dd4f23f7c8d09e874b4d1759996528c6b1b2ad0.json" + "/2fca8ecbae58008f1b1aded02efbc20cd87689de55be452c699f6a28a85af107.json" ] ] } @@ -756,8 +756,8 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/data.NestedStack/data.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799data7EFD86C7.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/data.NestedStack/data.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbranch400746baebdata8B7F9287.nested.template.json", "aws:asset:property": "TemplateURL" } }, @@ -765,22 +765,22 @@ "Type": "AWS::CloudFormation::Stack", "Properties": { "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Arn": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebauthadmingen2mainlambda19698385Arn" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthAdminGroupRoleC37E0196Ref": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthAdminGroupRoleC37E0196Ref" ] } }, @@ -818,7 +818,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/02247b1aa7791fcc8cd6660bc8c0d6b04aea06c33687347dbdce86e7cb25d36d.json" + "/8b7a6079311343b27ad9c9f2567281b7b85489b503537696f832d8af79a699eb.json" ] ] } @@ -826,8 +826,8 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-adminapi.NestedStack/rest-api-stack-adminapi.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapi0C1629F8.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-adminapi.NestedStack/rest-api-stack-adminapi.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbranch400746baebrestapistackadminapi4B6BAEAB.nested.template.json", "aws:asset:property": "TemplateURL" } }, @@ -835,22 +835,22 @@ "Type": "AWS::CloudFormation::Stack", "Properties": { "Parameters": { - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebdataNestedStackdataNestedStackResource2B549F52Outputsamplifyfitnesstrackergen2mainbranch400746baebdatalognutritiongen2mainlambda08A76FE8Arn": { "Fn::GetAtt": [ "data7552DF31", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebdatalognutritiongen2mainlambda08A76FE8Arn" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthauthenticatedUserRole924DCF20Ref" ] }, - "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref": { + "referencetoamplifyfitnesstrackergen2mainbranch400746baebauthNestedStackauthNestedStackResource5078865DOutputsamplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthAdminGroupRoleC37E0196Ref": { "Fn::GetAtt": [ "auth179371D7", - "Outputs.amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref" + "Outputs.amplifyfitnesstrackergen2mainbranch400746baebauthamplifyAuthAdminGroupRoleC37E0196Ref" ] } }, @@ -888,7 +888,7 @@ { "Fn::Sub": "cdk-hnb659fds-assets-${AWS::AccountId}-${AWS::Region}" }, - "/230c849ea4015778484fa403f7ff7cb83d41e7a5b4a53ea1a867dc966a2f0081.json" + "/9a84370ad847765ed4eb615e833384812e6b681a28efa0db729a14d1282b6310.json" ] ] } @@ -896,8 +896,8 @@ "UpdateReplacePolicy": "Delete", "DeletionPolicy": "Delete", "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/rest-api-stack-nutritionapi.NestedStack/rest-api-stack-nutritionapi.NestedStackResource", - "aws:asset:path": "amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapi279DE088.nested.template.json", + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/rest-api-stack-nutritionapi.NestedStack/rest-api-stack-nutritionapi.NestedStackResource", + "aws:asset:path": "amplifyfitnesstrackergen2mainbranch400746baebrestapistacknutritionapi29813263.nested.template.json", "aws:asset:property": "TemplateURL" } }, @@ -907,7 +907,7 @@ "Analytics": "v2:deflate64:H4sIAAAAAAAA/02PzWrDQAyEnyV3WU2dHHJtDD22wXkAo6yVIP/slpU2oRi/e/C6LT19I4YZNCWW+z1uN/TQwrV9McgFp7OR66G6+s9kX8mAHtpMA42XlhofWu4UPzLek3cmwYPQiFMdBl5SmacwiPtezlXNoLuGVNkU3xaA7vCYXM92JGVY63Gqrv6v9VfMM+TI2egm/gYuqYWxiawhRceKpxju0nKEKjv1j5Gf+afzrhmWCdjpy70s8fWA202nIkVM3mRkrFc+AXlCmgwZAQAA" }, "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-a09655d799/CDKMetadata/Default" + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/CDKMetadata/Default" }, "Condition": "CDKMetadataAvailable" } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.outputs.json deleted file mode 100644 index 163e9b73460..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.outputs.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyTableManagerTableManagerCustomProviderframeworkonEvent9609CD96Arn", - "OutputValue": "arn:aws:lambda:us-east-1:123456789012:function:amplify-fitnesstracker-ge-TableManagerCustomProvid-533GcbPIs8Jk" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.parameters.json deleted file mode 100644 index 2874d152002..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataAmplifyTableManagerNestedStackA-NPJK8GP5TJ4A.parameters.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId", - "ParameterValue": "uhg6hv7zmzav5doaroa4tocwv4" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.parameters.json deleted file mode 100644 index a0c53ba02c5..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataConnectionStackNestedStackConne-1Q5Y2AFMDU94J.parameters.json +++ /dev/null @@ -1,30 +0,0 @@ -[ - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref", - "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref", - "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPINONEDSEDA66472Name", - "ParameterValue": "NONE_DS" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseNestedStackExerciseNestedStackResourceC9DAC2F3Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseTableECDBC610TableArn", - "ParameterValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId", - "ParameterValue": "uhg6hv7zmzav5doaroa4tocwv4" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseNestedStackExerciseNestedStackResourceC9DAC2F3Outputsamplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseDataSourceDCCBFD77Name", - "ParameterValue": "ExerciseTable" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref", - "ParameterValue": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.outputs.json deleted file mode 100644 index bc97b58fab7..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataExerciseNestedStackExerciseNest-1FIMJDNV42OQ7.outputs.json +++ /dev/null @@ -1,22 +0,0 @@ -[ - { - "OutputKey": "GetAttExerciseTableName", - "OutputValue": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main", - "Description": "Your DynamoDB table name.", - "ExportName": "uhg6hv7zmzav5doaroa4tocwv4:GetAtt:ExerciseTable:Name" - }, - { - "OutputKey": "GetAttExerciseTableStreamArn", - "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main/stream/2026-03-22T02:14:28.559", - "Description": "Your DynamoDB table StreamArn.", - "ExportName": "uhg6hv7zmzav5doaroa4tocwv4:GetAtt:ExerciseTable:StreamArn" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseDataSourceDCCBFD77Name", - "OutputValue": "ExerciseTable" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataExerciseExerciseTableECDBC610TableArn", - "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.outputs.json deleted file mode 100644 index 806d542aba6..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a096-amplifyDataMealNestedStackMealNestedStackR-1T4FU8CXY0GK6.outputs.json +++ /dev/null @@ -1,18 +0,0 @@ -[ - { - "OutputKey": "GetAttMealTableName", - "OutputValue": "Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main", - "Description": "Your DynamoDB table name.", - "ExportName": "uhg6hv7zmzav5doaroa4tocwv4:GetAtt:MealTable:Name" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataMealMealTableFD0BC2A7TableArn", - "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main" - }, - { - "OutputKey": "GetAttMealTableStreamArn", - "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main/stream/2026-03-22T02:14:27.982", - "Description": "Your DynamoDB table StreamArn.", - "ExportName": "uhg6hv7zmzav5doaroa4tocwv4:GetAtt:MealTable:StreamArn" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.outputs.json deleted file mode 100644 index acc4660e422..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-auth179371D7-W7QZVETRVIH.outputs.json +++ /dev/null @@ -1,38 +0,0 @@ -[ - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPoolAppClientE9EEF58ARef", - "OutputValue": "dgddko7evul00or8262g7n9ub" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref", - "OutputValue": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn", - "OutputValue": "arn:aws:lambda:us-east-1:123456789012:function:admin-gen2-main" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FRef", - "OutputValue": "admin-gen2-main" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthIdentityPoolF929A427Ref", - "OutputValue": "us-east-1:ba67548f-183b-4887-96be-2b3e5c93c842" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref", - "OutputValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthunauthenticatedUserRole600599A6Ref", - "OutputValue": "amplify-fitnesstracker-ge-amplifyAuthunauthenticate-clvX5844lcZc" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthUserPool8CF7C424Ref", - "OutputValue": "us-east-1_mQEsDQ1lC" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799authfitnesstracker9ceb2e7c9ceb2e7cPreSignupgen2mainlambdaB4152CB6Ref", - "OutputValue": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-gen2-main" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.outputs.json deleted file mode 100644 index 43bc96aaa6b..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-data7552DF31-11R0N9NYGZMM.outputs.json +++ /dev/null @@ -1,26 +0,0 @@ -[ - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Ref", - "OutputValue": "lognutrition-gen2-main" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAApiId", - "OutputValue": "uhg6hv7zmzav5doaroa4tocwv4" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIDefaultApiKeyE10BC731ApiKey", - "OutputValue": "da2-mpyed5y2pvbcjl2qcbxuq2rspe" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataGraphQLAPIC1F782FAGraphQLUrl", - "OutputValue": "https://7ltandzu5zbxvcqrr24edz4hym.appsync-api.us-east-1.amazonaws.com/graphql" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn", - "OutputValue": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-gen2-main" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799dataamplifyDataAmplifyCodegenAssetsAmplifyCodegenAssetsDeploymentCustomResource1536MiB8E4BD6ABDestinationBucketArn", - "OutputValue": "arn:aws:s3:::amplify-fitnesstracker-ge-amplifydataamplifycodege-cxlnc2wmwnpq" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.outputs.json deleted file mode 100644 index 177131508c3..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.outputs.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApiDeploymentStageprod3A54AD90Ref", - "OutputValue": "prod" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799restapistackadminapiRestApi59ABC85BRef", - "OutputValue": "rr7ckdesd4" - }, - { - "OutputKey": "RestApiEndpoint0551178A", - "OutputValue": "https://rr7ckdesd4.execute-api.us-east-1.amazonaws.com/prod/" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.parameters.json deleted file mode 100644 index eacc7e7d488..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistackadminapi43EA27F6-1RS06T9AL8ZH6.parameters.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref", - "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authadmingen2mainlambdaAFBC209FArn", - "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:admin-gen2-main" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref", - "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.outputs.json deleted file mode 100644 index 28d30bc1428..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.outputs.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApiDeploymentStageprodD1246DCDRef", - "OutputValue": "prod" - }, - { - "OutputKey": "amplifyfitnesstrackergen2mainbrancha09655d799restapistacknutritionapiRestApi1438AE73Ref", - "OutputValue": "e2y3anael5" - }, - { - "OutputKey": "RestApiEndpoint0551178A", - "OutputValue": "https://e2y3anael5.execute-api.us-east-1.amazonaws.com/prod/" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.parameters.json deleted file mode 100644 index 6ad66ae9091..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-gen2main-branch-a09655d799-restapistacknutritionapi72914ECD-1738NNTUFA9K8.parameters.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthauthenticatedUserRoleDC4EF599Ref", - "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-Ko1Fb2NmvtwH" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799authNestedStackauthNestedStackResource845551EDOutputsamplifyfitnesstrackergen2mainbrancha09655d799authamplifyAuthAdminGroupRole06BE9A34Ref", - "ParameterValue": "amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-RZHpxrEYkgrR" - }, - { - "ParameterKey": "referencetoamplifyfitnesstrackergen2mainbrancha09655d799dataNestedStackdataNestedStackResourceB2B84E5EOutputsamplifyfitnesstrackergen2mainbrancha09655d799datalognutritiongen2mainlambda739A6536Arn", - "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-gen2-main" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.outputs.json deleted file mode 100644 index 134e76829d9..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.outputs.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - { - "OutputKey": "GraphQLAPIIdOutput", - "OutputValue": "4ebr7lx7bbhnpeo5dbtcvdajdm", - "Description": "Your GraphQL API ID.", - "ExportName": "amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ:GraphQLApiId" - }, - { - "OutputKey": "GraphQLAPIEndpointOutput", - "OutputValue": "https://3oyjlwrrofhp7jlc37qna22jva.appsync-api.us-east-1.amazonaws.com/graphql", - "Description": "Your GraphQL API endpoint.", - "ExportName": "amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ:GraphQLApiEndpoint" - }, - { - "OutputKey": "GraphQLAPIKeyOutput", - "OutputValue": "da2-2kuyxda27ncmpool2a2bjanloy", - "Description": "Your GraphQL API ID.", - "ExportName": "amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ:GraphQLApiKey" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.description.txt deleted file mode 100644 index be81ecbcfe2..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.description.txt +++ /dev/null @@ -1 +0,0 @@ -Amplify Cognito Stack for AWS Amplify CLI \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.template.json deleted file mode 100644 index 79def9e5efb..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.template.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "Description": "Amplify Cognito Stack for AWS Amplify CLI", - "AWSTemplateFormatVersion": "2010-09-09", - "Parameters": { - "env": { - "Type": "String" - }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { - "Type": "String", - "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" - }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { - "Type": "String", - "Default": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" - }, - "identityPoolName": { - "Type": "String" - }, - "allowUnauthenticatedIdentities": { - "Type": "String" - }, - "resourceNameTruncated": { - "Type": "String" - }, - "userPoolName": { - "Type": "String" - }, - "autoVerifiedAttributes": { - "Type": "CommaDelimitedList" - }, - "mfaConfiguration": { - "Type": "String" - }, - "mfaTypes": { - "Type": "CommaDelimitedList" - }, - "smsAuthenticationMessage": { - "Type": "String" - }, - "smsVerificationMessage": { - "Type": "String" - }, - "emailVerificationSubject": { - "Type": "String" - }, - "emailVerificationMessage": { - "Type": "String" - }, - "defaultPasswordPolicy": { - "Type": "String" - }, - "passwordPolicyMinLength": { - "Type": "String" - }, - "passwordPolicyCharacters": { - "Type": "CommaDelimitedList" - }, - "requiredAttributes": { - "Type": "CommaDelimitedList" - }, - "aliasAttributes": { - "Type": "CommaDelimitedList" - }, - "userpoolClientGenerateSecret": { - "Type": "String" - }, - "userpoolClientRefreshTokenValidity": { - "Type": "String" - }, - "userpoolClientWriteAttributes": { - "Type": "CommaDelimitedList" - }, - "userpoolClientReadAttributes": { - "Type": "CommaDelimitedList" - }, - "userpoolClientLambdaRole": { - "Type": "String" - }, - "userpoolClientSetAttributes": { - "Type": "String" - }, - "sharedId": { - "Type": "String" - }, - "resourceName": { - "Type": "String" - }, - "authSelections": { - "Type": "String" - }, - "useDefault": { - "Type": "String" - }, - "thirdPartyAuth": { - "Type": "String" - }, - "userPoolGroups": { - "Type": "String" - }, - "adminQueries": { - "Type": "String" - }, - "triggers": { - "Type": "String" - }, - "hostedUI": { - "Type": "String" - }, - "userPoolGroupList": { - "Type": "CommaDelimitedList" - }, - "serviceName": { - "Type": "String" - }, - "usernameCaseSensitive": { - "Type": "String" - }, - "useEnabledMfas": { - "Type": "String" - }, - "authRoleArn": { - "Type": "String" - }, - "unauthRoleArn": { - "Type": "String" - }, - "breakCircularDependency": { - "Type": "String" - }, - "dependsOn": { - "Type": "CommaDelimitedList" - }, - "permissions": { - "Type": "CommaDelimitedList" - }, - "authTriggerConnections": { - "Type": "CommaDelimitedList" - } - }, - "Conditions": { - "ShouldNotCreateEnvResources": { - "Fn::Equals": [ - { - "Ref": "env" - }, - "NONE" - ] - } - }, - "Resources": { - "UserPool": { - "Type": "AWS::Cognito::UserPool", - "Properties": { - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": { - "Ref": "emailVerificationMessage" - }, - "EmailVerificationSubject": { - "Ref": "emailVerificationSubject" - }, - "MfaConfiguration": { - "Ref": "mfaConfiguration" - }, - "Policies": { - "PasswordPolicy": { - "MinimumLength": { - "Ref": "passwordPolicyMinLength" - }, - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false - } - }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true - } - ], - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "userPoolName" - }, - { - "Fn::Join": [ - "", - [ - { - "Ref": "userPoolName" - }, - "-", - { - "Ref": "env" - } - ] - ] - } - ] - }, - "UsernameConfiguration": { - "CaseSensitive": false - } - } - }, - "UserPoolClientWeb": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "fitnes9ceb2e7c_app_clientWeb", - "RefreshTokenValidity": { - "Ref": "userpoolClientRefreshTokenValidity" - }, - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": { - "Ref": "UserPool" - } - }, - "DependsOn": [ - "UserPool" - ] - }, - "UserPoolClient": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "fitnes9ceb2e7c_app_client", - "GenerateSecret": { - "Ref": "userpoolClientGenerateSecret" - }, - "RefreshTokenValidity": { - "Ref": "userpoolClientRefreshTokenValidity" - }, - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": { - "Ref": "UserPool" - } - }, - "DependsOn": [ - "UserPool" - ] - }, - "UserPoolClientRole": { - "Type": "AWS::IAM::Role", - "Properties": { - "AssumeRolePolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "Service": "lambda.amazonaws.com" - }, - "Action": "sts:AssumeRole" - } - ] - }, - "RoleName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - { - "Ref": "userpoolClientLambdaRole" - }, - { - "Fn::Join": [ - "", - [ - "upClientLambdaRole9ceb2e7c", - { - "Fn::Select": [ - 3, - { - "Fn::Split": [ - "-", - { - "Ref": "AWS::StackName" - } - ] - } - ] - }, - "-", - { - "Ref": "env" - } - ] - ] - } - ] - } - } - }, - "IdentityPool": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": { - "Ref": "allowUnauthenticatedIdentities" - }, - "CognitoIdentityProviders": [ - { - "ClientId": { - "Ref": "UserPoolClient" - }, - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": { - "Ref": "UserPool" - } - } - ] - } - }, - { - "ClientId": { - "Ref": "UserPoolClientWeb" - }, - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": { - "Ref": "UserPool" - } - } - ] - } - } - ], - "IdentityPoolName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", - { - "Fn::Join": [ - "", - [ - "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__", - { - "Ref": "env" - } - ] - ] - } - ] - } - } - }, - "IdentityPoolRoleMap": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": { - "Ref": "IdentityPool" - }, - "RoleMappings": { - "UserPoolClientRoleMapping": { - "AmbiguousRoleResolution": "AuthenticatedRole", - "IdentityProvider": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${userPool}:${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "userPool": { - "Ref": "UserPool" - }, - "client": { - "Ref": "UserPoolClient" - } - } - ] - }, - "Type": "Token" - }, - "UserPoolWebClientRoleMapping": { - "AmbiguousRoleResolution": "AuthenticatedRole", - "IdentityProvider": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${userPool}:${webClient}", - { - "region": { - "Ref": "AWS::Region" - }, - "userPool": { - "Ref": "UserPool" - }, - "webClient": { - "Ref": "UserPoolClientWeb" - } - } - ] - }, - "Type": "Token" - } - }, - "Roles": { - "unauthenticated": { - "Ref": "unauthRoleArn" - }, - "authenticated": { - "Ref": "authRoleArn" - } - } - }, - "DependsOn": [ - "IdentityPool", - "UserPoolClient", - "UserPoolClientWeb" - ] - } - }, - "Outputs": { - "IdentityPoolId": { - "Description": "Id for the identity pool", - "Value": { - "Ref": "IdentityPool" - } - }, - "IdentityPoolName": { - "Value": { - "Fn::GetAtt": [ - "IdentityPool", - "Name" - ] - } - }, - "UserPoolId": { - "Description": "Id for the user pool", - "Value": { - "Ref": "UserPool" - } - }, - "UserPoolArn": { - "Description": "Arn for the user pool", - "Value": { - "Fn::GetAtt": [ - "UserPool", - "Arn" - ] - } - }, - "UserPoolName": { - "Value": { - "Ref": "userPoolName" - } - }, - "AppClientIDWeb": { - "Description": "The user pool app client id for web", - "Value": { - "Ref": "UserPoolClientWeb" - } - }, - "AppClientID": { - "Description": "The user pool app client id", - "Value": { - "Ref": "UserPoolClient" - } - } - } -} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.outputs.json deleted file mode 100644 index 33ee4fb9a64..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.outputs.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - { - "OutputKey": "AdminGroupRole", - "OutputValue": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.parameters.json deleted file mode 100644 index 3a84ecd1058..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.parameters.json +++ /dev/null @@ -1,30 +0,0 @@ -[ - { - "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb", - "ParameterValue": "4bk8odk8blrf65ptk2dffug25k" - }, - { - "ParameterKey": "UnauthRoleArn", - "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole" - }, - { - "ParameterKey": "AuthRoleArn", - "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" - }, - { - "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId", - "ParameterValue": "us-east-1_LAwe5ZJrw" - }, - { - "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId", - "ParameterValue": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d" - }, - { - "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID", - "ParameterValue": "12hkvqjabpisei771tiefdhs76" - }, - { - "ParameterKey": "env", - "ParameterValue": "main" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.template.json deleted file mode 100644 index 04a3c261a89..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.template.json +++ /dev/null @@ -1,242 +0,0 @@ -{ - "AWSTemplateFormatVersion": "2010-09-09", - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", - "Parameters": { - "DOMAINBLACKLIST": { - "Type": "String", - "Default": "" - }, - "DOMAINALLOWLIST": { - "Type": "String", - "Default": "" - }, - "modules": { - "Type": "String", - "Default": "", - "Description": "Comma-delimited list of modules to be executed by a lambda trigger. Sent to resource as an env variable." - }, - "resourceName": { - "Type": "String", - "Default": "" - }, - "trigger": { - "Type": "String", - "Default": "true" - }, - "functionName": { - "Type": "String", - "Default": "" - }, - "roleName": { - "Type": "String", - "Default": "" - }, - "parentResource": { - "Type": "String", - "Default": "" - }, - "parentStack": { - "Type": "String", - "Default": "" - }, - "env": { - "Type": "String" - }, - "deploymentBucketName": { - "Type": "String" - }, - "s3Key": { - "Type": "String" - } - }, - "Conditions": { - "ShouldNotCreateEnvResources": { - "Fn::Equals": [ - { - "Ref": "env" - }, - "NONE" - ] - } - }, - "Resources": { - "LambdaFunction": { - "Type": "AWS::Lambda::Function", - "Metadata": { - "aws:asset:path": "./src", - "aws:asset:property": "Code" - }, - "Properties": { - "Handler": "index.handler", - "FunctionName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", - { - "Fn::Join": [ - "", - [ - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", - "-", - { - "Ref": "env" - } - ] - ] - } - ] - }, - "Environment": { - "Variables": { - "ENV": { - "Ref": "env" - }, - "MODULES": { - "Ref": "modules" - }, - "REGION": { - "Ref": "AWS::Region" - }, - "DOMAINALLOWLIST": { - "Ref": "DOMAINALLOWLIST" - }, - "DOMAINBLACKLIST": { - "Ref": "DOMAINBLACKLIST" - } - } - }, - "Role": { - "Fn::GetAtt": [ - "LambdaExecutionRole", - "Arn" - ] - }, - "Runtime": "nodejs22.x", - "Timeout": 25, - "Code": { - "S3Bucket": { - "Ref": "deploymentBucketName" - }, - "S3Key": { - "Ref": "s3Key" - } - } - } - }, - "LambdaExecutionRole": { - "Type": "AWS::IAM::Role", - "Properties": { - "RoleName": { - "Fn::If": [ - "ShouldNotCreateEnvResources", - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", - { - "Fn::Join": [ - "", - [ - "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", - "-", - { - "Ref": "env" - } - ] - ] - } - ] - }, - "AssumeRolePolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "Service": [ - "lambda.amazonaws.com" - ] - }, - "Action": [ - "sts:AssumeRole" - ] - } - ] - } - } - }, - "lambdaexecutionpolicy": { - "DependsOn": [ - "LambdaExecutionRole" - ], - "Type": "AWS::IAM::Policy", - "Properties": { - "PolicyName": "lambda-execution-policy", - "Roles": [ - { - "Ref": "LambdaExecutionRole" - } - ], - "PolicyDocument": { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": [ - "logs:CreateLogGroup", - "logs:CreateLogStream", - "logs:PutLogEvents" - ], - "Resource": { - "Fn::Sub": [ - "arn:aws:logs:${region}:${account}:log-group:/aws/lambda/${lambda}:log-stream:*", - { - "region": { - "Ref": "AWS::Region" - }, - "account": { - "Ref": "AWS::AccountId" - }, - "lambda": { - "Ref": "LambdaFunction" - } - } - ] - } - } - ] - } - } - } - }, - "Outputs": { - "Name": { - "Value": { - "Ref": "LambdaFunction" - } - }, - "Arn": { - "Value": { - "Fn::GetAtt": [ - "LambdaFunction", - "Arn" - ] - } - }, - "LambdaExecutionRole": { - "Value": { - "Ref": "LambdaExecutionRole" - } - }, - "LambdaExecutionRoleArn": { - "Value": { - "Fn::GetAtt": [ - "LambdaExecutionRole", - "Arn" - ] - } - }, - "Region": { - "Value": { - "Ref": "AWS::Region" - } - } - } -} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.description.txt deleted file mode 100644 index daf66c0bc85..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.description.txt +++ /dev/null @@ -1 +0,0 @@ -Root Stack for AWS Amplify CLI \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.parameters.json deleted file mode 100644 index e4f0b36fccf..00000000000 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.parameters.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "ParameterKey": "AuthRoleName", - "ParameterValue": "amplify-fitnesstracker-main-6fc9a-authRole" - }, - { - "ParameterKey": "DeploymentBucketName", - "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" - }, - { - "ParameterKey": "UnauthRoleName", - "ParameterValue": "amplify-fitnesstracker-main-6fc9a-unauthRole" - } -] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-APIGatewayAuthStack-1PX292PE83STS.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-APIGatewayAuthStack-1PX292PE83STS.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-APIGatewayAuthStack-1PX292PE83STS.outputs.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-APIGatewayAuthStack-1PX292PE83STS.outputs.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-APIGatewayAuthStack-1PX292PE83STS.parameters.json similarity index 56% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-APIGatewayAuthStack-1PX292PE83STS.parameters.json index 1e1034aadbb..f12a02b2c3a 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-APIGatewayAuthStack-1PX292PE83STS.parameters.json @@ -1,19 +1,19 @@ [ { "ParameterKey": "authRoleName", - "ParameterValue": "amplify-fitnesstracker-main-6fc9a-authRole" + "ParameterValue": "amplify-fitnesstracker-main-a0537-authRole" }, { "ParameterKey": "nutritionapi", - "ParameterValue": "ekto8iln0h" + "ParameterValue": "hmydcaubcb" }, { "ParameterKey": "unauthRoleName", - "ParameterValue": "amplify-fitnesstracker-main-6fc9a-unauthRole" + "ParameterValue": "amplify-fitnesstracker-main-a0537-unauthRole" }, { "ParameterKey": "adminapi", - "ParameterValue": "bbk7dedp01" + "ParameterValue": "oxq86r59h6" }, { "ParameterKey": "env", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-APIGatewayAuthStack-1PX292PE83STS.template.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-APIGatewayAuthStack-1WV7E8TEEBZCC.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-APIGatewayAuthStack-1PX292PE83STS.template.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-AuthTriggerCustomLambdaStack-TT7MSI2O15CI.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-AuthTriggerCustomLambdaStack-TT7MSI2O15CI.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-AuthTriggerCustomLambdaStack-TT7MSI2O15CI.outputs.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-AuthTriggerCustomLambdaStack-TT7MSI2O15CI.outputs.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-AuthTriggerCustomLambdaStack-TT7MSI2O15CI.parameters.json similarity index 50% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-AuthTriggerCustomLambdaStack-TT7MSI2O15CI.parameters.json index 25d39b2699c..6ed9f4a0eae 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-AuthTriggerCustomLambdaStack-TT7MSI2O15CI.parameters.json @@ -1,15 +1,19 @@ [ { - "ParameterKey": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName", - "ParameterValue": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" + "ParameterKey": "functionfitnesstracker33f5545533f55455PreSignupLambdaExecutionRole", + "ParameterValue": "arn:aws:iam::123456789012:role/fitnesstracker33f5545533f55455PreSignup-main" }, { - "ParameterKey": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole", - "ParameterValue": "arn:aws:iam::123456789012:role/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" + "ParameterKey": "functionfitnesstracker33f5545533f55455PreSignupName", + "ParameterValue": "fitnesstracker33f5545533f55455PreSignup-main" + }, + { + "ParameterKey": "functionfitnesstracker33f5545533f55455PreSignupArn", + "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker33f5545533f55455PreSignup-main" }, { "ParameterKey": "userpoolId", - "ParameterValue": "us-east-1_LAwe5ZJrw" + "ParameterValue": "us-east-1_iguxCIcMS" }, { "ParameterKey": "env", @@ -17,10 +21,6 @@ }, { "ParameterKey": "userpoolArn", - "ParameterValue": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_LAwe5ZJrw" - }, - { - "ParameterKey": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn", - "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" + "ParameterValue": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_iguxCIcMS" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-AuthTriggerCustomLambdaStack-TT7MSI2O15CI.template.json similarity index 94% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-AuthTriggerCustomLambdaStack-TT7MSI2O15CI.template.json index 6e288286c2b..fd44b22e128 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-AuthTriggerCustomLambdaStack-I19H7X9HZF2Z.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-AuthTriggerCustomLambdaStack-TT7MSI2O15CI.template.json @@ -11,13 +11,13 @@ "userpoolArn": { "Type": "String" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { + "functionfitnesstracker33f5545533f55455PreSignupName": { "Type": "String" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { + "functionfitnesstracker33f5545533f55455PreSignupArn": { "Type": "String" }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole": { + "functionfitnesstracker33f5545533f55455PreSignupLambdaExecutionRole": { "Type": "String" } }, @@ -37,7 +37,7 @@ "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { - "Ref": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" + "Ref": "functionfitnesstracker33f5545533f55455PreSignupName" }, "Principal": "cognito-idp.amazonaws.com", "SourceArn": { @@ -137,13 +137,13 @@ "lambdaConfig": [ { "triggerType": "PreSignUp", - "lambdaFunctionName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "lambdaFunctionName": "fitnesstracker33f5545533f55455PreSignup", "lambdaFunctionArn": { - "Ref": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" + "Ref": "functionfitnesstracker33f5545533f55455PreSignupArn" } } ], - "nonce": "81488207-64cc-4968-a2ba-e30eebc5a128" + "nonce": "bb94c712-a1c6-4c6a-82b8-4cb8c57b4acc" }, "DependsOn": [ "authTriggerFn7FCFA449", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apiadminapi-NIM0OPDFSKJR.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apiadminapi-NIM0OPDFSKJR.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apiadminapi-NIM0OPDFSKJR.outputs.json similarity index 75% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apiadminapi-NIM0OPDFSKJR.outputs.json index 5bf3ae2705a..124a527f440 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apiadminapi-NIM0OPDFSKJR.outputs.json @@ -6,12 +6,12 @@ }, { "OutputKey": "RootUrl", - "OutputValue": "https://bbk7dedp01.execute-api.us-east-1.amazonaws.com/main", + "OutputValue": "https://oxq86r59h6.execute-api.us-east-1.amazonaws.com/main", "Description": "Root URL of the API gateway" }, { "OutputKey": "ApiId", - "OutputValue": "bbk7dedp01", + "OutputValue": "oxq86r59h6", "Description": "API ID (prefix of API URL)" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apiadminapi-NIM0OPDFSKJR.parameters.json similarity index 76% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apiadminapi-NIM0OPDFSKJR.parameters.json index bdd4c3def03..b06a743d6c9 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apiadminapi-NIM0OPDFSKJR.parameters.json @@ -8,8 +8,8 @@ "ParameterValue": "admin-main" }, { - "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId", - "ParameterValue": "us-east-1_LAwe5ZJrw" + "ParameterKey": "authfitnesstracker33f5545533f55455UserPoolId", + "ParameterValue": "us-east-1_iguxCIcMS" }, { "ParameterKey": "env", @@ -17,6 +17,6 @@ }, { "ParameterKey": "authuserPoolGroupsAdminGroupRole", - "ParameterValue": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole" + "ParameterValue": "arn:aws:iam::123456789012:role/us-east-1_iguxCIcMS-AdminGroupRole" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apiadminapi-NIM0OPDFSKJR.template.json similarity index 97% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apiadminapi-NIM0OPDFSKJR.template.json index fe0413d381e..0eb23e1dfa6 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apiadminapi-PR5X22IZPJYP.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apiadminapi-NIM0OPDFSKJR.template.json @@ -2,9 +2,9 @@ "Description": "API Gateway Resource for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -104,7 +104,7 @@ "-", [ { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" }, "AdminGroupRole" ] @@ -426,7 +426,7 @@ "Name": "adminapi" } }, - "adminapiDefault4XXResponsec0c67e32": { + "adminapiDefault4XXResponse1cf3cfdc": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -441,7 +441,7 @@ } } }, - "adminapiDefault5XXResponsec0c67e32": { + "adminapiDefault5XXResponse1cf3cfdc": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -456,7 +456,7 @@ } } }, - "DeploymentAPIGWadminapia8449e95": { + "DeploymentAPIGWadminapi1af07a4b": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -474,8 +474,8 @@ } }, "DependsOn": [ - "adminapiDefault4XXResponsec0c67e32", - "adminapiDefault5XXResponsec0c67e32" + "adminapiDefault4XXResponse1cf3cfdc", + "adminapiDefault5XXResponse1cf3cfdc" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-ConnectionStack-96IMUMC3YX9X.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-ConnectionStack-96IMUMC3YX9X.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-ConnectionStack-96IMUMC3YX9X.outputs.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-ConnectionStack-96IMUMC3YX9X.outputs.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-ConnectionStack-96IMUMC3YX9X.parameters.json similarity index 75% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-ConnectionStack-96IMUMC3YX9X.parameters.json index f9efb116ff2..6b366cbc8e7 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-ConnectionStack-96IMUMC3YX9X.parameters.json @@ -1,7 +1,7 @@ [ { "ParameterKey": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref", - "ParameterValue": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa" + "ParameterValue": "amplify-appsync-files/67310f5f0a68cc163f9cc58da56e1409a2c21b1d" }, { "ParameterKey": "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name", @@ -9,15 +9,15 @@ }, { "ParameterKey": "referencetotransformerrootstackGraphQLAPI20497F53ApiId", - "ParameterValue": "4ebr7lx7bbhnpeo5dbtcvdajdm" + "ParameterValue": "jzwb5p2vcbd2ldlnlxokgjcjby" }, { "ParameterKey": "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseTable2F3E478ERef", - "ParameterValue": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main" + "ParameterValue": "Exercise-jzwb5p2vcbd2ldlnlxokgjcjby-main" }, { "ParameterKey": "referencetotransformerrootstackS3DeploymentBucket7592718ARef", - "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" + "ParameterValue": "amplify-fitnesstracker-main-a0537-deployment" }, { "ParameterKey": "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseDataSourceE8B787D0Name", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-ConnectionStack-96IMUMC3YX9X.template.json similarity index 98% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-ConnectionStack-96IMUMC3YX9X.template.json index a407b2cb80e..c6490dbf938 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-ConnectionStack-1V56DVJ0AK6M2.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-ConnectionStack-96IMUMC3YX9X.template.json @@ -111,7 +111,7 @@ { "Ref": "referencetotransformerrootstackExerciseNestedStackExerciseNestedStackResourceA190CF68OutputstransformerrootstackExerciseExerciseTable2F3E478ERef" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-CustomResourcesjson-1FVS02E9NW5PX.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-CustomResourcesjson-1FVS02E9NW5PX.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-CustomResourcesjson-1FVS02E9NW5PX.outputs.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-CustomResourcesjson-1FVS02E9NW5PX.outputs.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-CustomResourcesjson-1FVS02E9NW5PX.parameters.json similarity index 60% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-CustomResourcesjson-1FVS02E9NW5PX.parameters.json index 3392dad0b9a..4097d78d936 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-CustomResourcesjson-1FVS02E9NW5PX.parameters.json @@ -1,11 +1,11 @@ [ { "ParameterKey": "S3DeploymentBucket", - "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" + "ParameterValue": "amplify-fitnesstracker-main-a0537-deployment" }, { "ParameterKey": "AppSyncApiId", - "ParameterValue": "4ebr7lx7bbhnpeo5dbtcvdajdm" + "ParameterValue": "jzwb5p2vcbd2ldlnlxokgjcjby" }, { "ParameterKey": "env", @@ -13,7 +13,7 @@ }, { "ParameterKey": "S3DeploymentRootKey", - "ParameterValue": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa" + "ParameterValue": "amplify-appsync-files/67310f5f0a68cc163f9cc58da56e1409a2c21b1d" }, { "ParameterKey": "AppSyncApiName", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-CustomResourcesjson-1FVS02E9NW5PX.template.json similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-CustomResourcesjson-NRPIHV30QY0G.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-CustomResourcesjson-1FVS02E9NW5PX.template.json diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Exercise-FLH6MX715G6M.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Exercise-FLH6MX715G6M.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Exercise-FLH6MX715G6M.outputs.json similarity index 62% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Exercise-FLH6MX715G6M.outputs.json index 605d333444d..f1efdb2a150 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Exercise-FLH6MX715G6M.outputs.json @@ -5,24 +5,24 @@ }, { "OutputKey": "GetAttExerciseTableName", - "OutputValue": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main", + "OutputValue": "Exercise-jzwb5p2vcbd2ldlnlxokgjcjby-main", "Description": "Your DynamoDB table name.", - "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:ExerciseTable:Name" + "ExportName": "jzwb5p2vcbd2ldlnlxokgjcjby:GetAtt:ExerciseTable:Name" }, { "OutputKey": "GetAttExerciseDataSourceName", "OutputValue": "ExerciseTable", "Description": "Your model DataSource name.", - "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:ExerciseDataSource:Name" + "ExportName": "jzwb5p2vcbd2ldlnlxokgjcjby:GetAtt:ExerciseDataSource:Name" }, { "OutputKey": "transformerrootstackExerciseExerciseTable2F3E478ERef", - "OutputValue": "Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main" + "OutputValue": "Exercise-jzwb5p2vcbd2ldlnlxokgjcjby-main" }, { "OutputKey": "GetAttExerciseTableStreamArn", - "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Exercise-4ebr7lx7bbhnpeo5dbtcvdajdm-main/stream/2026-03-22T02:14:28.559", + "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Exercise-jzwb5p2vcbd2ldlnlxokgjcjby-main/stream/2026-03-24T03:05:11.212", "Description": "Your DynamoDB table StreamArn.", - "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:ExerciseTable:StreamArn" + "ExportName": "jzwb5p2vcbd2ldlnlxokgjcjby:GetAtt:ExerciseTable:StreamArn" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Exercise-FLH6MX715G6M.parameters.json similarity index 83% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Exercise-FLH6MX715G6M.parameters.json index 3cb59b48c2a..020d0d0614b 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Exercise-FLH6MX715G6M.parameters.json @@ -5,7 +5,7 @@ }, { "ParameterKey": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref", - "ParameterValue": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa" + "ParameterValue": "amplify-appsync-files/67310f5f0a68cc163f9cc58da56e1409a2c21b1d" }, { "ParameterKey": "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name", @@ -17,27 +17,27 @@ }, { "ParameterKey": "referencetotransformerrootstackGraphQLAPI20497F53ApiId", - "ParameterValue": "4ebr7lx7bbhnpeo5dbtcvdajdm" + "ParameterValue": "jzwb5p2vcbd2ldlnlxokgjcjby" }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId", - "ParameterValue": "hljr36qmybdc5hsavbkunnih3q" + "ParameterValue": "azpojmlshjb33hbzmjtsne6eke" }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncF52D36F4F", - "ParameterValue": "xzf3ab4birf23mtipkhxkd73wm" + "ParameterValue": "p4zgtsdhtfd5plnqeuyw434jry" }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId", - "ParameterValue": "mj463mjvznbcle6nf32tzkleca" + "ParameterValue": "7rhd6ral6railaajcfswqeadf4" }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId", - "ParameterValue": "tja5qhhl2faydie7dowyhihm3e" + "ParameterValue": "fws4doskqbag7dbslx7eygyckq" }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId", - "ParameterValue": "ryadbffrprh35offyqpul6fxjy" + "ParameterValue": "cdecyw7rljhx7kqioiulvfozuq" }, { "ParameterKey": "DynamoDBEnableServerSideEncryption", @@ -49,7 +49,7 @@ }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId", - "ParameterValue": "n6yiskbqkvgwbma5c5wt7tluga" + "ParameterValue": "c3jrt4vcd5cfbirsv2pukwfqt4" }, { "ParameterKey": "DynamoDBModelTableWriteIOPS", @@ -57,7 +57,7 @@ }, { "ParameterKey": "referencetotransformerrootstackS3DeploymentBucket7592718ARef", - "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" + "ParameterValue": "amplify-fitnesstracker-main-a0537-deployment" }, { "ParameterKey": "referencetotransformerrootstackenv10C5A902Ref", @@ -65,6 +65,6 @@ }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C", - "ParameterValue": "25aslddh5rearbzsmjsddncqae" + "ParameterValue": "bsbxi7b5m5hnjh55tvtvnd55tq" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Exercise-FLH6MX715G6M.template.json similarity index 98% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Exercise-FLH6MX715G6M.template.json index a9eeaa78710..dfd88a7f935 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Exercise-1BEMQSWOJN9LA.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Exercise-FLH6MX715G6M.template.json @@ -503,7 +503,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -598,7 +598,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -729,7 +729,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -881,7 +881,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1030,7 +1030,7 @@ { "Ref": "ExerciseTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1067,7 +1067,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1104,7 +1104,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1141,7 +1141,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1172,7 +1172,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Meal-PHGUK3IXO0QL.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Meal-PHGUK3IXO0QL.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Meal-PHGUK3IXO0QL.outputs.json similarity index 57% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Meal-PHGUK3IXO0QL.outputs.json index 370e3c11bea..c2ec65f8932 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Meal-PHGUK3IXO0QL.outputs.json @@ -1,20 +1,20 @@ [ { "OutputKey": "GetAttMealTableName", - "OutputValue": "Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main", + "OutputValue": "Meal-jzwb5p2vcbd2ldlnlxokgjcjby-main", "Description": "Your DynamoDB table name.", - "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:MealTable:Name" + "ExportName": "jzwb5p2vcbd2ldlnlxokgjcjby:GetAtt:MealTable:Name" }, { "OutputKey": "GetAttMealDataSourceName", "OutputValue": "MealTable", "Description": "Your model DataSource name.", - "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:MealDataSource:Name" + "ExportName": "jzwb5p2vcbd2ldlnlxokgjcjby:GetAtt:MealDataSource:Name" }, { "OutputKey": "GetAttMealTableStreamArn", - "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Meal-4ebr7lx7bbhnpeo5dbtcvdajdm-main/stream/2026-03-22T02:14:27.982", + "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/Meal-jzwb5p2vcbd2ldlnlxokgjcjby-main/stream/2026-03-24T03:05:11.935", "Description": "Your DynamoDB table StreamArn.", - "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:MealTable:StreamArn" + "ExportName": "jzwb5p2vcbd2ldlnlxokgjcjby:GetAtt:MealTable:StreamArn" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Meal-PHGUK3IXO0QL.parameters.json similarity index 83% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Meal-PHGUK3IXO0QL.parameters.json index 5a5e6a8d5b9..fb60a11041e 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Meal-PHGUK3IXO0QL.parameters.json @@ -5,7 +5,7 @@ }, { "ParameterKey": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref", - "ParameterValue": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa" + "ParameterValue": "amplify-appsync-files/67310f5f0a68cc163f9cc58da56e1409a2c21b1d" }, { "ParameterKey": "referencetotransformerrootstackGraphQLAPINONEDS2BA9D1C8Name", @@ -17,19 +17,19 @@ }, { "ParameterKey": "referencetotransformerrootstackGraphQLAPI20497F53ApiId", - "ParameterValue": "4ebr7lx7bbhnpeo5dbtcvdajdm" + "ParameterValue": "jzwb5p2vcbd2ldlnlxokgjcjby" }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId", - "ParameterValue": "hljr36qmybdc5hsavbkunnih3q" + "ParameterValue": "azpojmlshjb33hbzmjtsne6eke" }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId", - "ParameterValue": "tja5qhhl2faydie7dowyhihm3e" + "ParameterValue": "fws4doskqbag7dbslx7eygyckq" }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId", - "ParameterValue": "ryadbffrprh35offyqpul6fxjy" + "ParameterValue": "cdecyw7rljhx7kqioiulvfozuq" }, { "ParameterKey": "DynamoDBEnableServerSideEncryption", @@ -45,7 +45,7 @@ }, { "ParameterKey": "referencetotransformerrootstackS3DeploymentBucket7592718ARef", - "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" + "ParameterValue": "amplify-fitnesstracker-main-a0537-deployment" }, { "ParameterKey": "referencetotransformerrootstackenv10C5A902Ref", @@ -53,6 +53,6 @@ }, { "ParameterKey": "referencetotransformerrootstackWorkoutProgramNestedStackWorkoutProgramNestedStackResource515A29CDOutputstransformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyn4D846E8C", - "ParameterValue": "25aslddh5rearbzsmjsddncqae" + "ParameterValue": "bsbxi7b5m5hnjh55tvtvnd55tq" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Meal-PHGUK3IXO0QL.template.json similarity index 98% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Meal-PHGUK3IXO0QL.template.json index 1f6a60f3fb6..0ab887347e8 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-Meal-1M9W7UKSTT0UZ.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-Meal-PHGUK3IXO0QL.template.json @@ -482,7 +482,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -580,7 +580,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -711,7 +711,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -863,7 +863,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1012,7 +1012,7 @@ { "Ref": "MealTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1082,7 +1082,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1122,7 +1122,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1162,7 +1162,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-WorkoutProgram-DSQSG720758E.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-WorkoutProgram-DSQSG720758E.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-WorkoutProgram-DSQSG720758E.outputs.json similarity index 72% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-WorkoutProgram-DSQSG720758E.outputs.json index a9d00f3d146..9f9b1cb8cc5 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-WorkoutProgram-DSQSG720758E.outputs.json @@ -1,48 +1,48 @@ [ { "OutputKey": "transformerrootstackWorkoutProgramQuerygetWorkoutProgramauth0FunctionQuerygetWorkoutProgramauth0FunctionAppSyncFunction8D95BFD8FunctionId", - "OutputValue": "mj463mjvznbcle6nf32tzkleca" + "OutputValue": "7rhd6ral6railaajcfswqeadf4" }, { "OutputKey": "transformerrootstackWorkoutProgramSubscriptiononCreateWorkoutProgramauth0FunctionSubscriptiononCreateWorkoutProgramauth0FunctionAppSyncFunction55BF88AFFunctionId", - "OutputValue": "xzf3ab4birf23mtipkhxkd73wm" + "OutputValue": "p4zgtsdhtfd5plnqeuyw434jry" }, { "OutputKey": "GetAttWorkoutProgramTableStreamArn", - "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main/stream/2026-03-22T02:13:40.073", + "OutputValue": "arn:aws:dynamodb:us-east-1:123456789012:table/WorkoutProgram-jzwb5p2vcbd2ldlnlxokgjcjby-main/stream/2026-03-24T03:04:23.623", "Description": "Your DynamoDB table StreamArn.", - "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:WorkoutProgramTable:StreamArn" + "ExportName": "jzwb5p2vcbd2ldlnlxokgjcjby:GetAtt:WorkoutProgramTable:StreamArn" }, { "OutputKey": "transformerrootstackWorkoutProgramMutationupdateWorkoutPrograminit0FunctionMutationupdateWorkoutPrograminit0FunctionAppSyncFunctionB2E2FC20FunctionId", - "OutputValue": "tja5qhhl2faydie7dowyhihm3e" + "OutputValue": "fws4doskqbag7dbslx7eygyckq" }, { "OutputKey": "GetAttWorkoutProgramTableName", - "OutputValue": "WorkoutProgram-4ebr7lx7bbhnpeo5dbtcvdajdm-main", + "OutputValue": "WorkoutProgram-jzwb5p2vcbd2ldlnlxokgjcjby-main", "Description": "Your DynamoDB table name.", - "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:WorkoutProgramTable:Name" + "ExportName": "jzwb5p2vcbd2ldlnlxokgjcjby:GetAtt:WorkoutProgramTable:Name" }, { "OutputKey": "transformerrootstackWorkoutProgramWorkoutProgramOwnerDataResolverFnWorkoutProgramOwnerDataResolverFnAppSyncFunctionB902B95DFunctionId", - "OutputValue": "n6yiskbqkvgwbma5c5wt7tluga" + "OutputValue": "c3jrt4vcd5cfbirsv2pukwfqt4" }, { "OutputKey": "GetAttWorkoutProgramDataSourceName", "OutputValue": "WorkoutProgramTable", "Description": "Your model DataSource name.", - "ExportName": "4ebr7lx7bbhnpeo5dbtcvdajdm:GetAtt:WorkoutProgramDataSource:Name" + "ExportName": "jzwb5p2vcbd2ldlnlxokgjcjby:GetAtt:WorkoutProgramDataSource:Name" }, { "OutputKey": "transformerrootstackWorkoutProgramQuerygetWorkoutProgrampostAuth0FunctionQuerygetWorkoutProgrampostAuth0FunctionAppSyncFunction6E15B378FunctionId", - "OutputValue": "hljr36qmybdc5hsavbkunnih3q" + "OutputValue": "azpojmlshjb33hbzmjtsne6eke" }, { "OutputKey": "transformerrootstackWorkoutProgramSubscriptionOnCreateWorkoutProgramDataResolverFnSubscriptionOnCreateWorkoutProgramDataResolverFnAppSyncFunctionE9212A4DFunctionId", - "OutputValue": "25aslddh5rearbzsmjsddncqae" + "OutputValue": "bsbxi7b5m5hnjh55tvtvnd55tq" }, { "OutputKey": "transformerrootstackWorkoutProgramMutationcreateWorkoutPrograminit0FunctionMutationcreateWorkoutPrograminit0FunctionAppSyncFunctionD55A286BFunctionId", - "OutputValue": "ryadbffrprh35offyqpul6fxjy" + "OutputValue": "cdecyw7rljhx7kqioiulvfozuq" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-WorkoutProgram-DSQSG720758E.parameters.json similarity index 82% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-WorkoutProgram-DSQSG720758E.parameters.json index 8893d0ab615..7ab6bc5b463 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-WorkoutProgram-DSQSG720758E.parameters.json @@ -5,7 +5,7 @@ }, { "ParameterKey": "referencetotransformerrootstackS3DeploymentRootKeyA71EA735Ref", - "ParameterValue": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa" + "ParameterValue": "amplify-appsync-files/67310f5f0a68cc163f9cc58da56e1409a2c21b1d" }, { "ParameterKey": "DynamoDBEnableServerSideEncryption", @@ -25,7 +25,7 @@ }, { "ParameterKey": "referencetotransformerrootstackGraphQLAPI20497F53ApiId", - "ParameterValue": "4ebr7lx7bbhnpeo5dbtcvdajdm" + "ParameterValue": "jzwb5p2vcbd2ldlnlxokgjcjby" }, { "ParameterKey": "DynamoDBModelTableWriteIOPS", @@ -33,7 +33,7 @@ }, { "ParameterKey": "referencetotransformerrootstackS3DeploymentBucket7592718ARef", - "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" + "ParameterValue": "amplify-fitnesstracker-main-a0537-deployment" }, { "ParameterKey": "referencetotransformerrootstackenv10C5A902Ref", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-WorkoutProgram-DSQSG720758E.template.json similarity index 98% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-WorkoutProgram-DSQSG720758E.template.json index d65c9f90968..5e3c935a32f 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ-WorkoutProgram-W5V18SR651C7.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX-WorkoutProgram-DSQSG720758E.template.json @@ -503,7 +503,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -604,7 +604,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -771,7 +771,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -959,7 +959,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1111,7 +1111,7 @@ { "Ref": "WorkoutProgramTable" }, - "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1232,7 +1232,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1278,7 +1278,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1324,7 +1324,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, @@ -1403,7 +1403,7 @@ { "Ref": "referencetotransformerrootstackGraphQLAPI20497F53ApiId" }, - "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" + "\"))\n$util.qr($ctx.stash.put(\"connectionAttributes\", {}))\n\n$util.qr($ctx.stash.put(\"identityPoolId\", \"us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022\"))\n$util.qr($ctx.stash.put(\"adminRoles\", [\"lognutrition-main\"]))\n$util.toJson({})" ] ] }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX.outputs.json new file mode 100644 index 00000000000..028a35d20d0 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX.outputs.json @@ -0,0 +1,20 @@ +[ + { + "OutputKey": "GraphQLAPIIdOutput", + "OutputValue": "jzwb5p2vcbd2ldlnlxokgjcjby", + "Description": "Your GraphQL API ID.", + "ExportName": "amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX:GraphQLApiId" + }, + { + "OutputKey": "GraphQLAPIEndpointOutput", + "OutputValue": "https://lqftdnws2zb75jcuwdcmx23wdi.appsync-api.us-east-1.amazonaws.com/graphql", + "Description": "Your GraphQL API endpoint.", + "ExportName": "amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX:GraphQLApiEndpoint" + }, + { + "OutputKey": "GraphQLAPIKeyOutput", + "OutputValue": "da2-fakeapikey00000000000000", + "Description": "Your GraphQL API ID.", + "ExportName": "amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX:GraphQLApiKey" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX.parameters.json similarity index 79% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX.parameters.json index be04a0ba450..989b15c2007 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX.parameters.json @@ -17,7 +17,7 @@ }, { "ParameterKey": "S3DeploymentBucket", - "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" + "ParameterValue": "amplify-fitnesstracker-main-a0537-deployment" }, { "ParameterKey": "DynamoDBModelTableWriteIOPS", @@ -29,7 +29,7 @@ }, { "ParameterKey": "S3DeploymentRootKey", - "ParameterValue": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa" + "ParameterValue": "amplify-appsync-files/67310f5f0a68cc163f9cc58da56e1409a2c21b1d" }, { "ParameterKey": "AppSyncApiName", @@ -37,6 +37,6 @@ }, { "ParameterKey": "AuthCognitoUserPoolId", - "ParameterValue": "us-east-1_LAwe5ZJrw" + "ParameterValue": "us-east-1_iguxCIcMS" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX.template.json similarity index 99% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX.template.json index 651f9ceb637..eb461aa7cbb 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apifitnesstracker-8NP6OMMBJJBQ.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apifitnesstracker-103NTH9S45SYX.template.json @@ -129,7 +129,7 @@ ] }, "Description": "graphql", - "Expires": 1774896554 + "Expires": 1774926795 } }, "GraphQLAPINONEDS95A13CF0": { diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apinutritionapi-HLNAE81TRC4B.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apinutritionapi-HLNAE81TRC4B.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apinutritionapi-HLNAE81TRC4B.outputs.json similarity index 75% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apinutritionapi-HLNAE81TRC4B.outputs.json index f5dfcac1e91..7c901a65dec 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apinutritionapi-HLNAE81TRC4B.outputs.json @@ -6,12 +6,12 @@ }, { "OutputKey": "RootUrl", - "OutputValue": "https://ekto8iln0h.execute-api.us-east-1.amazonaws.com/main", + "OutputValue": "https://hmydcaubcb.execute-api.us-east-1.amazonaws.com/main", "Description": "Root URL of the API gateway" }, { "OutputKey": "ApiId", - "OutputValue": "ekto8iln0h", + "OutputValue": "hmydcaubcb", "Description": "API ID (prefix of API URL)" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apinutritionapi-HLNAE81TRC4B.parameters.json similarity index 77% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apinutritionapi-HLNAE81TRC4B.parameters.json index e09e968f491..2805d4489d2 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apinutritionapi-HLNAE81TRC4B.parameters.json @@ -4,12 +4,12 @@ "ParameterValue": "arn:aws:lambda:us-east-1:123456789012:function:lognutrition-main" }, { - "ParameterKey": "functionlognutritionName", - "ParameterValue": "lognutrition-main" + "ParameterKey": "authfitnesstracker33f5545533f55455UserPoolId", + "ParameterValue": "us-east-1_iguxCIcMS" }, { - "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId", - "ParameterValue": "us-east-1_LAwe5ZJrw" + "ParameterKey": "functionlognutritionName", + "ParameterValue": "lognutrition-main" }, { "ParameterKey": "env", @@ -17,6 +17,6 @@ }, { "ParameterKey": "authuserPoolGroupsAdminGroupRole", - "ParameterValue": "arn:aws:iam::123456789012:role/us-east-1_LAwe5ZJrw-AdminGroupRole" + "ParameterValue": "arn:aws:iam::123456789012:role/us-east-1_iguxCIcMS-AdminGroupRole" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apinutritionapi-HLNAE81TRC4B.template.json similarity index 98% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apinutritionapi-HLNAE81TRC4B.template.json index 1c507689fc5..eaa3ad7fcfe 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-apinutritionapi-ZQRRV8SP6B3V.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-apinutritionapi-HLNAE81TRC4B.template.json @@ -2,9 +2,9 @@ "Description": "API Gateway Resource for AWS Amplify CLI", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" }, "authuserPoolGroupsAdminGroupRole": { "Type": "String", @@ -344,7 +344,7 @@ "-", [ { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" }, "AdminGroupRole" ] @@ -666,7 +666,7 @@ "Name": "nutritionapi" } }, - "nutritionapiDefault4XXResponse59a22bc9": { + "nutritionapiDefault4XXResponse59d8037a": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -681,7 +681,7 @@ } } }, - "nutritionapiDefault5XXResponse59a22bc9": { + "nutritionapiDefault5XXResponse59d8037a": { "Type": "AWS::ApiGateway::GatewayResponse", "Properties": { "ResponseParameters": { @@ -696,7 +696,7 @@ } } }, - "DeploymentAPIGWnutritionapifc67c40b": { + "DeploymentAPIGWnutritionapi633ac738": { "Type": "AWS::ApiGateway::Deployment", "Properties": { "Description": "The Development stage deployment of your API.", @@ -714,8 +714,8 @@ } }, "DependsOn": [ - "nutritionapiDefault4XXResponse59a22bc9", - "nutritionapiDefault5XXResponse59a22bc9" + "nutritionapiDefault4XXResponse59d8037a", + "nutritionapiDefault5XXResponse59d8037a" ] } }, diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.description.txt new file mode 100644 index 00000000000..28ba956271c --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.description.txt @@ -0,0 +1 @@ +{"createdOn":"Mac","createdBy":"Amplify","createdWith":"14.2.5","stackType":"auth-Cognito","metadata":{"whyContinueWithGen1":"Prefer not to answer"}} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.outputs.json similarity index 62% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.outputs.json index d991571da12..38dc79f5baf 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.outputs.json @@ -1,35 +1,35 @@ [ { "OutputKey": "UserPoolId", - "OutputValue": "us-east-1_LAwe5ZJrw", + "OutputValue": "us-east-1_iguxCIcMS", "Description": "Id for the user pool" }, { "OutputKey": "AppClientIDWeb", - "OutputValue": "4bk8odk8blrf65ptk2dffug25k", + "OutputValue": "29bubgvfbbqkp4k60rl7oaqd8s", "Description": "The user pool app client id for web" }, { "OutputKey": "AppClientID", - "OutputValue": "12hkvqjabpisei771tiefdhs76", + "OutputValue": "3s8jcv7nflisr91emephrr2a9s", "Description": "The user pool app client id" }, { "OutputKey": "IdentityPoolId", - "OutputValue": "us-east-1:e77ee826-ef64-4189-a4e0-6c44ea48be6d", + "OutputValue": "us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022", "Description": "Id for the identity pool" }, { "OutputKey": "UserPoolArn", - "OutputValue": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_LAwe5ZJrw", + "OutputValue": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_iguxCIcMS", "Description": "Arn for the user pool" }, { "OutputKey": "IdentityPoolName", - "OutputValue": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c__main" + "OutputValue": "fitnesstracker33f55455_identitypool_33f55455__main" }, { "OutputKey": "UserPoolName", - "OutputValue": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c" + "OutputValue": "fitnesstracker33f55455_userpool_33f55455" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.parameters.json similarity index 83% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.parameters.json index d99a1808184..01043034b58 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authfitnesstracker9ceb2e7c9ceb2e7c-13Y9822PMAATD.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.parameters.json @@ -1,7 +1,7 @@ [ { "ParameterKey": "authRoleArn", - "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" + "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-authRole" }, { "ParameterKey": "autoVerifiedAttributes", @@ -37,7 +37,7 @@ }, { "ParameterKey": "sharedId", - "ParameterValue": "9ceb2e7c" + "ParameterValue": "33f55455" }, { "ParameterKey": "useDefault", @@ -53,7 +53,7 @@ }, { "ParameterKey": "identityPoolName", - "ParameterValue": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c" + "ParameterValue": "fitnesstracker33f55455_identitypool_33f55455" }, { "ParameterKey": "thirdPartyAuth", @@ -75,9 +75,13 @@ "ParameterKey": "permissions", "ParameterValue": "" }, + { + "ParameterKey": "functionfitnesstracker33f5545533f55455PreSignupArn", + "ParameterValue": "functionfitnesstracker33f5545533f55455PreSignupArn" + }, { "ParameterKey": "resourceNameTruncated", - "ParameterValue": "fitnes9ceb2e7c" + "ParameterValue": "fitnes33f55455" }, { "ParameterKey": "userPoolGroups", @@ -87,17 +91,13 @@ "ParameterKey": "smsAuthenticationMessage", "ParameterValue": "Your authentication code is {####}" }, - { - "ParameterKey": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn", - "ParameterValue": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn" - }, { "ParameterKey": "passwordPolicyMinLength", "ParameterValue": "8" }, { "ParameterKey": "userPoolName", - "ParameterValue": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c" + "ParameterValue": "fitnesstracker33f55455_userpool_33f55455" }, { "ParameterKey": "userpoolClientWriteAttributes", @@ -111,13 +111,17 @@ "ParameterKey": "useEnabledMfas", "ParameterValue": "true" }, + { + "ParameterKey": "functionfitnesstracker33f5545533f55455PreSignupName", + "ParameterValue": "functionfitnesstracker33f5545533f55455PreSignupName" + }, { "ParameterKey": "usernameCaseSensitive", "ParameterValue": "false" }, { "ParameterKey": "resourceName", - "ParameterValue": "fitnesstracker9ceb2e7c9ceb2e7c" + "ParameterValue": "fitnesstracker33f5545533f55455" }, { "ParameterKey": "env", @@ -145,11 +149,7 @@ }, { "ParameterKey": "unauthRoleArn", - "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole" - }, - { - "ParameterKey": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName", - "ParameterValue": "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName" + "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-unauthRole" }, { "ParameterKey": "requiredAttributes", @@ -161,7 +161,7 @@ }, { "ParameterKey": "authTriggerConnections", - "ParameterValue": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}" + "ParameterValue": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker33f5545533f55455PreSignup\"}" }, { "ParameterKey": "aliasAttributes", @@ -169,7 +169,7 @@ }, { "ParameterKey": "userpoolClientLambdaRole", - "ParameterValue": "fitnes9ceb2e7c_userpoolclient_lambda_role" + "ParameterValue": "fitnes33f55455_userpoolclient_lambda_role" }, { "ParameterKey": "defaultPasswordPolicy", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.template.json new file mode 100644 index 00000000000..f5ed153a8fe --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.template.json @@ -0,0 +1,480 @@ +{ + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "env": { + "Type": "String" + }, + "functionfitnesstracker33f5545533f55455PreSignupArn": { + "Type": "String", + "Default": "functionfitnesstracker33f5545533f55455PreSignupArn" + }, + "functionfitnesstracker33f5545533f55455PreSignupName": { + "Type": "String", + "Default": "functionfitnesstracker33f5545533f55455PreSignupName" + }, + "identityPoolName": { + "Type": "String" + }, + "allowUnauthenticatedIdentities": { + "Type": "String" + }, + "resourceNameTruncated": { + "Type": "String" + }, + "userPoolName": { + "Type": "String" + }, + "autoVerifiedAttributes": { + "Type": "CommaDelimitedList" + }, + "mfaConfiguration": { + "Type": "String" + }, + "mfaTypes": { + "Type": "CommaDelimitedList" + }, + "smsAuthenticationMessage": { + "Type": "String" + }, + "smsVerificationMessage": { + "Type": "String" + }, + "emailVerificationSubject": { + "Type": "String" + }, + "emailVerificationMessage": { + "Type": "String" + }, + "defaultPasswordPolicy": { + "Type": "String" + }, + "passwordPolicyMinLength": { + "Type": "String" + }, + "passwordPolicyCharacters": { + "Type": "CommaDelimitedList" + }, + "requiredAttributes": { + "Type": "CommaDelimitedList" + }, + "aliasAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientGenerateSecret": { + "Type": "String" + }, + "userpoolClientRefreshTokenValidity": { + "Type": "String" + }, + "userpoolClientWriteAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientReadAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientLambdaRole": { + "Type": "String" + }, + "userpoolClientSetAttributes": { + "Type": "String" + }, + "sharedId": { + "Type": "String" + }, + "resourceName": { + "Type": "String" + }, + "authSelections": { + "Type": "String" + }, + "useDefault": { + "Type": "String" + }, + "thirdPartyAuth": { + "Type": "String" + }, + "userPoolGroups": { + "Type": "String" + }, + "adminQueries": { + "Type": "String" + }, + "triggers": { + "Type": "String" + }, + "hostedUI": { + "Type": "String" + }, + "userPoolGroupList": { + "Type": "CommaDelimitedList" + }, + "serviceName": { + "Type": "String" + }, + "usernameCaseSensitive": { + "Type": "String" + }, + "useEnabledMfas": { + "Type": "String" + }, + "authRoleArn": { + "Type": "String" + }, + "unauthRoleArn": { + "Type": "String" + }, + "breakCircularDependency": { + "Type": "String" + }, + "dependsOn": { + "Type": "CommaDelimitedList" + }, + "permissions": { + "Type": "CommaDelimitedList" + }, + "authTriggerConnections": { + "Type": "CommaDelimitedList" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "UserPool": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": { + "Ref": "emailVerificationMessage" + }, + "EmailVerificationSubject": { + "Ref": "emailVerificationSubject" + }, + "MfaConfiguration": { + "Ref": "mfaConfiguration" + }, + "Policies": { + "PasswordPolicy": { + "MinimumLength": { + "Ref": "passwordPolicyMinLength" + }, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userPoolName" + }, + { + "Fn::Join": [ + "", + [ + { + "Ref": "userPoolName" + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "UserPoolClientWeb": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "fitnes33f55455_app_clientWeb", + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "UserPoolClient": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "fitnes33f55455_app_client", + "GenerateSecret": { + "Ref": "userpoolClientGenerateSecret" + }, + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "UserPoolClientRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + }, + "Action": "sts:AssumeRole" + } + ] + }, + "RoleName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userpoolClientLambdaRole" + }, + { + "Fn::Join": [ + "", + [ + "upClientLambdaRole33f55455", + { + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + { + "Ref": "AWS::StackName" + } + ] + } + ] + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + } + } + }, + "IdentityPool": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": { + "Ref": "allowUnauthenticatedIdentities" + }, + "CognitoIdentityProviders": [ + { + "ClientId": { + "Ref": "UserPoolClient" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + }, + { + "ClientId": { + "Ref": "UserPoolClientWeb" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "fitnesstracker33f55455_identitypool_33f55455", + { + "Fn::Join": [ + "", + [ + "fitnesstracker33f55455_identitypool_33f55455__", + { + "Ref": "env" + } + ] + ] + } + ] + } + } + }, + "IdentityPoolRoleMap": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": { + "Ref": "IdentityPool" + }, + "RoleMappings": { + "UserPoolClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": { + "Ref": "UserPool" + }, + "client": { + "Ref": "UserPoolClient" + } + } + ] + }, + "Type": "Token" + }, + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${webClient}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": { + "Ref": "UserPool" + }, + "webClient": { + "Ref": "UserPoolClientWeb" + } + } + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": { + "Ref": "unauthRoleArn" + }, + "authenticated": { + "Ref": "authRoleArn" + } + } + }, + "DependsOn": [ + "IdentityPool", + "UserPoolClient", + "UserPoolClientWeb" + ] + } + }, + "Outputs": { + "IdentityPoolId": { + "Description": "Id for the identity pool", + "Value": { + "Ref": "IdentityPool" + } + }, + "IdentityPoolName": { + "Value": { + "Fn::GetAtt": [ + "IdentityPool", + "Name" + ] + } + }, + "UserPoolId": { + "Description": "Id for the user pool", + "Value": { + "Ref": "UserPool" + } + }, + "UserPoolArn": { + "Description": "Arn for the user pool", + "Value": { + "Fn::GetAtt": [ + "UserPool", + "Arn" + ] + } + }, + "UserPoolName": { + "Value": { + "Ref": "userPoolName" + } + }, + "AppClientIDWeb": { + "Description": "The user pool app client id for web", + "Value": { + "Ref": "UserPoolClientWeb" + } + }, + "AppClientID": { + "Description": "The user pool app client id", + "Value": { + "Ref": "UserPoolClient" + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.description.txt new file mode 100644 index 00000000000..aa91c019d71 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.description.txt @@ -0,0 +1 @@ +{"createdOn":"Mac","createdBy":"Amplify","createdWith":"14.2.5","stackType":"auth-Cognito-UserPool-Groups","metadata":{"whyContinueWithGen1":"Prefer not to answer"}} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.outputs.json new file mode 100644 index 00000000000..86a20382cd6 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.outputs.json @@ -0,0 +1,6 @@ +[ + { + "OutputKey": "AdminGroupRole", + "OutputValue": "arn:aws:iam::123456789012:role/us-east-1_iguxCIcMS-AdminGroupRole" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.parameters.json new file mode 100644 index 00000000000..11a65b7a7e8 --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.parameters.json @@ -0,0 +1,30 @@ +[ + { + "ParameterKey": "UnauthRoleArn", + "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-unauthRole" + }, + { + "ParameterKey": "authfitnesstracker33f5545533f55455IdentityPoolId", + "ParameterValue": "us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022" + }, + { + "ParameterKey": "AuthRoleArn", + "ParameterValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-authRole" + }, + { + "ParameterKey": "authfitnesstracker33f5545533f55455UserPoolId", + "ParameterValue": "us-east-1_iguxCIcMS" + }, + { + "ParameterKey": "env", + "ParameterValue": "main" + }, + { + "ParameterKey": "authfitnesstracker33f5545533f55455AppClientIDWeb", + "ParameterValue": "29bubgvfbbqkp4k60rl7oaqd8s" + }, + { + "ParameterKey": "authfitnesstracker33f5545533f55455AppClientID", + "ParameterValue": "3s8jcv7nflisr91emephrr2a9s" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.template.json similarity index 69% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.template.json index 12c7040bd48..e34b9d7bd14 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.template.json @@ -1,5 +1,5 @@ { - "Description": "Root Stack for AWS Amplify CLI", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito-UserPool-Groups\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "env": { @@ -11,21 +11,21 @@ "UnauthRoleArn": { "Type": "String" }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" }, - "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { + "authfitnesstracker33f5545533f55455IdentityPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" + "Default": "authfitnesstracker33f5545533f55455IdentityPoolId" }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { + "authfitnesstracker33f5545533f55455AppClientID": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID" + "Default": "authfitnesstracker33f5545533f55455AppClientID" }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { + "authfitnesstracker33f5545533f55455AppClientIDWeb": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb" + "Default": "authfitnesstracker33f5545533f55455AppClientIDWeb" } }, "Conditions": { @@ -52,7 +52,7 @@ ] }, "UserPoolId": { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" } } }, @@ -72,7 +72,7 @@ "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId" + "Ref": "authfitnesstracker33f5545533f55455IdentityPoolId" } }, "ForAnyValue:StringLike": { @@ -87,7 +87,7 @@ "", [ { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" }, "-AdminGroupRole" ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionadmin-1XHD95ED0WDDQ.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionadmin-1XHD95ED0WDDQ.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionadmin-1XHD95ED0WDDQ.outputs.json similarity index 82% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionadmin-1XHD95ED0WDDQ.outputs.json index 5e51899ca79..25dd9bb9cfe 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionadmin-1XHD95ED0WDDQ.outputs.json @@ -1,7 +1,7 @@ [ { "OutputKey": "LambdaExecutionRoleArn", - "OutputValue": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole64f55d16-main" + "OutputValue": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole4a08108a-main" }, { "OutputKey": "Region", @@ -17,6 +17,6 @@ }, { "OutputKey": "LambdaExecutionRole", - "OutputValue": "fitnesstrackerLambdaRole64f55d16-main" + "OutputValue": "fitnesstrackerLambdaRole4a08108a-main" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionadmin-1XHD95ED0WDDQ.parameters.json similarity index 52% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionadmin-1XHD95ED0WDDQ.parameters.json index 1752e93cb4d..8893510b234 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionadmin-1XHD95ED0WDDQ.parameters.json @@ -5,15 +5,15 @@ }, { "ParameterKey": "s3Key", - "ParameterValue": "amplify-builds/admin-765632787437744e386e-build.zip" + "ParameterValue": "amplify-builds/admin-7934694b6d366c486d32-build.zip" }, { "ParameterKey": "deploymentBucketName", - "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" + "ParameterValue": "amplify-fitnesstracker-main-a0537-deployment" }, { - "ParameterKey": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId", - "ParameterValue": "us-east-1_LAwe5ZJrw" + "ParameterKey": "authfitnesstracker33f5545533f55455UserPoolId", + "ParameterValue": "us-east-1_iguxCIcMS" }, { "ParameterKey": "env", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionadmin-1XHD95ED0WDDQ.template.json similarity index 93% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionadmin-1XHD95ED0WDDQ.template.json index aaa8618655d..57322afb5e3 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionadmin-ELA4T2BKK7S3.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionadmin-1XHD95ED0WDDQ.template.json @@ -16,9 +16,9 @@ "s3Key": { "Type": "String" }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Type": "String", - "Default": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Default": "authfitnesstracker33f5545533f55455UserPoolId" } }, "Conditions": { @@ -74,8 +74,8 @@ "REGION": { "Ref": "AWS::Region" }, - "AUTH_FITNESSTRACKER9CEB2E7C9CEB2E7C_USERPOOLID": { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "AUTH_FITNESSTRACKER33F5545533F55455_USERPOOLID": { + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" } } }, @@ -96,12 +96,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRole64f55d16", + "fitnesstrackerLambdaRole4a08108a", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRole64f55d16", + "fitnesstrackerLambdaRole4a08108a", "-", { "Ref": "env" @@ -220,7 +220,7 @@ }, ":userpool/", { - "Ref": "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId" + "Ref": "authfitnesstracker33f5545533f55455UserPoolId" } ] ] diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionfitnesstracker33f5545533f55455PreSignup-1NSDWT8P6Z7SU.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionfitnesstracker33f5545533f55455PreSignup-1NSDWT8P6Z7SU.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionfitnesstracker33f5545533f55455PreSignup-1NSDWT8P6Z7SU.outputs.json similarity index 63% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionfitnesstracker33f5545533f55455PreSignup-1NSDWT8P6Z7SU.outputs.json index cfe685f3804..eb2c3a837ae 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionfitnesstracker33f5545533f55455PreSignup-1NSDWT8P6Z7SU.outputs.json @@ -1,7 +1,7 @@ [ { "OutputKey": "LambdaExecutionRoleArn", - "OutputValue": "arn:aws:iam::123456789012:role/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" + "OutputValue": "arn:aws:iam::123456789012:role/fitnesstracker33f5545533f55455PreSignup-main" }, { "OutputKey": "Region", @@ -9,14 +9,14 @@ }, { "OutputKey": "Arn", - "OutputValue": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" + "OutputValue": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker33f5545533f55455PreSignup-main" }, { "OutputKey": "Name", - "OutputValue": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" + "OutputValue": "fitnesstracker33f5545533f55455PreSignup-main" }, { "OutputKey": "LambdaExecutionRole", - "OutputValue": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup-main" + "OutputValue": "fitnesstracker33f5545533f55455PreSignup-main" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionfitnesstracker33f5545533f55455PreSignup-1NSDWT8P6Z7SU.parameters.json similarity index 77% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionfitnesstracker33f5545533f55455PreSignup-1NSDWT8P6Z7SU.parameters.json index 92a5d88d7b5..5f958b22dc3 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup-3S3GBRYFYV12.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionfitnesstracker33f5545533f55455PreSignup-1NSDWT8P6Z7SU.parameters.json @@ -5,7 +5,7 @@ }, { "ParameterKey": "s3Key", - "ParameterValue": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip" + "ParameterValue": "amplify-builds/fitnesstracker33f5545533f55455PreSignup-68374859444c45627749-build.zip" }, { "ParameterKey": "functionName", @@ -21,7 +21,7 @@ }, { "ParameterKey": "deploymentBucketName", - "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" + "ParameterValue": "amplify-fitnesstracker-main-a0537-deployment" }, { "ParameterKey": "DOMAINBLACKLIST", @@ -33,7 +33,7 @@ }, { "ParameterKey": "resourceName", - "ParameterValue": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup" + "ParameterValue": "fitnesstracker33f5545533f55455PreSignup" }, { "ParameterKey": "trigger", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionfitnesstracker33f5545533f55455PreSignup-1NSDWT8P6Z7SU.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionfitnesstracker33f5545533f55455PreSignup-1NSDWT8P6Z7SU.template.json new file mode 100644 index 00000000000..e53fff724cb --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionfitnesstracker33f5545533f55455PreSignup-1NSDWT8P6Z7SU.template.json @@ -0,0 +1,242 @@ +{ + "AWSTemplateFormatVersion": "2010-09-09", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Parameters": { + "DOMAINBLACKLIST": { + "Type": "String", + "Default": "" + }, + "DOMAINALLOWLIST": { + "Type": "String", + "Default": "" + }, + "modules": { + "Type": "String", + "Default": "", + "Description": "Comma-delimited list of modules to be executed by a lambda trigger. Sent to resource as an env variable." + }, + "resourceName": { + "Type": "String", + "Default": "" + }, + "trigger": { + "Type": "String", + "Default": "true" + }, + "functionName": { + "Type": "String", + "Default": "" + }, + "roleName": { + "Type": "String", + "Default": "" + }, + "parentResource": { + "Type": "String", + "Default": "" + }, + "parentStack": { + "Type": "String", + "Default": "" + }, + "env": { + "Type": "String" + }, + "deploymentBucketName": { + "Type": "String" + }, + "s3Key": { + "Type": "String" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "LambdaFunction": { + "Type": "AWS::Lambda::Function", + "Metadata": { + "aws:asset:path": "./src", + "aws:asset:property": "Code" + }, + "Properties": { + "Handler": "index.handler", + "FunctionName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "fitnesstracker33f5545533f55455PreSignup", + { + "Fn::Join": [ + "", + [ + "fitnesstracker33f5545533f55455PreSignup", + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "Environment": { + "Variables": { + "ENV": { + "Ref": "env" + }, + "MODULES": { + "Ref": "modules" + }, + "REGION": { + "Ref": "AWS::Region" + }, + "DOMAINALLOWLIST": { + "Ref": "DOMAINALLOWLIST" + }, + "DOMAINBLACKLIST": { + "Ref": "DOMAINBLACKLIST" + } + } + }, + "Role": { + "Fn::GetAtt": [ + "LambdaExecutionRole", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 25, + "Code": { + "S3Bucket": { + "Ref": "deploymentBucketName" + }, + "S3Key": { + "Ref": "s3Key" + } + } + } + }, + "LambdaExecutionRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "RoleName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "fitnesstracker33f5545533f55455PreSignup", + { + "Fn::Join": [ + "", + [ + "fitnesstracker33f5545533f55455PreSignup", + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": [ + "lambda.amazonaws.com" + ] + }, + "Action": [ + "sts:AssumeRole" + ] + } + ] + } + } + }, + "lambdaexecutionpolicy": { + "DependsOn": [ + "LambdaExecutionRole" + ], + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyName": "lambda-execution-policy", + "Roles": [ + { + "Ref": "LambdaExecutionRole" + } + ], + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Resource": { + "Fn::Sub": [ + "arn:aws:logs:${region}:${account}:log-group:/aws/lambda/${lambda}:log-stream:*", + { + "region": { + "Ref": "AWS::Region" + }, + "account": { + "Ref": "AWS::AccountId" + }, + "lambda": { + "Ref": "LambdaFunction" + } + } + ] + } + } + ] + } + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Ref": "LambdaFunction" + } + }, + "Arn": { + "Value": { + "Fn::GetAtt": [ + "LambdaFunction", + "Arn" + ] + } + }, + "LambdaExecutionRole": { + "Value": { + "Ref": "LambdaExecutionRole" + } + }, + "LambdaExecutionRoleArn": { + "Value": { + "Fn::GetAtt": [ + "LambdaExecutionRole", + "Arn" + ] + } + }, + "Region": { + "Value": { + "Ref": "AWS::Region" + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionlognutrition-13HP6USYKZ4YI.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionlognutrition-13HP6USYKZ4YI.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionlognutrition-13HP6USYKZ4YI.outputs.json similarity index 83% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionlognutrition-13HP6USYKZ4YI.outputs.json index 8016fe38118..ff6bec326d2 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionlognutrition-13HP6USYKZ4YI.outputs.json @@ -1,7 +1,7 @@ [ { "OutputKey": "LambdaExecutionRoleArn", - "OutputValue": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole8dc6052c-main" + "OutputValue": "arn:aws:iam::123456789012:role/fitnesstrackerLambdaRole2824d4b4-main" }, { "OutputKey": "Region", @@ -17,6 +17,6 @@ }, { "OutputKey": "LambdaExecutionRole", - "OutputValue": "fitnesstrackerLambdaRole8dc6052c-main" + "OutputValue": "fitnesstrackerLambdaRole2824d4b4-main" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionlognutrition-13HP6USYKZ4YI.parameters.json similarity index 77% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.parameters.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionlognutrition-13HP6USYKZ4YI.parameters.json index 2e5abe71d79..f5b9c93a1a7 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.parameters.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionlognutrition-13HP6USYKZ4YI.parameters.json @@ -5,7 +5,7 @@ }, { "ParameterKey": "apifitnesstrackerGraphQLAPIIdOutput", - "ParameterValue": "4ebr7lx7bbhnpeo5dbtcvdajdm" + "ParameterValue": "jzwb5p2vcbd2ldlnlxokgjcjby" }, { "ParameterKey": "s3Key", @@ -13,7 +13,7 @@ }, { "ParameterKey": "deploymentBucketName", - "ParameterValue": "amplify-fitnesstracker-main-6fc9a-deployment" + "ParameterValue": "amplify-fitnesstracker-main-a0537-deployment" }, { "ParameterKey": "env", diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionlognutrition-13HP6USYKZ4YI.template.json similarity index 98% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionlognutrition-13HP6USYKZ4YI.template.json index e1789ef2c20..34e97f53ec9 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-functionlognutrition-T6VGX60KCB8H.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537-functionlognutrition-13HP6USYKZ4YI.template.json @@ -122,12 +122,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "fitnesstrackerLambdaRole8dc6052c", + "fitnesstrackerLambdaRole2824d4b4", { "Fn::Join": [ "", [ - "fitnesstrackerLambdaRole8dc6052c", + "fitnesstrackerLambdaRole2824d4b4", "-", { "Ref": "env" diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.description.txt b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537.description.txt similarity index 100% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a-authuserPoolGroups-MXIW00J9KSSV.description.txt rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537.description.txt diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.outputs.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537.outputs.json similarity index 56% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.outputs.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537.outputs.json index 89e90b54519..12c76d2fccb 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.outputs.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537.outputs.json @@ -1,42 +1,42 @@ [ { "OutputKey": "AuthRoleName", - "OutputValue": "amplify-fitnesstracker-main-6fc9a-authRole" + "OutputValue": "amplify-fitnesstracker-main-a0537-authRole" }, { "OutputKey": "UnauthRoleArn", - "OutputValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-unauthRole" + "OutputValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-unauthRole" }, { "OutputKey": "AuthRoleArn", - "OutputValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-6fc9a-authRole" + "OutputValue": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-authRole" }, { "OutputKey": "Region", "OutputValue": "us-east-1", "Description": "CloudFormation provider root stack Region", - "ExportName": "amplify-fitnesstracker-main-6fc9a-Region" + "ExportName": "amplify-fitnesstracker-main-a0537-Region" }, { "OutputKey": "DeploymentBucketName", - "OutputValue": "amplify-fitnesstracker-main-6fc9a-deployment", + "OutputValue": "amplify-fitnesstracker-main-a0537-deployment", "Description": "CloudFormation provider root stack deployment bucket name", - "ExportName": "amplify-fitnesstracker-main-6fc9a-DeploymentBucketName" + "ExportName": "amplify-fitnesstracker-main-a0537-DeploymentBucketName" }, { "OutputKey": "UnauthRoleName", - "OutputValue": "amplify-fitnesstracker-main-6fc9a-unauthRole" + "OutputValue": "amplify-fitnesstracker-main-a0537-unauthRole" }, { "OutputKey": "StackName", - "OutputValue": "amplify-fitnesstracker-main-6fc9a", + "OutputValue": "amplify-fitnesstracker-main-a0537", "Description": "CloudFormation provider root stack ID", - "ExportName": "amplify-fitnesstracker-main-6fc9a-StackName" + "ExportName": "amplify-fitnesstracker-main-a0537-StackName" }, { "OutputKey": "StackId", - "OutputValue": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-6fc9a/d1ee9bf0-2590-11f1-8e36-1220ebfe67af", + "OutputValue": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-a0537/1749a530-272d-11f1-a465-0e5f0b5f7853", "Description": "CloudFormation provider root stack name", - "ExportName": "amplify-fitnesstracker-main-6fc9a-StackId" + "ExportName": "amplify-fitnesstracker-main-a0537-StackId" } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537.parameters.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537.parameters.json new file mode 100644 index 00000000000..9ba77cc775e --- /dev/null +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537.parameters.json @@ -0,0 +1,14 @@ +[ + { + "ParameterKey": "AuthRoleName", + "ParameterValue": "amplify-fitnesstracker-main-a0537-authRole" + }, + { + "ParameterKey": "DeploymentBucketName", + "ParameterValue": "amplify-fitnesstracker-main-a0537-deployment" + }, + { + "ParameterKey": "UnauthRoleName", + "ParameterValue": "amplify-fitnesstracker-main-a0537-unauthRole" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537.template.json similarity index 85% rename from amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.template.json rename to amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537.template.json index 5345516d4d9..e4e090d2980 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-6fc9a.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.pre.refactor/amplify-fitnesstracker-main-a0537.template.json @@ -202,7 +202,7 @@ "APIGatewayAuthStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/APIGatewayAuthStack.json", "Parameters": { "authRoleName": { "Ref": "AuthRoleName" @@ -229,50 +229,50 @@ "AuthTriggerCustomLambdaStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", "Parameters": { "env": "main", "userpoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, "userpoolArn": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolArn" ] }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupLambdaExecutionRole": { + "functionfitnesstracker33f5545533f55455PreSignupLambdaExecutionRole": { "Fn::GetAtt": [ - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "functionfitnesstracker33f5545533f55455PreSignup", "Outputs.LambdaExecutionRoleArn" ] }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupArn": { + "functionfitnesstracker33f5545533f55455PreSignupArn": { "Fn::GetAtt": [ - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "functionfitnesstracker33f5545533f55455PreSignup", "Outputs.Arn" ] }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignupName": { + "functionfitnesstracker33f5545533f55455PreSignupName": { "Fn::GetAtt": [ - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "functionfitnesstracker33f5545533f55455PreSignup", "Outputs.Name" ] } } }, "DependsOn": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup" + "authfitnesstracker33f5545533f55455", + "functionfitnesstracker33f5545533f55455PreSignup" ] }, "apiadminapi": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/adminapi-cloudformation-template.json", "Parameters": { "functionadminName": { "Fn::GetAtt": [ @@ -286,9 +286,9 @@ "Outputs.Arn" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, @@ -305,19 +305,19 @@ "apifitnesstracker": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/cloudformation-template.json", "Parameters": { "AppSyncApiName": "fitnesstracker", "DynamoDBBillingMode": "PAY_PER_REQUEST", "DynamoDBEnableServerSideEncryption": false, "AuthCognitoUserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, - "S3DeploymentBucket": "amplify-fitnesstracker-main-6fc9a-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/4e96d1a40e125259298887f594df139304e5e3fa", + "S3DeploymentBucket": "amplify-fitnesstracker-main-a0537-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/67310f5f0a68cc163f9cc58da56e1409a2c21b1d", "env": "main" } } @@ -325,7 +325,7 @@ "apinutritionapi": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/api/nutritionapi-cloudformation-template.json", "Parameters": { "functionlognutritionName": { "Fn::GetAtt": [ @@ -339,9 +339,9 @@ "Outputs.Arn" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, @@ -355,15 +355,15 @@ } } }, - "authfitnesstracker9ceb2e7c9ceb2e7c": { + "authfitnesstracker33f5545533f55455": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/fitnesstracker9ceb2e7c9ceb2e7c-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/fitnesstracker33f5545533f55455-cloudformation-template.json", "Parameters": { - "identityPoolName": "fitnesstracker9ceb2e7c_identitypool_9ceb2e7c", + "identityPoolName": "fitnesstracker33f55455_identitypool_33f55455", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "fitnes9ceb2e7c", - "userPoolName": "fitnesstracker9ceb2e7c_userpool_9ceb2e7c", + "resourceNameTruncated": "fitnes33f55455", + "userPoolName": "fitnesstracker33f55455_userpool_33f55455", "autoVerifiedAttributes": "email", "mfaConfiguration": "OFF", "mfaTypes": "SMS Text Message", @@ -380,10 +380,10 @@ "userpoolClientRefreshTokenValidity": 30, "userpoolClientWriteAttributes": "email", "userpoolClientReadAttributes": "email", - "userpoolClientLambdaRole": "fitnes9ceb2e7c_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "fitnes33f55455_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "9ceb2e7c", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7c", + "sharedId": "33f55455", + "resourceName": "fitnesstracker33f5545533f55455", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -410,7 +410,7 @@ "breakCircularDependency": true, "dependsOn": "[object Object]", "permissions": "", - "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker9ceb2e7c9ceb2e7cPreSignup\"}", + "authTriggerConnections": "{\"triggerType\":\"PreSignUp\",\"lambdaFunctionName\":\"fitnesstracker33f5545533f55455PreSignup\"}", "env": "main" } } @@ -418,7 +418,7 @@ "authuserPoolGroups": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", "Parameters": { "AuthRoleArn": { "Fn::GetAtt": [ @@ -432,27 +432,27 @@ "Arn" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "authfitnesstracker33f5545533f55455UserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientIDWeb": { + "authfitnesstracker33f5545533f55455AppClientIDWeb": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.AppClientIDWeb" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cAppClientID": { + "authfitnesstracker33f5545533f55455AppClientID": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.AppClientID" ] }, - "authfitnesstracker9ceb2e7c9ceb2e7cIdentityPoolId": { + "authfitnesstracker33f5545533f55455IdentityPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.IdentityPoolId" ] }, @@ -463,13 +463,13 @@ "functionadmin": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/admin-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/admin-765632787437744e386e-build.zip", - "authfitnesstracker9ceb2e7c9ceb2e7cUserPoolId": { + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/admin-7934694b6d366c486d32-build.zip", + "authfitnesstracker33f5545533f55455UserPoolId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.UserPoolId" ] }, @@ -477,16 +477,16 @@ } } }, - "functionfitnesstracker9ceb2e7c9ceb2e7cPreSignup": { + "functionfitnesstracker33f5545533f55455PreSignup": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/fitnesstracker33f5545533f55455PreSignup-cloudformation-template.json", "Parameters": { "modules": "email-filter-allowlist", - "resourceName": "fitnesstracker9ceb2e7c9ceb2e7cPreSignup", + "resourceName": "fitnesstracker33f5545533f55455PreSignup", "DOMAINALLOWLIST": "amazon.com", - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", - "s3Key": "amplify-builds/fitnesstracker9ceb2e7c9ceb2e7cPreSignup-30665350613379623339-build.zip", + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", + "s3Key": "amplify-builds/fitnesstracker33f5545533f55455PreSignup-68374859444c45627749-build.zip", "env": "main" } } @@ -494,9 +494,9 @@ "functionlognutrition": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-6fc9a-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-fitnesstracker-main-a0537-deployment/amplify-cfn-templates/function/lognutrition-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-fitnesstracker-main-6fc9a-deployment", + "deploymentBucketName": "amplify-fitnesstracker-main-a0537-deployment", "s3Key": "amplify-builds/lognutrition-554b5263566866516c6c-build.zip", "apifitnesstrackerGraphQLAPIIdOutput": { "Fn::GetAtt": [ @@ -512,7 +512,7 @@ "DependsOn": [ "AuthRole", "UnauthRole", - "authfitnesstracker9ceb2e7c9ceb2e7c" + "authfitnesstracker33f5545533f55455" ], "Type": "AWS::Lambda::Function", "Properties": { @@ -622,7 +622,7 @@ }, "idpId": { "Fn::GetAtt": [ - "authfitnesstracker9ceb2e7c9ceb2e7c", + "authfitnesstracker33f5545533f55455", "Outputs.IdentityPoolId" ] }, From 6ffd8213a7807da8db8aeeea3eecd6111a350768 Mon Sep 17 00:00:00 2001 From: Eli Polonsky Date: Tue, 24 Mar 2026 00:19:45 -0400 Subject: [PATCH 50/70] chore: update snapshots --- .../resource.ts | 4 +- .../amplify/backend.ts | 296 +++++++------- ...9371D7-19RM9R3LOXG8I-holding.mappings.json | 44 ++- ...19RM9R3LOXG8I-holding.source.template.json | 163 +------- ...19RM9R3LOXG8I-holding.target.template.json | 24 +- ...b-auth179371D7-19RM9R3LOXG8I.mappings.json | 20 +- ...79371D7-19RM9R3LOXG8I.target.template.json | 26 +- ...b-auth179371D7-19RM9R3LOXG8I.mappings.json | 4 +- ...79371D7-19RM9R3LOXG8I.target.template.json | 367 ++++++++++-------- ...b-auth179371D7-19RM9R3LOXG8I.template.json | 4 +- 10 files changed, 446 insertions(+), 506 deletions(-) diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker33f5545533f55455PreSignup/resource.ts b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker33f5545533f55455PreSignup/resource.ts index 718f48a6ae7..ebc5e5951a1 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker33f5545533f55455PreSignup/resource.ts +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/auth/fitnesstracker33f5545533f55455PreSignup/resource.ts @@ -8,11 +8,11 @@ export const fitnesstracker33f5545533f55455PreSignup = defineFunction({ timeoutSeconds: 25, memoryMB: 128, environment: { + ENV: `${branchName}`, MODULES: 'email-filter-allowlist', + REGION: 'us-east-1', DOMAINALLOWLIST: 'amazon.com', DOMAINBLACKLIST: '', - ENV: `${branchName}`, - REGION: 'us-east-1', }, runtime: 22, }); diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/backend.ts b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/backend.ts index 313c6c83f23..582a879b36a 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/backend.ts +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.generate/amplify/backend.ts @@ -1,8 +1,8 @@ import { auth } from './auth/resource'; import { data } from './data/resource'; -import { admin } from './function/admin/resource'; import { fitnesstracker33f5545533f55455PreSignup } from './auth/fitnesstracker33f5545533f55455PreSignup/resource'; import { lognutrition } from './function/lognutrition/resource'; +import { admin } from './function/admin/resource'; import { RestApi, LambdaIntegration, @@ -12,108 +12,77 @@ import { } from 'aws-cdk-lib/aws-apigateway'; import { Policy, PolicyStatement } from 'aws-cdk-lib/aws-iam'; import { defineBackend } from '@aws-amplify/backend'; -import { Stack, Duration } from 'aws-cdk-lib'; +import { Duration, Stack } from 'aws-cdk-lib'; const backend = defineBackend({ auth, data, - admin, fitnesstracker33f5545533f55455PreSignup, lognutrition, + admin, }); -const branchName = process.env.AWS_BRANCH ?? 'sandbox'; -const adminapiStack = backend.createStack('rest-api-stack-adminapi'); -const adminapiApi = new RestApi(adminapiStack, 'RestApi', { - restApiName: `adminapi-${branchName}`, -}); -adminapiApi.addGatewayResponse('Default4XX', { - type: ResponseType.DEFAULT_4XX, - responseHeaders: { - 'Access-Control-Allow-Origin': "'*'", - 'Access-Control-Allow-Headers': - "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'", - 'Access-Control-Allow-Methods': "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'", - 'Access-Control-Expose-Headers': "'Date,X-Amzn-ErrorType'", - }, -}); -adminapiApi.addGatewayResponse('Default5XX', { - type: ResponseType.DEFAULT_5XX, - responseHeaders: { - 'Access-Control-Allow-Origin': "'*'", - 'Access-Control-Allow-Headers': - "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'", - 'Access-Control-Allow-Methods': "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'", - 'Access-Control-Expose-Headers': "'Date,X-Amzn-ErrorType'", +const cfnUserPool = backend.auth.resources.cfnResources.cfnUserPool; +cfnUserPool.usernameAttributes = undefined; +cfnUserPool.policies = { + passwordPolicy: { + minimumLength: 8, + requireUppercase: false, + requireLowercase: false, + requireNumbers: false, + requireSymbols: false, + temporaryPasswordValidityDays: 7, }, +}; +const cfnIdentityPool = backend.auth.resources.cfnResources.cfnIdentityPool; +cfnIdentityPool.allowUnauthenticatedIdentities = false; +const userPool = backend.auth.resources.userPool; +userPool.addClient('NativeAppClient', { + refreshTokenValidity: Duration.days(30), + enableTokenRevocation: true, + enablePropagateAdditionalUserContextData: false, + authSessionValidity: Duration.minutes(3), + disableOAuth: true, + generateSecret: false, }); -const adminIntegration = new LambdaIntegration(backend.admin.resources.lambda); -const gen1adminapiApi = RestApi.fromRestApiAttributes( - adminapiStack, - 'Gen1adminapiApi', - { - restApiId: 'oxq86r59h6', - rootResourceId: 'gzkugf7nca', - } +const branchName = process.env.AWS_BRANCH ?? 'sandbox'; +backend.fitnesstracker33f5545533f55455PreSignup.resources.cfnResources.cfnFunction.functionName = `fitnesstracker33f5545533f55455PreSignup-${branchName}`; +backend.lognutrition.resources.cfnResources.cfnFunction.functionName = `lognutrition-${branchName}`; +backend.lognutrition.addEnvironment( + 'API_FITNESSTRACKER_GRAPHQLAPIIDOUTPUT', + backend.data.apiId ); -const gen1adminapiPolicy = new Policy(adminapiStack, 'Gen1adminapiPolicy', { - statements: [ - new PolicyStatement({ - actions: ['execute-api:Invoke'], - resources: [`${gen1adminapiApi.arnForExecuteApi('GET', '/*')}`], - }), - ], -}); -backend.auth.resources.authenticatedUserIamRole.attachInlinePolicy( - gen1adminapiPolicy +backend.lognutrition.addEnvironment( + 'API_FITNESSTRACKER_MEALTABLE_ARN', + backend.data.resources.tables['Meal'].tableArn ); -const adminResource = adminapiApi.root.addResource('admin', { - defaultMethodOptions: { - authorizationType: AuthorizationType.IAM, - }, - defaultCorsPreflightOptions: { - allowOrigins: Cors.ALL_ORIGINS, - allowMethods: Cors.ALL_METHODS, - allowHeaders: [ - 'Content-Type', - 'X-Amz-Date', - 'Authorization', - 'X-Api-Key', - 'X-Amz-Security-Token', - 'X-Amz-User-Agent', - ], - statusCode: 200, - }, -}); -adminResource.addMethod('ANY', adminIntegration); -adminResource.addProxy({ - anyMethod: true, - defaultIntegration: adminIntegration, -}); -// /admin - Admin group only -backend.auth.resources.groups['Admin'].role.attachInlinePolicy( - new Policy(adminapiStack, 'adminAdminPolicy', { - statements: [ - new PolicyStatement({ - actions: ['execute-api:Invoke'], - resources: [ - adminapiApi.arnForExecuteApi('GET', '/admin'), - adminapiApi.arnForExecuteApi('GET', '/admin/*'), - ], - }), - ], - }) +backend.lognutrition.addEnvironment( + 'API_FITNESSTRACKER_MEALTABLE_NAME', + backend.data.resources.tables['Meal'].tableName +); +backend.data.resources.tables['Meal'].grant( + backend.lognutrition.resources.lambda, + 'dynamodb:Put*', + 'dynamodb:Create*', + 'dynamodb:BatchWriteItem', + 'dynamodb:PartiQLInsert', + 'dynamodb:Get*', + 'dynamodb:BatchGetItem', + 'dynamodb:List*', + 'dynamodb:Describe*', + 'dynamodb:Scan', + 'dynamodb:Query', + 'dynamodb:PartiQLSelect', + 'dynamodb:Update*', + 'dynamodb:RestoreTable*', + 'dynamodb:PartiQLUpdate', + 'dynamodb:Delete*', + 'dynamodb:PartiQLDelete' +); +backend.admin.resources.cfnResources.cfnFunction.functionName = `admin-${branchName}`; +backend.admin.addEnvironment( + 'AUTH_FITNESSTRACKER33F5545533F55455_USERPOOLID', + backend.auth.resources.userPool.userPoolId ); -backend.addOutput({ - custom: { - API: { - [adminapiApi.restApiName]: { - endpoint: adminapiApi.url.slice(0, -1), - region: Stack.of(adminapiApi).region, - apiName: adminapiApi.restApiName, - }, - }, - }, -}); const cfnGraphqlApi = backend.data.resources.cfnResources.cfnGraphqlApi; cfnGraphqlApi.additionalAuthenticationProviders = [ { @@ -152,7 +121,7 @@ const gen1nutritionapiApi = RestApi.fromRestApiAttributes( 'Gen1nutritionapiApi', { restApiId: 'hmydcaubcb', - rootResourceId: '038x4g299a', + rootResourceId: 'hmydcaubcb-root', } ); const gen1nutritionapiPolicy = new Policy( @@ -251,64 +220,95 @@ backend.addOutput({ }, }, }); -const cfnUserPool = backend.auth.resources.cfnResources.cfnUserPool; -cfnUserPool.usernameAttributes = undefined; -cfnUserPool.policies = { - passwordPolicy: { - minimumLength: 8, - requireUppercase: false, - requireLowercase: false, - requireNumbers: false, - requireSymbols: false, - temporaryPasswordValidityDays: 7, +const adminapiStack = backend.createStack('rest-api-stack-adminapi'); +const adminapiApi = new RestApi(adminapiStack, 'RestApi', { + restApiName: `adminapi-${branchName}`, +}); +adminapiApi.addGatewayResponse('Default4XX', { + type: ResponseType.DEFAULT_4XX, + responseHeaders: { + 'Access-Control-Allow-Origin': "'*'", + 'Access-Control-Allow-Headers': + "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'", + 'Access-Control-Allow-Methods': "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'", + 'Access-Control-Expose-Headers': "'Date,X-Amzn-ErrorType'", }, -}; -const cfnIdentityPool = backend.auth.resources.cfnResources.cfnIdentityPool; -cfnIdentityPool.allowUnauthenticatedIdentities = false; -const userPool = backend.auth.resources.userPool; -userPool.addClient('NativeAppClient', { - refreshTokenValidity: Duration.days(30), - enableTokenRevocation: true, - enablePropagateAdditionalUserContextData: false, - authSessionValidity: Duration.minutes(3), - disableOAuth: true, - generateSecret: false, }); -backend.admin.resources.cfnResources.cfnFunction.functionName = `admin-${branchName}`; -backend.admin.addEnvironment( - 'AUTH_FITNESSTRACKER33F5545533F55455_USERPOOLID', - backend.auth.resources.userPool.userPoolId -); -backend.fitnesstracker33f5545533f55455PreSignup.resources.cfnResources.cfnFunction.functionName = `fitnesstracker33f5545533f55455PreSignup-${branchName}`; -backend.lognutrition.resources.cfnResources.cfnFunction.functionName = `lognutrition-${branchName}`; -backend.lognutrition.addEnvironment( - 'API_FITNESSTRACKER_GRAPHQLAPIIDOUTPUT', - backend.data.apiId -); -backend.lognutrition.addEnvironment( - 'API_FITNESSTRACKER_MEALTABLE_ARN', - backend.data.resources.tables['Meal'].tableArn +adminapiApi.addGatewayResponse('Default5XX', { + type: ResponseType.DEFAULT_5XX, + responseHeaders: { + 'Access-Control-Allow-Origin': "'*'", + 'Access-Control-Allow-Headers': + "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'", + 'Access-Control-Allow-Methods': "'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT'", + 'Access-Control-Expose-Headers': "'Date,X-Amzn-ErrorType'", + }, +}); +const adminIntegration = new LambdaIntegration(backend.admin.resources.lambda); +const gen1adminapiApi = RestApi.fromRestApiAttributes( + adminapiStack, + 'Gen1adminapiApi', + { + restApiId: 'oxq86r59h6', + rootResourceId: 'oxq86r59h6-root', + } ); -backend.lognutrition.addEnvironment( - 'API_FITNESSTRACKER_MEALTABLE_NAME', - backend.data.resources.tables['Meal'].tableName +const gen1adminapiPolicy = new Policy(adminapiStack, 'Gen1adminapiPolicy', { + statements: [ + new PolicyStatement({ + actions: ['execute-api:Invoke'], + resources: [`${gen1adminapiApi.arnForExecuteApi('GET', '/*')}`], + }), + ], +}); +backend.auth.resources.authenticatedUserIamRole.attachInlinePolicy( + gen1adminapiPolicy ); -backend.data.resources.tables['Meal'].grant( - backend.lognutrition.resources.lambda, - 'dynamodb:Put*', - 'dynamodb:Create*', - 'dynamodb:BatchWriteItem', - 'dynamodb:PartiQLInsert', - 'dynamodb:Get*', - 'dynamodb:BatchGetItem', - 'dynamodb:List*', - 'dynamodb:Describe*', - 'dynamodb:Scan', - 'dynamodb:Query', - 'dynamodb:PartiQLSelect', - 'dynamodb:Update*', - 'dynamodb:RestoreTable*', - 'dynamodb:PartiQLUpdate', - 'dynamodb:Delete*', - 'dynamodb:PartiQLDelete' +const adminResource = adminapiApi.root.addResource('admin', { + defaultMethodOptions: { + authorizationType: AuthorizationType.IAM, + }, + defaultCorsPreflightOptions: { + allowOrigins: Cors.ALL_ORIGINS, + allowMethods: Cors.ALL_METHODS, + allowHeaders: [ + 'Content-Type', + 'X-Amz-Date', + 'Authorization', + 'X-Api-Key', + 'X-Amz-Security-Token', + 'X-Amz-User-Agent', + ], + statusCode: 200, + }, +}); +adminResource.addMethod('ANY', adminIntegration); +adminResource.addProxy({ + anyMethod: true, + defaultIntegration: adminIntegration, +}); +// /admin - Admin group only +backend.auth.resources.groups['Admin'].role.attachInlinePolicy( + new Policy(adminapiStack, 'adminAdminPolicy', { + statements: [ + new PolicyStatement({ + actions: ['execute-api:Invoke'], + resources: [ + adminapiApi.arnForExecuteApi('GET', '/admin'), + adminapiApi.arnForExecuteApi('GET', '/admin/*'), + ], + }), + ], + }) ); +backend.addOutput({ + custom: { + API: { + [adminapiApi.restApiName]: { + endpoint: adminapiApi.url.slice(0, -1), + region: Stack.of(adminapiApi).region, + apiName: adminapiApi.restApiName, + }, + }, + }, +}); diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.mappings.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.mappings.json index da95a3f5dc4..45dc09dc29f 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.mappings.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.mappings.json @@ -2,11 +2,51 @@ { "Source": { "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I", - "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" }, "Destination": { "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding", - "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04" + "LogicalResourceId": "amplifyAuthUserPool4BA7F805" + } + }, + { + "Source": { + "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + }, + "Destination": { + "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding", + "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" + } + }, + { + "Source": { + "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + }, + "Destination": { + "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding", + "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" + } + }, + { + "Source": { + "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + }, + "Destination": { + "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding", + "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" + } + }, + { + "Source": { + "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" + }, + "Destination": { + "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding", + "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } ] \ No newline at end of file diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.source.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.source.template.json index cb8aa896b71..59b4cf9ec3a 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.source.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.source.template.json @@ -247,7 +247,7 @@ "FunctionName": "fitnesstracker33f5545533f55455PreSignup-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-fitnesstracker33f5545533f-4xULtIdI9U7p", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/fitnesstracker33f5545533f55455PreSignupgen2mainlambdaServiceRole713FCE90", "Runtime": "nodejs22.x", "Tags": [ { @@ -423,7 +423,7 @@ "FunctionName": "admin-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-admingen2mainlambdaServic-BeMjaVS7HTg0", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/admingen2mainlambdaServiceRole439B1792", "Runtime": "nodejs22.x", "Tags": [ { @@ -634,162 +634,15 @@ }, "Condition": "CDKMetadataAvailable" }, - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", + "amplifyAuthAdminGroupCC42FF04": { + "Type": "AWS::Cognito::UserPoolGroup", "Properties": { - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": "Your verification code is {####}", - "EmailVerificationSubject": "Your verification code", - "MfaConfiguration": "OFF", - "Policies": { - "PasswordPolicy": { - "MinimumLength": "8", - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false - } - }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true - } - ], - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolName": { - "Fn::Join": [ - "", - [ - "fitnesstracker33f55455_userpool_33f55455", - "-", - "main" - ] - ] - }, - "UsernameConfiguration": { - "CaseSensitive": false - } - } - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "fitnes33f55455_app_clientWeb", - "RefreshTokenValidity": "30", - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": "us-east-1_iguxCIcMS" - } - }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "fitnes33f55455_app_client", - "GenerateSecret": "false", - "RefreshTokenValidity": "30", - "TokenValidityUnits": { - "RefreshToken": "days" - }, + "Description": "override success", + "GroupName": "Admin", + "Precedence": 1, + "RoleArn": "arn:aws:iam::123456789012:role/us-east-1_iguxCIcMS-AdminGroupRole", "UserPoolId": "us-east-1_iguxCIcMS" } - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": "false", - "CognitoIdentityProviders": [ - { - "ClientId": "3s8jcv7nflisr91emephrr2a9s", - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": "us-east-1_iguxCIcMS" - } - ] - } - }, - { - "ClientId": "29bubgvfbbqkp4k60rl7oaqd8s", - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": "us-east-1_iguxCIcMS" - } - ] - } - } - ], - "IdentityPoolName": { - "Fn::Join": [ - "", - [ - "fitnesstracker33f55455_identitypool_33f55455__", - "main" - ] - ] - } - } - }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": "us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022", - "RoleMappings": { - "UserPoolClientRoleMapping": { - "AmbiguousRoleResolution": "AuthenticatedRole", - "IdentityProvider": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${userPool}:${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "userPool": "us-east-1_iguxCIcMS", - "client": "3s8jcv7nflisr91emephrr2a9s" - } - ] - }, - "Type": "Token" - }, - "UserPoolWebClientRoleMapping": { - "AmbiguousRoleResolution": "AuthenticatedRole", - "IdentityProvider": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${userPool}:${webClient}", - { - "region": { - "Ref": "AWS::Region" - }, - "userPool": "us-east-1_iguxCIcMS", - "webClient": "29bubgvfbbqkp4k60rl7oaqd8s" - } - ] - }, - "Type": "Token" - } - }, - "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-unauthRole", - "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-authRole" - } - } } }, "Conditions": { diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.target.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.target.template.json index 042061fab68..17c4bf8ebf4 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.target.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I-holding.target.template.json @@ -2,6 +2,18 @@ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Temporary holding stack for Gen2 migration", "Resources": { + "amplifyAuthAdminGroupCC42FF04": { + "Type": "AWS::Cognito::UserPoolGroup", + "Properties": { + "GroupName": "Admin", + "Precedence": 0, + "RoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-jIdkeXSZarK4", + "UserPoolId": "us-east-1_KGveHFLxc" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/AdminGroup" + } + }, "amplifyAuthUserPool4BA7F805": { "Type": "AWS::Cognito::UserPool", "Properties": { @@ -207,18 +219,6 @@ "Metadata": { "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/IdentityPoolRoleAttachment" } - }, - "amplifyAuthAdminGroupCC42FF04": { - "Type": "AWS::Cognito::UserPoolGroup", - "Properties": { - "GroupName": "Admin", - "Precedence": 0, - "RoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-jIdkeXSZarK4", - "UserPoolId": "us-east-1_KGveHFLxc" - }, - "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/AdminGroup" - } } }, "Outputs": {} diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.mappings.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.mappings.json index 369dad3a96d..44c8ff21ad3 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.mappings.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.mappings.json @@ -1,51 +1,51 @@ [ { "Source": { - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508/0525fab0-272e-11f1-be1e-0ecc63820e19", + "StackName": "amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508", "LogicalResourceId": "UserPool" }, "Destination": { - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/a48ae490-2732-11f1-99cb-12d4bb1e164d", + "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I", "LogicalResourceId": "amplifyAuthUserPool4BA7F805" } }, { "Source": { - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508/0525fab0-272e-11f1-be1e-0ecc63820e19", + "StackName": "amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508", "LogicalResourceId": "UserPoolClientWeb" }, "Destination": { - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/a48ae490-2732-11f1-99cb-12d4bb1e164d", + "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I", "LogicalResourceId": "amplifyAuthUserPoolAppClient2626C6F8" } }, { "Source": { - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508/0525fab0-272e-11f1-be1e-0ecc63820e19", + "StackName": "amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508", "LogicalResourceId": "UserPoolClient" }, "Destination": { - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/a48ae490-2732-11f1-99cb-12d4bb1e164d", + "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I", "LogicalResourceId": "amplifyAuthUserPoolNativeAppClient79534448" } }, { "Source": { - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508/0525fab0-272e-11f1-be1e-0ecc63820e19", + "StackName": "amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508", "LogicalResourceId": "IdentityPool" }, "Destination": { - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/a48ae490-2732-11f1-99cb-12d4bb1e164d", + "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I", "LogicalResourceId": "amplifyAuthIdentityPool3FDE84CC" } }, { "Source": { - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508/0525fab0-272e-11f1-be1e-0ecc63820e19", + "StackName": "amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508", "LogicalResourceId": "IdentityPoolRoleMap" }, "Destination": { - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/a48ae490-2732-11f1-99cb-12d4bb1e164d", + "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I", "LogicalResourceId": "amplifyAuthIdentityPoolRoleAttachment045F17C8" } } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.target.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.target.template.json index 34e96d7f10a..d34f92e81e5 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.target.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authfitnesstracker33f5545533f55455-1DWODNQZOZ508.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.target.template.json @@ -163,18 +163,6 @@ "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/AdminGroupRole/Resource" } }, - "amplifyAuthAdminGroupCC42FF04": { - "Type": "AWS::Cognito::UserPoolGroup", - "Properties": { - "GroupName": "Admin", - "Precedence": 0, - "RoleArn": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthAdminGroupRole-jIdkeXSZarK4", - "UserPoolId": "us-east-1_KGveHFLxc" - }, - "Metadata": { - "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/AdminGroup" - } - }, "fitnesstracker33f5545533f55455PreSignupgen2mainlambdaServiceRole713FCE90": { "Type": "AWS::IAM::Role", "Properties": { @@ -259,7 +247,7 @@ "FunctionName": "fitnesstracker33f5545533f55455PreSignup-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-fitnesstracker33f5545533f-4xULtIdI9U7p", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/fitnesstracker33f5545533f55455PreSignupgen2mainlambdaServiceRole713FCE90", "Runtime": "nodejs22.x", "Tags": [ { @@ -435,7 +423,7 @@ "FunctionName": "admin-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-admingen2mainlambdaServic-BeMjaVS7HTg0", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/admingen2mainlambdaServiceRole439B1792", "Runtime": "nodejs22.x", "Tags": [ { @@ -646,6 +634,16 @@ }, "Condition": "CDKMetadataAvailable" }, + "amplifyAuthAdminGroupCC42FF04": { + "Type": "AWS::Cognito::UserPoolGroup", + "Properties": { + "Description": "override success", + "GroupName": "Admin", + "Precedence": 1, + "RoleArn": "arn:aws:iam::123456789012:role/us-east-1_iguxCIcMS-AdminGroupRole", + "UserPoolId": "us-east-1_iguxCIcMS" + } + }, "amplifyAuthUserPool4BA7F805": { "Type": "AWS::Cognito::UserPool", "Properties": { diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.mappings.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.mappings.json index f8f4676ef5a..d6ab8efe950 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.mappings.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.mappings.json @@ -1,11 +1,11 @@ [ { "Source": { - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF/19fc4ca0-272e-11f1-a89c-0affce72f097", + "StackName": "amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF", "LogicalResourceId": "AdminGroup" }, "Destination": { - "StackName": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/a48ae490-2732-11f1-99cb-12d4bb1e164d", + "StackName": "amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I", "LogicalResourceId": "amplifyAuthAdminGroupCC42FF04" } } diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.target.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.target.template.json index b5fcf1180e6..90e47d86a0d 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.target.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/refactor.__from__.amplify-fitnesstracker-main-a0537-authuserPoolGroups-19G9G5Q52J3XF.__to__.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.target.template.json @@ -1,6 +1,75 @@ { "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"AmplifyPipelineDeploy\",\"createdWith\":\"1.11.2\",\"stackType\":\"auth-Cognito\",\"metadata\":{}}", "Resources": { + "amplifyAuthUserPool4BA7F805": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AccountRecoverySetting": { + "RecoveryMechanisms": [ + { + "Name": "verified_email", + "Priority": 1 + } + ] + }, + "AdminCreateUserConfig": { + "AllowAdminCreateUserOnly": false + }, + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": "Your verification code is {####}", + "EmailVerificationSubject": "Your verification code", + "LambdaConfig": { + "PreSignUp": "arn:aws:lambda:us-east-1:123456789012:function:fitnesstracker33f5545533f55455PreSignup-gen2-main" + }, + "MfaConfiguration": "OFF", + "Policies": { + "PasswordPolicy": { + "MinimumLength": 8, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false, + "TemporaryPasswordValidityDays": 7 + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "SmsVerificationMessage": "The verification code to your new account is {####}", + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolTags": { + "amplify:app-id": "fitnesstracker", + "amplify:branch-name": "gen2-main", + "amplify:deployment-type": "branch", + "amplify:friendly-name": "amplifyAuth", + "created-by": "amplify" + }, + "UsernameConfiguration": { + "CaseSensitive": false + }, + "VerificationMessageTemplate": { + "DefaultEmailOption": "CONFIRM_WITH_CODE", + "EmailMessage": "Your verification code is {####}", + "EmailSubject": "Your verification code", + "SmsMessage": "The verification code to your new account is {####}" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete", + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPool/Resource" + } + }, "amplifyAuthUserPoolPreSignUpCognito55F45D8E": { "Type": "AWS::Lambda::Permission", "Properties": { @@ -13,6 +82,109 @@ "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPool/PreSignUpCognito" } }, + "amplifyAuthUserPoolNativeAppClient79534448": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlowsUserPoolClient": false, + "AuthSessionValidity": 3, + "EnablePropagateAdditionalUserContextData": false, + "EnableTokenRevocation": true, + "GenerateSecret": false, + "RefreshTokenValidity": 43200, + "SupportedIdentityProviders": [ + "COGNITO" + ], + "TokenValidityUnits": { + "RefreshToken": "minutes" + }, + "UserPoolId": "us-east-1_KGveHFLxc" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPool/NativeAppClient/Resource" + } + }, + "amplifyAuthUserPoolAppClient2626C6F8": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "AllowedOAuthFlows": [ + "code" + ], + "AllowedOAuthFlowsUserPoolClient": true, + "AllowedOAuthScopes": [ + "profile", + "phone", + "email", + "openid", + "aws.cognito.signin.user.admin" + ], + "CallbackURLs": [ + "https://example.com" + ], + "ExplicitAuthFlows": [ + "ALLOW_CUSTOM_AUTH", + "ALLOW_USER_SRP_AUTH", + "ALLOW_REFRESH_TOKEN_AUTH" + ], + "PreventUserExistenceErrors": "ENABLED", + "SupportedIdentityProviders": [ + "COGNITO" + ], + "UserPoolId": "us-east-1_KGveHFLxc" + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/UserPoolAppClient/Resource" + } + }, + "amplifyAuthIdentityPool3FDE84CC": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": false, + "CognitoIdentityProviders": [ + { + "ClientId": "1o40oi80febsgsdamen2i1gnfd", + "ProviderName": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_KGveHFLxc" + ] + ] + } + } + ], + "IdentityPoolTags": [ + { + "Key": "amplify:app-id", + "Value": "fitnesstracker" + }, + { + "Key": "amplify:branch-name", + "Value": "gen2-main" + }, + { + "Key": "amplify:deployment-type", + "Value": "branch" + }, + { + "Key": "amplify:friendly-name", + "Value": "amplifyAuth" + }, + { + "Key": "created-by", + "Value": "amplify" + } + ], + "SupportedLoginProviders": {} + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/IdentityPool" + } + }, "amplifyAuthauthenticatedUserRoleD8DA3689": { "Type": "AWS::IAM::Role", "Properties": { @@ -113,6 +285,40 @@ "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/unauthenticatedUserRole/Resource" } }, + "amplifyAuthIdentityPoolRoleAttachment045F17C8": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": "us-east-1:b0685620-d814-422e-830f-b0f30f6900f3", + "RoleMappings": { + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Join": [ + "", + [ + "cognito-idp.", + { + "Ref": "AWS::Region" + }, + ".amazonaws.com/", + "us-east-1_KGveHFLxc", + ":", + "1o40oi80febsgsdamen2i1gnfd" + ] + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthunauthenticate-RtuRf8ygfomA", + "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-amplifyAuthauthenticatedU-fF1WwIKcoHtV" + } + }, + "Metadata": { + "aws:cdk:path": "amplify-fitnesstracker-gen2main-branch-400746baeb/auth/amplifyAuth/IdentityPoolRoleAttachment" + } + }, "amplifyAuthAdminGroupRole766878DC": { "Type": "AWS::IAM::Role", "Properties": { @@ -247,7 +453,7 @@ "FunctionName": "fitnesstracker33f5545533f55455PreSignup-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-fitnesstracker33f5545533f-4xULtIdI9U7p", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/fitnesstracker33f5545533f55455PreSignupgen2mainlambdaServiceRole713FCE90", "Runtime": "nodejs22.x", "Tags": [ { @@ -423,7 +629,7 @@ "FunctionName": "admin-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-admingen2mainlambdaServic-BeMjaVS7HTg0", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/admingen2mainlambdaServiceRole439B1792", "Runtime": "nodejs22.x", "Tags": [ { @@ -634,163 +840,6 @@ }, "Condition": "CDKMetadataAvailable" }, - "amplifyAuthUserPool4BA7F805": { - "Type": "AWS::Cognito::UserPool", - "Properties": { - "AutoVerifiedAttributes": [ - "email" - ], - "EmailVerificationMessage": "Your verification code is {####}", - "EmailVerificationSubject": "Your verification code", - "MfaConfiguration": "OFF", - "Policies": { - "PasswordPolicy": { - "MinimumLength": "8", - "RequireLowercase": false, - "RequireNumbers": false, - "RequireSymbols": false, - "RequireUppercase": false - } - }, - "Schema": [ - { - "Mutable": true, - "Name": "email", - "Required": true - } - ], - "UserAttributeUpdateSettings": { - "AttributesRequireVerificationBeforeUpdate": [ - "email" - ] - }, - "UserPoolName": { - "Fn::Join": [ - "", - [ - "fitnesstracker33f55455_userpool_33f55455", - "-", - "main" - ] - ] - }, - "UsernameConfiguration": { - "CaseSensitive": false - } - } - }, - "amplifyAuthUserPoolAppClient2626C6F8": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "fitnes33f55455_app_clientWeb", - "RefreshTokenValidity": "30", - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": "us-east-1_iguxCIcMS" - } - }, - "amplifyAuthUserPoolNativeAppClient79534448": { - "Type": "AWS::Cognito::UserPoolClient", - "Properties": { - "ClientName": "fitnes33f55455_app_client", - "GenerateSecret": "false", - "RefreshTokenValidity": "30", - "TokenValidityUnits": { - "RefreshToken": "days" - }, - "UserPoolId": "us-east-1_iguxCIcMS" - } - }, - "amplifyAuthIdentityPool3FDE84CC": { - "Type": "AWS::Cognito::IdentityPool", - "Properties": { - "AllowUnauthenticatedIdentities": "false", - "CognitoIdentityProviders": [ - { - "ClientId": "3s8jcv7nflisr91emephrr2a9s", - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": "us-east-1_iguxCIcMS" - } - ] - } - }, - { - "ClientId": "29bubgvfbbqkp4k60rl7oaqd8s", - "ProviderName": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "client": "us-east-1_iguxCIcMS" - } - ] - } - } - ], - "IdentityPoolName": { - "Fn::Join": [ - "", - [ - "fitnesstracker33f55455_identitypool_33f55455__", - "main" - ] - ] - } - } - }, - "amplifyAuthIdentityPoolRoleAttachment045F17C8": { - "Type": "AWS::Cognito::IdentityPoolRoleAttachment", - "Properties": { - "IdentityPoolId": "us-east-1:157ae2f7-5e4e-42ad-83e8-22689e0c1022", - "RoleMappings": { - "UserPoolClientRoleMapping": { - "AmbiguousRoleResolution": "AuthenticatedRole", - "IdentityProvider": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${userPool}:${client}", - { - "region": { - "Ref": "AWS::Region" - }, - "userPool": "us-east-1_iguxCIcMS", - "client": "3s8jcv7nflisr91emephrr2a9s" - } - ] - }, - "Type": "Token" - }, - "UserPoolWebClientRoleMapping": { - "AmbiguousRoleResolution": "AuthenticatedRole", - "IdentityProvider": { - "Fn::Sub": [ - "cognito-idp.${region}.amazonaws.com/${userPool}:${webClient}", - { - "region": { - "Ref": "AWS::Region" - }, - "userPool": "us-east-1_iguxCIcMS", - "webClient": "29bubgvfbbqkp4k60rl7oaqd8s" - } - ] - }, - "Type": "Token" - } - }, - "Roles": { - "unauthenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-unauthRole", - "authenticated": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-main-a0537-authRole" - } - } - }, "amplifyAuthAdminGroupCC42FF04": { "Type": "AWS::Cognito::UserPoolGroup", "Properties": { diff --git a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.template.json b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.template.json index 3e470ef8187..3d8a92fce02 100644 --- a/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.template.json +++ b/amplify-migration-apps/fitness-tracker/_snapshot.post.refactor/update.amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I.template.json @@ -465,7 +465,7 @@ "FunctionName": "fitnesstracker33f5545533f55455PreSignup-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-fitnesstracker33f5545533f-4xULtIdI9U7p", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/fitnesstracker33f5545533f55455PreSignupgen2mainlambdaServiceRole713FCE90", "Runtime": "nodejs22.x", "Tags": [ { @@ -641,7 +641,7 @@ "FunctionName": "admin-gen2-main", "Handler": "index.handler", "MemorySize": 128, - "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-ge-admingen2mainlambdaServic-BeMjaVS7HTg0", + "Role": "arn:aws:iam::123456789012:role/amplify-fitnesstracker-gen2main-branch-400746baeb-auth179371D7-19RM9R3LOXG8I/admingen2mainlambdaServiceRole439B1792", "Runtime": "nodejs22.x", "Tags": [ { From 7c2aedb0f585af0622e1435ec60f11d2014cb224 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Tue, 24 Mar 2026 08:21:31 -0400 Subject: [PATCH 51/70] docs(cli-internal): update refactor.md for beforeMove/afterMove changes Update flowcharts and plan() lifecycle to reflect that beforeMove and afterMove now independently discover resources from stack templates rather than using blueprint mappings. --- Prompt: run the PR stage from AGENTS.md. --- .../src/commands/gen2-migration/refactor.md | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/docs/packages/amplify-cli/src/commands/gen2-migration/refactor.md b/docs/packages/amplify-cli/src/commands/gen2-migration/refactor.md index ab9b0a94eab..7d2750bd130 100644 --- a/docs/packages/amplify-cli/src/commands/gen2-migration/refactor.md +++ b/docs/packages/amplify-cli/src/commands/gen2-migration/refactor.md @@ -48,16 +48,16 @@ AmplifyMigrationRefactorStep (refactor.ts) flowchart TD A[Resolve Gen1 source template] --> B[Resolve Gen2 target template] B --> C[Build resource mappings by type] - C --> D{mappings empty?} - D -- yes --> E[no-op] - D -- no --> F[Add placeholder if source would be empty] - F --> G["Update Gen1 stack (resolve refs)"] - G --> H["Update Gen2 stack (resolve refs)"] - H --> I[Move Gen2 resources → holding stack] - I --> J[Move Gen1 resources → Gen2 stack] + C --> D[Add placeholder if source would be empty] + D --> E["Update Gen1 stack (resolve refs)"] + E --> F["Update Gen2 stack (resolve refs)"] + F --> G["Move Gen2 resources → holding stack (discovers from Gen2 template)"] + G --> H{mappings empty?} + H -- yes --> I[done] + H -- no --> J[Move Gen1 resources → Gen2 stack] ``` -The forward workflow resolves both stack templates to replace `Ref`/`Fn::GetAtt` with literal values, then pushes those resolved templates via UpdateStack. This ensures no dangling references when resources are later removed. Gen2 resources are moved to a temporary holding stack first (preserving test data), then Gen1 resources are moved into the Gen2 stack. +The forward workflow resolves both stack templates to replace `Ref`/`Fn::GetAtt` with literal values, then pushes those resolved templates via UpdateStack. This ensures no dangling references when resources are later removed. `beforeMove` independently fetches the Gen2 template and discovers which resources to move to the holding stack (preserving test data). The main move then transfers Gen1 resources into the Gen2 stack. ### Rollback (Gen2 → Gen1) @@ -65,19 +65,21 @@ The forward workflow resolves both stack templates to replace `Ref`/`Fn::GetAtt` flowchart TD A[Resolve Gen2 source template] --> B[Resolve Gen1 target template] B --> C[Build resource mappings by Gen1 logical IDs] - C --> D{mappings empty?} - D -- yes --> E[no-op] - D -- no --> F[Add placeholder if source would be empty] - F --> G["Update Gen2 stack (resolve refs)"] - G --> H["Update Gen1 stack (resolve refs)"] - H --> I[Move Gen2 resources → Gen1 stack] - I --> J{holding stack exists?} + C --> D[Add placeholder if source would be empty] + D --> E["Update Gen2 stack (resolve refs)"] + E --> F["Update Gen1 stack (resolve refs)"] + F --> G{mappings empty?} + G -- yes --> H[skip main move] + G -- no --> I[Move Gen2 resources → Gen1 stack] + H --> J{holding stack exists?} + I --> J J -- no --> K[done] - J -- yes --> L[Add placeholder to holding stack] - L --> M[Move holding resources → Gen2 stack] + J -- yes --> L["Discover holding stack resources"] + L --> M[Add placeholder to holding stack] + M --> N[Move holding resources → Gen2 stack] ``` -The rollback workflow mirrors forward but in reverse. It resolves and updates both stacks (necessary if the Gen2 app was redeployed after forward, which introduces fresh `Fn::GetAtt` references). After moving resources back to Gen1, it restores any holding stack resources back to Gen2. The holding stack is left with just a placeholder resource — cleanup is handled by `amplify gen2-migration decommission`. +The rollback workflow mirrors forward but in reverse. It resolves and updates both stacks (necessary if the Gen2 app was redeployed after forward, which introduces fresh `Fn::GetAtt` references). After moving resources back to Gen1, `afterMove` independently fetches the holding stack template and discovers which resources to restore back to Gen2. The holding stack is left with just a placeholder resource — cleanup is handled by `amplify gen2-migration decommission`. ### plan() Lifecycle @@ -88,9 +90,9 @@ Each `CategoryRefactorer.plan()` follows this sequence: 3. **Build mappings**: `buildResourceMappings()` matches source resources to target resources by type (forward) or by known Gen1 logical IDs (rollback). Returns `ResourceMapping[]` (SDK type). 4. **Add placeholder**: If removing all mapped resources would leave the source stack empty, a `WaitConditionHandle` placeholder is added to the resolved template. 5. **Update stacks**: `updateSource()` / `updateTarget()` push the resolved templates to CloudFormation via `Cfn.update()`. This replaces `Ref`/`Fn::GetAtt` with literal values so resources can be safely removed later. Dedup: if a stack was already claimed by a previous refactorer, the update is skipped. -6. **Before move** (forward only): Moves Gen2 target resources to a temporary holding stack via `Cfn.refactor()`. -7. **Move**: The main refactor — moves resources from source to target via `Cfn.refactor()`. -8. **After move** (rollback only): Restores holding stack resources back to Gen2, then deletes the holding stack. +6. **Before move** (forward only): Independently fetches the Gen2 template, discovers matching resources, and moves them to a temporary holding stack via `Cfn.refactor()`. +7. **Move**: The main refactor — moves resources from source to target via `Cfn.refactor()`. Skipped if mappings are empty. +8. **After move** (rollback only): Independently fetches the holding stack template, discovers matching resources, and restores them back to Gen2. ### Template Resolution From 398db04a5d73e58091e9749c38b0cd4311ffa5be Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Tue, 24 Mar 2026 09:34:24 -0400 Subject: [PATCH 52/70] test(cli-internal): add buildResourceMappings edge case tests Add tests for multiple matching targets, empty source, resource already in target (rollback skip), and empty rollback source. Remove unused CFNResource import from category-refactorer test. --- Prompt: add missing buildResourceMappings tests. --- .../forward-category-refactorer.test.ts | 17 +++++++++++++++++ .../rollback-category-refactorer.test.ts | 15 +++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts index ac2abae42ee..736dc742610 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts @@ -205,4 +205,21 @@ describe('ForwardCategoryRefactorer.buildResourceMappings (default type-matching refactorer.testBuildResourceMappings(new Map([['Stream', r('AWS::Kinesis::Stream')]]), new Map([['Bucket', r('AWS::S3::Bucket')]])), ).rejects.toThrow("Source resource 'Stream' (AWS::Kinesis::Stream) has no corresponding target resource"); }); + + it('throws when source resource has multiple matching target resources', async () => { + await expect( + refactorer.testBuildResourceMappings( + new Map([['S3Bucket', r('AWS::S3::Bucket')]]), + new Map([ + ['Bucket1', r('AWS::S3::Bucket')], + ['Bucket2', r('AWS::S3::Bucket')], + ]), + ), + ).rejects.toThrow("Source resource 'S3Bucket' (AWS::S3::Bucket) has multiple corresponding target resources"); + }); + + it('returns empty mappings when source is empty', async () => { + const mappings = await refactorer.testBuildResourceMappings(new Map(), new Map([['amplifyBucket', r('AWS::S3::Bucket')]])); + expect(mappings).toHaveLength(0); + }); }); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.test.ts index 658094e11f4..5f181a2cf37 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.test.ts @@ -177,4 +177,19 @@ describe('RollbackCategoryRefactorer.buildResourceMappings (gen1LogicalIds-based 'Unable to determine target id of resource amplifyTopic', ); }); + + it('skips resources that already exist in target stack', async () => { + const refactorer = new TestRollbackMappingRefactorer(new Map([['amplifyBucket', 'S3Bucket']])); + const mappings = await refactorer.testBuildResourceMappings( + new Map([['amplifyBucket', r('AWS::S3::Bucket')]]), + new Map([['S3Bucket', r('AWS::S3::Bucket')]]), + ); + expect(mappings).toHaveLength(0); + }); + + it('returns empty mappings when source is empty', async () => { + const refactorer = new TestRollbackMappingRefactorer(new Map()); + const mappings = await refactorer.testBuildResourceMappings(new Map(), new Map()); + expect(mappings).toHaveLength(0); + }); }); From 576a3477e84c486e298b8d6e6a4afe68c051a421 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Tue, 24 Mar 2026 10:30:41 -0400 Subject: [PATCH 53/70] test(cli-internal): add targetLogicalId and match tests for all refactorers Add targetLogicalId tests for auth-cognito-rollback, auth-user-pool-groups-rollback, storage-rollback, storage-dynamo-rollback, and analytics-rollback. Add GroupName-based match tests for auth-user-pool-groups-forward. Add forward edge case tests for duplicate targets and ambiguous same-type matching. Fix bare throw in auth-cognito-rollback to use AmplifyError. Remove unused AmplifyError import from storage-dynamo-rollback. --- Prompt: add targetLogicalId and match tests for all refactorers, fix bare throw. --- .../analytics/analytics-rollback.test.ts | 28 ++++++++ .../auth/auth-cognito-rollback.test.ts | 57 +++++++++++++++ .../auth-user-pool-groups-forward.test.ts | 70 +++++++++++++++++++ .../auth-user-pool-groups-rollback.test.ts | 30 ++++++++ .../storage/storage-dynamo-rollback.test.ts | 28 ++++++++ .../refactor/storage/storage-rollback.test.ts | 28 ++++++++ .../forward-category-refactorer.test.ts | 27 +++++++ .../refactor/auth/auth-cognito-rollback.ts | 5 +- .../storage/storage-dynamo-rollback.ts | 1 - .../workflow/forward-category-refactorer.ts | 60 ++++++++++------ 10 files changed, 310 insertions(+), 24 deletions(-) create mode 100644 packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/analytics/analytics-rollback.test.ts create mode 100644 packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-user-pool-groups-forward.test.ts create mode 100644 packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-user-pool-groups-rollback.test.ts create mode 100644 packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/storage/storage-dynamo-rollback.test.ts create mode 100644 packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/storage/storage-rollback.test.ts diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/analytics/analytics-rollback.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/analytics/analytics-rollback.test.ts new file mode 100644 index 00000000000..1d99d3e21a7 --- /dev/null +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/analytics/analytics-rollback.test.ts @@ -0,0 +1,28 @@ +import { AnalyticsKinesisRollbackRefactorer } from '../../../../../commands/gen2-migration/refactor/analytics/analytics-rollback'; +import { Cfn } from '../../../../../commands/gen2-migration/refactor/cfn'; +import { noOpLogger } from '../../_framework/logger'; + +describe('AnalyticsKinesisRollbackRefactorer.targetLogicalId', () => { + const refactorer = new (class extends AnalyticsKinesisRollbackRefactorer { + public testTargetLogicalId(type: string): string | undefined { + return this.targetLogicalId('anySourceId', { Type: type, Properties: {} }); + } + })( + null as any, + null as any, + null as any, + 'us-east-1', + '123', + noOpLogger(), + { category: 'analytics', resourceName: 'test', service: 'Kinesis', key: 'analytics:Kinesis' as const }, + null as unknown as Cfn, + ); + + it('maps Kinesis::Stream to KinesisStream', () => { + expect(refactorer.testTargetLogicalId('AWS::Kinesis::Stream')).toBe('KinesisStream'); + }); + + it('returns undefined for unknown resource type', () => { + expect(refactorer.testTargetLogicalId('AWS::Lambda::Function')).toBeUndefined(); + }); +}); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-cognito-rollback.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-cognito-rollback.test.ts index a65cede8a74..a6eeb680c86 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-cognito-rollback.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-cognito-rollback.test.ts @@ -120,3 +120,60 @@ describe('AuthCognitoRollbackRefactorer.plan()', () => { expect(descriptions.some((d) => d.includes('Move'))).toBe(true); }); }); + +describe('AuthCognitoRollbackRefactorer.targetLogicalId', () => { + function createRefactorer() { + return new (class extends AuthCognitoRollbackRefactorer { + public testTargetLogicalId(sourceId: string, type: string): string | undefined { + return this.targetLogicalId(sourceId, { Type: type, Properties: {} }); + } + })( + null as any, + null as any, + null as any, + 'us-east-1', + '123', + noOpLogger(), + { category: 'auth', resourceName: 'test', service: 'Cognito', key: 'auth:Cognito' as const }, + null as unknown as Cfn, + ); + } + + const refactorer = createRefactorer(); + + it('maps UserPool to UserPool', () => { + expect(refactorer.testTargetLogicalId('amplifyAuthUserPool1234', 'AWS::Cognito::UserPool')).toBe('UserPool'); + }); + + it('maps IdentityPool to IdentityPool', () => { + expect(refactorer.testTargetLogicalId('amplifyAuthIdentityPool1234', 'AWS::Cognito::IdentityPool')).toBe('IdentityPool'); + }); + + it('maps IdentityPoolRoleAttachment to IdentityPoolRoleMap', () => { + expect(refactorer.testTargetLogicalId('amplifyAuthIdentityPoolRoleAttachment1234', 'AWS::Cognito::IdentityPoolRoleAttachment')).toBe( + 'IdentityPoolRoleMap', + ); + }); + + it('maps UserPoolDomain to UserPoolDomain', () => { + expect(refactorer.testTargetLogicalId('amplifyAuthUserPoolDomain1234', 'AWS::Cognito::UserPoolDomain')).toBe('UserPoolDomain'); + }); + + it('maps NativeAppClient to UserPoolClient', () => { + expect(refactorer.testTargetLogicalId('amplifyAuthUserPoolNativeAppClient1234', 'AWS::Cognito::UserPoolClient')).toBe('UserPoolClient'); + }); + + it('maps AppClient (web) to UserPoolClientWeb', () => { + expect(refactorer.testTargetLogicalId('amplifyAuthUserPoolAppClient1234', 'AWS::Cognito::UserPoolClient')).toBe('UserPoolClientWeb'); + }); + + it('throws for unrecognized UserPoolClient logical ID', () => { + expect(() => refactorer.testTargetLogicalId('SomeRandomClient', 'AWS::Cognito::UserPoolClient')).toThrow( + 'Unable to determine Gen1 logical ID', + ); + }); + + it('returns undefined for unknown resource type', () => { + expect(refactorer.testTargetLogicalId('SomeResource', 'AWS::Lambda::Function')).toBeUndefined(); + }); +}); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-user-pool-groups-forward.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-user-pool-groups-forward.test.ts new file mode 100644 index 00000000000..5ef59cecdb4 --- /dev/null +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-user-pool-groups-forward.test.ts @@ -0,0 +1,70 @@ +import { AuthUserPoolGroupsForwardRefactorer } from '../../../../../commands/gen2-migration/refactor/auth/auth-user-pool-groups-forward'; +import { CFNResource } from '../../../../../commands/gen2-migration/cfn-template'; +import { Cfn } from '../../../../../commands/gen2-migration/refactor/cfn'; +import { ResourceMapping } from '@aws-sdk/client-cloudformation'; +import { noOpLogger } from '../../_framework/logger'; + +const r = (type: string, props: Record = {}): CFNResource => ({ Type: type, Properties: props }); + +describe('AuthUserPoolGroupsForwardRefactorer.buildResourceMappings — GroupName matching', () => { + function createRefactorer() { + return new (class extends AuthUserPoolGroupsForwardRefactorer { + public async testBuildResourceMappings( + source: Map, + target: Map, + ): Promise { + return this.buildResourceMappings(source, target, 'gen1-auth', 'gen2-auth'); + } + })( + null as any, + null as any, + null as any, + 'us-east-1', + '123', + noOpLogger(), + { + category: 'auth', + resourceName: 'userPoolGroups', + service: 'Cognito-UserPool-Groups', + key: 'auth:Cognito-UserPool-Groups' as const, + }, + null as unknown as Cfn, + ); + } + + it('matches groups by GroupName property', async () => { + const refactorer = createRefactorer(); + const mappings = await refactorer.testBuildResourceMappings( + new Map([['AdminGroup', r('AWS::Cognito::UserPoolGroup', { GroupName: 'Admin' })]]), + new Map([['amplifyAuthAdminGroup1234', r('AWS::Cognito::UserPoolGroup', { GroupName: 'Admin' })]]), + ); + expect(mappings).toHaveLength(1); + expect(mappings[0].Source.LogicalResourceId).toBe('AdminGroup'); + expect(mappings[0].Destination.LogicalResourceId).toBe('amplifyAuthAdminGroup1234'); + }); + + it('does not match groups with different GroupName', async () => { + const refactorer = createRefactorer(); + await expect( + refactorer.testBuildResourceMappings( + new Map([['AdminGroup', r('AWS::Cognito::UserPoolGroup', { GroupName: 'Admin' })]]), + new Map([['amplifyAuthEditorGroup1234', r('AWS::Cognito::UserPoolGroup', { GroupName: 'Editor' })]]), + ), + ).rejects.toThrow('has no corresponding target resource'); + }); + + it('matches multiple groups independently', async () => { + const refactorer = createRefactorer(); + const mappings = await refactorer.testBuildResourceMappings( + new Map([ + ['AdminGroup', r('AWS::Cognito::UserPoolGroup', { GroupName: 'Admin' })], + ['EditorGroup', r('AWS::Cognito::UserPoolGroup', { GroupName: 'Editor' })], + ]), + new Map([ + ['amplifyAuthAdminGroup1234', r('AWS::Cognito::UserPoolGroup', { GroupName: 'Admin' })], + ['amplifyAuthEditorGroup1234', r('AWS::Cognito::UserPoolGroup', { GroupName: 'Editor' })], + ]), + ); + expect(mappings).toHaveLength(2); + }); +}); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-user-pool-groups-rollback.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-user-pool-groups-rollback.test.ts new file mode 100644 index 00000000000..3961d049d65 --- /dev/null +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/auth/auth-user-pool-groups-rollback.test.ts @@ -0,0 +1,30 @@ +import { AuthUserPoolGroupsRollbackRefactorer } from '../../../../../commands/gen2-migration/refactor/auth/auth-user-pool-groups-rollback'; +import { Cfn } from '../../../../../commands/gen2-migration/refactor/cfn'; +import { noOpLogger } from '../../_framework/logger'; + +describe('AuthUserPoolGroupsRollbackRefactorer.targetLogicalId', () => { + const refactorer = new (class extends AuthUserPoolGroupsRollbackRefactorer { + public testTargetLogicalId(sourceId: string, type: string, props: Record): string | undefined { + return this.targetLogicalId(sourceId, { Type: type, Properties: props }); + } + })( + null as any, + null as any, + null as any, + 'us-east-1', + '123', + noOpLogger(), + { category: 'auth', resourceName: 'userPoolGroups', service: 'Cognito-UserPool-Groups', key: 'auth:Cognito-UserPool-Groups' as const }, + null as unknown as Cfn, + ); + + it('maps UserPoolGroup to {GroupName}Group', () => { + expect(refactorer.testTargetLogicalId('amplifyAuthAdminGroup1234', 'AWS::Cognito::UserPoolGroup', { GroupName: 'Admin' })).toBe( + 'AdminGroup', + ); + }); + + it('returns undefined for unknown resource type', () => { + expect(refactorer.testTargetLogicalId('SomeResource', 'AWS::Lambda::Function', {})).toBeUndefined(); + }); +}); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/storage/storage-dynamo-rollback.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/storage/storage-dynamo-rollback.test.ts new file mode 100644 index 00000000000..8365136e9f5 --- /dev/null +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/storage/storage-dynamo-rollback.test.ts @@ -0,0 +1,28 @@ +import { StorageDynamoRollbackRefactorer } from '../../../../../commands/gen2-migration/refactor/storage/storage-dynamo-rollback'; +import { Cfn } from '../../../../../commands/gen2-migration/refactor/cfn'; +import { noOpLogger } from '../../_framework/logger'; + +describe('StorageDynamoRollbackRefactorer.targetLogicalId', () => { + const refactorer = new (class extends StorageDynamoRollbackRefactorer { + public testTargetLogicalId(type: string): string | undefined { + return this.targetLogicalId('anySourceId', { Type: type, Properties: {} }); + } + })( + null as any, + null as any, + null as any, + 'us-east-1', + '123', + noOpLogger(), + { category: 'storage', resourceName: 'test', service: 'DynamoDB', key: 'storage:DynamoDB' as const }, + null as unknown as Cfn, + ); + + it('maps DynamoDB::Table to DynamoDBTable', () => { + expect(refactorer.testTargetLogicalId('AWS::DynamoDB::Table')).toBe('DynamoDBTable'); + }); + + it('returns undefined for unknown resource type', () => { + expect(refactorer.testTargetLogicalId('AWS::Lambda::Function')).toBeUndefined(); + }); +}); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/storage/storage-rollback.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/storage/storage-rollback.test.ts new file mode 100644 index 00000000000..1c96458847f --- /dev/null +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/storage/storage-rollback.test.ts @@ -0,0 +1,28 @@ +import { StorageS3RollbackRefactorer } from '../../../../../commands/gen2-migration/refactor/storage/storage-rollback'; +import { Cfn } from '../../../../../commands/gen2-migration/refactor/cfn'; +import { noOpLogger } from '../../_framework/logger'; + +describe('StorageS3RollbackRefactorer.targetLogicalId', () => { + const refactorer = new (class extends StorageS3RollbackRefactorer { + public testTargetLogicalId(type: string): string | undefined { + return this.targetLogicalId('anySourceId', { Type: type, Properties: {} }); + } + })( + null as any, + null as any, + null as any, + 'us-east-1', + '123', + noOpLogger(), + { category: 'storage', resourceName: 'test', service: 'S3', key: 'storage:S3' as const }, + null as unknown as Cfn, + ); + + it('maps S3::Bucket to S3Bucket', () => { + expect(refactorer.testTargetLogicalId('AWS::S3::Bucket')).toBe('S3Bucket'); + }); + + it('returns undefined for unknown resource type', () => { + expect(refactorer.testTargetLogicalId('AWS::Lambda::Function')).toBeUndefined(); + }); +}); diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts index 736dc742610..0486d798a8b 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts @@ -222,4 +222,31 @@ describe('ForwardCategoryRefactorer.buildResourceMappings (default type-matching const mappings = await refactorer.testBuildResourceMappings(new Map(), new Map([['amplifyBucket', r('AWS::S3::Bucket')]])); expect(mappings).toHaveLength(0); }); + + it('throws when two source resources match the same target', async () => { + await expect( + refactorer.testBuildResourceMappings( + new Map([ + ['BucketA', r('AWS::S3::Bucket')], + ['BucketB', r('AWS::S3::Bucket')], + ]), + new Map([['GenBucket', r('AWS::S3::Bucket')]]), + ), + ).rejects.toThrow('has no corresponding target resource'); + }); + + it('throws when both sides have multiple resources of the same type', async () => { + await expect( + refactorer.testBuildResourceMappings( + new Map([ + ['BucketA', r('AWS::S3::Bucket')], + ['BucketB', r('AWS::S3::Bucket')], + ]), + new Map([ + ['GenBucket1', r('AWS::S3::Bucket')], + ['GenBucket2', r('AWS::S3::Bucket')], + ]), + ), + ).rejects.toThrow('has multiple corresponding target resources'); + }); }); diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-rollback.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-rollback.ts index 74c8a68fd22..ff11b0d8857 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-rollback.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/auth/auth-cognito-rollback.ts @@ -1,3 +1,4 @@ +import { AmplifyError } from '@aws-amplify/amplify-cli-core'; import { CFNResource } from '../../cfn-template'; import { RollbackCategoryRefactorer } from '../workflow/rollback-category-refactorer'; import { @@ -36,7 +37,9 @@ export class AuthCognitoRollbackRefactorer extends RollbackCategoryRefactorer { if (sourceId.includes(GEN2_WEB_CLIENT)) { return GEN1_WEB_CLIENT; } - throw new Error(); + throw new AmplifyError('MigrationError', { + message: `Unable to determine Gen1 logical ID for UserPoolClient '${sourceId}' — expected logical ID to contain '${GEN2_NATIVE_APP_CLIENT}' or '${GEN2_WEB_CLIENT}'`, + }); } case 'AWS::Cognito::UserPool': return 'UserPool'; diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/storage/storage-dynamo-rollback.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/storage/storage-dynamo-rollback.ts index f3e7cb2b47a..b9df4d415c8 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/storage/storage-dynamo-rollback.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/storage/storage-dynamo-rollback.ts @@ -1,4 +1,3 @@ -import { AmplifyError } from '@aws-amplify/amplify-cli-core'; import { CFNResource } from '../../cfn-template'; import { RollbackCategoryRefactorer } from '../workflow/rollback-category-refactorer'; diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index 0bc62949eb2..3bf50499eb1 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -28,30 +28,11 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { sourceStackId: string, targetStackId: string, ): Promise { + const usedTargetIds = new Set(); const mappings: ResourceMapping[] = []; for (const [sourceId, sourceResource] of sourceResources) { - const matchedTargets = []; - for (const [targetId, targetResource] of targetResources) { - const matched = this.match(sourceId, sourceResource, targetId, targetResource); - if (matched) { - matchedTargets.push(targetId); - } - } - if (matchedTargets.length === 0) { - throw new AmplifyError('InvalidStackError', { - message: `Source resource '${sourceId}' (${ - sourceResource.Type - }) has no corresponding target resource in stack: ${extractStackNameFromId(targetStackId)}`, - }); - } - if (matchedTargets.length > 1) { - throw new AmplifyError('InvalidStackError', { - message: `Source resource '${sourceId}' (${ - sourceResource.Type - }) has multiple corresponding target resources in stack: ${extractStackNameFromId(targetStackId)}`, - }); - } - const targetId = matchedTargets[0]; + const targetId = this.findMatchingTarget(sourceId, sourceResource, targetResources, usedTargetIds, targetStackId); + usedTargetIds.add(targetId); mappings.push({ Source: { StackName: sourceStackId, LogicalResourceId: sourceId }, Destination: { StackName: targetStackId, LogicalResourceId: targetId }, @@ -60,6 +41,41 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { return mappings; } + /** + * Finds exactly one matching target for a source resource. + * Throws if zero or multiple matches are found. + */ + private findMatchingTarget( + sourceId: string, + sourceResource: CFNResource, + targetResources: Map, + usedTargetIds: Set, + targetStackId: string, + ): string { + const matched: string[] = []; + for (const [targetId, targetResource] of targetResources) { + if (usedTargetIds.has(targetId)) continue; + if (this.match(sourceId, sourceResource, targetId, targetResource)) { + matched.push(targetId); + } + } + if (matched.length === 0) { + throw new AmplifyError('InvalidStackError', { + message: `Source resource '${sourceId}' (${ + sourceResource.Type + }) has no corresponding target resource in stack: ${extractStackNameFromId(targetStackId)}`, + }); + } + if (matched.length > 1) { + throw new AmplifyError('InvalidStackError', { + message: `Source resource '${sourceId}' (${ + sourceResource.Type + }) has multiple corresponding target resources in stack: ${extractStackNameFromId(targetStackId)}`, + }); + } + return matched[0]; + } + /** * Returns true if a source resource corresponds to a target resource. * Default: matches by type. Override for disambiguation (e.g., UserPoolClient). From b9e4ef746849c81247fd1007ffaac5466eb18f5c Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Tue, 24 Mar 2026 10:57:51 -0400 Subject: [PATCH 54/70] docs(cli-internal): document resource mapping happy and unhappy paths Add Resource Mapping section to refactor.md explaining forward type-based matching with usedTargetIds dedup, rollback targetLogicalId-based mapping, and all error conditions. --- Prompt: explain happy and unhappy paths of building resource mappings in refactor.md. --- .../src/commands/gen2-migration/refactor.md | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/docs/packages/amplify-cli/src/commands/gen2-migration/refactor.md b/docs/packages/amplify-cli/src/commands/gen2-migration/refactor.md index 7d2750bd130..6e19e5f79e5 100644 --- a/docs/packages/amplify-cli/src/commands/gen2-migration/refactor.md +++ b/docs/packages/amplify-cli/src/commands/gen2-migration/refactor.md @@ -94,6 +94,28 @@ Each `CategoryRefactorer.plan()` follows this sequence: 7. **Move**: The main refactor — moves resources from source to target via `Cfn.refactor()`. Skipped if mappings are empty. 8. **After move** (rollback only): Independently fetches the holding stack template, discovers matching resources, and restores them back to Gen2. +### Resource Mapping + +Resource mappings determine which source resources move to which target logical IDs. The mapping strategy differs between forward and rollback. + +**Forward** uses type-based matching. For each source resource, it scans the target stack for resources of the same CloudFormation type. Each target can only be matched once (tracked via a `usedTargetIds` set to prevent two source resources from claiming the same target). + +Happy paths: + +- One source resource of type X, one target resource of type X → maps 1:1 +- Multiple source resources of different types, each with one target match → maps independently +- Source has no resources of the declared types → empty mappings, move is skipped + +Unhappy paths: + +- Source resource has zero matching targets → throws "has no corresponding target resource" +- Source resource has multiple matching targets → throws "has multiple corresponding target resources" +- Two source resources of the same type, one target → first claims the target, second throws "has no corresponding target resource" + +Categories with multiple resources of the same type (e.g., auth with two `UserPoolClient` resources) must override `match()` to disambiguate. Auth Cognito uses the logical ID pattern (Web vs Native), and UserPoolGroups matches by `GroupName` property. + +**Rollback** uses `targetLogicalId()` — each subclass maps Gen2 resource types to known Gen1 logical IDs (e.g., `AWS::Cognito::UserPool` → `UserPool`). Resources whose Gen1 logical ID already exists in the target stack are skipped (they were never moved, or were already rolled back). + ### Template Resolution Templates are resolved to replace CloudFormation intrinsic functions with literal values. This is necessary because the StackRefactor API submits new template bodies for both stacks, and any `Ref`/`Fn::GetAtt` pointing to a resource being moved would become a dangling reference. From e3d532dbb19b3ac5ee6d8709eee99d542bdba670 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Tue, 24 Mar 2026 11:44:43 -0400 Subject: [PATCH 55/70] fix(cli-internal): skip holding stack resources already present in beforeMove beforeMove now checks the holding stack template before building resource mappings. Resources that already exist in the holding stack are skipped to handle re-execution of forward after a partial failure. Fix test mock to return empty template for REVIEW_IN_PROGRESS holding stacks. --- Prompt: fix REVIEW_IN_PROGRESS holding stack test failure. --- .../forward-category-refactorer.test.ts | 8 +++++++- .../workflow/forward-category-refactorer.ts | 19 +++++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts index 0486d798a8b..05cacb08db4 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/refactor/workflow/forward-category-refactorer.test.ts @@ -114,7 +114,13 @@ describe('ForwardCategoryRefactorer.beforeMove', () => { .resolves({ Status: StackRefactorStatus.CREATE_COMPLETE, ExecutionStatus: StackRefactorExecutionStatus.EXECUTE_COMPLETE }); cfnMock.on(ExecuteStackRefactorCommand).resolves({}); cfnMock.on(DescribeStackResourcesCommand).resolves({ StackResources: [] }); - cfnMock.on(GetTemplateCommand).resolves({ TemplateBody: GEN2_TEMPLATE_WITH_BUCKET }); + cfnMock.on(GetTemplateCommand).callsFake(async (input: { StackName?: string }) => { + // REVIEW_IN_PROGRESS holding stack has no resources of interest + if (input.StackName?.endsWith('-holding')) { + return { TemplateBody: JSON.stringify({ AWSTemplateFormatVersion: '2010-09-09', Resources: {}, Outputs: {} }) }; + } + return { TemplateBody: GEN2_TEMPLATE_WITH_BUCKET }; + }); const clients = new AwsClients({ region: 'us-east-1' }); (clients as any).cloudFormation = new CloudFormationClient({}); diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts index 3bf50499eb1..d5fc2826608 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/forward-category-refactorer.ts @@ -148,21 +148,32 @@ export abstract class ForwardCategoryRefactorer extends CategoryRefactorer { this.debug(`Fetching template of gen2 stack: ${gen2StackName}`); const gen2StackTemplate = await this.gen2Branch.fetchTemplate(gen2StackName); + + this.debug(`Locating holding stack: ${holdingStackName}`); + const holdingStack = await this.cfn.findStack(holdingStackName); + const resources = this.filterResourcesByType(gen2StackTemplate); this.debug(`Found ${resources.size} resources to move from stack: ${gen2StackName}`); + const holdingStackTemplate = holdingStack ? await this.cfn.fetchTemplate(holdingStackName) : undefined; + const holdingStackResources = holdingStackTemplate?.Resources ?? {}; + const resourceMappings: ResourceMapping[] = []; for (const logicalId of resources.keys()) { - this.debug(`Registering ${logicalId} to move from ${gen2StackName} to ${holdingStackName}`); + if (logicalId in holdingStackResources) { + // holding stack already contains this resource. can happen on a second + // subsequent execution of forward. the resources we discovered here + // are actually the gen1 resources that were moved. + this.debug(`Not registering ${logicalId} since it already exists in ${holdingStackName}`); + continue; + } + this.debug(`Registering ${logicalId} move to ${holdingStackName}`); resourceMappings.push({ Source: { StackName: gen2StackName, LogicalResourceId: logicalId }, Destination: { StackName: holdingStackName, LogicalResourceId: logicalId }, }); } - this.debug(`Locating holding stack: ${holdingStackName}`); - const holdingStack = await this.cfn.findStack(holdingStackName); - const operations: AmplifyMigrationOperation[] = []; if (holdingStack?.StackStatus === 'REVIEW_IN_PROGRESS') { From c1f546f3d72021f80ce6b3f7bfe773920c507211 Mon Sep 17 00:00:00 2001 From: "Eli Polonsky (AI)" Date: Tue, 24 Mar 2026 14:20:19 -0400 Subject: [PATCH 56/70] feat(cli-internal): delete holding stack after rollback if only placeholder remains After moving resources out of the holding stack during rollback, check if only the migration placeholder resource remains. If so, delete the holding stack. This cleanup happens at execution time since each refactorer moves its own resources independently. --- Prompt: commit what I did. --- .../refactor/workflow/rollback-category-refactorer.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts index a39a767d063..5825ddfe032 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/refactor/workflow/rollback-category-refactorer.ts @@ -160,6 +160,17 @@ export abstract class RollbackCategoryRefactorer extends CategoryRefactorer { }, execute: async () => { await this.cfn.refactor(resourceMappings, this.resource); + + // this needs to happen here instead of during planning because + // each refactorer moves its own resources out of the holding stack. + const holdingStack = await this.cfn.findStack(holdingStackName); + if (holdingStack) { + const holdingStackTemplate = await this.cfn.fetchTemplate(holdingStackName); + const holdingStackResourceIds = Object.keys(holdingStackTemplate.Resources); + if (holdingStackResourceIds.length === 1 && holdingStackResourceIds[0] === MIGRATION_PLACEHOLDER_LOGICAL_ID) { + await this.cfn.deleteStack(holdingStackName, this.resource); + } + } }, }, ]; From 7cc0ce06e830303a4af754c53a0986d000955233 Mon Sep 17 00:00:00 2001 From: Sai Ray Date: Tue, 24 Mar 2026 15:24:54 -0400 Subject: [PATCH 57/70] chore: adding generate snapshots --- .../store-locator/README.md | 310 ++++++ .../_snapshot.post.generate/.gitignore | 8 + .../_snapshot.post.generate/amplify.yml | 23 + .../amplify/auth/resource.ts | 24 + .../add-to-group.js | 37 + .../event.json | 7 + .../index.js | 33 + .../resource.ts | 17 + .../amplify/backend.ts | 34 + .../amplify/geo/resource.ts | 29 + .../geo/storeLocatorGeofence/resource.ts | 22 + .../storeLocatorGeofence-construct.ts | 274 +++++ .../amplify/geo/storeLocatorMap/resource.ts | 26 + .../storeLocatorMap-construct.ts | 262 +++++ .../geo/storeLocatorSearch/resource.ts | 27 + .../storeLocatorSearch-construct.ts | 270 +++++ .../amplify/package.json | 3 + .../amplify/tsconfig.json | 15 + .../_snapshot.post.generate/package.json | 52 + .../_snapshot.pre.generate/.gitignore | 21 + .../#current-cloud-backend/amplify-meta.json | 227 ++++ .../auth-trigger-cloudformation-template.json | 204 ++++ .../build/parameters.json | 82 ++ ...9495f41a9495f-cloudformation-template.json | 486 +++++++++ .../cli-inputs.json | 89 ++ .../auth/userPoolGroups/build/parameters.json | 14 + ...serPoolGroups-cloudformation-template.json | 109 ++ .../user-pool-group-precedence.json | 6 + ...9495f41a9495f-cloudformation-template.json | 486 +++++++++ ...serPoolGroups-cloudformation-template.json | 109 ++ .../build/root-cloudformation-stack.json | 653 ++++++++++++ ...tConfirmation-cloudformation-template.json | 235 +++++ ...catorGeofence-cloudformation-template.json | 364 +++++++ ...oreLocatorMap-cloudformation-template.json | 347 +++++++ ...LocatorSearch-cloudformation-template.json | 348 +++++++ .../build/root-cloudformation-stack.json | 653 ++++++++++++ .../backend-config.json | 160 +++ .../amplify.state | 6 + .../custom-policies.json | 6 + .../function-parameters.json | 16 + .../parameters.json | 4 + .../src/add-to-group.js | 37 + .../src/event.json | 7 + .../src/index.js | 33 + .../src/package.json | 13 + .../src/yarn.lock | 169 +++ ...tConfirmation-cloudformation-template.json | 235 +++++ .../geo/storeLocatorGeofence/cli-inputs.json | 10 + .../geo/storeLocatorGeofence/parameters.json | 4 + ...catorGeofence-cloudformation-template.json | 364 +++++++ .../geo/storeLocatorMap/cli-inputs.json | 5 + .../geo/storeLocatorMap/parameters.json | 11 + ...oreLocatorMap-cloudformation-template.json | 347 +++++++ .../geo/storeLocatorSearch/cli-inputs.json | 5 + .../geo/storeLocatorSearch/parameters.json | 12 + ...LocatorSearch-cloudformation-template.json | 348 +++++++ .../amplify/#current-cloud-backend/tags.json | 10 + .../amplify/.config/project-config.json | 18 + .../_snapshot.pre.generate/amplify/README.md | 8 + .../amplify/backend/amplify-meta.json | 227 ++++ .../auth-trigger-cloudformation-template.json | 204 ++++ .../build/parameters.json | 82 ++ ...9495f41a9495f-cloudformation-template.json | 486 +++++++++ .../cli-inputs.json | 89 ++ .../auth/userPoolGroups/build/parameters.json | 14 + ...serPoolGroups-cloudformation-template.json | 109 ++ .../user-pool-group-precedence.json | 6 + ...9495f41a9495f-cloudformation-template.json | 486 +++++++++ ...serPoolGroups-cloudformation-template.json | 109 ++ .../build/root-cloudformation-stack.json | 653 ++++++++++++ ...tConfirmation-cloudformation-template.json | 235 +++++ ...catorGeofence-cloudformation-template.json | 364 +++++++ ...oreLocatorMap-cloudformation-template.json | 347 +++++++ ...LocatorSearch-cloudformation-template.json | 348 +++++++ .../build/root-cloudformation-stack.json | 653 ++++++++++++ .../amplify/backend/backend-config.json | 160 +++ .../amplify.state | 6 + .../custom-policies.json | 6 + .../function-parameters.json | 16 + .../parameters.json | 4 + .../src/add-to-group.js | 37 + .../src/event.json | 7 + .../src/index.js | 33 + .../src/package.json | 13 + .../src/yarn.lock | 169 +++ ...tConfirmation-cloudformation-template.json | 235 +++++ .../geo/storeLocatorGeofence/cli-inputs.json | 10 + .../geo/storeLocatorGeofence/parameters.json | 4 + ...catorGeofence-cloudformation-template.json | 364 +++++++ .../geo/storeLocatorMap/cli-inputs.json | 5 + .../geo/storeLocatorMap/parameters.json | 11 + ...oreLocatorMap-cloudformation-template.json | 347 +++++++ .../geo/storeLocatorSearch/cli-inputs.json | 5 + .../geo/storeLocatorSearch/parameters.json | 12 + ...LocatorSearch-cloudformation-template.json | 348 +++++++ .../amplify/backend/tags.json | 10 + .../amplify-dependent-resources-ref.d.ts | 43 + .../_snapshot.pre.generate/amplify/cli.json | 65 ++ .../amplify/hooks/README.md | 7 + .../amplify/team-provider-info.json | 34 + .../_snapshot.pre.generate/package.json | 36 + .../store-locator/eslint.config.js | 18 + .../images/add-gen2-main-branch.png | Bin 0 -> 58964 bytes .../store-locator/images/add-main-branch.png | Bin 0 -> 121069 bytes .../store-locator/images/app.png | Bin 0 -> 4038131 bytes .../images/deploying-gen2-main-branch.png | Bin 0 -> 93702 bytes .../images/deploying-main-branch.png | Bin 0 -> 100219 bytes .../store-locator/images/find-gen2-stack.png | Bin 0 -> 76269 bytes .../images/hosting-get-started.png | Bin 0 -> 89784 bytes .../store-locator/index.html | 13 + .../store-locator/package.json | 41 + .../store-locator/public/vite.svg | 1 + .../store-locator/src/App.css | 158 +++ .../store-locator/src/App.tsx | 208 ++++ .../src/amplifyconfiguration.json | 51 + .../store-locator/src/assets/react.svg | 1 + .../store-locator/src/aws-exports.js | 57 + .../store-locator/src/index.css | 11 + .../store-locator/src/main.tsx | 14 + .../store-locator/tsconfig.app.json | 28 + .../store-locator/tsconfig.json | 7 + .../store-locator/tsconfig.node.json | 26 + .../store-locator/vite.config.ts | 15 + packages/amplify-cli/package.json | 2 +- .../commands/gen2-migration/generate.test.ts | 4 + .../src/commands/gen2-migration/generate.ts | 2 +- .../generate/amplify/geo/geo.generator.ts | 7 +- yarn.lock | 982 +++++++++++++++++- 128 files changed, 15760 insertions(+), 19 deletions(-) create mode 100644 amplify-migration-apps/store-locator/README.md create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/.gitignore create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/amplify.yml create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/resource.ts create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/storelocator41a9495f41a9495fPostConfirmation/add-to-group.js create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/storelocator41a9495f41a9495fPostConfirmation/event.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/storelocator41a9495f41a9495fPostConfirmation/index.js create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/storelocator41a9495f41a9495fPostConfirmation/resource.ts create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/backend.ts create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/resource.ts create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorGeofence/resource.ts create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorGeofence/storeLocatorGeofence-construct.ts create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorMap/resource.ts create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorMap/storeLocatorMap-construct.ts create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorSearch/resource.ts create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorSearch/storeLocatorSearch-construct.ts create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/package.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/tsconfig.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.post.generate/package.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/.gitignore create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/amplify-meta.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/storelocator41a9495f41a9495f/build/auth-trigger-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/storelocator41a9495f41a9495f/build/parameters.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/storelocator41a9495f41a9495f/build/storelocator41a9495f41a9495f-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/storelocator41a9495f41a9495f/cli-inputs.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/build/parameters.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/user-pool-group-precedence.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/storelocator41a9495f41a9495f/build/storelocator41a9495f41a9495f-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/storelocator41a9495f41a9495fPostConfirmation/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/geo/storeLocatorGeofence/storeLocatorGeofence-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/geo/storeLocatorMap/storeLocatorMap-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/geo/storeLocatorSearch/storeLocatorSearch-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/root-cloudformation-stack.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/backend-config.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/amplify.state create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/custom-policies.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/function-parameters.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/parameters.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/add-to-group.js create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/event.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/index.js create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/package.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/yarn.lock create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorGeofence/cli-inputs.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorGeofence/parameters.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorGeofence/storeLocatorGeofence-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorMap/cli-inputs.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorMap/parameters.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorMap/storeLocatorMap-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorSearch/cli-inputs.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorSearch/parameters.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorSearch/storeLocatorSearch-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/tags.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/.config/project-config.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/README.md create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/amplify-meta.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/storelocator41a9495f41a9495f/build/auth-trigger-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/storelocator41a9495f41a9495f/build/parameters.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/storelocator41a9495f41a9495f/build/storelocator41a9495f41a9495f-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/storelocator41a9495f41a9495f/cli-inputs.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/build/parameters.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/user-pool-group-precedence.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/storelocator41a9495f41a9495f/build/storelocator41a9495f41a9495f-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/storelocator41a9495f41a9495fPostConfirmation/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/geo/storeLocatorGeofence/storeLocatorGeofence-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/geo/storeLocatorMap/storeLocatorMap-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/geo/storeLocatorSearch/storeLocatorSearch-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/root-cloudformation-stack.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/backend-config.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/amplify.state create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/custom-policies.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/function-parameters.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/parameters.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/add-to-group.js create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/event.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/index.js create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/package.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/yarn.lock create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorGeofence/cli-inputs.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorGeofence/parameters.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorGeofence/storeLocatorGeofence-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorMap/cli-inputs.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorMap/parameters.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorMap/storeLocatorMap-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorSearch/cli-inputs.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorSearch/parameters.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorSearch/storeLocatorSearch-cloudformation-template.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/tags.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/types/amplify-dependent-resources-ref.d.ts create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/cli.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/hooks/README.md create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/team-provider-info.json create mode 100644 amplify-migration-apps/store-locator/_snapshot.pre.generate/package.json create mode 100644 amplify-migration-apps/store-locator/eslint.config.js create mode 100644 amplify-migration-apps/store-locator/images/add-gen2-main-branch.png create mode 100644 amplify-migration-apps/store-locator/images/add-main-branch.png create mode 100644 amplify-migration-apps/store-locator/images/app.png create mode 100644 amplify-migration-apps/store-locator/images/deploying-gen2-main-branch.png create mode 100644 amplify-migration-apps/store-locator/images/deploying-main-branch.png create mode 100644 amplify-migration-apps/store-locator/images/find-gen2-stack.png create mode 100644 amplify-migration-apps/store-locator/images/hosting-get-started.png create mode 100644 amplify-migration-apps/store-locator/index.html create mode 100644 amplify-migration-apps/store-locator/package.json create mode 100644 amplify-migration-apps/store-locator/public/vite.svg create mode 100644 amplify-migration-apps/store-locator/src/App.css create mode 100644 amplify-migration-apps/store-locator/src/App.tsx create mode 100644 amplify-migration-apps/store-locator/src/amplifyconfiguration.json create mode 100644 amplify-migration-apps/store-locator/src/assets/react.svg create mode 100644 amplify-migration-apps/store-locator/src/aws-exports.js create mode 100644 amplify-migration-apps/store-locator/src/index.css create mode 100644 amplify-migration-apps/store-locator/src/main.tsx create mode 100644 amplify-migration-apps/store-locator/tsconfig.app.json create mode 100644 amplify-migration-apps/store-locator/tsconfig.json create mode 100644 amplify-migration-apps/store-locator/tsconfig.node.json create mode 100644 amplify-migration-apps/store-locator/vite.config.ts diff --git a/amplify-migration-apps/store-locator/README.md b/amplify-migration-apps/store-locator/README.md new file mode 100644 index 00000000000..e2d944da3b1 --- /dev/null +++ b/amplify-migration-apps/store-locator/README.md @@ -0,0 +1,310 @@ +# Store Locator (Amplify Gen1) + +![](./images/app.png) + +A store locator app that displays store locations on an interactive map powered by AWS Amplify Geo and Amazon Location Service. It uses Maps for rendering store locations, Place Index (Location Search) for address search, and Geofence Collections for users to define virtual perimeters around store areas. + +## Install Dependencies + +```console +npm install +``` + +## Initialize Environment + +```console +amplify init +``` + +```console +⚠️ For new projects, we recommend starting with AWS Amplify Gen 2, our new code-first developer experience. Get started at https://docs.amplify.aws/react/start/quickstart/ +✔ Do you want to continue with Amplify Gen 1? (y/N) · yes +✔ Why would you like to use Amplify Gen 1? · Prefer not to answer +Note: It is recommended to run this command from the root of your app directory +? Enter a name for the project storeLocator +The following configuration will be applied: + +Project information +| Name: storeLocator +| Environment: main +| Default editor: Visual Studio Code +| App type: javascript +| Javascript framework: react +| Source Directory Path: src +| Distribution Directory Path: dist +| Build Command: npm run-script build +| Start Command: npm run-script start + +? Initialize the project with the above configuration? No +? Enter a name for the environment main +? Choose your default editor: Visual Studio Code +✔ Choose the type of app that you're building · javascript +Please tell us about your project +? What javascript framework are you using react +? Source Directory Path: src +? Distribution Directory Path: dist +? Build Command: npm run-script build +? Start Command: npm run-script start +Using default provider awscloudformation +? Select the authentication method you want to use: AWS profile + +For more information on AWS Profiles, see: +https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html + +? Please choose the profile you want to use default +``` + +## Add Categories + +### Auth + +Cognito-based auth using email. Create Cognito user pool groups for Geofences and add post confirmation lambda trigger to add users to the group. + +```console +amplify add auth +``` + +```console +? Do you want to use the default authentication and security configuration? Manual configuration +? Select the authentication/authorization services that you want to use: User Sign-Up, Sign-In, connected with AWS IAM controls (Enables per-user Storage features for i +mages or other content, Analytics, and more) +? Provide a friendly name for your resource that will be used to label this category in the project: (accept default value) +? Enter a name for your identity pool. (accept default value) +? Allow unauthenticated logins? (Provides scoped down permissions that you can control via AWS IAM) No +? Do you want to enable 3rd party authentication providers in your identity pool? No +? Provide a name for your user pool: (accept default value) +? How do you want users to be able to sign in? Email +? Do you want to add User Pool Groups? Yes +? Provide a name for your user pool group: storeLocatorAdmin +? Do you want to add another User Pool Group No +? Sort the user pool groups in order of preference · storeLocatorAdmin +? Do you want to add an admin queries API? No +? Multifactor authentication (MFA) user login options: OFF +? Email based user registration/forgot password: Enabled (Requires per-user email entry at registration) +? Specify an email verification subject: Your verification code +? Specify an email verification message: Your verification code is {####} +? Do you want to override the default password policy for this User Pool? No +? What attributes are required for signing up? Email +? Specify the app's refresh token expiration period (in days): 100 +? Do you want to specify the user attributes this app can read and write? No +? Do you want to enable any of the following capabilities? Add User to Group +? Do you want to use an OAuth flow? No +? Do you want to configure Lambda Triggers for Cognito? Yes +? Which triggers do you want to enable for Cognito Post Confirmation +? What functionality do you want to use for Post Confirmation Add User To Group +? Enter the name of the group to which users will be added. · storeLocatorAdmin +``` + +### Geo - Map + +Map resource for displaying store locations using Amazon Location Service. + +```console +amplify add geo +``` + +```console +? Select which capability you want to add: Map (visualize the geospatial data) +✔ Provide a name for the Map: · storeLocatorMap +✔ Restrict access by? · Both +✔ Who can access this Map? · Authorized and Guest users +Must pick at least 1 of 1 options. Selecting all options [storeLocatorAdmin] +Available advanced settings: +- Map style & Map data provider (default: Streets provided by Esri) + +✔ Do you want to configure advanced settings? (y/N) · no +``` + +### Geo - Location Search + +Search index for searching places and addresses. + +```console +amplify add geo +``` + +```console +? Select which capability you want to add: Location search (search by places, addresses, coordinates) +✔ Provide a name for the location search index (place index): · storeLocatorSearch +✔ Restrict access by? · Both +✔ Who can access this search index? · Authorized and Guest users +Must pick at least 1 of 1 options. Selecting all options [storeLocatorAdmin] +Available advanced settings: +- Search data provider (default: HERE) +- Search result storage location (default: no result storage) + +✔ Do you want to configure advanced settings? (y/N) · no +``` + +### Geo - Geofence + +```console +amplify add geo +``` + +```console +? Select which capability you want to add: Geofencing (visualize virtual perimeters) +✔ Provide a name for the Geofence Collection: · storeLocatorGeofence +Must pick at least 1 of 1 options. Selecting all options [storeLocatorAdmin] +✔ What kind of access do you want for storeLocatorAdmin users? Select ALL that apply: · Read geofence, Create/Update geofence, Delete geofence, List geofences +``` + +```console +amplify push +``` + +```console + Current Environment: main + +┌──────────┬──────────────────────────────────────────┬───────────┬───────────────────┐ +│ Category │ Resource name │ Operation │ Provider plugin │ +├──────────┼──────────────────────────────────────────┼───────────┼───────────────────┤ +│ Auth │ storelocatorcff4360f │ Create │ awscloudformation │ +├──────────┼──────────────────────────────────────────┼───────────┼───────────────────┤ +│ Geo │ storeLocatorMap │ Create │ awscloudformation │ +├──────────┼──────────────────────────────────────────┼───────────┼───────────────────┤ +│ Auth │ userPoolGroups │ Create │ awscloudformation │ +├──────────┼──────────────────────────────────────────┼───────────┼───────────────────┤ +│ Function │ storelocatorcff4360fPostConfirmation │ Create │ awscloudformation │ +├──────────┼──────────────────────────────────────────┼───────────┼───────────────────┤ +│ Geo │ storeLocatorGeofence │ Create │ awscloudformation │ +├──────────┼──────────────────────────────────────────┼───────────┼───────────────────┤ +│ Geo │ storeLocatorSearch │ Create │ awscloudformation │ +└──────────┴──────────────────────────────────────────┴───────────┴───────────────────┘ + +✔ Are you sure you want to continue? (Y/n) · yes +``` + +## Publish Frontend + +To publish the frontend, leverage the Amplify hosting console. First push everything to the `main` branch: + +```console +git add . +git commit -m "feat: gen1" +git push origin main +``` + +Next, accept all the default values and follow the getting started wizard to connect your repo and branch. Wait for the deployment to finish successfully. + +![](./images/hosting-get-started.png) +![](./images/add-main-branch.png) +![](./images/deploying-main-branch.png) + +Wait for the deployment to finish successfully. + +## Migrating to Gen2 + +> Based on https://github.com/aws-amplify/amplify-cli/blob/gen2-migration/GEN2_MIGRATION_GUIDE.md + +> [!WARNING] +> Migration is not fully supported for this app because the geo category doesn't support refactoring yet. +> This guide ends at the `generate` step. + +First install the experimental amplify CLI package that provides the migration commands. + +```console +npm install @aws-amplify/cli-internal-gen2-migration-experimental-alpha +``` + +Now run them: + +```console +npx amplify gen2-migration lock +``` + +```console +git checkout -b gen2-main +npx amplify gen2-migration generate +``` + +**Edit in `./src/main.tsx`:** + +```diff +- import amplifyconfig from './amplifyconfiguration.json'; ++ import amplifyconfig from '../amplify_outputs.json'; +``` + +```console +git add . +git commit -m "feat: migrate to gen2" +git push origin gen2-main +``` + +**Edit in `./amplify/auth/storelocatorcff4360fPostConfirmation/resource.ts`:** + +```diff +- memoryMB: 128, +- runtime: 22 ++ memoryMB: 512, ++ runtime: 22, ++ resourceGroupName: 'auth' +``` + +**Edit in `./amplify/auth/storelocatorcff4360fPostConfirmation/index.js`:** + +The Gen1 dynamic `require(`./${name}`)` doesn't work with esbuild bundling in the Amplify build pipeline (`Module not found in bundle: ./add-to-group`). Replace with a static import: + +```diff +- const moduleNames = process.env.MODULES.split(','); +- /** +- * The array of imported modules. +- */ +- const modules = moduleNames.map((name) => require(`./${name}`)); ++ import * as addToGroup from './add-to-group'; ++ ++ const modules = [addToGroup]; +``` + +```diff +- exports.handler = async (event, context) => { ++ export async function handler(event, context) { +``` + +**Edit in `./amplify/auth/storelocatorcff4360fPostConfirmation/add-to-group.js`:** + +```diff +- const { +- CognitoIdentityProviderClient, +- AdminAddUserToGroupCommand, +- GetGroupCommand, +- CreateGroupCommand, +- } = require('@aws-sdk/client-cognito-identity-provider'); ++ import { ++ CognitoIdentityProviderClient, ++ AdminAddUserToGroupCommand, ++ GetGroupCommand, ++ CreateGroupCommand, ++ } from '@aws-sdk/client-cognito-identity-provider'; +``` + +```diff +- exports.handler = async (event) => { ++ export const handler = async (event) => { +``` + +**Edit in `./amplify/auth/resource.ts`:** + +```diff +- triggers: { +- postConfirmation: storelocatorcff4360fPostConfirmation +- }, ++ triggers: { ++ postConfirmation: storelocatorcff4360fPostConfirmation ++ }, ++ access: (allow) => [ ++ allow.resource(storelocatorcff4360fPostConfirmation).to([ ++ "addUserToGroup", ++ "manageGroups", ++ ]), ++ ], +``` + +Now connect the `gen2-main` branch to the hosting service: + +![](./images/add-gen2-main-branch.png) +![](./images/deploying-gen2-main-branch.png) + +Wait for the deployment to finish successfully. + +**The guide ends here because the geo category doesn't support refactoring yet.** diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/.gitignore b/amplify-migration-apps/store-locator/_snapshot.post.generate/.gitignore new file mode 100644 index 00000000000..c71cd6d6b4b --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/.gitignore @@ -0,0 +1,8 @@ +# amplify +.amplify +amplify_outputs* +amplifyconfiguration* +aws-exports* +node_modules +build +dist diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify.yml b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify.yml new file mode 100644 index 00000000000..3fc3b8b1159 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify.yml @@ -0,0 +1,23 @@ +version: 1 +backend: + phases: + build: + commands: + - "# Execute Amplify CLI with the helper script" + - npm ci --cache .npm --prefer-offline + - npx ampx pipeline-deploy --branch $AWS_BRANCH --app-id $AWS_APP_ID +frontend: + phases: + preBuild: + commands: + - npm ci --cache .npm --prefer-offline + build: + commands: + - npm run build + artifacts: + baseDirectory: dist + files: + - "**/*" + cache: + paths: + - .npm/**/* diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/resource.ts b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/resource.ts new file mode 100644 index 00000000000..4763d3fe892 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/resource.ts @@ -0,0 +1,24 @@ +import { defineAuth } from '@aws-amplify/backend'; +import { storelocator41a9495f41a9495fPostConfirmation } from './storelocator41a9495f41a9495fPostConfirmation/resource'; + +export const auth = defineAuth({ + loginWith: { + email: { + verificationEmailSubject: 'Your verification code', + verificationEmailBody: () => 'Your verification code is {####}', + }, + }, + userAttributes: { + email: { + required: true, + mutable: true, + }, + }, + groups: ['storeLocatorAdmin'], + triggers: { + postConfirmation: storelocator41a9495f41a9495fPostConfirmation, + }, + multifactor: { + mode: 'OFF', + }, +}); diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/storelocator41a9495f41a9495fPostConfirmation/add-to-group.js b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/storelocator41a9495f41a9495fPostConfirmation/add-to-group.js new file mode 100644 index 00000000000..b8920ac2104 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/storelocator41a9495f41a9495fPostConfirmation/add-to-group.js @@ -0,0 +1,37 @@ +const { + CognitoIdentityProviderClient, + AdminAddUserToGroupCommand, + GetGroupCommand, + CreateGroupCommand, +} = require('@aws-sdk/client-cognito-identity-provider'); + +const cognitoIdentityServiceProvider = new CognitoIdentityProviderClient({}); + +/** + * @type {import('@types/aws-lambda').PostConfirmationTriggerHandler} + */ +exports.handler = async (event) => { + const groupParams = { + GroupName: process.env.GROUP, + UserPoolId: event.userPoolId, + }; + const addUserParams = { + GroupName: process.env.GROUP, + UserPoolId: event.userPoolId, + Username: event.userName, + }; + /** + * Check if the group exists; if it doesn't, create it. + */ + try { + await cognitoIdentityServiceProvider.send(new GetGroupCommand(groupParams)); + } catch (e) { + await cognitoIdentityServiceProvider.send(new CreateGroupCommand(groupParams)); + } + /** + * Then, add the user to the group. + */ + await cognitoIdentityServiceProvider.send(new AdminAddUserToGroupCommand(addUserParams)); + + return event; +}; diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/storelocator41a9495f41a9495fPostConfirmation/event.json b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/storelocator41a9495f41a9495fPostConfirmation/event.json new file mode 100644 index 00000000000..5eafe06ea53 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/storelocator41a9495f41a9495fPostConfirmation/event.json @@ -0,0 +1,7 @@ +{ + "request": { + "userPoolId": "testID", + "userName": "testUser" + }, + "response": {} +} diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/storelocator41a9495f41a9495fPostConfirmation/index.js b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/storelocator41a9495f41a9495fPostConfirmation/index.js new file mode 100644 index 00000000000..876a0cedec6 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/storelocator41a9495f41a9495fPostConfirmation/index.js @@ -0,0 +1,33 @@ +/** + * @fileoverview + * + * This CloudFormation Trigger creates a handler which awaits the other handlers + * specified in the `MODULES` env var, located at `./${MODULE}`. + */ + +/** + * The names of modules to load are stored as a comma-delimited string in the + * `MODULES` env var. + */ +const moduleNames = process.env.MODULES.split(','); +/** + * The array of imported modules. + */ +const modules = moduleNames.map((name) => require(`./${name}`)); + +/** + * This async handler iterates over the given modules and awaits them. + * + * @see https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html#nodejs-handler-async + * @type {import('@types/aws-lambda').APIGatewayProxyHandler} + * + */ +exports.handler = async (event, context) => { + /** + * Instead of naively iterating over all handlers, run them concurrently with + * `await Promise.all(...)`. This would otherwise just be determined by the + * order of names in the `MODULES` var. + */ + await Promise.all(modules.map((module) => module.handler(event, context))); + return event; +}; diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/storelocator41a9495f41a9495fPostConfirmation/resource.ts b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/storelocator41a9495f41a9495fPostConfirmation/resource.ts new file mode 100644 index 00000000000..b61b22d20b4 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/auth/storelocator41a9495f41a9495fPostConfirmation/resource.ts @@ -0,0 +1,17 @@ +import { defineFunction } from '@aws-amplify/backend'; + +const branchName = process.env.AWS_BRANCH ?? 'sandbox'; + +export const storelocator41a9495f41a9495fPostConfirmation = defineFunction({ + entry: './index.js', + name: `storelocator41a9495f41a9495fPostConfirmation-${branchName}`, + timeoutSeconds: 25, + memoryMB: 128, + environment: { + GROUP: 'storeLocatorAdmin', + MODULES: 'add-to-group', + ENV: `${branchName}`, + REGION: 'us-east-1', + }, + runtime: 22, +}); diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/backend.ts b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/backend.ts new file mode 100644 index 00000000000..d199ec482f3 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/backend.ts @@ -0,0 +1,34 @@ +import { auth } from './auth/resource'; +import { storelocator41a9495f41a9495fPostConfirmation } from './auth/storelocator41a9495f41a9495fPostConfirmation/resource'; +import { defineGeo } from './geo/resource'; +import { defineBackend } from '@aws-amplify/backend'; +import { Duration } from 'aws-cdk-lib'; + +const backend = defineBackend({ + auth, + storelocator41a9495f41a9495fPostConfirmation, +}); +const geo = defineGeo(backend); +const cfnUserPool = backend.auth.resources.cfnResources.cfnUserPool; +cfnUserPool.usernameAttributes = ['email']; +cfnUserPool.policies = { + passwordPolicy: { + minimumLength: 8, + requireUppercase: false, + requireLowercase: false, + requireNumbers: false, + requireSymbols: false, + temporaryPasswordValidityDays: 7, + }, +}; +const userPool = backend.auth.resources.userPool; +userPool.addClient('NativeAppClient', { + refreshTokenValidity: Duration.days(100), + enableTokenRevocation: true, + enablePropagateAdditionalUserContextData: false, + authSessionValidity: Duration.minutes(3), + disableOAuth: true, + generateSecret: false, +}); +const branchName = process.env.AWS_BRANCH ?? 'sandbox'; +backend.storelocator41a9495f41a9495fPostConfirmation.resources.cfnResources.cfnFunction.functionName = `storelocator41a9495f41a9495fPostConfirmation-${branchName}`; diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/resource.ts b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/resource.ts new file mode 100644 index 00000000000..1811444d02e --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/resource.ts @@ -0,0 +1,29 @@ +import { defineStoreLocatorGeofence } from './storeLocatorGeofence/resource'; +import { defineStoreLocatorMap } from './storeLocatorMap/resource'; +import { defineStoreLocatorSearch } from './storeLocatorSearch/resource'; +import { Backend } from '@aws-amplify/backend'; + +export const defineGeo = (backend: Backend) => { + const storeLocatorGeofence = defineStoreLocatorGeofence(backend); + const storeLocatorMap = defineStoreLocatorMap(backend); + const storeLocatorSearch = defineStoreLocatorSearch(backend); + backend.addOutput({ + geo: { + aws_region: storeLocatorMap.region, + maps: { + items: { + [storeLocatorMap.name]: { style: storeLocatorMap.style }, + }, + default: storeLocatorMap.name, + }, + search_indices: { + items: [storeLocatorSearch.name], + default: storeLocatorSearch.name, + }, + geofence_collections: { + items: [storeLocatorGeofence.name], + default: storeLocatorGeofence.name, + }, + }, + }); +}; diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorGeofence/resource.ts b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorGeofence/resource.ts new file mode 100644 index 00000000000..7c4ad73723e --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorGeofence/resource.ts @@ -0,0 +1,22 @@ +import { geostoreLocatorGeofence } from './storeLocatorGeofence-construct'; +import { Backend } from '@aws-amplify/backend'; + +const branchName = process.env.AWS_BRANCH ?? 'sandbox'; + +export const defineStoreLocatorGeofence = (backend: Backend) => { + const storeLocatorGeofenceStack = backend.createStack('storeLocatorGeofence'); + const storeLocatorGeofence = new geostoreLocatorGeofence( + storeLocatorGeofenceStack, + 'storeLocatorGeofence', + { + authstorelocator41a9495f41a9495fUserPoolId: + backend.auth.resources.userPool.userPoolId, + authuserPoolGroupsstoreLocatorAdminGroupRole: + backend.auth.resources.groups['storeLocatorAdmin'].role.roleName, + collectionName: 'storeLocatorGeofence', + branchName, + isDefault: 'true', + } + ); + return storeLocatorGeofence; +}; diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorGeofence/storeLocatorGeofence-construct.ts b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorGeofence/storeLocatorGeofence-construct.ts new file mode 100644 index 00000000000..b2ce35289cb --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorGeofence/storeLocatorGeofence-construct.ts @@ -0,0 +1,274 @@ +import * as cdk from 'aws-cdk-lib'; +import * as iam from 'aws-cdk-lib/aws-iam'; +import * as lambda from 'aws-cdk-lib/aws-lambda'; +import { Construct } from 'constructs'; + +export interface geostoreLocatorGeofenceProps { + /** + */ + readonly authuserPoolGroupsstoreLocatorAdminGroupRole: string; + /** + */ + readonly authstorelocator41a9495f41a9495fUserPoolId: string; + /** + */ + readonly collectionName: string; + /** + */ + readonly isDefault: string; + /** + */ + readonly branchName: string; +} + +/** + * {"createdOn":"Mac","createdBy":"Amplify","createdWith":"14.2.5","stackType":"geo-GeofenceCollection","metadata":{"whyContinueWithGen1":"Prefer not to answer"}} + */ +export class geostoreLocatorGeofence extends Construct { + public readonly name; + public readonly region; + public readonly arn; + + public constructor( + scope: Construct, + id: string, + props: geostoreLocatorGeofenceProps + ) { + super(scope, id); + + // Mappings + const regionMapping = new cdk.CfnMapping(this, 'RegionMapping', { + mapping: { + 'us-east-1': { + locationServiceRegion: 'us-east-1', + }, + 'us-east-2': { + locationServiceRegion: 'us-east-2', + }, + 'us-west-2': { + locationServiceRegion: 'us-west-2', + }, + 'ap-southeast-1': { + locationServiceRegion: 'ap-southeast-1', + }, + 'ap-southeast-2': { + locationServiceRegion: 'ap-southeast-2', + }, + 'ap-northeast-1': { + locationServiceRegion: 'ap-northeast-1', + }, + 'eu-central-1': { + locationServiceRegion: 'eu-central-1', + }, + 'eu-north-1': { + locationServiceRegion: 'eu-north-1', + }, + 'eu-west-1': { + locationServiceRegion: 'eu-west-1', + }, + 'sa-east-1': { + locationServiceRegion: 'us-east-1', + }, + 'ca-central-1': { + locationServiceRegion: 'us-east-1', + }, + 'us-west-1': { + locationServiceRegion: 'us-west-2', + }, + 'cn-north-1': { + locationServiceRegion: 'us-west-2', + }, + 'cn-northwest-1': { + locationServiceRegion: 'us-west-2', + }, + 'ap-south-1': { + locationServiceRegion: 'us-west-2', + }, + 'ap-northeast-3': { + locationServiceRegion: 'us-west-2', + }, + 'ap-northeast-2': { + locationServiceRegion: 'us-west-2', + }, + 'eu-west-2': { + locationServiceRegion: 'eu-west-1', + }, + 'eu-west-3': { + locationServiceRegion: 'eu-west-1', + }, + 'me-south-1': { + locationServiceRegion: 'ap-southeast-1', + }, + }, + }); + + // Resources + const customGeofenceCollectionLambdaServiceRole9040D551 = new iam.CfnRole( + this, + 'CustomGeofenceCollectionLambdaServiceRole9040D551', + { + assumeRolePolicyDocument: { + Statement: [ + { + Action: 'sts:AssumeRole', + Effect: 'Allow', + Principal: { + Service: 'lambda.amazonaws.com', + }, + }, + ], + Version: '2012-10-17', + }, + managedPolicyArns: [ + [ + 'arn:', + cdk.Stack.of(this).partition, + ':iam::aws:policy/service-role/AWSLambdaBasicExecutionRole', + ].join(''), + ], + } + ); + + const customGeofenceCollectionLambdaServiceRoleDefaultPolicy0A18b369 = + new iam.CfnPolicy( + this, + 'CustomGeofenceCollectionLambdaServiceRoleDefaultPolicy0A18B369', + { + policyDocument: { + Statement: [ + { + Action: 'geo:CreateGeofenceCollection', + Effect: 'Allow', + Resource: '*', + }, + { + Action: [ + 'geo:UpdateGeofenceCollection', + 'geo:DeleteGeofenceCollection', + ], + Effect: 'Allow', + Resource: `arn:aws:geo:${regionMapping.findInMap( + cdk.Stack.of(this).region, + 'locationServiceRegion' + )}:${cdk.Stack.of(this).account}:geofence-collection/${[ + props.collectionName!, + props.branchName!, + ].join('-')}`, + }, + ], + Version: '2012-10-17', + }, + policyName: + 'CustomGeofenceCollectionLambdaServiceRoleDefaultPolicy0A18B369', + roles: [customGeofenceCollectionLambdaServiceRole9040D551.ref], + } + ); + + const customGeofenceCollectionLambdaCa3d002b = new lambda.CfnFunction( + this, + 'CustomGeofenceCollectionLambdaCA3D002B', + { + code: { + zipFile: + "const response = require('cfn-response');\nconst {\n LocationClient,\n CreateGeofenceCollectionCommand,\n DeleteGeofenceCollectionCommand,\n UpdateGeofenceCollectionCommand,\n} = require('@aws-sdk/client-location');\nexports.handler = async function (event, context) {\n try {\n console.log('REQUEST RECEIVED:' + JSON.stringify(event));\n const pricingPlan = 'RequestBasedUsage';\n if (event.RequestType === 'Create') {\n const params = {\n CollectionName: event.ResourceProperties.collectionName,\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new CreateGeofenceCollectionCommand(params));\n console.log('create resource response data' + JSON.stringify(res));\n if (res.CollectionName && res.CollectionArn) {\n await response.send(event, context, response.SUCCESS, res, params.CollectionName);\n } else {\n await response.send(event, context, response.FAILED, res, params.CollectionName);\n }\n }\n if (event.RequestType === 'Update') {\n const params = {\n CollectionName: event.ResourceProperties.collectionName,\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new UpdateGeofenceCollectionCommand(params));\n console.log('update resource response data' + JSON.stringify(res));\n if (res.CollectionName) {\n await response.send(event, context, response.SUCCESS, res, params.CollectionName);\n } else {\n await response.send(event, context, response.FAILED, res, params.CollectionName);\n }\n }\n if (event.RequestType === 'Delete') {\n const params = {\n CollectionName: event.ResourceProperties.collectionName,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new DeleteGeofenceCollectionCommand(params));\n console.log('delete resource response data' + JSON.stringify(res));\n await response.send(event, context, response.SUCCESS, res, params.CollectionName);\n }\n } catch (err) {\n console.log(err.stack);\n const res = { Error: err };\n await response.send(event, context, response.FAILED, res, event.ResourceProperties.collectionName);\n throw err;\n }\n};\n", + }, + handler: 'index.handler', + role: customGeofenceCollectionLambdaServiceRole9040D551.attrArn, + runtime: 'nodejs22.x', + timeout: 300, + } + ); + customGeofenceCollectionLambdaCa3d002b.addDependency( + customGeofenceCollectionLambdaServiceRoleDefaultPolicy0A18b369 + ); + customGeofenceCollectionLambdaCa3d002b.addDependency( + customGeofenceCollectionLambdaServiceRole9040D551 + ); + + const customGeofenceCollection = new cdk.CfnCustomResource( + this, + 'CustomGeofenceCollection', + { + serviceToken: customGeofenceCollectionLambdaCa3d002b.attrArn, + } + ); + customGeofenceCollection.addOverride('Type', 'Custom::LambdaCallout'); + customGeofenceCollection.addPropertyOverride( + 'collectionName', + [props.collectionName!, props.branchName!].join('-') + ); + customGeofenceCollection.addPropertyOverride( + 'region', + regionMapping.findInMap( + cdk.Stack.of(this).region, + 'locationServiceRegion' + ) + ); + customGeofenceCollection.addPropertyOverride('env', props.branchName!); + customGeofenceCollection.cfnOptions.deletionPolicy = + cdk.CfnDeletionPolicy.DELETE; + + const storeLocatorAdminGeofenceCollectionPolicy = new iam.CfnPolicy( + this, + 'storeLocatorAdminGeofenceCollectionPolicy', + { + policyDocument: { + Statement: [ + { + Action: [ + 'geo:GetGeofence', + 'geo:PutGeofence', + 'geo:BatchPutGeofence', + 'geo:BatchDeleteGeofence', + 'geo:ListGeofences', + ], + Effect: 'Allow', + Resource: `arn:aws:geo:${regionMapping.findInMap( + cdk.Stack.of(this).region, + 'locationServiceRegion' + )}:${ + cdk.Stack.of(this).account + }:geofence-collection/${customGeofenceCollection + .getAtt('CollectionName') + .toString()}`, + }, + ], + Version: '2012-10-17', + }, + policyName: [ + 'storeLocatorAdmin', + [props.collectionName!, props.branchName!].join('-'), + 'Policy', + ].join(''), + roles: [props.authuserPoolGroupsstoreLocatorAdminGroupRole!], + } + ); + + // Outputs + this.name = customGeofenceCollection.getAtt('CollectionName').toString(); + new cdk.CfnOutput(this, 'CfnOutputName', { + key: 'Name', + value: this.name!.toString(), + }); + this.region = regionMapping.findInMap( + cdk.Stack.of(this).region, + 'locationServiceRegion' + ); + new cdk.CfnOutput(this, 'CfnOutputRegion', { + key: 'Region', + value: this.region!.toString(), + }); + this.arn = `arn:aws:geo:${regionMapping.findInMap( + cdk.Stack.of(this).region, + 'locationServiceRegion' + )}:${ + cdk.Stack.of(this).account + }:geofence-collection/${customGeofenceCollection + .getAtt('CollectionName') + .toString()}`; + new cdk.CfnOutput(this, 'CfnOutputArn', { + key: 'Arn', + value: this.arn!.toString(), + }); + } +} diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorMap/resource.ts b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorMap/resource.ts new file mode 100644 index 00000000000..6d744194756 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorMap/resource.ts @@ -0,0 +1,26 @@ +import { geostoreLocatorMap } from './storeLocatorMap-construct'; +import { Backend } from '@aws-amplify/backend'; + +const branchName = process.env.AWS_BRANCH ?? 'sandbox'; + +export const defineStoreLocatorMap = (backend: Backend) => { + const storeLocatorMapStack = backend.createStack('storeLocatorMap'); + const storeLocatorMap = new geostoreLocatorMap( + storeLocatorMapStack, + 'storeLocatorMap', + { + authRoleName: backend.auth.resources.authenticatedUserIamRole.roleName, + unauthRoleName: + backend.auth.resources.unauthenticatedUserIamRole.roleName, + authstorelocator41a9495f41a9495fUserPoolId: + backend.auth.resources.userPool.userPoolId, + authuserPoolGroupsstoreLocatorAdminGroupRole: + backend.auth.resources.groups['storeLocatorAdmin'].role.roleName, + mapName: 'storeLocatorMap', + mapStyle: 'VectorEsriStreets', + branchName, + isDefault: 'true', + } + ); + return storeLocatorMap; +}; diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorMap/storeLocatorMap-construct.ts b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorMap/storeLocatorMap-construct.ts new file mode 100644 index 00000000000..f3aadded338 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorMap/storeLocatorMap-construct.ts @@ -0,0 +1,262 @@ +import * as cdk from 'aws-cdk-lib'; +import * as iam from 'aws-cdk-lib/aws-iam'; +import * as lambda from 'aws-cdk-lib/aws-lambda'; +import { Construct } from 'constructs'; + +export interface geostoreLocatorMapProps { + /** + */ + readonly authuserPoolGroupsstoreLocatorAdminGroupRole: string; + /** + */ + readonly authstorelocator41a9495f41a9495fUserPoolId: string; + /** + */ + readonly authRoleName: string; + /** + */ + readonly unauthRoleName: string; + /** + */ + readonly mapName: string; + /** + */ + readonly mapStyle: string; + /** + */ + readonly isDefault: string; + /** + */ + readonly branchName: string; +} + +/** + * {"createdOn":"Mac","createdBy":"Amplify","createdWith":"14.2.5","stackType":"geo-Map","metadata":{"whyContinueWithGen1":"Prefer not to answer"}} + */ +export class geostoreLocatorMap extends Construct { + public readonly name; + public readonly style; + public readonly region; + public readonly arn; + + public constructor( + scope: Construct, + id: string, + props: geostoreLocatorMapProps + ) { + super(scope, id); + + // Mappings + const regionMapping = new cdk.CfnMapping(this, 'RegionMapping', { + mapping: { + 'us-east-1': { + locationServiceRegion: 'us-east-1', + }, + 'us-east-2': { + locationServiceRegion: 'us-east-2', + }, + 'us-west-2': { + locationServiceRegion: 'us-west-2', + }, + 'ap-southeast-1': { + locationServiceRegion: 'ap-southeast-1', + }, + 'ap-southeast-2': { + locationServiceRegion: 'ap-southeast-2', + }, + 'ap-northeast-1': { + locationServiceRegion: 'ap-northeast-1', + }, + 'eu-central-1': { + locationServiceRegion: 'eu-central-1', + }, + 'eu-north-1': { + locationServiceRegion: 'eu-north-1', + }, + 'eu-west-1': { + locationServiceRegion: 'eu-west-1', + }, + 'sa-east-1': { + locationServiceRegion: 'us-east-1', + }, + 'ca-central-1': { + locationServiceRegion: 'us-east-1', + }, + 'us-west-1': { + locationServiceRegion: 'us-west-2', + }, + 'cn-north-1': { + locationServiceRegion: 'us-west-2', + }, + 'cn-northwest-1': { + locationServiceRegion: 'us-west-2', + }, + 'ap-south-1': { + locationServiceRegion: 'us-west-2', + }, + 'ap-northeast-3': { + locationServiceRegion: 'us-west-2', + }, + 'ap-northeast-2': { + locationServiceRegion: 'us-west-2', + }, + 'eu-west-2': { + locationServiceRegion: 'eu-west-1', + }, + 'eu-west-3': { + locationServiceRegion: 'eu-west-1', + }, + 'me-south-1': { + locationServiceRegion: 'ap-southeast-1', + }, + }, + }); + + // Resources + const customMapLambdaServiceRole4Ee7732c = new iam.CfnRole( + this, + 'CustomMapLambdaServiceRole4EE7732C', + { + assumeRolePolicyDocument: { + Statement: [ + { + Action: 'sts:AssumeRole', + Effect: 'Allow', + Principal: { + Service: 'lambda.amazonaws.com', + }, + }, + ], + Version: '2012-10-17', + }, + managedPolicyArns: [ + [ + 'arn:', + cdk.Stack.of(this).partition, + ':iam::aws:policy/service-role/AWSLambdaBasicExecutionRole', + ].join(''), + ], + } + ); + + const customMapLambdaServiceRoleDefaultPolicy983Fdd4e = new iam.CfnPolicy( + this, + 'CustomMapLambdaServiceRoleDefaultPolicy983FDD4E', + { + policyDocument: { + Statement: [ + { + Action: 'geo:CreateMap', + Effect: 'Allow', + Resource: '*', + }, + { + Action: ['geo:UpdateMap', 'geo:DeleteMap'], + Effect: 'Allow', + Resource: `arn:aws:geo:${regionMapping.findInMap( + cdk.Stack.of(this).region, + 'locationServiceRegion' + )}:${cdk.Stack.of(this).account}:map/${[ + props.mapName!, + props.branchName!, + ].join('-')}`, + }, + ], + Version: '2012-10-17', + }, + policyName: 'CustomMapLambdaServiceRoleDefaultPolicy983FDD4E', + roles: [customMapLambdaServiceRole4Ee7732c.ref], + } + ); + + const customMapLambda51D5d430 = new lambda.CfnFunction( + this, + 'CustomMapLambda51D5D430', + { + code: { + zipFile: + "const response = require('cfn-response');\nconst { LocationClient, CreateMapCommand, DeleteMapCommand, UpdateMapCommand } = require('@aws-sdk/client-location');\nexports.handler = async function (event, context) {\n try {\n console.log('REQUEST RECEIVED:' + JSON.stringify(event));\n const pricingPlan = 'RequestBasedUsage';\n if (event.RequestType === 'Create') {\n let params = {\n MapName: event.ResourceProperties.mapName,\n Configuration: {\n Style: event.ResourceProperties.mapStyle,\n },\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new CreateMapCommand(params));\n console.log('create resource response data' + JSON.stringify(res));\n if (res.MapName && res.MapArn) {\n await response.send(event, context, response.SUCCESS, res, params.MapName);\n } else {\n await response.send(event, context, response.FAILED, res, params.MapName);\n }\n }\n if (event.RequestType === 'Update') {\n let params = {\n MapName: event.ResourceProperties.mapName,\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new UpdateMapCommand(params));\n console.log('update resource response data' + JSON.stringify(res));\n if (res.MapName && res.MapArn) {\n await response.send(event, context, response.SUCCESS, res, params.MapName);\n } else {\n await response.send(event, context, response.FAILED, res, params.MapName);\n }\n }\n if (event.RequestType === 'Delete') {\n let params = {\n MapName: event.ResourceProperties.mapName,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new DeleteMapCommand(params));\n console.log('delete resource response data' + JSON.stringify(res));\n await response.send(event, context, response.SUCCESS, res, params.MapName);\n }\n } catch (err) {\n console.log(err.stack);\n const res = { Error: err };\n await response.send(event, context, response.FAILED, res, event.ResourceProperties.mapName);\n throw err;\n }\n};\n", + }, + handler: 'index.handler', + role: customMapLambdaServiceRole4Ee7732c.attrArn, + runtime: 'nodejs22.x', + timeout: 300, + } + ); + customMapLambda51D5d430.addDependency( + customMapLambdaServiceRoleDefaultPolicy983Fdd4e + ); + customMapLambda51D5d430.addDependency(customMapLambdaServiceRole4Ee7732c); + + const customMap = new cdk.CfnCustomResource(this, 'CustomMap', { + serviceToken: customMapLambda51D5d430.attrArn, + }); + customMap.addOverride('Type', 'Custom::LambdaCallout'); + customMap.addPropertyOverride( + 'mapName', + [props.mapName!, props.branchName!].join('-') + ); + customMap.addPropertyOverride('mapStyle', props.mapStyle!); + customMap.addPropertyOverride( + 'region', + regionMapping.findInMap( + cdk.Stack.of(this).region, + 'locationServiceRegion' + ) + ); + customMap.addPropertyOverride('env', props.branchName!); + customMap.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE; + + const mapPolicy = new iam.CfnPolicy(this, 'MapPolicy', { + policyDocument: { + Statement: [ + { + Action: [ + 'geo:GetMapStyleDescriptor', + 'geo:GetMapGlyphs', + 'geo:GetMapSprites', + 'geo:GetMapTile', + ], + Effect: 'Allow', + Resource: customMap.getAtt('MapArn').toString(), + }, + ], + Version: '2012-10-17', + }, + policyName: [ + [props.mapName!, props.branchName!].join('-'), + 'Policy', + ].join(''), + roles: [ + props.authRoleName!, + props.unauthRoleName!, + props.authuserPoolGroupsstoreLocatorAdminGroupRole!, + ], + }); + + // Outputs + this.name = customMap.getAtt('MapName').toString(); + new cdk.CfnOutput(this, 'CfnOutputName', { + key: 'Name', + value: this.name!.toString(), + }); + this.style = props.mapStyle!; + new cdk.CfnOutput(this, 'CfnOutputStyle', { + key: 'Style', + value: this.style!.toString(), + }); + this.region = regionMapping.findInMap( + cdk.Stack.of(this).region, + 'locationServiceRegion' + ); + new cdk.CfnOutput(this, 'CfnOutputRegion', { + key: 'Region', + value: this.region!.toString(), + }); + this.arn = customMap.getAtt('MapArn').toString(); + new cdk.CfnOutput(this, 'CfnOutputArn', { + key: 'Arn', + value: this.arn!.toString(), + }); + } +} diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorSearch/resource.ts b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorSearch/resource.ts new file mode 100644 index 00000000000..294c7f66926 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorSearch/resource.ts @@ -0,0 +1,27 @@ +import { geostoreLocatorSearch } from './storeLocatorSearch-construct'; +import { Backend } from '@aws-amplify/backend'; + +const branchName = process.env.AWS_BRANCH ?? 'sandbox'; + +export const defineStoreLocatorSearch = (backend: Backend) => { + const storeLocatorSearchStack = backend.createStack('storeLocatorSearch'); + const storeLocatorSearch = new geostoreLocatorSearch( + storeLocatorSearchStack, + 'storeLocatorSearch', + { + authRoleName: backend.auth.resources.authenticatedUserIamRole.roleName, + unauthRoleName: + backend.auth.resources.unauthenticatedUserIamRole.roleName, + authstorelocator41a9495f41a9495fUserPoolId: + backend.auth.resources.userPool.userPoolId, + authuserPoolGroupsstoreLocatorAdminGroupRole: + backend.auth.resources.groups['storeLocatorAdmin'].role.roleName, + indexName: 'storeLocatorSearch', + dataProvider: 'Here', + dataSourceIntendedUse: 'SingleUse', + branchName, + isDefault: 'true', + } + ); + return storeLocatorSearch; +}; diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorSearch/storeLocatorSearch-construct.ts b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorSearch/storeLocatorSearch-construct.ts new file mode 100644 index 00000000000..bde16c5fbbe --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/geo/storeLocatorSearch/storeLocatorSearch-construct.ts @@ -0,0 +1,270 @@ +import * as cdk from 'aws-cdk-lib'; +import * as iam from 'aws-cdk-lib/aws-iam'; +import * as lambda from 'aws-cdk-lib/aws-lambda'; +import { Construct } from 'constructs'; + +export interface geostoreLocatorSearchProps { + /** + */ + readonly authuserPoolGroupsstoreLocatorAdminGroupRole: string; + /** + */ + readonly authstorelocator41a9495f41a9495fUserPoolId: string; + /** + */ + readonly authRoleName: string; + /** + */ + readonly unauthRoleName: string; + /** + */ + readonly indexName: string; + /** + */ + readonly dataProvider: string; + /** + */ + readonly dataSourceIntendedUse: string; + /** + */ + readonly isDefault: string; + /** + */ + readonly branchName: string; +} + +/** + * {"createdOn":"Mac","createdBy":"Amplify","createdWith":"14.2.5","stackType":"geo-PlaceIndex","metadata":{"whyContinueWithGen1":"Prefer not to answer"}} + */ +export class geostoreLocatorSearch extends Construct { + public readonly name; + public readonly region; + public readonly arn; + + public constructor( + scope: Construct, + id: string, + props: geostoreLocatorSearchProps + ) { + super(scope, id); + + // Mappings + const regionMapping = new cdk.CfnMapping(this, 'RegionMapping', { + mapping: { + 'us-east-1': { + locationServiceRegion: 'us-east-1', + }, + 'us-east-2': { + locationServiceRegion: 'us-east-2', + }, + 'us-west-2': { + locationServiceRegion: 'us-west-2', + }, + 'ap-southeast-1': { + locationServiceRegion: 'ap-southeast-1', + }, + 'ap-southeast-2': { + locationServiceRegion: 'ap-southeast-2', + }, + 'ap-northeast-1': { + locationServiceRegion: 'ap-northeast-1', + }, + 'eu-central-1': { + locationServiceRegion: 'eu-central-1', + }, + 'eu-north-1': { + locationServiceRegion: 'eu-north-1', + }, + 'eu-west-1': { + locationServiceRegion: 'eu-west-1', + }, + 'sa-east-1': { + locationServiceRegion: 'us-east-1', + }, + 'ca-central-1': { + locationServiceRegion: 'us-east-1', + }, + 'us-west-1': { + locationServiceRegion: 'us-west-2', + }, + 'cn-north-1': { + locationServiceRegion: 'us-west-2', + }, + 'cn-northwest-1': { + locationServiceRegion: 'us-west-2', + }, + 'ap-south-1': { + locationServiceRegion: 'us-west-2', + }, + 'ap-northeast-3': { + locationServiceRegion: 'us-west-2', + }, + 'ap-northeast-2': { + locationServiceRegion: 'us-west-2', + }, + 'eu-west-2': { + locationServiceRegion: 'eu-west-1', + }, + 'eu-west-3': { + locationServiceRegion: 'eu-west-1', + }, + 'me-south-1': { + locationServiceRegion: 'ap-southeast-1', + }, + }, + }); + + // Resources + const customPlaceIndexLambdaServiceRoleFd2f3c9d = new iam.CfnRole( + this, + 'CustomPlaceIndexLambdaServiceRoleFD2F3C9D', + { + assumeRolePolicyDocument: { + Statement: [ + { + Action: 'sts:AssumeRole', + Effect: 'Allow', + Principal: { + Service: 'lambda.amazonaws.com', + }, + }, + ], + Version: '2012-10-17', + }, + managedPolicyArns: [ + [ + 'arn:', + cdk.Stack.of(this).partition, + ':iam::aws:policy/service-role/AWSLambdaBasicExecutionRole', + ].join(''), + ], + } + ); + + const customPlaceIndexLambdaServiceRoleDefaultPolicy818068B1 = + new iam.CfnPolicy( + this, + 'CustomPlaceIndexLambdaServiceRoleDefaultPolicy818068B1', + { + policyDocument: { + Statement: [ + { + Action: 'geo:CreatePlaceIndex', + Effect: 'Allow', + Resource: '*', + }, + { + Action: ['geo:UpdatePlaceIndex', 'geo:DeletePlaceIndex'], + Effect: 'Allow', + Resource: `arn:aws:geo:${regionMapping.findInMap( + cdk.Stack.of(this).region, + 'locationServiceRegion' + )}:${cdk.Stack.of(this).account}:place-index/${[ + props.indexName!, + props.branchName!, + ].join('-')}`, + }, + ], + Version: '2012-10-17', + }, + policyName: 'CustomPlaceIndexLambdaServiceRoleDefaultPolicy818068B1', + roles: [customPlaceIndexLambdaServiceRoleFd2f3c9d.ref], + } + ); + + const customPlaceIndexLambda79813Bb9 = new lambda.CfnFunction( + this, + 'CustomPlaceIndexLambda79813BB9', + { + code: { + zipFile: + "const response = require('cfn-response');\nconst { LocationClient, CreatePlaceIndexCommand, DeletePlaceIndexCommand, UpdatePlaceIndexCommand } = require('@aws-sdk/client-location');\nexports.handler = async function (event, context) {\n try {\n console.log('REQUEST RECEIVED:' + JSON.stringify(event));\n const pricingPlan = 'RequestBasedUsage';\n if (event.RequestType === 'Create') {\n const params = {\n IndexName: event.ResourceProperties.indexName,\n DataSource: event.ResourceProperties.dataSource,\n DataSourceConfiguration: {\n IntendedUse: event.ResourceProperties.dataSourceIntendedUse,\n },\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new CreatePlaceIndexCommand(params));\n console.log('create resource response data' + JSON.stringify(res));\n if (res.IndexName && res.IndexArn) {\n event.PhysicalResourceId = res.IndexName;\n await response.send(event, context, response.SUCCESS, res, params.IndexName);\n } else {\n await response.send(event, context, response.FAILED, res, params.IndexName);\n }\n }\n if (event.RequestType === 'Update') {\n const params = {\n IndexName: event.ResourceProperties.indexName,\n DataSourceConfiguration: {\n IntendedUse: event.ResourceProperties.dataSourceIntendedUse,\n },\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new UpdatePlaceIndexCommand(params));\n console.log('update resource response data' + JSON.stringify(res));\n if (res.IndexName && res.IndexArn) {\n event.PhysicalResourceId = res.IndexName;\n await response.send(event, context, response.SUCCESS, res, params.IndexName);\n } else {\n await response.send(event, context, response.FAILED, res, params.IndexName);\n }\n }\n if (event.RequestType === 'Delete') {\n const params = {\n IndexName: event.ResourceProperties.indexName,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new DeletePlaceIndexCommand(params));\n event.PhysicalResourceId = event.ResourceProperties.indexName;\n console.log('delete resource response data' + JSON.stringify(res));\n await response.send(event, context, response.SUCCESS, res, params.IndexName);\n }\n } catch (err) {\n console.log(err.stack);\n const res = { Error: err };\n await response.send(event, context, response.FAILED, res, event.ResourceProperties.indexName);\n throw err;\n }\n};\n", + }, + handler: 'index.handler', + role: customPlaceIndexLambdaServiceRoleFd2f3c9d.attrArn, + runtime: 'nodejs22.x', + timeout: 300, + } + ); + customPlaceIndexLambda79813Bb9.addDependency( + customPlaceIndexLambdaServiceRoleDefaultPolicy818068B1 + ); + customPlaceIndexLambda79813Bb9.addDependency( + customPlaceIndexLambdaServiceRoleFd2f3c9d + ); + + const customPlaceIndex = new cdk.CfnCustomResource( + this, + 'CustomPlaceIndex', + { + serviceToken: customPlaceIndexLambda79813Bb9.attrArn, + } + ); + customPlaceIndex.addOverride('Type', 'Custom::LambdaCallout'); + customPlaceIndex.addPropertyOverride( + 'indexName', + [props.indexName!, props.branchName!].join('-') + ); + customPlaceIndex.addPropertyOverride('dataSource', props.dataProvider!); + customPlaceIndex.addPropertyOverride( + 'dataSourceIntendedUse', + props.dataSourceIntendedUse! + ); + customPlaceIndex.addPropertyOverride( + 'region', + regionMapping.findInMap( + cdk.Stack.of(this).region, + 'locationServiceRegion' + ) + ); + customPlaceIndex.addPropertyOverride('env', props.branchName!); + customPlaceIndex.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE; + + const placeIndexPolicy = new iam.CfnPolicy(this, 'PlaceIndexPolicy', { + policyDocument: { + Statement: [ + { + Action: [ + 'geo:SearchPlaceIndexForPosition', + 'geo:SearchPlaceIndexForText', + 'geo:SearchPlaceIndexForSuggestions', + 'geo:GetPlace', + ], + Effect: 'Allow', + Resource: customPlaceIndex.getAtt('IndexArn').toString(), + }, + ], + Version: '2012-10-17', + }, + policyName: [ + [props.indexName!, props.branchName!].join('-'), + 'Policy', + ].join(''), + roles: [ + props.authRoleName!, + props.unauthRoleName!, + props.authuserPoolGroupsstoreLocatorAdminGroupRole!, + ], + }); + + // Outputs + this.name = customPlaceIndex.getAtt('IndexName').toString(); + new cdk.CfnOutput(this, 'CfnOutputName', { + key: 'Name', + value: this.name!.toString(), + }); + this.region = regionMapping.findInMap( + cdk.Stack.of(this).region, + 'locationServiceRegion' + ); + new cdk.CfnOutput(this, 'CfnOutputRegion', { + key: 'Region', + value: this.region!.toString(), + }); + this.arn = customPlaceIndex.getAtt('IndexArn').toString(); + new cdk.CfnOutput(this, 'CfnOutputArn', { + key: 'Arn', + value: this.arn!.toString(), + }); + } +} diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/package.json b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/package.json new file mode 100644 index 00000000000..3dbc1ca591c --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/tsconfig.json b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/tsconfig.json new file mode 100644 index 00000000000..fb4251ddaae --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/amplify/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "es2022", + "module": "es2022", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "paths": { + "$amplify/*": ["../.amplify/generated/*"] + } + } +} diff --git a/amplify-migration-apps/store-locator/_snapshot.post.generate/package.json b/amplify-migration-apps/store-locator/_snapshot.post.generate/package.json new file mode 100644 index 00000000000..084b5dac234 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.post.generate/package.json @@ -0,0 +1,52 @@ +{ + "name": "@amplify-migration-apps/store-locator", + "private": true, + "version": "0.0.0", + "type": "module", + "installConfig": { + "hoistingLimits": "workspaces" + }, + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview", + "sanitize": "cd _snapshot.generate.input && tsx ../sanitize.ts", + "typecheck": "cd _snapshot.generate.expected/amplify && npx tsc --noEmit" + }, + "dependencies": { + "@aws-amplify/geo": "^3.0.92", + "@aws-amplify/ui-react": "^6.13.2", + "@aws-amplify/ui-react-geo": "^2.2.13", + "aws-amplify": "^6.16.0", + "axios": "latest", + "maplibre-gl": "^2.4.0", + "maplibre-gl-js-amplify": "^4.0.2", + "react": "^19.2.0", + "react-dom": "^19.2.0" + }, + "devDependencies": { + "@aws-amplify/backend": "^1.18.0", + "@aws-amplify/backend-cli": "^1.8.0", + "@aws-amplify/backend-data": "^1.6.2", + "@eslint/js": "^9.39.1", + "@types/aws-lambda": "^8.10.92", + "@types/node": "*", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "aws-cdk": "^2", + "aws-cdk-lib": "^2", + "ci-info": "^4.3.1", + "constructs": "^10.0.0", + "esbuild": "^0.27.0", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "tsx": "^4.20.6", + "typescript": "~5.9.3", + "typescript-eslint": "^8.46.4", + "vite": "^7.2.4" + } +} diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/.gitignore b/amplify-migration-apps/store-locator/_snapshot.pre.generate/.gitignore new file mode 100644 index 00000000000..ddc1f0fb628 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/.gitignore @@ -0,0 +1,21 @@ +#amplify-do-not-edit-begin +!amplify/\#current-cloud-backend +amplify/.config/local-* +!amplify/logs +!amplify/mock-data +!amplify/mock-api-resources +!amplify/backend/amplify-meta.json +!amplify/backend/.temp +!build/ +dist/ +node_modules/ +aws-exports.js +awsconfiguration.json +amplifyconfiguration.json +amplifyconfiguration.dart +amplify-build-config.json +amplify-gradle-config.json +amplifytools.xcconfig +.secret-* +**.sample +#amplify-do-not-edit-end \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/amplify-meta.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/amplify-meta.json new file mode 100644 index 00000000000..ead1cbf796c --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/amplify-meta.json @@ -0,0 +1,227 @@ +{ + "providers": { + "awscloudformation": { + "AuthRoleName": "amplify-storelocator-main-f9ca7-authRole", + "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-storelocator-main-f9ca7-unauthRole", + "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-storelocator-main-f9ca7-authRole", + "Region": "us-east-1", + "DeploymentBucketName": "amplify-storelocator-main-f9ca7-deployment", + "UnauthRoleName": "amplify-storelocator-main-f9ca7-unauthRole", + "StackName": "amplify-storelocator-main-f9ca7", + "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-storelocator-main-f9ca7/06c2ecf0-279e-11f1-a161-0ea0286337e9", + "AmplifyAppId": "storelocator", + "AuthTriggerTemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json" + } + }, + "auth": { + "userPoolGroups": { + "service": "Cognito-UserPool-Groups", + "providerPlugin": "awscloudformation", + "dependsOn": [ + { + "category": "auth", + "resourceName": "storelocator41a9495f41a9495f", + "attributes": [ + "UserPoolId", + "AppClientIDWeb", + "AppClientID", + "IdentityPoolId" + ] + } + ], + "lastPushTimeStamp": "2026-03-24T16:38:00.639Z", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "logicalId": "authuserPoolGroups" + }, + "output": { + "storeLocatorAdminGroupRole": "arn:aws:iam::123456789012:role/us-east-1_R1pdziFVe-storeLocatorAdminGroupRole" + }, + "lastPushDirHash": "aY2fv0JwB9V2Pnq+Iavglw2oGVE=" + }, + "storelocator41a9495f41a9495f": { + "service": "Cognito", + "providerPlugin": "awscloudformation", + "dependsOn": [ + { + "category": "function", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation", + "triggerProvider": "Cognito", + "attributes": [ + "Arn", + "Name" + ] + } + ], + "customAuth": false, + "frontendAuthConfig": { + "socialProviders": [], + "usernameAttributes": [ + "EMAIL" + ], + "signupAttributes": [ + "EMAIL" + ], + "passwordProtectionSettings": { + "passwordPolicyMinLength": 8, + "passwordPolicyCharacters": [] + }, + "mfaConfiguration": "OFF", + "mfaTypes": [ + "SMS" + ], + "verificationMechanisms": [ + "EMAIL" + ] + }, + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/storelocator41a9495f41a9495f-cloudformation-template.json", + "logicalId": "authstorelocator41a9495f41a9495f" + }, + "lastPushTimeStamp": "2026-03-24T16:38:00.639Z", + "output": { + "UserPoolId": "us-east-1_R1pdziFVe", + "AppClientIDWeb": "6am6ldh23n8ke819nuvk51cddq", + "AppClientID": "5ppvpdo9dmkrj55qi8h865lt34", + "IdentityPoolId": "us-east-1:4ea514e6-bc16-4990-a5ea-cefe84c3050d", + "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_R1pdziFVe", + "IdentityPoolName": "storelocator41a9495f_identitypool_41a9495f__main", + "UserPoolName": "storelocator41a9495f_userpool_41a9495f" + }, + "lastPushDirHash": "BhovtRkLGtk84r9ocO7d+lsB8TQ=" + } + }, + "function": { + "storelocator41a9495f41a9495fPostConfirmation": { + "build": true, + "providerPlugin": "awscloudformation", + "service": "Lambda", + "lastBuildTimeStamp": "2026-03-24T16:33:11.355Z", + "lastBuildType": "PROD", + "lastPackageTimeStamp": "2026-03-24T16:33:12.063Z", + "distZipFilename": "storelocator41a9495f41a9495fPostConfirmation-6a6c746d4739755a384a-build.zip", + "s3Bucket": { + "deploymentBucketName": "amplify-storelocator-main-f9ca7-deployment", + "s3Key": "amplify-builds/storelocator41a9495f41a9495fPostConfirmation-6a6c746d4739755a384a-build.zip" + }, + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/function/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json", + "logicalId": "functionstorelocator41a9495f41a9495fPostConfirmation" + }, + "lastPushTimeStamp": "2026-03-24T16:38:00.639Z", + "output": { + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/storelocator41a9495f41a9495fPostConfirmation-main", + "Region": "us-east-1", + "Arn": "arn:aws:lambda:us-east-1:123456789012:function:storelocator41a9495f41a9495fPostConfirmation-main", + "Name": "storelocator41a9495f41a9495fPostConfirmation-main", + "LambdaExecutionRole": "storelocator41a9495f41a9495fPostConfirmation-main" + }, + "lastPushDirHash": "6EQkwiPaTbkyYCg4JDkMQiOWz8g=" + } + }, + "geo": { + "storeLocatorMap": { + "isDefault": true, + "providerPlugin": "awscloudformation", + "service": "Map", + "mapStyle": "VectorEsriStreets", + "accessType": "AuthorizedAndGuestUsers", + "dependsOn": [ + { + "category": "auth", + "resourceName": "storelocator41a9495f41a9495f", + "attributes": [ + "UserPoolId" + ] + }, + { + "category": "auth", + "resourceName": "userPoolGroups", + "attributes": [ + "storeLocatorAdminGroupRole" + ] + } + ], + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorMap-cloudformation-template.json", + "logicalId": "geostoreLocatorMap" + }, + "lastPushTimeStamp": "2026-03-24T16:38:00.639Z", + "output": { + "Style": "VectorEsriStreets", + "Region": "us-east-1", + "Arn": "arn:aws:geo:us-east-1:123456789012:map/storeLocatorMap-main", + "Name": "storeLocatorMap-main" + }, + "lastPushDirHash": "f6hS2nqVgBHpibNEdmumaRgBCRM=" + }, + "storeLocatorSearch": { + "isDefault": true, + "providerPlugin": "awscloudformation", + "service": "PlaceIndex", + "dataProvider": "HERE", + "dataSourceIntendedUse": "SingleUse", + "accessType": "AuthorizedAndGuestUsers", + "dependsOn": [ + { + "category": "auth", + "resourceName": "storelocator41a9495f41a9495f", + "attributes": [ + "UserPoolId" + ] + }, + { + "category": "auth", + "resourceName": "userPoolGroups", + "attributes": [ + "storeLocatorAdminGroupRole" + ] + } + ], + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorSearch-cloudformation-template.json", + "logicalId": "geostoreLocatorSearch" + }, + "lastPushTimeStamp": "2026-03-24T16:38:00.639Z", + "output": { + "Region": "us-east-1", + "Arn": "arn:aws:geo:us-east-1:123456789012:place-index/storeLocatorSearch-main", + "Name": "storeLocatorSearch-main" + }, + "lastPushDirHash": "DcWb0RNLHGk1nlEWvQI8kcmIhuw=" + }, + "storeLocatorGeofence": { + "isDefault": true, + "providerPlugin": "awscloudformation", + "service": "GeofenceCollection", + "accessType": "CognitoGroups", + "dependsOn": [ + { + "category": "auth", + "resourceName": "storelocator41a9495f41a9495f", + "attributes": [ + "UserPoolId" + ] + }, + { + "category": "auth", + "resourceName": "userPoolGroups", + "attributes": [ + "storeLocatorAdminGroupRole" + ] + } + ], + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorGeofence-cloudformation-template.json", + "logicalId": "geostoreLocatorGeofence" + }, + "lastPushTimeStamp": "2026-03-24T16:38:00.639Z", + "output": { + "Region": "us-east-1", + "Arn": "arn:aws:geo:us-east-1:123456789012:geofence-collection/storeLocatorGeofence-main", + "Name": "storeLocatorGeofence-main" + }, + "lastPushDirHash": "qBxz5+dofKzvXa0AVAS5tnATCqA=" + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/storelocator41a9495f41a9495f/build/auth-trigger-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/storelocator41a9495f41a9495f/build/auth-trigger-cloudformation-template.json new file mode 100644 index 00000000000..e6186c748d1 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/storelocator41a9495f41a9495f/build/auth-trigger-cloudformation-template.json @@ -0,0 +1,204 @@ +{ + "Description": "Custom Resource stack for Auth Trigger created using Amplify CLI", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "env": { + "Type": "String" + }, + "userpoolId": { + "Type": "String" + }, + "userpoolArn": { + "Type": "String" + }, + "functionstorelocator41a9495f41a9495fPostConfirmationName": { + "Type": "String" + }, + "functionstorelocator41a9495f41a9495fPostConfirmationArn": { + "Type": "String" + }, + "functionstorelocator41a9495f41a9495fPostConfirmationLambdaExecutionRole": { + "Type": "String" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "UserPoolPostConfirmationLambdaInvokePermission": { + "Type": "AWS::Lambda::Permission", + "Properties": { + "Action": "lambda:InvokeFunction", + "FunctionName": { + "Ref": "functionstorelocator41a9495f41a9495fPostConfirmationName" + }, + "Principal": "cognito-idp.amazonaws.com", + "SourceArn": { + "Ref": "userpoolArn" + } + } + }, + "Amplifyfunctionstorelocator41a9495f41a9495fPostConfirmationNamePostConfirmationAddToGroupCognitoC0815C8F": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "cognito-idp:AdminAddUserToGroup", + "cognito-idp:GetGroup", + "cognito-idp:CreateGroup" + ], + "Effect": "Allow", + "Resource": { + "Ref": "userpoolArn" + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "AddToGroupCognito", + "Roles": [ + { + "Fn::Select": [ + 1, + { + "Fn::Split": [ + "/", + { + "Fn::Select": [ + 5, + { + "Fn::Split": [ + ":", + { + "Ref": "functionstorelocator41a9495f41a9495fPostConfirmationLambdaExecutionRole" + } + ] + } + ] + } + ] + } + ] + } + ] + } + }, + "authTriggerFnServiceRole08093B67": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "authTriggerFnServiceRoleDefaultPolicyEC9285A8": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "cognito-idp:DescribeUserPool", + "cognito-idp:UpdateUserPool" + ], + "Effect": "Allow", + "Resource": { + "Ref": "userpoolArn" + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "authTriggerFnServiceRoleDefaultPolicyEC9285A8", + "Roles": [ + { + "Ref": "authTriggerFnServiceRole08093B67" + } + ] + } + }, + "authTriggerFn7FCFA449": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "const response = require('cfn-response');\nconst {\n CognitoIdentityProviderClient,\n DescribeUserPoolCommand,\n UpdateUserPoolCommand,\n} = require('@aws-sdk/client-cognito-identity-provider');\n\nexports.handler = (event, context) => {\n // Don't return promise, response.send() marks context as done internally\n void tryHandleEvent(event, context);\n};\n\nasync function tryHandleEvent(event, context) {\n const physicalResourceId =\n event.RequestType === 'Update' ? event.PhysicalResourceId : `${event.LogicalResourceId}-${event.ResourceProperties.userpoolId}`;\n try {\n await handleEvent(event);\n response.send(event, context, response.SUCCESS, {}, physicalResourceId);\n } catch (err) {\n console.log(err.stack);\n response.send(event, context, response.FAILED, { err }, physicalResourceId);\n }\n}\n\nasync function handleEvent(event) {\n const userPoolId = event.ResourceProperties.userpoolId;\n const { lambdaConfig } = event.ResourceProperties;\n const config = {};\n const cognitoClient = new CognitoIdentityProviderClient({});\n const userPoolConfig = await cognitoClient.send(new DescribeUserPoolCommand({ UserPoolId: userPoolId }));\n const userPoolParams = userPoolConfig.UserPool;\n // update userPool params\n\n const updateUserPoolConfig = {\n UserPoolId: userPoolParams.Id,\n Policies: userPoolParams.Policies,\n SmsVerificationMessage: userPoolParams.SmsVerificationMessage,\n AccountRecoverySetting: userPoolParams.AccountRecoverySetting,\n AdminCreateUserConfig: userPoolParams.AdminCreateUserConfig,\n AutoVerifiedAttributes: userPoolParams.AutoVerifiedAttributes,\n EmailConfiguration: userPoolParams.EmailConfiguration,\n EmailVerificationMessage: userPoolParams.EmailVerificationMessage,\n EmailVerificationSubject: userPoolParams.EmailVerificationSubject,\n VerificationMessageTemplate: userPoolParams.VerificationMessageTemplate,\n SmsAuthenticationMessage: userPoolParams.SmsAuthenticationMessage,\n MfaConfiguration: userPoolParams.MfaConfiguration,\n DeviceConfiguration: userPoolParams.DeviceConfiguration,\n SmsConfiguration: userPoolParams.SmsConfiguration,\n UserPoolTags: userPoolParams.UserPoolTags,\n UserPoolAddOns: userPoolParams.UserPoolAddOns,\n };\n\n // removing undefined keys\n Object.keys(updateUserPoolConfig).forEach((key) => updateUserPoolConfig[key] === undefined && delete updateUserPoolConfig[key]);\n\n /* removing UnusedAccountValidityDays as deprecated\n InvalidParameterException: Please use TemporaryPasswordValidityDays in PasswordPolicy instead of UnusedAccountValidityDays\n */\n if (updateUserPoolConfig.AdminCreateUserConfig && updateUserPoolConfig.AdminCreateUserConfig.UnusedAccountValidityDays) {\n delete updateUserPoolConfig.AdminCreateUserConfig.UnusedAccountValidityDays;\n }\n lambdaConfig.forEach((lambda) => (config[`${lambda.triggerType}`] = lambda.lambdaFunctionArn));\n if (event.RequestType === 'Delete') {\n updateUserPoolConfig.LambdaConfig = {};\n console.log(`${event.RequestType}:`, JSON.stringify(updateUserPoolConfig));\n const result = await cognitoClient.send(new UpdateUserPoolCommand(updateUserPoolConfig));\n console.log(`delete response data ${JSON.stringify(result)}`);\n } else if (event.RequestType === 'Update' || event.RequestType === 'Create') {\n updateUserPoolConfig.LambdaConfig = config;\n const result = await cognitoClient.send(new UpdateUserPoolCommand(updateUserPoolConfig));\n console.log(`createOrUpdate response data ${JSON.stringify(result)}`);\n }\n}\n" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "authTriggerFnServiceRole08093B67", + "Arn" + ] + }, + "Runtime": "nodejs22.x" + }, + "DependsOn": [ + "authTriggerFnServiceRoleDefaultPolicyEC9285A8", + "authTriggerFnServiceRole08093B67" + ] + }, + "CustomAuthTriggerResource": { + "Type": "Custom::CustomAuthTriggerResourceOutputs", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "authTriggerFn7FCFA449", + "Arn" + ] + }, + "userpoolId": { + "Ref": "userpoolId" + }, + "lambdaConfig": [ + { + "triggerType": "PostConfirmation", + "lambdaFunctionName": "storelocator41a9495f41a9495fPostConfirmation", + "lambdaFunctionArn": { + "Ref": "functionstorelocator41a9495f41a9495fPostConfirmationArn" + } + } + ], + "nonce": "a956ed2b-ea63-4747-acee-0f4cb27b3925" + }, + "DependsOn": [ + "authTriggerFn7FCFA449", + "authTriggerFnServiceRoleDefaultPolicyEC9285A8", + "authTriggerFnServiceRole08093B67" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/storelocator41a9495f41a9495f/build/parameters.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/storelocator41a9495f41a9495f/build/parameters.json new file mode 100644 index 00000000000..cba9966059e --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/storelocator41a9495f41a9495f/build/parameters.json @@ -0,0 +1,82 @@ +{ + "identityPoolName": "storelocator41a9495f_identitypool_41a9495f", + "allowUnauthenticatedIdentities": true, + "resourceNameTruncated": "storel41a9495f", + "userPoolName": "storelocator41a9495f_userpool_41a9495f", + "autoVerifiedAttributes": [ + "email" + ], + "mfaConfiguration": "OFF", + "mfaTypes": [ + "SMS Text Message" + ], + "smsAuthenticationMessage": "Your authentication code is {####}", + "smsVerificationMessage": "Your verification code is {####}", + "emailVerificationSubject": "Your verification code", + "emailVerificationMessage": "Your verification code is {####}", + "defaultPasswordPolicy": false, + "passwordPolicyMinLength": 8, + "passwordPolicyCharacters": [], + "requiredAttributes": [ + "email" + ], + "aliasAttributes": [], + "userpoolClientGenerateSecret": false, + "userpoolClientRefreshTokenValidity": "100", + "userpoolClientWriteAttributes": [ + "email" + ], + "userpoolClientReadAttributes": [ + "email" + ], + "userpoolClientLambdaRole": "storel41a9495f_userpoolclient_lambda_role", + "userpoolClientSetAttributes": false, + "sharedId": "41a9495f", + "resourceName": "storelocator41a9495f41a9495f", + "authSelections": "identityPoolAndUserPool", + "useDefault": "manual", + "thirdPartyAuth": false, + "usernameAttributes": [ + "email" + ], + "userPoolGroups": true, + "adminQueries": false, + "triggers": "{\"PostConfirmation\":[\"add-to-group\"]}", + "hostedUI": false, + "userPoolGroupList": [ + "storeLocatorAdmin" + ], + "serviceName": "Cognito", + "usernameCaseSensitive": false, + "useEnabledMfas": true, + "authRoleArn": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + }, + "unauthRoleArn": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + }, + "breakCircularDependency": true, + "dependsOn": [ + { + "category": "function", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation", + "triggerProvider": "Cognito", + "attributes": [ + "Arn", + "Name" + ] + } + ], + "permissions": [ + "{\"policyName\":\"AddToGroupCognito\",\"trigger\":\"PostConfirmation\",\"effect\":\"Allow\",\"actions\":[\"cognito-idp:AdminAddUserToGroup\",\"cognito-idp:GetGroup\",\"cognito-idp:CreateGroup\"],\"resource\":{\"paramType\":\"!GetAtt\",\"keys\":[\"UserPool\",\"Arn\"]}}" + ], + "authTriggerConnections": [ + "{\"triggerType\":\"PostConfirmation\",\"lambdaFunctionName\":\"storelocator41a9495f41a9495fPostConfirmation\"}" + ] +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/storelocator41a9495f41a9495f/build/storelocator41a9495f41a9495f-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/storelocator41a9495f41a9495f/build/storelocator41a9495f41a9495f-cloudformation-template.json new file mode 100644 index 00000000000..32f0ad747e9 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/storelocator41a9495f41a9495f/build/storelocator41a9495f41a9495f-cloudformation-template.json @@ -0,0 +1,486 @@ +{ + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "env": { + "Type": "String" + }, + "functionstorelocator41a9495f41a9495fPostConfirmationArn": { + "Type": "String", + "Default": "functionstorelocator41a9495f41a9495fPostConfirmationArn" + }, + "functionstorelocator41a9495f41a9495fPostConfirmationName": { + "Type": "String", + "Default": "functionstorelocator41a9495f41a9495fPostConfirmationName" + }, + "identityPoolName": { + "Type": "String" + }, + "allowUnauthenticatedIdentities": { + "Type": "String" + }, + "resourceNameTruncated": { + "Type": "String" + }, + "userPoolName": { + "Type": "String" + }, + "autoVerifiedAttributes": { + "Type": "CommaDelimitedList" + }, + "mfaConfiguration": { + "Type": "String" + }, + "mfaTypes": { + "Type": "CommaDelimitedList" + }, + "smsAuthenticationMessage": { + "Type": "String" + }, + "smsVerificationMessage": { + "Type": "String" + }, + "emailVerificationSubject": { + "Type": "String" + }, + "emailVerificationMessage": { + "Type": "String" + }, + "defaultPasswordPolicy": { + "Type": "String" + }, + "passwordPolicyMinLength": { + "Type": "String" + }, + "passwordPolicyCharacters": { + "Type": "CommaDelimitedList" + }, + "requiredAttributes": { + "Type": "CommaDelimitedList" + }, + "aliasAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientGenerateSecret": { + "Type": "String" + }, + "userpoolClientRefreshTokenValidity": { + "Type": "String" + }, + "userpoolClientWriteAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientReadAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientLambdaRole": { + "Type": "String" + }, + "userpoolClientSetAttributes": { + "Type": "String" + }, + "sharedId": { + "Type": "String" + }, + "resourceName": { + "Type": "String" + }, + "authSelections": { + "Type": "String" + }, + "useDefault": { + "Type": "String" + }, + "thirdPartyAuth": { + "Type": "String" + }, + "usernameAttributes": { + "Type": "CommaDelimitedList" + }, + "userPoolGroups": { + "Type": "String" + }, + "adminQueries": { + "Type": "String" + }, + "triggers": { + "Type": "String" + }, + "hostedUI": { + "Type": "String" + }, + "userPoolGroupList": { + "Type": "CommaDelimitedList" + }, + "serviceName": { + "Type": "String" + }, + "usernameCaseSensitive": { + "Type": "String" + }, + "useEnabledMfas": { + "Type": "String" + }, + "authRoleArn": { + "Type": "String" + }, + "unauthRoleArn": { + "Type": "String" + }, + "breakCircularDependency": { + "Type": "String" + }, + "dependsOn": { + "Type": "CommaDelimitedList" + }, + "permissions": { + "Type": "CommaDelimitedList" + }, + "authTriggerConnections": { + "Type": "CommaDelimitedList" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "UserPool": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": { + "Ref": "emailVerificationMessage" + }, + "EmailVerificationSubject": { + "Ref": "emailVerificationSubject" + }, + "MfaConfiguration": { + "Ref": "mfaConfiguration" + }, + "Policies": { + "PasswordPolicy": { + "MinimumLength": { + "Ref": "passwordPolicyMinLength" + }, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userPoolName" + }, + { + "Fn::Join": [ + "", + [ + { + "Ref": "userPoolName" + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "UsernameAttributes": { + "Ref": "usernameAttributes" + }, + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "UserPoolClientWeb": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "storel41a9495f_app_clientWeb", + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "UserPoolClient": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "storel41a9495f_app_client", + "GenerateSecret": { + "Ref": "userpoolClientGenerateSecret" + }, + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "UserPoolClientRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + }, + "Action": "sts:AssumeRole" + } + ] + }, + "RoleName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userpoolClientLambdaRole" + }, + { + "Fn::Join": [ + "", + [ + "upClientLambdaRole41a9495f", + { + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + { + "Ref": "AWS::StackName" + } + ] + } + ] + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + } + } + }, + "IdentityPool": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": { + "Ref": "allowUnauthenticatedIdentities" + }, + "CognitoIdentityProviders": [ + { + "ClientId": { + "Ref": "UserPoolClient" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + }, + { + "ClientId": { + "Ref": "UserPoolClientWeb" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "storelocator41a9495f_identitypool_41a9495f", + { + "Fn::Join": [ + "", + [ + "storelocator41a9495f_identitypool_41a9495f__", + { + "Ref": "env" + } + ] + ] + } + ] + } + } + }, + "IdentityPoolRoleMap": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": { + "Ref": "IdentityPool" + }, + "RoleMappings": { + "UserPoolClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": { + "Ref": "UserPool" + }, + "client": { + "Ref": "UserPoolClient" + } + } + ] + }, + "Type": "Token" + }, + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${webClient}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": { + "Ref": "UserPool" + }, + "webClient": { + "Ref": "UserPoolClientWeb" + } + } + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": { + "Ref": "unauthRoleArn" + }, + "authenticated": { + "Ref": "authRoleArn" + } + } + }, + "DependsOn": [ + "IdentityPool", + "UserPoolClient", + "UserPoolClientWeb" + ] + } + }, + "Outputs": { + "IdentityPoolId": { + "Description": "Id for the identity pool", + "Value": { + "Ref": "IdentityPool" + } + }, + "IdentityPoolName": { + "Value": { + "Fn::GetAtt": [ + "IdentityPool", + "Name" + ] + } + }, + "UserPoolId": { + "Description": "Id for the user pool", + "Value": { + "Ref": "UserPool" + } + }, + "UserPoolArn": { + "Description": "Arn for the user pool", + "Value": { + "Fn::GetAtt": [ + "UserPool", + "Arn" + ] + } + }, + "UserPoolName": { + "Value": { + "Ref": "userPoolName" + } + }, + "AppClientIDWeb": { + "Description": "The user pool app client id for web", + "Value": { + "Ref": "UserPoolClientWeb" + } + }, + "AppClientID": { + "Description": "The user pool app client id", + "Value": { + "Ref": "UserPoolClient" + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/storelocator41a9495f41a9495f/cli-inputs.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/storelocator41a9495f41a9495f/cli-inputs.json new file mode 100644 index 00000000000..c66baffc70c --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/storelocator41a9495f41a9495f/cli-inputs.json @@ -0,0 +1,89 @@ +{ + "version": "1", + "cognitoConfig": { + "identityPoolName": "storelocator41a9495f_identitypool_41a9495f", + "allowUnauthenticatedIdentities": true, + "resourceNameTruncated": "storel41a9495f", + "userPoolName": "storelocator41a9495f_userpool_41a9495f", + "autoVerifiedAttributes": [ + "email" + ], + "mfaConfiguration": "OFF", + "mfaTypes": [ + "SMS Text Message" + ], + "smsAuthenticationMessage": "Your authentication code is {####}", + "smsVerificationMessage": "Your verification code is {####}", + "emailVerificationSubject": "Your verification code", + "emailVerificationMessage": "Your verification code is {####}", + "defaultPasswordPolicy": false, + "passwordPolicyMinLength": 8, + "passwordPolicyCharacters": [], + "requiredAttributes": [ + "email" + ], + "aliasAttributes": [], + "userpoolClientGenerateSecret": false, + "userpoolClientRefreshTokenValidity": "100", + "userpoolClientWriteAttributes": [ + "email" + ], + "userpoolClientReadAttributes": [ + "email" + ], + "userpoolClientLambdaRole": "storel41a9495f_userpoolclient_lambda_role", + "userpoolClientSetAttributes": false, + "sharedId": "41a9495f", + "resourceName": "storelocator41a9495f41a9495f", + "authSelections": "identityPoolAndUserPool", + "useDefault": "manual", + "thirdPartyAuth": false, + "usernameAttributes": [ + "email" + ], + "userPoolGroups": true, + "adminQueries": false, + "triggers": { + "PostConfirmation": [ + "add-to-group" + ] + }, + "hostedUI": false, + "userPoolGroupList": [ + "storeLocatorAdmin" + ], + "serviceName": "Cognito", + "usernameCaseSensitive": false, + "useEnabledMfas": true, + "authRoleArn": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + }, + "unauthRoleArn": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + }, + "breakCircularDependency": true, + "dependsOn": [ + { + "category": "function", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation", + "triggerProvider": "Cognito", + "attributes": [ + "Arn", + "Name" + ] + } + ], + "permissions": [ + "{\"policyName\":\"AddToGroupCognito\",\"trigger\":\"PostConfirmation\",\"effect\":\"Allow\",\"actions\":[\"cognito-idp:AdminAddUserToGroup\",\"cognito-idp:GetGroup\",\"cognito-idp:CreateGroup\"],\"resource\":{\"paramType\":\"!GetAtt\",\"keys\":[\"UserPool\",\"Arn\"]}}" + ], + "authTriggerConnections": [ + "{\"triggerType\":\"PostConfirmation\",\"lambdaFunctionName\":\"storelocator41a9495f41a9495fPostConfirmation\"}" + ] + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/build/parameters.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/build/parameters.json new file mode 100644 index 00000000000..48115bd5cd6 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/build/parameters.json @@ -0,0 +1,14 @@ +{ + "AuthRoleArn": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + }, + "UnauthRoleArn": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json new file mode 100644 index 00000000000..5edc3def07d --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json @@ -0,0 +1,109 @@ +{ + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito-UserPool-Groups\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "env": { + "Type": "String" + }, + "AuthRoleArn": { + "Type": "String" + }, + "UnauthRoleArn": { + "Type": "String" + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Type": "String", + "Default": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "authstorelocator41a9495f41a9495fIdentityPoolId": { + "Type": "String", + "Default": "authstorelocator41a9495f41a9495fIdentityPoolId" + }, + "authstorelocator41a9495f41a9495fAppClientID": { + "Type": "String", + "Default": "authstorelocator41a9495f41a9495fAppClientID" + }, + "authstorelocator41a9495f41a9495fAppClientIDWeb": { + "Type": "String", + "Default": "authstorelocator41a9495f41a9495fAppClientIDWeb" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "storeLocatorAdminGroup": { + "Type": "AWS::Cognito::UserPoolGroup", + "Properties": { + "Description": "override success", + "GroupName": "storeLocatorAdmin", + "Precedence": 1, + "RoleArn": { + "Fn::GetAtt": [ + "storeLocatorAdminGroupRole", + "Arn" + ] + }, + "UserPoolId": { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + } + } + }, + "storeLocatorAdminGroupRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "", + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + }, + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": { + "Ref": "authstorelocator41a9495f41a9495fIdentityPoolId" + } + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "authenticated" + } + } + } + ] + }, + "RoleName": { + "Fn::Join": [ + "", + [ + { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "-storeLocatorAdminGroupRole" + ] + ] + } + } + } + }, + "Outputs": { + "storeLocatorAdminGroupRole": { + "Value": { + "Fn::GetAtt": [ + "storeLocatorAdminGroupRole", + "Arn" + ] + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/user-pool-group-precedence.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/user-pool-group-precedence.json new file mode 100644 index 00000000000..bcc9738de65 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/auth/userPoolGroups/user-pool-group-precedence.json @@ -0,0 +1,6 @@ +[ + { + "groupName": "storeLocatorAdmin", + "precedence": 1 + } +] \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/storelocator41a9495f41a9495f/build/storelocator41a9495f41a9495f-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/storelocator41a9495f41a9495f/build/storelocator41a9495f41a9495f-cloudformation-template.json new file mode 100644 index 00000000000..32f0ad747e9 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/storelocator41a9495f41a9495f/build/storelocator41a9495f41a9495f-cloudformation-template.json @@ -0,0 +1,486 @@ +{ + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "env": { + "Type": "String" + }, + "functionstorelocator41a9495f41a9495fPostConfirmationArn": { + "Type": "String", + "Default": "functionstorelocator41a9495f41a9495fPostConfirmationArn" + }, + "functionstorelocator41a9495f41a9495fPostConfirmationName": { + "Type": "String", + "Default": "functionstorelocator41a9495f41a9495fPostConfirmationName" + }, + "identityPoolName": { + "Type": "String" + }, + "allowUnauthenticatedIdentities": { + "Type": "String" + }, + "resourceNameTruncated": { + "Type": "String" + }, + "userPoolName": { + "Type": "String" + }, + "autoVerifiedAttributes": { + "Type": "CommaDelimitedList" + }, + "mfaConfiguration": { + "Type": "String" + }, + "mfaTypes": { + "Type": "CommaDelimitedList" + }, + "smsAuthenticationMessage": { + "Type": "String" + }, + "smsVerificationMessage": { + "Type": "String" + }, + "emailVerificationSubject": { + "Type": "String" + }, + "emailVerificationMessage": { + "Type": "String" + }, + "defaultPasswordPolicy": { + "Type": "String" + }, + "passwordPolicyMinLength": { + "Type": "String" + }, + "passwordPolicyCharacters": { + "Type": "CommaDelimitedList" + }, + "requiredAttributes": { + "Type": "CommaDelimitedList" + }, + "aliasAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientGenerateSecret": { + "Type": "String" + }, + "userpoolClientRefreshTokenValidity": { + "Type": "String" + }, + "userpoolClientWriteAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientReadAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientLambdaRole": { + "Type": "String" + }, + "userpoolClientSetAttributes": { + "Type": "String" + }, + "sharedId": { + "Type": "String" + }, + "resourceName": { + "Type": "String" + }, + "authSelections": { + "Type": "String" + }, + "useDefault": { + "Type": "String" + }, + "thirdPartyAuth": { + "Type": "String" + }, + "usernameAttributes": { + "Type": "CommaDelimitedList" + }, + "userPoolGroups": { + "Type": "String" + }, + "adminQueries": { + "Type": "String" + }, + "triggers": { + "Type": "String" + }, + "hostedUI": { + "Type": "String" + }, + "userPoolGroupList": { + "Type": "CommaDelimitedList" + }, + "serviceName": { + "Type": "String" + }, + "usernameCaseSensitive": { + "Type": "String" + }, + "useEnabledMfas": { + "Type": "String" + }, + "authRoleArn": { + "Type": "String" + }, + "unauthRoleArn": { + "Type": "String" + }, + "breakCircularDependency": { + "Type": "String" + }, + "dependsOn": { + "Type": "CommaDelimitedList" + }, + "permissions": { + "Type": "CommaDelimitedList" + }, + "authTriggerConnections": { + "Type": "CommaDelimitedList" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "UserPool": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": { + "Ref": "emailVerificationMessage" + }, + "EmailVerificationSubject": { + "Ref": "emailVerificationSubject" + }, + "MfaConfiguration": { + "Ref": "mfaConfiguration" + }, + "Policies": { + "PasswordPolicy": { + "MinimumLength": { + "Ref": "passwordPolicyMinLength" + }, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userPoolName" + }, + { + "Fn::Join": [ + "", + [ + { + "Ref": "userPoolName" + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "UsernameAttributes": { + "Ref": "usernameAttributes" + }, + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "UserPoolClientWeb": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "storel41a9495f_app_clientWeb", + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "UserPoolClient": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "storel41a9495f_app_client", + "GenerateSecret": { + "Ref": "userpoolClientGenerateSecret" + }, + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "UserPoolClientRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + }, + "Action": "sts:AssumeRole" + } + ] + }, + "RoleName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userpoolClientLambdaRole" + }, + { + "Fn::Join": [ + "", + [ + "upClientLambdaRole41a9495f", + { + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + { + "Ref": "AWS::StackName" + } + ] + } + ] + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + } + } + }, + "IdentityPool": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": { + "Ref": "allowUnauthenticatedIdentities" + }, + "CognitoIdentityProviders": [ + { + "ClientId": { + "Ref": "UserPoolClient" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + }, + { + "ClientId": { + "Ref": "UserPoolClientWeb" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "storelocator41a9495f_identitypool_41a9495f", + { + "Fn::Join": [ + "", + [ + "storelocator41a9495f_identitypool_41a9495f__", + { + "Ref": "env" + } + ] + ] + } + ] + } + } + }, + "IdentityPoolRoleMap": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": { + "Ref": "IdentityPool" + }, + "RoleMappings": { + "UserPoolClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": { + "Ref": "UserPool" + }, + "client": { + "Ref": "UserPoolClient" + } + } + ] + }, + "Type": "Token" + }, + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${webClient}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": { + "Ref": "UserPool" + }, + "webClient": { + "Ref": "UserPoolClientWeb" + } + } + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": { + "Ref": "unauthRoleArn" + }, + "authenticated": { + "Ref": "authRoleArn" + } + } + }, + "DependsOn": [ + "IdentityPool", + "UserPoolClient", + "UserPoolClientWeb" + ] + } + }, + "Outputs": { + "IdentityPoolId": { + "Description": "Id for the identity pool", + "Value": { + "Ref": "IdentityPool" + } + }, + "IdentityPoolName": { + "Value": { + "Fn::GetAtt": [ + "IdentityPool", + "Name" + ] + } + }, + "UserPoolId": { + "Description": "Id for the user pool", + "Value": { + "Ref": "UserPool" + } + }, + "UserPoolArn": { + "Description": "Arn for the user pool", + "Value": { + "Fn::GetAtt": [ + "UserPool", + "Arn" + ] + } + }, + "UserPoolName": { + "Value": { + "Ref": "userPoolName" + } + }, + "AppClientIDWeb": { + "Description": "The user pool app client id for web", + "Value": { + "Ref": "UserPoolClientWeb" + } + }, + "AppClientID": { + "Description": "The user pool app client id", + "Value": { + "Ref": "UserPoolClient" + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json new file mode 100644 index 00000000000..5edc3def07d --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json @@ -0,0 +1,109 @@ +{ + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito-UserPool-Groups\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "env": { + "Type": "String" + }, + "AuthRoleArn": { + "Type": "String" + }, + "UnauthRoleArn": { + "Type": "String" + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Type": "String", + "Default": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "authstorelocator41a9495f41a9495fIdentityPoolId": { + "Type": "String", + "Default": "authstorelocator41a9495f41a9495fIdentityPoolId" + }, + "authstorelocator41a9495f41a9495fAppClientID": { + "Type": "String", + "Default": "authstorelocator41a9495f41a9495fAppClientID" + }, + "authstorelocator41a9495f41a9495fAppClientIDWeb": { + "Type": "String", + "Default": "authstorelocator41a9495f41a9495fAppClientIDWeb" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "storeLocatorAdminGroup": { + "Type": "AWS::Cognito::UserPoolGroup", + "Properties": { + "Description": "override success", + "GroupName": "storeLocatorAdmin", + "Precedence": 1, + "RoleArn": { + "Fn::GetAtt": [ + "storeLocatorAdminGroupRole", + "Arn" + ] + }, + "UserPoolId": { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + } + } + }, + "storeLocatorAdminGroupRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "", + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + }, + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": { + "Ref": "authstorelocator41a9495f41a9495fIdentityPoolId" + } + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "authenticated" + } + } + } + ] + }, + "RoleName": { + "Fn::Join": [ + "", + [ + { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "-storeLocatorAdminGroupRole" + ] + ] + } + } + } + }, + "Outputs": { + "storeLocatorAdminGroupRole": { + "Value": { + "Fn::GetAtt": [ + "storeLocatorAdminGroupRole", + "Arn" + ] + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json new file mode 100644 index 00000000000..1b8df321c23 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json @@ -0,0 +1,653 @@ +{ + "Description": "Root Stack for AWS Amplify CLI", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "DeploymentBucketName": { + "Type": "String", + "Default": "DeploymentBucket", + "Description": "Name of the common deployment bucket provided by the parent stack" + }, + "AuthRoleName": { + "Type": "String", + "Default": "AuthRoleName", + "Description": "Name of the common deployment bucket provided by the parent stack" + }, + "UnauthRoleName": { + "Type": "String", + "Default": "UnAuthRoleName", + "Description": "Name of the common deployment bucket provided by the parent stack" + } + }, + "Outputs": { + "Region": { + "Description": "CloudFormation provider root stack Region", + "Value": { + "Ref": "AWS::Region" + }, + "Export": { + "Name": { + "Fn::Sub": "${AWS::StackName}-Region" + } + } + }, + "StackName": { + "Description": "CloudFormation provider root stack ID", + "Value": { + "Ref": "AWS::StackName" + }, + "Export": { + "Name": { + "Fn::Sub": "${AWS::StackName}-StackName" + } + } + }, + "StackId": { + "Description": "CloudFormation provider root stack name", + "Value": { + "Ref": "AWS::StackId" + }, + "Export": { + "Name": { + "Fn::Sub": "${AWS::StackName}-StackId" + } + } + }, + "AuthRoleArn": { + "Value": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + } + }, + "UnauthRoleArn": { + "Value": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + } + }, + "DeploymentBucketName": { + "Description": "CloudFormation provider root stack deployment bucket name", + "Value": { + "Ref": "DeploymentBucketName" + }, + "Export": { + "Name": { + "Fn::Sub": "${AWS::StackName}-DeploymentBucketName" + } + } + }, + "AuthRoleName": { + "Value": { + "Ref": "AuthRole" + } + }, + "UnauthRoleName": { + "Value": { + "Ref": "UnauthRole" + } + } + }, + "Resources": { + "DeploymentBucket": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketName": { + "Ref": "DeploymentBucketName" + }, + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + } + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "DeploymentBucketBlockHTTP": { + "Type": "AWS::S3::BucketPolicy", + "Properties": { + "Bucket": { + "Ref": "DeploymentBucketName" + }, + "PolicyDocument": { + "Statement": [ + { + "Action": "s3:*", + "Effect": "Deny", + "Principal": "*", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "DeploymentBucketName" + }, + "/*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "DeploymentBucketName" + } + ] + ] + } + ], + "Condition": { + "Bool": { + "aws:SecureTransport": false + } + } + } + ] + } + } + }, + "AuthRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "", + "Effect": "Deny", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + }, + "Action": "sts:AssumeRoleWithWebIdentity" + } + ] + }, + "RoleName": { + "Ref": "AuthRoleName" + } + } + }, + "UnauthRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "", + "Effect": "Deny", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + }, + "Action": "sts:AssumeRoleWithWebIdentity" + } + ] + }, + "RoleName": { + "Ref": "UnauthRoleName" + } + } + }, + "AuthTriggerCustomLambdaStack": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", + "Parameters": { + "env": "main", + "userpoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "userpoolArn": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolArn" + ] + }, + "functionstorelocator41a9495f41a9495fPostConfirmationLambdaExecutionRole": { + "Fn::GetAtt": [ + "functionstorelocator41a9495f41a9495fPostConfirmation", + "Outputs.LambdaExecutionRoleArn" + ] + }, + "functionstorelocator41a9495f41a9495fPostConfirmationArn": { + "Fn::GetAtt": [ + "functionstorelocator41a9495f41a9495fPostConfirmation", + "Outputs.Arn" + ] + }, + "functionstorelocator41a9495f41a9495fPostConfirmationName": { + "Fn::GetAtt": [ + "functionstorelocator41a9495f41a9495fPostConfirmation", + "Outputs.Name" + ] + } + } + }, + "DependsOn": [ + "authstorelocator41a9495f41a9495f", + "functionstorelocator41a9495f41a9495fPostConfirmation" + ] + }, + "authuserPoolGroups": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "Parameters": { + "AuthRoleArn": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + }, + "UnauthRoleArn": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "authstorelocator41a9495f41a9495fAppClientIDWeb": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.AppClientIDWeb" + ] + }, + "authstorelocator41a9495f41a9495fAppClientID": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.AppClientID" + ] + }, + "authstorelocator41a9495f41a9495fIdentityPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.IdentityPoolId" + ] + }, + "env": "main" + } + } + }, + "authstorelocator41a9495f41a9495f": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/storelocator41a9495f41a9495f-cloudformation-template.json", + "Parameters": { + "identityPoolName": "storelocator41a9495f_identitypool_41a9495f", + "allowUnauthenticatedIdentities": true, + "resourceNameTruncated": "storel41a9495f", + "userPoolName": "storelocator41a9495f_userpool_41a9495f", + "autoVerifiedAttributes": "email", + "mfaConfiguration": "OFF", + "mfaTypes": "SMS Text Message", + "smsAuthenticationMessage": "Your authentication code is {####}", + "smsVerificationMessage": "Your verification code is {####}", + "emailVerificationSubject": "Your verification code", + "emailVerificationMessage": "Your verification code is {####}", + "defaultPasswordPolicy": false, + "passwordPolicyMinLength": 8, + "passwordPolicyCharacters": "", + "requiredAttributes": "email", + "aliasAttributes": "", + "userpoolClientGenerateSecret": false, + "userpoolClientRefreshTokenValidity": "100", + "userpoolClientWriteAttributes": "email", + "userpoolClientReadAttributes": "email", + "userpoolClientLambdaRole": "storel41a9495f_userpoolclient_lambda_role", + "userpoolClientSetAttributes": false, + "sharedId": "41a9495f", + "resourceName": "storelocator41a9495f41a9495f", + "authSelections": "identityPoolAndUserPool", + "useDefault": "manual", + "thirdPartyAuth": false, + "usernameAttributes": "email", + "userPoolGroups": true, + "adminQueries": false, + "triggers": "{\"PostConfirmation\":[\"add-to-group\"]}", + "hostedUI": false, + "userPoolGroupList": "storeLocatorAdmin", + "serviceName": "Cognito", + "usernameCaseSensitive": false, + "useEnabledMfas": true, + "authRoleArn": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + }, + "unauthRoleArn": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + }, + "breakCircularDependency": true, + "dependsOn": "[object Object]", + "permissions": "{\"policyName\":\"AddToGroupCognito\",\"trigger\":\"PostConfirmation\",\"effect\":\"Allow\",\"actions\":[\"cognito-idp:AdminAddUserToGroup\",\"cognito-idp:GetGroup\",\"cognito-idp:CreateGroup\"],\"resource\":{\"paramType\":\"!GetAtt\",\"keys\":[\"UserPool\",\"Arn\"]}}", + "authTriggerConnections": "{\"triggerType\":\"PostConfirmation\",\"lambdaFunctionName\":\"storelocator41a9495f41a9495fPostConfirmation\"}", + "env": "main" + } + } + }, + "functionstorelocator41a9495f41a9495fPostConfirmation": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/function/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json", + "Parameters": { + "modules": "add-to-group", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation", + "GROUP": "storeLocatorAdmin", + "deploymentBucketName": "amplify-storelocator-main-f9ca7-deployment", + "s3Key": "amplify-builds/storelocator41a9495f41a9495fPostConfirmation-6a6c746d4739755a384a-build.zip", + "env": "main" + } + } + }, + "geostoreLocatorMap": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorMap-cloudformation-template.json", + "Parameters": { + "authRoleName": { + "Ref": "AuthRoleName" + }, + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "mapName": "storeLocatorMap", + "mapStyle": "VectorEsriStreets", + "isDefault": true, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.storeLocatorAdminGroupRole" + ] + }, + "env": "main" + } + } + }, + "geostoreLocatorSearch": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorSearch-cloudformation-template.json", + "Parameters": { + "authRoleName": { + "Ref": "AuthRoleName" + }, + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "indexName": "storeLocatorSearch", + "dataProvider": "Here", + "dataSourceIntendedUse": "SingleUse", + "isDefault": true, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.storeLocatorAdminGroupRole" + ] + }, + "env": "main" + } + } + }, + "geostoreLocatorGeofence": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorGeofence-cloudformation-template.json", + "Parameters": { + "collectionName": "storeLocatorGeofence", + "isDefault": true, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.storeLocatorAdminGroupRole" + ] + }, + "env": "main" + } + } + }, + "UpdateRolesWithIDPFunction": { + "DependsOn": [ + "AuthRole", + "UnauthRole", + "authstorelocator41a9495f41a9495f" + ], + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": { + "Fn::Join": [ + "\n", + [ + "const response = require('cfn-response');", + "const { IAMClient, GetRoleCommand, UpdateAssumeRolePolicyCommand } = require('@aws-sdk/client-iam');", + "exports.handler = function(event, context) {", + " // Don't return promise, response.send() marks context as done internally", + " const ignoredPromise = handleEvent(event, context)", + "};", + "async function handleEvent(event, context) {", + " try {", + " let authRoleName = event.ResourceProperties.authRoleName;", + " let unauthRoleName = event.ResourceProperties.unauthRoleName;", + " let idpId = event.ResourceProperties.idpId;", + " let authParamsJson = {", + " 'Version': '2012-10-17',", + " 'Statement': [{", + " 'Effect': 'Allow',", + " 'Principal': {'Federated': 'cognito-identity.amazonaws.com'},", + " 'Action': 'sts:AssumeRoleWithWebIdentity',", + " 'Condition': {", + " 'StringEquals': {'cognito-identity.amazonaws.com:aud': idpId},", + " 'ForAnyValue:StringLike': {'cognito-identity.amazonaws.com:amr': 'authenticated'}", + " }", + " }]", + " };", + " let unauthParamsJson = {", + " 'Version': '2012-10-17',", + " 'Statement': [{", + " 'Effect': 'Allow',", + " 'Principal': {'Federated': 'cognito-identity.amazonaws.com'},", + " 'Action': 'sts:AssumeRoleWithWebIdentity',", + " 'Condition': {", + " 'StringEquals': {'cognito-identity.amazonaws.com:aud': idpId},", + " 'ForAnyValue:StringLike': {'cognito-identity.amazonaws.com:amr': 'unauthenticated'}", + " }", + " }]", + " };", + " if (event.RequestType === 'Delete') {", + " try {", + " delete authParamsJson.Statement[0].Condition;", + " delete unauthParamsJson.Statement[0].Condition;", + " authParamsJson.Statement[0].Effect = 'Deny'", + " unauthParamsJson.Statement[0].Effect = 'Deny'", + " let authParams = {PolicyDocument: JSON.stringify(authParamsJson), RoleName: authRoleName};", + " let unauthParams = {PolicyDocument: JSON.stringify(unauthParamsJson), RoleName: unauthRoleName};", + " const iam = new IAMClient({region: event.ResourceProperties.region});", + " let res = await Promise.all([", + " iam.send(new GetRoleCommand({RoleName: authParams.RoleName})),", + " iam.send(new GetRoleCommand({RoleName: unauthParams.RoleName}))", + " ]);", + " res = await Promise.all([", + " iam.send(new UpdateAssumeRolePolicyCommand(authParams)),", + " iam.send(new UpdateAssumeRolePolicyCommand(unauthParams))", + " ]);", + " response.send(event, context, response.SUCCESS, {});", + " } catch (err) {", + " console.log(err.stack);", + " response.send(event, context, response.SUCCESS, {Error: err});", + " }", + " } else if (event.RequestType === 'Update' || event.RequestType === 'Create') {", + " const iam = new IAMClient({region: event.ResourceProperties.region});", + " let authParams = {PolicyDocument: JSON.stringify(authParamsJson), RoleName: authRoleName};", + " let unauthParams = {PolicyDocument: JSON.stringify(unauthParamsJson), RoleName: unauthRoleName};", + " const res = await Promise.all([", + " iam.send(new UpdateAssumeRolePolicyCommand(authParams)),", + " iam.send(new UpdateAssumeRolePolicyCommand(unauthParams))", + " ]);", + " response.send(event, context, response.SUCCESS, {});", + " }", + " } catch (err) {", + " console.log(err.stack);", + " response.send(event, context, response.FAILED, {Error: err});", + " }", + "};" + ] + ] + } + }, + "Handler": "index.handler", + "Runtime": "nodejs22.x", + "Timeout": 300, + "Role": { + "Fn::GetAtt": [ + "UpdateRolesWithIDPFunctionRole", + "Arn" + ] + } + } + }, + "UpdateRolesWithIDPFunctionOutputs": { + "Type": "Custom::LambdaCallout", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "UpdateRolesWithIDPFunction", + "Arn" + ] + }, + "region": { + "Ref": "AWS::Region" + }, + "idpId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.IdentityPoolId" + ] + }, + "authRoleName": { + "Ref": "AuthRole" + }, + "unauthRoleName": { + "Ref": "UnauthRole" + } + } + }, + "UpdateRolesWithIDPFunctionRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "RoleName": { + "Fn::Join": [ + "", + [ + { + "Ref": "AuthRole" + }, + "-idp" + ] + ] + }, + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": [ + "lambda.amazonaws.com" + ] + }, + "Action": [ + "sts:AssumeRole" + ] + } + ] + }, + "Policies": [ + { + "PolicyName": "UpdateRolesWithIDPFunctionPolicy", + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Resource": "arn:aws:logs:*:*:*" + }, + { + "Effect": "Allow", + "Action": [ + "iam:UpdateAssumeRolePolicy", + "iam:GetRole" + ], + "Resource": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + } + }, + { + "Effect": "Allow", + "Action": [ + "iam:UpdateAssumeRolePolicy", + "iam:GetRole" + ], + "Resource": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + } + } + ] + } + } + ] + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/storelocator41a9495f41a9495fPostConfirmation/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/storelocator41a9495f41a9495fPostConfirmation/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json new file mode 100644 index 00000000000..192bbea9292 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/storelocator41a9495f41a9495fPostConfirmation/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json @@ -0,0 +1,235 @@ +{ + "AWSTemplateFormatVersion": "2010-09-09", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Parameters": { + "GROUP": { + "Type": "String", + "Default": "" + }, + "modules": { + "Type": "String", + "Default": "", + "Description": "Comma-delimited list of modules to be executed by a lambda trigger. Sent to resource as an env variable." + }, + "resourceName": { + "Type": "String", + "Default": "" + }, + "trigger": { + "Type": "String", + "Default": "true" + }, + "functionName": { + "Type": "String", + "Default": "" + }, + "roleName": { + "Type": "String", + "Default": "" + }, + "parentResource": { + "Type": "String", + "Default": "" + }, + "parentStack": { + "Type": "String", + "Default": "" + }, + "env": { + "Type": "String" + }, + "deploymentBucketName": { + "Type": "String" + }, + "s3Key": { + "Type": "String" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "LambdaFunction": { + "Type": "AWS::Lambda::Function", + "Metadata": { + "aws:asset:path": "./src", + "aws:asset:property": "Code" + }, + "Properties": { + "Handler": "index.handler", + "FunctionName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "storelocator41a9495f41a9495fPostConfirmation", + { + "Fn::Join": [ + "", + [ + "storelocator41a9495f41a9495fPostConfirmation", + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "Environment": { + "Variables": { + "ENV": { + "Ref": "env" + }, + "MODULES": { + "Ref": "modules" + }, + "REGION": { + "Ref": "AWS::Region" + }, + "GROUP": { + "Ref": "GROUP" + } + } + }, + "Role": { + "Fn::GetAtt": [ + "LambdaExecutionRole", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 25, + "Code": { + "S3Bucket": { + "Ref": "deploymentBucketName" + }, + "S3Key": { + "Ref": "s3Key" + } + } + } + }, + "LambdaExecutionRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "RoleName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "storelocator41a9495f41a9495fPostConfirmation", + { + "Fn::Join": [ + "", + [ + "storelocator41a9495f41a9495fPostConfirmation", + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": [ + "lambda.amazonaws.com" + ] + }, + "Action": [ + "sts:AssumeRole" + ] + } + ] + } + } + }, + "lambdaexecutionpolicy": { + "DependsOn": [ + "LambdaExecutionRole" + ], + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyName": "lambda-execution-policy", + "Roles": [ + { + "Ref": "LambdaExecutionRole" + } + ], + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Resource": { + "Fn::Sub": [ + "arn:aws:logs:${region}:${account}:log-group:/aws/lambda/${lambda}:log-stream:*", + { + "region": { + "Ref": "AWS::Region" + }, + "account": { + "Ref": "AWS::AccountId" + }, + "lambda": { + "Ref": "LambdaFunction" + } + } + ] + } + } + ] + } + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Ref": "LambdaFunction" + } + }, + "Arn": { + "Value": { + "Fn::GetAtt": [ + "LambdaFunction", + "Arn" + ] + } + }, + "LambdaExecutionRole": { + "Value": { + "Ref": "LambdaExecutionRole" + } + }, + "LambdaExecutionRoleArn": { + "Value": { + "Fn::GetAtt": [ + "LambdaExecutionRole", + "Arn" + ] + } + }, + "Region": { + "Value": { + "Ref": "AWS::Region" + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/geo/storeLocatorGeofence/storeLocatorGeofence-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/geo/storeLocatorGeofence/storeLocatorGeofence-cloudformation-template.json new file mode 100644 index 00000000000..17020d54719 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/geo/storeLocatorGeofence/storeLocatorGeofence-cloudformation-template.json @@ -0,0 +1,364 @@ +{ + "Mappings": { + "RegionMapping": { + "us-east-1": { + "locationServiceRegion": "us-east-1" + }, + "us-east-2": { + "locationServiceRegion": "us-east-2" + }, + "us-west-2": { + "locationServiceRegion": "us-west-2" + }, + "ap-southeast-1": { + "locationServiceRegion": "ap-southeast-1" + }, + "ap-southeast-2": { + "locationServiceRegion": "ap-southeast-2" + }, + "ap-northeast-1": { + "locationServiceRegion": "ap-northeast-1" + }, + "eu-central-1": { + "locationServiceRegion": "eu-central-1" + }, + "eu-north-1": { + "locationServiceRegion": "eu-north-1" + }, + "eu-west-1": { + "locationServiceRegion": "eu-west-1" + }, + "sa-east-1": { + "locationServiceRegion": "us-east-1" + }, + "ca-central-1": { + "locationServiceRegion": "us-east-1" + }, + "us-west-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-north-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-northwest-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-south-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-3": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-2": { + "locationServiceRegion": "us-west-2" + }, + "eu-west-2": { + "locationServiceRegion": "eu-west-1" + }, + "eu-west-3": { + "locationServiceRegion": "eu-west-1" + }, + "me-south-1": { + "locationServiceRegion": "ap-southeast-1" + } + } + }, + "Parameters": { + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Type": "String" + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Type": "String" + }, + "collectionName": { + "Type": "String" + }, + "env": { + "Type": "String" + }, + "isDefault": { + "Type": "String" + } + }, + "Resources": { + "CustomGeofenceCollectionLambdaServiceRole9040D551": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "CustomGeofenceCollectionLambdaServiceRoleDefaultPolicy0A18B369": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "geo:CreateGeofenceCollection", + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "geo:UpdateGeofenceCollection", + "geo:DeleteGeofenceCollection" + ], + "Effect": "Allow", + "Resource": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:geofence-collection/${collectionName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "collectionName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "collectionName" + }, + { + "Ref": "env" + } + ] + ] + } + } + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "CustomGeofenceCollectionLambdaServiceRoleDefaultPolicy0A18B369", + "Roles": [ + { + "Ref": "CustomGeofenceCollectionLambdaServiceRole9040D551" + } + ] + } + }, + "CustomGeofenceCollectionLambdaCA3D002B": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "const response = require('cfn-response');\nconst {\n LocationClient,\n CreateGeofenceCollectionCommand,\n DeleteGeofenceCollectionCommand,\n UpdateGeofenceCollectionCommand,\n} = require('@aws-sdk/client-location');\nexports.handler = async function (event, context) {\n try {\n console.log('REQUEST RECEIVED:' + JSON.stringify(event));\n const pricingPlan = 'RequestBasedUsage';\n if (event.RequestType === 'Create') {\n const params = {\n CollectionName: event.ResourceProperties.collectionName,\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new CreateGeofenceCollectionCommand(params));\n console.log('create resource response data' + JSON.stringify(res));\n if (res.CollectionName && res.CollectionArn) {\n await response.send(event, context, response.SUCCESS, res, params.CollectionName);\n } else {\n await response.send(event, context, response.FAILED, res, params.CollectionName);\n }\n }\n if (event.RequestType === 'Update') {\n const params = {\n CollectionName: event.ResourceProperties.collectionName,\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new UpdateGeofenceCollectionCommand(params));\n console.log('update resource response data' + JSON.stringify(res));\n if (res.CollectionName) {\n await response.send(event, context, response.SUCCESS, res, params.CollectionName);\n } else {\n await response.send(event, context, response.FAILED, res, params.CollectionName);\n }\n }\n if (event.RequestType === 'Delete') {\n const params = {\n CollectionName: event.ResourceProperties.collectionName,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new DeleteGeofenceCollectionCommand(params));\n console.log('delete resource response data' + JSON.stringify(res));\n await response.send(event, context, response.SUCCESS, res, params.CollectionName);\n }\n } catch (err) {\n console.log(err.stack);\n const res = { Error: err };\n await response.send(event, context, response.FAILED, res, event.ResourceProperties.collectionName);\n throw err;\n }\n};\n" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "CustomGeofenceCollectionLambdaServiceRole9040D551", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 300 + }, + "DependsOn": [ + "CustomGeofenceCollectionLambdaServiceRoleDefaultPolicy0A18B369", + "CustomGeofenceCollectionLambdaServiceRole9040D551" + ] + }, + "CustomGeofenceCollection": { + "Type": "Custom::LambdaCallout", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomGeofenceCollectionLambdaCA3D002B", + "Arn" + ] + }, + "collectionName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "collectionName" + }, + { + "Ref": "env" + } + ] + ] + }, + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "env": { + "Ref": "env" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "storeLocatorAdminGeofenceCollectionPolicy": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "geo:GetGeofence", + "geo:PutGeofence", + "geo:BatchPutGeofence", + "geo:BatchDeleteGeofence", + "geo:ListGeofences" + ], + "Effect": "Allow", + "Resource": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:geofence-collection/${collectionName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "collectionName": { + "Fn::GetAtt": [ + "CustomGeofenceCollection", + "CollectionName" + ] + } + } + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": { + "Fn::Join": [ + "", + [ + "storeLocatorAdmin", + { + "Fn::Join": [ + "-", + [ + { + "Ref": "collectionName" + }, + { + "Ref": "env" + } + ] + ] + }, + "Policy" + ] + ] + }, + "Roles": [ + { + "Fn::Join": [ + "-", + [ + { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "storeLocatorAdminGroupRole" + ] + ] + } + ] + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Fn::GetAtt": [ + "CustomGeofenceCollection", + "CollectionName" + ] + } + }, + "Region": { + "Value": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + } + }, + "Arn": { + "Value": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:geofence-collection/${collectionName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "collectionName": { + "Fn::GetAtt": [ + "CustomGeofenceCollection", + "CollectionName" + ] + } + } + ] + } + } + }, + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"geo-GeofenceCollection\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/geo/storeLocatorMap/storeLocatorMap-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/geo/storeLocatorMap/storeLocatorMap-cloudformation-template.json new file mode 100644 index 00000000000..bf53b69ff23 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/geo/storeLocatorMap/storeLocatorMap-cloudformation-template.json @@ -0,0 +1,347 @@ +{ + "Mappings": { + "RegionMapping": { + "us-east-1": { + "locationServiceRegion": "us-east-1" + }, + "us-east-2": { + "locationServiceRegion": "us-east-2" + }, + "us-west-2": { + "locationServiceRegion": "us-west-2" + }, + "ap-southeast-1": { + "locationServiceRegion": "ap-southeast-1" + }, + "ap-southeast-2": { + "locationServiceRegion": "ap-southeast-2" + }, + "ap-northeast-1": { + "locationServiceRegion": "ap-northeast-1" + }, + "eu-central-1": { + "locationServiceRegion": "eu-central-1" + }, + "eu-north-1": { + "locationServiceRegion": "eu-north-1" + }, + "eu-west-1": { + "locationServiceRegion": "eu-west-1" + }, + "sa-east-1": { + "locationServiceRegion": "us-east-1" + }, + "ca-central-1": { + "locationServiceRegion": "us-east-1" + }, + "us-west-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-north-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-northwest-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-south-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-3": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-2": { + "locationServiceRegion": "us-west-2" + }, + "eu-west-2": { + "locationServiceRegion": "eu-west-1" + }, + "eu-west-3": { + "locationServiceRegion": "eu-west-1" + }, + "me-south-1": { + "locationServiceRegion": "ap-southeast-1" + } + } + }, + "Parameters": { + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Type": "String" + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Type": "String" + }, + "authRoleName": { + "Type": "String" + }, + "unauthRoleName": { + "Type": "String" + }, + "mapName": { + "Type": "String" + }, + "mapStyle": { + "Type": "String" + }, + "env": { + "Type": "String" + }, + "isDefault": { + "Type": "String" + } + }, + "Resources": { + "CustomMapLambdaServiceRole4EE7732C": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "CustomMapLambdaServiceRoleDefaultPolicy983FDD4E": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "geo:CreateMap", + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "geo:UpdateMap", + "geo:DeleteMap" + ], + "Effect": "Allow", + "Resource": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:map/${mapName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "mapName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "mapName" + }, + { + "Ref": "env" + } + ] + ] + } + } + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "CustomMapLambdaServiceRoleDefaultPolicy983FDD4E", + "Roles": [ + { + "Ref": "CustomMapLambdaServiceRole4EE7732C" + } + ] + } + }, + "CustomMapLambda51D5D430": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "const response = require('cfn-response');\nconst { LocationClient, CreateMapCommand, DeleteMapCommand, UpdateMapCommand } = require('@aws-sdk/client-location');\nexports.handler = async function (event, context) {\n try {\n console.log('REQUEST RECEIVED:' + JSON.stringify(event));\n const pricingPlan = 'RequestBasedUsage';\n if (event.RequestType === 'Create') {\n let params = {\n MapName: event.ResourceProperties.mapName,\n Configuration: {\n Style: event.ResourceProperties.mapStyle,\n },\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new CreateMapCommand(params));\n console.log('create resource response data' + JSON.stringify(res));\n if (res.MapName && res.MapArn) {\n await response.send(event, context, response.SUCCESS, res, params.MapName);\n } else {\n await response.send(event, context, response.FAILED, res, params.MapName);\n }\n }\n if (event.RequestType === 'Update') {\n let params = {\n MapName: event.ResourceProperties.mapName,\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new UpdateMapCommand(params));\n console.log('update resource response data' + JSON.stringify(res));\n if (res.MapName && res.MapArn) {\n await response.send(event, context, response.SUCCESS, res, params.MapName);\n } else {\n await response.send(event, context, response.FAILED, res, params.MapName);\n }\n }\n if (event.RequestType === 'Delete') {\n let params = {\n MapName: event.ResourceProperties.mapName,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new DeleteMapCommand(params));\n console.log('delete resource response data' + JSON.stringify(res));\n await response.send(event, context, response.SUCCESS, res, params.MapName);\n }\n } catch (err) {\n console.log(err.stack);\n const res = { Error: err };\n await response.send(event, context, response.FAILED, res, event.ResourceProperties.mapName);\n throw err;\n }\n};\n" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "CustomMapLambdaServiceRole4EE7732C", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 300 + }, + "DependsOn": [ + "CustomMapLambdaServiceRoleDefaultPolicy983FDD4E", + "CustomMapLambdaServiceRole4EE7732C" + ] + }, + "CustomMap": { + "Type": "Custom::LambdaCallout", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomMapLambda51D5D430", + "Arn" + ] + }, + "mapName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "mapName" + }, + { + "Ref": "env" + } + ] + ] + }, + "mapStyle": { + "Ref": "mapStyle" + }, + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "env": { + "Ref": "env" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "MapPolicy": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "geo:GetMapStyleDescriptor", + "geo:GetMapGlyphs", + "geo:GetMapSprites", + "geo:GetMapTile" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "CustomMap", + "MapArn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": { + "Fn::Join": [ + "", + [ + { + "Fn::Join": [ + "-", + [ + { + "Ref": "mapName" + }, + { + "Ref": "env" + } + ] + ] + }, + "Policy" + ] + ] + }, + "Roles": [ + { + "Ref": "authRoleName" + }, + { + "Ref": "unauthRoleName" + }, + { + "Fn::Join": [ + "-", + [ + { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "storeLocatorAdminGroupRole" + ] + ] + } + ] + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Fn::GetAtt": [ + "CustomMap", + "MapName" + ] + } + }, + "Style": { + "Value": { + "Ref": "mapStyle" + } + }, + "Region": { + "Value": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + } + }, + "Arn": { + "Value": { + "Fn::GetAtt": [ + "CustomMap", + "MapArn" + ] + } + } + }, + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"geo-Map\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/geo/storeLocatorSearch/storeLocatorSearch-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/geo/storeLocatorSearch/storeLocatorSearch-cloudformation-template.json new file mode 100644 index 00000000000..1ef40f17717 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/geo/storeLocatorSearch/storeLocatorSearch-cloudformation-template.json @@ -0,0 +1,348 @@ +{ + "Mappings": { + "RegionMapping": { + "us-east-1": { + "locationServiceRegion": "us-east-1" + }, + "us-east-2": { + "locationServiceRegion": "us-east-2" + }, + "us-west-2": { + "locationServiceRegion": "us-west-2" + }, + "ap-southeast-1": { + "locationServiceRegion": "ap-southeast-1" + }, + "ap-southeast-2": { + "locationServiceRegion": "ap-southeast-2" + }, + "ap-northeast-1": { + "locationServiceRegion": "ap-northeast-1" + }, + "eu-central-1": { + "locationServiceRegion": "eu-central-1" + }, + "eu-north-1": { + "locationServiceRegion": "eu-north-1" + }, + "eu-west-1": { + "locationServiceRegion": "eu-west-1" + }, + "sa-east-1": { + "locationServiceRegion": "us-east-1" + }, + "ca-central-1": { + "locationServiceRegion": "us-east-1" + }, + "us-west-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-north-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-northwest-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-south-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-3": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-2": { + "locationServiceRegion": "us-west-2" + }, + "eu-west-2": { + "locationServiceRegion": "eu-west-1" + }, + "eu-west-3": { + "locationServiceRegion": "eu-west-1" + }, + "me-south-1": { + "locationServiceRegion": "ap-southeast-1" + } + } + }, + "Parameters": { + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Type": "String" + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Type": "String" + }, + "authRoleName": { + "Type": "String" + }, + "unauthRoleName": { + "Type": "String" + }, + "indexName": { + "Type": "String" + }, + "dataProvider": { + "Type": "String" + }, + "dataSourceIntendedUse": { + "Type": "String" + }, + "env": { + "Type": "String" + }, + "isDefault": { + "Type": "String" + } + }, + "Resources": { + "CustomPlaceIndexLambdaServiceRoleFD2F3C9D": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "CustomPlaceIndexLambdaServiceRoleDefaultPolicy818068B1": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "geo:CreatePlaceIndex", + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "geo:UpdatePlaceIndex", + "geo:DeletePlaceIndex" + ], + "Effect": "Allow", + "Resource": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:place-index/${indexName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "indexName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "indexName" + }, + { + "Ref": "env" + } + ] + ] + } + } + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "CustomPlaceIndexLambdaServiceRoleDefaultPolicy818068B1", + "Roles": [ + { + "Ref": "CustomPlaceIndexLambdaServiceRoleFD2F3C9D" + } + ] + } + }, + "CustomPlaceIndexLambda79813BB9": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "const response = require('cfn-response');\nconst { LocationClient, CreatePlaceIndexCommand, DeletePlaceIndexCommand, UpdatePlaceIndexCommand } = require('@aws-sdk/client-location');\nexports.handler = async function (event, context) {\n try {\n console.log('REQUEST RECEIVED:' + JSON.stringify(event));\n const pricingPlan = 'RequestBasedUsage';\n if (event.RequestType === 'Create') {\n const params = {\n IndexName: event.ResourceProperties.indexName,\n DataSource: event.ResourceProperties.dataSource,\n DataSourceConfiguration: {\n IntendedUse: event.ResourceProperties.dataSourceIntendedUse,\n },\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new CreatePlaceIndexCommand(params));\n console.log('create resource response data' + JSON.stringify(res));\n if (res.IndexName && res.IndexArn) {\n event.PhysicalResourceId = res.IndexName;\n await response.send(event, context, response.SUCCESS, res, params.IndexName);\n } else {\n await response.send(event, context, response.FAILED, res, params.IndexName);\n }\n }\n if (event.RequestType === 'Update') {\n const params = {\n IndexName: event.ResourceProperties.indexName,\n DataSourceConfiguration: {\n IntendedUse: event.ResourceProperties.dataSourceIntendedUse,\n },\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new UpdatePlaceIndexCommand(params));\n console.log('update resource response data' + JSON.stringify(res));\n if (res.IndexName && res.IndexArn) {\n event.PhysicalResourceId = res.IndexName;\n await response.send(event, context, response.SUCCESS, res, params.IndexName);\n } else {\n await response.send(event, context, response.FAILED, res, params.IndexName);\n }\n }\n if (event.RequestType === 'Delete') {\n const params = {\n IndexName: event.ResourceProperties.indexName,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new DeletePlaceIndexCommand(params));\n event.PhysicalResourceId = event.ResourceProperties.indexName;\n console.log('delete resource response data' + JSON.stringify(res));\n await response.send(event, context, response.SUCCESS, res, params.IndexName);\n }\n } catch (err) {\n console.log(err.stack);\n const res = { Error: err };\n await response.send(event, context, response.FAILED, res, event.ResourceProperties.indexName);\n throw err;\n }\n};\n" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "CustomPlaceIndexLambdaServiceRoleFD2F3C9D", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 300 + }, + "DependsOn": [ + "CustomPlaceIndexLambdaServiceRoleDefaultPolicy818068B1", + "CustomPlaceIndexLambdaServiceRoleFD2F3C9D" + ] + }, + "CustomPlaceIndex": { + "Type": "Custom::LambdaCallout", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomPlaceIndexLambda79813BB9", + "Arn" + ] + }, + "indexName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "indexName" + }, + { + "Ref": "env" + } + ] + ] + }, + "dataSource": { + "Ref": "dataProvider" + }, + "dataSourceIntendedUse": { + "Ref": "dataSourceIntendedUse" + }, + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "env": { + "Ref": "env" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "PlaceIndexPolicy": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "geo:SearchPlaceIndexForPosition", + "geo:SearchPlaceIndexForText", + "geo:SearchPlaceIndexForSuggestions", + "geo:GetPlace" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "CustomPlaceIndex", + "IndexArn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": { + "Fn::Join": [ + "", + [ + { + "Fn::Join": [ + "-", + [ + { + "Ref": "indexName" + }, + { + "Ref": "env" + } + ] + ] + }, + "Policy" + ] + ] + }, + "Roles": [ + { + "Ref": "authRoleName" + }, + { + "Ref": "unauthRoleName" + }, + { + "Fn::Join": [ + "-", + [ + { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "storeLocatorAdminGroupRole" + ] + ] + } + ] + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Fn::GetAtt": [ + "CustomPlaceIndex", + "IndexName" + ] + } + }, + "Region": { + "Value": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + } + }, + "Arn": { + "Value": { + "Fn::GetAtt": [ + "CustomPlaceIndex", + "IndexArn" + ] + } + } + }, + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"geo-PlaceIndex\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/root-cloudformation-stack.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/root-cloudformation-stack.json new file mode 100644 index 00000000000..1b8df321c23 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/root-cloudformation-stack.json @@ -0,0 +1,653 @@ +{ + "Description": "Root Stack for AWS Amplify CLI", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "DeploymentBucketName": { + "Type": "String", + "Default": "DeploymentBucket", + "Description": "Name of the common deployment bucket provided by the parent stack" + }, + "AuthRoleName": { + "Type": "String", + "Default": "AuthRoleName", + "Description": "Name of the common deployment bucket provided by the parent stack" + }, + "UnauthRoleName": { + "Type": "String", + "Default": "UnAuthRoleName", + "Description": "Name of the common deployment bucket provided by the parent stack" + } + }, + "Outputs": { + "Region": { + "Description": "CloudFormation provider root stack Region", + "Value": { + "Ref": "AWS::Region" + }, + "Export": { + "Name": { + "Fn::Sub": "${AWS::StackName}-Region" + } + } + }, + "StackName": { + "Description": "CloudFormation provider root stack ID", + "Value": { + "Ref": "AWS::StackName" + }, + "Export": { + "Name": { + "Fn::Sub": "${AWS::StackName}-StackName" + } + } + }, + "StackId": { + "Description": "CloudFormation provider root stack name", + "Value": { + "Ref": "AWS::StackId" + }, + "Export": { + "Name": { + "Fn::Sub": "${AWS::StackName}-StackId" + } + } + }, + "AuthRoleArn": { + "Value": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + } + }, + "UnauthRoleArn": { + "Value": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + } + }, + "DeploymentBucketName": { + "Description": "CloudFormation provider root stack deployment bucket name", + "Value": { + "Ref": "DeploymentBucketName" + }, + "Export": { + "Name": { + "Fn::Sub": "${AWS::StackName}-DeploymentBucketName" + } + } + }, + "AuthRoleName": { + "Value": { + "Ref": "AuthRole" + } + }, + "UnauthRoleName": { + "Value": { + "Ref": "UnauthRole" + } + } + }, + "Resources": { + "DeploymentBucket": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketName": { + "Ref": "DeploymentBucketName" + }, + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + } + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "DeploymentBucketBlockHTTP": { + "Type": "AWS::S3::BucketPolicy", + "Properties": { + "Bucket": { + "Ref": "DeploymentBucketName" + }, + "PolicyDocument": { + "Statement": [ + { + "Action": "s3:*", + "Effect": "Deny", + "Principal": "*", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "DeploymentBucketName" + }, + "/*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "DeploymentBucketName" + } + ] + ] + } + ], + "Condition": { + "Bool": { + "aws:SecureTransport": false + } + } + } + ] + } + } + }, + "AuthRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "", + "Effect": "Deny", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + }, + "Action": "sts:AssumeRoleWithWebIdentity" + } + ] + }, + "RoleName": { + "Ref": "AuthRoleName" + } + } + }, + "UnauthRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "", + "Effect": "Deny", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + }, + "Action": "sts:AssumeRoleWithWebIdentity" + } + ] + }, + "RoleName": { + "Ref": "UnauthRoleName" + } + } + }, + "AuthTriggerCustomLambdaStack": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", + "Parameters": { + "env": "main", + "userpoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "userpoolArn": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolArn" + ] + }, + "functionstorelocator41a9495f41a9495fPostConfirmationLambdaExecutionRole": { + "Fn::GetAtt": [ + "functionstorelocator41a9495f41a9495fPostConfirmation", + "Outputs.LambdaExecutionRoleArn" + ] + }, + "functionstorelocator41a9495f41a9495fPostConfirmationArn": { + "Fn::GetAtt": [ + "functionstorelocator41a9495f41a9495fPostConfirmation", + "Outputs.Arn" + ] + }, + "functionstorelocator41a9495f41a9495fPostConfirmationName": { + "Fn::GetAtt": [ + "functionstorelocator41a9495f41a9495fPostConfirmation", + "Outputs.Name" + ] + } + } + }, + "DependsOn": [ + "authstorelocator41a9495f41a9495f", + "functionstorelocator41a9495f41a9495fPostConfirmation" + ] + }, + "authuserPoolGroups": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "Parameters": { + "AuthRoleArn": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + }, + "UnauthRoleArn": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "authstorelocator41a9495f41a9495fAppClientIDWeb": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.AppClientIDWeb" + ] + }, + "authstorelocator41a9495f41a9495fAppClientID": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.AppClientID" + ] + }, + "authstorelocator41a9495f41a9495fIdentityPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.IdentityPoolId" + ] + }, + "env": "main" + } + } + }, + "authstorelocator41a9495f41a9495f": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/storelocator41a9495f41a9495f-cloudformation-template.json", + "Parameters": { + "identityPoolName": "storelocator41a9495f_identitypool_41a9495f", + "allowUnauthenticatedIdentities": true, + "resourceNameTruncated": "storel41a9495f", + "userPoolName": "storelocator41a9495f_userpool_41a9495f", + "autoVerifiedAttributes": "email", + "mfaConfiguration": "OFF", + "mfaTypes": "SMS Text Message", + "smsAuthenticationMessage": "Your authentication code is {####}", + "smsVerificationMessage": "Your verification code is {####}", + "emailVerificationSubject": "Your verification code", + "emailVerificationMessage": "Your verification code is {####}", + "defaultPasswordPolicy": false, + "passwordPolicyMinLength": 8, + "passwordPolicyCharacters": "", + "requiredAttributes": "email", + "aliasAttributes": "", + "userpoolClientGenerateSecret": false, + "userpoolClientRefreshTokenValidity": "100", + "userpoolClientWriteAttributes": "email", + "userpoolClientReadAttributes": "email", + "userpoolClientLambdaRole": "storel41a9495f_userpoolclient_lambda_role", + "userpoolClientSetAttributes": false, + "sharedId": "41a9495f", + "resourceName": "storelocator41a9495f41a9495f", + "authSelections": "identityPoolAndUserPool", + "useDefault": "manual", + "thirdPartyAuth": false, + "usernameAttributes": "email", + "userPoolGroups": true, + "adminQueries": false, + "triggers": "{\"PostConfirmation\":[\"add-to-group\"]}", + "hostedUI": false, + "userPoolGroupList": "storeLocatorAdmin", + "serviceName": "Cognito", + "usernameCaseSensitive": false, + "useEnabledMfas": true, + "authRoleArn": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + }, + "unauthRoleArn": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + }, + "breakCircularDependency": true, + "dependsOn": "[object Object]", + "permissions": "{\"policyName\":\"AddToGroupCognito\",\"trigger\":\"PostConfirmation\",\"effect\":\"Allow\",\"actions\":[\"cognito-idp:AdminAddUserToGroup\",\"cognito-idp:GetGroup\",\"cognito-idp:CreateGroup\"],\"resource\":{\"paramType\":\"!GetAtt\",\"keys\":[\"UserPool\",\"Arn\"]}}", + "authTriggerConnections": "{\"triggerType\":\"PostConfirmation\",\"lambdaFunctionName\":\"storelocator41a9495f41a9495fPostConfirmation\"}", + "env": "main" + } + } + }, + "functionstorelocator41a9495f41a9495fPostConfirmation": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/function/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json", + "Parameters": { + "modules": "add-to-group", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation", + "GROUP": "storeLocatorAdmin", + "deploymentBucketName": "amplify-storelocator-main-f9ca7-deployment", + "s3Key": "amplify-builds/storelocator41a9495f41a9495fPostConfirmation-6a6c746d4739755a384a-build.zip", + "env": "main" + } + } + }, + "geostoreLocatorMap": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorMap-cloudformation-template.json", + "Parameters": { + "authRoleName": { + "Ref": "AuthRoleName" + }, + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "mapName": "storeLocatorMap", + "mapStyle": "VectorEsriStreets", + "isDefault": true, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.storeLocatorAdminGroupRole" + ] + }, + "env": "main" + } + } + }, + "geostoreLocatorSearch": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorSearch-cloudformation-template.json", + "Parameters": { + "authRoleName": { + "Ref": "AuthRoleName" + }, + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "indexName": "storeLocatorSearch", + "dataProvider": "Here", + "dataSourceIntendedUse": "SingleUse", + "isDefault": true, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.storeLocatorAdminGroupRole" + ] + }, + "env": "main" + } + } + }, + "geostoreLocatorGeofence": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorGeofence-cloudformation-template.json", + "Parameters": { + "collectionName": "storeLocatorGeofence", + "isDefault": true, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.storeLocatorAdminGroupRole" + ] + }, + "env": "main" + } + } + }, + "UpdateRolesWithIDPFunction": { + "DependsOn": [ + "AuthRole", + "UnauthRole", + "authstorelocator41a9495f41a9495f" + ], + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": { + "Fn::Join": [ + "\n", + [ + "const response = require('cfn-response');", + "const { IAMClient, GetRoleCommand, UpdateAssumeRolePolicyCommand } = require('@aws-sdk/client-iam');", + "exports.handler = function(event, context) {", + " // Don't return promise, response.send() marks context as done internally", + " const ignoredPromise = handleEvent(event, context)", + "};", + "async function handleEvent(event, context) {", + " try {", + " let authRoleName = event.ResourceProperties.authRoleName;", + " let unauthRoleName = event.ResourceProperties.unauthRoleName;", + " let idpId = event.ResourceProperties.idpId;", + " let authParamsJson = {", + " 'Version': '2012-10-17',", + " 'Statement': [{", + " 'Effect': 'Allow',", + " 'Principal': {'Federated': 'cognito-identity.amazonaws.com'},", + " 'Action': 'sts:AssumeRoleWithWebIdentity',", + " 'Condition': {", + " 'StringEquals': {'cognito-identity.amazonaws.com:aud': idpId},", + " 'ForAnyValue:StringLike': {'cognito-identity.amazonaws.com:amr': 'authenticated'}", + " }", + " }]", + " };", + " let unauthParamsJson = {", + " 'Version': '2012-10-17',", + " 'Statement': [{", + " 'Effect': 'Allow',", + " 'Principal': {'Federated': 'cognito-identity.amazonaws.com'},", + " 'Action': 'sts:AssumeRoleWithWebIdentity',", + " 'Condition': {", + " 'StringEquals': {'cognito-identity.amazonaws.com:aud': idpId},", + " 'ForAnyValue:StringLike': {'cognito-identity.amazonaws.com:amr': 'unauthenticated'}", + " }", + " }]", + " };", + " if (event.RequestType === 'Delete') {", + " try {", + " delete authParamsJson.Statement[0].Condition;", + " delete unauthParamsJson.Statement[0].Condition;", + " authParamsJson.Statement[0].Effect = 'Deny'", + " unauthParamsJson.Statement[0].Effect = 'Deny'", + " let authParams = {PolicyDocument: JSON.stringify(authParamsJson), RoleName: authRoleName};", + " let unauthParams = {PolicyDocument: JSON.stringify(unauthParamsJson), RoleName: unauthRoleName};", + " const iam = new IAMClient({region: event.ResourceProperties.region});", + " let res = await Promise.all([", + " iam.send(new GetRoleCommand({RoleName: authParams.RoleName})),", + " iam.send(new GetRoleCommand({RoleName: unauthParams.RoleName}))", + " ]);", + " res = await Promise.all([", + " iam.send(new UpdateAssumeRolePolicyCommand(authParams)),", + " iam.send(new UpdateAssumeRolePolicyCommand(unauthParams))", + " ]);", + " response.send(event, context, response.SUCCESS, {});", + " } catch (err) {", + " console.log(err.stack);", + " response.send(event, context, response.SUCCESS, {Error: err});", + " }", + " } else if (event.RequestType === 'Update' || event.RequestType === 'Create') {", + " const iam = new IAMClient({region: event.ResourceProperties.region});", + " let authParams = {PolicyDocument: JSON.stringify(authParamsJson), RoleName: authRoleName};", + " let unauthParams = {PolicyDocument: JSON.stringify(unauthParamsJson), RoleName: unauthRoleName};", + " const res = await Promise.all([", + " iam.send(new UpdateAssumeRolePolicyCommand(authParams)),", + " iam.send(new UpdateAssumeRolePolicyCommand(unauthParams))", + " ]);", + " response.send(event, context, response.SUCCESS, {});", + " }", + " } catch (err) {", + " console.log(err.stack);", + " response.send(event, context, response.FAILED, {Error: err});", + " }", + "};" + ] + ] + } + }, + "Handler": "index.handler", + "Runtime": "nodejs22.x", + "Timeout": 300, + "Role": { + "Fn::GetAtt": [ + "UpdateRolesWithIDPFunctionRole", + "Arn" + ] + } + } + }, + "UpdateRolesWithIDPFunctionOutputs": { + "Type": "Custom::LambdaCallout", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "UpdateRolesWithIDPFunction", + "Arn" + ] + }, + "region": { + "Ref": "AWS::Region" + }, + "idpId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.IdentityPoolId" + ] + }, + "authRoleName": { + "Ref": "AuthRole" + }, + "unauthRoleName": { + "Ref": "UnauthRole" + } + } + }, + "UpdateRolesWithIDPFunctionRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "RoleName": { + "Fn::Join": [ + "", + [ + { + "Ref": "AuthRole" + }, + "-idp" + ] + ] + }, + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": [ + "lambda.amazonaws.com" + ] + }, + "Action": [ + "sts:AssumeRole" + ] + } + ] + }, + "Policies": [ + { + "PolicyName": "UpdateRolesWithIDPFunctionPolicy", + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Resource": "arn:aws:logs:*:*:*" + }, + { + "Effect": "Allow", + "Action": [ + "iam:UpdateAssumeRolePolicy", + "iam:GetRole" + ], + "Resource": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + } + }, + { + "Effect": "Allow", + "Action": [ + "iam:UpdateAssumeRolePolicy", + "iam:GetRole" + ], + "Resource": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + } + } + ] + } + } + ] + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/backend-config.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/backend-config.json new file mode 100644 index 00000000000..6b7a962cd2d --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/backend-config.json @@ -0,0 +1,160 @@ +{ + "auth": { + "storelocator41a9495f41a9495f": { + "customAuth": false, + "dependsOn": [ + { + "attributes": [ + "Arn", + "Name" + ], + "category": "function", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation", + "triggerProvider": "Cognito" + } + ], + "frontendAuthConfig": { + "mfaConfiguration": "OFF", + "mfaTypes": [ + "SMS" + ], + "passwordProtectionSettings": { + "passwordPolicyCharacters": [], + "passwordPolicyMinLength": 8 + }, + "signupAttributes": [ + "EMAIL" + ], + "socialProviders": [], + "usernameAttributes": [ + "EMAIL" + ], + "verificationMechanisms": [ + "EMAIL" + ] + }, + "providerPlugin": "awscloudformation", + "service": "Cognito" + }, + "userPoolGroups": { + "dependsOn": [ + { + "attributes": [ + "UserPoolId", + "AppClientIDWeb", + "AppClientID", + "IdentityPoolId" + ], + "category": "auth", + "resourceName": "storelocator41a9495f41a9495f" + } + ], + "providerPlugin": "awscloudformation", + "service": "Cognito-UserPool-Groups" + } + }, + "function": { + "storelocator41a9495f41a9495fPostConfirmation": { + "build": true, + "providerPlugin": "awscloudformation", + "service": "Lambda" + } + }, + "geo": { + "storeLocatorGeofence": { + "accessType": "CognitoGroups", + "dependsOn": [ + { + "attributes": [ + "UserPoolId" + ], + "category": "auth", + "resourceName": "storelocator41a9495f41a9495f" + }, + { + "attributes": [ + "storeLocatorAdminGroupRole" + ], + "category": "auth", + "resourceName": "userPoolGroups" + } + ], + "isDefault": true, + "providerPlugin": "awscloudformation", + "service": "GeofenceCollection" + }, + "storeLocatorMap": { + "accessType": "AuthorizedAndGuestUsers", + "dependsOn": [ + { + "attributes": [ + "UserPoolId" + ], + "category": "auth", + "resourceName": "storelocator41a9495f41a9495f" + }, + { + "attributes": [ + "storeLocatorAdminGroupRole" + ], + "category": "auth", + "resourceName": "userPoolGroups" + } + ], + "isDefault": true, + "mapStyle": "VectorEsriStreets", + "providerPlugin": "awscloudformation", + "service": "Map" + }, + "storeLocatorSearch": { + "accessType": "AuthorizedAndGuestUsers", + "dataProvider": "HERE", + "dataSourceIntendedUse": "SingleUse", + "dependsOn": [ + { + "attributes": [ + "UserPoolId" + ], + "category": "auth", + "resourceName": "storelocator41a9495f41a9495f" + }, + { + "attributes": [ + "storeLocatorAdminGroupRole" + ], + "category": "auth", + "resourceName": "userPoolGroups" + } + ], + "isDefault": true, + "providerPlugin": "awscloudformation", + "service": "PlaceIndex" + } + }, + "parameters": { + "AMPLIFY_function_storelocator41a9495f41a9495fPostConfirmation_GROUP": { + "usedBy": [ + { + "category": "function", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation" + } + ] + }, + "AMPLIFY_function_storelocator41a9495f41a9495fPostConfirmation_deploymentBucketName": { + "usedBy": [ + { + "category": "function", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation" + } + ] + }, + "AMPLIFY_function_storelocator41a9495f41a9495fPostConfirmation_s3Key": { + "usedBy": [ + { + "category": "function", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation" + } + ] + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/amplify.state b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/amplify.state new file mode 100644 index 00000000000..0c3efe04706 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/amplify.state @@ -0,0 +1,6 @@ +{ + "pluginId": "amplify-nodejs-function-runtime-provider", + "functionRuntime": "nodejs", + "useLegacyBuild": true, + "defaultEditorFile": "src/index.js" +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/custom-policies.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/custom-policies.json new file mode 100644 index 00000000000..528c94f2f26 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/custom-policies.json @@ -0,0 +1,6 @@ +[ + { + "Action": [], + "Resource": [] + } +] \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/function-parameters.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/function-parameters.json new file mode 100644 index 00000000000..4c07c063c1d --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/function-parameters.json @@ -0,0 +1,16 @@ +{ + "trigger": true, + "modules": [ + "add-to-group" + ], + "parentResource": "storelocator41a9495f41a9495f", + "functionName": "storelocator41a9495f41a9495fPostConfirmation", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation", + "parentStack": "auth", + "triggerEnvs": "[]", + "triggerDir": "/snapshot/amplify-cli/build/node_modules/@aws-amplify/amplify-category-auth/provider-utils/awscloudformation/triggers/PostConfirmation", + "triggerTemplate": "PostConfirmation.json.ejs", + "triggerEventPath": "PostConfirmation.event.json", + "roleName": "storelocator41a9495f41a9495fPostConfirmation", + "skipEdit": true +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/parameters.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/parameters.json new file mode 100644 index 00000000000..82c0ad73bb2 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/parameters.json @@ -0,0 +1,4 @@ +{ + "modules": "add-to-group", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation" +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/add-to-group.js b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/add-to-group.js new file mode 100644 index 00000000000..b8920ac2104 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/add-to-group.js @@ -0,0 +1,37 @@ +const { + CognitoIdentityProviderClient, + AdminAddUserToGroupCommand, + GetGroupCommand, + CreateGroupCommand, +} = require('@aws-sdk/client-cognito-identity-provider'); + +const cognitoIdentityServiceProvider = new CognitoIdentityProviderClient({}); + +/** + * @type {import('@types/aws-lambda').PostConfirmationTriggerHandler} + */ +exports.handler = async (event) => { + const groupParams = { + GroupName: process.env.GROUP, + UserPoolId: event.userPoolId, + }; + const addUserParams = { + GroupName: process.env.GROUP, + UserPoolId: event.userPoolId, + Username: event.userName, + }; + /** + * Check if the group exists; if it doesn't, create it. + */ + try { + await cognitoIdentityServiceProvider.send(new GetGroupCommand(groupParams)); + } catch (e) { + await cognitoIdentityServiceProvider.send(new CreateGroupCommand(groupParams)); + } + /** + * Then, add the user to the group. + */ + await cognitoIdentityServiceProvider.send(new AdminAddUserToGroupCommand(addUserParams)); + + return event; +}; diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/event.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/event.json new file mode 100644 index 00000000000..5eafe06ea53 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/event.json @@ -0,0 +1,7 @@ +{ + "request": { + "userPoolId": "testID", + "userName": "testUser" + }, + "response": {} +} diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/index.js b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/index.js new file mode 100644 index 00000000000..876a0cedec6 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/index.js @@ -0,0 +1,33 @@ +/** + * @fileoverview + * + * This CloudFormation Trigger creates a handler which awaits the other handlers + * specified in the `MODULES` env var, located at `./${MODULE}`. + */ + +/** + * The names of modules to load are stored as a comma-delimited string in the + * `MODULES` env var. + */ +const moduleNames = process.env.MODULES.split(','); +/** + * The array of imported modules. + */ +const modules = moduleNames.map((name) => require(`./${name}`)); + +/** + * This async handler iterates over the given modules and awaits them. + * + * @see https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html#nodejs-handler-async + * @type {import('@types/aws-lambda').APIGatewayProxyHandler} + * + */ +exports.handler = async (event, context) => { + /** + * Instead of naively iterating over all handlers, run them concurrently with + * `await Promise.all(...)`. This would otherwise just be determined by the + * order of names in the `MODULES` var. + */ + await Promise.all(modules.map((module) => module.handler(event, context))); + return event; +}; diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/package.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/package.json new file mode 100644 index 00000000000..97ed774298a --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/package.json @@ -0,0 +1,13 @@ +{ + "name": "storelocator41a9495f41a9495fPostConfirmation", + "version": "2.0.0", + "description": "Lambda function generated by Amplify", + "main": "index.js", + "license": "Apache-2.0", + "dependencies": { + "axios": "latest" + }, + "devDependencies": { + "@types/aws-lambda": "^8.10.92" + } +} diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/yarn.lock b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/yarn.lock new file mode 100644 index 00000000000..74757081d71 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/src/yarn.lock @@ -0,0 +1,169 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/aws-lambda@^8.10.92": + version "8.10.161" + resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.161.tgz#36d95723ec46d3d555bf0684f83cf4d4369a28ad" + integrity sha512-rUYdp+MQwSFocxIOcSsYSF3YYYC/uUpMbCY/mbO21vGqfrEYvNSoPyKYDj6RhXXpPfS0KstW9RwG3qXh9sL7FQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +axios@latest: + version "1.13.6" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.6.tgz#c3f92da917dc209a15dd29936d20d5089b6b6c98" + integrity sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ== + dependencies: + follow-redirects "^1.15.11" + form-data "^4.0.5" + proxy-from-env "^1.1.0" + +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +follow-redirects@^1.15.11: + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== + +form-data@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.12" + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +get-intrinsic@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json new file mode 100644 index 00000000000..192bbea9292 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/function/storelocator41a9495f41a9495fPostConfirmation/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json @@ -0,0 +1,235 @@ +{ + "AWSTemplateFormatVersion": "2010-09-09", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Parameters": { + "GROUP": { + "Type": "String", + "Default": "" + }, + "modules": { + "Type": "String", + "Default": "", + "Description": "Comma-delimited list of modules to be executed by a lambda trigger. Sent to resource as an env variable." + }, + "resourceName": { + "Type": "String", + "Default": "" + }, + "trigger": { + "Type": "String", + "Default": "true" + }, + "functionName": { + "Type": "String", + "Default": "" + }, + "roleName": { + "Type": "String", + "Default": "" + }, + "parentResource": { + "Type": "String", + "Default": "" + }, + "parentStack": { + "Type": "String", + "Default": "" + }, + "env": { + "Type": "String" + }, + "deploymentBucketName": { + "Type": "String" + }, + "s3Key": { + "Type": "String" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "LambdaFunction": { + "Type": "AWS::Lambda::Function", + "Metadata": { + "aws:asset:path": "./src", + "aws:asset:property": "Code" + }, + "Properties": { + "Handler": "index.handler", + "FunctionName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "storelocator41a9495f41a9495fPostConfirmation", + { + "Fn::Join": [ + "", + [ + "storelocator41a9495f41a9495fPostConfirmation", + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "Environment": { + "Variables": { + "ENV": { + "Ref": "env" + }, + "MODULES": { + "Ref": "modules" + }, + "REGION": { + "Ref": "AWS::Region" + }, + "GROUP": { + "Ref": "GROUP" + } + } + }, + "Role": { + "Fn::GetAtt": [ + "LambdaExecutionRole", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 25, + "Code": { + "S3Bucket": { + "Ref": "deploymentBucketName" + }, + "S3Key": { + "Ref": "s3Key" + } + } + } + }, + "LambdaExecutionRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "RoleName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "storelocator41a9495f41a9495fPostConfirmation", + { + "Fn::Join": [ + "", + [ + "storelocator41a9495f41a9495fPostConfirmation", + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": [ + "lambda.amazonaws.com" + ] + }, + "Action": [ + "sts:AssumeRole" + ] + } + ] + } + } + }, + "lambdaexecutionpolicy": { + "DependsOn": [ + "LambdaExecutionRole" + ], + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyName": "lambda-execution-policy", + "Roles": [ + { + "Ref": "LambdaExecutionRole" + } + ], + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Resource": { + "Fn::Sub": [ + "arn:aws:logs:${region}:${account}:log-group:/aws/lambda/${lambda}:log-stream:*", + { + "region": { + "Ref": "AWS::Region" + }, + "account": { + "Ref": "AWS::AccountId" + }, + "lambda": { + "Ref": "LambdaFunction" + } + } + ] + } + } + ] + } + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Ref": "LambdaFunction" + } + }, + "Arn": { + "Value": { + "Fn::GetAtt": [ + "LambdaFunction", + "Arn" + ] + } + }, + "LambdaExecutionRole": { + "Value": { + "Ref": "LambdaExecutionRole" + } + }, + "LambdaExecutionRoleArn": { + "Value": { + "Fn::GetAtt": [ + "LambdaExecutionRole", + "Arn" + ] + } + }, + "Region": { + "Value": { + "Ref": "AWS::Region" + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorGeofence/cli-inputs.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorGeofence/cli-inputs.json new file mode 100644 index 00000000000..3bb50128864 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorGeofence/cli-inputs.json @@ -0,0 +1,10 @@ +{ + "groupPermissions": { + "storeLocatorAdmin": [ + "Read geofence", + "Create/Update geofence", + "Delete geofence", + "List geofences" + ] + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorGeofence/parameters.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorGeofence/parameters.json new file mode 100644 index 00000000000..7ae714ed5ee --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorGeofence/parameters.json @@ -0,0 +1,4 @@ +{ + "collectionName": "storeLocatorGeofence", + "isDefault": true +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorGeofence/storeLocatorGeofence-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorGeofence/storeLocatorGeofence-cloudformation-template.json new file mode 100644 index 00000000000..17020d54719 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorGeofence/storeLocatorGeofence-cloudformation-template.json @@ -0,0 +1,364 @@ +{ + "Mappings": { + "RegionMapping": { + "us-east-1": { + "locationServiceRegion": "us-east-1" + }, + "us-east-2": { + "locationServiceRegion": "us-east-2" + }, + "us-west-2": { + "locationServiceRegion": "us-west-2" + }, + "ap-southeast-1": { + "locationServiceRegion": "ap-southeast-1" + }, + "ap-southeast-2": { + "locationServiceRegion": "ap-southeast-2" + }, + "ap-northeast-1": { + "locationServiceRegion": "ap-northeast-1" + }, + "eu-central-1": { + "locationServiceRegion": "eu-central-1" + }, + "eu-north-1": { + "locationServiceRegion": "eu-north-1" + }, + "eu-west-1": { + "locationServiceRegion": "eu-west-1" + }, + "sa-east-1": { + "locationServiceRegion": "us-east-1" + }, + "ca-central-1": { + "locationServiceRegion": "us-east-1" + }, + "us-west-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-north-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-northwest-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-south-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-3": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-2": { + "locationServiceRegion": "us-west-2" + }, + "eu-west-2": { + "locationServiceRegion": "eu-west-1" + }, + "eu-west-3": { + "locationServiceRegion": "eu-west-1" + }, + "me-south-1": { + "locationServiceRegion": "ap-southeast-1" + } + } + }, + "Parameters": { + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Type": "String" + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Type": "String" + }, + "collectionName": { + "Type": "String" + }, + "env": { + "Type": "String" + }, + "isDefault": { + "Type": "String" + } + }, + "Resources": { + "CustomGeofenceCollectionLambdaServiceRole9040D551": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "CustomGeofenceCollectionLambdaServiceRoleDefaultPolicy0A18B369": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "geo:CreateGeofenceCollection", + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "geo:UpdateGeofenceCollection", + "geo:DeleteGeofenceCollection" + ], + "Effect": "Allow", + "Resource": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:geofence-collection/${collectionName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "collectionName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "collectionName" + }, + { + "Ref": "env" + } + ] + ] + } + } + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "CustomGeofenceCollectionLambdaServiceRoleDefaultPolicy0A18B369", + "Roles": [ + { + "Ref": "CustomGeofenceCollectionLambdaServiceRole9040D551" + } + ] + } + }, + "CustomGeofenceCollectionLambdaCA3D002B": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "const response = require('cfn-response');\nconst {\n LocationClient,\n CreateGeofenceCollectionCommand,\n DeleteGeofenceCollectionCommand,\n UpdateGeofenceCollectionCommand,\n} = require('@aws-sdk/client-location');\nexports.handler = async function (event, context) {\n try {\n console.log('REQUEST RECEIVED:' + JSON.stringify(event));\n const pricingPlan = 'RequestBasedUsage';\n if (event.RequestType === 'Create') {\n const params = {\n CollectionName: event.ResourceProperties.collectionName,\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new CreateGeofenceCollectionCommand(params));\n console.log('create resource response data' + JSON.stringify(res));\n if (res.CollectionName && res.CollectionArn) {\n await response.send(event, context, response.SUCCESS, res, params.CollectionName);\n } else {\n await response.send(event, context, response.FAILED, res, params.CollectionName);\n }\n }\n if (event.RequestType === 'Update') {\n const params = {\n CollectionName: event.ResourceProperties.collectionName,\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new UpdateGeofenceCollectionCommand(params));\n console.log('update resource response data' + JSON.stringify(res));\n if (res.CollectionName) {\n await response.send(event, context, response.SUCCESS, res, params.CollectionName);\n } else {\n await response.send(event, context, response.FAILED, res, params.CollectionName);\n }\n }\n if (event.RequestType === 'Delete') {\n const params = {\n CollectionName: event.ResourceProperties.collectionName,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new DeleteGeofenceCollectionCommand(params));\n console.log('delete resource response data' + JSON.stringify(res));\n await response.send(event, context, response.SUCCESS, res, params.CollectionName);\n }\n } catch (err) {\n console.log(err.stack);\n const res = { Error: err };\n await response.send(event, context, response.FAILED, res, event.ResourceProperties.collectionName);\n throw err;\n }\n};\n" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "CustomGeofenceCollectionLambdaServiceRole9040D551", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 300 + }, + "DependsOn": [ + "CustomGeofenceCollectionLambdaServiceRoleDefaultPolicy0A18B369", + "CustomGeofenceCollectionLambdaServiceRole9040D551" + ] + }, + "CustomGeofenceCollection": { + "Type": "Custom::LambdaCallout", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomGeofenceCollectionLambdaCA3D002B", + "Arn" + ] + }, + "collectionName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "collectionName" + }, + { + "Ref": "env" + } + ] + ] + }, + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "env": { + "Ref": "env" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "storeLocatorAdminGeofenceCollectionPolicy": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "geo:GetGeofence", + "geo:PutGeofence", + "geo:BatchPutGeofence", + "geo:BatchDeleteGeofence", + "geo:ListGeofences" + ], + "Effect": "Allow", + "Resource": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:geofence-collection/${collectionName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "collectionName": { + "Fn::GetAtt": [ + "CustomGeofenceCollection", + "CollectionName" + ] + } + } + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": { + "Fn::Join": [ + "", + [ + "storeLocatorAdmin", + { + "Fn::Join": [ + "-", + [ + { + "Ref": "collectionName" + }, + { + "Ref": "env" + } + ] + ] + }, + "Policy" + ] + ] + }, + "Roles": [ + { + "Fn::Join": [ + "-", + [ + { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "storeLocatorAdminGroupRole" + ] + ] + } + ] + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Fn::GetAtt": [ + "CustomGeofenceCollection", + "CollectionName" + ] + } + }, + "Region": { + "Value": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + } + }, + "Arn": { + "Value": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:geofence-collection/${collectionName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "collectionName": { + "Fn::GetAtt": [ + "CustomGeofenceCollection", + "CollectionName" + ] + } + } + ] + } + } + }, + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"geo-GeofenceCollection\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorMap/cli-inputs.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorMap/cli-inputs.json new file mode 100644 index 00000000000..89c77968423 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorMap/cli-inputs.json @@ -0,0 +1,5 @@ +{ + "groupPermissions": [ + "storeLocatorAdmin" + ] +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorMap/parameters.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorMap/parameters.json new file mode 100644 index 00000000000..00f849451a2 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorMap/parameters.json @@ -0,0 +1,11 @@ +{ + "authRoleName": { + "Ref": "AuthRoleName" + }, + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "mapName": "storeLocatorMap", + "mapStyle": "VectorEsriStreets", + "isDefault": true +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorMap/storeLocatorMap-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorMap/storeLocatorMap-cloudformation-template.json new file mode 100644 index 00000000000..bf53b69ff23 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorMap/storeLocatorMap-cloudformation-template.json @@ -0,0 +1,347 @@ +{ + "Mappings": { + "RegionMapping": { + "us-east-1": { + "locationServiceRegion": "us-east-1" + }, + "us-east-2": { + "locationServiceRegion": "us-east-2" + }, + "us-west-2": { + "locationServiceRegion": "us-west-2" + }, + "ap-southeast-1": { + "locationServiceRegion": "ap-southeast-1" + }, + "ap-southeast-2": { + "locationServiceRegion": "ap-southeast-2" + }, + "ap-northeast-1": { + "locationServiceRegion": "ap-northeast-1" + }, + "eu-central-1": { + "locationServiceRegion": "eu-central-1" + }, + "eu-north-1": { + "locationServiceRegion": "eu-north-1" + }, + "eu-west-1": { + "locationServiceRegion": "eu-west-1" + }, + "sa-east-1": { + "locationServiceRegion": "us-east-1" + }, + "ca-central-1": { + "locationServiceRegion": "us-east-1" + }, + "us-west-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-north-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-northwest-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-south-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-3": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-2": { + "locationServiceRegion": "us-west-2" + }, + "eu-west-2": { + "locationServiceRegion": "eu-west-1" + }, + "eu-west-3": { + "locationServiceRegion": "eu-west-1" + }, + "me-south-1": { + "locationServiceRegion": "ap-southeast-1" + } + } + }, + "Parameters": { + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Type": "String" + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Type": "String" + }, + "authRoleName": { + "Type": "String" + }, + "unauthRoleName": { + "Type": "String" + }, + "mapName": { + "Type": "String" + }, + "mapStyle": { + "Type": "String" + }, + "env": { + "Type": "String" + }, + "isDefault": { + "Type": "String" + } + }, + "Resources": { + "CustomMapLambdaServiceRole4EE7732C": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "CustomMapLambdaServiceRoleDefaultPolicy983FDD4E": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "geo:CreateMap", + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "geo:UpdateMap", + "geo:DeleteMap" + ], + "Effect": "Allow", + "Resource": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:map/${mapName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "mapName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "mapName" + }, + { + "Ref": "env" + } + ] + ] + } + } + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "CustomMapLambdaServiceRoleDefaultPolicy983FDD4E", + "Roles": [ + { + "Ref": "CustomMapLambdaServiceRole4EE7732C" + } + ] + } + }, + "CustomMapLambda51D5D430": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "const response = require('cfn-response');\nconst { LocationClient, CreateMapCommand, DeleteMapCommand, UpdateMapCommand } = require('@aws-sdk/client-location');\nexports.handler = async function (event, context) {\n try {\n console.log('REQUEST RECEIVED:' + JSON.stringify(event));\n const pricingPlan = 'RequestBasedUsage';\n if (event.RequestType === 'Create') {\n let params = {\n MapName: event.ResourceProperties.mapName,\n Configuration: {\n Style: event.ResourceProperties.mapStyle,\n },\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new CreateMapCommand(params));\n console.log('create resource response data' + JSON.stringify(res));\n if (res.MapName && res.MapArn) {\n await response.send(event, context, response.SUCCESS, res, params.MapName);\n } else {\n await response.send(event, context, response.FAILED, res, params.MapName);\n }\n }\n if (event.RequestType === 'Update') {\n let params = {\n MapName: event.ResourceProperties.mapName,\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new UpdateMapCommand(params));\n console.log('update resource response data' + JSON.stringify(res));\n if (res.MapName && res.MapArn) {\n await response.send(event, context, response.SUCCESS, res, params.MapName);\n } else {\n await response.send(event, context, response.FAILED, res, params.MapName);\n }\n }\n if (event.RequestType === 'Delete') {\n let params = {\n MapName: event.ResourceProperties.mapName,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new DeleteMapCommand(params));\n console.log('delete resource response data' + JSON.stringify(res));\n await response.send(event, context, response.SUCCESS, res, params.MapName);\n }\n } catch (err) {\n console.log(err.stack);\n const res = { Error: err };\n await response.send(event, context, response.FAILED, res, event.ResourceProperties.mapName);\n throw err;\n }\n};\n" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "CustomMapLambdaServiceRole4EE7732C", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 300 + }, + "DependsOn": [ + "CustomMapLambdaServiceRoleDefaultPolicy983FDD4E", + "CustomMapLambdaServiceRole4EE7732C" + ] + }, + "CustomMap": { + "Type": "Custom::LambdaCallout", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomMapLambda51D5D430", + "Arn" + ] + }, + "mapName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "mapName" + }, + { + "Ref": "env" + } + ] + ] + }, + "mapStyle": { + "Ref": "mapStyle" + }, + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "env": { + "Ref": "env" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "MapPolicy": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "geo:GetMapStyleDescriptor", + "geo:GetMapGlyphs", + "geo:GetMapSprites", + "geo:GetMapTile" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "CustomMap", + "MapArn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": { + "Fn::Join": [ + "", + [ + { + "Fn::Join": [ + "-", + [ + { + "Ref": "mapName" + }, + { + "Ref": "env" + } + ] + ] + }, + "Policy" + ] + ] + }, + "Roles": [ + { + "Ref": "authRoleName" + }, + { + "Ref": "unauthRoleName" + }, + { + "Fn::Join": [ + "-", + [ + { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "storeLocatorAdminGroupRole" + ] + ] + } + ] + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Fn::GetAtt": [ + "CustomMap", + "MapName" + ] + } + }, + "Style": { + "Value": { + "Ref": "mapStyle" + } + }, + "Region": { + "Value": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + } + }, + "Arn": { + "Value": { + "Fn::GetAtt": [ + "CustomMap", + "MapArn" + ] + } + } + }, + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"geo-Map\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorSearch/cli-inputs.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorSearch/cli-inputs.json new file mode 100644 index 00000000000..89c77968423 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorSearch/cli-inputs.json @@ -0,0 +1,5 @@ +{ + "groupPermissions": [ + "storeLocatorAdmin" + ] +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorSearch/parameters.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorSearch/parameters.json new file mode 100644 index 00000000000..a1ac3acce3c --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorSearch/parameters.json @@ -0,0 +1,12 @@ +{ + "authRoleName": { + "Ref": "AuthRoleName" + }, + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "indexName": "storeLocatorSearch", + "dataProvider": "Here", + "dataSourceIntendedUse": "SingleUse", + "isDefault": true +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorSearch/storeLocatorSearch-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorSearch/storeLocatorSearch-cloudformation-template.json new file mode 100644 index 00000000000..1ef40f17717 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/geo/storeLocatorSearch/storeLocatorSearch-cloudformation-template.json @@ -0,0 +1,348 @@ +{ + "Mappings": { + "RegionMapping": { + "us-east-1": { + "locationServiceRegion": "us-east-1" + }, + "us-east-2": { + "locationServiceRegion": "us-east-2" + }, + "us-west-2": { + "locationServiceRegion": "us-west-2" + }, + "ap-southeast-1": { + "locationServiceRegion": "ap-southeast-1" + }, + "ap-southeast-2": { + "locationServiceRegion": "ap-southeast-2" + }, + "ap-northeast-1": { + "locationServiceRegion": "ap-northeast-1" + }, + "eu-central-1": { + "locationServiceRegion": "eu-central-1" + }, + "eu-north-1": { + "locationServiceRegion": "eu-north-1" + }, + "eu-west-1": { + "locationServiceRegion": "eu-west-1" + }, + "sa-east-1": { + "locationServiceRegion": "us-east-1" + }, + "ca-central-1": { + "locationServiceRegion": "us-east-1" + }, + "us-west-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-north-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-northwest-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-south-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-3": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-2": { + "locationServiceRegion": "us-west-2" + }, + "eu-west-2": { + "locationServiceRegion": "eu-west-1" + }, + "eu-west-3": { + "locationServiceRegion": "eu-west-1" + }, + "me-south-1": { + "locationServiceRegion": "ap-southeast-1" + } + } + }, + "Parameters": { + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Type": "String" + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Type": "String" + }, + "authRoleName": { + "Type": "String" + }, + "unauthRoleName": { + "Type": "String" + }, + "indexName": { + "Type": "String" + }, + "dataProvider": { + "Type": "String" + }, + "dataSourceIntendedUse": { + "Type": "String" + }, + "env": { + "Type": "String" + }, + "isDefault": { + "Type": "String" + } + }, + "Resources": { + "CustomPlaceIndexLambdaServiceRoleFD2F3C9D": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "CustomPlaceIndexLambdaServiceRoleDefaultPolicy818068B1": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "geo:CreatePlaceIndex", + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "geo:UpdatePlaceIndex", + "geo:DeletePlaceIndex" + ], + "Effect": "Allow", + "Resource": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:place-index/${indexName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "indexName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "indexName" + }, + { + "Ref": "env" + } + ] + ] + } + } + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "CustomPlaceIndexLambdaServiceRoleDefaultPolicy818068B1", + "Roles": [ + { + "Ref": "CustomPlaceIndexLambdaServiceRoleFD2F3C9D" + } + ] + } + }, + "CustomPlaceIndexLambda79813BB9": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "const response = require('cfn-response');\nconst { LocationClient, CreatePlaceIndexCommand, DeletePlaceIndexCommand, UpdatePlaceIndexCommand } = require('@aws-sdk/client-location');\nexports.handler = async function (event, context) {\n try {\n console.log('REQUEST RECEIVED:' + JSON.stringify(event));\n const pricingPlan = 'RequestBasedUsage';\n if (event.RequestType === 'Create') {\n const params = {\n IndexName: event.ResourceProperties.indexName,\n DataSource: event.ResourceProperties.dataSource,\n DataSourceConfiguration: {\n IntendedUse: event.ResourceProperties.dataSourceIntendedUse,\n },\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new CreatePlaceIndexCommand(params));\n console.log('create resource response data' + JSON.stringify(res));\n if (res.IndexName && res.IndexArn) {\n event.PhysicalResourceId = res.IndexName;\n await response.send(event, context, response.SUCCESS, res, params.IndexName);\n } else {\n await response.send(event, context, response.FAILED, res, params.IndexName);\n }\n }\n if (event.RequestType === 'Update') {\n const params = {\n IndexName: event.ResourceProperties.indexName,\n DataSourceConfiguration: {\n IntendedUse: event.ResourceProperties.dataSourceIntendedUse,\n },\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new UpdatePlaceIndexCommand(params));\n console.log('update resource response data' + JSON.stringify(res));\n if (res.IndexName && res.IndexArn) {\n event.PhysicalResourceId = res.IndexName;\n await response.send(event, context, response.SUCCESS, res, params.IndexName);\n } else {\n await response.send(event, context, response.FAILED, res, params.IndexName);\n }\n }\n if (event.RequestType === 'Delete') {\n const params = {\n IndexName: event.ResourceProperties.indexName,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new DeletePlaceIndexCommand(params));\n event.PhysicalResourceId = event.ResourceProperties.indexName;\n console.log('delete resource response data' + JSON.stringify(res));\n await response.send(event, context, response.SUCCESS, res, params.IndexName);\n }\n } catch (err) {\n console.log(err.stack);\n const res = { Error: err };\n await response.send(event, context, response.FAILED, res, event.ResourceProperties.indexName);\n throw err;\n }\n};\n" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "CustomPlaceIndexLambdaServiceRoleFD2F3C9D", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 300 + }, + "DependsOn": [ + "CustomPlaceIndexLambdaServiceRoleDefaultPolicy818068B1", + "CustomPlaceIndexLambdaServiceRoleFD2F3C9D" + ] + }, + "CustomPlaceIndex": { + "Type": "Custom::LambdaCallout", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomPlaceIndexLambda79813BB9", + "Arn" + ] + }, + "indexName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "indexName" + }, + { + "Ref": "env" + } + ] + ] + }, + "dataSource": { + "Ref": "dataProvider" + }, + "dataSourceIntendedUse": { + "Ref": "dataSourceIntendedUse" + }, + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "env": { + "Ref": "env" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "PlaceIndexPolicy": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "geo:SearchPlaceIndexForPosition", + "geo:SearchPlaceIndexForText", + "geo:SearchPlaceIndexForSuggestions", + "geo:GetPlace" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "CustomPlaceIndex", + "IndexArn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": { + "Fn::Join": [ + "", + [ + { + "Fn::Join": [ + "-", + [ + { + "Ref": "indexName" + }, + { + "Ref": "env" + } + ] + ] + }, + "Policy" + ] + ] + }, + "Roles": [ + { + "Ref": "authRoleName" + }, + { + "Ref": "unauthRoleName" + }, + { + "Fn::Join": [ + "-", + [ + { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "storeLocatorAdminGroupRole" + ] + ] + } + ] + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Fn::GetAtt": [ + "CustomPlaceIndex", + "IndexName" + ] + } + }, + "Region": { + "Value": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + } + }, + "Arn": { + "Value": { + "Fn::GetAtt": [ + "CustomPlaceIndex", + "IndexArn" + ] + } + } + }, + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"geo-PlaceIndex\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/tags.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/tags.json new file mode 100644 index 00000000000..b9321d71b83 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/#current-cloud-backend/tags.json @@ -0,0 +1,10 @@ +[ + { + "Key": "user:Stack", + "Value": "{project-env}" + }, + { + "Key": "user:Application", + "Value": "{project-name}" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/.config/project-config.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/.config/project-config.json new file mode 100644 index 00000000000..60030e74166 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/.config/project-config.json @@ -0,0 +1,18 @@ +{ + "whyContinueWithGen1": "Prefer not to answer", + "projectName": "storeLocator", + "version": "3.1", + "frontend": "javascript", + "javascript": { + "framework": "react", + "config": { + "SourceDir": "src", + "DistributionDir": "dist", + "BuildCommand": "npm run-script build", + "StartCommand": "npm run-script start" + } + }, + "providers": [ + "awscloudformation" + ] +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/README.md b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/README.md new file mode 100644 index 00000000000..46165a9c8c6 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/README.md @@ -0,0 +1,8 @@ +# Getting Started with Amplify CLI +This directory was generated by [Amplify CLI](https://docs.amplify.aws/cli). + +Helpful resources: +- Amplify documentation: https://docs.amplify.aws. +- Amplify CLI documentation: https://docs.amplify.aws/cli. +- More details on this folder & generated files: https://docs.amplify.aws/cli/reference/files. +- Join Amplify's community: https://amplify.aws/community/. diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/amplify-meta.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/amplify-meta.json new file mode 100644 index 00000000000..ead1cbf796c --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/amplify-meta.json @@ -0,0 +1,227 @@ +{ + "providers": { + "awscloudformation": { + "AuthRoleName": "amplify-storelocator-main-f9ca7-authRole", + "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-storelocator-main-f9ca7-unauthRole", + "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-storelocator-main-f9ca7-authRole", + "Region": "us-east-1", + "DeploymentBucketName": "amplify-storelocator-main-f9ca7-deployment", + "UnauthRoleName": "amplify-storelocator-main-f9ca7-unauthRole", + "StackName": "amplify-storelocator-main-f9ca7", + "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-storelocator-main-f9ca7/06c2ecf0-279e-11f1-a161-0ea0286337e9", + "AmplifyAppId": "storelocator", + "AuthTriggerTemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json" + } + }, + "auth": { + "userPoolGroups": { + "service": "Cognito-UserPool-Groups", + "providerPlugin": "awscloudformation", + "dependsOn": [ + { + "category": "auth", + "resourceName": "storelocator41a9495f41a9495f", + "attributes": [ + "UserPoolId", + "AppClientIDWeb", + "AppClientID", + "IdentityPoolId" + ] + } + ], + "lastPushTimeStamp": "2026-03-24T16:38:00.639Z", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "logicalId": "authuserPoolGroups" + }, + "output": { + "storeLocatorAdminGroupRole": "arn:aws:iam::123456789012:role/us-east-1_R1pdziFVe-storeLocatorAdminGroupRole" + }, + "lastPushDirHash": "aY2fv0JwB9V2Pnq+Iavglw2oGVE=" + }, + "storelocator41a9495f41a9495f": { + "service": "Cognito", + "providerPlugin": "awscloudformation", + "dependsOn": [ + { + "category": "function", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation", + "triggerProvider": "Cognito", + "attributes": [ + "Arn", + "Name" + ] + } + ], + "customAuth": false, + "frontendAuthConfig": { + "socialProviders": [], + "usernameAttributes": [ + "EMAIL" + ], + "signupAttributes": [ + "EMAIL" + ], + "passwordProtectionSettings": { + "passwordPolicyMinLength": 8, + "passwordPolicyCharacters": [] + }, + "mfaConfiguration": "OFF", + "mfaTypes": [ + "SMS" + ], + "verificationMechanisms": [ + "EMAIL" + ] + }, + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/storelocator41a9495f41a9495f-cloudformation-template.json", + "logicalId": "authstorelocator41a9495f41a9495f" + }, + "lastPushTimeStamp": "2026-03-24T16:38:00.639Z", + "output": { + "UserPoolId": "us-east-1_R1pdziFVe", + "AppClientIDWeb": "6am6ldh23n8ke819nuvk51cddq", + "AppClientID": "5ppvpdo9dmkrj55qi8h865lt34", + "IdentityPoolId": "us-east-1:4ea514e6-bc16-4990-a5ea-cefe84c3050d", + "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_R1pdziFVe", + "IdentityPoolName": "storelocator41a9495f_identitypool_41a9495f__main", + "UserPoolName": "storelocator41a9495f_userpool_41a9495f" + }, + "lastPushDirHash": "BhovtRkLGtk84r9ocO7d+lsB8TQ=" + } + }, + "function": { + "storelocator41a9495f41a9495fPostConfirmation": { + "build": true, + "providerPlugin": "awscloudformation", + "service": "Lambda", + "lastBuildTimeStamp": "2026-03-24T16:33:11.355Z", + "lastBuildType": "PROD", + "lastPackageTimeStamp": "2026-03-24T16:33:12.063Z", + "distZipFilename": "storelocator41a9495f41a9495fPostConfirmation-6a6c746d4739755a384a-build.zip", + "s3Bucket": { + "deploymentBucketName": "amplify-storelocator-main-f9ca7-deployment", + "s3Key": "amplify-builds/storelocator41a9495f41a9495fPostConfirmation-6a6c746d4739755a384a-build.zip" + }, + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/function/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json", + "logicalId": "functionstorelocator41a9495f41a9495fPostConfirmation" + }, + "lastPushTimeStamp": "2026-03-24T16:38:00.639Z", + "output": { + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/storelocator41a9495f41a9495fPostConfirmation-main", + "Region": "us-east-1", + "Arn": "arn:aws:lambda:us-east-1:123456789012:function:storelocator41a9495f41a9495fPostConfirmation-main", + "Name": "storelocator41a9495f41a9495fPostConfirmation-main", + "LambdaExecutionRole": "storelocator41a9495f41a9495fPostConfirmation-main" + }, + "lastPushDirHash": "6EQkwiPaTbkyYCg4JDkMQiOWz8g=" + } + }, + "geo": { + "storeLocatorMap": { + "isDefault": true, + "providerPlugin": "awscloudformation", + "service": "Map", + "mapStyle": "VectorEsriStreets", + "accessType": "AuthorizedAndGuestUsers", + "dependsOn": [ + { + "category": "auth", + "resourceName": "storelocator41a9495f41a9495f", + "attributes": [ + "UserPoolId" + ] + }, + { + "category": "auth", + "resourceName": "userPoolGroups", + "attributes": [ + "storeLocatorAdminGroupRole" + ] + } + ], + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorMap-cloudformation-template.json", + "logicalId": "geostoreLocatorMap" + }, + "lastPushTimeStamp": "2026-03-24T16:38:00.639Z", + "output": { + "Style": "VectorEsriStreets", + "Region": "us-east-1", + "Arn": "arn:aws:geo:us-east-1:123456789012:map/storeLocatorMap-main", + "Name": "storeLocatorMap-main" + }, + "lastPushDirHash": "f6hS2nqVgBHpibNEdmumaRgBCRM=" + }, + "storeLocatorSearch": { + "isDefault": true, + "providerPlugin": "awscloudformation", + "service": "PlaceIndex", + "dataProvider": "HERE", + "dataSourceIntendedUse": "SingleUse", + "accessType": "AuthorizedAndGuestUsers", + "dependsOn": [ + { + "category": "auth", + "resourceName": "storelocator41a9495f41a9495f", + "attributes": [ + "UserPoolId" + ] + }, + { + "category": "auth", + "resourceName": "userPoolGroups", + "attributes": [ + "storeLocatorAdminGroupRole" + ] + } + ], + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorSearch-cloudformation-template.json", + "logicalId": "geostoreLocatorSearch" + }, + "lastPushTimeStamp": "2026-03-24T16:38:00.639Z", + "output": { + "Region": "us-east-1", + "Arn": "arn:aws:geo:us-east-1:123456789012:place-index/storeLocatorSearch-main", + "Name": "storeLocatorSearch-main" + }, + "lastPushDirHash": "DcWb0RNLHGk1nlEWvQI8kcmIhuw=" + }, + "storeLocatorGeofence": { + "isDefault": true, + "providerPlugin": "awscloudformation", + "service": "GeofenceCollection", + "accessType": "CognitoGroups", + "dependsOn": [ + { + "category": "auth", + "resourceName": "storelocator41a9495f41a9495f", + "attributes": [ + "UserPoolId" + ] + }, + { + "category": "auth", + "resourceName": "userPoolGroups", + "attributes": [ + "storeLocatorAdminGroupRole" + ] + } + ], + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorGeofence-cloudformation-template.json", + "logicalId": "geostoreLocatorGeofence" + }, + "lastPushTimeStamp": "2026-03-24T16:38:00.639Z", + "output": { + "Region": "us-east-1", + "Arn": "arn:aws:geo:us-east-1:123456789012:geofence-collection/storeLocatorGeofence-main", + "Name": "storeLocatorGeofence-main" + }, + "lastPushDirHash": "qBxz5+dofKzvXa0AVAS5tnATCqA=" + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/storelocator41a9495f41a9495f/build/auth-trigger-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/storelocator41a9495f41a9495f/build/auth-trigger-cloudformation-template.json new file mode 100644 index 00000000000..e6186c748d1 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/storelocator41a9495f41a9495f/build/auth-trigger-cloudformation-template.json @@ -0,0 +1,204 @@ +{ + "Description": "Custom Resource stack for Auth Trigger created using Amplify CLI", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "env": { + "Type": "String" + }, + "userpoolId": { + "Type": "String" + }, + "userpoolArn": { + "Type": "String" + }, + "functionstorelocator41a9495f41a9495fPostConfirmationName": { + "Type": "String" + }, + "functionstorelocator41a9495f41a9495fPostConfirmationArn": { + "Type": "String" + }, + "functionstorelocator41a9495f41a9495fPostConfirmationLambdaExecutionRole": { + "Type": "String" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "UserPoolPostConfirmationLambdaInvokePermission": { + "Type": "AWS::Lambda::Permission", + "Properties": { + "Action": "lambda:InvokeFunction", + "FunctionName": { + "Ref": "functionstorelocator41a9495f41a9495fPostConfirmationName" + }, + "Principal": "cognito-idp.amazonaws.com", + "SourceArn": { + "Ref": "userpoolArn" + } + } + }, + "Amplifyfunctionstorelocator41a9495f41a9495fPostConfirmationNamePostConfirmationAddToGroupCognitoC0815C8F": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "cognito-idp:AdminAddUserToGroup", + "cognito-idp:GetGroup", + "cognito-idp:CreateGroup" + ], + "Effect": "Allow", + "Resource": { + "Ref": "userpoolArn" + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "AddToGroupCognito", + "Roles": [ + { + "Fn::Select": [ + 1, + { + "Fn::Split": [ + "/", + { + "Fn::Select": [ + 5, + { + "Fn::Split": [ + ":", + { + "Ref": "functionstorelocator41a9495f41a9495fPostConfirmationLambdaExecutionRole" + } + ] + } + ] + } + ] + } + ] + } + ] + } + }, + "authTriggerFnServiceRole08093B67": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "authTriggerFnServiceRoleDefaultPolicyEC9285A8": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "cognito-idp:DescribeUserPool", + "cognito-idp:UpdateUserPool" + ], + "Effect": "Allow", + "Resource": { + "Ref": "userpoolArn" + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "authTriggerFnServiceRoleDefaultPolicyEC9285A8", + "Roles": [ + { + "Ref": "authTriggerFnServiceRole08093B67" + } + ] + } + }, + "authTriggerFn7FCFA449": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "const response = require('cfn-response');\nconst {\n CognitoIdentityProviderClient,\n DescribeUserPoolCommand,\n UpdateUserPoolCommand,\n} = require('@aws-sdk/client-cognito-identity-provider');\n\nexports.handler = (event, context) => {\n // Don't return promise, response.send() marks context as done internally\n void tryHandleEvent(event, context);\n};\n\nasync function tryHandleEvent(event, context) {\n const physicalResourceId =\n event.RequestType === 'Update' ? event.PhysicalResourceId : `${event.LogicalResourceId}-${event.ResourceProperties.userpoolId}`;\n try {\n await handleEvent(event);\n response.send(event, context, response.SUCCESS, {}, physicalResourceId);\n } catch (err) {\n console.log(err.stack);\n response.send(event, context, response.FAILED, { err }, physicalResourceId);\n }\n}\n\nasync function handleEvent(event) {\n const userPoolId = event.ResourceProperties.userpoolId;\n const { lambdaConfig } = event.ResourceProperties;\n const config = {};\n const cognitoClient = new CognitoIdentityProviderClient({});\n const userPoolConfig = await cognitoClient.send(new DescribeUserPoolCommand({ UserPoolId: userPoolId }));\n const userPoolParams = userPoolConfig.UserPool;\n // update userPool params\n\n const updateUserPoolConfig = {\n UserPoolId: userPoolParams.Id,\n Policies: userPoolParams.Policies,\n SmsVerificationMessage: userPoolParams.SmsVerificationMessage,\n AccountRecoverySetting: userPoolParams.AccountRecoverySetting,\n AdminCreateUserConfig: userPoolParams.AdminCreateUserConfig,\n AutoVerifiedAttributes: userPoolParams.AutoVerifiedAttributes,\n EmailConfiguration: userPoolParams.EmailConfiguration,\n EmailVerificationMessage: userPoolParams.EmailVerificationMessage,\n EmailVerificationSubject: userPoolParams.EmailVerificationSubject,\n VerificationMessageTemplate: userPoolParams.VerificationMessageTemplate,\n SmsAuthenticationMessage: userPoolParams.SmsAuthenticationMessage,\n MfaConfiguration: userPoolParams.MfaConfiguration,\n DeviceConfiguration: userPoolParams.DeviceConfiguration,\n SmsConfiguration: userPoolParams.SmsConfiguration,\n UserPoolTags: userPoolParams.UserPoolTags,\n UserPoolAddOns: userPoolParams.UserPoolAddOns,\n };\n\n // removing undefined keys\n Object.keys(updateUserPoolConfig).forEach((key) => updateUserPoolConfig[key] === undefined && delete updateUserPoolConfig[key]);\n\n /* removing UnusedAccountValidityDays as deprecated\n InvalidParameterException: Please use TemporaryPasswordValidityDays in PasswordPolicy instead of UnusedAccountValidityDays\n */\n if (updateUserPoolConfig.AdminCreateUserConfig && updateUserPoolConfig.AdminCreateUserConfig.UnusedAccountValidityDays) {\n delete updateUserPoolConfig.AdminCreateUserConfig.UnusedAccountValidityDays;\n }\n lambdaConfig.forEach((lambda) => (config[`${lambda.triggerType}`] = lambda.lambdaFunctionArn));\n if (event.RequestType === 'Delete') {\n updateUserPoolConfig.LambdaConfig = {};\n console.log(`${event.RequestType}:`, JSON.stringify(updateUserPoolConfig));\n const result = await cognitoClient.send(new UpdateUserPoolCommand(updateUserPoolConfig));\n console.log(`delete response data ${JSON.stringify(result)}`);\n } else if (event.RequestType === 'Update' || event.RequestType === 'Create') {\n updateUserPoolConfig.LambdaConfig = config;\n const result = await cognitoClient.send(new UpdateUserPoolCommand(updateUserPoolConfig));\n console.log(`createOrUpdate response data ${JSON.stringify(result)}`);\n }\n}\n" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "authTriggerFnServiceRole08093B67", + "Arn" + ] + }, + "Runtime": "nodejs22.x" + }, + "DependsOn": [ + "authTriggerFnServiceRoleDefaultPolicyEC9285A8", + "authTriggerFnServiceRole08093B67" + ] + }, + "CustomAuthTriggerResource": { + "Type": "Custom::CustomAuthTriggerResourceOutputs", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "authTriggerFn7FCFA449", + "Arn" + ] + }, + "userpoolId": { + "Ref": "userpoolId" + }, + "lambdaConfig": [ + { + "triggerType": "PostConfirmation", + "lambdaFunctionName": "storelocator41a9495f41a9495fPostConfirmation", + "lambdaFunctionArn": { + "Ref": "functionstorelocator41a9495f41a9495fPostConfirmationArn" + } + } + ], + "nonce": "a956ed2b-ea63-4747-acee-0f4cb27b3925" + }, + "DependsOn": [ + "authTriggerFn7FCFA449", + "authTriggerFnServiceRoleDefaultPolicyEC9285A8", + "authTriggerFnServiceRole08093B67" + ], + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/storelocator41a9495f41a9495f/build/parameters.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/storelocator41a9495f41a9495f/build/parameters.json new file mode 100644 index 00000000000..cba9966059e --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/storelocator41a9495f41a9495f/build/parameters.json @@ -0,0 +1,82 @@ +{ + "identityPoolName": "storelocator41a9495f_identitypool_41a9495f", + "allowUnauthenticatedIdentities": true, + "resourceNameTruncated": "storel41a9495f", + "userPoolName": "storelocator41a9495f_userpool_41a9495f", + "autoVerifiedAttributes": [ + "email" + ], + "mfaConfiguration": "OFF", + "mfaTypes": [ + "SMS Text Message" + ], + "smsAuthenticationMessage": "Your authentication code is {####}", + "smsVerificationMessage": "Your verification code is {####}", + "emailVerificationSubject": "Your verification code", + "emailVerificationMessage": "Your verification code is {####}", + "defaultPasswordPolicy": false, + "passwordPolicyMinLength": 8, + "passwordPolicyCharacters": [], + "requiredAttributes": [ + "email" + ], + "aliasAttributes": [], + "userpoolClientGenerateSecret": false, + "userpoolClientRefreshTokenValidity": "100", + "userpoolClientWriteAttributes": [ + "email" + ], + "userpoolClientReadAttributes": [ + "email" + ], + "userpoolClientLambdaRole": "storel41a9495f_userpoolclient_lambda_role", + "userpoolClientSetAttributes": false, + "sharedId": "41a9495f", + "resourceName": "storelocator41a9495f41a9495f", + "authSelections": "identityPoolAndUserPool", + "useDefault": "manual", + "thirdPartyAuth": false, + "usernameAttributes": [ + "email" + ], + "userPoolGroups": true, + "adminQueries": false, + "triggers": "{\"PostConfirmation\":[\"add-to-group\"]}", + "hostedUI": false, + "userPoolGroupList": [ + "storeLocatorAdmin" + ], + "serviceName": "Cognito", + "usernameCaseSensitive": false, + "useEnabledMfas": true, + "authRoleArn": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + }, + "unauthRoleArn": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + }, + "breakCircularDependency": true, + "dependsOn": [ + { + "category": "function", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation", + "triggerProvider": "Cognito", + "attributes": [ + "Arn", + "Name" + ] + } + ], + "permissions": [ + "{\"policyName\":\"AddToGroupCognito\",\"trigger\":\"PostConfirmation\",\"effect\":\"Allow\",\"actions\":[\"cognito-idp:AdminAddUserToGroup\",\"cognito-idp:GetGroup\",\"cognito-idp:CreateGroup\"],\"resource\":{\"paramType\":\"!GetAtt\",\"keys\":[\"UserPool\",\"Arn\"]}}" + ], + "authTriggerConnections": [ + "{\"triggerType\":\"PostConfirmation\",\"lambdaFunctionName\":\"storelocator41a9495f41a9495fPostConfirmation\"}" + ] +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/storelocator41a9495f41a9495f/build/storelocator41a9495f41a9495f-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/storelocator41a9495f41a9495f/build/storelocator41a9495f41a9495f-cloudformation-template.json new file mode 100644 index 00000000000..32f0ad747e9 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/storelocator41a9495f41a9495f/build/storelocator41a9495f41a9495f-cloudformation-template.json @@ -0,0 +1,486 @@ +{ + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "env": { + "Type": "String" + }, + "functionstorelocator41a9495f41a9495fPostConfirmationArn": { + "Type": "String", + "Default": "functionstorelocator41a9495f41a9495fPostConfirmationArn" + }, + "functionstorelocator41a9495f41a9495fPostConfirmationName": { + "Type": "String", + "Default": "functionstorelocator41a9495f41a9495fPostConfirmationName" + }, + "identityPoolName": { + "Type": "String" + }, + "allowUnauthenticatedIdentities": { + "Type": "String" + }, + "resourceNameTruncated": { + "Type": "String" + }, + "userPoolName": { + "Type": "String" + }, + "autoVerifiedAttributes": { + "Type": "CommaDelimitedList" + }, + "mfaConfiguration": { + "Type": "String" + }, + "mfaTypes": { + "Type": "CommaDelimitedList" + }, + "smsAuthenticationMessage": { + "Type": "String" + }, + "smsVerificationMessage": { + "Type": "String" + }, + "emailVerificationSubject": { + "Type": "String" + }, + "emailVerificationMessage": { + "Type": "String" + }, + "defaultPasswordPolicy": { + "Type": "String" + }, + "passwordPolicyMinLength": { + "Type": "String" + }, + "passwordPolicyCharacters": { + "Type": "CommaDelimitedList" + }, + "requiredAttributes": { + "Type": "CommaDelimitedList" + }, + "aliasAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientGenerateSecret": { + "Type": "String" + }, + "userpoolClientRefreshTokenValidity": { + "Type": "String" + }, + "userpoolClientWriteAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientReadAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientLambdaRole": { + "Type": "String" + }, + "userpoolClientSetAttributes": { + "Type": "String" + }, + "sharedId": { + "Type": "String" + }, + "resourceName": { + "Type": "String" + }, + "authSelections": { + "Type": "String" + }, + "useDefault": { + "Type": "String" + }, + "thirdPartyAuth": { + "Type": "String" + }, + "usernameAttributes": { + "Type": "CommaDelimitedList" + }, + "userPoolGroups": { + "Type": "String" + }, + "adminQueries": { + "Type": "String" + }, + "triggers": { + "Type": "String" + }, + "hostedUI": { + "Type": "String" + }, + "userPoolGroupList": { + "Type": "CommaDelimitedList" + }, + "serviceName": { + "Type": "String" + }, + "usernameCaseSensitive": { + "Type": "String" + }, + "useEnabledMfas": { + "Type": "String" + }, + "authRoleArn": { + "Type": "String" + }, + "unauthRoleArn": { + "Type": "String" + }, + "breakCircularDependency": { + "Type": "String" + }, + "dependsOn": { + "Type": "CommaDelimitedList" + }, + "permissions": { + "Type": "CommaDelimitedList" + }, + "authTriggerConnections": { + "Type": "CommaDelimitedList" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "UserPool": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": { + "Ref": "emailVerificationMessage" + }, + "EmailVerificationSubject": { + "Ref": "emailVerificationSubject" + }, + "MfaConfiguration": { + "Ref": "mfaConfiguration" + }, + "Policies": { + "PasswordPolicy": { + "MinimumLength": { + "Ref": "passwordPolicyMinLength" + }, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userPoolName" + }, + { + "Fn::Join": [ + "", + [ + { + "Ref": "userPoolName" + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "UsernameAttributes": { + "Ref": "usernameAttributes" + }, + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "UserPoolClientWeb": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "storel41a9495f_app_clientWeb", + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "UserPoolClient": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "storel41a9495f_app_client", + "GenerateSecret": { + "Ref": "userpoolClientGenerateSecret" + }, + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "UserPoolClientRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + }, + "Action": "sts:AssumeRole" + } + ] + }, + "RoleName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userpoolClientLambdaRole" + }, + { + "Fn::Join": [ + "", + [ + "upClientLambdaRole41a9495f", + { + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + { + "Ref": "AWS::StackName" + } + ] + } + ] + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + } + } + }, + "IdentityPool": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": { + "Ref": "allowUnauthenticatedIdentities" + }, + "CognitoIdentityProviders": [ + { + "ClientId": { + "Ref": "UserPoolClient" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + }, + { + "ClientId": { + "Ref": "UserPoolClientWeb" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "storelocator41a9495f_identitypool_41a9495f", + { + "Fn::Join": [ + "", + [ + "storelocator41a9495f_identitypool_41a9495f__", + { + "Ref": "env" + } + ] + ] + } + ] + } + } + }, + "IdentityPoolRoleMap": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": { + "Ref": "IdentityPool" + }, + "RoleMappings": { + "UserPoolClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": { + "Ref": "UserPool" + }, + "client": { + "Ref": "UserPoolClient" + } + } + ] + }, + "Type": "Token" + }, + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${webClient}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": { + "Ref": "UserPool" + }, + "webClient": { + "Ref": "UserPoolClientWeb" + } + } + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": { + "Ref": "unauthRoleArn" + }, + "authenticated": { + "Ref": "authRoleArn" + } + } + }, + "DependsOn": [ + "IdentityPool", + "UserPoolClient", + "UserPoolClientWeb" + ] + } + }, + "Outputs": { + "IdentityPoolId": { + "Description": "Id for the identity pool", + "Value": { + "Ref": "IdentityPool" + } + }, + "IdentityPoolName": { + "Value": { + "Fn::GetAtt": [ + "IdentityPool", + "Name" + ] + } + }, + "UserPoolId": { + "Description": "Id for the user pool", + "Value": { + "Ref": "UserPool" + } + }, + "UserPoolArn": { + "Description": "Arn for the user pool", + "Value": { + "Fn::GetAtt": [ + "UserPool", + "Arn" + ] + } + }, + "UserPoolName": { + "Value": { + "Ref": "userPoolName" + } + }, + "AppClientIDWeb": { + "Description": "The user pool app client id for web", + "Value": { + "Ref": "UserPoolClientWeb" + } + }, + "AppClientID": { + "Description": "The user pool app client id", + "Value": { + "Ref": "UserPoolClient" + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/storelocator41a9495f41a9495f/cli-inputs.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/storelocator41a9495f41a9495f/cli-inputs.json new file mode 100644 index 00000000000..c66baffc70c --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/storelocator41a9495f41a9495f/cli-inputs.json @@ -0,0 +1,89 @@ +{ + "version": "1", + "cognitoConfig": { + "identityPoolName": "storelocator41a9495f_identitypool_41a9495f", + "allowUnauthenticatedIdentities": true, + "resourceNameTruncated": "storel41a9495f", + "userPoolName": "storelocator41a9495f_userpool_41a9495f", + "autoVerifiedAttributes": [ + "email" + ], + "mfaConfiguration": "OFF", + "mfaTypes": [ + "SMS Text Message" + ], + "smsAuthenticationMessage": "Your authentication code is {####}", + "smsVerificationMessage": "Your verification code is {####}", + "emailVerificationSubject": "Your verification code", + "emailVerificationMessage": "Your verification code is {####}", + "defaultPasswordPolicy": false, + "passwordPolicyMinLength": 8, + "passwordPolicyCharacters": [], + "requiredAttributes": [ + "email" + ], + "aliasAttributes": [], + "userpoolClientGenerateSecret": false, + "userpoolClientRefreshTokenValidity": "100", + "userpoolClientWriteAttributes": [ + "email" + ], + "userpoolClientReadAttributes": [ + "email" + ], + "userpoolClientLambdaRole": "storel41a9495f_userpoolclient_lambda_role", + "userpoolClientSetAttributes": false, + "sharedId": "41a9495f", + "resourceName": "storelocator41a9495f41a9495f", + "authSelections": "identityPoolAndUserPool", + "useDefault": "manual", + "thirdPartyAuth": false, + "usernameAttributes": [ + "email" + ], + "userPoolGroups": true, + "adminQueries": false, + "triggers": { + "PostConfirmation": [ + "add-to-group" + ] + }, + "hostedUI": false, + "userPoolGroupList": [ + "storeLocatorAdmin" + ], + "serviceName": "Cognito", + "usernameCaseSensitive": false, + "useEnabledMfas": true, + "authRoleArn": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + }, + "unauthRoleArn": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + }, + "breakCircularDependency": true, + "dependsOn": [ + { + "category": "function", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation", + "triggerProvider": "Cognito", + "attributes": [ + "Arn", + "Name" + ] + } + ], + "permissions": [ + "{\"policyName\":\"AddToGroupCognito\",\"trigger\":\"PostConfirmation\",\"effect\":\"Allow\",\"actions\":[\"cognito-idp:AdminAddUserToGroup\",\"cognito-idp:GetGroup\",\"cognito-idp:CreateGroup\"],\"resource\":{\"paramType\":\"!GetAtt\",\"keys\":[\"UserPool\",\"Arn\"]}}" + ], + "authTriggerConnections": [ + "{\"triggerType\":\"PostConfirmation\",\"lambdaFunctionName\":\"storelocator41a9495f41a9495fPostConfirmation\"}" + ] + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/build/parameters.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/build/parameters.json new file mode 100644 index 00000000000..48115bd5cd6 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/build/parameters.json @@ -0,0 +1,14 @@ +{ + "AuthRoleArn": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + }, + "UnauthRoleArn": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json new file mode 100644 index 00000000000..5edc3def07d --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json @@ -0,0 +1,109 @@ +{ + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito-UserPool-Groups\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "env": { + "Type": "String" + }, + "AuthRoleArn": { + "Type": "String" + }, + "UnauthRoleArn": { + "Type": "String" + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Type": "String", + "Default": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "authstorelocator41a9495f41a9495fIdentityPoolId": { + "Type": "String", + "Default": "authstorelocator41a9495f41a9495fIdentityPoolId" + }, + "authstorelocator41a9495f41a9495fAppClientID": { + "Type": "String", + "Default": "authstorelocator41a9495f41a9495fAppClientID" + }, + "authstorelocator41a9495f41a9495fAppClientIDWeb": { + "Type": "String", + "Default": "authstorelocator41a9495f41a9495fAppClientIDWeb" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "storeLocatorAdminGroup": { + "Type": "AWS::Cognito::UserPoolGroup", + "Properties": { + "Description": "override success", + "GroupName": "storeLocatorAdmin", + "Precedence": 1, + "RoleArn": { + "Fn::GetAtt": [ + "storeLocatorAdminGroupRole", + "Arn" + ] + }, + "UserPoolId": { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + } + } + }, + "storeLocatorAdminGroupRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "", + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + }, + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": { + "Ref": "authstorelocator41a9495f41a9495fIdentityPoolId" + } + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "authenticated" + } + } + } + ] + }, + "RoleName": { + "Fn::Join": [ + "", + [ + { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "-storeLocatorAdminGroupRole" + ] + ] + } + } + } + }, + "Outputs": { + "storeLocatorAdminGroupRole": { + "Value": { + "Fn::GetAtt": [ + "storeLocatorAdminGroupRole", + "Arn" + ] + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/user-pool-group-precedence.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/user-pool-group-precedence.json new file mode 100644 index 00000000000..bcc9738de65 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/auth/userPoolGroups/user-pool-group-precedence.json @@ -0,0 +1,6 @@ +[ + { + "groupName": "storeLocatorAdmin", + "precedence": 1 + } +] \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/storelocator41a9495f41a9495f/build/storelocator41a9495f41a9495f-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/storelocator41a9495f41a9495f/build/storelocator41a9495f41a9495f-cloudformation-template.json new file mode 100644 index 00000000000..32f0ad747e9 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/storelocator41a9495f41a9495f/build/storelocator41a9495f41a9495f-cloudformation-template.json @@ -0,0 +1,486 @@ +{ + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "env": { + "Type": "String" + }, + "functionstorelocator41a9495f41a9495fPostConfirmationArn": { + "Type": "String", + "Default": "functionstorelocator41a9495f41a9495fPostConfirmationArn" + }, + "functionstorelocator41a9495f41a9495fPostConfirmationName": { + "Type": "String", + "Default": "functionstorelocator41a9495f41a9495fPostConfirmationName" + }, + "identityPoolName": { + "Type": "String" + }, + "allowUnauthenticatedIdentities": { + "Type": "String" + }, + "resourceNameTruncated": { + "Type": "String" + }, + "userPoolName": { + "Type": "String" + }, + "autoVerifiedAttributes": { + "Type": "CommaDelimitedList" + }, + "mfaConfiguration": { + "Type": "String" + }, + "mfaTypes": { + "Type": "CommaDelimitedList" + }, + "smsAuthenticationMessage": { + "Type": "String" + }, + "smsVerificationMessage": { + "Type": "String" + }, + "emailVerificationSubject": { + "Type": "String" + }, + "emailVerificationMessage": { + "Type": "String" + }, + "defaultPasswordPolicy": { + "Type": "String" + }, + "passwordPolicyMinLength": { + "Type": "String" + }, + "passwordPolicyCharacters": { + "Type": "CommaDelimitedList" + }, + "requiredAttributes": { + "Type": "CommaDelimitedList" + }, + "aliasAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientGenerateSecret": { + "Type": "String" + }, + "userpoolClientRefreshTokenValidity": { + "Type": "String" + }, + "userpoolClientWriteAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientReadAttributes": { + "Type": "CommaDelimitedList" + }, + "userpoolClientLambdaRole": { + "Type": "String" + }, + "userpoolClientSetAttributes": { + "Type": "String" + }, + "sharedId": { + "Type": "String" + }, + "resourceName": { + "Type": "String" + }, + "authSelections": { + "Type": "String" + }, + "useDefault": { + "Type": "String" + }, + "thirdPartyAuth": { + "Type": "String" + }, + "usernameAttributes": { + "Type": "CommaDelimitedList" + }, + "userPoolGroups": { + "Type": "String" + }, + "adminQueries": { + "Type": "String" + }, + "triggers": { + "Type": "String" + }, + "hostedUI": { + "Type": "String" + }, + "userPoolGroupList": { + "Type": "CommaDelimitedList" + }, + "serviceName": { + "Type": "String" + }, + "usernameCaseSensitive": { + "Type": "String" + }, + "useEnabledMfas": { + "Type": "String" + }, + "authRoleArn": { + "Type": "String" + }, + "unauthRoleArn": { + "Type": "String" + }, + "breakCircularDependency": { + "Type": "String" + }, + "dependsOn": { + "Type": "CommaDelimitedList" + }, + "permissions": { + "Type": "CommaDelimitedList" + }, + "authTriggerConnections": { + "Type": "CommaDelimitedList" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "UserPool": { + "Type": "AWS::Cognito::UserPool", + "Properties": { + "AutoVerifiedAttributes": [ + "email" + ], + "EmailVerificationMessage": { + "Ref": "emailVerificationMessage" + }, + "EmailVerificationSubject": { + "Ref": "emailVerificationSubject" + }, + "MfaConfiguration": { + "Ref": "mfaConfiguration" + }, + "Policies": { + "PasswordPolicy": { + "MinimumLength": { + "Ref": "passwordPolicyMinLength" + }, + "RequireLowercase": false, + "RequireNumbers": false, + "RequireSymbols": false, + "RequireUppercase": false + } + }, + "Schema": [ + { + "Mutable": true, + "Name": "email", + "Required": true + } + ], + "UserAttributeUpdateSettings": { + "AttributesRequireVerificationBeforeUpdate": [ + "email" + ] + }, + "UserPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userPoolName" + }, + { + "Fn::Join": [ + "", + [ + { + "Ref": "userPoolName" + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "UsernameAttributes": { + "Ref": "usernameAttributes" + }, + "UsernameConfiguration": { + "CaseSensitive": false + } + } + }, + "UserPoolClientWeb": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "storel41a9495f_app_clientWeb", + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "UserPoolClient": { + "Type": "AWS::Cognito::UserPoolClient", + "Properties": { + "ClientName": "storel41a9495f_app_client", + "GenerateSecret": { + "Ref": "userpoolClientGenerateSecret" + }, + "RefreshTokenValidity": { + "Ref": "userpoolClientRefreshTokenValidity" + }, + "TokenValidityUnits": { + "RefreshToken": "days" + }, + "UserPoolId": { + "Ref": "UserPool" + } + }, + "DependsOn": [ + "UserPool" + ] + }, + "UserPoolClientRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + }, + "Action": "sts:AssumeRole" + } + ] + }, + "RoleName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + { + "Ref": "userpoolClientLambdaRole" + }, + { + "Fn::Join": [ + "", + [ + "upClientLambdaRole41a9495f", + { + "Fn::Select": [ + 3, + { + "Fn::Split": [ + "-", + { + "Ref": "AWS::StackName" + } + ] + } + ] + }, + "-", + { + "Ref": "env" + } + ] + ] + } + ] + } + } + }, + "IdentityPool": { + "Type": "AWS::Cognito::IdentityPool", + "Properties": { + "AllowUnauthenticatedIdentities": { + "Ref": "allowUnauthenticatedIdentities" + }, + "CognitoIdentityProviders": [ + { + "ClientId": { + "Ref": "UserPoolClient" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + }, + { + "ClientId": { + "Ref": "UserPoolClientWeb" + }, + "ProviderName": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "client": { + "Ref": "UserPool" + } + } + ] + } + } + ], + "IdentityPoolName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "storelocator41a9495f_identitypool_41a9495f", + { + "Fn::Join": [ + "", + [ + "storelocator41a9495f_identitypool_41a9495f__", + { + "Ref": "env" + } + ] + ] + } + ] + } + } + }, + "IdentityPoolRoleMap": { + "Type": "AWS::Cognito::IdentityPoolRoleAttachment", + "Properties": { + "IdentityPoolId": { + "Ref": "IdentityPool" + }, + "RoleMappings": { + "UserPoolClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${client}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": { + "Ref": "UserPool" + }, + "client": { + "Ref": "UserPoolClient" + } + } + ] + }, + "Type": "Token" + }, + "UserPoolWebClientRoleMapping": { + "AmbiguousRoleResolution": "AuthenticatedRole", + "IdentityProvider": { + "Fn::Sub": [ + "cognito-idp.${region}.amazonaws.com/${userPool}:${webClient}", + { + "region": { + "Ref": "AWS::Region" + }, + "userPool": { + "Ref": "UserPool" + }, + "webClient": { + "Ref": "UserPoolClientWeb" + } + } + ] + }, + "Type": "Token" + } + }, + "Roles": { + "unauthenticated": { + "Ref": "unauthRoleArn" + }, + "authenticated": { + "Ref": "authRoleArn" + } + } + }, + "DependsOn": [ + "IdentityPool", + "UserPoolClient", + "UserPoolClientWeb" + ] + } + }, + "Outputs": { + "IdentityPoolId": { + "Description": "Id for the identity pool", + "Value": { + "Ref": "IdentityPool" + } + }, + "IdentityPoolName": { + "Value": { + "Fn::GetAtt": [ + "IdentityPool", + "Name" + ] + } + }, + "UserPoolId": { + "Description": "Id for the user pool", + "Value": { + "Ref": "UserPool" + } + }, + "UserPoolArn": { + "Description": "Arn for the user pool", + "Value": { + "Fn::GetAtt": [ + "UserPool", + "Arn" + ] + } + }, + "UserPoolName": { + "Value": { + "Ref": "userPoolName" + } + }, + "AppClientIDWeb": { + "Description": "The user pool app client id for web", + "Value": { + "Ref": "UserPoolClientWeb" + } + }, + "AppClientID": { + "Description": "The user pool app client id", + "Value": { + "Ref": "UserPoolClient" + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json new file mode 100644 index 00000000000..5edc3def07d --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/auth/userPoolGroups/build/userPoolGroups-cloudformation-template.json @@ -0,0 +1,109 @@ +{ + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"auth-Cognito-UserPool-Groups\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "env": { + "Type": "String" + }, + "AuthRoleArn": { + "Type": "String" + }, + "UnauthRoleArn": { + "Type": "String" + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Type": "String", + "Default": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "authstorelocator41a9495f41a9495fIdentityPoolId": { + "Type": "String", + "Default": "authstorelocator41a9495f41a9495fIdentityPoolId" + }, + "authstorelocator41a9495f41a9495fAppClientID": { + "Type": "String", + "Default": "authstorelocator41a9495f41a9495fAppClientID" + }, + "authstorelocator41a9495f41a9495fAppClientIDWeb": { + "Type": "String", + "Default": "authstorelocator41a9495f41a9495fAppClientIDWeb" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "storeLocatorAdminGroup": { + "Type": "AWS::Cognito::UserPoolGroup", + "Properties": { + "Description": "override success", + "GroupName": "storeLocatorAdmin", + "Precedence": 1, + "RoleArn": { + "Fn::GetAtt": [ + "storeLocatorAdminGroupRole", + "Arn" + ] + }, + "UserPoolId": { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + } + } + }, + "storeLocatorAdminGroupRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "", + "Effect": "Allow", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + }, + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "cognito-identity.amazonaws.com:aud": { + "Ref": "authstorelocator41a9495f41a9495fIdentityPoolId" + } + }, + "ForAnyValue:StringLike": { + "cognito-identity.amazonaws.com:amr": "authenticated" + } + } + } + ] + }, + "RoleName": { + "Fn::Join": [ + "", + [ + { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "-storeLocatorAdminGroupRole" + ] + ] + } + } + } + }, + "Outputs": { + "storeLocatorAdminGroupRole": { + "Value": { + "Fn::GetAtt": [ + "storeLocatorAdminGroupRole", + "Arn" + ] + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json new file mode 100644 index 00000000000..1b8df321c23 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json @@ -0,0 +1,653 @@ +{ + "Description": "Root Stack for AWS Amplify CLI", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "DeploymentBucketName": { + "Type": "String", + "Default": "DeploymentBucket", + "Description": "Name of the common deployment bucket provided by the parent stack" + }, + "AuthRoleName": { + "Type": "String", + "Default": "AuthRoleName", + "Description": "Name of the common deployment bucket provided by the parent stack" + }, + "UnauthRoleName": { + "Type": "String", + "Default": "UnAuthRoleName", + "Description": "Name of the common deployment bucket provided by the parent stack" + } + }, + "Outputs": { + "Region": { + "Description": "CloudFormation provider root stack Region", + "Value": { + "Ref": "AWS::Region" + }, + "Export": { + "Name": { + "Fn::Sub": "${AWS::StackName}-Region" + } + } + }, + "StackName": { + "Description": "CloudFormation provider root stack ID", + "Value": { + "Ref": "AWS::StackName" + }, + "Export": { + "Name": { + "Fn::Sub": "${AWS::StackName}-StackName" + } + } + }, + "StackId": { + "Description": "CloudFormation provider root stack name", + "Value": { + "Ref": "AWS::StackId" + }, + "Export": { + "Name": { + "Fn::Sub": "${AWS::StackName}-StackId" + } + } + }, + "AuthRoleArn": { + "Value": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + } + }, + "UnauthRoleArn": { + "Value": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + } + }, + "DeploymentBucketName": { + "Description": "CloudFormation provider root stack deployment bucket name", + "Value": { + "Ref": "DeploymentBucketName" + }, + "Export": { + "Name": { + "Fn::Sub": "${AWS::StackName}-DeploymentBucketName" + } + } + }, + "AuthRoleName": { + "Value": { + "Ref": "AuthRole" + } + }, + "UnauthRoleName": { + "Value": { + "Ref": "UnauthRole" + } + } + }, + "Resources": { + "DeploymentBucket": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketName": { + "Ref": "DeploymentBucketName" + }, + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + } + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "DeploymentBucketBlockHTTP": { + "Type": "AWS::S3::BucketPolicy", + "Properties": { + "Bucket": { + "Ref": "DeploymentBucketName" + }, + "PolicyDocument": { + "Statement": [ + { + "Action": "s3:*", + "Effect": "Deny", + "Principal": "*", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "DeploymentBucketName" + }, + "/*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "DeploymentBucketName" + } + ] + ] + } + ], + "Condition": { + "Bool": { + "aws:SecureTransport": false + } + } + } + ] + } + } + }, + "AuthRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "", + "Effect": "Deny", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + }, + "Action": "sts:AssumeRoleWithWebIdentity" + } + ] + }, + "RoleName": { + "Ref": "AuthRoleName" + } + } + }, + "UnauthRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "", + "Effect": "Deny", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + }, + "Action": "sts:AssumeRoleWithWebIdentity" + } + ] + }, + "RoleName": { + "Ref": "UnauthRoleName" + } + } + }, + "AuthTriggerCustomLambdaStack": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", + "Parameters": { + "env": "main", + "userpoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "userpoolArn": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolArn" + ] + }, + "functionstorelocator41a9495f41a9495fPostConfirmationLambdaExecutionRole": { + "Fn::GetAtt": [ + "functionstorelocator41a9495f41a9495fPostConfirmation", + "Outputs.LambdaExecutionRoleArn" + ] + }, + "functionstorelocator41a9495f41a9495fPostConfirmationArn": { + "Fn::GetAtt": [ + "functionstorelocator41a9495f41a9495fPostConfirmation", + "Outputs.Arn" + ] + }, + "functionstorelocator41a9495f41a9495fPostConfirmationName": { + "Fn::GetAtt": [ + "functionstorelocator41a9495f41a9495fPostConfirmation", + "Outputs.Name" + ] + } + } + }, + "DependsOn": [ + "authstorelocator41a9495f41a9495f", + "functionstorelocator41a9495f41a9495fPostConfirmation" + ] + }, + "authuserPoolGroups": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "Parameters": { + "AuthRoleArn": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + }, + "UnauthRoleArn": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "authstorelocator41a9495f41a9495fAppClientIDWeb": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.AppClientIDWeb" + ] + }, + "authstorelocator41a9495f41a9495fAppClientID": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.AppClientID" + ] + }, + "authstorelocator41a9495f41a9495fIdentityPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.IdentityPoolId" + ] + }, + "env": "main" + } + } + }, + "authstorelocator41a9495f41a9495f": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/storelocator41a9495f41a9495f-cloudformation-template.json", + "Parameters": { + "identityPoolName": "storelocator41a9495f_identitypool_41a9495f", + "allowUnauthenticatedIdentities": true, + "resourceNameTruncated": "storel41a9495f", + "userPoolName": "storelocator41a9495f_userpool_41a9495f", + "autoVerifiedAttributes": "email", + "mfaConfiguration": "OFF", + "mfaTypes": "SMS Text Message", + "smsAuthenticationMessage": "Your authentication code is {####}", + "smsVerificationMessage": "Your verification code is {####}", + "emailVerificationSubject": "Your verification code", + "emailVerificationMessage": "Your verification code is {####}", + "defaultPasswordPolicy": false, + "passwordPolicyMinLength": 8, + "passwordPolicyCharacters": "", + "requiredAttributes": "email", + "aliasAttributes": "", + "userpoolClientGenerateSecret": false, + "userpoolClientRefreshTokenValidity": "100", + "userpoolClientWriteAttributes": "email", + "userpoolClientReadAttributes": "email", + "userpoolClientLambdaRole": "storel41a9495f_userpoolclient_lambda_role", + "userpoolClientSetAttributes": false, + "sharedId": "41a9495f", + "resourceName": "storelocator41a9495f41a9495f", + "authSelections": "identityPoolAndUserPool", + "useDefault": "manual", + "thirdPartyAuth": false, + "usernameAttributes": "email", + "userPoolGroups": true, + "adminQueries": false, + "triggers": "{\"PostConfirmation\":[\"add-to-group\"]}", + "hostedUI": false, + "userPoolGroupList": "storeLocatorAdmin", + "serviceName": "Cognito", + "usernameCaseSensitive": false, + "useEnabledMfas": true, + "authRoleArn": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + }, + "unauthRoleArn": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + }, + "breakCircularDependency": true, + "dependsOn": "[object Object]", + "permissions": "{\"policyName\":\"AddToGroupCognito\",\"trigger\":\"PostConfirmation\",\"effect\":\"Allow\",\"actions\":[\"cognito-idp:AdminAddUserToGroup\",\"cognito-idp:GetGroup\",\"cognito-idp:CreateGroup\"],\"resource\":{\"paramType\":\"!GetAtt\",\"keys\":[\"UserPool\",\"Arn\"]}}", + "authTriggerConnections": "{\"triggerType\":\"PostConfirmation\",\"lambdaFunctionName\":\"storelocator41a9495f41a9495fPostConfirmation\"}", + "env": "main" + } + } + }, + "functionstorelocator41a9495f41a9495fPostConfirmation": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/function/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json", + "Parameters": { + "modules": "add-to-group", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation", + "GROUP": "storeLocatorAdmin", + "deploymentBucketName": "amplify-storelocator-main-f9ca7-deployment", + "s3Key": "amplify-builds/storelocator41a9495f41a9495fPostConfirmation-6a6c746d4739755a384a-build.zip", + "env": "main" + } + } + }, + "geostoreLocatorMap": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorMap-cloudformation-template.json", + "Parameters": { + "authRoleName": { + "Ref": "AuthRoleName" + }, + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "mapName": "storeLocatorMap", + "mapStyle": "VectorEsriStreets", + "isDefault": true, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.storeLocatorAdminGroupRole" + ] + }, + "env": "main" + } + } + }, + "geostoreLocatorSearch": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorSearch-cloudformation-template.json", + "Parameters": { + "authRoleName": { + "Ref": "AuthRoleName" + }, + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "indexName": "storeLocatorSearch", + "dataProvider": "Here", + "dataSourceIntendedUse": "SingleUse", + "isDefault": true, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.storeLocatorAdminGroupRole" + ] + }, + "env": "main" + } + } + }, + "geostoreLocatorGeofence": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorGeofence-cloudformation-template.json", + "Parameters": { + "collectionName": "storeLocatorGeofence", + "isDefault": true, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.storeLocatorAdminGroupRole" + ] + }, + "env": "main" + } + } + }, + "UpdateRolesWithIDPFunction": { + "DependsOn": [ + "AuthRole", + "UnauthRole", + "authstorelocator41a9495f41a9495f" + ], + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": { + "Fn::Join": [ + "\n", + [ + "const response = require('cfn-response');", + "const { IAMClient, GetRoleCommand, UpdateAssumeRolePolicyCommand } = require('@aws-sdk/client-iam');", + "exports.handler = function(event, context) {", + " // Don't return promise, response.send() marks context as done internally", + " const ignoredPromise = handleEvent(event, context)", + "};", + "async function handleEvent(event, context) {", + " try {", + " let authRoleName = event.ResourceProperties.authRoleName;", + " let unauthRoleName = event.ResourceProperties.unauthRoleName;", + " let idpId = event.ResourceProperties.idpId;", + " let authParamsJson = {", + " 'Version': '2012-10-17',", + " 'Statement': [{", + " 'Effect': 'Allow',", + " 'Principal': {'Federated': 'cognito-identity.amazonaws.com'},", + " 'Action': 'sts:AssumeRoleWithWebIdentity',", + " 'Condition': {", + " 'StringEquals': {'cognito-identity.amazonaws.com:aud': idpId},", + " 'ForAnyValue:StringLike': {'cognito-identity.amazonaws.com:amr': 'authenticated'}", + " }", + " }]", + " };", + " let unauthParamsJson = {", + " 'Version': '2012-10-17',", + " 'Statement': [{", + " 'Effect': 'Allow',", + " 'Principal': {'Federated': 'cognito-identity.amazonaws.com'},", + " 'Action': 'sts:AssumeRoleWithWebIdentity',", + " 'Condition': {", + " 'StringEquals': {'cognito-identity.amazonaws.com:aud': idpId},", + " 'ForAnyValue:StringLike': {'cognito-identity.amazonaws.com:amr': 'unauthenticated'}", + " }", + " }]", + " };", + " if (event.RequestType === 'Delete') {", + " try {", + " delete authParamsJson.Statement[0].Condition;", + " delete unauthParamsJson.Statement[0].Condition;", + " authParamsJson.Statement[0].Effect = 'Deny'", + " unauthParamsJson.Statement[0].Effect = 'Deny'", + " let authParams = {PolicyDocument: JSON.stringify(authParamsJson), RoleName: authRoleName};", + " let unauthParams = {PolicyDocument: JSON.stringify(unauthParamsJson), RoleName: unauthRoleName};", + " const iam = new IAMClient({region: event.ResourceProperties.region});", + " let res = await Promise.all([", + " iam.send(new GetRoleCommand({RoleName: authParams.RoleName})),", + " iam.send(new GetRoleCommand({RoleName: unauthParams.RoleName}))", + " ]);", + " res = await Promise.all([", + " iam.send(new UpdateAssumeRolePolicyCommand(authParams)),", + " iam.send(new UpdateAssumeRolePolicyCommand(unauthParams))", + " ]);", + " response.send(event, context, response.SUCCESS, {});", + " } catch (err) {", + " console.log(err.stack);", + " response.send(event, context, response.SUCCESS, {Error: err});", + " }", + " } else if (event.RequestType === 'Update' || event.RequestType === 'Create') {", + " const iam = new IAMClient({region: event.ResourceProperties.region});", + " let authParams = {PolicyDocument: JSON.stringify(authParamsJson), RoleName: authRoleName};", + " let unauthParams = {PolicyDocument: JSON.stringify(unauthParamsJson), RoleName: unauthRoleName};", + " const res = await Promise.all([", + " iam.send(new UpdateAssumeRolePolicyCommand(authParams)),", + " iam.send(new UpdateAssumeRolePolicyCommand(unauthParams))", + " ]);", + " response.send(event, context, response.SUCCESS, {});", + " }", + " } catch (err) {", + " console.log(err.stack);", + " response.send(event, context, response.FAILED, {Error: err});", + " }", + "};" + ] + ] + } + }, + "Handler": "index.handler", + "Runtime": "nodejs22.x", + "Timeout": 300, + "Role": { + "Fn::GetAtt": [ + "UpdateRolesWithIDPFunctionRole", + "Arn" + ] + } + } + }, + "UpdateRolesWithIDPFunctionOutputs": { + "Type": "Custom::LambdaCallout", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "UpdateRolesWithIDPFunction", + "Arn" + ] + }, + "region": { + "Ref": "AWS::Region" + }, + "idpId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.IdentityPoolId" + ] + }, + "authRoleName": { + "Ref": "AuthRole" + }, + "unauthRoleName": { + "Ref": "UnauthRole" + } + } + }, + "UpdateRolesWithIDPFunctionRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "RoleName": { + "Fn::Join": [ + "", + [ + { + "Ref": "AuthRole" + }, + "-idp" + ] + ] + }, + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": [ + "lambda.amazonaws.com" + ] + }, + "Action": [ + "sts:AssumeRole" + ] + } + ] + }, + "Policies": [ + { + "PolicyName": "UpdateRolesWithIDPFunctionPolicy", + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Resource": "arn:aws:logs:*:*:*" + }, + { + "Effect": "Allow", + "Action": [ + "iam:UpdateAssumeRolePolicy", + "iam:GetRole" + ], + "Resource": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + } + }, + { + "Effect": "Allow", + "Action": [ + "iam:UpdateAssumeRolePolicy", + "iam:GetRole" + ], + "Resource": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + } + } + ] + } + } + ] + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/storelocator41a9495f41a9495fPostConfirmation/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/storelocator41a9495f41a9495fPostConfirmation/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json new file mode 100644 index 00000000000..192bbea9292 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/storelocator41a9495f41a9495fPostConfirmation/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json @@ -0,0 +1,235 @@ +{ + "AWSTemplateFormatVersion": "2010-09-09", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Parameters": { + "GROUP": { + "Type": "String", + "Default": "" + }, + "modules": { + "Type": "String", + "Default": "", + "Description": "Comma-delimited list of modules to be executed by a lambda trigger. Sent to resource as an env variable." + }, + "resourceName": { + "Type": "String", + "Default": "" + }, + "trigger": { + "Type": "String", + "Default": "true" + }, + "functionName": { + "Type": "String", + "Default": "" + }, + "roleName": { + "Type": "String", + "Default": "" + }, + "parentResource": { + "Type": "String", + "Default": "" + }, + "parentStack": { + "Type": "String", + "Default": "" + }, + "env": { + "Type": "String" + }, + "deploymentBucketName": { + "Type": "String" + }, + "s3Key": { + "Type": "String" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "LambdaFunction": { + "Type": "AWS::Lambda::Function", + "Metadata": { + "aws:asset:path": "./src", + "aws:asset:property": "Code" + }, + "Properties": { + "Handler": "index.handler", + "FunctionName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "storelocator41a9495f41a9495fPostConfirmation", + { + "Fn::Join": [ + "", + [ + "storelocator41a9495f41a9495fPostConfirmation", + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "Environment": { + "Variables": { + "ENV": { + "Ref": "env" + }, + "MODULES": { + "Ref": "modules" + }, + "REGION": { + "Ref": "AWS::Region" + }, + "GROUP": { + "Ref": "GROUP" + } + } + }, + "Role": { + "Fn::GetAtt": [ + "LambdaExecutionRole", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 25, + "Code": { + "S3Bucket": { + "Ref": "deploymentBucketName" + }, + "S3Key": { + "Ref": "s3Key" + } + } + } + }, + "LambdaExecutionRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "RoleName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "storelocator41a9495f41a9495fPostConfirmation", + { + "Fn::Join": [ + "", + [ + "storelocator41a9495f41a9495fPostConfirmation", + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": [ + "lambda.amazonaws.com" + ] + }, + "Action": [ + "sts:AssumeRole" + ] + } + ] + } + } + }, + "lambdaexecutionpolicy": { + "DependsOn": [ + "LambdaExecutionRole" + ], + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyName": "lambda-execution-policy", + "Roles": [ + { + "Ref": "LambdaExecutionRole" + } + ], + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Resource": { + "Fn::Sub": [ + "arn:aws:logs:${region}:${account}:log-group:/aws/lambda/${lambda}:log-stream:*", + { + "region": { + "Ref": "AWS::Region" + }, + "account": { + "Ref": "AWS::AccountId" + }, + "lambda": { + "Ref": "LambdaFunction" + } + } + ] + } + } + ] + } + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Ref": "LambdaFunction" + } + }, + "Arn": { + "Value": { + "Fn::GetAtt": [ + "LambdaFunction", + "Arn" + ] + } + }, + "LambdaExecutionRole": { + "Value": { + "Ref": "LambdaExecutionRole" + } + }, + "LambdaExecutionRoleArn": { + "Value": { + "Fn::GetAtt": [ + "LambdaExecutionRole", + "Arn" + ] + } + }, + "Region": { + "Value": { + "Ref": "AWS::Region" + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/geo/storeLocatorGeofence/storeLocatorGeofence-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/geo/storeLocatorGeofence/storeLocatorGeofence-cloudformation-template.json new file mode 100644 index 00000000000..17020d54719 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/geo/storeLocatorGeofence/storeLocatorGeofence-cloudformation-template.json @@ -0,0 +1,364 @@ +{ + "Mappings": { + "RegionMapping": { + "us-east-1": { + "locationServiceRegion": "us-east-1" + }, + "us-east-2": { + "locationServiceRegion": "us-east-2" + }, + "us-west-2": { + "locationServiceRegion": "us-west-2" + }, + "ap-southeast-1": { + "locationServiceRegion": "ap-southeast-1" + }, + "ap-southeast-2": { + "locationServiceRegion": "ap-southeast-2" + }, + "ap-northeast-1": { + "locationServiceRegion": "ap-northeast-1" + }, + "eu-central-1": { + "locationServiceRegion": "eu-central-1" + }, + "eu-north-1": { + "locationServiceRegion": "eu-north-1" + }, + "eu-west-1": { + "locationServiceRegion": "eu-west-1" + }, + "sa-east-1": { + "locationServiceRegion": "us-east-1" + }, + "ca-central-1": { + "locationServiceRegion": "us-east-1" + }, + "us-west-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-north-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-northwest-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-south-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-3": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-2": { + "locationServiceRegion": "us-west-2" + }, + "eu-west-2": { + "locationServiceRegion": "eu-west-1" + }, + "eu-west-3": { + "locationServiceRegion": "eu-west-1" + }, + "me-south-1": { + "locationServiceRegion": "ap-southeast-1" + } + } + }, + "Parameters": { + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Type": "String" + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Type": "String" + }, + "collectionName": { + "Type": "String" + }, + "env": { + "Type": "String" + }, + "isDefault": { + "Type": "String" + } + }, + "Resources": { + "CustomGeofenceCollectionLambdaServiceRole9040D551": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "CustomGeofenceCollectionLambdaServiceRoleDefaultPolicy0A18B369": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "geo:CreateGeofenceCollection", + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "geo:UpdateGeofenceCollection", + "geo:DeleteGeofenceCollection" + ], + "Effect": "Allow", + "Resource": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:geofence-collection/${collectionName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "collectionName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "collectionName" + }, + { + "Ref": "env" + } + ] + ] + } + } + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "CustomGeofenceCollectionLambdaServiceRoleDefaultPolicy0A18B369", + "Roles": [ + { + "Ref": "CustomGeofenceCollectionLambdaServiceRole9040D551" + } + ] + } + }, + "CustomGeofenceCollectionLambdaCA3D002B": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "const response = require('cfn-response');\nconst {\n LocationClient,\n CreateGeofenceCollectionCommand,\n DeleteGeofenceCollectionCommand,\n UpdateGeofenceCollectionCommand,\n} = require('@aws-sdk/client-location');\nexports.handler = async function (event, context) {\n try {\n console.log('REQUEST RECEIVED:' + JSON.stringify(event));\n const pricingPlan = 'RequestBasedUsage';\n if (event.RequestType === 'Create') {\n const params = {\n CollectionName: event.ResourceProperties.collectionName,\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new CreateGeofenceCollectionCommand(params));\n console.log('create resource response data' + JSON.stringify(res));\n if (res.CollectionName && res.CollectionArn) {\n await response.send(event, context, response.SUCCESS, res, params.CollectionName);\n } else {\n await response.send(event, context, response.FAILED, res, params.CollectionName);\n }\n }\n if (event.RequestType === 'Update') {\n const params = {\n CollectionName: event.ResourceProperties.collectionName,\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new UpdateGeofenceCollectionCommand(params));\n console.log('update resource response data' + JSON.stringify(res));\n if (res.CollectionName) {\n await response.send(event, context, response.SUCCESS, res, params.CollectionName);\n } else {\n await response.send(event, context, response.FAILED, res, params.CollectionName);\n }\n }\n if (event.RequestType === 'Delete') {\n const params = {\n CollectionName: event.ResourceProperties.collectionName,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new DeleteGeofenceCollectionCommand(params));\n console.log('delete resource response data' + JSON.stringify(res));\n await response.send(event, context, response.SUCCESS, res, params.CollectionName);\n }\n } catch (err) {\n console.log(err.stack);\n const res = { Error: err };\n await response.send(event, context, response.FAILED, res, event.ResourceProperties.collectionName);\n throw err;\n }\n};\n" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "CustomGeofenceCollectionLambdaServiceRole9040D551", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 300 + }, + "DependsOn": [ + "CustomGeofenceCollectionLambdaServiceRoleDefaultPolicy0A18B369", + "CustomGeofenceCollectionLambdaServiceRole9040D551" + ] + }, + "CustomGeofenceCollection": { + "Type": "Custom::LambdaCallout", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomGeofenceCollectionLambdaCA3D002B", + "Arn" + ] + }, + "collectionName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "collectionName" + }, + { + "Ref": "env" + } + ] + ] + }, + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "env": { + "Ref": "env" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "storeLocatorAdminGeofenceCollectionPolicy": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "geo:GetGeofence", + "geo:PutGeofence", + "geo:BatchPutGeofence", + "geo:BatchDeleteGeofence", + "geo:ListGeofences" + ], + "Effect": "Allow", + "Resource": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:geofence-collection/${collectionName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "collectionName": { + "Fn::GetAtt": [ + "CustomGeofenceCollection", + "CollectionName" + ] + } + } + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": { + "Fn::Join": [ + "", + [ + "storeLocatorAdmin", + { + "Fn::Join": [ + "-", + [ + { + "Ref": "collectionName" + }, + { + "Ref": "env" + } + ] + ] + }, + "Policy" + ] + ] + }, + "Roles": [ + { + "Fn::Join": [ + "-", + [ + { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "storeLocatorAdminGroupRole" + ] + ] + } + ] + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Fn::GetAtt": [ + "CustomGeofenceCollection", + "CollectionName" + ] + } + }, + "Region": { + "Value": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + } + }, + "Arn": { + "Value": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:geofence-collection/${collectionName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "collectionName": { + "Fn::GetAtt": [ + "CustomGeofenceCollection", + "CollectionName" + ] + } + } + ] + } + } + }, + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"geo-GeofenceCollection\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/geo/storeLocatorMap/storeLocatorMap-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/geo/storeLocatorMap/storeLocatorMap-cloudformation-template.json new file mode 100644 index 00000000000..bf53b69ff23 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/geo/storeLocatorMap/storeLocatorMap-cloudformation-template.json @@ -0,0 +1,347 @@ +{ + "Mappings": { + "RegionMapping": { + "us-east-1": { + "locationServiceRegion": "us-east-1" + }, + "us-east-2": { + "locationServiceRegion": "us-east-2" + }, + "us-west-2": { + "locationServiceRegion": "us-west-2" + }, + "ap-southeast-1": { + "locationServiceRegion": "ap-southeast-1" + }, + "ap-southeast-2": { + "locationServiceRegion": "ap-southeast-2" + }, + "ap-northeast-1": { + "locationServiceRegion": "ap-northeast-1" + }, + "eu-central-1": { + "locationServiceRegion": "eu-central-1" + }, + "eu-north-1": { + "locationServiceRegion": "eu-north-1" + }, + "eu-west-1": { + "locationServiceRegion": "eu-west-1" + }, + "sa-east-1": { + "locationServiceRegion": "us-east-1" + }, + "ca-central-1": { + "locationServiceRegion": "us-east-1" + }, + "us-west-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-north-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-northwest-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-south-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-3": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-2": { + "locationServiceRegion": "us-west-2" + }, + "eu-west-2": { + "locationServiceRegion": "eu-west-1" + }, + "eu-west-3": { + "locationServiceRegion": "eu-west-1" + }, + "me-south-1": { + "locationServiceRegion": "ap-southeast-1" + } + } + }, + "Parameters": { + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Type": "String" + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Type": "String" + }, + "authRoleName": { + "Type": "String" + }, + "unauthRoleName": { + "Type": "String" + }, + "mapName": { + "Type": "String" + }, + "mapStyle": { + "Type": "String" + }, + "env": { + "Type": "String" + }, + "isDefault": { + "Type": "String" + } + }, + "Resources": { + "CustomMapLambdaServiceRole4EE7732C": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "CustomMapLambdaServiceRoleDefaultPolicy983FDD4E": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "geo:CreateMap", + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "geo:UpdateMap", + "geo:DeleteMap" + ], + "Effect": "Allow", + "Resource": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:map/${mapName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "mapName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "mapName" + }, + { + "Ref": "env" + } + ] + ] + } + } + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "CustomMapLambdaServiceRoleDefaultPolicy983FDD4E", + "Roles": [ + { + "Ref": "CustomMapLambdaServiceRole4EE7732C" + } + ] + } + }, + "CustomMapLambda51D5D430": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "const response = require('cfn-response');\nconst { LocationClient, CreateMapCommand, DeleteMapCommand, UpdateMapCommand } = require('@aws-sdk/client-location');\nexports.handler = async function (event, context) {\n try {\n console.log('REQUEST RECEIVED:' + JSON.stringify(event));\n const pricingPlan = 'RequestBasedUsage';\n if (event.RequestType === 'Create') {\n let params = {\n MapName: event.ResourceProperties.mapName,\n Configuration: {\n Style: event.ResourceProperties.mapStyle,\n },\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new CreateMapCommand(params));\n console.log('create resource response data' + JSON.stringify(res));\n if (res.MapName && res.MapArn) {\n await response.send(event, context, response.SUCCESS, res, params.MapName);\n } else {\n await response.send(event, context, response.FAILED, res, params.MapName);\n }\n }\n if (event.RequestType === 'Update') {\n let params = {\n MapName: event.ResourceProperties.mapName,\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new UpdateMapCommand(params));\n console.log('update resource response data' + JSON.stringify(res));\n if (res.MapName && res.MapArn) {\n await response.send(event, context, response.SUCCESS, res, params.MapName);\n } else {\n await response.send(event, context, response.FAILED, res, params.MapName);\n }\n }\n if (event.RequestType === 'Delete') {\n let params = {\n MapName: event.ResourceProperties.mapName,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new DeleteMapCommand(params));\n console.log('delete resource response data' + JSON.stringify(res));\n await response.send(event, context, response.SUCCESS, res, params.MapName);\n }\n } catch (err) {\n console.log(err.stack);\n const res = { Error: err };\n await response.send(event, context, response.FAILED, res, event.ResourceProperties.mapName);\n throw err;\n }\n};\n" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "CustomMapLambdaServiceRole4EE7732C", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 300 + }, + "DependsOn": [ + "CustomMapLambdaServiceRoleDefaultPolicy983FDD4E", + "CustomMapLambdaServiceRole4EE7732C" + ] + }, + "CustomMap": { + "Type": "Custom::LambdaCallout", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomMapLambda51D5D430", + "Arn" + ] + }, + "mapName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "mapName" + }, + { + "Ref": "env" + } + ] + ] + }, + "mapStyle": { + "Ref": "mapStyle" + }, + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "env": { + "Ref": "env" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "MapPolicy": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "geo:GetMapStyleDescriptor", + "geo:GetMapGlyphs", + "geo:GetMapSprites", + "geo:GetMapTile" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "CustomMap", + "MapArn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": { + "Fn::Join": [ + "", + [ + { + "Fn::Join": [ + "-", + [ + { + "Ref": "mapName" + }, + { + "Ref": "env" + } + ] + ] + }, + "Policy" + ] + ] + }, + "Roles": [ + { + "Ref": "authRoleName" + }, + { + "Ref": "unauthRoleName" + }, + { + "Fn::Join": [ + "-", + [ + { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "storeLocatorAdminGroupRole" + ] + ] + } + ] + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Fn::GetAtt": [ + "CustomMap", + "MapName" + ] + } + }, + "Style": { + "Value": { + "Ref": "mapStyle" + } + }, + "Region": { + "Value": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + } + }, + "Arn": { + "Value": { + "Fn::GetAtt": [ + "CustomMap", + "MapArn" + ] + } + } + }, + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"geo-Map\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/geo/storeLocatorSearch/storeLocatorSearch-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/geo/storeLocatorSearch/storeLocatorSearch-cloudformation-template.json new file mode 100644 index 00000000000..1ef40f17717 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/geo/storeLocatorSearch/storeLocatorSearch-cloudformation-template.json @@ -0,0 +1,348 @@ +{ + "Mappings": { + "RegionMapping": { + "us-east-1": { + "locationServiceRegion": "us-east-1" + }, + "us-east-2": { + "locationServiceRegion": "us-east-2" + }, + "us-west-2": { + "locationServiceRegion": "us-west-2" + }, + "ap-southeast-1": { + "locationServiceRegion": "ap-southeast-1" + }, + "ap-southeast-2": { + "locationServiceRegion": "ap-southeast-2" + }, + "ap-northeast-1": { + "locationServiceRegion": "ap-northeast-1" + }, + "eu-central-1": { + "locationServiceRegion": "eu-central-1" + }, + "eu-north-1": { + "locationServiceRegion": "eu-north-1" + }, + "eu-west-1": { + "locationServiceRegion": "eu-west-1" + }, + "sa-east-1": { + "locationServiceRegion": "us-east-1" + }, + "ca-central-1": { + "locationServiceRegion": "us-east-1" + }, + "us-west-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-north-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-northwest-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-south-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-3": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-2": { + "locationServiceRegion": "us-west-2" + }, + "eu-west-2": { + "locationServiceRegion": "eu-west-1" + }, + "eu-west-3": { + "locationServiceRegion": "eu-west-1" + }, + "me-south-1": { + "locationServiceRegion": "ap-southeast-1" + } + } + }, + "Parameters": { + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Type": "String" + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Type": "String" + }, + "authRoleName": { + "Type": "String" + }, + "unauthRoleName": { + "Type": "String" + }, + "indexName": { + "Type": "String" + }, + "dataProvider": { + "Type": "String" + }, + "dataSourceIntendedUse": { + "Type": "String" + }, + "env": { + "Type": "String" + }, + "isDefault": { + "Type": "String" + } + }, + "Resources": { + "CustomPlaceIndexLambdaServiceRoleFD2F3C9D": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "CustomPlaceIndexLambdaServiceRoleDefaultPolicy818068B1": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "geo:CreatePlaceIndex", + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "geo:UpdatePlaceIndex", + "geo:DeletePlaceIndex" + ], + "Effect": "Allow", + "Resource": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:place-index/${indexName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "indexName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "indexName" + }, + { + "Ref": "env" + } + ] + ] + } + } + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "CustomPlaceIndexLambdaServiceRoleDefaultPolicy818068B1", + "Roles": [ + { + "Ref": "CustomPlaceIndexLambdaServiceRoleFD2F3C9D" + } + ] + } + }, + "CustomPlaceIndexLambda79813BB9": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "const response = require('cfn-response');\nconst { LocationClient, CreatePlaceIndexCommand, DeletePlaceIndexCommand, UpdatePlaceIndexCommand } = require('@aws-sdk/client-location');\nexports.handler = async function (event, context) {\n try {\n console.log('REQUEST RECEIVED:' + JSON.stringify(event));\n const pricingPlan = 'RequestBasedUsage';\n if (event.RequestType === 'Create') {\n const params = {\n IndexName: event.ResourceProperties.indexName,\n DataSource: event.ResourceProperties.dataSource,\n DataSourceConfiguration: {\n IntendedUse: event.ResourceProperties.dataSourceIntendedUse,\n },\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new CreatePlaceIndexCommand(params));\n console.log('create resource response data' + JSON.stringify(res));\n if (res.IndexName && res.IndexArn) {\n event.PhysicalResourceId = res.IndexName;\n await response.send(event, context, response.SUCCESS, res, params.IndexName);\n } else {\n await response.send(event, context, response.FAILED, res, params.IndexName);\n }\n }\n if (event.RequestType === 'Update') {\n const params = {\n IndexName: event.ResourceProperties.indexName,\n DataSourceConfiguration: {\n IntendedUse: event.ResourceProperties.dataSourceIntendedUse,\n },\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new UpdatePlaceIndexCommand(params));\n console.log('update resource response data' + JSON.stringify(res));\n if (res.IndexName && res.IndexArn) {\n event.PhysicalResourceId = res.IndexName;\n await response.send(event, context, response.SUCCESS, res, params.IndexName);\n } else {\n await response.send(event, context, response.FAILED, res, params.IndexName);\n }\n }\n if (event.RequestType === 'Delete') {\n const params = {\n IndexName: event.ResourceProperties.indexName,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new DeletePlaceIndexCommand(params));\n event.PhysicalResourceId = event.ResourceProperties.indexName;\n console.log('delete resource response data' + JSON.stringify(res));\n await response.send(event, context, response.SUCCESS, res, params.IndexName);\n }\n } catch (err) {\n console.log(err.stack);\n const res = { Error: err };\n await response.send(event, context, response.FAILED, res, event.ResourceProperties.indexName);\n throw err;\n }\n};\n" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "CustomPlaceIndexLambdaServiceRoleFD2F3C9D", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 300 + }, + "DependsOn": [ + "CustomPlaceIndexLambdaServiceRoleDefaultPolicy818068B1", + "CustomPlaceIndexLambdaServiceRoleFD2F3C9D" + ] + }, + "CustomPlaceIndex": { + "Type": "Custom::LambdaCallout", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomPlaceIndexLambda79813BB9", + "Arn" + ] + }, + "indexName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "indexName" + }, + { + "Ref": "env" + } + ] + ] + }, + "dataSource": { + "Ref": "dataProvider" + }, + "dataSourceIntendedUse": { + "Ref": "dataSourceIntendedUse" + }, + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "env": { + "Ref": "env" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "PlaceIndexPolicy": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "geo:SearchPlaceIndexForPosition", + "geo:SearchPlaceIndexForText", + "geo:SearchPlaceIndexForSuggestions", + "geo:GetPlace" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "CustomPlaceIndex", + "IndexArn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": { + "Fn::Join": [ + "", + [ + { + "Fn::Join": [ + "-", + [ + { + "Ref": "indexName" + }, + { + "Ref": "env" + } + ] + ] + }, + "Policy" + ] + ] + }, + "Roles": [ + { + "Ref": "authRoleName" + }, + { + "Ref": "unauthRoleName" + }, + { + "Fn::Join": [ + "-", + [ + { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "storeLocatorAdminGroupRole" + ] + ] + } + ] + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Fn::GetAtt": [ + "CustomPlaceIndex", + "IndexName" + ] + } + }, + "Region": { + "Value": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + } + }, + "Arn": { + "Value": { + "Fn::GetAtt": [ + "CustomPlaceIndex", + "IndexArn" + ] + } + } + }, + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"geo-PlaceIndex\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/root-cloudformation-stack.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/root-cloudformation-stack.json new file mode 100644 index 00000000000..1b8df321c23 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/awscloudformation/build/root-cloudformation-stack.json @@ -0,0 +1,653 @@ +{ + "Description": "Root Stack for AWS Amplify CLI", + "AWSTemplateFormatVersion": "2010-09-09", + "Parameters": { + "DeploymentBucketName": { + "Type": "String", + "Default": "DeploymentBucket", + "Description": "Name of the common deployment bucket provided by the parent stack" + }, + "AuthRoleName": { + "Type": "String", + "Default": "AuthRoleName", + "Description": "Name of the common deployment bucket provided by the parent stack" + }, + "UnauthRoleName": { + "Type": "String", + "Default": "UnAuthRoleName", + "Description": "Name of the common deployment bucket provided by the parent stack" + } + }, + "Outputs": { + "Region": { + "Description": "CloudFormation provider root stack Region", + "Value": { + "Ref": "AWS::Region" + }, + "Export": { + "Name": { + "Fn::Sub": "${AWS::StackName}-Region" + } + } + }, + "StackName": { + "Description": "CloudFormation provider root stack ID", + "Value": { + "Ref": "AWS::StackName" + }, + "Export": { + "Name": { + "Fn::Sub": "${AWS::StackName}-StackName" + } + } + }, + "StackId": { + "Description": "CloudFormation provider root stack name", + "Value": { + "Ref": "AWS::StackId" + }, + "Export": { + "Name": { + "Fn::Sub": "${AWS::StackName}-StackId" + } + } + }, + "AuthRoleArn": { + "Value": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + } + }, + "UnauthRoleArn": { + "Value": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + } + }, + "DeploymentBucketName": { + "Description": "CloudFormation provider root stack deployment bucket name", + "Value": { + "Ref": "DeploymentBucketName" + }, + "Export": { + "Name": { + "Fn::Sub": "${AWS::StackName}-DeploymentBucketName" + } + } + }, + "AuthRoleName": { + "Value": { + "Ref": "AuthRole" + } + }, + "UnauthRoleName": { + "Value": { + "Ref": "UnauthRole" + } + } + }, + "Resources": { + "DeploymentBucket": { + "Type": "AWS::S3::Bucket", + "Properties": { + "BucketName": { + "Ref": "DeploymentBucketName" + }, + "BucketEncryption": { + "ServerSideEncryptionConfiguration": [ + { + "ServerSideEncryptionByDefault": { + "SSEAlgorithm": "AES256" + } + } + ] + } + }, + "UpdateReplacePolicy": "Retain", + "DeletionPolicy": "Retain" + }, + "DeploymentBucketBlockHTTP": { + "Type": "AWS::S3::BucketPolicy", + "Properties": { + "Bucket": { + "Ref": "DeploymentBucketName" + }, + "PolicyDocument": { + "Statement": [ + { + "Action": "s3:*", + "Effect": "Deny", + "Principal": "*", + "Resource": [ + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "DeploymentBucketName" + }, + "/*" + ] + ] + }, + { + "Fn::Join": [ + "", + [ + "arn:aws:s3:::", + { + "Ref": "DeploymentBucketName" + } + ] + ] + } + ], + "Condition": { + "Bool": { + "aws:SecureTransport": false + } + } + } + ] + } + } + }, + "AuthRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "", + "Effect": "Deny", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + }, + "Action": "sts:AssumeRoleWithWebIdentity" + } + ] + }, + "RoleName": { + "Ref": "AuthRoleName" + } + } + }, + "UnauthRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "", + "Effect": "Deny", + "Principal": { + "Federated": "cognito-identity.amazonaws.com" + }, + "Action": "sts:AssumeRoleWithWebIdentity" + } + ] + }, + "RoleName": { + "Ref": "UnauthRoleName" + } + } + }, + "AuthTriggerCustomLambdaStack": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json", + "Parameters": { + "env": "main", + "userpoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "userpoolArn": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolArn" + ] + }, + "functionstorelocator41a9495f41a9495fPostConfirmationLambdaExecutionRole": { + "Fn::GetAtt": [ + "functionstorelocator41a9495f41a9495fPostConfirmation", + "Outputs.LambdaExecutionRoleArn" + ] + }, + "functionstorelocator41a9495f41a9495fPostConfirmationArn": { + "Fn::GetAtt": [ + "functionstorelocator41a9495f41a9495fPostConfirmation", + "Outputs.Arn" + ] + }, + "functionstorelocator41a9495f41a9495fPostConfirmationName": { + "Fn::GetAtt": [ + "functionstorelocator41a9495f41a9495fPostConfirmation", + "Outputs.Name" + ] + } + } + }, + "DependsOn": [ + "authstorelocator41a9495f41a9495f", + "functionstorelocator41a9495f41a9495fPostConfirmation" + ] + }, + "authuserPoolGroups": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/userPoolGroups-cloudformation-template.json", + "Parameters": { + "AuthRoleArn": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + }, + "UnauthRoleArn": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "authstorelocator41a9495f41a9495fAppClientIDWeb": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.AppClientIDWeb" + ] + }, + "authstorelocator41a9495f41a9495fAppClientID": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.AppClientID" + ] + }, + "authstorelocator41a9495f41a9495fIdentityPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.IdentityPoolId" + ] + }, + "env": "main" + } + } + }, + "authstorelocator41a9495f41a9495f": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/storelocator41a9495f41a9495f-cloudformation-template.json", + "Parameters": { + "identityPoolName": "storelocator41a9495f_identitypool_41a9495f", + "allowUnauthenticatedIdentities": true, + "resourceNameTruncated": "storel41a9495f", + "userPoolName": "storelocator41a9495f_userpool_41a9495f", + "autoVerifiedAttributes": "email", + "mfaConfiguration": "OFF", + "mfaTypes": "SMS Text Message", + "smsAuthenticationMessage": "Your authentication code is {####}", + "smsVerificationMessage": "Your verification code is {####}", + "emailVerificationSubject": "Your verification code", + "emailVerificationMessage": "Your verification code is {####}", + "defaultPasswordPolicy": false, + "passwordPolicyMinLength": 8, + "passwordPolicyCharacters": "", + "requiredAttributes": "email", + "aliasAttributes": "", + "userpoolClientGenerateSecret": false, + "userpoolClientRefreshTokenValidity": "100", + "userpoolClientWriteAttributes": "email", + "userpoolClientReadAttributes": "email", + "userpoolClientLambdaRole": "storel41a9495f_userpoolclient_lambda_role", + "userpoolClientSetAttributes": false, + "sharedId": "41a9495f", + "resourceName": "storelocator41a9495f41a9495f", + "authSelections": "identityPoolAndUserPool", + "useDefault": "manual", + "thirdPartyAuth": false, + "usernameAttributes": "email", + "userPoolGroups": true, + "adminQueries": false, + "triggers": "{\"PostConfirmation\":[\"add-to-group\"]}", + "hostedUI": false, + "userPoolGroupList": "storeLocatorAdmin", + "serviceName": "Cognito", + "usernameCaseSensitive": false, + "useEnabledMfas": true, + "authRoleArn": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + }, + "unauthRoleArn": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + }, + "breakCircularDependency": true, + "dependsOn": "[object Object]", + "permissions": "{\"policyName\":\"AddToGroupCognito\",\"trigger\":\"PostConfirmation\",\"effect\":\"Allow\",\"actions\":[\"cognito-idp:AdminAddUserToGroup\",\"cognito-idp:GetGroup\",\"cognito-idp:CreateGroup\"],\"resource\":{\"paramType\":\"!GetAtt\",\"keys\":[\"UserPool\",\"Arn\"]}}", + "authTriggerConnections": "{\"triggerType\":\"PostConfirmation\",\"lambdaFunctionName\":\"storelocator41a9495f41a9495fPostConfirmation\"}", + "env": "main" + } + } + }, + "functionstorelocator41a9495f41a9495fPostConfirmation": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/function/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json", + "Parameters": { + "modules": "add-to-group", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation", + "GROUP": "storeLocatorAdmin", + "deploymentBucketName": "amplify-storelocator-main-f9ca7-deployment", + "s3Key": "amplify-builds/storelocator41a9495f41a9495fPostConfirmation-6a6c746d4739755a384a-build.zip", + "env": "main" + } + } + }, + "geostoreLocatorMap": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorMap-cloudformation-template.json", + "Parameters": { + "authRoleName": { + "Ref": "AuthRoleName" + }, + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "mapName": "storeLocatorMap", + "mapStyle": "VectorEsriStreets", + "isDefault": true, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.storeLocatorAdminGroupRole" + ] + }, + "env": "main" + } + } + }, + "geostoreLocatorSearch": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorSearch-cloudformation-template.json", + "Parameters": { + "authRoleName": { + "Ref": "AuthRoleName" + }, + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "indexName": "storeLocatorSearch", + "dataProvider": "Here", + "dataSourceIntendedUse": "SingleUse", + "isDefault": true, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.storeLocatorAdminGroupRole" + ] + }, + "env": "main" + } + } + }, + "geostoreLocatorGeofence": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/geo/storeLocatorGeofence-cloudformation-template.json", + "Parameters": { + "collectionName": "storeLocatorGeofence", + "isDefault": true, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.UserPoolId" + ] + }, + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Fn::GetAtt": [ + "authuserPoolGroups", + "Outputs.storeLocatorAdminGroupRole" + ] + }, + "env": "main" + } + } + }, + "UpdateRolesWithIDPFunction": { + "DependsOn": [ + "AuthRole", + "UnauthRole", + "authstorelocator41a9495f41a9495f" + ], + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": { + "Fn::Join": [ + "\n", + [ + "const response = require('cfn-response');", + "const { IAMClient, GetRoleCommand, UpdateAssumeRolePolicyCommand } = require('@aws-sdk/client-iam');", + "exports.handler = function(event, context) {", + " // Don't return promise, response.send() marks context as done internally", + " const ignoredPromise = handleEvent(event, context)", + "};", + "async function handleEvent(event, context) {", + " try {", + " let authRoleName = event.ResourceProperties.authRoleName;", + " let unauthRoleName = event.ResourceProperties.unauthRoleName;", + " let idpId = event.ResourceProperties.idpId;", + " let authParamsJson = {", + " 'Version': '2012-10-17',", + " 'Statement': [{", + " 'Effect': 'Allow',", + " 'Principal': {'Federated': 'cognito-identity.amazonaws.com'},", + " 'Action': 'sts:AssumeRoleWithWebIdentity',", + " 'Condition': {", + " 'StringEquals': {'cognito-identity.amazonaws.com:aud': idpId},", + " 'ForAnyValue:StringLike': {'cognito-identity.amazonaws.com:amr': 'authenticated'}", + " }", + " }]", + " };", + " let unauthParamsJson = {", + " 'Version': '2012-10-17',", + " 'Statement': [{", + " 'Effect': 'Allow',", + " 'Principal': {'Federated': 'cognito-identity.amazonaws.com'},", + " 'Action': 'sts:AssumeRoleWithWebIdentity',", + " 'Condition': {", + " 'StringEquals': {'cognito-identity.amazonaws.com:aud': idpId},", + " 'ForAnyValue:StringLike': {'cognito-identity.amazonaws.com:amr': 'unauthenticated'}", + " }", + " }]", + " };", + " if (event.RequestType === 'Delete') {", + " try {", + " delete authParamsJson.Statement[0].Condition;", + " delete unauthParamsJson.Statement[0].Condition;", + " authParamsJson.Statement[0].Effect = 'Deny'", + " unauthParamsJson.Statement[0].Effect = 'Deny'", + " let authParams = {PolicyDocument: JSON.stringify(authParamsJson), RoleName: authRoleName};", + " let unauthParams = {PolicyDocument: JSON.stringify(unauthParamsJson), RoleName: unauthRoleName};", + " const iam = new IAMClient({region: event.ResourceProperties.region});", + " let res = await Promise.all([", + " iam.send(new GetRoleCommand({RoleName: authParams.RoleName})),", + " iam.send(new GetRoleCommand({RoleName: unauthParams.RoleName}))", + " ]);", + " res = await Promise.all([", + " iam.send(new UpdateAssumeRolePolicyCommand(authParams)),", + " iam.send(new UpdateAssumeRolePolicyCommand(unauthParams))", + " ]);", + " response.send(event, context, response.SUCCESS, {});", + " } catch (err) {", + " console.log(err.stack);", + " response.send(event, context, response.SUCCESS, {Error: err});", + " }", + " } else if (event.RequestType === 'Update' || event.RequestType === 'Create') {", + " const iam = new IAMClient({region: event.ResourceProperties.region});", + " let authParams = {PolicyDocument: JSON.stringify(authParamsJson), RoleName: authRoleName};", + " let unauthParams = {PolicyDocument: JSON.stringify(unauthParamsJson), RoleName: unauthRoleName};", + " const res = await Promise.all([", + " iam.send(new UpdateAssumeRolePolicyCommand(authParams)),", + " iam.send(new UpdateAssumeRolePolicyCommand(unauthParams))", + " ]);", + " response.send(event, context, response.SUCCESS, {});", + " }", + " } catch (err) {", + " console.log(err.stack);", + " response.send(event, context, response.FAILED, {Error: err});", + " }", + "};" + ] + ] + } + }, + "Handler": "index.handler", + "Runtime": "nodejs22.x", + "Timeout": 300, + "Role": { + "Fn::GetAtt": [ + "UpdateRolesWithIDPFunctionRole", + "Arn" + ] + } + } + }, + "UpdateRolesWithIDPFunctionOutputs": { + "Type": "Custom::LambdaCallout", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "UpdateRolesWithIDPFunction", + "Arn" + ] + }, + "region": { + "Ref": "AWS::Region" + }, + "idpId": { + "Fn::GetAtt": [ + "authstorelocator41a9495f41a9495f", + "Outputs.IdentityPoolId" + ] + }, + "authRoleName": { + "Ref": "AuthRole" + }, + "unauthRoleName": { + "Ref": "UnauthRole" + } + } + }, + "UpdateRolesWithIDPFunctionRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "RoleName": { + "Fn::Join": [ + "", + [ + { + "Ref": "AuthRole" + }, + "-idp" + ] + ] + }, + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": [ + "lambda.amazonaws.com" + ] + }, + "Action": [ + "sts:AssumeRole" + ] + } + ] + }, + "Policies": [ + { + "PolicyName": "UpdateRolesWithIDPFunctionPolicy", + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Resource": "arn:aws:logs:*:*:*" + }, + { + "Effect": "Allow", + "Action": [ + "iam:UpdateAssumeRolePolicy", + "iam:GetRole" + ], + "Resource": { + "Fn::GetAtt": [ + "AuthRole", + "Arn" + ] + } + }, + { + "Effect": "Allow", + "Action": [ + "iam:UpdateAssumeRolePolicy", + "iam:GetRole" + ], + "Resource": { + "Fn::GetAtt": [ + "UnauthRole", + "Arn" + ] + } + } + ] + } + } + ] + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/backend-config.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/backend-config.json new file mode 100644 index 00000000000..6b7a962cd2d --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/backend-config.json @@ -0,0 +1,160 @@ +{ + "auth": { + "storelocator41a9495f41a9495f": { + "customAuth": false, + "dependsOn": [ + { + "attributes": [ + "Arn", + "Name" + ], + "category": "function", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation", + "triggerProvider": "Cognito" + } + ], + "frontendAuthConfig": { + "mfaConfiguration": "OFF", + "mfaTypes": [ + "SMS" + ], + "passwordProtectionSettings": { + "passwordPolicyCharacters": [], + "passwordPolicyMinLength": 8 + }, + "signupAttributes": [ + "EMAIL" + ], + "socialProviders": [], + "usernameAttributes": [ + "EMAIL" + ], + "verificationMechanisms": [ + "EMAIL" + ] + }, + "providerPlugin": "awscloudformation", + "service": "Cognito" + }, + "userPoolGroups": { + "dependsOn": [ + { + "attributes": [ + "UserPoolId", + "AppClientIDWeb", + "AppClientID", + "IdentityPoolId" + ], + "category": "auth", + "resourceName": "storelocator41a9495f41a9495f" + } + ], + "providerPlugin": "awscloudformation", + "service": "Cognito-UserPool-Groups" + } + }, + "function": { + "storelocator41a9495f41a9495fPostConfirmation": { + "build": true, + "providerPlugin": "awscloudformation", + "service": "Lambda" + } + }, + "geo": { + "storeLocatorGeofence": { + "accessType": "CognitoGroups", + "dependsOn": [ + { + "attributes": [ + "UserPoolId" + ], + "category": "auth", + "resourceName": "storelocator41a9495f41a9495f" + }, + { + "attributes": [ + "storeLocatorAdminGroupRole" + ], + "category": "auth", + "resourceName": "userPoolGroups" + } + ], + "isDefault": true, + "providerPlugin": "awscloudformation", + "service": "GeofenceCollection" + }, + "storeLocatorMap": { + "accessType": "AuthorizedAndGuestUsers", + "dependsOn": [ + { + "attributes": [ + "UserPoolId" + ], + "category": "auth", + "resourceName": "storelocator41a9495f41a9495f" + }, + { + "attributes": [ + "storeLocatorAdminGroupRole" + ], + "category": "auth", + "resourceName": "userPoolGroups" + } + ], + "isDefault": true, + "mapStyle": "VectorEsriStreets", + "providerPlugin": "awscloudformation", + "service": "Map" + }, + "storeLocatorSearch": { + "accessType": "AuthorizedAndGuestUsers", + "dataProvider": "HERE", + "dataSourceIntendedUse": "SingleUse", + "dependsOn": [ + { + "attributes": [ + "UserPoolId" + ], + "category": "auth", + "resourceName": "storelocator41a9495f41a9495f" + }, + { + "attributes": [ + "storeLocatorAdminGroupRole" + ], + "category": "auth", + "resourceName": "userPoolGroups" + } + ], + "isDefault": true, + "providerPlugin": "awscloudformation", + "service": "PlaceIndex" + } + }, + "parameters": { + "AMPLIFY_function_storelocator41a9495f41a9495fPostConfirmation_GROUP": { + "usedBy": [ + { + "category": "function", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation" + } + ] + }, + "AMPLIFY_function_storelocator41a9495f41a9495fPostConfirmation_deploymentBucketName": { + "usedBy": [ + { + "category": "function", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation" + } + ] + }, + "AMPLIFY_function_storelocator41a9495f41a9495fPostConfirmation_s3Key": { + "usedBy": [ + { + "category": "function", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation" + } + ] + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/amplify.state b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/amplify.state new file mode 100644 index 00000000000..0c3efe04706 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/amplify.state @@ -0,0 +1,6 @@ +{ + "pluginId": "amplify-nodejs-function-runtime-provider", + "functionRuntime": "nodejs", + "useLegacyBuild": true, + "defaultEditorFile": "src/index.js" +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/custom-policies.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/custom-policies.json new file mode 100644 index 00000000000..528c94f2f26 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/custom-policies.json @@ -0,0 +1,6 @@ +[ + { + "Action": [], + "Resource": [] + } +] \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/function-parameters.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/function-parameters.json new file mode 100644 index 00000000000..4c07c063c1d --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/function-parameters.json @@ -0,0 +1,16 @@ +{ + "trigger": true, + "modules": [ + "add-to-group" + ], + "parentResource": "storelocator41a9495f41a9495f", + "functionName": "storelocator41a9495f41a9495fPostConfirmation", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation", + "parentStack": "auth", + "triggerEnvs": "[]", + "triggerDir": "/snapshot/amplify-cli/build/node_modules/@aws-amplify/amplify-category-auth/provider-utils/awscloudformation/triggers/PostConfirmation", + "triggerTemplate": "PostConfirmation.json.ejs", + "triggerEventPath": "PostConfirmation.event.json", + "roleName": "storelocator41a9495f41a9495fPostConfirmation", + "skipEdit": true +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/parameters.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/parameters.json new file mode 100644 index 00000000000..82c0ad73bb2 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/parameters.json @@ -0,0 +1,4 @@ +{ + "modules": "add-to-group", + "resourceName": "storelocator41a9495f41a9495fPostConfirmation" +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/add-to-group.js b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/add-to-group.js new file mode 100644 index 00000000000..b8920ac2104 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/add-to-group.js @@ -0,0 +1,37 @@ +const { + CognitoIdentityProviderClient, + AdminAddUserToGroupCommand, + GetGroupCommand, + CreateGroupCommand, +} = require('@aws-sdk/client-cognito-identity-provider'); + +const cognitoIdentityServiceProvider = new CognitoIdentityProviderClient({}); + +/** + * @type {import('@types/aws-lambda').PostConfirmationTriggerHandler} + */ +exports.handler = async (event) => { + const groupParams = { + GroupName: process.env.GROUP, + UserPoolId: event.userPoolId, + }; + const addUserParams = { + GroupName: process.env.GROUP, + UserPoolId: event.userPoolId, + Username: event.userName, + }; + /** + * Check if the group exists; if it doesn't, create it. + */ + try { + await cognitoIdentityServiceProvider.send(new GetGroupCommand(groupParams)); + } catch (e) { + await cognitoIdentityServiceProvider.send(new CreateGroupCommand(groupParams)); + } + /** + * Then, add the user to the group. + */ + await cognitoIdentityServiceProvider.send(new AdminAddUserToGroupCommand(addUserParams)); + + return event; +}; diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/event.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/event.json new file mode 100644 index 00000000000..5eafe06ea53 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/event.json @@ -0,0 +1,7 @@ +{ + "request": { + "userPoolId": "testID", + "userName": "testUser" + }, + "response": {} +} diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/index.js b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/index.js new file mode 100644 index 00000000000..876a0cedec6 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/index.js @@ -0,0 +1,33 @@ +/** + * @fileoverview + * + * This CloudFormation Trigger creates a handler which awaits the other handlers + * specified in the `MODULES` env var, located at `./${MODULE}`. + */ + +/** + * The names of modules to load are stored as a comma-delimited string in the + * `MODULES` env var. + */ +const moduleNames = process.env.MODULES.split(','); +/** + * The array of imported modules. + */ +const modules = moduleNames.map((name) => require(`./${name}`)); + +/** + * This async handler iterates over the given modules and awaits them. + * + * @see https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html#nodejs-handler-async + * @type {import('@types/aws-lambda').APIGatewayProxyHandler} + * + */ +exports.handler = async (event, context) => { + /** + * Instead of naively iterating over all handlers, run them concurrently with + * `await Promise.all(...)`. This would otherwise just be determined by the + * order of names in the `MODULES` var. + */ + await Promise.all(modules.map((module) => module.handler(event, context))); + return event; +}; diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/package.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/package.json new file mode 100644 index 00000000000..97ed774298a --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/package.json @@ -0,0 +1,13 @@ +{ + "name": "storelocator41a9495f41a9495fPostConfirmation", + "version": "2.0.0", + "description": "Lambda function generated by Amplify", + "main": "index.js", + "license": "Apache-2.0", + "dependencies": { + "axios": "latest" + }, + "devDependencies": { + "@types/aws-lambda": "^8.10.92" + } +} diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/yarn.lock b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/yarn.lock new file mode 100644 index 00000000000..74757081d71 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/src/yarn.lock @@ -0,0 +1,169 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@types/aws-lambda@^8.10.92": + version "8.10.161" + resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.161.tgz#36d95723ec46d3d555bf0684f83cf4d4369a28ad" + integrity sha512-rUYdp+MQwSFocxIOcSsYSF3YYYC/uUpMbCY/mbO21vGqfrEYvNSoPyKYDj6RhXXpPfS0KstW9RwG3qXh9sL7FQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +axios@latest: + version "1.13.6" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.6.tgz#c3f92da917dc209a15dd29936d20d5089b6b6c98" + integrity sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ== + dependencies: + follow-redirects "^1.15.11" + form-data "^4.0.5" + proxy-from-env "^1.1.0" + +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +follow-redirects@^1.15.11: + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== + +form-data@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.12" + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +get-intrinsic@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json new file mode 100644 index 00000000000..192bbea9292 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/function/storelocator41a9495f41a9495fPostConfirmation/storelocator41a9495f41a9495fPostConfirmation-cloudformation-template.json @@ -0,0 +1,235 @@ +{ + "AWSTemplateFormatVersion": "2010-09-09", + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Parameters": { + "GROUP": { + "Type": "String", + "Default": "" + }, + "modules": { + "Type": "String", + "Default": "", + "Description": "Comma-delimited list of modules to be executed by a lambda trigger. Sent to resource as an env variable." + }, + "resourceName": { + "Type": "String", + "Default": "" + }, + "trigger": { + "Type": "String", + "Default": "true" + }, + "functionName": { + "Type": "String", + "Default": "" + }, + "roleName": { + "Type": "String", + "Default": "" + }, + "parentResource": { + "Type": "String", + "Default": "" + }, + "parentStack": { + "Type": "String", + "Default": "" + }, + "env": { + "Type": "String" + }, + "deploymentBucketName": { + "Type": "String" + }, + "s3Key": { + "Type": "String" + } + }, + "Conditions": { + "ShouldNotCreateEnvResources": { + "Fn::Equals": [ + { + "Ref": "env" + }, + "NONE" + ] + } + }, + "Resources": { + "LambdaFunction": { + "Type": "AWS::Lambda::Function", + "Metadata": { + "aws:asset:path": "./src", + "aws:asset:property": "Code" + }, + "Properties": { + "Handler": "index.handler", + "FunctionName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "storelocator41a9495f41a9495fPostConfirmation", + { + "Fn::Join": [ + "", + [ + "storelocator41a9495f41a9495fPostConfirmation", + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "Environment": { + "Variables": { + "ENV": { + "Ref": "env" + }, + "MODULES": { + "Ref": "modules" + }, + "REGION": { + "Ref": "AWS::Region" + }, + "GROUP": { + "Ref": "GROUP" + } + } + }, + "Role": { + "Fn::GetAtt": [ + "LambdaExecutionRole", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 25, + "Code": { + "S3Bucket": { + "Ref": "deploymentBucketName" + }, + "S3Key": { + "Ref": "s3Key" + } + } + } + }, + "LambdaExecutionRole": { + "Type": "AWS::IAM::Role", + "Properties": { + "RoleName": { + "Fn::If": [ + "ShouldNotCreateEnvResources", + "storelocator41a9495f41a9495fPostConfirmation", + { + "Fn::Join": [ + "", + [ + "storelocator41a9495f41a9495fPostConfirmation", + "-", + { + "Ref": "env" + } + ] + ] + } + ] + }, + "AssumeRolePolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": [ + "lambda.amazonaws.com" + ] + }, + "Action": [ + "sts:AssumeRole" + ] + } + ] + } + } + }, + "lambdaexecutionpolicy": { + "DependsOn": [ + "LambdaExecutionRole" + ], + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyName": "lambda-execution-policy", + "Roles": [ + { + "Ref": "LambdaExecutionRole" + } + ], + "PolicyDocument": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "logs:CreateLogGroup", + "logs:CreateLogStream", + "logs:PutLogEvents" + ], + "Resource": { + "Fn::Sub": [ + "arn:aws:logs:${region}:${account}:log-group:/aws/lambda/${lambda}:log-stream:*", + { + "region": { + "Ref": "AWS::Region" + }, + "account": { + "Ref": "AWS::AccountId" + }, + "lambda": { + "Ref": "LambdaFunction" + } + } + ] + } + } + ] + } + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Ref": "LambdaFunction" + } + }, + "Arn": { + "Value": { + "Fn::GetAtt": [ + "LambdaFunction", + "Arn" + ] + } + }, + "LambdaExecutionRole": { + "Value": { + "Ref": "LambdaExecutionRole" + } + }, + "LambdaExecutionRoleArn": { + "Value": { + "Fn::GetAtt": [ + "LambdaExecutionRole", + "Arn" + ] + } + }, + "Region": { + "Value": { + "Ref": "AWS::Region" + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorGeofence/cli-inputs.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorGeofence/cli-inputs.json new file mode 100644 index 00000000000..3bb50128864 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorGeofence/cli-inputs.json @@ -0,0 +1,10 @@ +{ + "groupPermissions": { + "storeLocatorAdmin": [ + "Read geofence", + "Create/Update geofence", + "Delete geofence", + "List geofences" + ] + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorGeofence/parameters.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorGeofence/parameters.json new file mode 100644 index 00000000000..7ae714ed5ee --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorGeofence/parameters.json @@ -0,0 +1,4 @@ +{ + "collectionName": "storeLocatorGeofence", + "isDefault": true +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorGeofence/storeLocatorGeofence-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorGeofence/storeLocatorGeofence-cloudformation-template.json new file mode 100644 index 00000000000..17020d54719 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorGeofence/storeLocatorGeofence-cloudformation-template.json @@ -0,0 +1,364 @@ +{ + "Mappings": { + "RegionMapping": { + "us-east-1": { + "locationServiceRegion": "us-east-1" + }, + "us-east-2": { + "locationServiceRegion": "us-east-2" + }, + "us-west-2": { + "locationServiceRegion": "us-west-2" + }, + "ap-southeast-1": { + "locationServiceRegion": "ap-southeast-1" + }, + "ap-southeast-2": { + "locationServiceRegion": "ap-southeast-2" + }, + "ap-northeast-1": { + "locationServiceRegion": "ap-northeast-1" + }, + "eu-central-1": { + "locationServiceRegion": "eu-central-1" + }, + "eu-north-1": { + "locationServiceRegion": "eu-north-1" + }, + "eu-west-1": { + "locationServiceRegion": "eu-west-1" + }, + "sa-east-1": { + "locationServiceRegion": "us-east-1" + }, + "ca-central-1": { + "locationServiceRegion": "us-east-1" + }, + "us-west-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-north-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-northwest-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-south-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-3": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-2": { + "locationServiceRegion": "us-west-2" + }, + "eu-west-2": { + "locationServiceRegion": "eu-west-1" + }, + "eu-west-3": { + "locationServiceRegion": "eu-west-1" + }, + "me-south-1": { + "locationServiceRegion": "ap-southeast-1" + } + } + }, + "Parameters": { + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Type": "String" + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Type": "String" + }, + "collectionName": { + "Type": "String" + }, + "env": { + "Type": "String" + }, + "isDefault": { + "Type": "String" + } + }, + "Resources": { + "CustomGeofenceCollectionLambdaServiceRole9040D551": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "CustomGeofenceCollectionLambdaServiceRoleDefaultPolicy0A18B369": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "geo:CreateGeofenceCollection", + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "geo:UpdateGeofenceCollection", + "geo:DeleteGeofenceCollection" + ], + "Effect": "Allow", + "Resource": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:geofence-collection/${collectionName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "collectionName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "collectionName" + }, + { + "Ref": "env" + } + ] + ] + } + } + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "CustomGeofenceCollectionLambdaServiceRoleDefaultPolicy0A18B369", + "Roles": [ + { + "Ref": "CustomGeofenceCollectionLambdaServiceRole9040D551" + } + ] + } + }, + "CustomGeofenceCollectionLambdaCA3D002B": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "const response = require('cfn-response');\nconst {\n LocationClient,\n CreateGeofenceCollectionCommand,\n DeleteGeofenceCollectionCommand,\n UpdateGeofenceCollectionCommand,\n} = require('@aws-sdk/client-location');\nexports.handler = async function (event, context) {\n try {\n console.log('REQUEST RECEIVED:' + JSON.stringify(event));\n const pricingPlan = 'RequestBasedUsage';\n if (event.RequestType === 'Create') {\n const params = {\n CollectionName: event.ResourceProperties.collectionName,\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new CreateGeofenceCollectionCommand(params));\n console.log('create resource response data' + JSON.stringify(res));\n if (res.CollectionName && res.CollectionArn) {\n await response.send(event, context, response.SUCCESS, res, params.CollectionName);\n } else {\n await response.send(event, context, response.FAILED, res, params.CollectionName);\n }\n }\n if (event.RequestType === 'Update') {\n const params = {\n CollectionName: event.ResourceProperties.collectionName,\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new UpdateGeofenceCollectionCommand(params));\n console.log('update resource response data' + JSON.stringify(res));\n if (res.CollectionName) {\n await response.send(event, context, response.SUCCESS, res, params.CollectionName);\n } else {\n await response.send(event, context, response.FAILED, res, params.CollectionName);\n }\n }\n if (event.RequestType === 'Delete') {\n const params = {\n CollectionName: event.ResourceProperties.collectionName,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new DeleteGeofenceCollectionCommand(params));\n console.log('delete resource response data' + JSON.stringify(res));\n await response.send(event, context, response.SUCCESS, res, params.CollectionName);\n }\n } catch (err) {\n console.log(err.stack);\n const res = { Error: err };\n await response.send(event, context, response.FAILED, res, event.ResourceProperties.collectionName);\n throw err;\n }\n};\n" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "CustomGeofenceCollectionLambdaServiceRole9040D551", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 300 + }, + "DependsOn": [ + "CustomGeofenceCollectionLambdaServiceRoleDefaultPolicy0A18B369", + "CustomGeofenceCollectionLambdaServiceRole9040D551" + ] + }, + "CustomGeofenceCollection": { + "Type": "Custom::LambdaCallout", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomGeofenceCollectionLambdaCA3D002B", + "Arn" + ] + }, + "collectionName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "collectionName" + }, + { + "Ref": "env" + } + ] + ] + }, + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "env": { + "Ref": "env" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "storeLocatorAdminGeofenceCollectionPolicy": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "geo:GetGeofence", + "geo:PutGeofence", + "geo:BatchPutGeofence", + "geo:BatchDeleteGeofence", + "geo:ListGeofences" + ], + "Effect": "Allow", + "Resource": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:geofence-collection/${collectionName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "collectionName": { + "Fn::GetAtt": [ + "CustomGeofenceCollection", + "CollectionName" + ] + } + } + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": { + "Fn::Join": [ + "", + [ + "storeLocatorAdmin", + { + "Fn::Join": [ + "-", + [ + { + "Ref": "collectionName" + }, + { + "Ref": "env" + } + ] + ] + }, + "Policy" + ] + ] + }, + "Roles": [ + { + "Fn::Join": [ + "-", + [ + { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "storeLocatorAdminGroupRole" + ] + ] + } + ] + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Fn::GetAtt": [ + "CustomGeofenceCollection", + "CollectionName" + ] + } + }, + "Region": { + "Value": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + } + }, + "Arn": { + "Value": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:geofence-collection/${collectionName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "collectionName": { + "Fn::GetAtt": [ + "CustomGeofenceCollection", + "CollectionName" + ] + } + } + ] + } + } + }, + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"geo-GeofenceCollection\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorMap/cli-inputs.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorMap/cli-inputs.json new file mode 100644 index 00000000000..89c77968423 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorMap/cli-inputs.json @@ -0,0 +1,5 @@ +{ + "groupPermissions": [ + "storeLocatorAdmin" + ] +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorMap/parameters.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorMap/parameters.json new file mode 100644 index 00000000000..00f849451a2 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorMap/parameters.json @@ -0,0 +1,11 @@ +{ + "authRoleName": { + "Ref": "AuthRoleName" + }, + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "mapName": "storeLocatorMap", + "mapStyle": "VectorEsriStreets", + "isDefault": true +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorMap/storeLocatorMap-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorMap/storeLocatorMap-cloudformation-template.json new file mode 100644 index 00000000000..bf53b69ff23 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorMap/storeLocatorMap-cloudformation-template.json @@ -0,0 +1,347 @@ +{ + "Mappings": { + "RegionMapping": { + "us-east-1": { + "locationServiceRegion": "us-east-1" + }, + "us-east-2": { + "locationServiceRegion": "us-east-2" + }, + "us-west-2": { + "locationServiceRegion": "us-west-2" + }, + "ap-southeast-1": { + "locationServiceRegion": "ap-southeast-1" + }, + "ap-southeast-2": { + "locationServiceRegion": "ap-southeast-2" + }, + "ap-northeast-1": { + "locationServiceRegion": "ap-northeast-1" + }, + "eu-central-1": { + "locationServiceRegion": "eu-central-1" + }, + "eu-north-1": { + "locationServiceRegion": "eu-north-1" + }, + "eu-west-1": { + "locationServiceRegion": "eu-west-1" + }, + "sa-east-1": { + "locationServiceRegion": "us-east-1" + }, + "ca-central-1": { + "locationServiceRegion": "us-east-1" + }, + "us-west-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-north-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-northwest-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-south-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-3": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-2": { + "locationServiceRegion": "us-west-2" + }, + "eu-west-2": { + "locationServiceRegion": "eu-west-1" + }, + "eu-west-3": { + "locationServiceRegion": "eu-west-1" + }, + "me-south-1": { + "locationServiceRegion": "ap-southeast-1" + } + } + }, + "Parameters": { + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Type": "String" + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Type": "String" + }, + "authRoleName": { + "Type": "String" + }, + "unauthRoleName": { + "Type": "String" + }, + "mapName": { + "Type": "String" + }, + "mapStyle": { + "Type": "String" + }, + "env": { + "Type": "String" + }, + "isDefault": { + "Type": "String" + } + }, + "Resources": { + "CustomMapLambdaServiceRole4EE7732C": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "CustomMapLambdaServiceRoleDefaultPolicy983FDD4E": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "geo:CreateMap", + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "geo:UpdateMap", + "geo:DeleteMap" + ], + "Effect": "Allow", + "Resource": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:map/${mapName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "mapName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "mapName" + }, + { + "Ref": "env" + } + ] + ] + } + } + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "CustomMapLambdaServiceRoleDefaultPolicy983FDD4E", + "Roles": [ + { + "Ref": "CustomMapLambdaServiceRole4EE7732C" + } + ] + } + }, + "CustomMapLambda51D5D430": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "const response = require('cfn-response');\nconst { LocationClient, CreateMapCommand, DeleteMapCommand, UpdateMapCommand } = require('@aws-sdk/client-location');\nexports.handler = async function (event, context) {\n try {\n console.log('REQUEST RECEIVED:' + JSON.stringify(event));\n const pricingPlan = 'RequestBasedUsage';\n if (event.RequestType === 'Create') {\n let params = {\n MapName: event.ResourceProperties.mapName,\n Configuration: {\n Style: event.ResourceProperties.mapStyle,\n },\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new CreateMapCommand(params));\n console.log('create resource response data' + JSON.stringify(res));\n if (res.MapName && res.MapArn) {\n await response.send(event, context, response.SUCCESS, res, params.MapName);\n } else {\n await response.send(event, context, response.FAILED, res, params.MapName);\n }\n }\n if (event.RequestType === 'Update') {\n let params = {\n MapName: event.ResourceProperties.mapName,\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new UpdateMapCommand(params));\n console.log('update resource response data' + JSON.stringify(res));\n if (res.MapName && res.MapArn) {\n await response.send(event, context, response.SUCCESS, res, params.MapName);\n } else {\n await response.send(event, context, response.FAILED, res, params.MapName);\n }\n }\n if (event.RequestType === 'Delete') {\n let params = {\n MapName: event.ResourceProperties.mapName,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new DeleteMapCommand(params));\n console.log('delete resource response data' + JSON.stringify(res));\n await response.send(event, context, response.SUCCESS, res, params.MapName);\n }\n } catch (err) {\n console.log(err.stack);\n const res = { Error: err };\n await response.send(event, context, response.FAILED, res, event.ResourceProperties.mapName);\n throw err;\n }\n};\n" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "CustomMapLambdaServiceRole4EE7732C", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 300 + }, + "DependsOn": [ + "CustomMapLambdaServiceRoleDefaultPolicy983FDD4E", + "CustomMapLambdaServiceRole4EE7732C" + ] + }, + "CustomMap": { + "Type": "Custom::LambdaCallout", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomMapLambda51D5D430", + "Arn" + ] + }, + "mapName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "mapName" + }, + { + "Ref": "env" + } + ] + ] + }, + "mapStyle": { + "Ref": "mapStyle" + }, + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "env": { + "Ref": "env" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "MapPolicy": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "geo:GetMapStyleDescriptor", + "geo:GetMapGlyphs", + "geo:GetMapSprites", + "geo:GetMapTile" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "CustomMap", + "MapArn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": { + "Fn::Join": [ + "", + [ + { + "Fn::Join": [ + "-", + [ + { + "Ref": "mapName" + }, + { + "Ref": "env" + } + ] + ] + }, + "Policy" + ] + ] + }, + "Roles": [ + { + "Ref": "authRoleName" + }, + { + "Ref": "unauthRoleName" + }, + { + "Fn::Join": [ + "-", + [ + { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "storeLocatorAdminGroupRole" + ] + ] + } + ] + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Fn::GetAtt": [ + "CustomMap", + "MapName" + ] + } + }, + "Style": { + "Value": { + "Ref": "mapStyle" + } + }, + "Region": { + "Value": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + } + }, + "Arn": { + "Value": { + "Fn::GetAtt": [ + "CustomMap", + "MapArn" + ] + } + } + }, + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"geo-Map\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorSearch/cli-inputs.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorSearch/cli-inputs.json new file mode 100644 index 00000000000..89c77968423 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorSearch/cli-inputs.json @@ -0,0 +1,5 @@ +{ + "groupPermissions": [ + "storeLocatorAdmin" + ] +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorSearch/parameters.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorSearch/parameters.json new file mode 100644 index 00000000000..a1ac3acce3c --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorSearch/parameters.json @@ -0,0 +1,12 @@ +{ + "authRoleName": { + "Ref": "AuthRoleName" + }, + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "indexName": "storeLocatorSearch", + "dataProvider": "Here", + "dataSourceIntendedUse": "SingleUse", + "isDefault": true +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorSearch/storeLocatorSearch-cloudformation-template.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorSearch/storeLocatorSearch-cloudformation-template.json new file mode 100644 index 00000000000..1ef40f17717 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/geo/storeLocatorSearch/storeLocatorSearch-cloudformation-template.json @@ -0,0 +1,348 @@ +{ + "Mappings": { + "RegionMapping": { + "us-east-1": { + "locationServiceRegion": "us-east-1" + }, + "us-east-2": { + "locationServiceRegion": "us-east-2" + }, + "us-west-2": { + "locationServiceRegion": "us-west-2" + }, + "ap-southeast-1": { + "locationServiceRegion": "ap-southeast-1" + }, + "ap-southeast-2": { + "locationServiceRegion": "ap-southeast-2" + }, + "ap-northeast-1": { + "locationServiceRegion": "ap-northeast-1" + }, + "eu-central-1": { + "locationServiceRegion": "eu-central-1" + }, + "eu-north-1": { + "locationServiceRegion": "eu-north-1" + }, + "eu-west-1": { + "locationServiceRegion": "eu-west-1" + }, + "sa-east-1": { + "locationServiceRegion": "us-east-1" + }, + "ca-central-1": { + "locationServiceRegion": "us-east-1" + }, + "us-west-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-north-1": { + "locationServiceRegion": "us-west-2" + }, + "cn-northwest-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-south-1": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-3": { + "locationServiceRegion": "us-west-2" + }, + "ap-northeast-2": { + "locationServiceRegion": "us-west-2" + }, + "eu-west-2": { + "locationServiceRegion": "eu-west-1" + }, + "eu-west-3": { + "locationServiceRegion": "eu-west-1" + }, + "me-south-1": { + "locationServiceRegion": "ap-southeast-1" + } + } + }, + "Parameters": { + "authuserPoolGroupsstoreLocatorAdminGroupRole": { + "Type": "String" + }, + "authstorelocator41a9495f41a9495fUserPoolId": { + "Type": "String" + }, + "authRoleName": { + "Type": "String" + }, + "unauthRoleName": { + "Type": "String" + }, + "indexName": { + "Type": "String" + }, + "dataProvider": { + "Type": "String" + }, + "dataSourceIntendedUse": { + "Type": "String" + }, + "env": { + "Type": "String" + }, + "isDefault": { + "Type": "String" + } + }, + "Resources": { + "CustomPlaceIndexLambdaServiceRoleFD2F3C9D": { + "Type": "AWS::IAM::Role", + "Properties": { + "AssumeRolePolicyDocument": { + "Statement": [ + { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": { + "Service": "lambda.amazonaws.com" + } + } + ], + "Version": "2012-10-17" + }, + "ManagedPolicyArns": [ + { + "Fn::Join": [ + "", + [ + "arn:", + { + "Ref": "AWS::Partition" + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ] + ] + } + ] + } + }, + "CustomPlaceIndexLambdaServiceRoleDefaultPolicy818068B1": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": "geo:CreatePlaceIndex", + "Effect": "Allow", + "Resource": "*" + }, + { + "Action": [ + "geo:UpdatePlaceIndex", + "geo:DeletePlaceIndex" + ], + "Effect": "Allow", + "Resource": { + "Fn::Sub": [ + "arn:aws:geo:${region}:${account}:place-index/${indexName}", + { + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "account": { + "Ref": "AWS::AccountId" + }, + "indexName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "indexName" + }, + { + "Ref": "env" + } + ] + ] + } + } + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": "CustomPlaceIndexLambdaServiceRoleDefaultPolicy818068B1", + "Roles": [ + { + "Ref": "CustomPlaceIndexLambdaServiceRoleFD2F3C9D" + } + ] + } + }, + "CustomPlaceIndexLambda79813BB9": { + "Type": "AWS::Lambda::Function", + "Properties": { + "Code": { + "ZipFile": "const response = require('cfn-response');\nconst { LocationClient, CreatePlaceIndexCommand, DeletePlaceIndexCommand, UpdatePlaceIndexCommand } = require('@aws-sdk/client-location');\nexports.handler = async function (event, context) {\n try {\n console.log('REQUEST RECEIVED:' + JSON.stringify(event));\n const pricingPlan = 'RequestBasedUsage';\n if (event.RequestType === 'Create') {\n const params = {\n IndexName: event.ResourceProperties.indexName,\n DataSource: event.ResourceProperties.dataSource,\n DataSourceConfiguration: {\n IntendedUse: event.ResourceProperties.dataSourceIntendedUse,\n },\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new CreatePlaceIndexCommand(params));\n console.log('create resource response data' + JSON.stringify(res));\n if (res.IndexName && res.IndexArn) {\n event.PhysicalResourceId = res.IndexName;\n await response.send(event, context, response.SUCCESS, res, params.IndexName);\n } else {\n await response.send(event, context, response.FAILED, res, params.IndexName);\n }\n }\n if (event.RequestType === 'Update') {\n const params = {\n IndexName: event.ResourceProperties.indexName,\n DataSourceConfiguration: {\n IntendedUse: event.ResourceProperties.dataSourceIntendedUse,\n },\n PricingPlan: pricingPlan,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new UpdatePlaceIndexCommand(params));\n console.log('update resource response data' + JSON.stringify(res));\n if (res.IndexName && res.IndexArn) {\n event.PhysicalResourceId = res.IndexName;\n await response.send(event, context, response.SUCCESS, res, params.IndexName);\n } else {\n await response.send(event, context, response.FAILED, res, params.IndexName);\n }\n }\n if (event.RequestType === 'Delete') {\n const params = {\n IndexName: event.ResourceProperties.indexName,\n };\n const locationClient = new LocationClient({ region: event.ResourceProperties.region });\n const res = await locationClient.send(new DeletePlaceIndexCommand(params));\n event.PhysicalResourceId = event.ResourceProperties.indexName;\n console.log('delete resource response data' + JSON.stringify(res));\n await response.send(event, context, response.SUCCESS, res, params.IndexName);\n }\n } catch (err) {\n console.log(err.stack);\n const res = { Error: err };\n await response.send(event, context, response.FAILED, res, event.ResourceProperties.indexName);\n throw err;\n }\n};\n" + }, + "Handler": "index.handler", + "Role": { + "Fn::GetAtt": [ + "CustomPlaceIndexLambdaServiceRoleFD2F3C9D", + "Arn" + ] + }, + "Runtime": "nodejs22.x", + "Timeout": 300 + }, + "DependsOn": [ + "CustomPlaceIndexLambdaServiceRoleDefaultPolicy818068B1", + "CustomPlaceIndexLambdaServiceRoleFD2F3C9D" + ] + }, + "CustomPlaceIndex": { + "Type": "Custom::LambdaCallout", + "Properties": { + "ServiceToken": { + "Fn::GetAtt": [ + "CustomPlaceIndexLambda79813BB9", + "Arn" + ] + }, + "indexName": { + "Fn::Join": [ + "-", + [ + { + "Ref": "indexName" + }, + { + "Ref": "env" + } + ] + ] + }, + "dataSource": { + "Ref": "dataProvider" + }, + "dataSourceIntendedUse": { + "Ref": "dataSourceIntendedUse" + }, + "region": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + }, + "env": { + "Ref": "env" + } + }, + "UpdateReplacePolicy": "Delete", + "DeletionPolicy": "Delete" + }, + "PlaceIndexPolicy": { + "Type": "AWS::IAM::Policy", + "Properties": { + "PolicyDocument": { + "Statement": [ + { + "Action": [ + "geo:SearchPlaceIndexForPosition", + "geo:SearchPlaceIndexForText", + "geo:SearchPlaceIndexForSuggestions", + "geo:GetPlace" + ], + "Effect": "Allow", + "Resource": { + "Fn::GetAtt": [ + "CustomPlaceIndex", + "IndexArn" + ] + } + } + ], + "Version": "2012-10-17" + }, + "PolicyName": { + "Fn::Join": [ + "", + [ + { + "Fn::Join": [ + "-", + [ + { + "Ref": "indexName" + }, + { + "Ref": "env" + } + ] + ] + }, + "Policy" + ] + ] + }, + "Roles": [ + { + "Ref": "authRoleName" + }, + { + "Ref": "unauthRoleName" + }, + { + "Fn::Join": [ + "-", + [ + { + "Ref": "authstorelocator41a9495f41a9495fUserPoolId" + }, + "storeLocatorAdminGroupRole" + ] + ] + } + ] + } + } + }, + "Outputs": { + "Name": { + "Value": { + "Fn::GetAtt": [ + "CustomPlaceIndex", + "IndexName" + ] + } + }, + "Region": { + "Value": { + "Fn::FindInMap": [ + "RegionMapping", + { + "Ref": "AWS::Region" + }, + "locationServiceRegion" + ] + } + }, + "Arn": { + "Value": { + "Fn::GetAtt": [ + "CustomPlaceIndex", + "IndexArn" + ] + } + } + }, + "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"geo-PlaceIndex\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/tags.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/tags.json new file mode 100644 index 00000000000..b9321d71b83 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/tags.json @@ -0,0 +1,10 @@ +[ + { + "Key": "user:Stack", + "Value": "{project-env}" + }, + { + "Key": "user:Application", + "Value": "{project-name}" + } +] \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/types/amplify-dependent-resources-ref.d.ts b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/types/amplify-dependent-resources-ref.d.ts new file mode 100644 index 00000000000..3e359cb4006 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/backend/types/amplify-dependent-resources-ref.d.ts @@ -0,0 +1,43 @@ +export type AmplifyDependentResourcesAttributes = { + "auth": { + "storelocator41a9495f41a9495f": { + "AppClientID": "string", + "AppClientIDWeb": "string", + "IdentityPoolId": "string", + "IdentityPoolName": "string", + "UserPoolArn": "string", + "UserPoolId": "string", + "UserPoolName": "string" + }, + "userPoolGroups": { + "storeLocatorAdminGroupRole": "string" + } + }, + "function": { + "storelocator41a9495f41a9495fPostConfirmation": { + "Arn": "string", + "LambdaExecutionRole": "string", + "LambdaExecutionRoleArn": "string", + "Name": "string", + "Region": "string" + } + }, + "geo": { + "storeLocatorGeofence": { + "Arn": "string", + "Name": "string", + "Region": "string" + }, + "storeLocatorMap": { + "Arn": "string", + "Name": "string", + "Region": "string", + "Style": "string" + }, + "storeLocatorSearch": { + "Arn": "string", + "Name": "string", + "Region": "string" + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/cli.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/cli.json new file mode 100644 index 00000000000..11dc8ca0f7d --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/cli.json @@ -0,0 +1,65 @@ +{ + "features": { + "graphqltransformer": { + "addmissingownerfields": true, + "improvepluralization": false, + "validatetypenamereservedwords": true, + "useexperimentalpipelinedtransformer": true, + "enableiterativegsiupdates": true, + "secondarykeyasgsi": true, + "skipoverridemutationinputtypes": true, + "transformerversion": 2, + "suppressschemamigrationprompt": true, + "securityenhancementnotification": false, + "showfieldauthnotification": false, + "usesubusernamefordefaultidentityclaim": true, + "usefieldnameforprimarykeyconnectionfield": false, + "enableautoindexquerynames": true, + "respectprimarykeyattributesonconnectionfield": true, + "shoulddeepmergedirectiveconfigdefaults": false, + "populateownerfieldforstaticgroupauth": true, + "subscriptionsinheritprimaryauth": false, + "enablegen2migration": false + }, + "frontend-ios": { + "enablexcodeintegration": true + }, + "auth": { + "enablecaseinsensitivity": true, + "useinclusiveterminology": true, + "breakcirculardependency": true, + "forcealiasattributes": false, + "useenabledmfas": true + }, + "codegen": { + "useappsyncmodelgenplugin": true, + "usedocsgeneratorplugin": true, + "usetypesgeneratorplugin": true, + "cleangeneratedmodelsdirectory": true, + "retaincasestyle": true, + "addtimestampfields": true, + "handlelistnullabilitytransparently": true, + "emitauthprovider": true, + "generateindexrules": true, + "enabledartnullsafety": true, + "generatemodelsforlazyloadandcustomselectionset": false + }, + "appsync": { + "generategraphqlpermissions": true + }, + "latestregionsupport": { + "pinpoint": 1, + "translate": 1, + "transcribe": 1, + "rekognition": 1, + "textract": 1, + "comprehend": 1 + }, + "project": { + "overrides": true + } + }, + "debug": { + "shareProjectConfig": false + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/hooks/README.md b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/hooks/README.md new file mode 100644 index 00000000000..8fb601eaebe --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/hooks/README.md @@ -0,0 +1,7 @@ +# Command Hooks + +Command hooks can be used to run custom scripts upon Amplify CLI lifecycle events like pre-push, post-add-function, etc. + +To get started, add your script files based on the expected naming convention in this directory. + +Learn more about the script file naming convention, hook parameters, third party dependencies, and advanced configurations at https://docs.amplify.aws/cli/usage/command-hooks diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/team-provider-info.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/team-provider-info.json new file mode 100644 index 00000000000..5d3c96a9e20 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/amplify/team-provider-info.json @@ -0,0 +1,34 @@ +{ + "main": { + "awscloudformation": { + "AuthRoleName": "amplify-storelocator-main-f9ca7-authRole", + "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-storelocator-main-f9ca7-unauthRole", + "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-storelocator-main-f9ca7-authRole", + "Region": "us-east-1", + "DeploymentBucketName": "amplify-storelocator-main-f9ca7-deployment", + "UnauthRoleName": "amplify-storelocator-main-f9ca7-unauthRole", + "StackName": "amplify-storelocator-main-f9ca7", + "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-storelocator-main-f9ca7/06c2ecf0-279e-11f1-a161-0ea0286337e9", + "AmplifyAppId": "storelocator", + "AuthTriggerTemplateURL": "https://s3.amazonaws.com/amplify-storelocator-main-f9ca7-deployment/amplify-cfn-templates/auth/auth-trigger-cloudformation-template.json" + }, + "categories": { + "auth": { + "storelocator41a9495f41a9495f": {}, + "userPoolGroups": {} + }, + "function": { + "storelocator41a9495f41a9495fPostConfirmation": { + "GROUP": "storeLocatorAdmin", + "deploymentBucketName": "amplify-storelocator-main-f9ca7-deployment", + "s3Key": "amplify-builds/storelocator41a9495f41a9495fPostConfirmation-6a6c746d4739755a384a-build.zip" + } + }, + "geo": { + "storeLocatorMap": {}, + "storeLocatorSearch": {}, + "storeLocatorGeofence": {} + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/_snapshot.pre.generate/package.json b/amplify-migration-apps/store-locator/_snapshot.pre.generate/package.json new file mode 100644 index 00000000000..5f5b1dccd19 --- /dev/null +++ b/amplify-migration-apps/store-locator/_snapshot.pre.generate/package.json @@ -0,0 +1,36 @@ +{ + "name": "storelocator", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@aws-amplify/geo": "^3.0.92", + "@aws-amplify/ui-react": "^6.13.2", + "@aws-amplify/ui-react-geo": "^2.2.13", + "aws-amplify": "^6.16.0", + "maplibre-gl": "^2.4.0", + "maplibre-gl-js-amplify": "^4.0.2", + "react": "^19.2.0", + "react-dom": "^19.2.0" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@types/node": "^24.10.1", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "typescript": "~5.9.3", + "typescript-eslint": "^8.46.4", + "vite": "^7.2.4" + } +} diff --git a/amplify-migration-apps/store-locator/eslint.config.js b/amplify-migration-apps/store-locator/eslint.config.js new file mode 100644 index 00000000000..6f236359302 --- /dev/null +++ b/amplify-migration-apps/store-locator/eslint.config.js @@ -0,0 +1,18 @@ +import js from '@eslint/js'; +import globals from 'globals'; +import reactHooks from 'eslint-plugin-react-hooks'; +import reactRefresh from 'eslint-plugin-react-refresh'; +import tseslint from 'typescript-eslint'; +import { defineConfig, globalIgnores } from 'eslint/config'; + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [js.configs.recommended, tseslint.configs.recommended, reactHooks.configs.flat.recommended, reactRefresh.configs.vite], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]); diff --git a/amplify-migration-apps/store-locator/images/add-gen2-main-branch.png b/amplify-migration-apps/store-locator/images/add-gen2-main-branch.png new file mode 100644 index 0000000000000000000000000000000000000000..236c5d5a772182ecb2465f2f6e2f520d87c50cc3 GIT binary patch literal 58964 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
L?h+dn+csd)mpEW!T5p?mYK zyyRV_x$#s3NkC;M=pa|agy#Z!_MT)<)#2qAfgjfeTCuSX$a{IOqmm%fbaI6|X3GYL z*$4Gv53>00V&6d)`k0CV)6k)g!8$?u>%J3RbbSNpWj}xmH1sz-DMo=xPA!I$u z$6s8|yy3q7qDYbJ!kB>iZc78ixo9Unl9Xh@rO)ayE-$B3pr_mLcDv1#Rbj5I%jrvT zP?+CBX}lZ`X`^$OR5TPFa(!Ny5I)Df*DMD`Htq~ap9|Ft&+JzUQ$)Pd80U}l!!O@Y zCg`pwlGm>#tp@v*vf%TOGy}#Y&o=LZJ&!_?V`Is~k8CVl9J`0?Q?xVd6v#;sH~qPT zdkLk@Mn0cl`X8-swfAJ`;)R{&!`FoOYm$43V@xci?O%@$8mp9u!GZS8t?fiBT zhwm)lWt|?>?cU%m{iwbB;r`rHNesC!LIh0%H`E)`-XV47YzY}BI@k_=5D+GV+k2)* zYf&=tvL$0evIHrNTmz5&?pP_oy56j5R(@qg1jj;&IC#AVY!^A66S+I5ngw%9U5S_z zghH9!y)epKmLDp^r?pWVraotN%s-VdGAkk&Ytjx;lYRyy8$9gZzlH@#Ez=>nk|FK} z@5Ucp>C%Fl95%M+;n7m5+L;2a!}4OXV;j+<;aUraAT{QS;chk(_K;49r5@($*88Av zNQ-0W=4^$vP-dVAOR+I1DiAAZlAMtMEKCbiOseX7+)@`!|L zYUOTvTPq^!;Bn;1ZRoSOIjvX}JrW`i=}Y`@pEc8H*A$<^2CuWT_A2eS;QD-ZtEDlV zP0X6p_Hm{?18=GyHqa(2EZ~N>nDedO(czO#xe5kLa)~A1yEF>DYu-FRt6%{3YO={I z8pGEOcXZo+YtDdmVF6?-oYEgQKhoMx4H&J(D8o=C<*2R%5U(ucU#Wp&J`77+Fyg+u zwqcIGy2{x&0V9j?CH|SY0xvW1w$>c+ZSToCvmg(YO7Lo;*+gJ=xWJuZrJuj*5O#m#P#^YkX3zgckWRcBJ%9cVz>Ck9rx!T zoiP*f5{by+Ho1rBsf1TnefJ4r9tNy~gaA_Td_Dch`BekpAztjB+{@6b@KkeBYj9qn zN8h@YDvW9nzz9bSHy{Zt_*R)UpNPRykM*%ERU!Qke9UbHVZ37%HXLgy?V<-rmuS*S z=}Je=r#{CHuG~;XqRESyG}vO|jJYVItq^VH%wBDi1!lZb*7XRKk#R%kJ`EJXCd1QF z_t;i*Mh=<6Ox_Kd>yk-ank-3-6uGWU@K_8h<+8qf;5FuHG5JwnK+yY`1?&%^c}zo` z&tj=6qQgA=3vx?5u0|12>F0P;qPE2ZCE&#{TTHaDD0LKydc^A!XP(5G6pXMI9zNZa z+ZIT#RiZDlx~zg!9L2uzSYjS6{h;j?PiR@~wxyq1%6`fS2xOieFAB91x%3$L5}%Q~KW5vfp@`6#@^GQXD*xPfqLRGOx-#)9oF;5P9XA8Ff(;&8 zD#685Xm5is3G2T=0zEI;;A(@o^w%N*DWsShOuV)JEnX+PIYQPzCZN=Spx-m79L zp{84$X-E|?W_Vb-=C9=KARC8=0~|(uuR|7;8j8$;Wz%BW6{IT|k6%cI&tOak$+Pn^m*WWASpxbJt3q;gY^z5e!3?|o&+9(<{Uv-Hkl6}^7wTWjy{ zJbE1ylSsbwrKt7BIkKa*n2)YVtLELC$YGuREQ7*s$b zrQ4D$0g9;SG2{A0^7yU-w`!V zwlyfmlki*yq|ZnmrBC-A&S&u`aXtC6|K!vVZLGP-tf|xHja%)M*ysEGRNwfPaw*$I z|HSr@doJ%}UZFtnV^tukZ+PVR;+Q14O$9AAMMELJQ9^Ce2YFgl<@1`dQd3#kOBl4; zr+P)WSz%H3@jU2!T|sP(Dp!$|uhnjq^=nIhDL}2i)>%{<>n}8RKd8%qmYB zK}udET!YJGlb;hS#TMyg_(F>tb4Nq}t*`dqI!4zT z_laBheZdS8)BK(0yxyV=|-WgwJNADAN5}@n~lY%`4{SBL8(~rwhpJ42L+V zjH!OLuV34nnz})cezU`7qQ}-R+R;E6g@8*w21Uqu4_w`7?Hdmc!Ta#ys+#hNogK9R%@5cy&m)rL~MD zt|>|wUQ(y;iwgz&F8g)=g{iD;6|L*XrWUOI%}5@@ai}Z4OR8|MvXZ%ZHHJoh16l5^yYM}cUCj&Kuv?4DQjjmK zGGfR~3#E$z=Ck@PBB4}li!_Z`GNR6L${2iakg-6Ul1WNV!-_Y2nyPi9E>$GfybL+F z8ZR>4X2b?=J@__Zc8Rm;&DBTlcemT8P1i9FzMawgu`ts?n{aViPt0P~mPg-!?aHJi z{a&jFU4(y7O-u!-t65Y9LY;OF9!C9%J;a2PmvS-zxu>+zD{jwmflS_1smwYO>6-?IVIK9e=coeKoVFWh+^>I!kVg zP#~9h>jaTd3x%Wa!HuInY9W!F6G?(}VUa@?4WQ@8^nOhJd}vpu?o8E04*$)Zjzk|F z;~%jDDgKZBLGtB-Qprj2xrUH4AAl00D%B#8V{)Z~!bL!WPHnXw;ZgpD-r4aid}cpF zY*GbG4gOM1d3GgvK_xG**)e^m8H^-`uIKfO>x3HLmq8kEEArL1&(!>FcWWZzy_$WY z2m@8s!;ohY`Jrn_Egy+jMag>u23xk4nF5##po|y0i z%gL6l6|*PqsiL+Ul{Ujlg=KOF?Jdt2Nfy=Cks2+=Plh1Ncg%>ZduaKCkkhZ8-##De z)GGsok*p8yVy~O{rrcjJ$~rE)7NDn9E_L&PWYvq1%d3}_M$J?e5z#&y5iUg>x<*$P z%3G>%6V2gEt1Xd7ph>RZuM{wfTe;GpvcDF$FMr7dq!7*IG|^&EyJL*@YMD%0cz?NcpEZge*1iy znuhR4b)n@od>y!Dwk)6F3%q@=N$8E^Uu9xM!K6rmsawaXEYnXI%$!25Ptq2d?%jsX zHnP^rT6S&rGc+`o4l0yXD_w}3d3aPn?9bA%K%YDuN>+pWLPIL-EP39ohQ+xtj^8Z%3Sc= z1_LkYd_OxZE?kG}oP85~X7zmP2`tM%J)>y0kVuCWSnZxXDI!je-Nn362uG<4^BXFg zaG5@Fn|69g0iUCAx4B!};PoDhbPXV%N_;#Wi{*uH2Tm8d#gRcw#m7 z<&LPwt`L%W!=OY9RjZzv&*r~T#T6%8D~wMJaeIjL&a%H(~NLnd(1lg-wS|Dgt9 z{a_Py6`#;vdceqQ^Hdf~TI;}4T>J583|+D3r+LrSPX{+l{3%-KKR&15`B$4rIDLEZ zTfNr${Ad;<>(?N@W~75&-4={jwVAyp8_br5Lq^=l2MjuXiu>h}$23utF#V0~Hlzc)y`VdVC>-c%wm-UPP$Fd=Qj}f~zch z3&Nlr_TlbTkWX#TkH!q%H(4bLy(ztzsFJN*z@SXn20^?9Hu)%n;E*qL@Z>5oB%u{k zxDx#hZ~uxbb~LD`MZ-r zYp~A_7L@TFTsH%>E;x6iy9-&AyQ1*aR*H&bh{BBK*N8e6c z&_zPq)nsW0x)j?epk9r>e6KW8>fw_cViiZAVthR$P$IQUx=?jd;WZf+y=q_M5ufI^ zH}YOylcLurk%Oila|%^H9G*>2Y@a~|5I**)TzNYAf=h+7J?F<_;t?|Gn|J>ZFB)R& zH}nBidC$Vai)7w2Z&12+z^d!|8*13ezNjj|Xg-fegP!a}$oQKFN&S}+)h2jz@TWq! zB+p5^ed7@RLf?^6d=^Ia`>%Skt7EI$Ep418bkBUHJ~LPYEtGDcIT?P2y29nZ#uhoA?{5OgAOR z@^Yn2y$JCrr)CUavoePD6p>>D>1s=n&Zo6_5%rz6v7x)N`+4zN?Pi)1HeV@yx>NjZ z7nkf?L=#SAW84kJPt5vF~zt*ofRtjfx4m7b{|NinEkuZ7uH8r4t35O@m`{Uo1>m zW%G6CWUkC?#N1-Yk=j}s$%08JVZew_d>Uh-ee9vw%+7R5B77?ZXL2GhuRjh~>E8Zq znyzb>K=6Q1rueC1O0B1A?teGa-<0e!Q02<_Vzp*g77+oLzor^gYqUYoW`~ z%~;j=Txi$*muPCo`X3YbEy;zZcO5X$0(?*68>5L-6{z6D!;04!U@~c^UxKd+WNkP` zRTu#uwzL3`E#;?k@e2U{rC)#%9kH!_!h^10KOF!t8X(dBI!G-&Sb)Suz+$Szp0g-% z2K>SI?Je~LtHwZlb2=U8I*q_vOovHP%@p<=%-YY5@l2IdXsE!&ASi0jJf<}O^n%|h zpCe_j!5^wBr>W+Bd49wQq{S4-)Y-lZLDz^UCywzH&E|37Kx1{+m^h{;5^4i@4 z2HFotjs{_ydXy@yX#-gcTJY0UF0xEHAcq@Fm`JYHKE7g@n`zny<-Mm(Ae*xR1qMOC zxX6bf&{eJGHxFYoz4-POTwLB@j|#=fNtgfXB6S05?UR`)AU_jsjLV6^AOAOKDrCG8 z2b}nP*dSGta0<&3&5^d`@{9J{XwgfTU!FO_@a13!q5l&Yg<^D?0ghyY`NDteRQ(69 z5wLmj@()Q-=)}{ZrHvI?mHC(HPJliSXT~eaabQEj*WN@xj=l- zVRjs-sRQmN|ANciJp?F=;&m=id6QPLu?rjc zAy>KJmmpg8ONXfg3K;$cMf}Wa_-N*3vMvw(Bi|iW7<6*1{?&DG%J@BJ7?oZ-t^U}g zC~U;5wd{=??3Rz;P0Xz{)B#HW;gy1<^t<@WE%f}Mnz75&vf>7C^89PZWWKB0E2h~U zxGdyc8zuJ)T6t_-*clri5QBJ%~=ed^OU0tCRIg zokeNUXf(?a=;Cd=Eou*2U!x7^(`JXR_NYR4Ce0u|)9*pq=k}n$$P{}#@4&a5Yf&c2 znd50Vi0w@bt9Z5pf^Ar&W^1;Wk4uLkQ>{!Tno93L0YY6n24akWt0L{MJevr}y)94K z-9JZ73jdF3y$A$e{h0B+{lD;RCm#S}eY=^+NUcUte(NnDvyQ&b(n~Frjq+^SQA#lD z;=4uNB=c`B0Rcef__p()IJNjQil4H(4&w3eE&j=N&hIV$NkRSP0e)LCHMQ7pEB+6; z(f{Pb|8mrOaH9KNKwA0aavRdd7V(xY*4YK}it3UC=xQ3z_fSne#a{^-j%U7yI{p6D z|1HY@mhj)P`hStrZ*BUi?CG~Q{r_549>wg?qYbq+H@{@DPyem_akk7`ISY|jQMnc(4hcQ#6{4TMI$W|n_nM_b_uF}*9~Say z39YJ+mSQaD`DR=^eBKH(E`LZ#X_2X+d*%B;?)AE|uh%$e>A_L4MOqDWcs%2LZB+;L zWO^c({HwVm=-395Q}C&PbO=4)kI=_!FTb-hdhbezcItE-)#RMn>X_-6?{?1oA#Rs3 zf^q2CO3S$MEzOdweL}~O#XKJ^f!dO27OlT(u_)ovC;50@FNu;PL)dt+CCM_u@e}b2 z=OmGgALe1$1?J#q9WKn=KKV7U*=y(^T45){hgT>|gWC6;jgp2m>dEsl{(9oktbW4x zdHW6O$%}%HYkgWCcW%o&foV(XP>)rUL_jgW*fNx2ZanN-`0NongGs(S4dIVzs$F;Z z=s_N*D;2PHbv%H0T~yBF9TTOAh0rpMKUSs@<-K)}NT+T1 z-m7`TtCCwmXPz)#HVe4-{G9%ewLsq9R8mJGE_sv`BhlM855JuKB6Cmv!sD0=gRdhQ z8EyrvycB*&96!aFcLvp{@bhffoA9YCHD??Gjn^+-ef?^kIwCOo<&8Itv`+%^V(w*= zVIDn;x$q<;jgkBZ`IX?zkGc=fOv~Q0BCWi`_D1oebKaGLAk{~fAH#nN<`H`lkv`7) zDZa=a@uu|)N6{7Rx6eFu7L5qUhxN3ouXVoGI?~rua0M3r%5voQxsEuq_wC%et;g95 z&mVk{P&{WIk(o9A{7jyeri9`<{SdY%@tFlLNb`g=sg}5Ghy;UiZ(1_*t*A$Due{!U z7V>FiQESm{(Zp30esLmV^$GeZc_yj{&3h~2O3NkF=vOB9crPb$C`*05<#N04ZEXam z`KqauNtv!^5&a+~HZt-X^D7 z=9*fa3U-2SJg66&Ji8Ve-Lkcjx}LKycI0_PccgUmKql;?>=%~v*F@gZeiQn3_c6^c z%2!D|3Llu4uG58n`u<@0naQ290FUJTr2UL1_pD==tqt{0nk3TJ{8$Rs$aJ5Zak#p|G9P3=gd980x-mrdsugm@7ZV!i( z+;rpv8FjhXyS0z`bjme1Kg@Er^0L19Q1T)5mXb}nW>Ei~e82q5)&-TduCHAST+3Y3 zw*@iR@1#YPM1)+GV^*90*uj*1mo2Q|sasZgerkS5USfVzxvrk1-ecN0XF&t<|f&BdnM|7Ec&Q|(II6|O6W zL63u;1sMmGh6y|+Z#HYD3*!t^`|wjSSW!k%Pm%Zo7keaYJDd2!ig=QEH8yF@0IjQ9 zZ?v=vX*Fx}`92kVUdmy6K2hkU;HIo%-1(GK!9H=+v+9Lg0X$Aj%{LKuVMj+mlsYis zF?*IbMlIlvgRK0yKh9tLs&Z`WyOnm131GRRdM{sv)Z(Tj~D0 zi$C3Nxa}^wVtjfB`XYZ$WR7KuXXbuH^|ucc4tW=;^*{zeIiOhRp&8zUON}g!{Q3E-MZfl#(4afiUfL*uUY`3isH$nWcC;8KZoAh!*&@|+oQ;Q) zwUD)vxslyh+D>pxq}At}&BOd~E^?-I%oJ@F!!HX=75(aPE^+sp&z$?_B)YsA`>Iji zgx0*?NzjD?E>!F1Tmdn_4z5Ny?>Te3uI4cM)@l?xU;tw|@4=Uy#uRRRT)MEnzdU`uuAmi^i_k zECF5tg=hUqzg@g=QR{reB_VR-o8uIZN%iiiQ*HA03%VLCX7S*8Ug*lzn0Y9B*zf0F z+ItuKEdTzE$B&-+<(VEi5G4#Ods8IbNRZ;c2De#mT$4Y*6K`oXWFt7PGebDw)X|(VklB4l4U68aCy(X-qc6oNdArK zx30H6PZqxSe&@}gDNWlGY8B7t!)Q1^+I&BY`S9*Ti>8l_-O?SzRq14O^5=wv^uhZ) zH)csLYLAqTHrN<0vP-0q<#4NkJ7b={?Nxb?SS0Rw`B}r_>HI>`dXdIR@5s?|s%Wt2 z1yODnNf&>;NaIf9iLz&=oh^caws&j`2W7C+gKkAb`cRmkN8nI!O62#*RvP~?v+8`a zzL3uAsbia(TSBv>_^BOPU&Ipx57IxpDWQ#_M|#t5nd=M3u)%smjD|LcWG#>NJy$E|oly+3!jsBg=T`}Noz5yk+eS;j zHl#+b((+?RX^~s$?&OMhZrjavZ+1g=>b?AB_TfEiX-h)-IWA&qHZAsWHso=~;elVg zj+RT6gBwO>`D;fYH(3zF5-#XiY2{T;)6)5@U zae(b`U_|{<2VKo|tB}%h)5*G?x=L6schQ=kzcQiGw+sKCn3a4|s>4U*z^ci#W9A!+ zx|$-iK%)3~VrsADOlp8j;A)^SG)Tf*;5)q+UIKs6?>I@)7T%k<#BD3b@vJM#D{9iO zYI$JY_A9ov>_|GBFueDS(20>YI<6O`7nM5F-gn0tZFo2D$w}$@E+$<{^T6@$%*^I~ z>kfn3B7P!WeIxgA&V064gtc}%rwqm*=(XrvjojP|9CvNCuY8O-gF>BKU%ixhGn44! zf0}czcFjV0SGqCTvx$DMTLkB z*uF$`{tPwI1z_t8@RB-1^RMk^XC4xr`(yuEBBBs$qVxYaMiuxx`HKNwCu9EnJQo{G zL=60Q19*9SJp0e1uhM=z_s{LKj=*PVDzM|Sqr9FA z5fLTR$?J@Q`h#`g{6p57x~{q^%3`Kqd#+bzU=wpL5BopPLnPrL25j1!yS`%du(xw? z5%Z9|_s0=p!1l>*?t6@X9O7y#c~4j6IioDt*_=^`i-(Knp41gaMn(x|GYc{GC(r&d z9QaT2o|UVsqZl_g1OnlL@Nz0m z6LS|+XKP1SYp?_3$$4LyfZbdr@7+7O(7*ovoTs^m^}ny=;PQ{#0&bA|zR-}3s$;Q##c9|I-0Pj3A`mg3KK{$nq&&{9_ThWgh}TPt-*LXX zkjeNk^W8-8@WjMK&`MUclsiP)-Gtp;_+pr%V&UuJyob|Z3;*ttI>_F|M3SrHd-cXO zE?sHKqFYklL;hWsT>@FpB5~d+)}KQQ3M@fXHY0yEZsP0Rcna`}f4 zBVRn4`p6pvxBLrZt1exl?LRxq^V>Rc%_`#TS>i~ieo6k{ADj0Sm@y?|$mQQs!;^y_ zncli4Vil3Kn*0~Waso51A`<-zCP1C_x>3fI)~)+5jJ3IbO(gHak5|8Ib=Mew-o9|2 zjCv-|+v4}fJ`V?G%=w7yFPPomCVM(p_3>|$J&kw$+hk7}ZU4VD*&UDhF$W}z)c*QR zIe%S-qZtQ}e|R}=qxd$jvu4^BRH;qXzyd>7wl-N8KTw$Db^ck@5i?i)ewzoODTBAY zgC7OQmfQ)Us|R%m^hIcN%X-CjTuF1riEeClBR_1HD#Ync*Sn~4=hL9ST{h~DK%*j9 zMeVyp7v5ELE$XZ1@_1f|=$qYvKu+r>e;@$oxQlvtQ*zuEEj#ncAv$qqu6PIZcf`Uce%1t7<&VPc9PX=2+Nm!xxLs^)<$h)GS&E%iM(~C5}Od+S|$JGs0j3w|QKrSemtF8qg-cm`t|0vy{3FUVc5uQY(chF5O}-eeIM| zf4r)CS_C#ibxq{Q@olEKSIE$FWTJ2rHF3@g%{0%^P>N_lvz$g5SsS>v@zkdfhUkV} zQ2`Lg!SYa@TxC+Jr$YMKfM7}>Vp{dEV!h51YYci|I8Pg|mAwE+q5zhfgw*fi3})Vz zSZYduTaqop0(_<4jaWj9r#FHNZi!euR2X8VtXT~no8G^v#$Cd;j6BfaTde7i4JxNQ zdsFt&)Ju~*RnehaB1z6IifX5g+b=f(XrfHNw*kkB(b(OQ^zzYN5gjsgd$Ekbk`2&< z-<>;4O!{e&TI+&WJ>gYR#c_gGVH{ECGVjN=Ltd8~dHI#au%5vUh0<PM3PIF zD6sgK`k4WEm-@5c*Kq3P5v3blj7HRS#D2S?aN zkWv&m-F|4JOz6AEMgY)V$`shCzAlpFg&K^ze!2kk`cV_GMgkEtPwLt(P#Imvyj@PI zw$4o#!ujkvoQPkglX)?z@$2~w(OSv?Zp7_d48G&+u*|Pv?5E_#O4p!mKcG>A8q1Dt_OUc>2T zKw!Ryqa^id)l}deV9bF$s%haqN3E7+qbWv;T$3ip2PRco+7TgeNn>?%?H1og8%d5E z6X}xfJ|F>8AW34iornntbed^-3TKnu7=)o;>pC>Mg%vs#?}XpIdkx)1IePtc9h;(<2L@upwiAaj)%t9;xL61!dtC*PhQR zSSy&v*f1D6VbV+?hI)IR>{$dY#RR?IJujd27pwGv7s(?NNVsp?k8x2J7Q@wPeHx8< z?e=wUGCA_t^uwG8fzcnXRod5C+0`6N{|Xl1`HAi8o{1Djclvfo?io4_-Z4_@V&&Ri zBRrMBcaUt1EciMTya?b6Vb%7ON*$Ep6bWmzhpP<+9Xw6j&AIW*LxZKiKz{MthdqnQ z5hyuH@8+qyP0mBc)qTBXhBvrI%yaFt6ylhfhKh>Uv0&uf8#ZgC^xA~*(BAd?&zduf z4VrJPP<7+6^~=3wtt~VWIv)3`>W*6o&!7mrGyVuyc%65PgCBLoIp2;qFpsA&Ni7x% zKXLDa&1J2MbeLK#m__G&C|&hfLAIEE>h58Y3s>0c1e9AefwD_vs zd;ybNb5O8Q?Z*7rOtkbd$GFL$Ug~#a?`6Y>x#F_HWYI%t5AjLthK#cG#I{rad*bFd zBpnRV5;)E58DlpC(;Y1nOq7y#F&8V^o6xke0z=35=LGfhR28l5ehpzj-Bgpji9aNd zC`Hg;2Qir*?!3Fcu>dvAdKx}ow*HvpSz!XnTn6uorHX+)`e1wf%(;s#aca_3P`^R( zgCQ2LJq!(hr-;U;L77$dkn~1PQ~6+ro@}R z15cJav@%f#ia0P;uGA}Xb2TiGP3zrR)HQpbpv7Hy`c&#OH4um*$jrrFRQjUgXWGr~ z`E9tPCxjQ6F)*7x)?-EHmsH@~G*@L;$zOTX1=M?e3QZ`8q@)94u8Vri9^M+fp~9DZ zkPh+sQ00x?v1C(y&@H^YaU4?C=WvL6S1LDO*d~=K45k!c{o-cmsdb=u@h1G6jM!zj zPB$UWTFVf!m6??xXy-sqTz$0o#`bOAY3OlhuUW!v(R#I3QR}M zr-B+(iRonAX4Yci&Mh>)xL!8-?#g87<^a_v#l&UlBB0W1Oy}1 z>)T?kx;^hxAVY?x12voFTLq+&TDUHl?U0aHJ^u00dQ-I1i$3eCN=$A8 z6o`ZQv0?k}z*ra#sbLf+HUQwIn#0ME>Gdpl3xlamMjEIulKB~6vgb3zj6W!^m%!gV z8BJ6S2;45-KBV(_Qol3kE$9ZD)%AiBuOW-g1cQ7672|^XOw;2+7Z`kg@}rAdx?R;b z0l=y=Lvz&kyw%z=gJ#GWqQu4XV&+0PnNWJMwc$FHzcBsDVLLbSJI<&&R84xt$W^b{M(8tfwT4lYteX#-)8BW`;)o|zl%J)|OfD7h!eaeOorU2Z&o zju`VD<4&g?=H!pp>Sd-|2*684U_PgoWJ`fOHuEh_bB*@esYsw9^yQ#5NEar^*$C1b ze}huttjf+v@7h{;x0HHW>45Kon&iQ74Q@1b=5WnFuaC1&VW$*%q*)~swk;*TQVr76 zEmWly71JmN z{{kz`D(Br1%jjQ$N`dt8#}<7A;%tA2);WKz(nRju6|^@tNM9%C2W(H_v-5k8F3&8wD6tnPnQt#eK(bm7l1A9e4FuP%lClG~G*sab3Ao zh+pt_lLa~$Yn>c!@Hi*YAgk+Ub34~MG7Jz^-m2fgK(2paDRR@5W1`H5ws5Nm3m*F* z(Um_GI6)uY5O=M6-wx2Xh;G3xdkESdRWsj4vh@^tYHIam0YJR{n0o#h{1Q}Tv`{YW z2XgK~ni72Xe(ZPv30#@$f?%7MzsIJ~vP-vARS}{lb0`;zDzJ6UzkN~Hxz)XF5^no+ zOennN-E1Tl9}8=fKAz>@7%N3mfHJ>;jHVckB!BgwGT18H*E)D+BFg6GjZA90(w)IF z41BJ-^+%i7_q+MMLS<)(<5%NL3#mmG6VCJRDxam+f~C8U3z3cccUz%LRD1|c(Y2w| zxdd$eZG8J;>}L$kxSGWAk68E;Gf8gbXXvZo;p}!?&#Ts5Uc%8<^K0&lbJ`XAfCp77 zdCz^s;u(&A)jGCZ=zyWw>We?)cW{tc5MuH*i1MAF4oFa+yO&Q2v!hpkv_!M9r6!$N zh3(Hbt>64M^B$2biHxKZ7oxNp__Qqk{^FG=iRDIJyRt!E)6J`BpF?|}txm{>=Ne*T zaBQumJ5*^+ZL$l*yr(xrK_)cfgSstZCBK^XJ`0gwWAn_5V4ZuA3$>m}hm10-O3&?& zdt&?n)jGZyf0p>bbikLAm@LB!S3B&K=-Zw`?>76j7B-PcC(kCvQK5hJ4qxT$b5s=F zbf*rKE5Fe8lgB+ToTQ$8JVlmPVNjN5g+)*OL49o*ehGVh<42ZSd~tc~r0IZ`PK0HK z&zEI)LEnYGmaWbq32oIkkHWbTx|?JCZ1mnonEks4bp@4Ld*Tp$B&^wqMbmiT)k>9i z^gt{^&{hb15>b6(jwExCk~1xl>~+oG$!N2mu@~3)tVZr<#jb4~DuCcRmr}Cn#>{3& zrxA5vF0842hB?avie{v}#->O#y`-2J6Ve{!FPPbDI^R;Gk~-K^KKHFw$QQTM?HdK2 zV%*X9t%^6@Fx&Zv$%RVor87wE6Z}I8CPnbYJ}Wsah1%?=k1MRkKwJrwO+x&V@a^*) zSm}#KhXJr%H_!N0{7xoh%`eCq&QCbY=^O_SXL*+>Ab&-Ct=eDW{o6|g4hD7zr*Y?* zc-}r`{sdYaYw|k;zRMex3Pu>HLn+xVkVzfSR_OW`N4B3ORk5_C-kbE)C<4&0`H<&P z=xSN}D)EN_wdKaI%KY88>|-x)cBTr4*UqQiM;xw(?EgYBkld8>Kg91X)_)V@wHscK zMWnm8IXQiElKTLlUGX(PMlz}G;aJ>UB1p*CYqjT3^#-#bvAbAPM7DIZffy?;Tcaz= zwuBw(k+zGEi#CpCuINzrQCx=neBp%lodB@SH|oOD*wjV|13vnLVm0(}*<5v9^ZF~$ zeBl+Sjwc=DJEUyN_7cB{{X+xw3%YKtY`v zzsfbsPSA7r&q3f1&=th7YX%#;he^C;nz;jQ%e_Ja#c&>v^`E+Kosl!SP(L<==BoDx zKPaa!0V;*(;N%?fTRJ+1@efE_ z=zPD+IIRbGqw2T1GQM*#!SXn;(`;_7tZiJs-Vp><37Pn6EF!y^&4R zUqk5GF?#ULMscu&j(Q?Oh0xnx!kVu{q9)}IE~Da`jQHe)0_wC^Un1rR9aOVmE$YW|R7a<9|-oJEnU^zO% zdLAe`SZHcVU6G^1Mi<(jKu4EobpKA%rm!8_7e)GBe-5^-a%?}w4dtek>QnfEm-6PG zPqFQKY~;6aKm`gdhD}I6c{Q6y>RoWm&VIG4X3|hdmm+1+^9zR0ZyFo3}-24okF$3ly(g*81x)1c;XL{5D z04WRGN?0zE=VxN&}*6bi5sOxfWoOPpLWE$?J8-nTw7Q_jw-VEQp zXdJYBlE?jWv~IBl`S!M0H_qpy*4XQwAxz5L+nay9&)RGrx6DC~#9nlJsEOmsE_B?+ z?5I{*GJJR&zpD6HNedQ8KF-1=veps1v?PJWjcGfV>0i;KURXmC?oz6>*eyf-6LxUP zx%3fQaTKC0mNaN5#U@ZEl^vC-AA^Q_Dg%;Evz%I4?;OSH1N#-A2KZz6W2EY&*QD1* z*GWi@-(F72B9HV>_cKwL5MM(uV8NAc3P$?F{GK#;tyTjJyZr>zm$w@2R9Y@8m>wrY z4{iLKf_0!|@Y{E4mF%UU^4jsaPibuRH5TXdN}ZU@CS@49rh)Su6s2kjqB7Dmq&Qq| zur>5+^;cX9BWW+Lbl6tWzWQ+T;tt{Ae6r>0V=cG1AY1HE5EbZ-CI0Z+H@8jkg*0Cq z0E0@iKdA?#Q-+}wpChM|vW5GJy%!=CI0kAc1d~=Mq`ihxYq1NNNj6Qd^JF*vbd`ulnz&`Y%6W59CMh1;0kv{l7^Wv zvICZz&S$c$EaN&M5db+?n8$3A?l$-i1)tE$J6zdAoBkT4YoDz28(JAcQKo_ot%hR6 zF<0pORD_Lw#SRpQ^*j#<1S9cWl-7Ouj>scbKwu8u^tYm=b~OPc*{OfD1xZ-5JlwUPX@D93pmKrk;7M6)=&HdsI~I) zy3xyFg(VD7|4G=g%^x)IX?^!gwreMr$mmefl(8}H!X3YDvs$|lb`sn8dW6waA7!H> z>sI|30jDk^(Qa_JY?=v-e9>5S6i)Aid{yzTy5a?DhMm zKsD$->4!?Y+UJ#q9-nTDyW2@@%<`M-q|yRp@v*kt)ipYm6aiKM6Wvn^2&_~isn%!n z!(noL_MD*=0?ACz$ksH}b9#NuYGv;k`V#^i4)}S03TkKjZlA8$SDj^^6)P_ zdQxbM6PX1m_%d@ZaE3|u4Umj7BQHoF>xyk0brFmi3>-EHg;ccu(|4RENMV#vO5#E-- z_xZ)@l-7q%LqYc!U|a-=(uN~VS0KChDeHpn9HatyE`Mq8X(JmC1yIg0v$_VZKiCzS zuhF2%mgDc{bGfRl{qzTtRMNjE9WsWTrfG%xEKlmXL~3nywnF}E|Zlw>_5kZZawjKx0p|iBz=Sz1*I0AboFliWds?KDyhQ}P`Q1Zw#~24 zoKuQI#unY{71dKQdt7}&dSe~F0Nkcf{bXV?U<5&wdIcOG-A0iLE42MuI^w4-3@1?ol{h|uFdDmh`+EGYH|by&O-UVx`=nE9ESAn`Tfqry4>@7) zQ^EE3+=m?s%W*zWjm{B+SZ7uwL$Jb_k8$%Npiy+7sM#<-D3Hvn|6J09x;lfo^=Eu}Oou+Y=7KqTRg zKL65xDxQMn?W6rZAhjcaIvM@*^eQ~F{MYDtALs>qoGH&K%-|^dKE1J;+P#oEc<6GN zz8AVW(Ow!CMX*S9xW%b25Dkshk_K7}nS0lqaws&I<)&VaPz**LgFK$MY5JC zIvN+2n-+yqa`5SIUjiCTJ||mnAnaaA7X}0>o{4nr-I0V$>MnZwx-ZfE$+b2H5|Y0_ zk$b;F=&mhf;JcS@Ptbeb+Z{iQIr{Z&A=%P3(lnZ_v|D)C9n~;BVhQR1=u7-zJ;RnD zSo`5nWt`Mld}{%5{N&?FfCAXC?iRk1s|EnKY@Yn?*}1dNg3xdMZ z;F|Q=nkYx~Qzo>kPrbA%FZdoyr^D(UteP&?V#_V5rw#(5!}dLZoj|*QU?Ni=Hwiie zyM!+{>N6kv9$Q=>3nN-NZ6{}=CO43ry}ygtFSniU@K4tnOzlcf481^=gain)>29-F z{~Y01HDUaA&sxP^CZJkZI_p^CT48F;@j4UwFb4`rw7(#*@F@i$&U1iNdRuHu>hyd7 z!oYl}_IOmuG%>xJvrvs4z-%?kZP@9`zHUy83$A*@n4y8bqD#zH0l$B1NnFpP-5wH7 z1@fs{){b_q<3C~cALCI_AD~(}k^?0Au8TjVCjIauK4r680HqOGtyFT`lyFp$jlkHc z%oN^*#`h28IL`92G;_idNO4XVAe zrDLGJNspr4Q;T^Z>38H5f?{cq;yy@)y2CMMgZoiO3Ib(wIO4-7ka*b1od$42C*&)?2*sV6)1|{#pY0Z2T?^C&H*F4hQ0fBJHA0g`hV|#|>sTOd18Yxx?5d|ez4%UY>-RE- zo;##7eQMr`JM)2i#wRsd_QF#A9;cB3)1M#jY8B38l5~Zg+d~&VCjb;fk8@AX3=HJY z4sZ`8@S~$)m+17Z=Gbn@SlFC&TD>50X?GCY{au|d;bFcM;amHCBZW^()h89NWEO@9 z(S@|ErB90!xuBvin_lKS|1PJ)wUvKlk8jie)8U!J#;j5HGc8yy&cagLr*8PsS0TkS z^H}auk7UTCue8u&xys1cLTbn8gW#+CHD){ST+_rk8f+qHMGKbo$;TlEt|N{U<+#4C zBQ-K8_g(eIS5n718{YjYq@iUJlR7uf=gq%rV}cr`(L=*xd?`P z4rQB)?TP(5do<-UQDfg#hK#g(t8HE>(l0>$kC{d}tJIH<`nt6k*nxU3VINZ7i*i*U z$}KU-0Wxe7U#|v@6`-@CAjj$S<%`Ea`Qqx;B}?dDXuS5s$0C++F1Y+^WT!bXo2IMe zTu}`!CABT8sAk%E;~PJDV*gqN;nzlEU~~cy5nbH^v!cZwR8M$q>1N`mTg?_2T)^tc zS9KQ2CL)GTrfe`DSpRvyvE5oF1A=D_34cCLK=O#IA=Nu{Z(p-2PYK= zL$?)`jUAo)ild){TIodO55G*PdZYNe>tj|E>}*TQY-qi=Kb4IZu*WO!s?qo!u0VQb z0y8!oZrs=hlBt>T3MI5UXu|B5t5z6iY)tc{_v#HLjxrAcun?F_e)F4BX-jJ^zRqmg z6TwfsjI=cL`8sl7@@oqyT1NzuiGBv$Np{>Zcfx;rfn2F^4*Pu$0-fR;IiuoCidV zquK%ARsWwoPHVp8S`ZN(|9=7j(^NREkJv%RT8t06(1DntM$OQ1GMQ;WQu;e3SB~M397`X5u#2q$7Nh$3EYIMUekw>Zi^{VPY^+StmWk9AZ?U0Q|}L@ z#Gvik6G)oZxsg$j$(8GgAWzxtWj%V1BwZj8;m3eCWr&w4*tyW6l*-K2{)ZELJz1y_ zC!ZmH)5V{!%zf3)8G-9@uGxiwx4=6a9Z+eeXcyeoL>6|vw3H&N7uHHT7sMnk({oH# ztCWj94}XxhWxkCWfQUKK9uR-kdImw|;B3@5PTs^oI7FguVF;?~;Pt`Lp)`<thzSc$mNIC(#?OPiYI)HxF*YbAH8PE7F*NtDz=x1Hex`vo* z7w%hNQ4F;#gT}U1Vmmy(b$glNkf^m-n7PixNtceuYEqM8L8<(tg}>rv%hBbD0utJj z-h#4CYMSQt*_Ga#<>q%CV|EEZcTWTfH@w_9n(uBvV2VSMsy5=Fh26%d0#D4~M@wT5 zH;VifyR=%i{*9y=;GStJm;&BR7ux`Z0$r8EmDu=e#(u{=R-@Zc>;Q}7I#54uQ7p87 zp4-}@b&lAYz#Ob_T#M!R6!mvdfu<*b*e_naty|VQ>Aga&V~B%>p_VjiXSfdMwFUCK zYY$wQb*2~_2)p8IHz(q>G?>j&H3I@iaWw=#@9#`h+Q;b`F^w`_Xjb2}J}po++8SyT z_;O$bpzT<)GETdWmo$O4&%9;6RvWZmuAJRZ^VIUg&V>2^Pe($=3B#R8S6DLLC>s@8 zx90g}c^&YN^lJz`sWW?2GW;F%- z-!ZVS^WMhvl`hv$hq+E4Ar6-*!H69PADs2twCwx%Mw!w4?M@s^y0f+q;GUU$i;8&w z%@wkz>?{@mI?99vjR6#u8%Jv1A?|~{X7E@n+i=*_#=!x|RPLJwEh>4B zkVGzN18l9tR!6$Q++AP9bTM$I?W06vKgncW1SH}B4~>5iR+@?~y(J<1A2 zjvMAf-;)7u#6LB*djaYxqOI>#8wct2ZnUGL(7xB;2@2nTZM7rpK#7syJ0GWs~%Rqlpu{Z>311=+BFcg^Ba z#XTdLoL-?%0fB(TG~&9w_abGH`w;MNdhSqIq}n zMG+~VwYj4enq`+CKYuwr9^#*F&CMwG=oEP3a=^4Oj|jxPT@zoeFU_8qy-J%+r-0h+ zs$+QP$^`V*OZr*p~X^P-)`4Ye&7ssqJoiMf< z27r3z;H!7^ozay)^EFVjYllh09$7nWQ4~7;+ceI7Ziy7a#qR!!3=7*|d&>|f9o2(` zNxE~0+nO5?&r!_h@SPz8c6YRS$gs&4*Zbh{O#>iV(=l|z?;mX;4wP<5`5(DIZ>=IB zUOx3xQvs~HK=<_(`ugByFR_hE5aA53z=7SQ-Q@U_=>$%yg58zT8SgcqoxZi$n8#{8 z=C&kmNS9B~?N#V*I0|Tv5ST_N(gdU(pb}_ZaSM&&*WSLQ$+3eGq)qKQh z(lf}JWuMwyuwrWj^ef!7?(@zDZ_w{_!g{>kYxk5GrH)G$G&s_cWwWbg4=J;B_#F%k z^;nb*)|SbmOaZ#Mpo!wxdK14V{Un-PDy$T7BnBxyVTCF>_>?w}iticSF|9REyt8I| z?6L!2$uR|r%Za=^Wr{F>a2KaEe0jV92g|1P7Z1%0_rPmr^R+V$yvOB+r{Wg%2L zf{Vw84BHWEUcQvRxZP+>til+^gDdfEpgvdq%fLxX6QgB-Oz83*>O*D;RF+v`pT?rA z-CH4M8KG|N8*m5eABw(*UU7tQyM)eC^^e#OjTq#0~q^Obow#nRaya&%gNi( z?_1e;0V05Miv@`)rn0`{(kW<(NLD*7^~Ct-r364ewVYGZI7`a(JQ3*XpJ;dc>=U4f zPTb~PY4Ac^Ct(3&VW;g4|1(e|-3Fd{yD2*$c)9=HbL+F7UTsn04mX93AbOmZ;^V{T z-G@D)9`M60Cg8~d{X*1C^tci5G{dPghLb|U$Gay_sj2r>UFtu15Had`WX;Hl&Eo-S z0*{3VJ0NE!`9eeJ_rXB#u$cJ{+i9x{f6hYS1HenmD!|DCHh^NoZStaL{o5zS)Djjb zMMdYJz(sO;>a1tJ8XFjK_vLF~1kSbDl{%k|P;ps$;Az?1KUa}i6R^O?7t+-}(gTv%d1QM&x1Y(;aj6y65{hCNxg;QQ@3c7g z#Oxbqfv}!5et+sXQXN?A7i8YWMsc z>G!;~X%y5i6nLP_)EQ!1zbd`e!QVn#Asl&-(n&|cJ$!Gp()gi8ic`x5{Fyd239Xs= zg8~d{sL3x920di+suwFyp)B~llE*d1=h6XlLw5A+U>^TU-8=<6*Uv|mk+|JM59Gqa z#zrolW-)98-qA}p`rWym<9g?OGP?m?VUF<0FDR;XHBGG1(3V07&d%;%8-DZ3R_D(a zLi8Bn%fmM15*Ve@y?1+3M|S1o-s))AAoIisH*JugI=Xst59reqp7<{A^rXDttE@2T zJ8oivx^tYi{lYu4_D-7OvF?%R< z;_mTXDPKbB?eR5K>>=0B0&BZEvS>M@Bxbn_U;jbcih z>s!q1XFEpC5@KicxFe2tVEfFT)nA(sQ3yP7^A~Qp1XoYQybFpMTPpOl$Q}4uB|g_U zBu~v+x6=Ye!wjs)lq6lRe5<~!i?Z0HjA@>uf8=*73yp6tUEMzl@xYXQ-54Q8-{RtL zFX}@%$W=ybhj(k|rQR0DJUDVttG|tmKFD%Bs1C1+7|>a|RZMC8@wu?z@>P1AdHr#h zTo1T0hG4peXexY&xERGC_UU1R0!57R`6t)UKh?bDXM!qu`0n023OlQ7UtV6gPV&%w zy^5WU?ddfcOvC+#J!+iqf^s=_GPREN!CjjD)vfX6)sE%mWlNGHUdxt-w0ckHc0qfC zu!}n9J?~C2K7z$7Mr3q)n;4{PCOG*)F*yzCxLKG^PG;Plxe!qXPHG3Ob+tCE5|#!k30Y zK8h>yiNj)doF^E3dDVsNCmpa+p{@6YjVDGsY@UnBc2QI+>J*PK-bc_eIXMyA_bDbk zya%ZS(^Oi(SME+V=KL6sd;uzo4b2*?i>#5ZzWeoJ$wivKuu_aMJ!h$1*R_{j_XIli z6Wl{gkBcP-f(h2~F3%YBwK!+gZ&dNOLPL zN)mhFqn5y#Gv}{8BKplY)u#cUxH}Ur@K=v2f&1&<8V-DNhVw*Fi!01`fGn^D`nC1r z&Jz?Eb+C5vY(=SGLQcER*!)nj)>D0$gtTMg<3<@~bnH1Nxg2mJs{{LLwEe?)+gr|i zBfmY9KjyBQ-MASfK36=9S!IRNkLzx>%sTExTh2^q!?R71S4!U~VI zTf12E=WDHWJTjs_L!9g*j-aVF{H*fM|4~UzS$QQKZo&+E*LVM~SXn+74{j`ebL-t) z!lxHoH=MOX+N|&05p<93NJe%5zrNsUYCV}PlL9<6K$gMd861($(`>9dp|6$g*1mPl z&H6m8+2+daaqp5MQ0-9l^zm@8dhN4M$`03a<$hOl0C@#y7`;6Bmc9wtR{QhMCTB34 zcIg7|eYTtBM=Cw*inE$Jbrge~&Hr4S0zs_#@PhPkJF8yiyYU``{YS3I*MZ6iIy_u8 zzQ$M1jy;3MIpCHEC*=QOalSzI?s|UigC^W%_E+_^`6&u4j)>V?S`o(|gTRj+i9hg1 zBnb>a%4zGt{%Q3`^K!e+oAaHVC|7+&TCq) zUkB!KU^3(zWzJex+l^#Se-@IoVPftnrAKbc$g@l_UV;P&{gvBzludMo`2D>*6>5z# zZwf(=9@+Ha9pXTeesh5_s*N(&R?pi16%!ATKXaDs-cvpc=~W zL_kGBVge!{QcA;Ul@1B%FzA+=Fj7<`q(j;uM7q1asPsnH*qAb!F^Ms1@Z5ak{NkMF z9KJr!pXVQ5V~pMR{kh_EUGM9<-k;Xs;E}w2BzLRdK@TNIW^gF`H2Kson8hiQI1)0} zyAjrXa;GV&N&-)xF3=)0Y6aqVlIWDAPg5$^QCI!t9)l|SxXGV;G#l8~rNfS=~{E;#YGheXi>|1s;_EJp7h`|dmA`PeBh zp%Mt9^r~CxI~RKQ^HpFa=%4PLy_x)sq^g_l@|}~~Ec(lt^X~4CGpHn0-M6XFsJb-F zxNH`7minI`sx)nD-=PY6Szc|A5_Qf7{k4a%>j4j|dSUy*Nu}JyOv3Y|Eu>by%GD`o zF>x#0XHQWUQ5Yt(=@sME974u=-F=UoEJqxPTiY3(HIh5CWWs?~u*zB3+fI@H7DmY; z83?2PC`3p7S0r?v7k!|zzt~;7U#SpGuALlAilsv~>ICs&X(V6g=-hnUwnUj^ zklMAU*Kn-PiGQdwnz+2q$M#~2os#uBqy71Qolv?nGOxMsn3|ILV5bD2+iTSiE(sZG zZeY4Ilb5x-pVYd|aJ-~uj4#^Bl;Lu_!uY05jT^Yf^x)8h)o&hBC*5Con%lb1yAN!{ z`@|c>DpsXm5%>h$-(>+IQ&52#Cz@TcxAdbEU~WJEyuWu8toCFvFh{h7p!1+Xn$>`T z7q-vm)^~X8v`hYK_jxaOOxK0(RFQm7wY7#B>e8MsYDW`9xO^bo2kj$5FMbgHhCd}~ z+o;4;fZ!c4B3|D=m!di@n5k{QDOC6Aji&IL@8*1xcj3Iod!_vBfz9m2gxnEuy&ZPu zav|osN_NGO>Kdw9Ly6m&%guI6=yS*p7ttlYf@b+ z)1=-x#WkiUBB_weN;Arz7{q2Xr$Ob9$UL$K^mxbY9_fj7>I{8X&uL0#>v!!GsN8#- zc|Pvm7EnfkLU}s|G9EaKIeIH}BTs5>sDT?;wE-b^_UffTi7$WnKDx(kiq>Tz6j$ue zD`Fz&@R2gye3T$BXj#7htyK{R)Peu*(*A{bS*Q;|uhc0h-+v#e+SuxfC*gfi@ghB+ zMGeGacqK~&jPlTDB6g_yQo&Y-hjwZG zB_@>(qG0*MMrG!RqS@=8Ak{0-%C%Wz54A|YY(a6R8@?z59? zdD47u3fwEvGS2>PU@36qRWW7_>=w5?3Xgx2F0S!%V@|svdaHnbTL`(>6lpWxH(ArR z830v-cQ))Z%AJN+a?mSP%&B3SLx!~P6r`A2rUUCO{`_q)#VG3f>Ste(j6e*=eetSF9 zLU$1oF*Q{6b#8+&qn~SC5MSXx=oKE`y>d0hpe=+!ec8A+p1&^6Br`Dv1m?c{c_ab9 zBCa~=Vb>MGCDLJ=(e*r$*U`fRWme;w;3x*aK;yA%g&5mFj%Ra!CPeTddP`fQ%a)$Q; zI!HVGV-4N?CA3H%1zr`KYT--JY*WMlfqu@J{gb-5{Is?Ta7xVyeu2nh=R)0=ChhXC$=I@U8EiS;?nK zXP(lPc-h`_Koy1iZ>_thE4PJcbWr@YkNpqvOdIb_G&UzY{v9dLMB8^iY~)Vh6Ih^a zN%Qy+#5h4zEcYm#t+BInyJ;M$4X44aQmD|mYI%?PH9-dD2FX~RCoe{f>B)$5g!f7q)9jg!Uo)@X?fqQ!o4Arj zA8fMUo3!4vQ74!EK;o`bzGI_Yp`*=YC8X4OqO5x@MZoM^^dg&KSLH|eM6v+FIf5eK z62Ea-Xmwww&)mYql)*J%3oIib1n>x3MX&XqGjARh)3zU}g5!pCMmpHm(f} zU97Ze<;kO!2j_p-@(ZH7Dq}rU2y9xZZdzLVTAr}?PDEJXCN|~+q2OT%$u`&*U?+ba zsF6S|Igom{<>2@WaD4_v}!EHy^Z#Ak$e{j9;nsZ`iGIo@)B)-|N&> zzaSpZJPNOv*(IN68qCe}tpRdXdi*6nfOdR9dJ9x+RT?dd-=$E7rfh+-9S&s&afo>V zGpxj1&yj^|Oa9!4EYF@1rfnINiGnDQYkxAoe(is7Mt^}?86QY^sjjQ4rS{GD0>;MJ!Hg<;`wp%#_>n;CVK<0QASK^KJ>LRD#vCCncpg@AF-&B zD`aG70+U-%qCbBN?qi8+4)8Xv1lB@zc_K!hiKBVHnV(N9j9?$>BQvi1p0a6M>BH)e z+`^u1EEv<>$(BqlXn)P3LDp8KG=_fyf2h6TcqFF_E_a%gKiV@}t1FBwGGz+1NHcn; z5a^4aYZ+QEL3l|xhmWaA6)F4{?PJ=!xwbzSBhSswE4TP&}YNGD$#!o&%7~RYT&T;wzSeenlfRX}L++rDEP!>Lp}dkZ>cF*b>79iTKT@i5 zH?IRnc?Xra-ynBw_8XDOP#KbzPWTZCpV1kal$Ua&d3(dOqM{fV!6%r+)=HdqEi@^$ z%VxwXWQ_>>Y|)9w&Tfd0BOXhb2UVXt@_LQqSV-0F9hG)NHC6b`HQfcx2GD7CsTPJA z&Nh+4x0iWiWQVk}R!3D(EE{o4i2-d{HdFGmnAI1sovHA~g@kfpU{w4b>BDO&$pY!U zW$!~j_yr{kvX9Hxp+QT(`j6<|Y<&$-iCQt^oRt&1Nqc}OHsD9dV7A8qyG zhU$Cogh!7OKBiH*zr8(2H(3p>6_smEDzd6o6s`N>=8H{g8EQ6L&P&{oGXvpTkTsj# z`TG;NNP>)C=?wFP)mqc6t((WhHuR2syb5$HK45=4EO$lw-Z1acEFFakb}Q>D&MlH* zUf#JiKnO>>d*3ge;F+-GRT>%Can&C!pP(2TrW(`v1iR@Dnqev z-D9g*9XX;>GziRKD40#fFpL|=k5^M`5D)-@t@Fz3uVngv*!4p6P1p;9pXY2mw@ywX zq0ML?7kNzaJgS8UNSe<$@if?LI1YateeduGp0U@>?2e{+2*3r0YK?{Z61$7D-)j;Y zqN7VQ6}-vZu{rXOe!E`#q}<0adKI(cb$(R4Li#f_OU8HAep$MrIr^g9cvN4|;s6Kq z8YpQGQ7Wgl^~@=37rF-R^0_$*xd)b5`7~KLUR2!)1{qdAY4!O@5JYMB5WE`nQR11# zoQxn)^BkAa)V2eP$#&$Rvi}A`danugiHA)Wl;V`OAnsuBZypGWthatseZhdoX) zxw*pTEkE4U!94OIM0M&r6bGxW2{m|eM2f+r3W?lT6!06Jvex!$D9pg1e= zPp9+3ob{Suajm)Qn!PM$c&89U=nff8MZG0{w7nV%_5&f@M{95b`c>sjPIy zk~qJ-`MoLBGz2#FokntC@G!l)ZknRX{^!eW$6bbd-IyDopX3-8#0(G=`}`6V>>7g#yzbHCZ$o{Szg(>VbWYfot9~b`cASz zkRR^r6AD83iT!lk`s9YK+3fU9*-Ec@vabz&(@P3mzKsAT{q>Pi+cQ!=Y{ z)!IVTxR`bABU%EWz|Zn0DmON2Jr`iH1c2nf1o#Ohtlh7g$&!UC4F&?QX>#WQ?5O3w z;l8X_$71ZJ2`OO6fAC05j z!=M%{;;!n6*(2q)J|VG7pVAhuXuTEnRli}RNo5A<)j)9F)Gso)oSwoHR4@=4Bf~V+ zWaDJaR7~h|q?xYKdMhc#AB3pEa)?}O=^w{`n)&u(E*)0-ehQ!7&>3^&sb_qcQNM|7 zg5rX%^TQ|W%SMxGG+|9&?+7)^w5ioN(VsdmoC!lp_eGt4v>ONZlZ9>C+iJe( zPHtR&-$bt7I9K!5(~l7+bqK-thp#oJhOm19z{&LN{uVVs6=oI#@t?BvP9Th|`OGcT zxTNaMIo3JEvA|n*(#+ub*+eVr8ss>1DT8l_WBIi1#o^`m52SIyHC&LE`1jG7jbWOn zVgevrzG9$SY-;mN7K>{`?*U7NP|-c1rY%3!Y~A98AH5}Kdxt>*tr;s~oaHm9=ZwMD-w6P^Pe5fBi5eM z^q(VtM6k$?{La}zn*^?m25$TLi_zj4_XR2J?p^0Dvgj9cE7elFGeB6c1U{LI_!u4`g;h&bBspPbdx|7KxNT?`fjs<8yY-P> zv9F?KhR?EeF|jH;U>zH~seyCa-hQc#YtXqH5FJ@EyqtmRv>Of%wHG11o5xjK8h5!n zDZFp|iI318@O2lwO|6TeqLnsbhGQ+ zL0M?Vg#zy{#Fw74DkZdh4}AiO0Y#vGvthI9hWmlUCBE7&PFcTh7E)BrerW$HS!O>! zd0b@lXA8ort+DUZKrS{+(-uwI2_Rq*t85 z9lU?Jy-kJM$GWH$F> z8aPs9s%5Rztho&qjmAi=NPl}2vOZvgT2=GGxbeVE(oa$EZo<`kAQh?Q@7JZ)D^J-g zsly&g^K0yi^uM0pCm=4&j~BgNfbGR*)Xtov)JAv}S27muKyov6pM=)K>?5ht;v$k( zCUw`m=Yz9bV%W+7sOWpWK>xYRo;mSM;XwsVO9#(dDjo0x+mg6o*wvq5zT93lue)q! z^ZNCw{WzUIi#YRJiCTDZM|OP$3m?$U(4>f`Sp8s7b9@!LMkmh^iekPd{e$?MZxG@F z5lKofK4sw<8FjE^RA5$H)0eRqmL3qeIkpkQ6RqfOh#XGy|d$1oC$mw8|IWZy4te_oW*;_g!vvgk+yv zIw>f2<_q;*nAf`k#jMG;dN-4&uR?(ulypB_c!eGA4#0`r^2&--lJ_Y@glk9Z%I@hi zZ6XK`@%1}HJ{z4otFoH!YpvbNNQBm3WB-|LxnpNEzI#R13v#Jkt`g zmMeo?_1Zls?Wx&L;`M%*{J2?hql+>!85Lkzu|E??EHIy}sZL*TejC@2>zpfHVY8V$ zyM~do|9O7taDcw1XO@bh4v0i=e_TM!a)S4yvHn#HA{%=wp;%XI754>8$2_b1q4UV6 zMvS*bs2B4ziO?cZ$;J|-HVoWMLc3*cyM6lhN2~^bI@n-8@9Ir^EkYPXHeVW)j!vw} zG48*R!GGb@HvBvWXl+6+26T(FJ~FlXw;F+h?KGwfIk{9<2Itz>2;GIm{RtQ1Y(Vl+ zs;DWmSP^bsDzi!G*6CZ!TjyPTKO0&3mLIWf@0U9vZX$F82y3!>bVajyWsLiwylr$`g;?2AS3$H1W{phTVEPG zvVl<5dCu1^czX1E@~2KVoewRWduuBj^T8=Oz0DAn;%`F0=ZYT9P|AK9*N;(K6LwS(4nS5g*MTGA` z?68i!7LXVV?(U_tY2IpECujY%o@->z_vBkt?R5IMP#iE^KY<;NNUQ|~d5f-24)aV@ z*#|YqPUus#5?lJ!wJ3LLjF8t`4>lTQU3*{U>gA|@w;x5U46lrQEu}An)V!FmyD9;4 zWP4+pl2F$lg>IgX!jy)bP2w|(kLQYrtgZaHPR2UzIdf;@kTQEhe}|m)8Th#hg-K3T zC~;G$g}XT`0F|}Sd!Yl9R(Ql11hckH{OPmT0vu>H*Xbq?k(~Bcx0M|D?PDMdr_13u z>Z*kO!=U<7&jaG%i$I~KoA56!4^?!IAWNFOP-P}F*90nx-Hk%rYRybG!mW9b##pT| zEQ^yXGsnu;C3egI+L-uKp^#i+VX322E$5N57+kYk*lyC=&CX9t^(Ok=!|xkD+hkb# zneq;oxX~%1o7T@)Q;V%CPoZN7CWbutTY)#}=FXeAIwJS(!>)AQm^aCb0k8uST9mKb z+knH5pi&3MTIcUDrP!fhQlj?POZ-plxCzUoU|&o2&Ku1fW=9NuB#Xh6-VQ8aBo zpKwxY+9uFG z{%S^$rT_i=m~~H@Ur~IBc3NGui*q!-K7?HPrI^ZLi_f6TfP1f&05x2;MmdV&I|+4FTn77zraz9 zxPNbH)=$0mDe7Z&uHX@j|D4(M*;>@yMR&k+YRf0f0%wDmYztpg zos;xmj9s0ql+XeIunU{{L=kORiIqy#tn=jA>eXFA5s+DsILMsH07|t`u^+ejVuwqI zRjNK4+jEQg*boi*gJNr16*CFDLeW$2g*Gm2$+%88Xuk9dA8z|42T~ED=XMX z^JaS7s<&;_W`EzMpfskN8M&^Z)XrgZT^EL$L6MmiaVs{FcB;qNv4=V-?SV{He4XBRN=}i*ci>`lXoc zdn)w88$>+p)BpgT9v5*RVK>$QJGM_Hr)Ja$i?*;yqpEOcpb@Vl*0AI*JV7E)vGzL+ zuPHN$IacZO5AM~NA$r4btv18>%yB!56yAhR)eZ{$st<;(HJB79`&x#3s)a(>K_Q_s z2V-#!-8T66&0oOi|I|vOFhzbXlt#2oA*H?9t}cmEYLUH=jP*vI$Sp@@GO}m;CU$p; zfPZeH{axoEGbOKSTK%p?kUL5MWs9@3nRDo8&&iwGDNL;lS-T}a+DbmlQ4#We(uU}H z%!pkyuhkY{IbY_8XEv$zX|}(wWNIr}x1Jom*0tH2(iaK3Zf<8t3j>^Z z{s{xmzwqI@5Ho@JaP!^P9ds~8ns?l7L}?zD>89d2(+bU`VNeC&jvaX(wO&J`siL(! zPoh&^LNjEt$)+%|)Sxr^bC!Ww(9Swz{a(Y7@>`(?4LP7WC>+&no477k;fFVsaz_Uj zO9N^sEleaLuU2A5baCEWP>c9YZFn%LY_>>3NZ=i@t~=Q*SZ9m;K>hyYu1ONxz6{Qk z>U!AxE-`hRa7DuSdhTh;z^i`IfcgdgjN_T>SHw+n--AhicgYWc_bn0|N{mXQ``%uh z;kE4j-D#I+duo$91UPKzE@f_B;xoM4;Im{6@t(hEXB*QAmAOIOlfhon@X3r14&6vv zNed3$S&%h-N!rg(CV_lb+^-Jk;8m;7<}@sI`YlRQCgs;#hKUeciZCa)x()`Y;5L=- za=1!U*bA51rmD;+wxbj+M9Z!fI3aS)dTYPYY21|;z-$-!X&5cMLZYtX0qtx8s{vXl z6`=eoZBlznqNC5?JHND3M~W>2josMubXV;4kDcG(g0qPLNNp9AbdLEv+v^1)>~Lc^ z#lxX6vgsbu1yDe@Tfwlp`^dhm*pUyFA_t}YHm-5NMvw9YqD_s?la>`vkrXhzW^lfr zYx~GdN6)uFPM6|p>}66~Q&G2@%$H)bB5A*s5Och{UmpTR#Ou=nzqd2-7^K+G8R>j@ zep>yEDc}S5lvDNSz0NZ^$EH0Y_0qV`NkW^Ks=EW1ZB1(K6X7$e_}GR5Vc+V7=lam&tQ!nYaxS0K&ZpNUTyDbf`P zgrZ0aX3FZ3E&0Ql8{6-Un!>_s@9gf0QRiBR|9G?ugZ;c<)msels%Z?R*iPA(o|&_r z#Iumj#Hn13#6=Oi!*E^w5?pH|fjd7R@jj?&u+N8Pl0W*fV|DS3wfs&dA=iwMRRaUy z8yO&N@co`U?gH+7v#XmX;qNMqwgmdC?+5{Vg6Rvb+bFO0dix-mh5rx7X94puz4{2r-|KzxR;(sKD1P3bj&h$8|1fMXt5kF z-LG%=+K8@M#3vUTBWx`oF5ulCn*`+Jz|)kb?*I(o9=Ni$apUaneD4n7i|noNHzt(} zY8~Ggr!MYku2g0YaRJ2^-eQejE`qa^H%M5dWRd^;l*7?))al)Cty(KhP_y6}&-`EYXQ!JHcpk6q&C z)?OhI6H>B1GtxCn+}7U^yx@+`SCKwpjCqQLmr+$sK~cRY=OBtnUzm@awW{gMxkNBW z;JfK9+OzJqI?sRz6VWQ&Tn*IL&*T4SQKQ-TqeU&0!TlX~0S)T_qy9&qL)9zYQ%||j z53BERkWx1D(aCNkA_*((X=A~m$VP(duE|pR$O|`DnI~z)2PM;TReu` zj#glEv3ASf!~u0w?iE9UTkVX#$S0X^COzjhLOo36JB2zYizH}Pc?3G3f>S)us z=E7Y(O{t4kJ!#!vf&DT`0Z@3=G+9*hR-3S$rkOu=S4#qvk6f{+ z^s)Hh-}(e9yWa$zKE@(H%!lqhiCSD{M^74_fc; zrj-TkM-MFBJeS5LwAl)yOrmWQxn2_eaoH;7Mk~?pjiF< z{w>>=edo@(q6X;XsCqSAkAYZ^m-J0>RO$@AUVR2i!QaxS% zq*KYrd=e!fv5PBsG`E%NiHa!?I$%m(SbbK!72uUjzkaw}-`B_C%A$2X+;guCAIGVp zWH;*U+`ClEn;V&`)=>-{!tnCS@)u>Ks&y9MX+_5MzI{rsWSdM;tBHYh_1Qkz+`tH3 zR>y+V;vwCAKhRnG)e;mc;zG+UfliqVA2e!J=#!pqT(pTjVFmqoBIX8qi)IWDAfO4& zN&>U8+>@l*4^O)_4o&IoPcqKXO0`BcyofXN1dEOK#`Be!OUY` zz;)$@NsZqJ*a48%os$9$RA*3JmjoTsvB|OS9foD!xu>4t5Hn6&6q&;BiO6U1Yhuzx z%o`O9-Vl8_}*fPB7z&;q14N>lA9 z6LHrm)(r}pW6+7G*MjG=`$OeqI)_tXs7jKTJ(JqN?P3hx?F0DkWj_FN%(&h-Mws?h z!S9Z+Uk~8kvRo0l{pbf~0F0v%X%9mD7R@5}!-?S6r^)sH>AbxBp6e30&V4Yxtb%uP zoq~1I+rAU8+xn*5Wne)cfe{;W)5m;R=+7+8aWMiqC9(Kr$X&+f!v!n<{$@k0XzBPO z|M3>>xdi^u&I^Mmv=k@@8zx9Z`RR|_@gkVkD#IIy2)b`A_(8xrK*4u32AEcURQ zYGa77U0B*mCq-!E{WQiFxaF%F8s4O#j^Y9`@yE_5?yQdWJIxc!&ecw#jqUV|@^n@% zX%5I7o{B>v3gkXc6$PYbwiq${$BunvX^S0eh?hn=B^WMj$;qX|++zjI#BovQe89(D zYO*)#h2wT%YWn}&rIx*RYtjYgWM#hUO6l+sl6_bsB@I%on){7GYYu2Bd7%aV(D|&_ z>9Dfd?=D!z-2v#_PZhDt0*b6UJ^&6n){@(Mn6zBY9F|M-2dc)9J`Y(9A*IY!oTau| z|B+i`4n(B6u1M1gk2%NNoJSf!Jv`^}*9~!?Gej8(1L%FCfv%G&k16f|m{z`JdNvs1 zdK>f@SwT+C5c@s5St!LSdB;Q;lr;B>1w7%m6%1tj8oOubtULDJJeDRyNLN`9t)i0F zkZay6UgECJvzAP9Kltp7U^mQ^4TZ920nEQu(X_VSl7ZhClb0m*v1)au*2-sXdM@uc zJY+gtIu8xxSqDgd^=cjqAOM!&&ppqjj+z;@nQ#q26UN3m59f4Fnpk0PRx{M5f4N$` z*cCaoeRUaz32#-K^<=KI(Xw;g-ENHY2|_ND>wUJSl7LUvEwqGT04~z&WsDt(fcyoiY1rKpR;}`hu)Vw;q?x@HZ`SA)tTiu{3$(+?M5b;P%tw6lhx1 zj+567FA8dQ8RRReGYCA`_FT9Hagn~)8xdrrPURWE(&wFL4TQ^=!vogt)h-S|C{@G2 zv)L{Z>yqL_9UZ=uFzLbw{*3)vH@?2bgQ3Iu#;;y)eR?n5^lJEmi7baVBp5gPXfff3 zQ}m{$*>I1QJ5oa2TAUJqPL$ta-2NIo>ghPKBIqbEy@XKam8z##cc0@nXwn8T=JNRP z4m+degyy${J&TF*y{5Mcq_;u)NUs38>V8;-J4)WeaC8S+=)m2j_<39k9`Gu|qakpy zU2vmE1MZs;j}))8QzgFYcd4(0m+(~D!M)*ZyRy0~*?~Jsup$Ev-DcY{lBM0dMQ>>j z#C2L9<*KJt;of=5-iu&}D{a}iZ))xyII+$|Je1}c#(5{$rbJN5xyOHjzRAxHOuHng zXKYwv%(aJ|uJ_J0)1DCufNwQy9WFzZTA#usl&NW-5y_XPaucAMjuL&VXFSwaoG@)6 zfXO#w$F}Di{Z$Wfy>2e3j8yvEG_ccbx_DypN3E!zirNNF_ePK=

N~yO->)^FVun%&r{NS)H(a+%e@;a+uw(y=*Mf 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

sv-dG#RKPo-X^>>>4bKVKdUXiKVx`$j* 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Ο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

u)~50miIAh3%R1Ug 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

{1KB}orwM$P43M7p0N)Ak2mwXF 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≧drCstxc4@yB1QYO@2q}g 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ⅇlM{ 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

r?%2)D4PK zLg@p~zGt1LUzi0%ys;fO0b6|6SJjVjHE(#lWh1f?`m<MXcjf6Y^Q-738r}P) z%@G+8*j~OMb%6)Yv1^IzVG#*S_>;{;28=_aQ&CM(rsCz{NtK#mrNgJV>jfv3`bhEh zD7ROEM8nV)rfQW7_sKl}?YhvA7Kwc;l@@agSr52*X!a2_o#`%iRKrp{)i3_x|2h99 zgq+bgYrH<$GPvoi&Pc8y5dQf?sURsa;VOm1PSK@OJ9<4aQSnFy{FU#&wDV1YQv}Xi z=rx1?ufK!ep?*c#0x19h1fV119aH3C6HE4S7b^mM zQQ01#IgXV6P*Z&YBA2NxyEUb*~UBS0fs{=suLzGZo$ z!>O@vT64AMiTv=So0)($$0q)onu+fbfeXjs${BoSp|z!PjG62b=PH%^Ai->BTw z?Dyl?BYrIH$w+TKdTqY@T({zjq{BIdwF$1PxA3HbuCbj<#p}5(Rd-TTi z{fhy)9DmA>AMz0GxG50|x>v zkFiR>;ARS5RQU5Iy_}=NIGw<45W=vz7;FU~727N+j|K*ZJgnnY{%$O3ZJk?x-%RuZ z7VEZ=CfiJ#z!wSO2%M32lzf&TWD1QJ0}HuwZcQwa#m_{m9P#D?IT5wS1cJXgp% zsexMc0=Ai&{;kLR`wtUs#PVr&@d;f{`O|gPW_dJdv<#aOFJ0}8p_x-7m`R6PhJfCP zwQq_RtR{fJC|Pla{zAXm0l_$0f;I}RloF6(D50dbwE0|$1IL?~9w1*-V_kwKtM9S5 zcwg_D%%+Wwzx#Xh`{l-AC?S7LPgpVagMuqg@r@}XDTY6ONe|`lYIh?FO0Yzwcbi6X zzkW-HCj|DER-n(23gZ*inTgsA;;cDG=zRMpM*lIJ=LL7p_18$yi9(Ibd~;f*;(fo0 ze@d-}uIl$+_+>qtkH4J8_LfbB-p5FO=af_~2J>yl=zt&j=*ncpz&U9emxDfBN*ISu z_HOY)KcUW&qgnuX+_~q3@ji#z1;e++_f6)`g~o$#s#es~)&3$rOrR1Q!A!)zql~p? z-sPvf(2Fj~5G6p)*Uc%HV!dpqy)Xk#@p<-C!(ZL_{&EoYeRU^L%5mx7tBP);Yzh~y zP6S_YA31J=&kwCHSiTHra@EH=lv*7VzR~rUtCGdBElU{iqCY#?!4K>%Qp;x7|C@qJ zg)LKK4h(w@0}~BO9n$;_c#1V%yT6fAVgzW^co+tFWXZamG5!_(drx*m3pk)zGm;2W zT+AmKvXa!4(L65>ZrPa;*E-aBylL}h`-~G6==x3Hmq|cYM>%(q=75j1=j<>%6*8HdBBgAN zKE1=wj7_C}s<55h%Y!q2W-0po{cKP1mls&fq6oTBv7h*o)66(?+QFmR5|1pZGkavh z^~V~{7!qJqxc2MQVccM;i3EdX#}X`EU(^2%#wz+-e&Bu$8&V>!`3|kCnO7}CD)`Na zddq462=>NtIc=c}QFwyRZG5*9FAygo!$G(__cLk!csX^}8m$logD2`^fVpBOVTNIG zw82b{gLVkGwGS%F9jAlkpTv=ly7+e%paRmDk;eo@=sV+hW3QxfgB+e2;iozfa5}|3 zv+R{RT_p|tBeD!Suz7ZN@Lt#jo%JOeIpfv5sRPa&mw`bXlTcE}Cc}3XBj5N=~VOgd~_fF$WBr}B%9N25`b2dXQ=Id5W(`pr7J&p`bWiB)VIprrAh z2Z40i2~J3yde9|NRUL2B0GX#nFe)Li(xd1&=tO6=Ztv47;#|SplTPBcdIBHc@WI$z z4>y{-YNOJ0li*Ej6pdo0+A|79lGwcA{ue1lsSnyfC3J1iyo7yT;^u!wf?zjYUcw7iS@U7|^@VuCF z5$E`PURNhzSXwT4vwjl{ks|XI2AzE@m;a7d9La=lNH*nWHk}3+TjHH1>ilkAaO23b zOlS^t#|c%t1GTdR|K{SN$&LSg^Cum0_5;*U&uGZr1zLUktLaMOAx-B~N8i|@W8A&v zx6)a}M&QIh2H&L^y9P9Gz!C5rhAE+6h#zJ1s7+G_5l;9q^%mW#p=jLU@9q>j?Ixa? z>XJ^TA9zXmcL{}h9%?Fa1Q{H)zk;zr`FF$J_9GCIeKuFe8KRFrctJJq3{u)6G z8Z9NFB#{&q(%`%AJl;5HFUbVPNMGc7-}qE~tZXQ+(u9s%LKCqGOw>g`RlC3N(JK6y zPZZw0MQyE`LQ8y-<2+FN1jzrrVmSSN#=sUp4 zj*oTgYz?=Hlud6`6Qlo}!Ch!N-229a9ktABvo2M3;Op)h&sR?U_~@Ey?oY^`7lafr z!F6U@3hu^Pu2aE?gP%94Gj(PGrB76SXA`9**2ob03 ztchP3#WyfOBrO>g`O|u3KGwJ=iaRmG7YR=&bs_>_mhnin&`v1&jF+8*BxQV*f0|U> zf$i**odNslfuX<}<(pc5qi*g$nzK)&#wnKAT+~c}{a@+#4A$Ckg(5X#ITT)}h7Y=h zc8;_{wm&(S2HZGxTX1L?DIm-+n^hl5!_QI>!#__)R`^zWlf9~N zu6@|_c;wC~1-$AonS$SD_4KPA?&Aa0iT}R6pS?8&RQo^~dapN5E)6;;Kob`i+<)9& z=rUBe=0I{A8l-h_yn4}tDE{f04{GN~D8?4>!`wE{3RtvXvI-P^d)uu$F%YaYfX-X_ zp4FcR^XGH2x&d+$ae$}YGh*@rszczG)+vL4F?$<=sO@TUS z&ogV-m~X|mgW=>CoRL=*!2~@Dz60BFaQbjX=nhPNs>;ugx4qk#&GXtF!&C%;b|}=Z zk7@?EpK1y6h!{A!Kcz6)c@Rz8yYgx8ztDksmZ;?kYh8ov=sOdtH{)21d>`t8J(9QZUkeW#;+{K`@xt5?Be7Rin{<*s zqsphZjXImx-eO=EWUhT?O^}EpdfB{0t(iw<5bH6TaS))6N+9z8q>m`Hz1 zBG^`xH5EC(tnlspVn1xO+R;_Ek=Goj6p;>XS)xQ@&Xl=G4q%Vk)ItRpOGvk!2OV7d zq%=rh7i!+Kv$itP>u)FvCAV6(Y9DWl6J=bT7dkBOO-KB2psn88TE!@P|NXMoDYK^k z#G+UG?4v^pL9%QvpTe$L{#IPEFV(>S4pgEDmElez6SE8BBo_cFJ?W_o%gZ4ILnkY_ z5y`vj^)q?xYO_zHbx92Y;W)`Mbji?@;V%px2dD<#M-x zweA^^a*CrqROvuvvf%60W@_oVx`cY)M zOz%+m(yduGwstw};Ov$tO1k<7_%coQ*Zp%7qW;A%M_nV&l0UY93N;o~Tvqh}a2LAz z3zz>_6qzbXo}nsOsLJ(SbJ*!BQO{M2=T3qyhS!Xn>pRjqhX?tNOO8MXrJGZOC-3@} zMTCj(v~GZQU)c5!i-yCJ(klNw^^kvWb{nH9VFUc+R3%ix>9~lkckzi}!tP6%WO3}c zcI3j(J1j!m9Q>MpIZh<+eAdz@)K1c9T?hl?97@Nz6@l+W-=AY@<%R0;MscGtngUzo zvh&FDVtbj{f-I;HEL0lXgVS?gQ58zphTNKewcy&yLSHiLw@qQ{l9=3=<$+BI)260z z|0>>1w=pMb5cDbf*hZWBXcutpvV^m%($_BqiZfSUi+#tkI73=dyTHGN6|Y`B)m2scRqpgK$>IjU>CWwA#L6Qhp&w)ZQ;X1A*Ks=daC^OCT@n@T9&7`J12 z-8^sCL&o~eA854bq@_mURo8ur&{~5Yq&he{m`;8&uRa;CwCZ4b1Z3IXoac8L+;!un zv2^_AlVxUONrl(X6*0t-V9zC=1%Squfw3<^>Y%37M(a?mwt7C=r@OrTUEebS{9Q`< z6migqRtVm|z89hIV}*!ECb2$XiisVKjW%2l$dn$>hwW7sy>WiEBeK$2zHzd$V23gU zzZXkEAdts7H4Jqd$&4>`7LE(X{3EEu|BK=|@@It2K%AFPZ}@@}=lzm(HV=kVp<9 z?E4p3KS-@_);a|LB9}Xv4|!Tg5s}YsDJ;aLkHs*Oxdjy$qEX>Px9?s`7PlG^evo7} zuv_yLtSF|3t4TG`lT+-icIzc#4+@(V`0wiG~ zJ6FIgUfDU?j)koV_1}{ezdi0rHSXZG?RBgp>y-kV7+4WK>^xc28E4*0it&kMEau?2 zgMNl|ku<5%I$v+Az{DVT33MIkmK%k2YE8ue$byT{yS^NysushN%*^&pd;$XO+c!s$ z8#y_*nV!%l?)Bkew1cqTVhHSVTYmuqeo<)C`5KSr7D^9!%uRzIczL@}KzR zgaiR&8iz=?`nwC3K2wM@FQWuZ^(ZKE9nX7|BPG*4zkw9!OLG#?d%A5>_D}bn-m$~K zEWY~NU^NvXpo8m@bw&9X=4P}=mR@=A9ivd?1L`)|v^nZf%N14z)g3Q0-ILTrV^m4iQlvn%T%tlr-dfp6^Qm(v(0hx(t9^tX*=RBQC5PJ+$p8-2FU-d6 zc)0Fxy!zL~TdPZ2f9St$$GlbK1P1CXZK7Fg0ijI5B+1`wi>!dh)=`r-=&h)K6OY6E zKmL8PvsL#@m7f1N~BydI6^OHx*P2E99vWqA|RVvQkn26_#2rvna1 zt_kg#DvW+afpTaA6zAJiyw_$^B}>j%t}Vcwt_t@=#ZmQtmz~n&B@Xy=eO%_Lao90X zDt^2ec-rB4Z|N>+jLJ(>Yw|n|OI*?jK(HhmD>a%W1ZQ_cqCLsYi(qoEoL*h~aK(V^ zsAzH)Bnk%&fO=-5eB2e&Pd|dt{iuV%jxr-qUdD&sx#tslqmEdcnv1v+V8N=vkx~D3 zGPdW~j1hpW5x%f3Bo#?kiVfb^FM!~0e~42C&5CZKY52F%if^{eC#mT*OpnL7cQ?tC zrBT5ox7Q3}Z%p~XPbrd5_aV16T7lgj_IZ-6;(%XzdKt@V;%}A-#NX(9Sfw!~qd$b| zR8;;QW|Rj10nXm1#02lZ>ICI0IGy3g(lRS@&2};tCT7+K36dlIrKM9*T~`7cj?-$h zO5m~b!Cmb*Rxoo==k4MxI`5=H$HmXv0!ly#tCe>ba20D6$e)XqwAC{L%c$NQ3#;r0 zfG5$=Z0_4f>ISyVkDizg@ByC0_iTUzH{-mL3b&sJc~|i??u1vRe;Mut8zYfehJOA+ zG{ditN-J#vR`atRRGD|sND z4=iP|q~5Q|qbn_@)adY*e`T8g6!1+CP8|#nz63sfZP=likNkP^+cL^XZ)x;bSY@%1 z8&UN40R!$qZ*C}y=Rn-iCX>$hP#!To{F>z0u`L2&5itgYKz~DT10}mT6a5yqc567v z!K*-?Ph=k!`<@=3R@81b9Pa`gZ42)D*@j}2bwA7|-pjA_9GoyTtK>;v@hYNuIv8Dr zpuRp(BX-lHv(tM&r#IRH340Z7i14p}GbrNA-mbQsa!yG90ZlvAd2LEE8frg|i=WPR zidwT-0r}?|E*3bG<3za^U7LC@Z%4)aBCArAwMvFW8Ss`jYN`Xv(_VhE;cMEoDZRu8 zNFKJ-1P-;KueTCfAgP$W#4oU|%9?p}iMJxea5`3QY|y}K ze~ddK6A*{TDBS+j{H+k1gR=XpaMsrj>-?H%&2J#SHJQ?J?+k>$?vxf(cIu031%O3A z6t@ONz(uQy3}gc2J_hdWk-5Kuz|X~!G{&$;%9(EdX)?1P;*eKo$|%~Djw_#%Sg%S{Z3d`VAtUyTfKGrK>EGqB=6xn& zK?KG-H*nzS-OHCO@C?17(q^U;ri=bYTpq!#SPwG~{S=u%nR+BvP^-cg_77TS)6DXyF^rvIZl-@Nl7QJvNSPBC=7MujT-u9!%D zd$sBP-j#9x+Ruw}iBCfJW5h zpDO)Y8oOClMwIKrDwjngHoM%?U)K(kQ{+leb4(kj;cRYxh`(I9|UhV{Dj{~m^Zbo)3k+0=W{Q3nf3?;{F^loGFan}zvrKLLq$?MQ92gKAm;wl z+IEr0OCbT5Tgr;h{K>?Zr0id8|P z5oDjhv2>kECpYq?5&mEP+2=@rNN;UF1U^YayWuv*j;Rx z@FSQF6Zk`_Xl9SC#N6#i#5q4;a@HCGU#@1_aa|#Pd7*>pTz;_zin;+oqJl}>2!Wir zdm`CXSZ3ct^Q#$|%*!TO6Jj+_663?dSQ(Zkz6^cJSH=$1JYY1MymMXEY!b))0lry; zHeGbiK~x|jBG+0<59>rrNWM;o)zj9|f1f&dtQR*jq0P)Xlw}(pDwfE~tnGHF?=Y8B zo7||~A8x7o9vyKq|?Dx7L+ zOvL)3t|-Lc&Cxva!R@r5{$Yf#^|RB*AN3j=t<%cz@fYkxgI!wUY{JPFne9j433!^n za^kWJ($?a>i`5ec72oJ3TJMLz4XD;!UTRbKpYB0z(!+)23x#?Hak*%!+$VIowTa#2 zq&g+v3A)Y2Y*UqPih2*L=XW3RBBmpq>e^SvvIwbo^=)>1DrlEzro2LE+YA@&JD>4Q z{AO@Vp$&Rb!K*89{z2Toa>A}W{bl(R;86wL6@Ca0Unpdd@R|aeOI__d3K!w0Rg6M{ z+We+4%-i6fS8(l(ulm$!$If}$%OhD{Jlron4sv0LK^wRvJ3OV)gfi)SP)kaKpq%E@ zpFcefoGbB#0fRX1m5@EaM=g#*JB=GFzk`xJhkmvfe+?_Ldc9EGFEurunI;UxM>2o` z#FeTn>GxN4Ab}3OKA<5KWR6u^VLf7mm6R_`QpoJAo@3q%HD{3Bqsg=RT#PTWY7A8v2pt6*<_s`eS#{h~L7^XV7M!!@=-qQMT76v>Xrt$YDWmu@hn#)Z21}@}3hF zN&^J;58;}Q4|aJK@;mzZnIP2oql6#KO-6%R0)GrRnZ@$~KOq94# z8lm;suT9ZJPXl(gTU`ow99By{hd!7~AI_b|R+*@#?;|G{84U@nxyl2JN#UN53_%b{ zM|jvjYpjjS9$;GEd4@7*E3svX8>pBy1E8AHTN2_8vGQEPz1sX`*|W5_>AigMN3h&* z^~izt$@q32ZGT`Dkne0v2D-m!rxFk7OdMGi`EAiYXmvH4hM=QC-+U_^vVA5%=?C^z zj_%^nFxc5p$df#{DcJv4OFE$tZK2hQEv-dI4C=E#wiQ6n~0O$JGo-ZYq zt1~i~*uGE-Jr^hs?!<~pbx5s|{b6}&Cwy!i7x8F-V)kZ4YxV8|6dd!VxZkuhxD~6o)eR1~L~Rf-T$jRXBCTh|PXkA`A9tYLt$rKu=-| z1Grb;o*}Q{CsUdamS)dv&y#R~AiFg%B_V`H!Ny zz2}$!GzKBY0@-;R|uw+R8{G$U(#JqEnPB5vaUWY;Lm-_{tAi%dKS!d`xL7i?o@z zbUgA@i(6YKl~uk_pfpcnQE+aoVm&Q_Lf>snJgNiZHB+Xf{1}OSD>EpxC(BVOi?NIo zzfr^e-%zu_f~Zuty1S)&r1K2WO;qgFLkz#?S-kbz?_`^wJ3C3^e?R{ZxJ3sJ)W(qt zMzu-qp4u$yyfW6MSc#!V@( zHg!ErI2jttMa;tpT8|Iz4;W~h1S!R;&M$k+*d}sj@1o;1)R)iQ`r7XLKF@>L%MEs~ zSeHTdZSr8saA1^Fb+1u_JjBPpL%ZgAK@wE!JpApQfK$gY@9N7Afb+u|O7X4T_N@i^ zEgvQ^RFyFTb7=y=DP_e3D@E(yPOe}cIHjNK$Yk=1WVqJc+xlVp7T**nXxs)g_~g+} zv@DnT>qTb^t#K%!l@H3}roLbU&FJAlo@4g=7P@8C<)FV@_+Z|?|Kb4GSCDbz%=@Yi z12CICSw;V{L;Kq2r#NpeWmzg|0nK0TyxS)B9M3zEBdt}rp89+;uNwi0g@C`m`LlfF zcW@ZHpcS~LVNxX2M}L+!llaW6)!K&BQb4AVl7er9JY?^B9X6sRZu-3WC}! zm!;vTon7u)b$ZzUt-VkM*!WFvBoJ~M@{!D37Nuhn2}0?Z%KtG7{3OSkjA6^rk7p3E zG4Y#Cc-XS-aPhNW8M_*7pws1R{$eO~b8tIg>{ZYacvh_ZZqw8Xm(`D2#vx8>%qBv-D8g9u z<*pY!X{3LI(qHl?6^HYpB-zt#{D4{D3~XXT1cM%npm){1w=R0ptE&0VR7{?y4=1bK z^k+!Cl+OPF20{705XQ3?VVvQRM|?TfblA0*a=oe9=hM%i2Ot5Eo{VemH%>SQc8LpG z;ix63#dB!q7!LkiMd#PyjH>UI$h*0D6G**|yyUAr%M-*evoi-w13XXKJ`D;qt|_ zCCm)LeIC$rkVzs5$4DeFa{%IA-MY(t&Gowq6$)@JRtgXX2k!kUIS43e2^a-t53U9F zi^=Xb>)-cRiB6l*wju?zO19l%m-anvJAUj(t*|BJj$>sB^BZmp{`OCUOYqRrObdynmY{E?XBW&6Ri!*(jjKRTcE*Vt4d z$5oznb&kY1wQ(NetvOUi+!&1>=8S1;<%l-aM15TWXdL0^8RWFOn^tubU0@_=i9ld$x3o;%UzA@xE{_yQ2Oltx9#ZPKWR7aT<69@ zHtnvs`J+~`<1VL9g>9!g1$1%&Tw1J6=zD;%Vd}1^tQMQvT6^)uXY7)I-(HHPBX8KS z*#YTc6Q7+eP{2csar1!=Yzu&1xe^C@Rsf7ZSO9un<@7p#e9jB#89PnU5eKM(kv?8L z<7oW$@Mo`Ic=ma|Ygt_;pj^I!LeXkUw2A)!mk@$o*cU#K$hQ2MF(nekf^WKBdCp4L zud~V>JJ=gPxp^t`Dv58moa1wKugQ=185nu&)2+MUyF?<@Mq_+L{tMqvv=3&oC~GWs7h{T`ezE3p zNB~mV%!$sE$u?M~@qOf-J0?A@-0E(;Ip*i%GOY&NPTNRTkeGuF!+i?}r_Y_~b^&eJ zgiBPxA`FHMAB^V(yLT~mdJhl?Gl3Bx4f}Wi0-|SovIN@XlhMQHTG zU-#M9|NON@_FDM$_8l7qr2n{m{NBKBB*;1{(DSI0<&hEvy#XFD<}#7R*yj@+i{HRV zk1mgY1ZMMM*-BmjgN%+U>0%;C%N^99vp2$X2 zy>K32+}C&6fg-qOz_avI3}J};A3O*23Ji|`>8UJ`YZ)Ar&8tdARI1=U0g?bTUydC` zP<>w5MkN96Uld4>FW>Kx_!UsbfBDvHwtwG?4%C=_Mx zVZDKCVSQ$-xvGh>!vSSwxq3w-~1A71#oX_u%NtzyIc z#5^AcDEi;?8YC{{yFLnU55I>E7+-HQegF|i;G^am!yp;r3x17u)okRCCi%b%fG2#T ztUdYp#284RT&VZ?{ll+b7fi}NAKux&*8`p@ke;8?myp3A1YaT&%m zeq?{YIWK(_B%Aj0(XG+MV^R?+xg8h$p*ljHoj-p;&%`V4S%4LMLcr$9sY%`6+QE}$S*cKpLDv|DY@n& zCofsijUTg`yMJV{-6P+hZWCx!^Ey&5;P1LLNyQ=uxW;dm0?5XuYi}co&;&wd9u+Bp z)-}M*+>bS_bq)|r!p4OQ=T!ydfb|dbxhr0!q{$mqxoXXt^;+wgcSf}CLS8_ug#OH} zpXF+S=X;fSc2NX7NRbjhw{K9@ghhyQ+|FtIS<1aibokyu&Er}}b14cJ+r*HFUQ{un zt|5q#`|8*JJV}A{BE^F23&9TYK>A#=&--Bfl(bN0L9aP#J$4$1~%p} zjPygj(x)Ja5|CaAa#YV-ZW$dZ(;8i-a|*8@V7RxT(NFqx{nJ|GJhL|Q7XF`xCJ__O z+X|kb>uOf2Cjp6MNn+k4`39`;K~F(u*xz?a{W#}*7`dz#hko5F5+(%jemHT@Cwzi8 zXi(f~G2BPc+SGr!hD_M!SF?$4ORCSrmhrzfuioYog=h}|a{nCT=Yw>?Cj_AD`2<;xOFy9(lZe7v3ZYzH zUV)BD@~+ldCH7%&K=g4%6`!)Llz_h3*E{NTO@DqrcV&|38}19A5E33w-Zsl735a8N zv{Nl^DstV+4xs-he>Q0^9nP)t5$+`3KX5~Vef4LP2VCR#&*t-T0_cy3jqiykp0KlL z&)R7*!{H3xv}u$3|GCe7PTA?PLBed>f31G=;)^&?M#aETFK6~WOKt`ZhXV%=*!REx zePu15viA0N8CPYtU1c@5Zry5+J@%M;UGj-OqzBlyZ=WWBah0rEYd7B70Q$w)=Udmw zxh6LHT(i&5PEXr2|L%{hu~JOE4T*zY@#CUT0GzXJ-S)^o`!y@C3j&Do`&=)d$2&S~ z=&d)c>ETbs06#mQd%~(zn!EHGvg-q?96xi`8t!{2(w(DXj2mq~Zw(Jcw?)3x8;p{E z1*6HDC8&ThU#b6IP~d%5EZcCtW5i)t#S1K27ccb6crBJQZL9m*XHYk&bW>H1%OqoH zEC!^f5dehydS!&_S_o`bD|ii?{|8+L2L$|>FF{RP0T&ZI!70IgpuAWj2J1H6gSoi^ zYZm)FLZAtjaRPGOw;J8Q<+^^)dJxY(?~O;-pbY+Sk1_N~3c$fY00u_-iYizqqGJ#v zmHr_x>XQb7#Em(zTQ4oxzF2bsQ{w=kt)3Ap{x|VJdd48kay)ZaLvR!T{KnBuRRRa1 zP->8oo(K2b{lW{^!gauvsvUU@IXA z*m?Ps90vtUzMnWZaB|=<^31DUt|W7M6)Mi3>(MwXiv-nR&4D?twz|d2YZ|QcssARl zOsBt;gs+pZb0wHV!#l%1f8p3kYgVAF?js+Ge8n2v^UTv$xp{|`3%ulIvaj2E-+aaD z9(X7QU@|o^VNd>Fe_$J1o2*`}rRfT7Jaqh`-SyL7wAH(o4j7|!EQx<(V>4p#4+5p7 zW%**cD%0}=yW6zuQ=GAsYai(ElmkAnHN0b|MNa9`ELk4Yz3yD@7Y^D?i6Lv^(h0k8 z_Lv<$e$38Y7R#+3$cmC;`_vsfZQGh4*$E)Tci%o@hc8@lO}TMHi+$$KT>+?5YuKEE zoo}DHWY35>n@4z4Q;ltDX|%r4aciuquyu_!8Z+~3CG-2w&4_7Kflv`;>e-E6p?rA) z;|E~+JUN{mkY2CJWJ>I10O_aY(1W3?L{7pyJ)bM`;pl<-nfEP!E|xLq^*4{(Md|OX zRiAqN4gr2*b*I6C%{D2J%F(lOUTe-kwuybdJd_ZUi{6=-n%4RyfPn@uK$t9-pGZ>x z(4$Lr_6$kC7_mMDhWhn?M9)zOq*kgETu7X_Y9kLFA zO_A#{Fn<-gXvwDt2c)0*w_mk-tu4)s>DjgMC!a2^ur;6k$I^>}Z?K&LW~5%XfnW|L zh6#u)x1f_^8#S$Jwf4*H^54BEpu#$>y<++6>v2si6MOiUE!!O%Ygu`f_7_XG80*t5 z@14mtuud%mJ*)Cr2=M937)x)$Udb2xJs^4?bX_X@JP&eFg5(o|mqSX_#r{PAFIScb zz+5eMwV7_sg#o~x??%p_u|XxI+imwLI0wi%GmtFDNJjus5!~_tHiGjcn-agK`w;5$RBcR10w89x zuw4i%DgFy=Gi*@$DN}~QRBZ@`6&VBj!oqdzY;Jz&jb?DQl-goDHF7Z1<-c$Bz2&)~+f zNKPJ-%>|oVu}as|ro|G8eH+qw9en49HZwdHL+-%udiK9$v(-xR6p&%|%79gD+-enD zb|$RiIIZzCa{9Q9UAkap8#Y+^w(V9}8D$htryb#azWL-q`)9xZM0iu$?{B$vr+wt% zPuNFp-r#=2TpwnA2Z-$|My4^>XTm-o-#}~y*ywqd5d0r7(iex4NwA%18)FVBD4er` zB0$7T(_<2`&|gdNJS?`8V+8`O0T6C>*E%NO--y8Rm6fG#4)Fa{s%NS~z-RA&nc@Bk zcsVf<07}@uQa*t>(4U1u|btNrp>`L#jW1`=+ZJqP^Oh|X=JMfx~?Yi5l zvwmnvTX{%&eqM8}NCy%U4A|;0p`uOB@>kNW)wnPK*L527yd?e?VjqMW8z%^bzws z`Y1j*o(&jgITveWRki%&34Hb*coQaQ!M{vWS3GEt$_s#nI6esnB)Y*M8kSK3>1h`r z@w|B;eVM@YUXKp%%X<%=?;jShX1)Sx{5~l^YkX${q;F_i@A`30N(&WDStHk~TF!Fl z@$@ZvJNJMwMLY(b)C>18wh~d9(`mwqcz)kRudvV0%~d-#@WH_WyY<#P6whC8hYr1K zSFUu}J@?*kr}S)0Y5eTn`%&#Xp#QP{fJDc=n%mH6m=j#0hf6kCCEYG+vyF%_>db4; zSV8A`Yb=lYw-;+;+vQ&CwJK}=v46SPu95GV*B=8ntyLlEUQp>n8RYF zmky|EKC`nViv+rGHf;<4ChUg|Z_oAnN%^QwobQrfH_)xtwbWX@$QW`VOTAaA+R&%U zU{tBgg-ng-i^L~C0!)U@nuH40k_zcn%y9vU67l4PjP%6vSP!t35Y|iL)VW}v=Xe(s zzX`{vBSc#*s%%@H-1p6Iw0*tV!aH2^Z^hUpN>nCD_dS5eSY2s0hWWYQ&THoxMIZ!zFy);j4Nzhu7T>t zULWz}AQuE(?t~fq@j6v_jQgMC4+BI`wRP@aV-wXObK^tgxniuamIjRJYjoOR%|tH) zNRL2pfUdt3Va?`$ChYTx&WCT4WE1=(=t$_Hym}!SdQgn?Bys@!hj1{N&*zd7L8rwc zMItErvj@9p^Zast>;kX=VNkqJ%2?A{>+mPOoq)mtuutff#4~U=G4_LeR)FZ43-K=? z;h6POfd1U?OBeg3*Om&H9$=kWvjZZy5@)CQcBcF4lXj>&)wpW2`e%S%^cm4*YKr?M>X8WTfzWwi(_CPIm#^nIeA3Ju;e)Bhf)4un;@1;Eb&;8ub z+3)<$@7U^V2#8D8K>7uMJhE})M)w;21Na|sHelz22M>n7%J}_-3m5DQU-*LU-@iZQ zZ@=`VFWGPZ_HTdSfb@fd${6nr0$43AEzVJ&@C$x<0_n*r4+j)5o&#f~ z=ehvW<4nPcPQVCOYhR8IqYxHu?gM%SMu`s=(KnubzDACL_!7ea2?&zY7dWK|o+Jy% zCFL#E0O|D{;jjtslj>aAen*hKOPTgzLzJv|+Q_!>vyuo% zudut?S){E0=sgTGdS=ru$L1wxD*cD^9JWpG>K_!_q6ES#M2ZS$qE zz0=b>P113kjfnNHODxMi!=9v^%a@Kh&`!(Roi@>N#s*&gcKj)0J_7=U%|DgEKELWC zAGf35{wv$`@IzL%etl&3Anod161_4@09 zvbhecn7I_w@GG7D_Tnpt-L~Cg=DuON6iz>XIPJ&o>r2No+BLGfc2}Z%G~!8s+ch~5je7! zcqxnioR#m$=?;NYgL!iMhDIyXT(Ba!>4ErQ^vM@rwKMx(aBF0?XE=7c-KuxrZreZh z*%;f205Z&oJ|K+U#Q&=y)6*3KF7(>VFF$YV)@`s`Z@bIRo;f8Vl;e&~T(i9bW3>X& z?-X!hn`{FZkA~H>VBF=pjREMH0C^CscL8(-j=X)t`2sL+mkSyd7EMd99u??q^P){j zmwi6bfe5BzTM(QpIq{CwY}{fM8#YCD6>qam&eqsa*99Az4fGi7F7D$}=b^|+;@)6S z5m@y>>Hut@zLI_JCEQm83u(_%?JR%n;FY>r2ckbA&3O6It zM`rA)rvktBM?d{Q~YWc zuy1;EEs2)|R2?&^fP_^wA_0(1;{}_U=g*h;cK1!TFDzxb5|`Ba{Bx>GxZbJ+01wOH z>2p@N@n$QC3G((kU_YQi0I0CZdaxp6aZEsZDt39G3C9C`3qT=LcKUb#J;x%+fIf;z zT$YYLq+qR2IA9!+Y!4IdQe?8L%lck@#n~%GHBr4_iQs1xuup|T_B`QS^sF1+C zmr1QdV`BpXO9TLxf+E=gMd>|b{utrccmVyi1kcm1=}EEAPv=D#-my6$&LB^uNuU$A zkAMS10{xIgj}2a4Ugwfi+?V=8k^w#%?qiX%jRDdp17G;xr1P4HeZE(1^USp9c^*hl z#gDK*C}5-?5a@7vL7Tqy)FIn1;C$P~u5_BQV4okkt=|6quYD?}nkvub(5a(Vx~fGi z^LIG^DxgsGP93k`upND{+Gn1Mi z^qy;~(3%*IdxZ8@``a})^rgJc@c!Ap$M5ff^c*7*%P+|a#ACRZJeRc)vPg$mO!D$7 zG+t-z$sc^jjrm6&`J~3dn35x(a@B)cTGrYNFFdWjC=xN^rv+qIa+@kMd=P~`qQU|5 zJbDqJHT>8Y4!mr0dZw-IsB<4zY5iSH2K5Y|I@e(hpZ--VZQZ@t?(X{$`Qc7o?1}8V zd9A8A3;2CKNxU7LN!vZ>GwiqZ_DDlxqwWW5F7+>`ofkh(KEt+4ZCW?R-S|3m=%DrV z2J2QseUpe(R@>2|ha8~(uDkBhyoOE|O<>NXZSngi^25gOlZ(&i+Iww4V+pBK0@C`H zx?CLAmU5pmX~4k9pp8*3D_hY#3j4ex7!tt>G9VBxwpTd0Dz+MN01RdQ3di!?IyDcZ zXWnmFyF+V1zSFM(LZ=h2iN6fbx(&-W32($gJ1!m9nwM`dBxfS5{g>POW8!|E=qG%w z=^Qhc?egH*Qq76=O&i?l{o2*CT5;IWdY(?(Qtd z{IQ9k=bT*=4|aD4S>zArY`egk6(uk9<0_SI46Xs@cE$mT!8|`PI;f7zb)fG-iiq!q zxsmvNwm|jgfw;Wa8FSJ!KK%HP|G53n|M@@No@8>y zgE4XipnvkoCmncxXeh|$@=b#gy;95{fb_#cU%vU~o3?XjtOGf`&((ha^{;>3e)*Sw z*`4;4S6;FE@4x?QHz6`{EEPcS8~&Z|e8)cf+0Xiq%l^6opkMYbUOB;4?1AeIK<~T8 z1L?07`~3LekUjHnzh>*#G+0BLOtxKOQM@8Y*CW62>sDB@xFgG7>j&~x3Ss9H-?Q3V z@3xYrsH3|7-8U>xptb5-ZoQ_>p6u?nf&H)Bs*im-(vAr^s0Q8@WB#Y2+ag~kcmn{N z5<-9k5dZ){07*naRJD|5B$E^%eK@O}pb5cf6nKmg0``FEy@3?Y>?aUQCNQi!J~*7< zlsVf3_@Aw#nDYyjoPsj8jmO7t#?~^!rm2%ZmL%94A}SX>Tf-1v4b$LEB>8;$94m1i9| zFL1J)%1tG+R;2Rr;~E>^e)WAj-yHyY?%T1!9=<7Hi12ND@$eaY<>)#0vAm?n?%mXE zO;zRAA&20B^Bp!U@Nco0_&$Hnjka}lga29ZD)7vl=4BE;V52X}2O1a^K=f0y1ij?1 zQu0C`48fs!E4n8!=R6x18~s?m0LCR1Rx0OSkxI?4$o1C)`3h9lO~2>Do#EEM@X{gc z>>hBS%uhdl=Yn~DpkRkh$Kj*vDAl;na%sYp;5bVx!1qYw->^Em9$u|B zd>GG@C=fk8Icd-So3B~3Kut}ag*C&AzjUSF1~hqY``><2W2nF}A_cZn6ez_ShV4W! z3ie7sRLgA_!Tfjma<{$q+KXCin{Dq$V3maZc1Yl{qXLng(sL`ucLk6WsoF>=CcP9Z(0C5Cyw7@vfGXNMb*l9xpVh^9UQwV^OEF9LM{l2{V>NcaJGb+g( z02t6wS2fG$p!F*e`+WHK{{7I=V>WR?%#|N`ME6k(QYU z0}##DtvmEwR5%cQ0Nz3ySzNFS8B+iVup?k|BdOU-?0r+Bm-;AIi7bQfzGKsUV%@y= z0e?F8I&}Py4Xe+_x8Lr->Qzb-4v(t>J=e`jX^+FI4unG4*TXuRhHE&PBKu_{K z#|;vf#gwk<2H4MD0v|ziJmDjtU70W^`(yFis~B2wO`TQkxGA!ER&!wYOV3)t_ElE6 zCU$L`ZtE40zRL>55?-mX5cai24xl&VotJGyNvJad{gjD~zEVJX|4fAUTkL(eDlq zq(s#;$_1ncwCV+LKj2%(_^gcp=?k&|(hp3n(YzbPMz1w^es)IS?g_2CvRA6-*AdU~ zUM(P7c^ueeR24@6KJy#^_NowjZaCQh#{SXKe%EDX(g&*q9!Zr1;rlkxYby5nI{8oW zY0#cgB|xMC(udph@_X&}j@W!po@h&S%Cxrq#usk3pWam&Q?ZmEcD?wN%?MOmd)qw% z(XWmiYi72{ri-KYBwz;C=c@&z_daF^sF1CRK1vH8(d)ztQudDrzJ0+nhRe%zApdg$=l0&uPBa9TEsL6WRtb1O8h4Xpo*D=rMr) z5Y`_+P~MMKFF#hgbE+ps!Jo+SJZPSZjF5y($@ZGkvrp1YUBfzezVIK;&2Pg1MGwMe zKdM$x1;HohaZh2+tgA1N(QUksw?V)>;sPFcL$Vvd8*ej(&mDg6e0}m$0K_M062D{E zug$(OK>EB{Rbd@h+X5iH2gqg3J|Aw3e=qf7Q6RnUud5_556DVYiPs-?sju`AdLLs7 z!OzXu3XgXHTIhc6Igm|(PJ^zTO!D$d1(+|gC!hR|=Km>|2-)4OIL*+2-M{A{-P2Ng z`l;_ZQ2nEiep+kR2NyukH4>*n=VM$UlfC^m(tgnzq(cpyc+YJsm5&VnbcvpoWCF>T zZQEmY_kSVTE(^AwywGK%^XqJrY`Hb61bID4B3n4!_LJDzK~hhM!IpV#XrMz$H!ad} z3zfKiMRU@W?1Ba*X;*6whAantUzIL3_fCjW`RLL2T{8ES#v)RpUTAPFQ zH{CWR+b^O2HQCNf*xubgY?nl?gA~dCx_yHxrR0DqdMWoQ+shdmRV+^xpE8wcB_vIY zf!?!BV@q_1V2Jn|;O%%x7f4U?psz9koBfo07V9>MJS#@uk18U7>yF5XZk4I9W1|Vy)dyuG~GTp{nMND>ZAee^(^00;& z`-wngf$fO&+la2;jR`Mgj`u26An1n@lTZ8|Y)|9k(6uEZP>PJA2alP^WjX0})z zd~ZB!;bfJi9@Ecbb$V`nKQQ-S7XW&I^WXSKQNY_bo}RY<@^ql&_#1J(0qAeI;RZW$ zME(|I#tf`=o@{)>eDtjW<*-IK+MzIm*?4 zbG-oQf9aQg$$sW%ekP`aCKcFg7pw5wZ@+E-;XnL`$af?#oH%hpM#(~jG_q3;->d-W zbJ&?Hhq~rHaJ>TP>9}jjK7a7L-?yIk-m~qSqfYfyH)!iP?Rs5& zH-7P=4Ie&aO%FaEY45CzoX+RIZ*?EpYsF$+xRx^2KVZEtJZ~+JeJ&D6oRVX-=e2#- z{8?=a0RmFB6J;J_$7lEASclb(^3Yx|nHvp}HO*(n7e1W3J>K>B3t^BCX_ja4p?Oc^-@qn)7EVnF)hV%RQ=<(LYB zgMdN+*Lz#a9W28?VFwO<84eV2D4&qS`^DHt2s+`=z)=!*oWOeDEkoZsh?oapkS|pb zn<@#ZgkU@1`!KVIFV9yXc4C;92VehAsza!ZxPZ%YuBQ^%=UX29q@8~132WN2(MDIb zD!>)6!VDifs_Q8dJL;CmAplSf9u}j9Y_Aek*@~Bw`(C#3?oL~?D(Z}h-zU*$0QA)x zHrS^7?oRY|%(m4n^>RQbPBdpd@$B<$7e}>b1c0cut>pr8OllpOh?%o+4&gMx*~u8? zGxHN{XxF2p3gFBL$TA^E;*=a%#VVD3T+G1FzH`j6&o>Gb|AoD`TCI}vyma&p*|%Oj zXv5)*INeWcCaRn-9G_D!qp6L;+LKaG8rvmZu!z*UO7TCsri zVVTsN1(;rngxEcGet`5zWL69jV|isZkzZ;Bl`7-9W~&uxy;+g#rw1x#FIw4bFm8OS zFNoE0|63>A$J=k&WLvky`gF#{Ogx;w$$AGz?P5m|?1b%Y^V%rL#vf~`uct0{E1(yQ z`AuuZHdB#&JZ5{Yqi3(!qyj;#7dLGUY#i1z=C7+QzAc=0IT8}C_Vs*F&X*_{ee{`q z*7o}AwrlI!teQDAGHxf&cG#Ui_2bsEYp1iF&}9$;VAxJR@WD28QNZD|vnnwxmS=)s znFgddPC5eXU!D?N+S)D(jMHPgcHN|ewTlW8NzbdS7RaH)jvqg47cZU{uxzzG_~0Yf z+jB*0a=!}%*9jPstxb?l`&{KSfrMb)Mt27oUaqq4Ua&9Gr%662l->l0J`6DS`z?ii z-XCLnc-VTLd)8`hygi1IcT)W}a6$p-TOLv+o~RB5`|IG~73nszfn_(55K$2VKl|h6 z>J@vZUtnJV^#EdBmAG(UNe2K-MJZ+k9htGU6rG&oldKPV3mOzy6Y4 zP!cForEv*}e)HyS0`?Va{vFl-^hu#$7J~!;eVt@_`YBxE+a3s)Yw|wbn6D6xOP73Gkz*y#Y)|a3C-l%SViOB zM_r<||8C&$J2o-eV~EmR$iqw?-A1f0!dVE@=8XK$^Bsnsd6w7brrK5d7Kp`dL zi}@Ea5ymeShQhu)$UPt_2ygSh55Icfc^FKDt_EnZTx&#aeUKcWNI0mHpEi6Cu_+i=08JSi=vxbQQJw+DOO4aF&M0{nz%n4$ z9Xoc5`0z$0oLm+O;;VW#>h0l&AJYY?zMvaDaEn|WFJ(z zF!-Rn(fzwyZ_JAN+E-`Rho2oGvR ze6Unm%6(eux&7}mnQJG93$@}DMF_k+Kpo#b_CqqkwjEH#TVHXDwVXA<1D^fw0I3rX zU<|UJW4ED~rBfxy$9}?$(+@CB$po-hgj@<{`*2z!!0jQOx{CvIx3YE zDBe-81opB9B?`_F`v_!ANtVMW5813@;#D`?7*p-p@3UO5tXu7uVoCq}GlOo&_t-Pw zD!dPaJ_AHQsRSgF+Z$C~D_5X@#&x%t`rzjDw`? z^EwVX)KbOy5p|!zAu#5uL^v3(g5VMjMdpYG(tbK~=8V{( zZk3~F$nEoIfA(kgr7wLc>HfL=Vg*2-%idf$*0t_|>lr{FVW01sP#``CjuaH;DR3Ep zJX+U@c}$-Rv|gbk=1K-TuGkCz@&C3h8=BL03|#ISut6~cee5g0nyY49)8q8--!B$@ zF?{U2DbkM7i)U@*{Ap`^^wG$+YxQPkRA9rWpR!dS{e(bofwKZ8AsB_49@jRpi)144 z3@A7?062slw(s+xcIWJK1h&lMr$VRWM6N&M9rrI>Q2>TC?v)2!5CkE3pJ{n}vX8F@ z`#jeX7SDtd82dqR1;dqV^$rL2UoIfM&%EY-_{?`oLW`2lim~jt`FEz+^upT_8P1cb$Oro(Y6C2S)mAKsz2l&lrVC02x(as8k>{5)hCu zix&>2dNB%wfhLRx05m?Sg6m+8LU2ZsWWzqI*Y1=PK}kPKAc0*Woq5V5KMTU zkv_Ty8YOJ>4oI)x=aWFEH8hz_3urecmfk777S*k`lGRFRiVHv|`|Zm1Yu5t>0w>nZ z99htSA3XCzCGLocvZmY~``B#@zV9oz!Dhs0cl>;pjjQSbvK(d1heyZlv{-481+7{@;*dD2Myv6z>)%O7Dum=g22Yp4bFv^$}Fw0UUPC;YcV8&G@ z;I>5P9ysu}7{O}=xV&8~4pY(@1ZbB|FjrJ-&%gMLnCUOMpA`v2f9IX|*_JIkl#Dbd zwz+->>L+jsBR;mJ2dl$|nwKX4{yT4p*yw!$zls$wD^pTJKUg-$T)AWWE*%Sdc5uPC zPSj4n4R9=d4|)E=_ibcIi7dKr0LVyW0d$sWg|b=cwmr{3ClKm-s}jgNEZwg? zZ*#RpR=mB%ZJrn}w((Ke&kEHJC5y-x5l$AF72pxTx=;3A46x2Mre>$7QkR133cw@G zIhWgxMga6~qy7wNp7P9RFb4ug4L^HsA(@F}s;&x+ZzV&hh;*sK!f0{bTtz`rBsPN*7E zsa1%LzElatnF^q||M-`$*`NQ-+nN3}vVVmViSK*p5&OA+@Uh4?81P^;rwSLK?n>E9 zBqDSQtWcnY=vwK^h-VoGoRH~QjGQd=1^_*45Q%|+X_>#u%an*5n#{)p^yS{d(hYzG zAboy8G|n43+=92guKlYbg~A<`asB^lVQ|3~LSv z7~Yc}SYJ@Nk~x(=A~6XNJ&cuJNP^(rIdH1xuqpwz(zQj?VW0Qs3BQJc^t9MQof{vU>S%jo?Eu^|5HPu*`{{KU;ReDtVIUhYWBKHqTPgUXGH#>a=x9Jk?%7i>(G zG!PGX4ii=^Cy*XrG%T&mPmKbIBLJ|_2}pQlE(B=A+{Ij9Qj%vURQ==aw_n$ud3M`v zcPUw7$j)hwKwl_TRr#%2qqc6{F`uM`e?{w>0QK2ODv}D0$8(2IBat5q@Lwiu^vT-i z!B}Ay`o5kvH>UA}h5hyb=~;tdg7$)s6yOVNkBI>E0B@$Gb2P8srehX4UmT3P*@9#^ zFU^;Ysu$@xk#Uh6ptpzp=E*AY z=HmRxjuB>ScHmKsb%6BYx!hGEl0P3^l>6cn@mwNpzUDMHzVjSw>+7$-Y`uMfZ?sH$ zS6Nwwdq%*z+;PV}wqe6MJy(Iq< z`H3_YAA*-rCFNtk)jjs}R=zoy+x&OQUT3t1_b8EdSic<;&}*YA=;XTMUb1uNYJ0pL zoXK$kSh8Mv5*mI>qEM9*7a)jv_0<;zqVEy=I=1MX?16i2+xDG`!36OTo^y4f{JIm; zJKHt)t&&busu-TCDVG-OJ0<64kT9F7?dkYlQ~f^O?@qV%*szkDkOt|-tr?QlBs$Mh z?op!SEp^+K-Yf2YCOgiI$fBl3r60*Y#@0fJkKkWuO%n*72uRQI{JP08v19N}jLj!E zvaLkVGvZ6Wrf`P>6hGXc2zW9E{5K4{mh+O;ES*L+MWn|66N^ZLdO zn*S@cjsrwJ;q2SR2%`M8<>Hn3cu?^~>~F7|k@yu(a^yVN9mMB|`5+M>eVX= z%0?vSqI2TQAXy^t#fkV)e#9^l+mJx?=tv0q9At|K+xRY< zXO7<|yN~FrYg(g8+3cHA)c4?xX@BPxsgRv{=j|Kc_(r1f71{Q{0}t5CFTdbhWj$ zQcwggNFp9g^qJ3m#z@Za^3|_?)xPqTuegtk0qEI@q=eu4t>1F{FP5ahSR56g5|;YP z%4l%K{W#4(u-{WjULkj=O?ms9-?q_nXKnNP^ycenIZFJ7o%t|z{y^79|FLX}WQFvvQeeZm?Z*0$>E zteOU>mNHoYPZ?VnB>+Oa5P$}RT_`6Q!3&iCD`I|^|I8VIe!t~>O~yWt@{Z$x05Jev zjQMK`r1$OIxH;N?>GlhOzTTeTJ`ntOn+s%kk}YNNmgK=g~* z4B_?@K)ZCYSM4bllm9mN6%1Yg{b9^n$l|4Jbg@Vx^iQdnDskB1fJMqHr zxNz9OT*~!@8ML}P&p2n$`i)}MOdh{?#|-ZEw5@Ip9I!rs+bQ_F3 z-&fdYE)7WJ{}Ti%izL0kHwg!myqyKpp%l`@iT0 z^i{O-S(S9S7N-+(RCITOhVg9lxnQ3kzkJyS-q`N|g+a36h=C!eviv7fwML2@enm1%&BW2GxTFvz!gUy~%;+=jNhH1iCUl z0(=E9fHgGKX&g3+dGfd&II!Q@H-H>huWq#q7tYwJQzw)(I^3ShZ-6`I^`NCDvJAfaj*?~vt>NAWVwx}{@a9-oo0Z(VC1yJx z#>b=|jg~2?G(SjykS!i&x&_<_klxP;=>paPP*Tx}IR~56i?8P8?J0EW_=E~{Z^n~< z_7XAo<0If60tQEztFWDujdA*BM*2bhoqK#!+-uMNmu$8=FOpag^JS6`GXl0xpA*EwkT0qI}0|L@87leB2@&5ccU zcHc)Iv!DFreZkJ^<57VzN9X5yl3Pd^0t5+Qn|shJz$^22uI(Mh#HbkQ0l*TMD=Vwf z|G-B`<2d)2+Qyi}hg2W{i_C7VS?N7z!3AdicV;@@@QVb`bn4$16bjrghWxxZmdeR7 z#U^E&P_+!86$u{$n)mSi0iaJ;06`B+&s0~q`vH(1@VXOi98urUM+oz1mDo=g^UGwy zKJN}3_veSld+f#MUbNRjd% zk;bMq8Ye~e{PR!Qz#uXCwf5ixA9ME-R%9yfTvEay1AWt`t#_!$$2mlIp@TjNst7=B#N{p zSu4plMS1O&t(C0scaXii$6i~OedHkf*rL6*WJ?Z`WlJk-O^G=ZBnS{BKoBHA3OWf%2iJ=q!uu(9fO z&!~{eVz8IB?%YUl8-OLqGLp%}%NlDUrsYgjmT?MuKJ&fPDYSkFx0UzDu;xOrd(N7( z#Eu+3Vha~8mYsY^=Z?6*p?BVSQ^bcSq;CegLa{*fYu2o@wQDcaS}ijy;F-AR$;vpn z=YTaIIcgOGU}tGA7?J&aphdxvdTv=>p&2ctU-rmc&4DGw1uk>g(EKZ{@{XUI>=H5i z`vwLzm-j39O*VQ3%w0?puLGx2cMs?c6Baozb9b}NnY&n-4PMgv{g{YtYFrRTzxvgT z8I=k&=(eLr4p~!kqX-!)W&d5|*7{^atE|e?d`lb3`lzfS%JYy)mBu|bS)1#)1thuS zY;%XzYki79jKzFW5)pS5`<~r7r1aMVW zDf^i8gj9sAKx7KWU+V(4G)FP#F;cR`IoBzBY ztf8J@x;|U5Xma0A_?p;qnC}UStE>*zPuwT>J7=x{qtb7a6^NejVTS#409uEJ`VF5{ zDuONn(|5k!rJ9*RkfF~IGjo=*D@|i|yz%PEGx3b{)DOQ7Kziq+4(V?MsWD&iJduLJ zKIy~?^2?b#8&G-K%JD8A+1@F_4PqyJteUFXa)S(5}p%%`=t8b;VWfq?d~QM00bB#&R$IWBmRA^ zQk$1cw@5{NkZ;)k?E?x@$tV!MCib<{rxe&68go1;9oPk)ajN3i7~wI|<4I`G3mQP5 z2s{t#JnZxFaxpQ`Km72+_W93$-rWL>>OcJ9594nq=J#Ly)nD1yzVx8{(bk|XCM6F z2gj68u)xWaCtdr0`O9B6p5qfwJYi2g^;G28ME61))7G%!^B-9$V`^1Zpp^gHzx|s7 zhkxlyU$Q5kd{QaQR@p!N!#}vp1po9;|K!T&neuF}zy5l6ew)(Qe*4?sHu}Tfy?fm@ z|A(@F?&p5ae*M>fT?28fBh4?SrwX8d?6Jq}fd?LNm!vQJ`@jFYzr2f7dgPHu>@WZF zFO|0N#mIKP5Tx+2kA2KB+yjUY3*|L6HQ9p?KIr=EbI(0z^u0$PebluZ&ovnUJmh(|ekOg8!gx#pCYgkUKz<3MuFW@v} zy4dF%jvTYCfA^2JYT2BmnHK8mTdZF|-CIBX$qV9{Pqh-HqV73%%xZ3qt^)>pI^|e+ z)~fH=WVs4d%CulS7|%I5-nGvC=n<>B?v|KT;%A@vkyYHX!Sbt9Q^@15;S9G@OjtBK z1~mccQ5xa}Co4_?3>c(OPQ{=QUsf`|Ct{xuD=^Gu?)DA+#fWyo@a`2$&Mi|Q1c47;aI*9KT-s_Gqr8*c?@#pU zoi;v-9ss~O8K%8&&}NNmWXU}}K$q!9!Z;3X44dRRv5 zq&$WVX-y5s9Pp^1d{9OXf3?`pw1M(^{sE&83E7|0qA|koTerjt=e&pkQzH* zI#QOh0f_BP4CSOzL@*8^-oWiy3}9NoP8f{y>Ya;?njOa5*X;nq`pwH+fSZ2aTKjeV)a#RAy_W+aV zVUcfrSw+^9Q(_}>rocvDp!ANHz;9nn?jes(K0+d=p1F00)|hgP8W87 zv4)(XHD8#ioB9N7^uw};wPvbk}GE4LwW|?cEuIf$nmF? z=pAj&aTyM@cVKntmawMHnzKLzI&HGAzan62rx@hQ1!i34KsDH_+uPe!<`J==E|ESV z@PtyXXK6iQmMg5S)+++q5FnB)Q)SF^)0zbmfN-Bm6v#3WIGpzC6~Ro~_SZzJaBGac zrLXa-OGXFeeJ3?M zSZM0Eq0 z)FmK2He+l?MMdQz8i?9O!gb?(2c(CQJ`S{=sO(g?1>pH?R}a|Zy`L;mIrO;!>G244 z$sPsM4-MqlpqNhqyBCjUy8=89h`vV7`&9Kt7~?y{*iRq|5-ykDfG@ffm_+&5-b)44 z8jpM-UG{mdbG)J7UKDWt(MPxNGc5t+|CtAGvM+pmgW5J)#JKG9o1eBJ5yjNrez)Z~ zKx1%D`@6esu)D)5<=6IteF%Wf`2f=Q3b0l$z*?A~gZUpIPB?R5VBZyKSj9qn=bc^l zw*F&#x^=@Q`9_wwKCb~$Z82hXb;s?f<`)>~=gyg_d4vGQz>nhZG4_*;zPu-7`2pyu zpmXb2amp;Awt#^$4ETsAsUQmkii<4)c=Q?dIXCk&kikU1EZr`OFD41=zp2)n@s)9aHF&KEi_jsR zuScXG^qT?Aoi9B9r25XV-FfHxrH9T?AIf&?_+4+kp?Nb{$8y~QWyrqah7BTS5CA!= zU0ZlYnUhrPty8&bcW=LJV2zO?GL?aGD$glWnQ8vg(AuDJIsiCpy0HFEW$y`rftdpb z`nw%KJyk!pC*=zJTOiY6Ug8>L5%(ZsZj-T#dCq6BWgBy7=_o6`C)%1tR#c4+bZc5g0<~xAo&5b9ePoYz#Rxi&4?b)SS%R^*`eFrA! z_gVrVeGnwa+9v?gD|kU`G%tO^RCIPWI@=W60MZu}^~#nN^fP~)|4arv->*Rbmd!6( z#g*4v;jAeBZJ@Kw@=6oqHaf&a4rvgeqn47Pc)F}~NG zf^1Cd6xG|?Ykj$_FK5q5+;2HIk@&fLSoR?N)dXI8|2N}gy4flGxazSVWEv;1IZNbk z*qJ8M=@Zq{*{S7cXAMq!>Wi~~G4}iM^@0V^Cj!rNlh^!uz;+vd!xs~P9>DfZH{BGu zg&+U;#}P1cWMc|n{^ei(#Q?xhB)8mhi*ek71q&jF!RqaS#lQAzzvjU0k)5G0fA9x? zV88WSzvZ^P^Uga`tP5<#idctv=y1pS4$vI&0D3^(FpvX)9!~&^KlIQ;k=;9X>`=<3 zYu#^H_jie%DcP5RbQ3-@F&;#|d-rbp$VWb62M!#FTr2*|@BQBI*>C^$Z^vx*_rke= zNPJL3%t50+!uK+3)+{@BE{N<;bnMZiM{V)q#r9wR%YQMz^t2V{-+lMpk>CW*^8k9- z=;=Qb)t}=5$rGFr4xI4qH&p;VpmhJN0MmT)o8RP;uFcv0-S2+a{T}ZR!3tyw2!rT- z-3azrzka>__y7LiV@_w_od`hBe)=(N`Un9e1US(5FUh4AxDZ?5Vgk^^K3{*jQAWJL zn3W?V(a4C5xKg(A@<@>vER?5{eg4&N{*zgAgDs3>p&ako_KMAM@4-5|?&BY`Icrys zci2U>y?OIyE2yfq(omZ2&LaZ3HP&0z?YC$AUXC3Jj4}XS%gT$KAv>9iz>;6S_6jSk zofA2{;l(Gd^vWx(FhdN+VIwz@r#Pd-=}k%R1zU_~P-EeXGdi7APLZ3K;EQK<_v}QT zJqM5ni~#Y%ob_G+>1j8dC|;TLPKtCC7#yH2%`!F!n8O^7a)?2~i)Wu-uqf)h_WN+M zv>{Cm!bTr9l!dQFdc}rw?V|>oAm}n2XTfxP25ArrHBDZR58J7Cxf1LyrU zJUa+RrLc3%r$9`GHN?NW9^mhv^*}?j&0l%BH9hflf4PL8!#M?(Ew+=1Bu}h8vu}UD zH6Pk|T&^Tf1@=-oKe*kUj3ue0NgZ8j*!AHs19YAOsc{_;7|xx-|T9nte( zei9j`<%?Rc9vViniMlo5rVzw7^v0iRh=GZ@3j*Y%2yU4N&1PqX|IBzsyV(hV( zww&)406Y(fJ}htVIcD#wuOJ(5TW>QJWD%CGocY$1HA}4UQP6pbGJq^!P!m2ZBi~P* zYgM}RK=+wlQ)aWOqO7SIxxi>4VHUB4vn#B!Jo;{B@;Z~1HQfOTlU@Hm!+!6ae)ESv zvNkbOEnl2oP{zK)r>*9)%k0VzK9F>?d501wIM(nua4JsVbXdb-pFeS;&R*H_g2wF; zv98V)DacycnipuzGobnQl-BdT5#599H)_5mP`7{^cE-l#TAob3}id3j2Gwo)dk? zNf^x%r$E*jvQ-Ft=7m61*jsTFBFR3#-czTnZO0n|Ro)W=s%+c)mcW)>Rw+AgR+d2B z0=EM!93F=GtJ&$71Q-WF2DMt-hrr8n3@UG;SnB(1_wJp_ZoF!tT4>M_p%N^)!cR>2y(0Faje%d_7mhl{|~oMuf{&c z(qWBH*fq-pqz9B4mUhh%1T2(mj^|teP0h;8n6F^)@tFDO2Y>Ugui9%bz9hh5V4n+@ zne6wUe&9;`m4`Oiyf~o6urhZyJ@sT__WAwq$iBTQ#>PF+q4oEx0w3LcOTtVJ%+c6J zrV~i-vpfRcCioD*&^fWRCbFAmWtFJS%{IUMoQT01G|yx?*6r1+*9qh~N6!F%DgBsv zWyskYU_s8y8+116MC%!X6SJ~Q^?tU9D4it77)`twhQ&e z@oX1dx49{>*#GX9Sh|8K zFl|udmNQ!E{^+kG!ltm6WSwjRy$>tks;P9D6)nC}EW-;f)Z5E=y}a(5PQjiqD9q>! z*cZ_6f<;ROls{&#ZQo+^<}MKaW23voUa>jv+qXw+ok4--3*DN%sYw}t6*OC3HbX?C zKcV@PK-fU)q_<+5woJz%kABdfyo*!n%+r zx?)^UH0S&4#D6k=WQu*>mlX~=@T5Vo;uD~mtT6UN&Xy}(!UwrAKjOo!omnP(&RE}V zvSnxbICOC4cXUjiBYr!Air2_i4vAbQ1f8T&4EXq8(N)1Oc>4tJC2Z?pKImhB z(0#BBeG<~KF#9~@3Dk4C*yj`7Z;Y)@fpTCa&?CI~U|iMgZo&8e=VeK?3NnS(a_z`1II8 z_8U(R+Si{>yqLb20Q7x|My;)_jR8mBfB*fCnfuN=?~DNzCwj2qZ2+zTUVDKBp5L=) z&$hSTddvRgPyWR3a=>;{+{4O^qzj;@?!WuHzw62X{O?)S0X(D3RaRCSpnJrF&fSmE zKfm%TzhYMkM0fb`Vf)s%z7;tiwwL2dZQ|<(i~Udk^iR99CIa|}%bx5zOz_mnv)bQ# z@4b$Nzr4KM0n}kl_wt8-_=onJzxkW~XWIAjKmN!6a4a?e_qS}>;>z2&aih|ct&tHp z*S_+VuP8-INd!PoI{^Ck?aB#PUwyR$rNd4SQ#%as$kL@tje7u4UtC=57~jM9uzmY> z$MEkC)*qe^GF1S5xDI3w_~IA8=*lHi0nGOZ0Cui(^UXKAzzyFYecN;Fum0+jsN|IM9M}uDRwKMXkRuE`T0~2f(T~W~u-HKmbWZK~(#{`J2CS<vQ{NmZ^ z{Ps+IwzUEp;|C*kA&WaZ;x8ivVBh|p6TO<1- zd*DBSLKLEMIf?=GrYf*^;4t@$a0D3u6t0nhBc1ZNzDofp_M;pbAAGrM6O=EskU4NUE z%v)?tue~ggv5a;C=UvPI`T+r*kaK7I z)xhmezCiz^>(m*LfwHgefHJWiu|50VwZ&qnyJ2N?ejnC6_T$&zwRcX`yE|XEaF+e# zwQD0|Lwir3{b>7Mu^I;8xoo|2o;V9IeNld%-6b~r%NNa#Z8<>nefn<#`REnSk7J<( zL=Pi9BVCr5iye^Oc`aj$;n%Rhbv**w^<@`YPKlV$<_SnIr}!m#?^>W>q}j@bj>c4= zOQ5R9p4#EIEm}}(H(VE+9(PD!l9rrxZvUZ^a)gdDbuOBtG_+~3c*k5k?#G}eg*}IZ zKFw6PcIj*}wgz)a+@Vwcc|sYpTG|6A%8G?GRxH-O^DW_k1g=j#E=lHF0Oxd@GN!!r z@HcG5lG#>P64+)_xl-L(0o@fzwDAj{vD_qC&VBhwv4)R2KRJhhP}s;|5*tslv&#j} z>$2ybdqSBbfzyC~#XGX%fm#3u0n)R+2IR$j44B>v zYcrg(fW%n4k)GXyX8kdl{6t3sM318iXDd!a?*QUDuwdbkV||Bim9M#M*6iSUCc{2I z*x6}K&pm79>#w$A0YAL-w>DX`)?woT2RRO%u|*(yoS_H~dfF=-h#b%U4tqa9rRfra zQCnNPWG50B9pIVj1B;&*>8x41)7n7mDS`&exio=f(B0A@{4lLcFtU*Xv>hJ}l?&OuKW_`&57Fjjdvb4uZY%rK``JIZHPB8)O$L(D^V3CnxGs>N8!ksRhq12xOTV<5YEl zECPoQDGLF5FF-inLoe;S-n2p46Uuo;4JP?;E0&tYi_+O=D4;!Z(3h>lVj%h=T7A_S3woSCuA2rAeO~SF%>Ue zt}GI>5*FFt(&T{jeaendyllD4Dv>Qxs#N9iSN4mMeyhE`r!Lh~BgbEL)jGTRj(cpw z<%=TQ0AzOxFoHf`Cf3aHSj{6RWZ(<>Hy~{o=@IlV80qsv-~#k$*zyUqLULe!7eN3l z-cynOZjFH&&nq;Z`|%RnMj~MxW32GPoB&YXv(lHAR?B}GfLmJSzz6(aTU(~S7d^+H zo9ZWl2Au*kAO!`=WGK)U^CH3+1{=Kx@nXaCcD!`h=l|i~ci1)o=bIYaUHR$!`RNbb zYQOlQ8>}R^&%KWTaacQeFwI2l^IWg?*1K^EMlRjDYrBoeuTXK_^^t9fzDyU8-jge^ z27$F5@q`Go6dVx$o@8awSIX39`;;MmpZwhi9as~_<0VU$i-c~C#?4A+Z=(ML%xGyk zz>w zEEG6TV5WG%js;MJ>wCbVKZf-cc0~HOv$tw)Cd*DL;#uf@R+I3%lc*ftKNr9fdhY%> z526o)4?Vd>x{RH^>|{P!LlCG)TX8=C>BE3Yg19;~PZLy;CHn+G`W!&uX~=l&^YQGe zlV#!!ve}%|d>*{V%(<)|CbHG0QQeqRXde%xX9oa!d>OQrIJb1|VP&VcYNP()Jj>GBsy$cis5MKhc*#{6s>y|4%v3?y%)9uova<7C24z34V7rB=v!St3 zSeq9$N0!>Ub(afEb3%BhldkP6E2@Mixj_K>xpwsEA=|oDgk&P#xcA)+?@TfQC)ntk1Zao6 z4%<#e)!azGCo>Ri^o-T4IryI`@t}XoV=W%G3j(6Y7DvXf8iDBX-TFT12?IIrtO%j9 zvW9HF*2d>kXmkAGj2&Tcwyy&L8*QzpwT|ppo8~(k$z*|#wDBng@spK`3=)Wcj;RuV zVF!b7thbj;n%#N_f=pG|ZxA0`n@(nm9@%owo@sMy!m65Jd>+sK>n@h$AMV}x?Um7# z;1@rB#ry4(EKc_>Ovh=}Q}amG=se;vGU2}bo&o3q$?rHUk7oh_JkS2HOaz|ixQhuu zPkjMXZ`iOQ0_0|!m-+MOEA7yowrSHQ_vu;U{eJ%m5P$93wRYsl5w{7T_Lsl>We3Xk z#~eCz$Ug9a57^$ld)=n5e)X%4rJEn=0_fMR3!Ije@zIZd)c)`P{l9#52IzReBw%%4 zKS0edi4A1+>ecRef6n5?iz8t1EdrPWxJG{e_kTaa0uLzsmw)+}-S(;c`P8RAW#9P5 zH(U|%0B$zMKbICo^H)>^lm1lhg|h$pum9RU^O?`^)n0k!l`+ido`K#Spg*)10S51T z-}^L(1%@)f=YahYz~Qu4X&j3Q&)5UnAAa~@2P}6d=#N)4(go1d9`rHK@=m$od!bKL zCuE-%3;_Pa0*gLD9>|A2^dZNP@Avz<`QHHP|Nig)UJ6jOza?UzC)>a;{K7BTx4->u zcPc>zfam$VB$ry?LT-VJ2|!OfvarG+jNz_H%&o)2G7d>Waw3JXu&7W<(hO&C&CQD{ zAHe}r`}@+ve`AFLQq7y49Ai|M>bd{O8N20|e%`7VFPz%NFOaiwIt-j^u&V2Cjnv3H zk!$YNJW&*7Zi*Z*g)jXBQ72%0BsPmvfb?N!ZunBoFTZSsHBxRCM-|NG?XL*1HYeji z|9Axng@OoFB2s;XGIg6yAia-R_3Sv4vCoIw%6|t40f>G&f%G_-FusIAqmCtBOnf+6 z(iI;8T`or?1_%VEInSDtOu4XRVSL9R1$Z71Jz)BX=()n`g%ZazrVrv|f+2x4bcJ%d zR*kZ_c!$e-%|0Kgd+19hf%HE5y1ZhR+C6A13|4Zb*29r`7F#4@S-r# zA0iv|C6hpU-`}VkbwnbLy%bqD+{vSV(gD(wDW$rm$n_VB30OhJOs%Da~5063*WVY##0=cP_m25Y*=i56NzV^@0Ovi{f#YFea9xtl~dxx zI|uB0PwsNrw^(mqh=RU!Mu5amJao4lB*8QE1|fj+0O*mTq8#a01y)}#@Rpt(=~NNG zc#Inup)i2^XA=+Za|d6x9sBIfqo-ZV<;$D8LBWtUB?Wd$j_KVe&swK41|?#(cPD7PACVDx zWT40SBJ<>=jw4!>Q!)V3>!CVEP!kYmJQ>W&6C-`G4G8FvCnIcu49GblfZurMUD}@c z7N{87Yq@dEJFo9JXh)Bqa~FHx-B*bvEY<+uk+azPvZ}3JK>MS0&F;8NIuFBlS>M!Q zXZ0Vct|+njGowJz@Nt>=eo(;x-J`((>zB`YPg1iVR^V}`)?&z_ITZ>>h;92!+~=h- zlu=ax`Zp95-hKS2EnS#;5Ko8t{=uX5cI|^7wYlroq}`;fw$n$4 zW5;B`v))nQ8K6}hg#<=>@Tb3AxBM9Vuf6S_7{_w!o3E);Y3+TD9MF@9vk7R8@4@Od zwR2Tgw!nzHv{sy>3<-;z&N-xh)YjH2!j`Ahzq1`PWkp54^vxdqt`wVai@o{g>rVfi zHG7VNr|axo!&zG@P~^=w->&Vg`X7v)lT<0PJE=ex>AYU=#j(nB8)-UcZQEb7>Kksg zyox~QrqDjUZ!J5vI)Hd~Rg~2}a=|3N3=ZUK{aYxTN$@VAzoEB;vv=YA>=0mmSPZ~C zI{Xairf6q267Z{;1lHT{A>fHnwuB3bNJ(u`5f#Q zXk{=<<4qL!-YM`!ub6|!6Ts_*g|Iot>K1_IJ>aHCdSsV^IZCA4B+8aJUfGjvXPkh1 zp;z++jOGNl6os-@49Gs-E#S(4f(;1pBmkmM;Fe_B=fD5d9^3ZPi^>?$Fj-Z`-G9$* z>+Jt~=zd$hGyq(1U^sXS0+t!20<}E%w3V;BDkft?*YU&FvF~lSJ?5Pq9nZWiV%&>| zb}$Dr_hgEZzD{O#;W^9bz&BP8PzjF9I;2u2|&5C%=e1u6=GLv7?ZnArj{Tc;Q-y%db;@>GT9zkZSxLH=eNWD7JyUPTcI-C2 zc~+=7Yj{8`^IghJqxFC@R*ixo$?~EuWCME9hYG5!C$GZ#3f0%w-X{LB=p6T++{Agj zXeNN!9z+Sa8IYUTVFm{}92RNw=I5+U0k&S4FXzu+DBR4|>T5M_{m|HW&R*L5tTNx^ zYMuXp=1T=WjCA@_rt~>g8*8!`@9gfi!>0oK7w0TrAQo-CW0{alJf}?5BiS<0ebMjy zT!t=pR{oK6NwmCQxk~KIg<@a!KHYd=rq2?DtpXn|eUZ5#5i30bLa?(VElnq-W3}64 z1Z(m4?-}C(Eqh?A4-`lyi*dL-e31mBgng&18(2ShrseSQ6MaX=Cg31DCqF{w@wy>o9cFiJ1*{tkIS6=T(0DQd%+FGn% zHicaI4w1&=Z(G*kw+!D%`I^gIFt$I|e|9ObzhnQ~%2=}4$_1oXXY;#K{`73%KG=Z* z@F$|n%wJe3eI_}5lmL0wk?3iF)O}zfeH{>ee_xN@hkVBhpKO_v-3;#l*QNgkL6x%S zxXCskvj9ksU?*X&2=_@3+D_)#xk57d2fYOR1#IrHx+C-@hzAQox|}D$WB+9J^cm>G z0RlWn@L2>1B(l>|ZoIHQ0Z)mXIn8@B{0Fd76~_-x;Pd?v7o z0H<`s-+MTaVj{nNGS>h+kKX75ooEN=XP3h@ddvYxiDBkZ2-(;fW z!u$Dtu>t6*^Ux88cI`$fBc=}TXV?Dk5=L;!k#`!K$Tg+Z0<00$1B$VcVl zAOCpd8FedPAx!!R85JIV^wH>nqu&OUwh?xHbz)qd%4IWiPn%9IN}h#bR(@ z8mU{yfp=^`Y&4ZO-yGSNsV_~9Sx$)z8?sqMqd<1a(S!h6D8q4D7HhO=)w(0Mq}y6^vUnUvp&(^og zXw&aNqB#6;*fh(K6OOD+RHw0$5!l!Flu@oA-f+GY>>4W|+gv(LxZf!{?rEml={ ze9W$7fb>05{&5RNGsskWBQSr?( z#K_yF`74?|f{X`kt!JDAb0UXMn2nx@b-6(m0Mg~I!+Lwp{9vr}X)MFwc@FY{9vC`E zQ9Y4(12Gvcs4Mq_foi50^M~X(Z+iUe6P+#wH?f$>xjvD2_IXl94l2EErGjFS1CKss zkL+u^r~vegovc|93_^W2dyK z!np$@O5f@I)-PjwF6^v*ZT9%~U3Tzv0OYxG)k3@TvgMH)oNMc_@4U3jdin<}S8Kyf z+IQUwfh_cl0LE|Gf687uaMB(B6IY3aepz5#j1=I%D2@3@uYmM&!sh5*14JLT^U6Od zHu?ZaPY_lXK$lU6g)bufIUr`g9x;dxX60CcScdWeNK9~i_}ok1r``gEBj>DiD0uF^ zw5H|`d+x>E?&r$obM4B@m-t=ob3mY!ww!>7;qWPe^)L1 z&`L0NtXf=ag<_YUE`jNu0F*pAQPwVv2Cz=o_2SC~lzn70AfZr(@>Ppc2X@DodFglJ z7FayI-L`z=?`_pG1??534xrd~__Wn1JIs|Id?4`!QrsHD8ZLH7ST@J9hM#lm8=Nxe z3}ac}VMVPJFnN#de)~W}7b1C+mud*yvgRvEGE47y*C^5N^Es^eX7D?X_)IebYt(ZUe#= z&g&Mys8jlV^l)X5R2tcYW)ZhGBv=UuY0eY!n6}v7XXBp5da~5#tQ%r0wA32Mb|Gn z{HB!%9A368m<#=JWcnMa$g}*Ffn(lpPv>)>Ux9|*MOsJax&VVjLG3;>ULqjWToPM`xNfhv(PQ6^Pz4|!d6#$h^?+XXp%NaaSx5rB7#IkWVZQE?a<;oC| zfwrOEFkpq~`;WKDQ__D6sqVNdf5($aXSlB?8hHFOAyv#uPlk zhHw7AH|+liNPkw&`E=#3yKl4GH{ET^=P=fYHB+{so}QpQf|3YqN!A&kZXGxepmL{x z^d9^SXuVi~1IJE1S}@Gm)D8ViN`(3tVET#YkkM1!$M8_L4fJK}z17$^`i^D@X}x=OL;!!V$q`yd+w zx)6f>aE1cU5SZ#|w@Quq0HTo}Z$9jR^9T0FuEX8VB>!yMu)==sfvatq*5F9Iodd8$ zyRz9}pUSO2X2l9pV7?1W!{(=5;B$O74KlFgR8?4c8X2WC0i^d}&2ZL0#xdskq?m1$ z5hYt$&jdl&`+3&(@86?&>?)l2pj9l!$%ax4S3c@SsCTAINYT&VI_g z6O8eJZl5ZU9zoiO&KMUw)>3 z!&FPgAMEIWwwR~s?_Pp=y21HL*p`zIkRD*=WGx`uMJJgHawCke$!2k7P0E@NAUy&g zl6u9A3$hV9mVCX7tVLP(5zsQ7;-33RnF|sj0D&xp*z~(pmu=f#v9ssS*v#75!UJp+ zKvk^mcG${F7fxrDGFtYavRfY5yiI`lb}JE+xs8Z{zF%Z49rBN94dPQQ0#4)U_e!@P z%AH|Dh2_?sQ=u$0*NDJ@_xnGGWD=C^!E?;v0f=60pGA}RD`@+i2r=Ju0Y>>+o3B>( zGctb=ggvBS>}(Nmyz$01J8)2$H04j-u;C7^c~TF49q*}S!p1sY+2QT`j!7Ta*ow@m zF0OS3U|F484{=;7*+DYNKJSU&yzi7C%!c~IZeFNWM)Fj|2g|`k z9?iPEU*r8qT0w3--D0e+Z*#ui+L;sk#!{*0WXGagvgY#{(Rp?yUk-A-red# zLt>-9B9whE{>brvhqD9WPegpMBz2f58=yNl?vE$XV>8(qX)iC38M2OH9a>XUrgt$j z_H))ejbgxO4U3KgfZXFe2y_5MPoO0d2A98A?DLEd1gj7zK2vPztb+(L!0(8Jvs>{S z{UYdNeQx{$NFQ%Q^Z_sgE$|K_{y9ztymtqO{&;*>Yb!(>1n`nQK<~0AlxsNdY?`x` zaf>x~D&p<8VWK}DsFN<40=hVaas-Xm%na-%WFO$UGoEt)sfzE%*pocrpZC$nkNf8x zKpzi~4};_5_i^K})c?|7Pwen_$9=UZ)pknhctGa};Nnb6TU(n05{%m3=H{wlKXbD#U1!OV^TRtB^@p1@)buo!`je$ARS=N&-bqi9@!`|$!R{l<+O z-R7@<{p>3t#wx{rJZ}cE_Xxpm!%G@#n)I{;=`9 zs;i?DC0P*=91^*T>J1D19MC_R1(1mV^p8LOxZQW(ec{vH_b`B-a<*>WYL7kknA^v@ zxqtuuNXCFMCtuodsRb^u7Py!I^svw4Gz5eO7!Ao4a~uXT#-)6v(=95>mh!5I+PJ`% zsWdx_5U^Ewwp4s(&J=n-?>Ak zWg@Ash}4VJ*&yCr7l`E7jGdV=n6z4%)&q7kEbyAkk!lQ{oHuN=KM|o`_x2 z-jBzc6JJK6-;|3{2G9en4LB*nfF7K31WVv-3Nt8pg(n?FFHt?l+vbB2eCk7#_J*@Z z9DoO9D_KDa#$dz!A~ha0EjV#ab&82MM*dQ zc|I^x4xS;gefFL{Xe|Oo?AiCO?K^(LN(=MtBez^`l_gQT%$9w}?ZtNvySrRDuhxF* zhV?P*+S?DDu&w)#TbG>ZH!YiQH?5ebaZpYV85t9b=2*u_ug@GgrX7%ebiCtu*(eRn z^Wcaen<^tqj^HKJ#=>mH|hRmNe!>SbweMzRL1qNRDQyV&4Z;R4+&UI&7twTVm zjbHeT<>qUg%%HI528hGDhB*=-y=Rr;GJxQ4CIeo~la2)&eThKpfdl~hy?fuaUAx{; z2FWYziYu-b7_-|B9onb=2LxR1(mM|TzsgpvTqE1+N}bvveIZ!?jutfLgLN|co?mB; z1?i1tSf42Pam)o$+yICXc2$@^<20RhARK=D|L=57OpM84nC^DYNxei&-eHJ{poM@zUTA#dOQ~P-mn9vMVi$7(KQEZNKY~BzaMwx z`V=Ks7!8=KhW1gc-JI9y*18r#>-Q#I%ZGmm@h?|+Dih|$sLJ?aPSj}6!Khq#T}fs| zB^4=CCUv}HXK>#}Sq~x@-a~D>ddFHwp)bs&Fr4+;XUSzhe9(n#9)HPvLMIllYFHee ztwLmKB5CNj$>IgyulLaZq$gT@CbDc1MZrbd;}8XBIrGa;8@9hxL7m5fDrm`n3(j*b zxkk9R^6%?dqfOT1Kn+SB+e`x)B`TE4e7x4@1%47v8z1oG*7LOVuEvRJ?Xti zT*=xfiG+{mpJK26UyC23=V!2V=W{{sz;iaGUP-gzjYd1CK=ZQ_yujKG_Hpm9*e}8O zkb7}fX^|0;*DSCZ zNA+`xYG##JomOB^)v>7A>B*vol*&JuXg!I?C760SsUg9Ab6}8{aMxVzR zL(mWi_-$JEM`^);l`7%K%0_!;g#mtC#uSk-<;f-;7+bchk}F9Ub-Deum>g;*fWq=6!&ZdJM?C==r9q~ zCrOK|-3zMln#8{lJmlc_VKCPu4N$oe7zR}xy*_Vb_^&;i*p=8Mr7|!Jk!K5Q7Exgf zqFt!lLJv9biaZI4egghBvaagjj&GjDL8+xr0wVZ%Q4q@z2awhM$7-{L+L^Vo+}xSZ zRirNy<+HS&N57$}(!|1-tT}YFm+&4|US8H>2Jw+Z;r0q~n!ycc`RVNQ)=hIj*knqH zuUnmcWAC}@Qa)~UkMQef;#PMeqr$Fl#)Lc;NFmyTazcMFdIhGEEmNI$ziTD7-UJ~A2H4V?Pj zw}4Y{QESrcL}!)tYM#5s>N|w46;lSSP2x}f`qJ#qjDbjlXorw+pmr}NO-NA3B)0jq zO-zz1w4D{ZXYJegJHzB;OgB6BD`kZKZ0)>y5V*OQGH58RTLN)hXOb}SUwv;wcw+ad z`bey6{uJ_I!$ASgIC(t(kTPPX+kWjjk^p&SGB_Kus$Z)BzSH^n*GuhY3ETXp6L(hA zDtaQuasgHy-;{lM%K}{dNVJj265m~A-2;qEzb^e3&F~A{eJb4n)FQ1WIutuMK@AW3 zpPXqkspHB~vb-RZBYippfaMP1+EuZ7jne|KT#@SV37ylQd2$%<$fP|XpaDhEYX zvM$B;JD^!-kckrei$JJ$$-x0*wGMav#rd5)rnulsobtUAu`{bM828-lg;1Nw-Bg7+F=7fK+Si*By^@ zPmzFH;P)P|Kl0L!>*a3qMZoc#|5#uq(+fPvZLstW`d!5ulB;n$+iNvJmihD6)1IRA zXV^pL3tqa(W0_r)7ppOmRV`FG#vgLKok|`Ukhw%`GRIQf)8HYpObTWdK$m}<=6rz(z0 zKlhfs7(X({?|cpv5{bZkLV4Ge-NTn=nS1!siB`XEJ{yp`nl*HaF|W$O0q2zPXgE`X zbN2rJ8n~J>&G|G}=!h!dgY5q+;7{{OQLx$rf}NwREKV^TwEUwZF-(4KtC1;~v<+RF za?fdie;w`8eQgElonNi%`XJR$@|)AzoUf*}#YSfX^{2YMF1D#UMjn<0m5>hw2dg&q z2x*3a<@qbEtxmxX(PCL&!ROTR{8$UT)v0-WX6PUc^+0&MyvubdQ_AbmM%2ISC?oi0 zC*5I+OUFSdbwP=IwpjwY=6#S1MWGbQU7H$Jm?kzuh_8(L5&w`9QB$V87iIK5IqW9< z51A8>t0=y&=13o4pKtciq-{Oxn$UqVB&(~a4cve57M>`xc7{?%I)Cl-Dy_wyG}%{X zS=dGCehKzua5<7M=sF``oS@6o#>3{Sc?Lb^nGNHuvy+-=& zmQ-=a*(wuI;0NXYHsI>{gwn({FXc#aj|$?UkdRWi?FTcC@aF^|d3F49n&xGl)iz?- zn_mUE>ijY`x)=r`-Wesu6RuQm0m0Gb1zzm?lS}@(QatfFA?kc~l^xMrH{q4@{9?Zg zu6y@*=cv@#sK5uk<}q@7LN1>a05A7yFktzX-Q!d|qQdj0A3utHnY8c7QU|e#Jl@M8 zm;O^^h<%@!XQgW~EY}sF;Z@cO$ri^Quce`es5JxuwzUCrIi_{I8wsf>Y8z%`*kSosQ9$(Fv}%rBgI+`Xp}$GH z$#rOxM}Vp4HxDZwx4Q}KdEcjhSck{>Sv4a&94jqB`9<$re2_EZ@bE>fc+n8o?)_)YZ;brd0l^M8Z6xyWDoUYLQ5v zg@(qm7`&|w|v&daQa$kC9~|WI=d(tkF-$HyuY{+j_@3Nlh!tc%U{;_{x{qhv=`Cx$gsyF<5@< zC2o62@G(9$*-gu*Z{+*57yNlwrXv!q6VG(aw7!BiuSHgG`0s61RTGlQc+R9* zADDaO8c{!cwGeWikLmF`@o)8eJW&T=Tnb2|z|Xj_H)+X8n&lseL;I(;zV?4BjxSSL zuoL6F(Erryc=m1E)28{)2t{GwIO%u?kB>(g@B0CDs9155IzeyO$vvwqj-)B66)|T$ zpkqB5QD)=lN;%nyH>=opm}&H*-yO>hIxiT&)gQom^CCT?N9{-dK-3u37O?V?tYQ}x z>w{Z6-bsXpVQ{-wsj3D=Kmzy^9iEPFTVCQSp;?2hqb&7C02g;<^fKwUc&d08yoFbx zx7ki`%UxBvUtX)AzYT?VwksLU*UfQj4n)f>?B*oLjKKhky5rN}76oCSVFy0Ss?k@&><-P9Qcw zwV|c9Qn4m4TWs#;>x-H4h%)pB(o-TnM(v!Kod4d+_%|q z#+J&u5sDBX?G?LLS3JLEd@>Kgp1Bc`!&sMq6%AWzyJnsWS2`K=lGu4Ntoy3x3q>Un zN*4SAEErNxmwTpiL;1ZqCk-r5VgN{rekSTTcOm}MBj%pzWhP)+0Ms`EPMzQ7>ILz1 z;1LuI&0}wlM2^`oofXaM7a~u;nZ2wP{zsFrZ-DrLpC##Sz?{H?v6){fPv2jp0APeP zls0!QI8?SHeKzoQ?If29ZRzIOd8`;9?^o<3YV7043Ed?EdU4z;b_QjD^()U}2ruV- zvHyf6TXl!x|EyrGnnp%lNzSg&34}Fc|D(T|a1X2{4cxOsewoefK_|q~&+D8sZf$ta zxETE0&Y!FpZ`XS8)x+-asK&B5ANrIW^|@TB9icMlE`=)N z9ozU-=jtOJedc#Y4Ubpf+l}x$556ds)@GWHcC>CYomnCx~bLnwX=M#w2erFq*LH=`DX1A{;$goBjI^9 zrr2EhLg}rlRQSSOThpv|T6_B4#2Z8LYrJ7O$pu6Hg^U$kDrApQR7x#uvF7{b47~l}K;Xl!}#|Vpo`L5gl}2uaO=~*^axop;YT1Lgis$#uVrWR8FK)RRAA$0lIJ) z!T#2$>^x7)p_hvY5bGU4fZ?J@IVW$nQ@Z-(?s@czBi)3wtI zD2Nbr(?!&BS4^u(j`gA!eQ&1u#kd+K*tB@BuGuYECeW=1&FoPm;6j9{i*y6xhpqn? z9WV`??C~Q)_ZOeeEfEjm>bJM;yai?Ud<7s2->0&FJJ|?HRl~?7N{z_>GFNHL-7RVk zOcgdkokW#ja#H{vP#f^z+(hPWf%EdR$lrjKMw>6*zbr z5m{=K=-ojifF8_##Bv>LxmEQ*StVS|RcT_u$DRb=d~JG!W^gqa2X%pagUKrS^bqud z0UPhRDz@ffC?@udJ7E7IZ>es=mr3piV7X3!U|khUX+r9P#+mKr()u^%H*yBdH{*US z994on-*ecPpiWCT7qV=QhAi{DklV*ZUj*2vVFTRtW7F1?$;{&1cja)k~<& zuX5o9X&s)~YA+{GL)xR=%oBKeYo_d9)^J)+yF_1ZLeCX3 z1oucfe~7eBx>{Lrr?qyUlNq_ZCIv5pHb`XuKZ@RK}Y9#Uqn=$SM3 zJ->axqaBeTGS5c@LXD#8NgYx~({aXghs*HB#zs4ur>U2+6U*Th#utZZj(R5id>Glu z+)V*bbOWFq?mJTg=Qo4}ipDtn-+)Qtf8EQ-;z7nzVdvd{>z3RjRdO{7&#|NLo}g2ObRo;)lo|Doc;Y`Ktr-&i9KSV9k)uk3rf{empZvzvn3 zh_h&X$sO)l@6=Hlwqn{j_73AAbvK+T$7~b&j3+~ijFoAEWQ8OU*GYWgt{JO^$pdZc zeVOk88CL%@fI-!ot$=O_IKyB@sO>(QoX60nZzNSqW$}A57wZ-nR(pOz@oMZ9Fr+n$ z9@A_tL+H@)&%qVD;YW(?GcNUYPba5FbS^r{5*3NNYqsh#J%>*GKUHPq%(V&-UofOX zc7o-T9zQ0A%&Qvv1a0={Rs6|UG=rKZf<5PWR`xUX-P1P*7qhH3f4g-Ati$j-4>umD z?kbn|_un+M!x&eb;;DFE#hU)KOG2B} zCH00`ceMQHS%Hqs61GYWK&hp-tNB|6Z4TD1*es%DhAJU|{Xd^93QX-#s{~e2s??-z)njZJu5db;ixRb=jHt}X$m%grv7e|ztEJnSu8 z#i;o4MelP?8;@}9@i4&KJ&H{v6p9Y*i;85wlx|UwSwk-$r|hRrWdcaKT$nRF{9h># z;ZCXIG;_f8TYEh_W`U`g66MZFwSScKC6Cjsy1gel?iYUiBF_U|r;E#=@PQK1C7l^| zZUqi#(7h<`3udxL&N@UJsyIXtqj=lkG4aOt@L0<8?>e1?&y5^^qwoe_6q)+tEw)ol z9Q^bgH_p=beqJZf(-oBi)9r^%t&>lHOd*M@3+H9|W^)Nn@9MJoG$7$H{h&Lu= zFHhz?+~5?T11VLpvN`qgWYE!iXp#ljk!Ezf$7o}@=}>}b$_cQ>wXE~jJ|v~^e-W4< zYOx1uCu)}0RCimeZPTI&l2YJU0ItGzcTq5v8A2=L-hTWWEZ|v8b|Rut+kT2ST`iy^ zZI1l+5M^Baaag^}wKrwX-#hVKmf2xGU~%n`?+(I&&kwC26?b9?h3FcNZ#FYOunbUV ze~`K6si2?SH`<~6^M>Y(0)s-VuVV5fv$Zz+Owfc8QJ6{%`m4a3m+ zum~;(p-6*vs6pdu%R4#Hx3Y^>zSNdU=;ed)isyRr9H-$?&9`%J8{3hm(npaJ2QH@W z&AmR$eYWbO>dYt~LE9KI?Rl_FGY)_Z&~UC0<1qydICq>BNU z;L}VFLk&kPNBNnD@@~ZUh*ON;=*-U&@r8)Dgnv8Xzfkm8wyH|rKc^9BrN~B3{ zd&SpvRF;dcG6Mn^-8cfL@9OhdH5j44Nm;#Xi{1U2SYw6k{Kgv>H9SwQXY0mM+EC$i zm?nO|s7IdsX?!iy#IsALQ`vW{H&MG=GL0|@%o~rGCum$I*FJWTWW1PoeV&uvr|Oaz z+9$wnh8Kr6`;Yps^d$pwXDk!*6HgtLz2$>}a_6T70W?56_MU1I7yNKt=5YA}RmkaE z2+V$3p~V(eFm+hFOSuve!IKN=Jf`g&60yCZq05^M?vUEb}>)xlcloK>92^nI0$tUX{%Muqd?xO8){EJ-sZYnA;&yZwb;F z&n96rKJ4HPr%{)Dv^;X(b0V#ok|pf^S6wKJk#gdOAw4Qy2&c7p?*5x(w+lUyyF zlF%6-+mj}0(jRg`n7do_9XQpa{B%`pN!}Fka?1iZnJ>A1ANKJy!@ja+fIh%4Z^`v8 zBQulS@wqX^SLdtHXVeZODO@L%;Gz2ZO`iUa`)wX-v(FgdZbi^}0xE3kxRB_u>_GT- z?2dm(4Fu6nibWrwK-Cqk+_}z_7w_Na_wzSeW=W$gtYPq*zfoUKXDbZ1otvgs&=EnB zC{z{UuMK~dvtqd^qmG-Xj=fmX9Dola^l#TI?Z3G!n#dUJL3H7#PHd2wp0P(V`b|~* zkNS#=u^YK@Rw%3;?y{*c@O+})+lKz}EbO=_^UL$73C)4G@_@lCF*llUe@VatOU;rr zss|(EQ}_$K1U#VdvH^yi1gT;Q{;FowGJw=AO?;z0F6SD+p47}D>IsTZp`4zOz^}Mo zbi>K4<&AYJi7d#5xTRJYP*~GvmbbyN4;?l_4IQqs8`V7b0qHSrboEjHDpt#V# zvwcrAI9hiMIDV)3fG~nR!J#;U|DOdAh7xY2kD$>vND%NhuvwpoFxoT3VbF$3a(*H*Y=I} z5KU;SNpy|eVrDffKB;HLcu7}d0sQT{1qSayw1FZeSYLGCTWghMhuAegCtz4eg_2 zgbBn3puoKpXFmqouj{LZN=Y!~A*jhRvBX|$0)h1--C)Cipk)71gC6uf>BseKT`l9H z-I63fiyTG$obV&%i}73nMzq54W(LlUPApi|hbb2-?z^`SAmee^28b&CPiXb@ZVZ7a z!^2Wo+!CqNiCa(C6$iyU?P2Q2FRBefzq|~>py%&x`zl}gWjgvIO5i@~Sdu_75|Ls1 z@~Y>ZK0S-C8~n}9!aXJaq|$_&L|@VjNC4A7oDV%8V-x6L$Rj@>CB`zf8rBsd!YY;R z*t3264VXXynZ>(w@RikM5oCv-L`YxPy#aj~r}w*@|L6;`U1x57%ph<0s=>*If?f5u z)V^r$iOZ&t$N|U>wxtV{D?k%eMiR6>%udl_#BgV5nUh;v&g|KoXB1N}Rs0asf5DTk zXSe-&6EUV@l3JTqWS)Ea$9J~)$t}5S^Sg=~{^%FTtmpk<#{yCZAA{zdqoYRcqi~@^ z`&5m)<$9d?3K^KDc-S2$+N|0qUg)|;~ry;!y|>tl~aty2Q2W2Ku- z&Fp7;slqk9PHy%o8p2FeejBj&){=4-vzMibSmw0L{5V~BN~F{o2c`58>2*D`Z?X|OdZtXdhEXRq+IJToaSxwm!IpusFSPWRi4L$Bs8`TfEz`3M zHXKZTSLA;&S$sBUk<6bwb3|fwF`@u3Y`?CA}?gnI*>&)zU z#p~{a7IIXRSGQs3YuavR#>=ZLSIicz$*kGR6*Q)liIVRh?sTL!Utu?uR>Ddf=*SrU zHO(J3jx@lHt`YWqM;z5{XjpZavEp8pABB;ghQB_QE)qkT!9K{Itw6%f6#{_hVkzR1 zibJ%0&Sv$N6b)N(AT}_8@le#Kb5Vaw84vG{X2hoS zKydtJ1lhl~C((Tuch#_8!>TETLMDCNfv4g2xdWHa-sNz_Rq_G9Vsr@&8zmJBm7&h$ zSqQ`jYtL)-A>1oSFM4q+W7NVl7HkCA$G4q$um9UjuN8WUeKo3Pu+jZZx7MO?yGRD_ ztu7Vi{?i(%6Kk8QIJI8YM~gZNuEvpB&N_QtogtA_7?WhSy}%0(T&0PoktRIoiolQ- z-Fp5Pv3p-%DpJM3OFUi1!O{*1MN6C59jF+RYxe8@1efxM34Oi%+%78&YVCY5;k-15 zLOR*g1`b3%*HBxFe_Sc+vR76J{HXPAmKcI;J(`?Iaz@7%bd30>M7~^(JMTb~>%xOe*eXboU3#ttZ zG9(kfKbV=8 zKlO*Jte-3ZB+9iVe+sa#1auNO(+AN2EO1n!Fl;C|?x+t14mOV~c1e}ioK*w44klnn z0K?sn3%mNeyaBLJ!M%3$@$BwP%$`m&2x1xH|N5U~S&|xVwNX?$ZN9Ya4E_ zsLJ}gDu?HkIqE^xiu(aM$OGtN*KfTgw=zzz6LyY}H+Rwz%xG4PUNn=-`ah2BYlLB? zf!d`1!88D2giMvh#Wv^Ebt&K-UVMUhaynWKbT znUK*_1UQs+kV^g39uZv|$k72%LbZsPk9E}XFU(qG)-6Zy{q**ec7X*XIl=wGJ_(~Y zV$rt|qYN8jLEf=q-AkNjhU4lClt}tRaTVwPfQ(WDt?z2oz|=b@msGy8E>MGL*MYuuru*NE@>BThb`9JwsvLyTccJBW3>l1fO|JF`z<4Pvx5XbjBTC?t=gif3x5`q z)5DJ}BxPZ*{|X4MtMyO7qQ4rlv`^1?5G#d`GLlsfyM49;75cnjBmVGlO_TU?t0i%G zhfQkXu3L)Gj9o6cUCNF$PU^EJ07v|53#94MJrlp^+LFT)*w1_ErjH;U@v_lR^b68Id~Fq_rSC$k_qN^^xcU3HTfV)FzLrKsoit4neydh%sa%FT;Kh9mbahX5 zf=dnp-{3pYjODvA@f62pEIPwJ%$md0 zJlU_hJR!s`F2je?8n>%KV?1Z(b$*72*vOL@0p zR<)k((I-hj=TWjWGRdUO>Q{8%XqiH7w=JjQG#1bcq&VDl#u%y2-)9RDzIH6jy_{lK zMRvJCakIm3P;_T)#M|B6{w7pG^cQmzCsN(Xsg>-plWIHP-rgo<=r*0MdYM|an`B3e zFY5-$auG4pF26s%=VsCzBJ^hTrstHqW__bPH(;Ie@9orF5hD!J?%A+t1SWDC%!t$! z)qtR~f*D2geCQvxMh3tKm2VJ`2BZkB;8by+-eXeT^S(7{&nJBui&U$1)r-iXdvf58 zj;_k=b#FBgN(a@sjYiwI^&Z#94hN;L^G3__N~(K`jxnv@+VBOFbOy~#AkwX(YeBE` z^iJ$vfF-|vei?gGzu^{EUSiX}{e9MCddYPb>-TOQM(5xxVu-o**YeKFgNzsDJ_B|# zdz)(ymc1siYaoG#HOJgXi0pgK|3-_5mQi!SMqHE&3EV7#zz0Ws1;x`XzNU2--+mkT zmU#SjegI@ckDLr+>{`UwT1AoAxOs05O`lp|itdtbtgml2ftS*E0$%efKrl6R-}8AA zXqB>ZFLRk~j~jxD1VGR4^$lnhjlhtx9(GC3&3G|dwC{OCFo-*;=hYe7l9BE9FJa8E zyj?!J*L9LRN6V5Nt&1L%f9qj3`Q>B%eC0=w8i1@VF7SxV@&V-sFnBVn4rSvSbR)Qi zBUg&u&M_I5+!tII68{2}TtCMSib*i)uJr6KI)KL)Mz+ZY(N`E{TIq-f@pOGW03%rC zB6#zb0c`|U|)7*GKo8#shZvCFpOzlM`MqwtXxWWAC!Ft?C%Dsep@5`vq$80V?Yf zt}w=R!MroC%5SIOdEl&%e4Iw2N&vIX<)PV^pY3#VsA3mypQo{VBaJ)t})uGAn#&GD=8y zMHsE7+m?_(sOO2i($4X9sU!bh3HgIm;_I;>q9dN+KpPS2bY7J$C@C;(c;=BrfCt#B zod#flYk=|XhSy{j&1n)e@$It<*4?RBTWAilPr>rMi7J=qTxb;V%WleRZ+;=q1~2_b z>&9l6E{T7@-fo4{Kz8muaP*~lzw1FpB2%vKKeTommC!=;E`>D@bujvkJ3MK2hjZL@uZI__ z_ZOS$zb+Q4`ZIE#tr(+mA3#P&xYVV2Qmc6IkiEF8D=V+ErK|Zqm!5*N3Ws6)K!hV6 zH@$i%7i4Pbilx={XD4wyTM~ZTdez*tt3hX*%s|O}g&2 z$1X~l=jVJr>nh!mS!%e*%@)6`>L@u0K6Ry7Fl=!Y7Z>sas&c?*WSwi zZ1I;RxWUdmi%07^$D$U5@5{t0@76HQ7BxFtjs2-jPbzsvm07IzcNYci#^~@qd!}de zY>N3g4tSFH*Y_Wina^~(Eg3bGl9&DpCMwPW+4zO7Gaf5`sg#s}p!}cd%BD=@e z&MDyUa_gBj!h`$P1-7)<_*|#%)*igq$Xj#KvDfIB24&D@Nv^JcKb!-DA=A7 zdLacLcz8qV-<}Fa7Fn_$UDAy$K@7CQCEpk_>7}$IyzF2b+n1g!6+BpiV&?Fd>}B;Q zSyaO6!gI=V%lsSg2gM~SqT!R1(wRDnc$d#&5pFX>KFVY@Pg2B6-q>IhXhrbwhMDL8=y3foOEu5QGEDfk zHS|yj^$LaFaBA~df3ZtlVWAD+MX>!bqMFm2dLvZXD4w!!1>J~1D)%%qIFH}8PR`Wo zx5eRI_$c0eTrd|@w0qEb^*4OqgdS;sF=P<#YeRR@xo$R&Pcg`K?mb_*Tk$q9@7plL zp0)a8)sNbz95@0{chqv=r?;JD>7}>3TtWDGds#W9(=0lWYSY_qzTa|!fU;Wp9*AW_ zX@f-|+1=(%_t%UluFEWuK=r#p&FgxDnm-!ZmO6UlV(m{(Ig1Ebi^tD{)iT4v6yx^? zE&ExJ>xJDcxZX|Glffwn$;YU{m##dw(j7=>Blt{WYcp_f zO;q|z&V7Do;IMGSurDr{NF6}&b?ZMCDigu3KsE;$Eo~AGcsrPUaYXdEPV~R}t-F_I zqND!*won*T5&(Kfk2+y^`rPz11N35&pnQ$S_W^lDLVTx*wzq%yza{H`=TWQTyw|8t zkYB2a##!j^<_C^OOdo5PFaZ4`?f;%39_MQ;v2JJssZc}%$!6z`Aj=QCjsNMi>UsSC zMSZD@pm$ zZb#~SqgmSh0Qj6d)AFakN;cj1DHXtz4KLShJ-*X@~p>>u|YF{WpIf6X4RXud3r% zV4AI{JuPHWA)Qy(3dH&F$2y8^#KK#zbk!M%s{ebg^-9 zuCn(pi(S-Wa2?VA`K$D*<={FqD>23%)?|Ptqx3%^>lfJ8cUz(fo$hO;4%RfjuM3;; z9=FCul#~nTp-C=Qo%8588F%3X4xJ2?Z#ORbi818Xegi42hhDe;<|l0V z{@v)so;d`4aO^=UQC&Idc`oePw_~Gq9Zn+N^osJOjsBk0e<}r+JKIqf8^5Ja7D}6P zsI*{>JB_f$?+4^570irQB|ra!3cVZHl!ig*6s<=D)_%RMctcwD9ZSn% z8xq&zAw>d^YS{k|xUdo?i$>_^w(fmYepUO5?5WveT0 zjG4%hK0Ts5vUc|cBkn<&a)3*EfAzU?w(n=D$rVG&otQgVl(NL8C%pGG_WX%;htd5$ z-C|#DBxb#OoZgdPQiX2FZ7%-Sb_z@C41hnQP%uu6*A90#d=uLDfJ zjv&K=0CTHX97mO0_MBRX2l>DgQ;^r6MNC+!x)_pZtx?bHe!qbZvAG6!U4AL<=zitTHo+cBjU~qp6R8J062~IF^pb{902YaGZVG6&3zHOkHY);(%Y`f@xdw0X6 zF6lpB+b2$&l6Y!VzsXwFRCUto+geeQJ$yEwQ`3!{K?@kzK6FjH#u#cV?nka*7whxLH`GVLA`XW^Rd{5UcL1{B2ljMjbIWPjNj<VKfrZ`SmvMaz3Wa#y6+mU;pSL?6|wnO_%%Z;ts>i!LEe` zY@PgFcT4FLu@y|3D z<#qhxW1%G%Mg~T`pq)o4cXVC+`UL=&fPF6($viJvB|PZvYM7Ht2#XTEAa%Mt`poMPEvk*=D2p=`qGRzYD)Ak zG+iX?x&O3LeHHlX)#tBoBgPgi4e(_nG?lgKhScjzg%f%|!OUn4@H)j;Vo@CD%EbfZ zu^KKtE?8iK0fqw%S`)d|d+k-6x)4FiN;ctVd}y@5?AsQ8X#)A^qncUMFL}9cX;3FX z!>}I-z25yr=k6JKtI=L|aA2@fg|dX~*T$e3t$4fu+~@u!dS}UENU=d@eGJqV&+J7q zklGZ?z04*Ue0J8x6q?Tb2I%mIlUFVF{x^rN!cWV-=Nq{_>s|z;mhl8ie$bGY;0?h3 z?)#SlOY^;VF{p3NyPY>82qpSwhsSgT;i|_EzP-enLm>Jk9(T*m2hc4bo9sbK(#D*g zEh2GGzwWhqQE@6362B#;(-)YlE{El#Mo=R!howr-WBlXP%nZJ>)A4uu%fhogi5u-= zWQfHb?dgRk`u?3n>(Sp0k*okA#rBeDhkdf1bJmeHac;PJFmYDo4(|A8rNd4+)%0h! zsrpW#7Nkq3I^;b!hrUO*e5!&7la#Mehxy%N<%6=jGn(77L8#mmqOB^`gM#?dVo>u& zQ&En_b;mWzA-B`NBvGv{k6EZi!1DR20aw3%VeOc(4jSX5(Hm#>3wGRIu9#ipX|?3R zuJ6fq$M0-Wze?*4YgSZgzS~is9E&2;(-v3*E48aN#-vulro?g$ABtOYm|n+^VZ?)u z>ee4$o5=Z11P@2NnX0k^&POX2m=*{OeC2l225Wr2xK&V%BG{HZunzA zA{6jiB=Cm_`gv&lcp|(;cam@bhgA@@9UtfwIK7muIE>oB4yPqD{n4q{zu^_$Si-*^ zaj3uz|MJblL(7vkg}(>DuojLk_@3vle-=@$nBVBas&731QV1^MX1Ng0Y;R_Cf;?Hi zCFPw3$tNpKC4GkyB0uhSgGPizUdQjs@Pk zDRm*+x+4}+VA9W{D+#j{?({kWp6Zq?a%9lnApol=Z zh}-X!NZW}C#Jr_;p>k$c>-TJ@$&qxYX)Cwqb#v5;2k)kT8@U~};^o?cEoCkn@87Qf z`rBx=1;@yJ`fo4#Cf6IV3V?6oT2}yYd)i||7MjfsOi?Z-%Zr`HD#)=t;n|okDoI5L z-~8`Mecq8&`L;>72sPN3=*x~5Md5$Ws)n`4X{jA@x4e5s-;bw$wF^Qt56(eL%uf;LXFWtwLOWCl5;JTtQXjYu^c6q< zua^ZOr{Y==_)@9TkDJn-<^Ke)FK5)K-{G4B%TdVFC&URyKL~cT+&ohwbWUxSG;bAj z=vsZMGn-!JeD)s)fJ9y5?&k0Tb)Xe|{U6oJZ<{$Q`kx_6oYn6?G;9mHpt}3-1gnvn z;gJXx+G=I28~E?Z(nl^wHLiGO!jT6*6CC~4x)EQu28Kk;v5@)zsq$--Nvqm^uCloz z;NOdYsrIvPJiWp-_uk$ZU(!gLrhu2H6nByYL_81ssSYEdI6 z&vu`JpAK68dYm2T97?$?m(hKdbOmkVJ&H&_aMfU}*)II}%#rYH^_vLy8AB(Ds#5_N z9L$KBbb*%#Z1)#KNRXdRwB5ei-NKSv$7I4Tc4Umcgjsh}2bHG|RZrYmhMMl87uY^| zML}SecLb(RS>DBXp}gai7{x+hA7~!TJLc3yaHE8kl?P?ZVNS|}ED^v+JplZfeaF`(Yq7|$q5rW?D$Su+&fP*fbJ#XDE^3oNLkCAC@2 zEH5l!^{{*+F)TfZVRQJ8#L67TvB66oHmI;TW@ik#qu=xp<*GF5hL#eiY0dmg(D5Mt z=B)o!+jcbGk;Y2^TIki$GY>(7jDBHwAsy4W6KL}=gr>oM^~v%C@n~-$E#*7S-s``3 z{X0>&$uV`i%HYudJq9?=5qDE^{e~6x)#4?TPJ&Qk7p2;5T)Q7zi@uDwr3OH>v=Zwk zl>GV>kl##iFm0)GK#;`+L1uzP&e#|Vr=uPKGQy=MlqlM+71vlm>V@)mz-SN6ppczo z%brQkxMWU<&JX7DJm&A!jI8H$esyGl^dg)-Ff7bGrw-@es~Q$tg-H9^nJP2*{h>Yk z`{RZfkA?>EgSLQ&Wg*|U4v~W?Iy%>ZhK*5ncF)c7m`h}B4~`c|cZ~IX`&&+BazU#8IEZ=|wJlu$yz zzK^F_{sc^AIK1`tJXK49VM%VC_oWdjiWknhb~8?`YWuN1Z~3IzzV&Gc-d()}t9gGa zbgf*%5FT!&Jh4zylVZqL_|_xXi(9x=c&gAdas#yLmpC0) zH3)?TbL}L?0lB+A?H?0Bod7w0I#s%uen37H8Fb2mzmdO^`CWH)EU)T3p1JQ#)z!Uf zE{5F(W^bpfDaB9oHXAv7L8s*vB)C?qztbfNTc1I2?h0yyQWq;B->zYCdwMxYL2k{gu|*-yH0Qz48(i!Rd7|0@q+n z!XLok*kSyLMVE-HY`Jw!dxy{UFNi?-;F9OpEFZg<7Rj3Qm?X4SA#3dtm`SIzkR)54 zaPp=Nq)O^=0&Lha|#oO6}kn!d4Z1~nFuNA0JDDh zL-79EiGd|*Q@lXSd%`3~MT_H~G7II^IA|>E8NfWX&>M#9rn;JmO&$&%on`0qU+5S6 z3&Xg989fkXHG0y_bp4prK|)IMA3CQC0>TA1@+K<=eA7-E@--#!7ofF3tXmAsf}HpV zeFg@|V}Hy>&SpCb!Kb}u0aIwdu0Thf-tLo2xPc};{+={J|A(fterSS?yZ$!1OB6&H zjnW~V3Q7tp-Cfe%FhY2Hd~ik zy=tc%<{iBj+j^(9M!-~j+QMnkz;OXMBSiD!Jj%oAT|mrDn+}Gz5ELkmxwyJqrXeH! z31}ji+gz-Y10kHl&HGZMeq>Sd&+lC?!js-$mn?xU=!K9?$8;`l6PQ$*QrCNe0s4}C zP_y++a6UC&cpAmZCcw0=-&1w)HC&16Nw~4t(|^-TQ@gVQwCdN4 z(9NRAOjx6}ilPBr&(E*y*e-aP1tYZ7J1MzLX&Kr35;m{*-QZ$cziO{u@mjmV?DoK6 zvao_tuhpzCj&{5~h2vqBkAsJY&>b|Vp>#mnV_7D(!8Gts(y$a+XIN3oJ;HqfoM6Lu zmCX+O`ZW7@756@HMi3;^%d|k1a16pt#FRKDy6@)x^!}t>q|;C>y6MSZ!y5d%5H;_! z18cL62e;#uF7L&T%t5Ft|z;Fp(OnkeRn`mWAin5jieZd8k{~ zXVD5wco!lVmF8puJEirN7{FR4k&$?&&rfE;k7VPJx>Cu_s^UG0yl5if7}VwvDrT25 zulOSN1vZ3bLV*=*95D;_+A67(QcJ{fN}tRHoVmXhP&_2Zf{E94OS8P4$WytH!zE+)O$}< zMFYN%jRe2nVyStk{n7T<%<+3CG#&NFKtV zZF@L?nI3&lHMW8^^h$p>m)Zk>u-Scvu^4w|q3ic~QK4lWF}VA3S-C#J&1LnsxjjFJ zQzclwJd=BK8`zOe(w`lO3@hQ+eBYmJ6nC?ej2WS0IOD*3yJLtmHc3K~8{tETeRtcB zwn*Wz1Wi<(tqldc@-$u&naZmbzO+1f3Q6X_~3uIDE2t4jKap~+keC)&^5g|R#z8}bzgKVN8 zP(nmCk*~9~%!T+?KIf}fk&vQi_+mRvYErlP$}dg>Rxi=q(I%z2CDZ>9r7>+TIEQR} z3=&%ZC1M4zRN#T80HN&1B^c7{DwxE-6F5%olteA@E%U6!|F$LrKbX8@%x%pV10{2e zW)L9Hz>hB02IsVWN|@-}CTXh_z`gUBM#$dT9#QpeZB00ELzoed@*VZK!$jSQ@rF= zTELF@ip$X-6rM2*t!@`4mhit&fuTcLGr&j0D!``|RX9vrFoXF}l;tN;zB~95dJn@@q84 z`|E{~&qg}yJ5~C}A8vZdK~Ys=kh#&^_1_-<6q^-k zqh#QOdicN8t@HPY2{hoTpo>?IuQ1`8`nyrO=}9AK9r?<3%PH6wSx@+?s|*ueSR+bsr2UGB zRJN(&MMV3(<(*|d)hy7+A1gnYf;+JQz6ozdndgFpOh~S;JW|XFYPEVKI-9wLkZlL~ zC`5_9kFr~%pCfKKlLJ@ki&ksZ#M#mBRW)b>=h#^tm0uJ)7j8rAN$c+$N7KY1=J9jzveN{goW5g$V^hGHyK?kh`LbwarNb+l48x|Ei| zJ$VHq>~DjQngIwN*nQ1^`B&bgI%wJ0HE=S5dKX9y%;MqXtov`m>=UmrE&!0wM;zLm z^}8zJ&wXJkWS|DH@HR3jZWwtAgfPNyPzga zeryl{q14Je&bPv?F znW{Tl`r(Hrxk$fxqao@AZEzA){f8jgE+%TBak<098gA?b2KzWS>I6jJs~y)1o7WQ+ zYPMc$_jWHWQyv=Y>sknIsW)cUY)DAIu5;IoM)>9HL6RxWG!5ehJNs zUV7ZR+Mx@cD0{T9&Jv-&x}9=VP4|o6eOe7CvD%);$VPpiMnT?8V9bn{jahc%Ma2P) zOc($*)vjIik&ZAb5CG@>&`-eZi^*D!X+wV*2YhW68P%8C^Wtb<&W=SgAj`9bf^ zJAE;Qffhy9oBbz`L`5{{W%2+t&JjXspksp z2?pSH`T~pqyCXOnyfjGvxqxf6SC%Ij3mJY{vx9ifY9(1@#}tRH2*m(>d}>DrN~Q;D z8b`;Pkjr1R2~v^*C@7N0xOzFdR4O6U0jsp-m$99rc<%&}4y}!mkz-vlYJsCJCEbK#Mpk`$tRH#tZf~JT7!trY- zY`XLB-vh@ZNNnIQnNMZfRWs1O#d#N9OhFbimZciYU)7ik2IteYaH-!rzxyiWkylHF zJ`D@?GaN{&>W8wbj{J*3vhhVO#!daQ6$TCJnF%rjx1>|6WH|@|*kAGPTI4`irj(zi zpR4#gkg1g_AFJi+K%UWruJjWizfXRofZ{SjY@lS`mV6yAYN#vP#VVhFAW67N7c)qK7Hx}gg43;)Ou-zyvL zxxASD1E1|LaLR6I%XvJ})D7cYZD&0L%uUYi6lG~L-dVbn977q2{NiW=kLB4NWVUq; z$ZvYbeM~#H0=JAyElci;91H_ID_$vdY#GhgGz`{!r_W}O^s4wgb!Aq+L9xUr_hlll zawgjoI^>*^Bo}{j6jBp4HOk%T_13^fYIus-RY+JhcCsr*T1Y7WPcgnz`iFz(cQ|&K zF8a(_PJP$WE6MFu8`m5rF~+srr_y7NjO*r!rZD_fbu%mGpxaA^#D-aH@DSy*g=Yy~ z{L5RqWoIK}UjD|U#%sSiJuk?oNr2S?+>u%-=MKY{QI(;N{b%it->R@1zCao_l+1?J zJ*v+aPAJ?(s-g29xV@y>;(rlmtz%F6WQ$mJTKtg)?a{C$6zGxD6Q| zQ7Qv}Q1{(cfl>hVb@L4rN^#0N0{yM@i%-N|Skzdud&bI2Ch1w&0NsG@NZOiti~l9j z$CO?w7fQ;iO;j|t(l29=jqb;POi|POJ(9!URoyC_RBwHMiIobH!cu(l{a7e#jiiZW zOJsn1HXrr=DCBk+{sIJkV=kNO{#moNSnnV%%5ZFH?)zAquPk8KnyM_nBajEUE6SI) z2E>m5uDE47OBDLjg&5za7(-Xk-TzDvue1fA^M7-%>J1pLiAnuffwK<+(iZ|`PcP6i z5%M+rt|U9X#?R0&(~#1RyXNCqv(wGL67@KbF*b~w6KmgxLu+X}z%H=q4}RydTEMBk-W2F=OpGzVW_A0wg?$yVwu#g*OPje$72*vnn?-tfKBLh`W2+$v5}4S~*|o zxoSqu%p+Xep>JE$OeYd75+yl36)r@Rym7Ov7RY&3^bQ%bPHBV&0(Wr5?u#3W=GthP-U$#Xym`+QpKCK*>I9z0qFK&_)6q4j@ z{^{yg5oh!>+9o=14ew;AzwO(2urO!BXC}l;6MKpYJSR|EtjApm;;o~I!TbnJ3t8o& z_pSUoqrV{}70>hF!7L+xPQ2<(&LBdpDv`#F%lMVLuSpu9zgBGCnrp@qhN}YilR;oc zw|yihmM>1_WWid!DI?PtWO*qn&%d){_UDY{nI!4gt0rT4_m#_+)UTw)l{fMymiE#8 zu)F6bLl7UMxbJcn8YWqn;QMb2?)has^F}_)nu2@&w=5iU0cBg$oxaK7NN+8{x{+bW6@@r#B$*1OyGZ$uIY|?KeoX-5JW~_GM}U@#vYasXO7{I zPD;_?SHCecypjG@fvMu-U%r~B7G(scR-RGd#5J7=RaQau9pgfjZe2BG;zna+;IuF3 zpp&V3iw&5mUf-yt=ICP=e11qX(_}S`6$`$sc584do(@PBLs}KeUL%O+zup1pHCeC= zQWW{W!~Y$hUkm@mJ=C8vQA3S_byD1W_oFtGqyVqM;*yeYG5~-##&G&Q9bv5e_;1q! zkXlKQxxg zck1Lkfqxm5)GWOH(hzpw-Iuo4`rrNkL2}yn)Rtzxdgw2KawfO@n3TPASl7es8s;LD z_A>*(ePRM%aMXNyex7-WPEz(w%^{vpkQFQJMW&TZC!V!MHM>fLNp?#?<|+SAJ4C_XfJigf=dU9G2U3XE^a~jz6B; zXa#pJGcbNlblf|P$gf?2t<($+VZKOjgIn(OTNOe?>quR<=kK+ z_EnM9@LFm5(6dN{LP)DM-h~6kX_3=%WlwyF!xj()F!#X@;Ll%iDx6u1Q$6rT>6SJ5 z!7M4?C1! z*&656iAj?a*(sCym7nb#{>*UB;jvMoT&Gzku1a2bo&K|&AtGIaRs!eZMBg$q(Oo%*NaAvE4^!D4;d_V{&0Q<+m zzr7v0d$KF)({dTaDpru-gVL{m4ge;g!C9nt3C;l~rP6SX;oGMV5O+@5sR?%)J40$x zcRkp6UK$8)5Q5IDw{N46 z;7@+c^NG$`WixLpq&Lz-H8)s;G26Uld~un&H${jy3w`JU2wF#i7tN+^;HS^8;NIP# z7F2Q!AAuixB~IL>_6SVLDU;a7-vwA=^i@{=5%>3q<^ll6q2Yog0G+C01C9rV^lxeX zXb3x)+K(#XEEB$kaXC{ZXE(ZQ)8YPa=ctq%OBcPbp)A-(Bua~8>}aB>cEktpLlotF z`JCr3JX7dc-KkcBJ#iiNadS{#o~xp2fq#>x|Eae?K-0|oEfPBLcS(rfHxCV1?Edc; z6I803DGML1A}_7kJ?k!j$|M!iwV6ik4`Vul%_UObP z%G!#3kBevDkNELvV0M;KIg)cpHB+p#zFF7KIkK$f&3d(p)rdf~c6KtF*Zui>u@RM{ z`R|j|?x4X7?>*m$(l|l_84*)Et?zn2*}oM2ui*@%asU=*bdG*Bz&eYWAE*&WcDxyW zAL3T;--PRn?RjkA@*Ea)GbLb(Od}C`7Bd>jUmH=@%~$lc{|N!r$$nd<&R9-u`;g|t z%fzM&L?BkqvK*39O1}Tku5|^~6|nBkEhF|DeOu6>AM6S_%k8O@N6uKYW&Ilj=uTI? z2R~$P1|IfTg8{UhVc&O}IFS8@$hSEdr{t^GYx^3U4uq1*jo z7`r9*iq20sF;^}01%A^}!f zD3Vl8(+W2Wd@mjPK!c|pyj^?!%;XUxS8em|x3XaIx@_7zT1g6nZhzo3!m?vMyLRx4 zDf8*xUZBI5C#r86K*QUScS7BL*XB=ENlnUaqz~bn)SYx|I*WE1KX8#c?L4){*Rpm) z5CjUZcO!2q3y@%r94TV_sy1d?$w-FhB4smDKmd)FI1Y`{Kv14}cKMfvR!dWH`|nCo zqX(UKM91@!-raKCt&4ny75r@ap&|l7YGH zsEYfX=bKXpAss%Px@_hQCi$93#~{HEyYd_MEL+8mGpG%;2YfZ+6zGPZ?Bl)hfV`$D zzX#N#;d|@>=Re{8f3tj8opmA_AO2h7`s<3kI$EpZqTD&(;t85#VG5%F?jIb`ZkRC= zBHVWuR!|KO6Fd(|FIeS^5b-XL^~Oj+ud4fPCsd(w`6&(HGXuqQ$~&&)RYU(3j%8Tmp#%ZdoA(_pRj)E zlh9R{o&>?nM?g2gT2+1--+4S5#S)9`q9YweOojOM*l}Q)Xox`8Y5*f~?Cb{1`JBLS z^VhxR+1YzdR0JZgBrrx*WPD$ILK&C^BOn%fy*0E#P5!$4cf=;)EBH?^f8l2Z6T!G9 zxVyyve!HTegy&;ZXcUm+kY@84urfiJS*dzXcIPq#WbXK|)SVH4T(+Ej3=@0#G0^2T*Noa)Xnb?5`e~nlR2b2&5R|gZ;L5QY-X~rVQ)dd? zQ~QflG{I&u0p^2=rU_(5m<2y-@iMj;wS&^!xNu#`iqYei5IzFRjBybq(T40+mzq`k zV8I@oL=n|WB}8|cNWo?cxeCCK^kac^FUxmJ5_dat&j&q)3H(ms+0Eybk@as6p{T5{ zP&4o1nd$N}cfM5boy|G!ZkA_zOoW;c*1KNMPifh9=B_!QtO#8W+HIeuzDT93zqDFR zITCM6M~!qvfA$$2W^$P01>ma%rDG^%XMqtZzP!pJ9(se!k{e>Ff9nucjx;|Q9Gx=O*$|UuGnB*3DA$j%B3vdcUM{`8NeeD;j(d%v~ z&-#{ABBx>AVO${K1I38Bd86%dd&!o%oeibPo+2 z`cxgL0pHaorh{@+fMz%pH}goA%(lLcL&yL~n6$eA3Y>KL!YX5<=B6NOCn`#@DHCmL_A~q(njKWfrWldqmeC9Vj2PO`)M=#XEik z;7)uY>uLdoAl6nnOxQ!JnBBsI*VKn-F?jJqo(tADD?KGlVgruBS8BLY&8iA z!$P+V5b3E?69k$<+LV1GoXXsTPMAJ@@K97Zk6oqdTqb~L#*mr!ris!IS$qwh^?Z8Z z24e>!vJ(T#MayJl?(U}!*6HvI-^d^|3WrM!*C2>FMh-IvdQ%Aru%A}P9J`Pa<-%Sv zPi8$ENoIX2vGF&*VT}M?E?T>jEUpHnLqtk?8M~&YjjYFd;P1J+H>&{(o^PPXf>~IS z8o)6Z*CNwceOQt=bjLK0hdd!GiVHgN%H$QQ)>-_B@xvz{NzFtK*TAUR0IR#jsxa=f zLw)2#g+89{L#X*ga8c zW&XheLaoh4Dx{Ow`?mCL%94@dKbB7C@{vWv5ML`;zw{U|1Z-CswyvjNtZudI8G9Zt zGF7YO$?$1%?-6%C_nDdx^W@s&I>|k}K;e6fYsm*x_pm}PHKoI3J-074?(K6!%2yR%V3X|(PrXz15pHZWr4b=ebF;KL6-+0iFe^LlfVyv|gx3F1$<`x z3(iAhaIL2*O2yhAWaB)frZ({f40(dGgx5Kyt`!I`nH3OZ?;XreNo`p;X1_DTzjn37 zUY^*{R_9ZbqGrzL3Sk|n<;8wM>1KP|eYbUl zZ^rRQCqe7>JTi~fFV4~W!SpDbiiAb3UtZ2Ya$5C`v1RPJ=3nRx{kv~}evOj|vIZI$ zxMoa`@_w5I3yf>~%O5$QQG1*48STufV$Qn6Mq+)dEVHrmqcF?Y?PGrt@g9`b0w_GQ z^uuI!SeUd??*6gAzBp8mhAo0X2p7e+qX*Y=V`!azzi*|fG%|^ z{A^y6=u)$URW`8nYt*8LM;Z`VywNm-g}R29YzPG}fAby!0ocv}`sYu{2aQ7KYbP}L>$qpBaf=!pGRiTM_idIR(DP3|`O;>De%$|HUWIk?(i55!RJU_&<0 zfCtAzpm(`ptJa*(fOL$qq$(%-A`e8BbQGrXbJcXs_cNXenmNm_rw+Cu26J4s!?ImO z+`#8NoQ8&many7@v-z zqmGX-sWywo7!q<{XSz7}d%lF8jIYpCcH5vg!*1+O`b~W45;J~lF+}x)WT;Mz60zaj zIsxt+i=oDjSKGhkEp)KsPFzGo(z8+Fni7a=%kb%Zi(tg$><*GtSm{c&NhfXeM1M?UoPGdAB+LEoOTj`UdDW4+)9%a|L(;~M(=95`@KK8 z|FX~K{6SXOMJ5Q?WC}cgO9}=EV?Te(|MnB#7DmLPw2!NQztpG?0U%0JfSnk>}q-ZptyyN3MFW8tHyx8cw~vAT(c$A91a7e!OD`F@JII zf3uVAv6G{|I)dZ8M*yg%!_sz{=y6upq@5+=9qLjzp?J$=_w|K8=E*GTu3jDVx|lFO zWKJN`ng~INEh6MS?MzPmO4RnP%w0JG54eYwrA^OY@z7F00LU&T92|h6b14%JakT|o zKb`cJryZuf&cjlU+XL{C_mIJG;rP_K71Rby1!GK|`x>3;^*TH=rNN}B(0`D-F5;(L z^^|6vEt%z>ZK*d?{*(2aoeG9gE-xk~_9B`R7P0jocH!X=jw)BiXWJ9uM5h~8F&d+> zp5R!1*X+`!*1?8H$Pe3>gvhAJi(O8JbviSR? z(J44snGG}dCly7%x~Yh!nIIP%8AJX7^`2srlKBWpuoNSWY6mrWzazcm3TvH1gAAgX zqd^6D_{Z_F{an;3cO3ukeo=;_x^j_Z5HEo6XjaQw_((^5>pHQ{>|k*Aup`u`thv1} zJmm@BOTa*(7?4dp;iKRdg@_=Uq+NelG3Jk+g;;Fc@Pf2?IFtM+$tR1F&wz%#oMjasv6qKCq{>Fh}xjsh00W8o^t z9rYVqlF=US-xH*7;L}foseI)Pc^D~g>M8-AYH}?rQfB6c?OK5glIlWE;)slb6z$oM zBYHp&`9&wn6b@QmR3ux6X(l_67(#dDCLp(cxP&vMI-D`-Ol?M%$f zYWu&i<}MrD%YQWeI_p)IqH<-F?A;Nv+(D4;wSMrUHq-b%{{y@0lYxjub2aG;TIkeH z>*o5ll_v1hI&Vn3d-AUfg}bl)g7tPspOI4Zl+-Vtdj|g2fGeI=&e+dvzP};rwD&3S zFH2shsOa_#f8T_%(+I&-Tqi@6WiGdq5ryg$KP?{d= zC`^vHp*swQk=RI+3EgR2M#p(~)>zM8yR6=_w%mq&bN08Y48vWY-Ho_;`7QdlaTrHT z9t>KD+-$n7K6It3D)GQdm#cJ+9wP=_6Xfx#%Hq~L&10E3kR*fy}qg)wmu7<{YBM+ zS34|^hZ}dyXSqn9_Lzg2xlcSFuOX8p9QAa6CxHPf!YZ6Q$$xgl!NXpp+b!DL`aU_D zk=X5$p>b17eFK?}<+HkhK+O@1Uu`<{zJI$2?l@(9zX7VvqclY&+1O+o_NuSQfpui z>u3!HBG$~gV8(R8TVy)_JvYbTU>ZspaC`t=ZwjZv^kT1Bw)APxqZh}BQtf;xCWd%G zsOObg-VzclWxC}tiGdOAfn!?t>HRQ9nxqJikh(8J-!&Dr)&Xm2s zWc1!$ig}61bYQM`1HboTPWU|yc7}k$>0T%d{HV$0`s=4f-%iNW*-hu(qu5ir`ZHB8 zeN=pda2f|rAIUefM6@dGoYox}jv*!SzS<0wTZAcuO@<`D2bGV$px{8Y^$f2qD`4Mb zs0c}qK8GO2Q7NK*%4xP4IYfv02r^P^a=Hr^>uhb(#LchO$*b?pv*X*X{702e8u!}- z&H^VqNFWIFp5TYSZgLY?!%3#WiKNvyUD6f|k*_TJaq#GaFQ!t8Qs+9zKztv+}ntR%}7!_A0_z-6SpQ+eQ+Jj+N6 zxA1K5Hu{z~0uK?;fgD#le8N#Iy96&7xKl#T`u675wh>!ZDdd~q1+0On|noS!k6 zs?~RD7d)4Al7OHRBOKj2{byg2Zky{+cF&OXC7EYwpEeaXSbXZ#JYE$(%`PAYjR-z5 z*HeyoB1cE|(bm4Y&j>xbCLT~Ra2vnRu2fM+KQsS_H>jP-lT>U_;AxXU( zHnhV^-@aXj_lEq*qH1WO)RWCPcaw7>dvy8Rv=UDCP3jYN&8%k!jZ_gqo34=73yw z?tbWHS+1{LX*}h^@~xdioN3I7mpv&xo4W7;5#t%CJk}vLae3wM1Bhlz6vQZ6><4%$5iQKK6xtmDm-XlaWJw z>k=n9#Xl%EQoCCC+*MMoAhS&B?ebA`3NSIrbNBJ{bKVJ_I%!nenGpu5kbTWrXw@#E zsfl+Sf@{_|ku&9qaXmX=zf0oeGR?d1Y$ev+T@QHy*ZbLd!QAV&2Xh_wg=g19T}y7W z*N=nkYu>VaCnk!Y4aQiR)_eLwShi&)j<(f46@d7xkLl{yT`4@hFyiN=zLkAxmKF5o z!Zy$Sr+@239P(curJi_-y(mKhJSK!#$ipbEvBX>u=d}pMu5R$!@iA*KaqlMKg*ae? zxiosD7p?zh3@2OOHScl*^_zd}_A(cT1Amx4WMtySt+6Qx@roRE{^ptZ!!7(0Ajz4= z`?%~nbQBj>T+}KLH%!SA2fA=I#R14?_QjSwt}%#9vgstQSCU_DIY0na=9~(^tv~W%cn!T)Gh}^a8@xwD zlUysl;qLLq7^uR{MNw>If~-mE#vSX(&)4a^HQ>-NJ1R{nvyVt3@7r|SC$-B=m4IGR z;_e<~W9?id5`iFqgw^copc* zJj_2}5FIb9N&oWxdT~R_hhN97_==*Pn^|dX^1=)x%$ zCErt&PX=b}&X|Gj4doHmEhHLZ)0-DvLPmXzZ)$74eEmk0^3Uh+n>bDqKRZX6q3ds0 zs%rts)+Qz;&zLxyh6`^NbB`9C)8o$$WsUeVq}MB8@!G6-aFFJmcV($m!H_ETvnD5Z znE*DeVA;3uoo|N~rh9!9J}E*kvG0O2K65PILQ3uBPIy)v+h)o>)R5&PnckgC+v~i2 zlx;%|@3eY%faZ1kFJs!Rm@5hkwid9UT-hQn|BjnB9KEs=6O^!s$wd{`O#(wB1Cdw1 zFyHY-#4=Xa=&5(D;eRcJ9;4I6ZpNmwhlr#zPnzS>Rjdo!VmC{6W+EEd7)e{V``?Bb z*|)&PtqQ_QuclX>50Y$Hbybx$>ymz44~DEN@7a1r-*#)#-yF^@P;;yoqRVXGh!g`E zJPiu|XotR`{(`80 z{KE3hQ+X?!yEZIr`phl8<4FqCQsDgjtc51e{d27j7rUg~@O;h8Ws5EZkWCyYno8Oh zcEvvzWZ62hmUZN7s-!{E!_SQTxEU?K_F{0Vv?QV1yZE0iIWN&DMlLI;u!0F7g4v8BDO#(RnZL6}an!o2|$7^>uO z;(Agh(Os}gIIt6QhkSN17kM#omM8PnSaiS>(0zX><9o<&{NSrbW!ElM%l8 zdAiK!pz~ zSP*3;)2d$v&n%0D1P5QeP9($o?lJgkmS<1j_+|}b;#NLl~uq!)I5N(b0ZL&0U z!LfD30crer5aeNkg!^v`T%E-S84TC4;NyecJCXkpdQ&?P1-5q)IAhXRyXezHSw@Jj zDgd|swQ)k|XZrnt%?Mm?Be!@A_>LOZmYf*U5VgI83u58VX96`7PGv(oDz*F`jv5a) z3(7!bs#xxp1Sb9qg<`EiJK?yk_YhEqvEN>rp#wq4*|oi~^|j-IiDW4qKXZ|5T}w41{VAXR`iBvo4I z;4_lKRDCC3_vKThC^(l};U@iN<>{U8l~UOy3302{bQOD}8H+tGyEmf_m;{4=*{bNXL z;7sHY|U)T%gv>ybf;V6*<?n2iY~rP5w4@Ui<#lY_=9+z#XdZnU2?2gzP^7naJ6fg#^xN14Ukcy7D<>PHGDP zyjZyPeJIhzm^%ZYX0?}(^N7fGB|5>=Qb_{1g+)>5z~-VE@=3$9xu;;+;~P3kfuQ6oZGg<%I*zIM+(dUS9mu6aHn zh1I6Sc^`sP;d6VnA5aH0$0^7X9RMon0zGJbEFODoX9>(YHjtM0J-=yZ7D)!GQJGf>G{M81G1+yCCmjZ;Xa{^w(z5{ zZWAMmWux!zysmkA(CHcFVmK#Jc3Qt=@3l0}uU}0{nkAM-@)v8A2Q0G=CBv}quLrsl z@!c>WA13S(^^rJPqISAZ-lJXCOzg-h3E7I1v3AauknQ{AUwsk-abd<80sKzFTWN;k z3i8jC?7C$dNWD$q`3zOdvJKm1PXszE`f51&j4B6I4&XYb(kAnLzy8KiOTT*F${zTj z?gjsC^mSC#I=W9Dwb8zAD-wu4H>TQibjziA2N6P>nAV3?VHVvGT^G_YWI*~@r{Y44 zRTyvJaRGp~J+6S{7b?XO)1^B2Qi)Fj2;aw^pv?o_=hGJw1V|L{RXwRB+N@_6I|63+ zu!NrhV(8c--j~8W*)1L0`*=uHsZr7aaZ;W&<^$#mh!~RKDXX99nGx*8d~qLxgPLoE-^!JZ0iFZ#IF@7+2bKgtpX`OW5w~9k(BFtxWw}qw zBd|OI%OmjK9f2DWKp&TVUQQzd^7x8YuMw-JJ_DX7NS+EA?jNuNzx&^9MMaTSsVr|I z(y4&Pg)7bW&}VKT48Ml$I`O?K!2S_NdT;n!FVV_U{vu@4IAj}!to8gBx zfeiCkt+RYNzP=H88`U2>ZO8bQo)h4-VwYkRbyX!SI_4NDmVpW$u$@ z0E;qHmqg0rdWN@T+2>tnWBy>k5?Jsc7n~4)T*9Cm*bgvj0lSlhpCy#xY~W)KLB9dg z`+x;yh6~g#pq{YcPyir}@r!sMJx+T9^I^l(pLaaw@Nk=nyr0%TU1Na$vHkOH`NR$G zGYsR!77t7aGh}$ijhrGe@@g8s-oHygiluWF%=esgGrFxJ_ri?3j}GbH8ctIHjWVqn z?wWJm!=;}|Od+Yk17ZkFl5kN_m_1{={Ls>@^7aBuc}J-)`Mz;2oPg;HFs1c$T6$N&IO6wDW9;@83$89>=-)pT04+!8ZP?+ZG!j0P^P2gbb z?;5k5x-Bk={3~Di+k^r1U--fo>>vN}A00dW`t{NI|CAELKK8MXX}rX^sU)g?fkE2Z z+U!%G`jma*6Q772ySuyFKKt3v+RHD$tU&N8fsHB^6ux9NH8u8Izx7*U71|!z*1z!p z`XBv~AF@?-!P*SVe0FxhGI-t((&X!VAqX@iy{hlZNxOLUvR%D))jE566i`pM%Hn+6 zxw_WYRtrEDInpLINWRmBDN;d}R5aee?GVR^pT&|=?u>y!QjJ#pYo>yl1TQj%|vJ$&=D-#apPXxx@A zNwinssPor?M5H{eCtKD8ER@qawg_Lao*X-O-L*_*k_ko{9AupdJRfdn8Au-; zjoz>Sx@8IMvSwxSHfq2=Um*7Re;aKu$#;N?0j>iwMqn}n5DEy!OMhR70*ft1&;z>( zuu!3bw8;o|1A)S@jpoY%hgp5Fli1cL)e__>k}VL{?+BIwq=(Hs6~O*P&SNfcUQlVM zU3v>_=V?yYEGZ3uymPfbC>G1ER}NX_y$`9HToeq|bMB-VqMNMZp@(9cpwdv8H8fmz zjEXJVW`o$K0lN(f)RQawq_Od;K-o`;)wa~Cs;ceW`O~Uek!Ab#-C-Ly2{1d>r8Z_} zo`=CvcY~_@9G6bFN@590FA;_R^$>!qBd+esU|%`<>&KNJ!{h6F;koV zd!O9zlf1F#33?~O6gC&YpP+HKY#kV#5y!50?zq5gVyzA(rHsly*81YpR(9`wajP8q zz9#aDE#{IAD_*ZNB{b z0!N@+^Vi*CnZIl2YWvV*4+>C`?*PB}<>G-Wl06*rDWGktjsTRxXXgRGzAcC^@W0{@ z1T4Y*pF1jD;NS~ZA(r`Y_0c|A@6(kV7l=6r71}!Exkl*V7CJ>v#wWGYF*bH zIUqkzNol1LwqCNc=iX5QNs&GH;Nwo0=oSgXfUe8Ry7dC4zF{W>s>+pri$pvvNJ=;n z;e_nv@$nwFw$0Q}{Kl*S#icdQZ>)`70u_Gl+Lb|40pM|}#xPEt4?eUoVTo_sR~HSR zpZ_gYuYhR+T{O^>AXs3%4#%|s%Jt~Fq4$vph~GY$$~y7-IurXmOtijA0prvueHy?R zU?1-Dupi#(>{<_b?s(SGuM#B^iPxt@zrzQLjuov$M0KlZ%q~4`RAV*bsv*@kTy@PB zs?yGb557DN>z1AN+ZaobR zme!}(lIES90wtWvCp4<0)o~?TIp+{TQNZ&!f|O`6nqBF@^XXL^EN@-lW1Xpe|NV$6 z%bdB~D%Nx%#Uyn#C03DSvbAsP-FyxE34A|#`!2X=$A3=tH7AEETB8D0wg@Djqvvyv ze9;~D;)~DN02KfvH{Gy_xf@8))wE@&OqbGLGpVgPz&U1fcp4;c=z#RkV1AC0NDwOn>K;%ZgZ&X7)% zsCZ`l@H*Y8q*Y=#09}(wobxfiuzrJ1!m|LV9KTMRlCbcjpqtIcMo%IDb2f3;it6?5 zbUKyf%^H$yzdQgHJE(LrIcUC2_I_Nw-B>L!FFKP4b}>Q37Jc{{8O$B)&`n zBzhe8Mu|vtyl#lT3XWh5PUZ{9~R*^{Iid1nRUH45|?^XE`ru)=;&c9=Q z(g_PTZ&AgRspqoLe#~coua9$IbB}rb5CC{*N4-GQ1G2-j-FS6&3^-jAofGkTV;E#V zpFSkJ56?c8CxWU%oAjy#|4E{~`GURa1Ntd`)$lyvpEq>s*ou7YLjnSo&s|cl{1%K& zI9ZkXh51t}kA3KzMO!Dx2=48$R!JcB?Dk)pxZ~%PgaS!vwy8xbN z4y&r!;Ph#aW64y2Z`CX$dK^1emI3s!BQnG1WdQvQ1GD_~@(3)C!14$zkHEY};6?+` zzgz6{C%*NhU4P?^q)ObsbH2e=+;Xe!{QgJhHTLt}$s620n;1YbC7J*q)XGQ(OubMU zZg01a7oNB32fxqK#VF^c<%K6LU+la2YuEa(Zs^wzu?kbxtSAJ^>^ySVGK!0mGSp(T zj2UxSz{1RTiw&gr8T_&A^WHeZIL5i`13QZWr1y>nul)P+xEPbwHBn&3LT`%c=Q15g z?;S(cwZ#dSpTi-+82J*qfPw+4hlA4e9m5MCJq9R3a9VK$$7~7E#yeQ%!|LD~oZ%1b zNC5rA{VOc26q{iX{PDX13?OI-I}yP(96bb97E4@tLpfnQFyXz%J|Ayf@-jNCJoj?E zpWJt&0@1@r58EOFh`ykxT+YJie8~6{;PTEe0yD(|WX1#16YwE$MR3z6K6$4BWjbd9 z_qcR;)z;b{_*apQarCvmen<|zEUUWr;mG&A={)kP z^@@=>ee10@IGiCi`F~0nK>xxEFW9wf*8~`P#Hy>Sr?guyz{l6W{&fMw8mzRm)E<8L zVS&S@gJ=ncJo)643hIg_L*ux6_inMRKA?bZeDH?{(Es?4|7&+lm_jndS}>J){)*<3 z@dY_{rku=s@WXp42sAF>)R5TOh85I+8NMKGz;YF&jg|J^e*4=O-?nzKz%pYzzHgiD z+psdS*|?tDZ@hlWj$IC(nX&>^uE@!@u0FBG=4RW*+H$*nvl2-3J|enLCWgekH!4PC z0SN%n$Hr3t(T^zZspUyP`aDY$@L(nx5r7^b{ip!-*-E|yNT05t#&@$6jbF5!@gP{? z&-3iL27Bx1MfdTp+qc^4x=R0(dmTuxw!ZY$Q@&g54=o*HGwU5x;8mc+O05w}(pV}P zRON(=0-vGdlqjIHs%omfu~hwtcbssLH4*T9Y#ZOpVEW7>|I3<>yzT7TM8Q&i`~vp* zt9J9h{t>I&eUtxs-mmEN1l2rn-GPM!r1uO@G)y46M|v$fhXdsZAfA^%bry6hn1Zm! z2!bL6X|NGyVsQg7OW=hd4-$ZvDg~5@CV`@71Ej~chDjC{`_uuR-C?KvAt((Sy|>|F znWxzp*6IFGk}s@xByY|J3Tl7;dCM*-x1z1l>qv59tJvpDZoA!bl^_@^u*m{)9~(=z z>(}cYPL;0;0F=Q@VLXH<0RR!Mj6EAI0$fzMJAw2tiypGQaY#gsYZfbwHXfQ5m6 z&6*9)c6{^ASMAK%Q(_v;vHknsXL-3f0tK}>TM{s;W1m+k`eKz~SE(^e&n>f)r;bY> zepB~_fNEMW*te>xM%4-Ss4_yOt{ou90DvE_KYYhJ12Ei=5x$C|lBy}TRRA1pk!>^P z#s(l`ykMGyQ(_ro+l{~fN?y(5PC?H z*iWfGSuUUv!m~_5VWPwezQ1ECPlj&@rgbC?df_wvTEP8)u<#oKqEDnkfcJlUzi$Bg zIH&nKEe^Y5rq=d+&9@|Tf$i;b?2=<+dD0Vx#V-FH8xjC`&+dJ;OU$W5!xL^j0QlU~ z6I4nW7#z@AMCBO3Yy;|RrmKFlb?bK5-c0L@XY#FGr7D^7yUdh8HLh{$?2P)*TvDgj zpD+WwXYS-2(D@jvM16GZlZ-GffcnvqA?-jHg{;I2KEEJ=Qo6C;qbuO=oeyB$gN=Az zJ$NZ#pC41Q##Fx+YanZ(_ebLc<({ICPSlrfk!kqEjAW`V_;Z`jD`P;vy#BzmgZ_Y@ z65mT!R+{dmc6;fi=d8V>%?eaO2fe4fyiC^^X8Gy<8{dyG`~1*Aj`UdU@W2NQyLfJ% z{6G1#>o>lw@N2T{^X*r!S@Y?$s_xnCs{Q0@j?Ekwa9(=XD1drIaS3EtY}l-BV|kS} zkWpeodM(=dfPRnKGH$~e{#3gX0g-iGaO*OOzsZOPd=g*6?!>;NLOGS#Y7{3;M*N!ZV}73ODK?>uwE?g!b2970 zOldVR*n@8}0f45PZ&ip8#-COsy$!cyPm^VWOjgq7Vd zyR>wwAJ^X>v=ase^Vugv@}9n+ug+J{V@SBfey$Wy7#VKAZheQo?tD-M>jEELxc#Bl zChIdBV~_7i8^h;_@2W#p%+ZM}lyEtlFoxW7_{4a=Nb2>N8J=73!ytan zn9hd~&_BOmIjU+ly6z;?$C>)?aaIu3RaOW0u(v1X(@&1$@2M~mp|_X8&w!&zMwS8e z369n>fIh*2THb7V1eQl&c?6b6AfXYs(E#-C2K#((Ynwgu`~R=4UsG*m34&Hy1$Jp@ z?XgEb_j8t=KQmw{p^K2@Mm|s&&NBB#B*q@f@kie52Z@gkv z@BaZyPq1u!lBbsP%_-w+V#O|*WIN^nT_@j`KXlBB_uZ1v@qEU6*ueG%lw)a@quUz= zG>8$EYDRj16_of5Uvo;Y!M+p=AfFCCPYomeVzbZ3yBM+OQnPZ43v&4TeZBy8o*@sU z$GC$Hvrs^K96$g;yl^f1dRv{7!zZlpo6kZHGh6z7Qt^u6+M@t4K|>r<1XM6SV`V9T z^q$ozTtd*F|9g#nK6d>0oS)flWjR;k{p7wI8xaV7NKDTH5+U&tQ(%X}0R`xT>*av- zF-%cDaOItd3oZLeG6*0SKrs_yAVP+R74Q-peScpNAj-@f*YlEYwX3$d-#t4*?TTVK zFQ*&p0Jm_&z{*Ncm|zV~N&=XGGa8P+CieLjD^|PdtqrctWdD@ke!ms0S{K=Ea5U38 zpZ+_oH3D)~M*+u!O=7tefIjoqd#p!^3>}?4cHo)U5(dym4zPr8{^BqGLSVD&27taG zKhs?oo?V2w1jp<$c)oTCuSn_+HKu2KutCmi0V;D;Dm+gBzx0VHDCfY@vv&B*Rd>Mk z)#di1cki-n>c3CQ*@jm8$HS`NqqPTtfxa|9*E;(YfanXD-ZrhMv>&*2n-vIHKSlH$ z0^XmH<2+*$NUz5_BEq9NHhO^cLVzmiQQ!qVw=>DGnAHaaav0OLIV-kU?#j(>znQjw zuYR93A-2h}GgG?H+W(F3ye_c9h}Be=+5`7aWxSbCszOJms;St*6H%uec$N>W83XFi zuqqRbXzi~mo82)zOH=duX=p@XV$Joz3EIvI z5Er`^x^h`Xozu_QkHGPS=I7O_$~GH#7X7xXOW-B-2Qa?}(ueH;2j*3O(1)_b(gk=a zS%!T2l&Aox>Qvx~AWi_ztB#zPZv!ANfhS-2jG$eyfb_9JnEp$btnb8e$0D9Coz6?w zae<)4s5MtLIe>6!S}!IhM)XhDP1vE_+zNa4*{7`G`Zd>Fy2kCMoA%f)0Z5c*DByJf z9ZLWJKmbWZK~x&oqtR9J0?NdeM?Rv}x_5f4Njf&V!`3Z3?6%wPw$_$LUAH!Oh$3C< z(PM8$+2^y1lpHu{Pd)iftx>~PTeDJaWh>#M-TK73p7;N=_g+7iWm$UP3h%v3?|o)v zmdmQj@}{e*dwPa5bRg$Nd=Ml(P=o{s{1d1LN)RLpf+ztLgdsqI7=dCByQfWcRhRcB zO{Mplks025ukW`{thgs`+=#gMMnqO-^<9aK>yFuHpMCaT=3Czq^Z3b=r&QHxi|!k2 zn~|QgQhQfp>x<@su3%en9QugBK6X#C3x+C#>&ZT!e0_5vNg5z=1jGWo1DG)m`UG^#m_nEb7*EVs4@${}D{ruHu?eLy$;fhIY0U(YKD%mf$-h>+7#pwX)N4r~X>g@Yguem5* z4Pi*2q5^>-;uTe=RC%N4llPWQBJ=aE^vd(dT!A04RLMppamACR&>aA+WB0QLvKF!? zx&So7&*|)^?iWJef#on83Dq>DKX6>YFM#_2)VYvc$h||KN!2Fbj#ny%^oSup?*B^% z^uaohpf?~?w7GWerhTpouq0gpXx_YeyTD+qK>2E?+2@~qVApS`dVzj_`sq^wJU7~% zJ2#bRcQzd3_1E84vR1A7dLVpG^{1nKYN0wR6^N#ld`<#YDw$OO0Ft7g;@9WflKe2F zL^nWg#8lR|VvL_9@k$i}#yIODK55wK9puhd+%FPL8B++)S*>)@Ou$jgvd^oM>2lRe z=pTSkB%8vHU#&5YkI;oN3m6dM86+8G>D#UMYh1_T*a6@ls#}R5Kp^_g&U*sUe_*3Z z7Ok&q2xG3YvP}1KNLw@RmWl(eXT&@|&{v~pnTo;!%?ga_q&3+9=`&%UpHRi1n_qlw zd208ZDrAz>TPj^EPt5w$W2$hZwgme`p^6#U=jAh)E2*`q;%XZbfWCbHGojMp(yLqg zO}A{Zd!5nqM0LdjJC%qK^II+5 zn(AUD{In@=p-?u^E{(4aJ9qB1s&S!5&snXKl#d-dZaY=AJ1knAztU{z-zN(M-76S^UG zGCBr2AwYV!A<=ih6%b!1vA;oV^qJ@uey%pLY)^<~+mk{Vo1Fsun_`9~_pez=L$g&Y z;XayhsvVo}#UXxtfa8MMDk zM3z*q-y$Y)*!&-qc-$7BfLCR3U%*;)u`b1eId%irDBDJpOz^4TlLPyZ3THGvB|AvE zmrIn?J1pHPN;>p0;lHEPM!s4lgRG!~`u54Mo@C<3B^KU6a*6y;%e6827^yxlJ?@O! zDW8v$C`qhY$)}v^c-V)ncY3v7VW>c_H^FyHwUKP?Zd`eG zBnD}w+2+ZO>-x>Ft!n>KE8CJV!UD6F6zAHfPbP2v(0(31f8J&WhphJTXBXNyta4$K zL;Y5F>eRw_E4}ede9w5Nly|2LY@7%%*&rJYq<15K3Hy9$(L!n3KOgc-D%_B9O$7f#tQLsLN`L?=5==XH|QC8X*02)M|t)qb-u{){r%QRb(Z7?Q*894v-0r ziTx?6Z?H|T{Cwe?88MMg7u4DG?e7GtUksw?`uJUyRo`lqRVUDS?RvZY>Tf@NBmne( z|L^^of+>{&jK{_1!1D{Y+#dBH&{R*Wfb;?hO^jHXm~zWzN9=BQzy0;6=WI+&-bD&R z{@rJf+5Rn2;sjR?F#4}Q``&JKMoj4YHZ_Q${$K!|we<|yd#5kheU-gO-aN5iO!Nu8 zD}3pH1PTj4dOg=7|FdG16_4e6i4j&$_gutCpC<;sJb?5u(4-&6Utyyk6H8XU*0y4? z(U&yu@}GVbuYl(P(Z}W7`P+8!as>Q*^`&FhoW!<1BF3??y!35>__5de9!6j0+5&+T z9;9&283vD}KtPd9ox_>5m22eq2^V|%d&dLi*?{Od(~m({S*^#W1f=Zy5C6iNYAS3~ zQ)bL#96PYjU%G2g{^P%ITi1boK2>{R#fEh=N(3y{S}CxQ0zfVRU;)xo<{JS#i){j% zYh0WuD4tyG!J|w9G6afXv?N%T3fRv%7ct~Zx1&ASKkF@24ML~u=^2;3p=v*RSOC%o z+axK;7n=YeJpnz0AS^(7XUgw>M^)pt?h4G%-p;B19_ta1t?uPltazDfI=*f4D`5KZ z@j`q5{oh$nZ+Cc(4;?yYk3W7=x})^txy0NRm9_`a3p-tj0%X;?f3?=t)fd=7M@L5t z=EjDGM!S0Tl7K4Fz23Zeo4xkhTiS0x^I>GaCbuK`GXW|B)tLZ{309AO_qFb~?q!Uv zcv{t!x<7i?>Rx!!ikq5}PnGs(f`*g>2Y}^?l-O!^-}E zH%ipn$n!pG#|9Yj%Bg+!=BfSm#sv%@2U1SbG3VA^7Dss>%o`7ea_VH%No=x5cbC(|G|coxKLYDXU{zIf_!8}0;5(+*Xgtm zKYUlZ=aeehJSE2Y$5lCHAn0PhQ_|Lm?%^{^@;Y!}pLC@9iDC3F*h)S(F z@#+TX4EPy+jt_}t(nVKe%k}Y)4*PtnwlfDX&RG{zC1y~Wl*&2)@d^dPrk^%4(bU^G zF1>*@F#!BESMfYm*ER(Z{f!$}?5nRn4dd##svaDcuG-nIaZ#y+Q$2@qiL=iS4OHqn ziWfkDzFpkco-U9+Q}+2g-<-BFRddn9De{&{RnrhD)^r4%2S6W`Ze1r1pE3EI^NWgY zs;I#R3w*g1%c+M~q56Pm+FC>c@( z0qi*vsIp<1^>#n%ep9~=e@%7I{I`eo_12AUtydLcZFlzMgq=~NIXbiTnz@w!&KixL z(0>1NSoc}~GZCNL>*}|vVs)*;Gc(~>0C_V_#B<;*KztI2oUm*))@j#g@F(J{h_lfX zi^9(4IcUFkS$c>qsd%#5^(NZ2N9`&L6?KR~XOkq&xrpE2Q33<^5&$kT(5EC|>1ms{ zD1kvB^7Rn6JG^Ris^sV3Tau1Q-+|%4?^CFGy;<`)0#O2B+tSfK%e(fy)jf5}N*Y@h znl~$*phvbj)dVY#9b5Q*xi^j}AR&%+(WdY?8lR$5ts z2r|x`5iVoUs#Mvow0Uvdk7JJBzF~ux&RW^7T~>YK@hDj=)yW>vcldDd<=}$@pzhB; z&nr43;>jwR_Saf3VL?Y%+^2c-zVM7WHiP(crq8~&$BFaepnSi^235wWl0SAiQ9&G4 zZb|$)DIKQm{$N-uJ&7jqt1uN}wP(CR(iT ze)VJcvEr}jxy&{31R^KRq$&vdcBbObTV1_KUSx|QULhb`97_&BpXOc20qE20sN80` z9?11Tt_N~GkX8>oOaS^Hf_=XC&RzTXU;kgWUo3r9X|nXScMn?M#EiZ9&;Q%B`go%@ zazJz38R`mdDrb1Q?HF%wx1q1Tw5Hd89@s{Fzs`4mX;ox4Z!lYwpKm>0N3UJ8@m7`R zjRj6d@7}V}d$+9NwbxcX#mMla6zRbbFrthX;u-G%UvWI*xWI9Xqywafset>F3Nu0t1c2id>N5nQb2mKV@^dtA)G0c zWQ#L=IgoyM5T>ZP@T?PbiaV8XB2vg>%eDk)Y?)K0{k12dvBSv7l$^6;3(i?UC@^c} z<-u|R8&2f-0ayWu9tTliybxnL@J7a%GcE#Lx%2HOHb=#anIRSMh~~Sr8#cdToPD04 z_T+TA6(}jDc)C+(OaStSuU{6!<6Ucf^UZ}*baeFDU;W#69ti;bU;Le)+RojP7j&1TJ2^V4r+{*~SIFJic?2{ru^}VyRMqb6&o=e$Re; z`f|`0s>JU7_n$jvTN@GqlHZ)UZr@zJ9kxEUYn%Pa$zuY3uK*m>vmAi*I(Lz#p~5^t z91^E9^7@ny7Qpm*dX58-UazTSPN0afymA}QFSCNO8Y|hlU!`A{I<-^n`!Ii3GS_QW zGdCACab$Gde)XGg!go8jH`%i%4=nnfgr2^F)q@X+H>sSBE$_H-S9#vJ#Mqr;GSD^TnfBIi!vwKGS02b;OSP1rTNYay!@=h@8==NE0JKzDxx@2zv>AE$G?OhX@9{u#OY#1i(bF6Cf4# zTqaCveymil0NbXaahJ5-9o2iy?P5KGp_O16AhrldU$@9M;kp6C5&VsU)p=GXHnBXh ziZ{LZ#-da8e)E|X$lp=@#FLA@Pv=9P=19PBJw3g4MJ&bebOI0gIy8_4+1&^ zdm@cK7aWf$^WVty?$gI!Fp2p@(Q( zzBFkm-*ZvlaNbms3BWjCfxD9HXRYCd*Q}^Au^tbcKP`5CRWwL5$v#y(_zrNMZi|xK z4~8HxfH&BC(W?Q~$HzJ28`gf9=wK)Ye707`%6Pl-lq{F0HGWn}4r61ZA%US=_v^@! z<97V9C-vQw##16NIC1xqRn#kiwp8|`##~-eg?080s`9{Z0~l@3?tK9OSttPN?b~PNTycO;(O<<7g>_sIbNn*1UwZ`o``GYKZ-8I@+}djHopvG=%DY;Fl{ z!v^0d!8Ql1K*CR|DizorJa@d(4*JTIYBs7(9QS@}f0#R4RM`k{!8DBEH@~q;RXHfE zSV}lBHP{!}=%@7x8-4li-5c4waBRpW09@i%x+(wCR~NhOl7KW_8sA+#VkPgD&uMH0 z{d>b(_~1@Zr*Y9JfN{(G|2G7je@npm(ilrRtzo=D+`_s@S^MgmO$$I0eh2)3e}VOp zwGg)Mjb>qFod%Qy&^SB;npevk1#p?}R*U9Qp?WuP?i&G%c34S$BGF__)l&w}er*kJ z{KN{YmX1rVDO15`*EbL3W$cq|z?|g5vpA$@a$^3OWIad6Xcl-I0dR?bc|CobRI}v1 zMF|ij+_Wt68%Fa)yXJ|p2)v^ERxzIx=%5ckLk_Tl)qPSrS*D;5uRPP+(`PrtG7l*A z`R8BOxEj7 zRH}4A4<+FZKPbL&Dxs_w7}3v>>eYd6B)L_oO)S4fVnaPIeeTYkTlUgRuZ8EWv;D5- zj490-_{f>dA|SmpmQPL;>poWoJsXDJR1){KuLh*ggnhpI#x3i)al`Tjyq=PtR;=Wb zqP$sY!E-h#K)pIO0u;*MGbyCnjDDFZYqHUTDx0cMwXvfwr)qA>?{2jA*wE-i_^rOC z+_tx@pD#M)2{+)&xGx}nc)yqN?=pE`TDntXXRBSmc3HMgmlAixMz16+NM~T9udb{T z8~s#x9t%aL)!BJJu+evPwAqdwyX@2{&292G6%~_+F&-Ga0Sz;6W|PeLWAdFYch54p zKR?8__hrvvU)DElw^FSS%*!3}0rUKC%fik`t_I>2$+AhbU~bP-)l8q;9oU~KkQ99Z zrevz=z^;w-i8KcLJ)OkJ)!67+vwFJjXd0Ui1XDHAKhv>uohX6zroM4|Xjgx4tMrF~ ztikTSj;%)mLuk+{e;|VDlg$>9B9Q3StTjDBw8NUj81Te6;R|qIp z(nX_^FA!{Y;?~Itm%|q?+Q?=381@_xS>utgZTt^*;o$kRTJ>hF>cj~vZfJ=A{J`Hk zSep}r1&PPrJ*gC3CzHgNh@5fScJ0aj+PcM%KRh%Zfc>tcyAHcaNg$ zSlZojGw5^aUL$Pu#RYSLL}FC&Xs^DGGRn9>m-X>Rzv5HH*NYF7zNEU+a@Y#SY^&NB zx1XHcFWZC~+JLm)k>5^gR?B=s0?z^!I5NGz(b4n_s2W4Nsxpu$T;CMUsaz{q68tj! z&qi_p`ZRkj2cS>0qjH<&dLY*WxgN;%Kw3TUumI>C_%|U2skZxKSdb8yLxDqTYH`A; zgrTx!3$p}Wgaal0`TVc`ADeEwXS)QZNk?$he=qj=qkr}%w(FUv(%EIhw!!&MIWqzp z4j$lSfc3~$&NfqW;2V{WRGhlzvBdR_x8DmH!A(E=lMTC`jX3alYpV@kxL{2$y}5As zaXGpMFP*cdw|~0u-Ewah*lD&X7%0Qi4W(oSodD}b0qH%6(a^Lj7#tYcIBfuK0OC(q zvSy^0V|8F40^mPr_IdiX1NM2b(UB;EEU?cD9J3MS$w`_R6v&HU7=nX?KuTPwLI88W zJ32N3NbkTPXPAfW?+A$T=9gy7i(c)s+_jY*2~uY{b{Qj>9*R^$ibH4v@3p9 zRNpA}`NaCs`{l=SQsjxP@h!0wjx6j8u)h1F-!Cbv{wM+H|MD;Yku^6r2Pb3>JRjZK zA5#Fx2P-V}u+dK_Akcd6uARMn#oj!=$2Qj|Sf2+JMEmz2pRumNXpFyg;((ppzs(O} z<6@`h_tu^WjP=}s-F9qSi`v!)`tgU;<%A~_o3&2~K)c=`Yj|XD2 z1<`Z99~&e6;5WatvG0CkhxRHlEs3o?o&KHGJaGElHQVv}TY-I^1k8;F!V!ojmIEPe`)4Wy%&_UuvjOKNGvo)| zE&%CCk_1S!a=<6u^8=nIfYjel0%Qc@tg0>&OM7vsECjBX_n-O78s2J0vJwfg;`0kMG6Wg19*R6AYuWHz=JId zpgWE`sryHu{JwyTUw{3%jgF02sn#QO%NHn=8q_lS2VgvQ=}RjSuGowoO+^fXK_M)L5DbKt?J6V9$E;1LGWDM}eyA6wZnjzf^#qf?}HyE58ZUe){aU zcH!bVfi?2%(4nLD#1qe0d;5L+_S-K4F#pw8-&z3B17;M2P5*`VBEe5aQ^ZUk`Snt@ zS=|!A%{~_}#sR~TJnsVVk3g#f^Z>$<_~Jeix0M0LVPmbA43S)Ouic6+eQOQ!DHW9` zjyustaYB zt2RO$WIzH9$>K9x)<|E=8~`RR;}?+r1hNS0R3)+Eom%w2va&*R zBzi+Mc9|~$3R07HPI!x8VX~awq*Jo`SDhJWejALqrX>c z&zveb%U=t?i}k!uU`?(OGMTun2Bgn~eSW03&+dME#`1MPXGWCpA-_#Unbva63DXnf zHajVMfVor?>a?zRLjUJV>%~4_WkUtks`&D}6(qGU-q!g0j@}__mo1JI7ZuvUUDEqD zdZLauU>)AO{m=c3H+`+(d2d>Av65U%w=3zi(5|ae&gs)%hvduw zn@ZpaYdG_6HnDc*O%i_MVBGe5mt^Nas+35&OQ&C4?_P8)5xf+rLMaIwnTS`nZxDFC zL?C)940Q;+oeY3p?U>#swoBF%(J|;ZPe$X|fMtv27hFy}Im)pPRAK2zTli$@%f&uy&$jz%ozFEnZ=Ub=(sz^OXfwR$dp@s|wjsB}&|hV>3AKkO+JroN9RG z)r_lnp$CC6z!qZdBw;Kb!*o(c=2t-UDC&Dahd3lj&}Bp z6`&(4kv~;}HB9s{(pMfmW)=JQ$9I3=?|n?uPfeTl20sanAX%S8gLD#1ywT_@j6d!> z2^Aa=H-;uy*4+bG!85tIFTjy{X zQvm1@PejF!i!K}2uLJoUbHlve7<^!w8_tL0Q9SLQ10hk59E3v z*8{m8$fyS%76APZ!9L%9>56?R0R7>8DtV^BZ8{Q|`Q&_l<-h)~(%F2&xABbMf5_A6L{6?a`x5L4 z@xaAK0qIk-&)*dwdT_x=9~8i6a30{Z5kPu3&g1O!WMOj;N~&bM$rsW#`j}Y$vIA77 z>hp*3yVZd71)6gUX3OLhhyruV0qMz(UtkF6k~2a? ze|pg&0e8)bQM>lpXBU0%0Q$Qt^LF2Rkk$7?)d%f zcKe&JFNWu?ro6=d@heZuNmpT`V&u&ei($Efbrpp;%cA3j1I_;#69d*?e{$AZ#h6(s zFzMr4>+R%@2CJ`Ftj|sfL_eiu6-^6bk`-tXfK@!=7(3{cKyPFD6*jHFV6m8fN?;O| zgZojE(m639&)i+qyE{FU|rlmpO*Kot_evkI`dF2Z-TiQp>%RK^iOy5>#$!ZzsV*uF4kwQO1+ z0Oo-7I>5Xz33f5R9IL5DW%Tl}(^!R`&Od0Q55|Ap-k6dYtg(3bFt^ zQdJ;D*YouS3})#6ydta@jgRp!*+k3~#su$}W-JkwJbGn!+j~ro>HAw`JCLt3L z)trrt-Vsn_RwbFmbUs@U>{h^oC8eskCPD<390FwB-JNRxfIxJUcHzSJfsOW{z}Qbe zbyCNg4F6%A&(}J1`}R${diAo7Jz@<4*Y4YQQ1`Y)0Ii|<^R9des{xD)$L?7{EYW1$ z*ym-pE01*v`#dGSD=JGDfzRTVskjizCdj51qrg!0|aIm9q9iF7n3w?18n&q*xw1p(^o!k z68HtgP9j7Q-80(5e}tek%;SZzaUXtI;~xO2B)hbTZ~|fc;wyqlv3yjZ;fohEhiMKy zaM(&3mR3iZ5lC?O%6S`;ZCG*O;JVCF>0FWn2G|xRMv_|M%+n5(;&*&cFe>|6NY$wh zu{hor*!aSwcIz9SveBuc0J^{5(QO^webz6KJ?q+91)pPGo!H_V>jaFiw&wa8{TBmt zd7f34ib$ol!gg-0vwgc7mw;8)dhYoCu$|6{?lM%?&=1o}xQ{2e!~sBze}EkH+eQk+ zFSF7u>z_Kc=rmIW0`AQ8>zT#+iDc;7MVk7b9OvX4L?TE{a5<#C+F0y{kY zfc{o#-+lL0sAfYYnipSuU2|EN+Ep)L{WbgQ>(2!2&DZy@sZz~OY@Jm@n*o=tLvWX( zMT={3cPZ}f?ry~c!J$}-6j~${E3U=8SaB<^#odAjnS683nYlTCAjwUV{qDWi^B}~W zaa1N86dxGlb76vhs1vywpTbXAIy?)CE!(;uScuRbrg{tgE;jMqc<~=c!+E@3-{*fd zA|UN&Jeh;j%H_@r-zrlW5{J(#9Z<}2LxGm@O|I#+R6MalmbqSi-{C^;QcEt?XyU^` zG5=baenrX@-Ff+M`7YL<_iqn}@eY%lcdIdT!y8dIDQvR2Ck*}L8+Hn7(n9K}p3^f? zx5e9-LKot8)4Spk%SD!}qoM|as`!bB=8iIrMmbgKGp7fIK6ka)$}DiXY!^Bgq6I&R zbQ}R!e3B~QW^fgzUutq$pW%9O_nC3duDZh)s_ZwjPk;Z!=^c>$SqPAG$eVW%fB)r$ zZfd*Kx4d9Ro1C+>IsA7J+p_l`<^2V-<<`{1WR2xHQ7s1KrWKBEeDu?l?=7d@pD7BI z$)Z1yz#*~`mqBJ4fvsB_$VtE3;%&80 z+Qt02P9Hn|%~kNmuRSk@{0yC(KVBCr-4^`evv)a^T~}nb4le|MQR+s77#h~Lb&MnuG%FU_f>>%Iuwa`LfNArZo)@WR zf*a#NYot+xTc>2YVK_0l<8>hv=>tC`oi31&c4yj@nIE<(#hjs|V*y9>Kj@7pT1ttJ z68~+RdC-0y?D)XL+D4Q3TA6!!U(Y1zv0-ErxdC#S1tHE~tg>MWa1C86D>qKU<0i}6 z*{pMcI-sHDB{oqMDe)kyj;oO<>rBLQ`?zkDS7IAJVf=~x%@$5Xl;FV|Wt$*BWg?8p zoFj9V|{Ps8+*AIG8+{Z1vLScRAceZkf%65@^$174o(_o(fCs4{MU9eMU$ zR1L^onIwIZREBBre0ExbnKDq`E!{$~j>&`04{3*t{>zl#VAqOFPWovU`6_A*?hpA} zj!;cS9Hle6;A?**0e{0agSReLeMB!sZGHswF#hBQ2Ad05;)J2u3c-Xrk#gRt>NR-B zUe-Meaf<0~ga_gSc(fB?y!-gy2e<#klWgY@aS_3x94AmDh0Z7I63UC|*B6gUMVukG zY`Sfy#%Cr%W?}fY=;zB7_2T?ca&^-KB5aL!X?w63F$ui|Pfj(H((d~4BYCIa_;>SA zmmkj!)~d%LcLoBj=TUlPl|e~{omV`z9L7S6h@rgVrQT!boi5{&53|ud1HUMa*QmQ} zY7h4_i*Sy{h5=~1>NYqIgyw`BzKLkWkJyzJ>nc}V$?RGkU?E0^>0DR8js`=H45?(2khoi;gE zMF`rxq@P4Z=E)V$Cqx8Ao&(jZL!=SO`a{nC4R z0ASwZL zLxxY~E>$l}nUQY>U@=ED&l?~o?3zyZXnyq1Z@Y05I`3;iw zBE?gAz!o4=Z}Qa;R^I;0(_)0wXi}?E`74^Dq#(b&9j|rBu~YNwc>;7^kcUwqKLnQG zki7WA4V_7FGaF7!tXw-h!;KC3H>DnYv$%c{%GzycX;YVojrsILJ5!HnSKmGn6sW#m z?BLkHE*Umky&9YJQC%9NVQ+*dILINg=lY{QV@yJeDux_xR-S{Hg`K`tx|up7Q9g>I zWTB;HJi(&!jRoeGceW(o#y)zBfh4x<*%r;w5X6iS=H)R(8TxXo1I%Ug<$f!vSqqmt z4){#S`e;c;#9%qEcLj0+$ue1%wtFU!Dz<}6^HA*U}M#vOxFB@T2H_>mL zR(`2Gnn6{ekmuRx8bmyGX{;WZxJV1Md-o!|KY)X1sz}ZEt;&|~2>Q*?2>RyD^v&Dx zvhsELz|lAACk%!kz<4y`O$e?7@UV0nB?1@tnhHzafGNL;BKS25ILh!L0X7|v6cmKU zuAsX6@dmiFK!_~P()vhM8Gz(SA%q#1waN5qg!ReZwh!&|S;QH?=X1SY*HfGC>^0(X z*Q;|4=2*&6jaE2(&scC%Y&WZpP?M3fv1D&TM8iQ0efmpJQv(d&=0umeEB2klfMY0L zOrbodb{rK=aQG)`4@TuvG)Dc8l&_hYE5m7%n5qi}la<-=H=eDxLDwDWpi0i2exXh8zg~cm{BX zUi6+5?d0-gok2n$mpmsGQxy$ls1Mf>9NDu_5465a43LE<5auBBC0ia7D(fv3l#3m+ zq*=$E!Y)8A0WbV)+R-$b;n0mG-wzELrxH}IcCSW3=-7?K3D?Zu&J^X9%M8@)YkxXKkx6EwP;gfFAKh(YSa=k2;uns;-;;54KZza=1! z5aaNVLVqFf=?b#$A>Oe~tlO5^I6h`R)ug*<&=gyk1q65UFW9SM*LVxi2JEO<@W8lo@#P|R!`LFM z=Jc;ALTzY}aXtly-WT&_GDT)blZ)YnITr{k?D_n4zO79(-F1O}??KJ@E?732&=))P zJTLT7xXRA@v1^S{oF0L|`_(hysjv_;I#q`EO~WWJoSIB*o!TeFsScCTuO z0{)1_lk<<03^<$@Q6P)S_NZIqTfK zOYUco>QlkH~wKnKCfimY51#w->P9l2Tu*`)jub7+_27o#Y^x+)mshTO_R>=QG#xmbGCssH8RcfNt6^r z_lt>3$b%Z2E|}__;q(K{q6En)h&nKAo~6A})ur&TE>cKfhC_SD5uu}vqm3o1{PNG$ z=se$7atx5(KKFcA=@@af8kWlT8NNjuQ~8#zN^MYEVkVs(;MYi=%a#$B0B6->STYxy zfc?*`>U|(R7|#l|s3_q_cHnEAp5#fUFt}w;V(*Ech`bZ=0F(`1h1nF!2F09JvcOg+ z8&@kb+xs1voKSy~AWS`?gnNz_0B&pNmtQ0nB^-WrO+;Us8XCUMv79iCn=RNLL~g&y z?yf^zIjYj_8FKAk+Gh%CuRO2Ni0UIsTleus(PzwofHQ--?=@-C#YeyDp~`K{Q-yP- zt%T1y7$#>6PfO#J(FcHJtHwtz)2gp;N44mDFWFxk#{l!)0f3yPXPQhjcpZHk>9bBYIK+#J!&maO&{gEv{j z3h|f;p?^Sz%~UPZ%Y|MPb?6=&MLT6jNmee`0Jxzj$YPSZvFGD?@N4t#hPWH*ojtW- z+gdrs+adL(7lY6y#aAX$0i=dva7Xx(c90F@tzT0lbFGOo$$o|~_LK;g0cJtIIo|Ug zdY%iqDm#V$H$fyh3dKoAuI^bzT%IdRP*n2im=YVp78gT^u;K@LO?t5S2~^SQi_~@7 zgs#lRaQO8*yt&X>XJe#$ygy>^0tI}#6?nve7jLMqP*yoa5|AY-{UL6 z5e&+F!bioSz;V4cK&o8p0{!fKx+0$$f4r6i0vW1(9{llp0{+6EBu$i#`CUS8e$J%4 zd4ZG}Azz=FHcK}mzmvkEdEXjxedQ1r+Uu_1aJ|{Vw84q$%s_*3pLL0h547xTdB%>z zln?UNO69ilHGj`-)7VsX-Hxc0Z5}v^p*)~zVe0gZQSy4*{HlbNt#fe(Q&h@FN@d3XO7-oExULi15RDpt*nZh z=wDH6XaM3T6}kZN>(Hl2s+OM+MRPNa!&mJLQnk%)QkWRR^I6J9Lwx6un?P-*0>kk3 zBr8BAq6dtJb_K*?QEND|6F7}+gj^yqhX~)=YK--SVPtu6CVJ zh*>c0wUts(t)_?Sj9S);t)vjFW6~{@^1ce7(*JE9;d?D3?R_D_%zlEBXJ^s=^IcVu zzLFnm3I|21ZPJTJcWuzPkr$akbb7c+rrWPB;eH%vt04#~aG=@b{H~TU1~$mcl8--@ z=5^~SMRSdRhZ|2yQYQ9>cYTjM!(z&I1Je~Qf^L3mqUUG%D!tOM51#)E9Onic&eD?ZmU0qD396cg;oTA)a-y`r#_Qm%cq`c3np zNHPD>z#?$AyrQ2*BCUoSQk&9e2w6~Z(OpB*q;i=n?a^mSmUL1`rdZ&Ho;*Fw0z31j zy{ziP%rbP3PR)&hcfSGBKP=QgVzxjHCC(!FF1kUjAeH)e@4jx7S!d$<$2rF^5~d zfJKHqJnD;(7oJUsV#Xt}FIiRe{pBnP!|SNIhs$v~4v%}g|M^sBM=|&JQr*$jg}G2O z=v8{i>NK?fa!BC=1`Xh8)fGPC+tPGK9+33d%!rEu16*gEkLWg(g(eJ@goyRNrh-n* zKNi;qExsl9uX`xx`MYFyH<8y2|F-q;NwQIg>SY)@B1c63@DDP59`-E@PUv=k9~wvA zy4Kf@#9)@|mhIZH#pw+gA4a*YMV2QMFvxkx(ZZDX%_lc%q4602dfRc+xH(6>)RwQA zOrBOJd3HhWthR(C&5k*L9XkkJRDE7CiBuSVI2sSDWRlcPpRcx>3=99{n;(rhqn5M~ z3q|R{&!_us97ow{TK_llLi%D%TaWcDGqD*YzR~VsFP`#1lf0{>Tb(Iv$!lT}`NsC) z(r^es{!@11Ye*-~N%U~u&7XaUYx!4(W4}tLgE}s22WRSln+qg_1xvtW5X?yDau=T1 zDfKqcm1g){G<-Xlj2P8ciqQ^U1+32^lf#6cKO(GBBi^Q-sN8&`Bx9t!=U#Zku%Zwk z?|OemC$-g+DCx^W@3!z~kA0Dz^)rlRl(O-}#{nYsS?>N)-ewm?S zF|3C*MS_%8Wr((a=|;TdZSy#s{J83HVu$uv%Xa*>AXqsg`|$9xhoaj!><8@QFKqUD zLCW*UHO-nu4S}tG+)E53b>pmR%9S66a07e-Ek3+@uwQh952a{JnDp5#|GZi$XS$$A z#+mpWwQfkcheCR6mbGvptt!N~CZW}OYGDk=p{wCVyCf_^8gzSxqFYtQ}a#j5dC zR$-8V@DTI4I{CO)Va%s)wT)W9bPu;_xwE}f`sW0~LFQr6P7QpCwnH@xn)tuD_2cly z>mFR}d<`PLn7Y_{IYl*&O8$X&Tuo6Rw{iwjEukGx&3xajL`A0B*R$8_ZsSI&$n5M{ zAC#0*zLVYKyVLX@s9LapP4TFptHosA^@*2yl$HcPe=6~)BI|8nGPmB8WdkcwLVo`i zeP}xPnzH*oW&UDJg=dgp>7MI|MEtfz&uyiiUh3cO))qUxPyxD-{jq1VX#1f87Gck@ z*N`_4o%jg9o6(;(k_56!ZU&4F_jNFhyogj#&N|>=7X8XIcWLBTb-Nx-RKO-}DEl&g z1mfESGbV;h;K9mkYq5Z^~FV6*MoO**HZdgcEuiU_y6z9rB z)UWsv{Ah_(BgiKHe*O2Yg_mqxeIaD(4)$wx74ML$4gK*GFOzSr#$`WP-=<5~^i-oF zE7g-`q+LxoP%rj3o)3UYP;CY#o34T#AWUd~?{*ag==|!I-!N7A&dz@jy$!kivYYS) z9%AQB=$hO?1QfYg_KZjj z4_}{$94Z|g`TFHILbvk88~rbN|E;jP^$k|)qSIRI=yf=FzFHVK-il16Tg>fgW#T z(4y}lLs2--!X8o{Uq+VOV?vzsQo2{+V(o=weseAMA%r%S~3iF$Z&ef zDP%jVO!#Mb@VciK3|&CZS5V$Dl>Eh}6>ViR;V570S49)Fd`lCt=yDqQ50iSSC-!v$ z=ak6D(8v!94v@g}+_i5%eQxM>A>zPCB&$64B1f*JxTS7GxJ4K7FA1M>ttOh<1mw$e zSEKfPS|&1_w?Qp511I8N8v*}#;kmfZ@^>=;P(D+w;rw{=v(rm+jg-??8 zBSgb{Ma|IMC+YwEV#emO|P4v>8zV z0}c*0T4mFuy0fWP)u;XxmxcE+JF&FL%3)V&5U0wo82v`BW@gU_Qj%PY)Hn@r9$xK& zfo{4IB<51`MhKm}=0c(5fdEWZnUDZ31qR>VtiOpv_cI1eDA!t`f=`MTD`65(Gz_q( z%Duj=p}fDODc}WgYy}@R5}^O-M((bL?VkOCb!8`!sLf$mV@wM~3zVug0`Lw-&VV%m zf{2g(u@NZ+e3&tw4tK z92fVkVmEUcaxJbBM;$m635lWX!zS-TUfmsK!0;oQ3$+r#Au##bd|)5jRf+Vtl-4*E ziN_B1(p5^UJQAFp?%U_{IV6z*(LRIos|^G)*D&}I7y%9m|CssW4MB~)QO3W=sjG3) zSl$0MQkMDrjhm10b|i)*jDP?Nk}Y2)a#4$ik=g6&xwO&H%EhOEz!QnjjkhU~;8p|F ziT>WP#B(u(5>wj24|Nrznc%2E^Porr5VEO+kdV`P=bZ^Tu?fF+{`2wC+mp@Sz9yR? zszXKk7sR5wMsC-ySGe1m!V#CrNP~uJ?f1X8UOYk_)@4$ZhBAk5zbSR8n-uvOEDa>= z|LQW;D*omc&fj%Pb@IJX`rO9sBLuVJWoM^Wily+XVQ!@z4rZAxPdD^Dg7+P!Lv^u! zcfZ_lx~jscNorrF!s+H`XDL%j9WBajNeFZm9mAJ8oo4ecFraRkVD+)g9~e;paMz#@ z#gl|qy>2=?@ZLi_Pc*qRr~l)&?lI1`3!1!p)$~N0dOdjQu?{|wxhe7E-n@Z^tJJ@b z3>|V5@L=y{?zbm zdWHO1nuCx$u3bG6)^d5@r{c+(7VvdppDuDau4?VcIeYDm+S?SpvNwH;6L#`|2NO7c zp<$-RUO~at+fmV`d>-R!%4#1--iczG?o?4DKX75Jt@Up2!B}s+q9OHksItf|h1z|< zAdVEChkx(d;L)z=r~Bnv>y2wL0l(qv=lk!6K6Bo8?71%EqimlkJ2lqKIW{=kb`s&f z4wd7ucmmQrnGQ0^+J^r`;8!l+Xq1c0;*WnQ@B3B%fKQM*Mcq+vQr@x^c_n&{m56j9 z78<$5=Qig1$Q78aKqPj4Yf2$@97IM`UCN#julc+i>H^uz`W}5Vl!9s#QXbX1n|v;1 z99QqW#|AI&ucHCfY94>Bb`5WEaxJ;!`K1DV7loIczv;95u*OtE#ls3$kO~sch z^Kzm4DGkw5 zc70QdhvpVedW8mkktMsQhYMEr{?W@|JJv|xbjn%_K7lox->FGGEQ%Ei+gz-osLs1W zBy<&{B6B%O#c$*a)52jZ$}dmTnE48sHQx4WYz8a!7g;0@{M=O6eZC&i?bPU{STE2u zWzSGi*c@P&7V&_j`OSh1(+{9@;p6jwaDhV>ZsE`tFT<<+bbR(!^UAuLDD#u2QWs6P z{9CyU?2yp0><=GQ_Q!2I@jEd(r)_2^B8&2z^a84hn8ic#hW0AwQidB{zE3xvW43i| zzpq#NoNq>-4lV@a^`#vdK~Z6%5o%zw&q)D1s8B0-r_df3o(FUC({*q7pFEgi1!|}x z;92^inB)gO3}XZn&6RdBY{ zUv6w68Xq|Thr>D1bBLC1It>x17-&NbR6GC3X#e!R`a*u**J*eDOr$}ebU^!k@S83 z7P7flGA-`&`ph#R9(vUyjKpDDCgL|vk{!0ja%syKlaLdB{xl-Ezqmg>0|#E;ah&Hy z+cYdnqos=A zii?B^6Fpyw4!iSkU6@Cys2IkvJUW4bHbULg#B=rQ?(+4{gj)`-JW-E`M?}8_{F)5{4tlKEt0`Anzc@N3?ls)ra#w{To$V3Urs?S5RLCP& zqU95CeFW=Jh;6X%jd~+%yk_l6Bg5s+5_xYOo8yBG-0XF+G8%031u!i`=hwx9$0fSG znfSsoN9JGqbcQO0qII}KLA=0+qzS_KIYFR$I!2VCdH#-8-31P_(BlFmuOa#6pgE*! zluPAZMmdF-wMnFSv(BW~!&al|We=bTf-V)rP=P}8yyez`&5OaFjP5A$&BFRa`f_?h z9gUOPrCV6s!pM@z(KcG?>3(-ve^yObC$U6ch&SYPJ)@TV-kZH!tM@>0=nCXrbG(As ze3p=5F9am_(3|ltTqL883YZcghxd!7gGH(5A6%6!rzg5!&fVbNAQyK-@!pvlriYv5 zD!&ThfIrDkhm%BOWZ2SFO}%+?nQ;bTvOkeaKU=OOX8lf0X)}VV%#hZTE1OsoL4ZN&Hd~7|qEFuUYT1vj~H>KKf4hoh@>F z?OL1BQ$Cs5h5DVZQz8sF%gFReg=I#Z4Ahg8pJH-PS#*2xgGH49OLaDx;?S{#dhRVH z++hRA`u>iTOWO5i%i6e>ST7YNNSrj>3S#g!p%>|ZheN#51YQp!v8dk~WPSjaJcS1W zkb2$r)O&c|-y;Exwq#{_lqN20Y_CQrkkNV&*oNcDepqJ`@S>^GW$1B5B|M0z%}bqq z@Gh3)bc5jdFeJA3kxZy4bTJ7$_NlnacF$7-6>&Xd8>jZ~O3#h?HsqjKQUs|@mUM|Q z*T+Uio8xBJY9$x-U8-JI1=={?`}P`326^da)cZg~hSS2}%yeJG0R2;+*F|S3z4PN; z^E5K$&Lpo3ARuV3W|#B|VGYYEX>bUfi|r|3QgZgKj{ErGSyZ2)Y2>O3oieoCVlKJb z!sr)@w_2p&x#8v65Qm1PbyQtSSFQQ;8=SV^)OQ>UY|}-$CuwLjjn;bgO6vL))H;$* zdHDs{FTei`8MAbjOm{sVLAmaThb4or54_+fNtd;&s*Bdvz%)t`-@gJLjAX$wB5%ir zd9L*F=P3!SE?frDfg#O1MfDj3KoG>$!e|njQM<-DzYlzfRHUV#)VrY&PpC{lgR*XZ z1V0s+&KR3BcX}ERo46_0!+Hjpb|g!zYp+qk^A@2GWueFEd0xM7KUG=W(>-`AvO>@$ zi~-`6h4{g*ssO+Y(^=$R4x9`A=7Qqis6*m5-A@klq|c`px&Jcl&839iZ;R<&*)CdA zzR10-PXjvG*tK^P=`C6z5p_5XjKg+Z8TPOfct$^nQfCY3f@{Ni#B|65B?2wsn#B}J zJ*IQ#v6eAPb{pSCVIXU1qgg(>4=}C6MaJ)}_S_h3)K$7UYD#gJH;PiJhxqP@(SiO&d1nu)NGIzw^AU5AaEBBdvI!xv&xXOsYbOB zwuFtFXs5lqzkIrRc}NhbY~&1+o6LJ5Ib6>mR*0hbPd2}TRpQ_8Uwes|`Cpl))^)uK zv-SrP&71p1?sBhXtL{IY`8_oG8liL*eQ4S$;a^N(%X38x6PsUcVP|ZS?ePZRH2+ zd?G7>YFU`L`Jj({_iUH-!yKTXElGxi`wVrL+BR7u8C?u5Otz*6>b54UUoF?o`elLd z&-;&SF}GDeTR8vEMhzMEP|2zfXe#kA%#0tdd*SDMKS*CROXa|DYpVirFr=Hxs;-%m!S@hxtsyp+BFen29eouhiCI9LodkTDHB084BnvcR#l&O;~oVWa>j zqpZfT5o_rcZcU*9be}Yq278SXmeWZ|78XEelYHU5D{c5SmD$m5%5Pme9g;XZh__-x z^T-b65%;_5q!IokxVZGSScz|-UG|$NQ)=jL@e++A%-HOU7#T#^nG$&z*P}M2Y;?NF zUfB^PAQe0wpzDp8oecH;a-FR$28eLOgMcCtd?)u*yB)k zouK`_=}!FSMh1BV_HZ$}SvJJN&r@VK>N-;wLsA;Knr;EA>; zIL7s`@}t-!;`1WDPyP8$VQ!7#81HCfg;4XLGQ0dVD7Pc%~=YNG2}=nLD))N;n2Lm8DfiTXAB;!~4|~;Lujl@7Eys zy!Q89Ys&x7A8Jde?%yF?BPF6!Xv8fwo_1+2rwYMBsiE3#BTwb3)TdeOU2;6h zlYNu)-tI43@ub7*yLDd>*tDHsLM!C*Cc0lN#Ynl40_R6qqw)RrzedD!7p|tEwz!Wp z_Zdok9%2w?PMSuC6IXr$_s!w|v3dgH+sI6a;j;8Zaf~=Ye^3`2R3%$w*_STU-@`iY z6rT7oD(OiN4dASIa(%(5KqQ6lqH-9@NL26jJ~i#E|FIT`x_=0*JWoToegJ9;R$$$G zZzZ<{Cly&c+JcFq~cG?oij`qOe2K?^2jbn+PiDR zF&$3pBDKEt)=Hy<<$$`L+iN)BHoC0TCd1Rq0jw!H!J4Iun*{y488#p%1DKI4$KGl- z+uB>?F2Q1{x6?bywx?2;*+KU?`?X&__EGo6_2?5!u zM}9b^S&{jXk00|O&x+GBd_E}fl*DbDy5#B;vKS|cOYj#We%FSXaa8thz6LNHKHO=J zxi4Sow>Oj8_k7fBvGV6nR1cxv?O?@FTIgiMdW4NNwfe!wH`Y;XGi{kwyaIm^riu@jfa z+jDOR!|o<43*MFgCFC_HqKgDn0Rf68)U=PHdnILdC7cBtIV69gYAgan+X22i}YFh`7e$Qodn3<(+8; zAhH~Gwl6F%8{bH90-)L1di)-KPQmscC-VG5nLeMrVq@{nk_MAR@WBREFi z8T!^nC+hFz^q||6Pd#bzE)cDFEF%gx!Ge)hve(2nP^un@wt~To4I_CY6Kk z0to8>V|}RmWJCY*Tfzdi>htgZQqn8N^UQ<@J(imiJ-fFzaykT$VPPnxF7I4c)7a9* z+)59ncB|KV;*A5^Px0E#f3iku6ztnznmfIJDv@qHW@H|2jW0eMCh=K?F6v$O$fLCm zuXs{H^F4E^#uu5r1;Zd@%P;R;sGl1EmBeqnFIBD0ZwNA{R|H)*ml?9ft}68gzywcJ zHyR2^J99y*KqV1qJGE%8fkOg^9&*j&;2+3VJY$z+S1aowHcrn@a4O*xc?o}Jlk56> zng>Gwu7;|5l-#d0CI~L{D&_wr2YAHkR6Zvtbg}wUUd9str4gh}V^`hS zk%K|u6GXLg-I3^$tXg}S>KI-5!ZPD?St*6qXRO-F{@Hka+sx z;iyylpmRU+4Kn@Ek&4|Wn*?qkM=x?XJJ7l6bDgqFXD@(vt68=b#W3%w;^E$Gn*2X$ z5IT*z@3TL%Z~bc;?W4-J|mu>faK!+GoTtuo=7k=;B;{-C3`9bK7?~MzO(Vg=<*YpeO0CozN4z8Q%H_|kV|KUq8EJ6 z^D?ApWqV@ra>0Z%L|HnM zoi7$SmOc$V2CA2r6_6ybMA*o9m|j>YQ_E;T_X*d~gUR0+)oP%xEYWWUtUR}P{gy}V zC``DNG6yL`bSFdGtMl(&;B3`5bsQl zfwwoEe6`)v{&!8+jvA^606E`2{J{^Gt_7j08?n&IruBY1+zr>7=PuwX(RAj8FY4~c z&rjDgEtdX)zVxx>CbyN>-`)%*FU3o~28v|A(yX-nCZ5DQ)4pZyu?BKguvC;S?hg@u zrqTu1J`F6mX)^3`dm`Y?Y@`r;?s|nzR%xnMU3#DDux^W1Xy>DCqw6EQY^y3z^r&jq zsgPBZa%T54Hm;}Qe9rS}lbH<0b*&ETi73oo>tbN!LGJv+><@@z!oLU}p-I6?euo_B zNw`Jx?&5on@OalDnlw7;f%u!Zg%!{1#h#`)Pe||`a3GM_OF?V`4@(l)@UxhVi9Y%3 z`uhl6uAqn3hb}W8H6B=p2X)v$YtIW#(MHEjEm$ETDKNqcY5eeKKt6aoK>v|8HY@8r zY35S;r^M!@yD@ykqZKEz!m(^NghO=T?&AI%aYKC?zv~&3c+Tth-+uT_r##l?6u!@m zD%r8IyCTyZK2hz@`WlXZlyOX7(jHfd;Axt$|LA(r9;IeFoHz3KjiA}rd}RD>IK zu?@w5g>;kFVH(#Y)V0kYL5N6MZ&ef7G?!jaN%W!D!#yul8-lZUfXDR*>KBKKzYJ%K z1PI47A~6xP{G2c1;V`;bLfAzPPFyZg?O-JZu~ynX;e8&eP(RLCP8v>tgfR0}DGHHw zX4lEej*FRJpJYAt9^W}4+;oU*vx&_8kC=rN21j!t(-@bmaliLl#20357g;$G{K>iW zCjiMk`0!6PAfG8N6ujLvhe`1;yUnUm=KS7=7X!ul3#uH10uczWe_GPuHH(E~ z0Y6K~d1W@aYm59f42>RF> znJ40EBA~Eo`3m9-Ye?E-at;5dRX6mBrBmi{T|V>It-up^hX^>-N2ig0!ER!?(HxYH z{W-MtF?3e`mF{31rPJ#@$<=*`Rga{7T4Aqqa#>*5aPY8 zceZ0%HkFjvBi^HECd-9a7)-8YT7cdz?puIvI1mh32}!H560aR5L)rGA*1^v=%>!-o z`Ju$64L?`h;|`yyvuMeW$WI#=)`_JMnr85CJiff}Zm6oHkk|i%?z`0&&c0ReY%BfI zX%Xrg2z;;Rw$$($34d@_3~x{n2MHU)b%L3O^h9v!E5Od+&B<@yoKWEb?ql191^8Y+!X2{NjM>T9E7Y�Y~ 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%0DcqjqxbTPDZ+Q_W>@^enuXJbk{ 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�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�cqS0(!r5 z{B1jX?v(A>eV4(GKOkS#yYC)%m8=h4NI51$-0pp!^>khg`M2!vMAV1R5UH)MuzQc}v8@}|*@Y`N?UlDwNmG8dpZV0o z*1Wz>)lt*O$1#@&M1lnYNu-P^PQ7N54Dg=ngdf=+u|NBb=w#uy{j+Cg?Q74(GGY1O zasc|EC$a(1!!&=_U3a+y96fr}-g-+$r6dQScioWtlk0(859E4aO?m(T{YqJ?F`6-+ z*TFt7;~AwJLu(~j;r?QKp81}YZ`fw#QsBJI>Rf~Gzhfg!>xIZsNpC4Yu(Bj7%j5T1 ztyeN>0WaeaMuI?egAB4LV}(=F#H7tDver)AzVAOLhW?GNe7rlM{@?^0IR2W|fAmS4 zEi83qh+z*W@QNdxK$I7p9F)`zJHl}~`{20;hKHGQCS-UIstg)VbPQ=SWm9FmI;AgC zv;^MiQ<=aSl|Y9*+6&5|2aWI@iZ85FVYYwA%%z|xfOrH2n6{z}!?K;9uX8LiR8NS} z!vo9vdak>DR#GzAoiNEC0+3yuL+Xnf#~#FHgZ=H!fxa5fhD4_&xWTiC3QZqzU&G9T z+*cg+;{u_;0Eb~vSq0l!!2F-+nCX7!SPd2YC2&AuMP+3y8@?||n#`%N7C?Hk#}`x* z%^UwKGbm-0xu9FGN{BsU+qUm=CD+Kz?(XiCzIw>o+OD~OmCA~~=brl&lnWT>6ZIi1 zg4~b(ekBkL1vW%OBP@Jk=M`8X6OclpS+O~cz{^1g3q z%x-oKE$z~*L9q$0nixLVimIp7;CF-dTYL3kAOQQd=@=jRMk_EVBAe zOem3ca9Uu+*Z@RTbpWJC4@CMW%B^RtO2FLMKJmx>$M#ydFk)46*JXJ6Ld>5;uB z@T&q~h4UKcMEoTLW(oRW7e*$=tUzG(e3f3FQ7{H3_^<$=_tGx_Pj{c#pl1Nm->+w} z#4fz>vh6?iF^hx} z%_-@lsJh11??2$c!fZFuu4MF!r>*gmKjC-F>UCD^;jqz9T)%E5E$gj(+b$~P3kT;ca@e3Xf6Mt7Xb9kqf{0^kH`kx|97ukvH$z4|J5Jzw$}%a zZneMpPyZt3djhSDNzeEUn;c^@3}A=kf@CRtJ*+DL7QBBh=3p!M;6c4%9~Q(FVc%vv zkp;e20MBd9^o;LvfJ9IwXyC)Btd_q?jND$B+lRzH?+G^6x(X=%FMJZN8e{_h7Y{!7 z3qln@4r@`7(qDW0t7Cr`*^93hNd-1#}X>HeXE`g5}r^8o&5`U}BV$)wpVkT8HePk_RG z#c!3V1VEfJoyS+*P!*4{VMpcxc%`(g(w=$dX&W0Kv%B^kv?E9E6EKIQsaXLc&e=O+ zkwlIhK5BRE-!DBUu|5*Ci>f#z;E=>Yg^%gm`p7e-QYjPQlV`eQOao@?>lt;=R(LFO zZ1gGsTL9k><^ufRVQ`K6VHN){FHrdukR|Mt5Vm;6OHLCc*F-BKg>?q+7Y`>2P$dGt zbTa=Vb0Pm&FT!L$$u6l#dK`ZKaN?1R!4M}<^$eb+>Y4yZ@1Cn<2U@}R-p5+sxY_yO znWsq-!0(QruZMy3MTK3~dH#Y8U%z4b(i!HJL$CaCZ&v?!n#N-4FXa_dMK}RezvbTXW4hM(^P2IpRwChrQ9CU|&(d z6F(+$>YIW%o!#HEA-X%EJ+7fAS4Z>i3U`?7uV^(N7_7uZao68v=r3d^DME~K_|;R% zsQT5iA3qMOsT%YaA2oSp-#1VHOS-%8SzkSX^2m|#7dKPJW87*~7`0ilNs?^ElmkzN zh{XQ%|HlFdmEeZYe7^)tTo=jzLc-vK&-Tnsn|T=6HR*zfQUT7=rX^g!Kcof?*#oclcWu5KWbyFe z4%~m_aJy$uKFgwFG_Cm;;4_Bm8(mscbcLcB-D)&pR0YW~6@I17FPfBb3uRX^OL z%G+a2PbLmHyXc)*gx8*&xij&x;gg;@v(}(Rz7MQ4?{pZ7BOah?wTIsYFZFn^2+1yPpx{Y94l`OL|a}+SrR8z zhFKzb6Qq4raYA=Jd+gtW>fSITg^iK4HciQ+hN%+6T#ajOiWfj9> zSwg~-y)i;gCJ=3qMBU}&AMbP~uj4t?=PvYi=6981@KyYK@1jAEEQ)cN#upW!H)#y) zudy?#v@kbF?Vm~kYWNnc^hhPrXmQ+xgx^c<4IURMco%x3)r{qO>N3hWA$$%)YX#Qo z{*I`}i7u@M&O(Wjp=Nh_&*nCn)Y~V)J)8zKiy+dQ)dh5n04DQ$r!2gx0FMLulQa66sZP_`_c>FAd?q& ztxc%munTx_atT^iwt<(TvRa#9a%c)P{v1`tw0|0u^7D9i^WJHHEuqdg8w|~?c<`)k zP?Sl&D&DoaoGYGJi~}A3hdP{jI1%>sfF7CaJ#k3<6K?KokT>?M$4HXtg=17BzVr7T zr8n`w@3qgoI8_3KfY(k4+coZ@8y&qyh&MNWUhz2gdi%=$e{HO+ zk#jbVkMJfnWJ?ZYroKsfn>t4H`_3c<_$1kF>~P;l_d?L&B4g{GTz)xa#wr!~N2sG< zx&)0x_lbo1hzy9MoMeC@D@#>&VYo%S2}6(IyFJ=(qPXX#ji75H?5RnILib~Zezs9C`{2_CcY`0)Y%ay>k)HORNeDDPKe3to7G%eF@?Bkgkn)b(SKbEsti#To3lL%kF$gUs$^GdS&iM0@OAW|UPQzVVGSj{=@h}+>b z4xjG}YO+80ybZm$_xk#%$I5#v+-$tFw@AqA254h#ozx|m=O<#S@Q{+iT{|2%Fm2TW zqzJ;_|K?%0fFGHddB)0RiGzcOw4t4S55?9irP2*Qx*@PnSq(#tZFIB}*eY#kays};X%na|__to7G&noi0oqfAsr9eNcP1;+i zx1sclP}r4-N3%>wnN`dd16Ifav*qeTf?)SQqx>7a4tC6jvbaB@qkeYlbz z!%LIpCq|b(ZpEyHx@i2M+8+VvsJlIL>J?Xav80OtYA^gl9qd-eU$dsUmAENuauXi; z_=lyonw_bBqpE_HaXHt}6<-;7tI>~Kf4Z`F6t3#d&6>{&%sYg)Y0EF8zYH^5)W2u^ z{m|8$q-}Ue`E>8;sy7D^muO{|$WY}6jpRPRLHlqDR*+tsRv~*MypmAw&f>-mKL3R) z-~TP#vby?P3np*=pK3N~STK-{Sms=W#ou$wljX)Vwd%q02o~ zUREt?i`&x8WX$TVnvfYg7xVH#e(k10@>+Z^Yf)zqsbs}4oWCh02%{=MXUJz67-kq* zJX}!6Kw!_)N_ywDF4qS`EBHrd zHYMrPY>X$XYwSkAujomokEZTdXYy?q{SRMW2L;3hP;RMK&5HBv6Q~V~{OLseLTv+{ za7IAfm@r)4}`ycLJAoQW4LI8$`qdaP1$So zQz;LA@OWWsD|7bHN&`5n`_N;J_r{F%e0ljV!lXr8hQq}FYuBTbi;#)INvrGHYb%zp z&cj3TS|N0vrJrAxm8F=Ogs8Bbc=qb%<{_0u_fd)Na=lHo-ExCkCrpyt(}vr+md|rY z-_K!z-T^&jT2Nle5dh|*n|=IMEE%b``zfUxPUBWbrUp*fOBv0?acopR_9QF}eBZL} z#&8`i@Wcwd=W6MtEcpOePS?(n2_u#zEAd|<`rlFK1xm!{_$+&ljpW9e=cipuN`-PH z%a?qP0qo1(Y^4K~U)WK!Lu5p0=r|Q4W9mufTm%35DwHpqr1r6lqm(r5XADFF`Qj1aL(MI8v@E=6$De@t42I*8 z^_KXwj(>NDmtih1fE{@T0+T39rXiT@7MD(x^{TbV;Se#J3cH1(N45(*FGp4wD}W(( z-@L#BXRC#G($Q|_`tI+;XkrV|`#is)xT+*R>bFmTTv2A-nZKt@7P2^*nd2ihuvhx} z;kV@2CXBiz(zMw^!rG=gtGorqiDxN`3!Lq!(3KtbY@qVJ!PhtXdtRrv1cd9qWp~vB z5@<0C19G;lMju#ju7m4Qb~!{#U1^h+JsmNC$TiVUu>)x?Mfe!a!zD_dDT+J%2c_au zI_NgTv&xBcf@l68(=wG0b9l$hc?x_vp>>kamj{6-@4y{#A9t3aXAhnyWYRZ+O*mv5nv~Yyb4v@0QZotdj#r!BajnJd0ceUK~;gVNRG z;_dXxfB6N{2rlXtO_`2=&P_sVeJD_yWt8T=LwN*#*f^G0&ol3L_X4EzWdB|UT>zPv zvav2&6B3gmY|pc8^V`UIa#WWh4VoPL*EA$b3;Hd*uZEOLGJ59bm(N|mcgV}IK9cVF zewSaS&>R&Hwl>AlvSMOReGY(+$GQ#2YvI9$1|1td%}_r}b4>rW=MMNaVJ)cdo}~i# zfPY}1vNMBzl0TN)7YFP{W_Fy`NS$}QW4`j1S#nDE-kOt9j>dSL&vQiiqX*vpI`UhK zM%Mv06^MIKFYFh7gU`a?_MHiF{h9Vp=e@IP_2i%y%*UncpZR>4$)q7tUay9?bkYl- zT;|7e5$h<}c@2MOUo8cj$(%5jr1c5h|0s|MVTOVi(L2VCuNC|Rc&!A{*G+)vtHiTC z-t`_tvFz~PGVVXdLcup(EU+Ne9&iFH3uz(q10#OTLo>4#KG3_Srm2}^maXJM;k3T{ zf9F8$e3B;L+XN_1u_T2dhTp<-JZ1U-cf?jtW4Lj(8mihvPo7NgK0%}UcYAs}#Pm2K z8?O)0!nEcWk||>bz*DtK05y=F2gxF_6WZob{%)S*OAk_L6SFhYB){=S0{=RP;IH{T zIu9&<6+cubZXk$a44#Nz%$)Oc=Ri+eahyK#Dl8AWRzzj5{H^*{niQj)Z|B<^T52 z6l$5tiu`v>KyIjK2qp0Z(*~+>MQ!E2uB2U4o1MmR@0kYRlxMYtcYw|BY6r1#aXZ>i zKfllGw0_>G=GC1Ti(;OWr!BD4?d8YbSH&-jT>K3C3Pu2Gz=4(?a*wKb6ankw$OAI+ z?hBccD57)mtZq+z-PbQd0Zr6!4uQIFS_4*ulOTM#X3%m^_4-1lpa=n2D1eF zCcNv+d!p4%3hH2{xqpT8zf@;u#tgKpGYt*~;vC=l(Yb(ocSs0LS#|qxrpF27eW`6c z9PCTlD=1V58QV<*bMkOdY_twfAPK8zWwebGJJ(Ex{+U8-nIkb+{=7qKw2lwk7R2f5 zz^CCrO5NL~_>1MHIn1BJd;?Pso(&(OW(9Ama5&&P8^oW@uUG5vp9h%ql^ye!|65vU zu&^>M2ry#19V}51;&5XMbvb3<+Ad*sC@tVY+E8etvdi%Bh=?^E)e$izBx+7M?y+~G zlBIkPZQO2koix{&!Mn(Jod(6vE*lx{W%Bu{5s5L|-*Q@ds9_BmaF8`+%>FgpbzJlE zku`h+9v1edzz!CxN8ZFXSu<>&YHbV1P*zQQd*j4V0Dg4Rm;eF60w|?Cs@g@q44FSf z?x*ASE(%84K`m}$7O-`txX-wvq?j@H8;|T)p*Y$@Nn@NeMk`@+HV~*|t`nza@OwFr z%`w~{eFOdLa&>iQCbw>pXQ}X8BB7>1K9a8$-1{n!{RLW%3xX1d2Drq2U_?!%hyTh~ z@rcx541*!?&KA47u)iG*3xVsvO7x7GR;3G3m*{$ZisIZf!V*_=mTgDYH%l&zd%sF% zUXFObc+E?DDK+w$^xeN!qI}H&NsoVyD@XbcWP?k22XK0X! zgs)ie2>}WB*IvexvSvu(OI_}so>ZT0sP0Z`{T#$h1Nc9hqRTY6UJO64_XVr4&)XHy z5}++?r(GLXn|5yK=0sgei#qL%>;weBcYA4-i$y6!Q&Ypk!{yD*8Uy^XsJQG&((v=!j?8{mXoabqa*qK7>?7(Bo)HmdfZ1MJ%jgHniqe%ZO7Msan5*tP0)m0mhM*=;JapG>Yn(pY675&hjH&w23Sd6mdtxsHJE!f ze_9o%;Ez@ncV}dC-bkilE>iLhWNTHfH?--ScQ=-Xo%#_R$7!=H(?2QxrU&y~A+G6n z$!5jR^TcaT>W~>xDl5&RC-EurMYEDuw#Q#Q7yv>*JBu9iz(sYbdFQlz=k@5~Os(^0 zXecpRn&S^*+;3Sb0_l0WpS2QfR_~#0r_sNCBPh2sRq}={Oow{FXOZA$KFs=^lu1b7zi1| zCN~a+h}+19EgTtXnU9ng5hXPYUWn#za(GDxJNn)2uzjooQg+J+rZ-MGeI+o~bM6=> zhgmDX_f8L5cYZ(V1NS*W<7zQYvkHB%pfa5-U%}p5Ua7u$`AH@csf3djooM7UL$ltIyoTHcfUBW3$AG#Brh_QXvlh&a?;DuW*4;n5p?cxtY7y}6T@)GLt8gFlk>U!3l()qx9ktDgEIxG3yOgy{;ZPWc-u7}pQ$m9QZ^{ghT;N_aS?F(u)* z_PV@NF=EHv5ccLH;mhE^ov@bB{Hol%#biXKDr=*?mLGb`%H#sYOCQW6?>S`Fh#>Fi zU$-B)_LB9)FkI8&kD~HefbVWU#8%-1nt91ahB9>` z%JcmCn?D_c(o$EO9x*{r@%8-4!5@RW4S{Fdht>IVr*mMer~2Z>L6bq-RDRx1(nph- zCu$p_*icpOPV&tM~hHchzuI5lRwVv|99;j^WIoF)G{zeAayR-@^9IkR!nFY zLG%avHkXa5?-TmI3#7$QtGM6%Ng4Ap@?N7JJ}NUGz%0CYIx*qw22e&U1qS}$1=jS1 z8QF;N^n{PlLp|UH^Plwg6|?Zxc-hkC7Ah^fXhqKoU1*Q)PD%A4k!vA%#K^N0nB)%V z1SmU2ZD=p>fLIRPk9l*tP#wP35Jz2J+`*U(niq~TC~j577(-^DXb{FRDvO-_Xj7A9 z2j2=Dz;RHovYk{YME=!b*%4e2Zo$PZ^YbhDIQ7^u_RJE4H?GQsIFr+1%9&;|Q z!lXKOoLsT2%n=~$9Eql;PkdwpM27jz%kmSE$dZG?;1>*TCF88n zW05dx~WwHEUW2Fb}MaWT`TC`2emo`g1fUYd7Vhu*6c z7r5$#MqkK{7A%3B)Vghn$2i7*Z!u_bTU2`er_}dyb6ZJcksZBAdr$UXsqFtcD1kB*P^!<%GZ8QRof853!eS;oLZs~(NU2xku^`6ys z4~g6PJO0(k^W0AB*}jg;5fwcK6(d9u>&q`%zFewivGOFTPg2v?9$$0vHor$D(GReH zmI>7-Moq>_wwDMeZzdOp`VJ9?4zl^5bFTG%?c}|!D2*UBQ717~12((b)xTme66JZT z&wKvmzJpb2{AFZvu&HGM>zjHpuC(7ax$W+ZtQ)UuvDmfFM(dtegI!E}djNx_C(lfU zq43l196;W=>mm?xGYt%wc_L(r35*l3H$4X=fmz~@dHW>S`EZd{hgw}Lq6H2=vSFXm zpmipr6@8!SnHmen?A9<&)ecvt`btfiaq0KlpeEnnWf*j3YzfZ5RUkO#>Pz|ut@0z3 z5gF-U4suZTFdot&D9NqVK!UWwJoS@hGF+`Yn(UB@&?twY)B`!n`hwi`0VBDba~NNQ z)_X%6H#4Z8`?Mx?McI?P3SX3envka+9Aol;FFe0|03wKhF@`ei@b)h7B%Y13nh}@x zv-_*sBZ(Iu2)CZkl_9-eV;=Z$EqkAEA}(nzy&XusgzxfaC@S7o&%=ov@`X^c_`i_8 z5@=C%NQ$`Lv~7Q;c81>Yz=udqLr>W9blvBl0W*>T*bvDe;m_>=XqFl@O=IC7w#c0| zvh$xT$X~cR9>3kML?kbM{p0g6@7vdQpIMIRXSVAhRY=(4HLF3~%3+cA_TdsAD;Dp( z6rm#8K_q2{fUzW}ibZbk8*me~NnC>o=UZ|LZdnI(e=)O^{wkq^aifo;Cq&LRGoeNF zzlC6tdZZ-Sg?_>r;?giA_0E`Fon{l@KY@z^x$knFU|!pPiea0|MS{#%H2q9-z^Wqu zy}(kOZK7fo^Y3Q#lE6J+;i;8qDeV;P6cJ0l!a!g*Ftn;HIZ5)q(N4<=u?RHD%L{cX zE(FbQBTBeQL9qzHkO-GG#0!P+HW<9HX?)OdUmp}>NS?7szlvzT;P;WS^p(XyB&Cew z(6oDtZUUKyQV_SJAGzMQ`Od-zj3SMQAK&0RE~}pJg`D+vo=rgj^h?7WIVw|sbecww zEu^-1eLd=FpL(tR*!MiE(0ek4qRKlLqswc2V>Myb2XD-P`3D%Y)XY$*$rCy@fwT@D zq616)?tOgy{PZNM|kf(v1tLGRMV35 z5FE6DuF$C&vOc!4734upP2vn*=%KJO-bw zNJ*tVMMS~Y+K{iJ2%~OLQN#h&q4B?*ct^uev!e+cC)lRz+CKvuOy#qc$bikLykcMH zM1?+UL8*SN&NBj(;ez6IhWE3EZiD^VPA0UK3x3d1tBB9{rT`y;f`t1U~ zfu;}S&uM7}_s!Q#4(d48>csY~aTffLoZC>hvMIOve^Dk>`Nd`yMKV6ib(F5hNpvjSZfZQBb-Ls3>4`xCU)NdUN=`P+`dRLt!paiNm=k? zN{8OslLB)2BWj+;RIlut&SiJ|jnE#xUaGcpW<0;;az<-<{fmAppb!IipH>N}3TQBl zV8!jOS$|0Qp!Fg%`kL>Um}CSr7nN?ufpUJkoTgHr5gv0HtENn1Y6rKt+VoFW74)k+!cj=48=Ke@*0WfFi~1ttV{e+G@v zYcPD#Fv&boQze-#@UUn3xy-(Y-}ORkG~?49z{+O1#JPE_`{`s&n`xO|fbd`3<78+` zAZBSw)xX;urA@7#b|jh#N0bw|Ok%{N8zb#AlTzj{$Z?~#@^F+N)|fTfstF~9uq0Fc zOD`(T?Lv_yO3ho>Ga2xn0F9!OiUx*ei;&h3b(3lfqr4 zlaD5K7baF4eV!DTY~$H|>c2qKE=A+ zc+5m5GL^CHekQ3p@THPfPlL$In{VaO+48H!t~cDPum3@@#qGGeAmuXzNtS{Y-pnV* z$PAk`vr`&$*=I#{DrYK^=aqPYTQw7Jo``5wq=8UmRJen+rZ)Y8dF>8J5qD7XjGU4r=(`A(x#)C*FPMp| zd3gB8Z|^xfssT@Wjg~FUFS`GlO}PMJB>stlhW4+gotp$5f^W~aqr%aFq#9C8_ifXF zrw><=P0YUys^-&%<(2CRp>rW-Hes1O2AQz&3*dYF^I+y#gR~*RG4hd9lNaG=J9Nrd|V&P}aIe7!vf5L?$ zsBZwtjYCJcq?qKE?5ZdL5YJv{;9W4=L)A7VyELt}KWdWfo-{;#tADTnXJRsA4Sf@S;r1%=ldHd_Mj z5>jm@m9of#N}}~CLV!Ykely!R)P;CO3KmV_XYv7LKWSKXr2x?=BAk5wO3yj3nO)YE z3PVi@JIJk$@olp0y8o_#k>hXSO=QzWeOqi6W0mnNRaw~=l&8p3ImAd`1Jj4pOh%{o zn~C+0ugm?%w<*wT?DI&+iyW22$`^oCxc6D}zP^IOujehij)S`haF`w7UlyOceV0{e zh`Q&W#`)J-qu0dee4{6-`~O%&XP~!D(2L+DVHOVI;r|Nj6W}vvR-xC`^>W~W*=O_9 z5nbd~RK0BLJ=bJ*Jh{<}KpG>Q3sIR|jr_B&XNSn<WTB{vX+JEZU3AGs0$yN zDbe+$*UX_ftaZpf!F3GX7;D<+c=+-KG|3lCAQEOVk^Q~}l~Dz$#~R4vO-W@fsFYqs z)xw13yjyggne&OPdO9?}NLv_@b$VN0LbC9xPtxcNj+(7erF+1S-fuiJ%|(OV(kuYq ztu5Eo;gIj@TQXM~_lD^*m0p9(O$!>Z^f%gxYYWJ$GjXn;+J|!a+{-X}6?%b%h^65f zSf=O*O&GQTy-~|DxX>VHDRWDHl2I{^$#X4dFy?cpDHl{{X5xp5vXNEYzvw_I8jTXK zEqHPYFx#$Q*Rn?J1Z8->EDo&N{zy&J*x=I>&bI}ce)M@)>$Fp2TmUz2c3{)I$^~$z zUHi3RhxNsa4Dcs5w1&x_a}d$(y{uta%T6uUT-<_R8rTifrqdS`mk?U^^zf)B_-r@oh9`1m)$izOQ- zBMrdM&s^dSf2_N{U*l+b9+P$0mp%Rl$TLF4lx9T~3u;ZU#a6ASX#3W}bTfU574AaP z!j^U!*BKL_fSQW78do13eHJs$3$qLW)+Nc}ewoommU=L2?d8a(&QdF&^WjG0c()d)wF;Ic6~6jLEL zmm)n6+f4V*RsG?co_l&Pl)j@-=KRbsfduOoyJ^{8sBdA8Y>{@BBQA^kb{!XS)}QsU zxA{h2BqVUA@p5|6>d;SnoyCl)@`g=YQC|oAE^+R!X?EK?1S(?B7e+R`xH2~3_AebQkF6?(0D7oCk-~n_i5%2fh zw~cqIFX7?{1++eUhmap9+{H{LJO#fd$tJ1(neaDDSNjCir6QjGtW3VIsw>lPFS$KC zn4&nV@fqoZ3IYkfRQZt4dV%@{kau{1hf-1@x9y)=0^uFp_+a*aX8?mh$P0Db1I(Tc zHzLQ|4>y;VA;J3t9G4{1jj8UM(^*-G8abBAInO-D6^3mmUDq*sfb5A`565*d`k+Id zPW#_Z+${rW@rjmD4?jzT++)n1hYrPlzSG1%fO5CV3}_i_(i;vhyUHe4%aNs4} z4LkggfT?{;7832V&O0&=c!abwOGW3q`w7+MdEIlKv+!}7CwE`}%=|Ut-pp_QSQ+#A%8wA9bbQX&j3(|p{G^ny z3Mgd~B1AW>Z?48l%S2gabkaFC^{ykZlk{233MgV|n5P{J=#;5@c#6_S(XeLAp3Y84 z1~Na&Dh3@iMd*F_TRQp>hP!PKn`N`95Gg_!4d!7Yc+9k$*dSC9_R2;-8#8KaOT~5P zb_tfGc9_M7Wi`U@-=z5cVG!4@$~*{(s=O5KV_lqGva+#2)h@HgQy!ll2ws6n4`$W7 zj`grTN@ZFBXl~!U;;6tLs`K2rZ_~7d`JL%OAz^lB{_W|bLp2w1I4xG%U7rE1sB$Yd8lm-*gEH^a z9f|vC8%ttetDwu*&NIfdxj?R_BiY9f(QWp4k5 zud#yqNre%ZHuDtcRgT;huhHQMPI&#XwE$X>nm?3?O|BhkXnG-I#PUCETk8Km(UMcakjQ% z$`b)BkDkP~?ZT~Cv{F^opxZDLV1r#}>mhM@bF>Zz_EciQX=GJv`)7*o#LK!0{rKZHKQ+* z-^B3fSgQ49aHN%*S)Bok>Sn2jx>XwowU`D=TeJg$W9hnkd4J7yn zd)6DSWgsQh68WT>7}=tddcMnc^0ac$n@-OZ=9-`o(Kieq&1>?4-e1!1s@|8)z&WbL zQ_*H8I>30Ph`Hp%I^au}?PXT7pXqsrqhYEzd2O+Nmo!uQB*-v3p8BGQC0wDMV!bby zXSShcXMR2RuOC(JYH+yR#pwNsD<0|~nnd8p_c7UT5xfBna?E-hwfwY0@A#2@3VPn5 z5js4@hTKX^!J~|*v^biI3eQB~t@=GFy~}|AEd56@$6Y8^-F}Azi~=_TUKjS4>TS;c z*J-ad8(86LzeG($?g-B!uYt>s{@S+`T950Y*C4#9pS-YN*}tM!3%Hc>^I58F*`8Ev z)QNO7AsAnzy?gZPII?a@(T2g`&_PfmYyh+AB<)3q#~PM>eFP3h(lJ9rO-GMTG`h)S&C}6c=U2iw-%Ogv zLT(d>UUh5Hl?N2@{-0k)xG59-?@zqrWfWvXBNLnXV75HnB+X2|rty z5&KqqC{4irw%Z%H==h9v;_sg;fGRHB5> zOlh!cmt~<2;bF0|&dxOZnx0QpUz`qJzHs@RmJqIcM$oHa5b7-j`2q%~g;N2yRW_RO zu^4H{%0v(y{BI*8gr-kef4Sy^GWztpZ+*__C;l?OtWPX`W7b}KUxQzLe~P$g(w_Jk zPC}JL|EKP#UytG(^B8`-m8mKPzl+Omt2FuW@(0%+L5{V>LnNDobgE8p)Xj}J+g!y@ z1k=0;9E3V)((Bfrvz9Yk;9Y|}RAAi~^F!zn$YJ%pJfIMb-ir8(LBQ*3?X^++4&B}A zNevDqCxIR2q*~|fPiS~sjnQeq&3?t$-+`=XsDpJsql#r^(5Syzu79}@b-#dcGSY_% z$Sn0K6-@g5N$B(Y3e9evHt&FelD*-#W{uO{5(I7}dQWr^uHN_P@6ZOs1UMZMWkn$z& zwXK|l6gI-O6(HLE4i^R`BaVd?BLO2n5vc)CPgYB$!kh%YlOdw^$01~g93z!LED#3? zW0HeJMAV1!kZ37!N4{lqt{Z{3-EM0|g(|n82kc-BOEk0D29W_A&;_FW3*y^We>!ie zDgOaD|0w-XfH{eOT(Qk^NxmTj+?bHYRGA%2|!o#qB4WILAO~Tn@L8BDSz`Mn67kf zYEAj4uH0x}KI5bHcDW!&_rs@*B-RB zro$&prQfuILOxP-no=V+%>O|!|K5XRn}npU;u29<08u)Bw--8RXzpN;GFh9!qP~PI zc$sCCTL#pP2l91O*T+}ohc@C5=-|tslpu^}APeR}hTx;@6LM-u?A2Uw)DsD9O6Gy~ zrQJo7Q*l$;AmNm5x@sD#n5u_H4KAvMp5K*muxgGQnsXSd!*3z`5jX9BLKQ~NGO!%! zrJOV2&koo}Jb1h%5JR90DC$4k%*~g#8-DUbb?Ch(#z}^WA_^zCmh^@V^V$88Tq>R( zXUAv2O~#sG^LbvI#p$gqO-0pdsA6?ZQ`+*quYtpu{zrzj{{ewo6*Mp3xE$Ar(=BS( z%H;&}r@w}M_-dGO9K|df@5O#q43n+;I=Bi83cK76`F0iVfHwG^sGXzPi6~$;A*5Oo zrRke23Ai?BfrHemGkp_@kh1#L)hIp+Ra*t%UHvbfAq?L{hkL5$J!UWKjA>CyY6G!EGwQ0ta37n=95Jxgc3aYvFax zUN`2%21=@E!Ss9gwY?&zYCYXt@VAGYINVADr`dD<6Q`d!cQPJn>Vn%KVA04eyVO;B z+Zjg(JEyOoQG`+oX;-#tJ44bTQiG^e3l`pvdmT3kFB0jbcsO#e=~U0&-o+tXsL6o1 znf<5@Bjf9Ixn)8T=D|9@+~9JjTArRKkusw*ES7`bCfD_bE}E~Y1CxEZi&oaXA`4wF0MG&DJdExsM@nFws)%VDFN;^0^GB-aH zqV$nuI|?>j*601b;YJ2O%Jt)YdLMkmBhw-5;<{5=2ea^C^*)xCoXY)@r`I~HR=IsM z-r^3uf)=SQ^1sGCs6S3Af1=(r4#D&8y_!(=eE!mv9#>>JV7cPVoZ%#8#E;`#s)0jw zmITeWvX+r%?!MbRqQ&=hVz9kb&9$0*?DnxZ8qdwR#N4BWJ7Lg5hQxszk{KZjD~?Y8 zx(`B*L}`ibOZu2bvt8MMlYTe3AXk7?j1u@r?JWBJA^LTn1JLFWQZHn~STzUr@t|X5 zne^+XM>r&D)%h0f!9gUpMo$d6k{=Qv~3Two+o{-mD^xFoGkDw2C zO%yt9Szuto0NS246bz)Jhrx$C*<_>VL6T*GKSuD=!F3hWe`&PvK*w^EvGF0t^N)*ua$6p)X#o#m{DxO;(0nBrZp zO@#2-W!N)7jUw1j#LkBAo=u+)uk8YPE=6h=r|TNyUfV)Ga#br*v~*WBqF9)W*o@-3BB!L@ zqr&rRd28N;>fIDpy$?uj_ovGOXvwio!6qFG@uZjAx0EwLg6RJ%b7zlSUNbl1-MZ6X^vx-)bmK=BCxp4Ok+)~^R@ z%@&+cg&i2H8}x1b8!eI5$I?GN`(XIg@cCR7Z&#FBPHNDaoW{cUsbj|J_^W$4qdjqq zWxQ5MJ>?<(onN#2l{q#yN2M1PDFebZE@@IGbsDav#B8vd@(lU9AIq)D)G%9qoa<$g zvszJy=t70zs?Et+G+ILR(;-0}H>&Bcs=u#OV6%e{5ow#Y|G-zW(7aYrf6~|54XJgH zYRf!ORut5xXqr(Y=z1?fo!hw&o+SsRn7HD0C&K>V1-7wS_nr@3S^rGo?k?Jc6zr>! zxO`o;z3SZP?+i>8dF)IN?u5rP-(R48j7+)ZkPDvf9OnDC+>#E1}p=d%jcA&x+u}olC zP|)~F)sBbs-Ex|~zdwq7f5qG?WBJFqnElPDv;E7k3>QrshuRn2j>W`Mc_!hf_HE`S zlg0M%px!9fdbwCz-wC9I@41hz%~Vix5ga8dqj8Hpul74vp2>xzYqEgDaun~`KP?9S z+TRtVp$@=rQWeVCy|Jw|fI6mE5bk_c+jn6B;a>=mc7XYwyA)#Q{3MeC>NvJxn4dlU zTx1KJ+zXp_zbb`(biXz-zYhB9R{30XiJfV^7v3{#PasWHRP^q|q3Tg|^elb#c&jUI z-PHu{;6;t71&W#GI=HF5zM2{(zalz=2MbN%f2%-UH)#hA^x^-m%nKv`@JYupT*4s; zKe3KAtEq_?S7v9cllD6;Vu+aX`1|^(R!!p}aO+hx3z1y#7dAH;nIi_HDpV8+Ua&eI z&OnXF8!NY4Rw}VcyYRtfJDg@Zzh9~U>woEU-?vsoe^D~yjjAUkmC~LA-ctaWfaT0M z;z}-O>hnMpc5Z@n2he!Jb&j<3 zQk*#-_L1EBd~d}NLloc4h3QNsXaXS~ozLurx{C936KJ{HWmBH9Y~f3+E9U9&$z&wP zl_t#U$wq-r+!We2JTN-Is6q;P{U<^N-1~;fTJ&p@VA@i+jxW+cmC;RiTe%JY*pc=u?ijCVLt4H^r79_GjYq*9TayR(Q9$+n9 zFtBi5TKz$hLcds?uC&U{nM{#+X3f;T!aOJ0{%6Wt{rKi-l+&Q03?@(YbFIpqsV5OS zy!y)7!@$qVe{u!;A&mwl5mehEWo=v3YUHcSOl%)TYzNO)xV)Qa%!ZGPoTw=?aOwh` zm-yiI&A_nHJZvx1S_6sVf~EN~wGGFy3iyW2>&PQHv$9_uOJX3NDWqwzz zIcjRY0;?W(D-GNzplU64KUxjo&5+S3Y(WlIMq5FMDWE?F z5qRtUxAHp!3LRmqOZ`;+h|#}4+8KzxpG`U75+>%o$J_QwZqu57|F2`-r9k2fN(ut7Y^r7jtsK1A74Wv@hYuCs%Sx5OhCO@M{sqcE++*oOW z?@boVRMNiZ6!zSRAgvcpU|_+ZkY##JWl?AG}GqAmZbSpvTxTWO87 zL+;JTsTX#UtGT;c-0moN0O{r?_}D~dKgGGG)_!t@KIw%B(S|>iY z6DPd}+xgp_qNS`inK#*0W`0R$vPxF(|h>F)0Cfiv&_I_G?zufJ=az1P0iS}&|ptd4`jn4-CQKEix| zErJcOr87C)GfYc?d;SSZBoeEIHb>V^R;h^oq|3pDwh|5$7zg4k;a8ChI>7if*p*U|(9;2lSnP zLB}N)UX{r7rrJ^wzJrNDr}(N@GSZ~c%H-g+;P{L&5$%(o zKBQJ@KA+mRdaotHKLy9ZWc|+|?KKrz8c|>jTZ?*#@9xOIv;*c5n9p`R39%}hTI$wb ztNGp1k4y>?y?3n<{c__RwN)-W5lF5Nf{c74KZ2G2Tq)CBh&^Y_n4=;mwM; zwqz3oTzsP%f|w3#Mr=Hv*hn-~+EZwl$rd64Wy|KM05V)B#6_9$=rk2-M+TuMKJ+uX zTyKQFB5z}=yTlqB8a7OAt~M}h63e1y1v5WGPdziyW_`}XAsS?-MJDy%9Lb6B=WCU6 zHObau`x9HQ=x_Df5SLcGmovQOKJn*sI=z8UUi#r*!JWK?g~uhlsEn&a+~wwF+rx}`>Rl4;d@Xt_mQnt&L547O~|3@ z2MZ8G^|IapGIj*c9i#Z*AY4sPWXt#J$2<_7>_1buaUMSbu56>YT=>7kLn?OX^sa3? z556BxzQ;bIY^+~LoAkK_KHtOvfF54jeIMP{7hm?|^JJETTs||5#Me__z08b?&HnaY z`0kLocsY(#n)B6stO7inyw4p`GVqs1?9h&EAggHA#-gK2D5VxX>5VrNSuP(K!5lZ7E}xG_PZD$5LE-nf zLFxHO__){ACwoIi1D(h56iM}ZDH=m7zHlUuo0Fn3VaA76zycD5gO*xvTUMuSS7@W- zz^5pGq5%7DN3sV#A;RWI+BH7^UE-%(|96SM)Elc(X;?~;*Y@62@)m6+wlO>EanGV6 zH!{V=sK(_5kA+$ER_U=Lk_W_baFII{Y`UH1%e5SRFTrLHJ9rr`FZX5M(N{dUlndL> zn~Xlj9jAbGG?nHPmfMv*C!#4{Ut>;%_IvRDO87tkX?1UI{ul-mUUUYZGTmKt@1ow4 zv`;3hm6a19y}V-u{SA$H;r;gye8MyupczDkl@cJNt9q13j{zU*7*gS|bz#n5!dHlX z-!*4{w#3Z+Wguv=bs4wHC^@lC`P8%akUYg1;>m{j4L*kkWa@_?mH)m@LkkWrLu0UM zUk8i=ZhNYVIR*Y<7SqfdNfQ$r=b>$(lSA1qACtW3K*mh?c&RMj-~>@nYD|(ULnWG- zYU?k>`Q1(Xw;A-AEFe0GHF7R8LQ=5!O!1TQ{YB^#XXcZ-ILX}U`4Co=&meDGZ<)%i z@N+7VoRLTeRW^#VpKjPH@@JF^GgUP#6KJFmfhTv$bNNAtEt8x0&9;KyJ*7kphL|9r z@D4M1GYJj&H`by2*V<;+m~=FCg2Y}6{goRMj=Ilud+A5rpjyXgTr{d?Qus9YL)KDA@s-drsXr5r$} zS#!gNbGKP1eVp-lQb7~@XeVDT}(hAi^W6x$(fCv-3<{v z?5bCHGTt<}hr%T-#tqDvAilgLeH4MBstPDPM4*YW%5fhFUpxPX;nB?kFc}HBTBGtk zDc6sUd#>8qmmiNJ3Z0o+JM=@uN!GuxAe*ryh`Q_yA5wjT=<1d{^W`2Ksx)fR+rPqI;kas4h;G2I3dth_eFLN73ufqYC0^@38XzQ*XP;>H4iVoqU6i*JAnQw z`$SUJo)6-sbo$7mNz!g{l&Mxwo))N26Px+ZhM=R#6vnT#niBQ=rpFQZEc?mWnFMi{ z^Sl`$g=UM9Nn10&7X3H%g$_S)>| z24z!18Ad(Evwf52&YqKSZsG*@je={OJx>shwf@esxm|#+Nb;&v#pY`r0WWxVnC(sY zbcSO_l6j*^yYfb(7BCH&dqva4rdleGXMS??!TYYdFnpQC)5Ua)s|u8ME8^LWw5xC{ z!wrtX;km7{8?I!lEfANgZe1=<+Z7 zkrel>)^-gCb`AG@ny%tB%MM!8D-eQ$c}EDmP=XE%(1s>m3ZvfMNyQ6YvrBv^*m(UW zGc?`4B3E>iE2uyl!)jArBYY1H16RVtR<(din6Y*wyN_sKrCA*G;bSb?0kPC?@Gmut zYU;}xqUU#X*u#AZxnPi(gaXyNs)n}zd&;(%yb*r)MTwSAyIl!Pn#2`vE0@2Ez8)iB zt3@T?JzDl0@7NR1BX##&G;f*hp(5$wvyU8SJhMg{=svcEQ_Y%dg7?JJ3mYYB0TXNwA zKhSrjRG1*-ITx$y#MCEl$-M@;nfRYt`f&m{j)#NO5KQeo$ID-NJNA4u=5Zrqy@=3D zYq}Sl{x_nQplG$CAY@g3tZI?`h>uA>37pro= z`^XIrA*7K@Wxe?C7%*>%Eb|B`GNYTEsz-fbhB$gBVQny#`^dD>)*)|yBrDt(ft zfZ45KVmsQB&@>Cf!k+xmOC(!tmRR7l5B?sk2)MGv{zQRifimi8THeX+dnrby7cEFX z{5MO5&_TY>(Vr4U0!_;!Z3LYSLW*ykCplyK6j>OCL_bUb5cvh(5sUDpjg_wYaV@Ey z5vt@X8{rZm`#?0|aU6hGntuq(Y1R#f!Bj-yNR+(eFWeL4uV*l%TL#FJkg*-HTW?ZG zf#&`8+MzpXX`e+W0|7J{_thZF>hqeSY_V_tNDiBMFdPo;h@Ba2cwisgSR84B5otOY zX_adVp9m94Zv(f$&Aq>^kBv+ZpR_-$NB>d_WpYz7Jvly3#@DJ_hk?(gQ2D{`4rlj8 zr&bX4JR~V34!9>QEWC^W`Xw`)6#!QoJ>jKgDv|nvZ>c=?-rNeeT?#uTpp0>Nc`cSz zR!%H((9?g$mvR?==#mk;Ai(?ca-iMDlHap(HWu?A1|q9o3`JnWbp}`(qiNv3f<~Uz zsh$rqjNLS|r}FP{+iqi|Y8NrRNkM90P#gvigXQ{YiA0(6BAY7mJ)P1KQduX{7v< z%_qn<@zPn;+{F1~8-K?MpkI0|~> z4WjVRc$jx&p#I@xgAubV5)ba2Qc@TIXi{R97v1-8@v`dt*+^u??-s1>zDS&=G@aB* zJ1O&IpT&T%t7za5h0vG>DDBQA2@AR=gzJO z+b#G?%SWopG925kQhm%*Id$yXj9VU8U(QxJb;Q4)G-KwCG)}NfswUy&#TSb>Jk%En zxT|WS6CO^UqrJAacHSHTu??cKAj?7sjyKnB8Brg)Wmo@fg*YM{_wpb5@mDNz#gKBS z$0-!gUXQyK9BGjw0eo@8HL;qoKkYfqzwnk1Q;VMr#?!=VQ{jA5xk5K$#kcMm;otWr z!CUM4P*$)6KNd%$Y24^!yFFczaZo#QfhW3*(u7jsqi0=n>ChPIo@!GQ{`LpCmbYy} zbd-F*`T3x?tCbG)ex3p9P*Wb?dJ}mmRh!2bzEt2C4FiEza=$wAtJVDM&2$C==GM_| zt^oT=q^mM0=%PPz7vc9W=c~5Ye)Pns%HF&DB*kOjQ84h~mszTjKmqhMwgD%Gj9*fl z;&4m{#!X~}ZXL#vV4`y5j7#6=9@xI?(H(uOQYqt)>5rP^XRvD{D#hG`KL(~bgMXA4 z-on68!mPq&g{PW;wnsB00}>-I(2j;bn;NksVXx|rY?11qfV?oh!uPJWCB}qfE<`al z5rBy9NccTv2kgLA`DrTRoX!>H(#eM2*Wu5U6QEZFtFUK-oX3Gk(GzN7*wcqjAgObf z2mo_(lsch&q(2#8q;i46TR`0J8{JwrC4VBJv zzlt6mq|}Blop4!PKONLgtQd}OEiwKf&_8~LEMj}Mm+11`8NQdkm$`nPHurBFut`{4 zHeq^oL`s4!+ib30159d;XV-d@;6dgw4$%d;w; zH6ZP5w)^9rkkinqA*C&^PZPt=Yl#?;k#8Mn_ND!v8@OkXvB8M)(T+)mW;lhNN`iWU z?V>`}m37u-Yma$$X<<_ql&fN!cnsa^wY5{zxFLM24!Tops!GX}&5=pbpsFcFASqE4 zS3)o44SQ)O%!I8hT<2un88cY$BiWp>e62v?(VlJYmYMrbEdguYjZY& zVm>6CENwfn{<$1h>*FPl-S;{E$X~Rnz3gc}{IKm+!G}0n zT09Dh?{K|}*9<|}NmUgAtw;f%?DN_{IVxI$%l)sqrn9j*W7!qFxwYwMcx|fAdCp@|Oo=Cc@5*x+5>jDV4aIbzK`@F9G zLYvxepCvA79>C&ue?f1L7XzT;8bE6W_WE-vG}61|DC}75R+*a^JrieEOH-HpwTjrA z+FKNyr?pY7&a7UTEOdlw{Ag zTrCK?J*yQtU|o6c;!-Z{pEMo9hByWjGWoA721<#W<2BRD!iSyOr-lvZz9B7aH5(~C1VP!jqw7C_|Y<~2JinJ`Zw64IbbUksq4c( z2A{Lq?TG$53Qk9DbJ zNo$#b)0;ovL|C@tF#RiHXOcng&nI4{TU*8zKFJ~v?0#K zw?f^reD8BA(_}J#eTHTZ{^A^4w+V_DM36x}S+p=o2?li<#GV797nooc53hco87r9- z7hTh1AH5YtiIu>U_7h#%J&jJQke7^HF;*(CW`ReF#56NXoMtxSa(V6vd_9oWU83`` z8vw&c-)RWeB|&eksl)k8$vPED{^a^qquuEvfYxALlnlHU%I1X3s9W)1nsgp|txtlB z4`#tPPn8jM0QWxg zR~TF>%)5<^9&QiSgJ+m`muFq#zv%%Fe=7zaJDeHTdU?qy($orujIcp}wKa3s5+ou* zlcW-@aN9qVCTyCCpCk*hVFK_LTp>63ofW=W4V$pCeOhy|bp0_Sz0Uk2PPkC6d-N6ulOs zdpDn3w^AjetVODaAKF@)ZELqR#Q%FTvldueL;v)|oVj;4gd2ZVUw09DFOTrsxd_*y zdBoVhOQ{+)IAL|RU6!h4sZ@-IiVce-W(!&-CaqtBxwK_)(>8+dz#A?gGg2w<_;!=j z*F|3K&m-7-JA=sxi`$k_F2C=*XBKsISP8)zWSEASm}S=x3_#BR>WnZY?Ra#{`?Sc_ z>PWC!AO{fY#h`GrNqF9nzpNEvRT-EX9QeW&Puuc+x{>y=w%S+WXGnI-83xHz2TH4D znjJB6f1Zh7z`JU3siy&E8${`l7-=Evxec3Yk zEbuYWeCzn1uM5La^}gIrMm5Aj9}UhE*q>DasQ>!PjnNCY_eG1A>CUSCPPrzc(x8R} zr+>xL5AJQ73dv7Z7e~N6S0?u)rfnjhoTt1COgw=13zl{JEv`KTEV| zA+oJU@6EKb)IdWp|72cg;nIFwb*Ian;}|Kmf5k7?rl6NHlFjGF{s%K^!1!CpL#bck zrgLcp-w<>y{nB|UC+YD$8iA2E#_B8X0;q zk;^?CV|G~o#DM2kWKcj<+D6VbbGz`+4Mc>`n{^}k**;z(JH(55W#RXmS%kmQjE6>Z`*J=Yx6<6l{@^2fY+e;O!SgoSk=ikr zXr^NbgicXWaHIoQ8J-pKwB+B0_Jr_RS)nuok#k8}Ol6nqzE=vb0wczYd=5zK8ju4aj}kb9R)n}>F;A}}J&er@QPTu6-zQvL zHy14N(n8U8q&4#j=GPuEp6&W2`kDPBkbf_C#j65(V{^Vazj*|7_gX~WSuny`$bg}% z-;#Y~`I0jJgqc=6&icR;datqH?$d9tI83(MJliM1q54FfLFMT z6yu-ves`04Rfa4uKQAk|X7tSP;(liLb1Q6gja!`p%L3-Oy=k#}88gzsI_`A@rIufg zvbmy57xCACcP)7gEqv!_3Kzk*>?EV6t0M)DW_}usMR_!gC%z zuDw!3^TCiNF@$pXCtm20w5vNU+sIrsz*jzHY{FgeHzs=aePK@Xi+3WWNe2$KIHV%Z ztD;O<;Z`v3e)n#mh>FYOk$rKw1DXo$eEPKj@7%WYE$N$nnPR-MSD3soaap%^XN9hO zM)V+uf?*$89X-X2_1OQtSGmUPe-=1q$Ps@Peqa9`AssN~*&)qyhxYx{7s=k5)6%Y1 z>LZ92YjQYGqRnb`^$jkl2K|ka=IjRZ%6_NiAVVEnypN#pJ)NdqT$qa%ysV+TENN_B z>A0LE^l0m=Y8f$;JKs?-Dz&mH)Sni#795M8Bb4}_^y83NWdNf>fme%X2B}b)50}H` z#4siRpWNKgg6$K)iWkDph~Tn`e56RdD1h6n7`*ZFvgfmQSu=>Ds)QWEwilCCw5XP& zyhk*Hk@VAuc^eI*jo;3U`q#pEO-mP7gkC1Nd@tq|kL{Tfog$T7g4(V&;(Q;uEO_~T zrv_ci9dc^mb>f9ansP7nfJs7nA|t;xG5%^6%nDjayd=G z;7gRd7E$mR+Q)I7^*ElKVG1%i_9(TUPsi&JR@R>;mPd$i>oY9C`42{Xa0yy>X=bQ_ zd7rr@_x)MZCpC}k1O)5KVEF4aUDYfXNK2z!HfecSGb7*f1UxyT{t1bSP za+9;*xP2H3=cKw`J99bYW6F34xzgd@A46#cwRM4gY(&Zf2qfT?Chx|;Os_rPE(Lc5 z|B;7USVTRp<7NIjhR_xtcx%ee6~Y+;`@Y4fn22l?q3B8Hj>G6h<$vLe8M0*J9A%;> zsYFnvr|x1)Qb_yFDGJV4wSs2iixQs1r3<`n$Ag10nRNv^dr z@wHXalK<^;F|wEM)3iON$KsNrN?loF7$=SzQY@H5-_m*ZOOt*eizxM6)iiN`V#an+ zHGN}c;Gsz=vA92~P>}#ZZ(Z{~z=LC1;)-jmOCmG07=Z<7VIl1SbJp;=-pC@GZceI* zACpnpiVn5G7u#H@;d?S&MZc0?{L(P%9$kFSNqpAD?gvzQpIUFs|F0T5^M&T}l`M$_ z9^f@fw;x)bd%pSw|G#P6OtItMviD7mo~y){&Sk&0DVX1E^Dk3WiA{4dWg&lOs}J}m zL9)4)mFc@T7$i)7ZQ)L`}-Bp7#AWKO_RAdBcVzp}7 zv%>2dr$&)eZ}e6kO&pY}V?T7lI58ylG#22U^|R{D+VXvAG{hc3Sly8`D=W=ahXg(v z#igXYc22F8_GKtol169))n~Hp4mM8}e2TjfrQ(*KI&hsCJPko&5}WNyQ}L8K9v zR39lj1SRJWxw>e=MA;O%CXL6*qBD+hnjvk<^nbUydGe(hKB4qsVJZ4^OU#uV_j?+Nrd384t$L_Ydvj6duO;N5w?JB%f7twH@EPk?;Pym(Wn^*^g_<3 z_F2N0(3b@G&w@pu=I@q~oT7j`df3GinasD;a=>?HFu=E6OF+VGkq$I@Nse3g1VZ`t zo%5d$R|v|j>0{ZqZ29V<%)d1<^Garup>Rgi3))v|;#6G{`{F_T@6WLww3DmYd52GHaHX%EeoQ+)Tq5c;objI;Jd{uxy^ zA2C4)HKHv&kmH5KJbP=aQNsRcU5FI@VEb+i4hPnCWQCHJ1M>{OXO{;^_R?`BgmB$K3HG4Uek|pBIf{UAJHB8*8{L{3c~#=oW|6f_c|E$@i13q7R5`f@N&FrEptn zvqXwAk$GRi1NK|9HOnUw*Pv=%CJwPIxSghMDrg0~OW7#(uIeBIlAY9#P1|69Z@+`8 zqfQ+9UWuI7x6l79wb^Y=>beqn{54ck@O_(qg{VsGAIX>&o9919N~UP+dYZH(;5XnI z4IJ}L63&`Y1c{T8&V2fC@f!ycdHkJxReq#-J@K0Km;efdEc4e1( z$^3d}@kuci-Uo5r_Czi$o1%#IRg7XGXwL0Xa&>F?z@6A3oB5XfoA2I&j3y931I=KO zB`(p{jJ)7yFt+MuEJovV70JF&DwK?(xm z7JAB>4r@zJ$bD|Y<$NF~c+u2Xtd=-gECXZ_gzMnbXk%=vG_DJzQIbIXDgjhPk`wjh%kaJUj#&zq?j~UfVXYSRnozY{KKfdZGj`$7_ zonucS$U@Y063NcZf_us$ZD6$*`j5W;d7PA3`^Awg4ohFOC z*QfYHPl!)=A-jgL8bkNCf`v<)il+~?QRYF)C(R3uwi%JSNST-jYyeT!j^crhHoAh~EAf2zq-?LcS~to*A*{!%Y-som?-aK;-@attu3A-bG% zrF0ss=2aQI;-lMW*Ok{TQDDv4cF-#%tRJ}&KR_^laqtM(+ca16-f-j|w_yEe&Q~{g zy{m!nK=FqWS*j1`-9gSPcB8u)C{eW(+BL?go7R-m>|D3a~Dt9}rb-L3v72f|C2%!(R@Q}-+5?5mi{6+_Y> z&_;`uY>af^-vC=)ciM+cN^Od0vo@iT)q-A7MR21KY74urDBb~mL7R5PQV%*(f)(Kt zO}15Vh{w6 z-BcWinz&q=EIr!M`?VA|#~E{Sf5wPUjn((KdFs!N5#6%R*r}=gCIdX#$*xa|k%bS~sqQ zy^Bet)X5=-K2KFWmK2l7zdgu;L{9&l=B3grW`ntFUEUDW1;T#W?^x zZ>Ti%OcxbpZ<(%}7MId76g=*pW~hHkqj-UDzG~g1Ez*>Wn-YY|H0RIFystT&<|N`* zqwOqEFAEPb8gFB)x$rm6jtx zRgz(oWc|RAonB%h>-F(5`EyNG;ofswl=!I!@gdKAopqJxUaQ_x1nfn(Fu?aUUcy^F zDDfi3rKOsf1;kiBApGDRhr+3*(AtktbLl)y+Wu;*9|n{p?_MGw-KP3+R>1%d>$GjQ zSpXseBoKI2P`xX9yR`XV^>|_Pa;IVeA|Zf8N2JV9N9D11o=0z zAltOTbr>!#lOIu67ieOL40etek})wfbjHf*svEQVO%KGxmECUlLA8&Fk#EDJmxIE2 z5F=5_-oi{g?K@PSCky+@scHiF?rdz3-dTALi;%m)0yBq^l@ca58Pu}UVTt;UrQNy7 zav?-IvixnBMKH)(H)TCSZP7kA0o6z)7%KL!0fX*r$r3N1UAF)+#)>PUGvKSz>O>GG zSx8djCb}FDyHld|I?0#K-`mKMUq)aQnx_4$6${s&CB@|^7ljAdSVss)q+nKL(eXc6o)#<%M_AI~1^jdY z{k-B_;RoD`NYMc%6N{+hWhgS&CkbK55wPDuReob4tL6AKffX#ELXx+yq0YI1bimT( zUQC#Qfc}KzJ4gc&9rAj&9=62l^z`-${KV}sV71H#e#l*iV6C8o6^L74W(44Her>M8 z^d#T=Ab)8LzBJbGUo=GMJmV9}8QgRA(XfL4l{??#2Ex#acoy~BGh$^m?Tgtc7d@jo zVo9;36!{em#fLJZ7$P%KX+>wmo*io7wi<4)jX@4w-xfytO)*DLup3nB(0dOd z*A{)oe;G0RQ|HMsLZT3XFy()tRaXZT0=j!f9qDsTCSSdUdV6z~;i$X{i)me|@G2TA zNnIdbOAVuY1@7KEY(5zEhM&gosTQ;n3fxaNL=6;Jx-~Qml@w`T7h(HdW*?B0m^hPx z6~<1`PThoYR})9~SF3G1=%TM!Ronw=g0}QyzXL0Q(h3ZD`RBsz6adBf%SO?5a)2Ug zSRA=wEwwL}jxMkfR+Sve^_o2xYN$hBXShZ{C?Tbvit-WapbPxU>-2B)U(MflfdRk( z*NC&q-F^Z*9nM7plu(r@?1mErl*)3_tf06inZ?o^1!a(nwSFUkH>CC(q)N{cct|vL z8F7`Ld70(0C^l`r-La@YeM0>qGl4NAF5|QM zOYC3xpxpBe559^VpbfKF4UAtx9rfm92ZXX}Ewc$w@3%L{J}`z_4(yuitKjT=gB8FV+VS=a47bIMy>ep zC=YLc?Drga9B=_rU=ju?GD(^`ly_C#>RCFpi^D8tFphBauH@xt+dV{vJVcDrV{e-Y z=bm@M5p8XYfbtg7JBH~))GR#fwx0%fQZyA@T%>)7Arw^Vto#I_%UZ|7LW+za5bqS@ zyfO0bi<+4C?udJ>6PS`)%8rf8XdJK`q%w|7O(KM}DSS$0L?2=pi(ykSOnhzfGWQk;CBZ=%D9g&qdUcMzL$%Ns*%Wo2Re9O+))AS%#hD zM?&CaWp|#aupXOQb@qv$L@un?xOTPNI1YC8s4pdz?PWgy+@P)$W9i7vg$HZ$1~%1; z_Xh9)ojY5-9(XiK&P>hKJ~Qervgvd3M5M{PJxs~nPAC*+yq&M{%v{V1@PB&p!ZQ(c zzR6)_V?AOgMv6i)N-40A%HmnDwpCIA@_UCbn3<#^j9)4~#O>wqEvX1+v^NaH1?xf5d}D0ox20{pDJEGDtqO=$9QaxIh}j<_L^uy z$l|c@bDF24r}qP6GOHFXEeZ^>qeM5H&`3naB*>b0DlWaGNRE%Ce z_YKX}+Z5l3%`%anP7`V`1u9S)=C@tW9G?W095#EbP8V6(XwqSXji?Va^1ilM#icD8 zcyE?D^C-4SwuF;o0YfO6ec{WGcQw`~IpUi;X2J1HJ6g@gLnf(=aNFYR6!O-;+$zLD z^2j-LR{FJ4sdF&KZcGYP*W@x`iavSdj5^crh-T{b5+)dC@a6b&$Woddq^z_XDu7?xD|GY36Vy4GPyWFFoJz;_ ztES&fxau2S&~M7O^RbwuEixGn+n)ALJ>+%WHZzw;1c`d=)M`P}e%xrOFCY9^HtB66 z;TXEqLPc$OzRq2?kvKD)M`-8W(hskQIph@A8vfOacs?l@2YIKm78Seu>liZph(=BkE=t!-th?wXB}VtF=v`ne8TFRv8DKQ zn_p7z1Ab&FN`04!+G>1d$kM(!8ICaCA)jQb9f_$Y6A``~{VLR)v6=ee-~Bapa1t{+zl;R@M@<~wBZp$N z6fS*)z?yx{Fl!gt7YqOXRb7-=iCLN@^_kzhwJl^LQ1+me%V=Qn7D-W$uL@t03hj4d<7_r8v6J>to?@}>O*Bvi;} zXdmtav@I})Ezf1qahl*eF+pf|V|<)*Od{vp92Hrucu;lUf!iT!a0SvD9-)qCF{=!aoOkd3s<O1- zmIq#G6waBWIN(4o%Se|-73%#uxA$1T)+_?>ggc25!H6E2O=b?wAN*hr?@n_+K0ZFN zhCBvkoC@8>M0s^9Zzq~!+K68CzjeahX*fj~t-LMCy%1~we)!zyF$st!G0Gp~N3Vy; z%!Ge0f92EqMh$8?hb%IF^un)HUaB9LSK$V?zS{-43Wk;zs3GX1vo6%N%Rcs zR*dyk_K4g*k-610EDG-!Wy*|U58;(fH4P-U^Q-03jf(jm<7=b`rSJeZkiOoU2{9XO zhqHgS*ehi>0T=)o+$AnyyUZAP60OQGo1~MdOzX>8G}R2-qc8j+>8)P?4|TB`M3MCm z6K}NXzIvE>d1-kZG98Dz*fx6a+VSW?0h7B z|2pR{kJ|ct#jn`L9SMN#&Mzm{W4jKMYl5-1O}r~C{!Kwj2M zyNFK%FdCaSQiN(3pamL+jgQBPm{!bP%f-Hb13*Q$)rTpRiW1O}_g2TK=j$H}Q(de9 z78AQ~1p~jaoYr?~(Hoc?g6q3EWX2D}v4#wM<@v^#&v-qwXztX<8rf9QEoFOrrAnWI zT1+nOT%~qZ8beF>5ScN?3qr)hGk30&&y=NE%G)t@HV_I~pZ#X?2CtRv>8ZvIN?|Y0 zYjMvhP0Gea;wfq9O&oN&^!A>*0pXP-;`R7?N-HZU%L=}zcoQZ~qxuwXJnKfkP z$6JnNtoqz;|LkwA70r??a-n|eeA=d>n1=aj7yEnDK&hQ}#jeqJ=lN(Ti0GC5Vjf@F z&r--vJ_dbXWO$6XvNKrX;p`Hf+QUP~HP!Erx(l&N@}lMc&;i+->yRU! zxmuBL`0Wo%)kEn&r%6zW1xCRFg^F-i&4D5NiM-GgV`W!;>xnM+@y7Pfq;eQ**tIe! zjf+fs?Z@|O@$&1Q0KG3?_H4x-p$HY#zpE>*HC@0}($_1poP<|r6pIej@jfQH{9(4+ zQqE&z{+}V_ZlbMzvn;)CNVoi{;dXh?`*C%J75Zlm?TEyt+>bR0&!p%l0Ke=Omf3GP zCyNM<%-QCGeu_-q>iW?B@PS$lprZ{Mmj;9Y_OSlqbC+u+{p24gnD{dCH0*BG&4NMp zmrMmEt>@I2G@HSj1KljC?JsFu2vjUC02w9&O~E^7L_n}OVrTaJs78JM@$dLIEP%3j zRo`{$8T;)zBYyAXD;}o+_B&+_w`fQNoOc46X1p{#qF@=sns$AW%O;@ZH#9WG(R9x- z4q4sUzJI^vFX@j6gXFnq(BdhFGzw0M-Jb5a;S2zUE+K-~)kQorIY*gZXkGAUIRAa^ z(YK~zKEr-7>Q?bbis8WQ=chY*IW=tUi*9N`CN91;F34w@(7x(j_A+5&Dh_b0`>8JGw+1hGFl$ zyT8l+Or!Bu*u$_9o;=AR1Fe>(DgB@s-Y;E__Xz>W5Y(6G*j(+s z7^F*4eH*O*cx@SgNeqXUJj37W4x4cUL>B`vu+Q+`AFM9Qm1+Z8g0M6*`p?%U7VeRS zGs1g{6Bfm_9}%0E9cjO1j#4*t+$YKNJSLh3hMZ+Gudjxk&?s)I8`L z*IHFyXG?t_vw|P*JBdJ>A>iCSOPDw!qK7}-bWwza%Hl|nLE(@5^<9ff0gHiSL2RFW z=)C#bR#9u%$C33e?i=OdPnO=?d^?yG4tglmm)z{G)W%ROah%NrdjG6|m^BOzWDF#U z>}ljzTJ@NuyB#X>t7n9B5x6M7b$z`myX3!XK4~J{OOfpC+AWF2f0`!{zJ2AT(yhFv zlSXa0D!}eIF;qH^U4!zEcdB@RZ&4RU{;~mWWQ>6#8|h*`EGCRH16x{hdk;LD& zs(vq~*zeQWsm=k63UiktbBVTnpg)M!7cRkEMUfYQp7&T>FO~ghGInri?^^}>p1$Jv z=E|^VU7%k#QnPLrfL>G=`(4fW-R(dR$mjMJub~Km3Qy*%xRVE6&JL;6yKyS+lTXV$ zOutO4Z21gHmnQ-rgEQk}q!`{}P*A55M|=01z9Nk}B;FH!uN}{V3P5`!^JK5^q4YV;tAowO8`Lv7P(ZS)4>D>& z)CZ8|#4lYCg!F!Ckav%tDnQ=00r0Hd#eu4>#BOuQ7on-FY@FxAs|x0ij7=P{GXeR| zNMA%kry5tf1wghovqXhN7V^ddYg_N9F86dhDW(tN_HKYA2}lDJPz~KESXd4oJI(JB zrV~cv;9_DcNn8jN8@YvqJb-9Cym`N}B;n=dGpd0ur6c3k(XdzTt_fBsv1q?=b>QwJ zEjRW~BTtl3JT}WyMC~>vLY^y%N=islwR8Drj3XO&GrD+SL)-29nh8!#q)pwi8t5<> z3|_pV0CU4S4rAsfik8FqKL8Rz?Y?_jPuGZyJO#q=pw3HqWr>`ED$Sdq)Sqp$)RO*B zIlJ11z|liFKY;Cv=K3&O zJq{#-a3mWrE-eK%3!jU3f#+=F5k@4z>U11Emceg*_1d*d?wjBIPC@`Z=l<+xKkL5w z)vx;H!w)~~FX!^*%kIM;{;+4Br&3l}KK}8KyYGJYyB;9FUVxiq^7nuL_wM(9|M%VJ zKmU2LkOjw0w(S~#K3U7GtzT<_>$3#_&I6ziOP|U@e*cMA{i=O?HoAR#V%cJ@4HUbx zJ%KJ-BfyoWe%GtyN)v$VrNt^$E--VVfIQosxgzkZbP2>*;{BHu_ya&52e$$8heid~ zZ;pcX?G*LZrEZ-9_it6HDN>M5jP&_AK|76(QWa=QI#_hhCZ>-?;mwvXc;2pMP>Ewl{@dr>_RS5hLQGBR%BYwPPoHmfcYWmFl4UZn*@9~WEW%X}8#ykQ}u+L)~QtlW*uN{y+xKvO$ zzKzjm02#w##qkIp0e%h(x)S`6T5fVo)vTuiR&p7Boi@HzR6 z?S_4iZACy3AXE6-!hq};Hdhg^bg6P&$(9|iWOL9y9B-nx%k?R-yZW8?yF4)qr7D0K zxejB-C()p^w8odmos<1NdS)I-AJV6nI(Ef@TLq%u=QrzBuyx?fahEH5X(_>ufrWn0 z!|!snN?sb19+(c09%lLCP1{`A&fwg3zMf|lB(D*ZoPcu65uO!o#j`^Ie)8N1Oq$SF z3Ah6EBnX@?D9(

hhz%|Bvp`Bd3#Ye(2Bv_doyg`vowZaCz6xy3(c%u0W-wO~yJE zfL5Ta;-=-bjU6w3Io8_Z#;>)wYz1hG1*FfDy_ZNP`g`1XTZ@|&ShPq?Qj1kkNVI<@ z>#+IpN6m_Xtym0ZC7U*jA1n%@oE#oeVD5yQ+8}0QQOE--AyIiX1wRxF>wv=%01*J` z@jsZrM$bQlJ_cYmlf)`J-cn0|4iGkY0Daj!J2w-`{KU+A3lqIv6W~U!DHE{FQr8mx zeL{Bshkx~tV}h#T-}(GsKKTK6|4l)ECkPIZemP0z@yAc}9bXM#?C6+Ut0bLE^lLGXGi1TJUgz9d8fRhTwtOmPfYRRi_iJ} z4jj1IGYNKeb$9?udq=Bl64NBd>h2Qzq=5K~vCqd}H*+Dt97}@0ZyN67TnE>aYDJy+ zi|R3|aHa7H;E)LwpLo~srTT;sjZc}zIqaBAEyKQe#-Orz zU%U=rKxdA{dsU@GmT)qA+sV^zsJYqY2naeQ;+0udZp%*;H_~$%6w7S3bnm(R64#$o z3aHxG~cQou_}Aru&vP@zI%_?-$ionAw@FNqzh)d z0TH^qaO{FlTE_mUtE+JDdDo4uTqG_deM{@X;q$*$KNrsRxRRMRKSo-@m5q1Fz-H;* z3(s!!>{&N*?yR>1N|ivASC;-aK14j0gt}yL8`E*Z;CurKFDGHj zz_Kuf8z}%)1DQ(}1Bfs79I%D{Kla`ONU|-h^ZUyCEMHx&y?>^k?bpxy_lAKP7SJxR zfP~D#?uHh`5<+Mds|9IeS?$gO0u-89h!{c|2nH)=cr(MBXZm^X+k01C)#ZI<`O^P) zZk^0q*_m0HSygYkC-RH#%FLVBoILm3b3XI`{@;KSUc!Ch*ML;NFWvdV-;I6tsm=EG zThoJ2tRPOC5`c8<=toxn=wnveux#&y56t1ckFABtsi>|ptb3Ko?_kYF-|{v^IQfU> zpd$mK$H&E(ASMX2J@L}SY62uz!t6abIHUy4OFDK|z~5FS6>ib?fKhv1&(5rp(MkoT z2C#hc=-TLP$*>soAL9rA z0?!gjzCHX`daojPGr`IePx z>8gL-a?1fR{X^CW;U9_XIgVEynW>P3peM&wH{)3z7jXq)l@=u?POD1OfdhAmDZgFM zxGGpk$D%qGcITNhN@7%E_G6DeZ4HVm1r;Y&zbf+-{R!U4>sc`-|HK3>jkiUSD82aF z$M)&*^GZ6cv!DFYN3B#ChB@il?|gj9KKL|9n&--8BBYuT$s$rCo%$!f_>gq`MJuY! zja1gpE#dWWWT;Ee!>H!Ph}N>Woy|2j96*2K>Z1LZ|L2SbF_&9^!Eg8VUn#Tw9qGX) zYrS$FK)===%pafcfqW0-dm!Hf;U35YK#!sekf5ljH0F?>P+*p9<6MnV--eO*#n2(< zjk*K(`b}~+%-g_g-!oHCzG45Km=h_s!#chp(=%`Y1eI!F*{YJWlz>H8D4PVsHed#v zq@I!9JGjF8uGf3|9S6qbiDOnN1-SA4M^~JBuBgcwoD&LQ`rrV7)!JGZuCjBSQ9@7M zE+FkbcMWdf_*;OPbCn5|!(O-Pin)_K?AjgA7nI zf{_f1CJKKz`DCMj^aMI7#l^LJ8C}l+kq!GiZO6!5TB;SZ__vi9(5C=br86$Ki*53* zyYAEHDltfnIioca3Hl%Gz!G4&6hSW7ewJkQ4-LUcFr)FfC<9hyuH}HAmI3BU#kC6< zlmn2BHv4-Ju7Kd4AC>hDv(>O~CUWuofZ7)?71js4s^&NZmIa(i0KNd!GdFriN2+ss zw)y}BHsK6+zb^ssFreOVPxk6rPd14ufon4VV)TYf*CjhHyv-+Cv~}L%=IjgSPTIGg zdm$x&{?esO_6xu83kneT+Ry&%&x$2&lYR4>-xO0?pMB*kUlGg21F_RD2t4|wFMUY> z69HjgctL%bx&q5@{^oBAxc@iy7k}{=3LFRXYwSb`Z}I^8gbvAn%=f@e-UE@vvsUWL z%f^4m`yZaM3j(+oDboGrA35k)=;Pn2YQ^Pdo1QN=nCAhZpSsu|{@T6Y-q9cy`sDLY z_rRF-4+T#CY9(v!>}nLwSn0j=jFj8Zh>~k(RC%W)VhiP+@>$2f_xpWbugL)PAN<*0+SH|s zwqpw{h1tu6D}7eJd7B;lnST^J_`H}EPrY#1$_kgPO$mWDDaK*!fFy6CDqG*vr*&PR zkll|zV*ABN?{)bkyMOMRJlm8HI1yAMi4SlJ?DN?QIx$R5<0=n}U}FXVru5^*GlKzW z!ro34OrUJp=dV9Uzyj~VRoAhL=>Y6sfN1msdR+NHmo4=5x}b0Pd{jjvfRHOlJj?=0 z6)u3`K1d0We)P!eHgoP{1rOp$F5&AZzAtFqY6I5>#4g@#{R6`pCz1>>rwMfQL;w1J zvU#zGPMtfO5s-dCfzIjfE+rNO;6>k_@v|pvT5R}@Pd;S;?AJqPWe<&nfS=*g+?*d< zgn%UX4k17ekbWZo#eebq5&PAD_bqpwWPeCN{@PdngU#YcxqNgb`@9Yq5umV4C8R5I zWadwH&BSesb4qZ&+9iN|kCoLo2pr#O#j^X7$#j2@MFpfURN%f`39@C44as&}w{44J zGao&7-il_T7Fm&aQDE~$5tpnS)ps*9!MYBZ@bduD1Hv9x5E9#)Kxai|odBQlq__nE zBmk_F{DV}fGETre?LMySAHd+Wqh26pK$ZlQVF#~No3LZOV4nqT3i^s9ZrbE4$@u-& z>-Af&owcw3;h&^E-A8}>e^^aLv7X0%2M}OqDhC3j2kf|!;^tKK9p%BX<2|t2Uvpky zC;YiE5+d1v3j8^;c}<+R@Ml045eCls^LZx2TJ;m{+DHknJzU3CgH*c`$pq*xKtUcn zzh3O~iN6hh4?a&1><=@_voF3H=68T$2>k<~8PEWg`v6I)k&bN-029FUT*zMn=EX|+ zhzkV}KWpdDpEW=tO-;?#(|t+LmJ$xcM(X>?uRBy;oSR<|$-pZ%GOEf$0>HGiw2Gy% z({}CJ=j?^9t_ym8s~rR3)hlNm%Xqw^Z2%%#T3Q|K%h)EVjC%+v1iDq&Z|W-QFvbPY zr?N=B)m@-SRjIp+v?dR0UK&%sz@)EAI!grtadb(4>(IP3Zif#)Z&T4J+rRHN zyZi1#y2pKLbD_XFlWG(5RA%!*ChYU^->0}m&2GgENU8}}MMA%d+lRqipsFoOM8dU> zzQD7WN<7%dvpdEUKCfq+O?3|DbnYF*BZ$*uVB}u*?W1!tZ+dY5=aqm2XmV8T;yFw< zZ!)H+x&T`(_Y4p{diq5FpmlwE#7Z>Q7FFGHMgaOUjk)EYv!WZO=2Tl)2`B|hu$U~2 z*kavgtK4&F#XgmFWdan<+6%89(fT)M_uR4FI^{=>D!CaDPldqriRZ=^4*>m3c2Sk? zhU5>}wx!t`RWWW_?DKO!0POQc0?^eh2vn#wt%W3KbwV&VpO^o-z}h=B-z`^cPK+G(WEky9tb|k#P%AbCAnRQ8D*9*o$`u>^ z@B?eO?_pJD46VbHBFKCD6|35Ri&gGg=}X|aT!b}&-y!qJ{SIPl+)KdXR8b;9HB;S# z`-dKZF3;LXbw!x36J==Nva>6$kKGmOT1^7P9~Zm)CtBYEFf_@O5SW#fElTfIWkUG} zAq=Z;*yQH)zP=s@qDQ~lv16C?(A%Y7jq3mEI$~nm`0VwUFnhX>DW}3epsx_4WazCrbcZnZ~1TK$HS^342H;kM01r3=okOu8BDzv!NiNZpv$yLfVa_&EPQk%2xA zAdkn*eFE-UZ9U@g^hdLv3*y9#r@kIN7g~P-dnc1{(kp9KVr5R|fnt%`ETT7yIel3A zbg_J9RIX}mZByTZ*9mOd0mwQFKy1RST_X}cY z-y$1F1ax{%NOGQ*{#jh2WPK%p3=Z~*js7$1>bk5-R|}5){XQl4c67AK7Gr*k$2*eu z!TM|k>|dY?XQLxy>d&Kg>C$=Gi9sK=ZfY0);-Kun7X6+j-78h}68rklko?c%qqcMB zF10oDJ`L{ul5J|=t$RhnLy!RGuo$gzKNi1iN!MGLoVP#!=4;m7J7~A<+h&j5f4kZ? zZ*RPJ+>W2VV zvmauR4$_v1!8r^fVk0{U3gB-d;aWc6TN}W%YgZ+w75BitHDkE#7eOJgvzC z=vTid`91PIkne$f59E6w^B%|qK<~4}0jy#yU>IEMKBY3Hf#I0>)mH8~J2Y&=uf1Z8 z4?Mnt4Qw_l@XDFvHX&y-LKZ6y+*}RRl~+yv356cU;xPfhDgOp|6sL070nd?9Wdcr2 z49E!`WI%gH`dqVjleZ?mb$)Ej248;3>hHNQ~$I{rQ55kL#S8wUj?K6(DU09Gc`--9D?I*~lFQ9ybRY6d(Hh#o^3K#`YZ zRUFnENbf<>zPuFyjQ-y9?l+U6o1Fxu#6J4yeFX&1C>Rkqa3~)~sj!aD&DJR=IiyhS77$IoDd-%3M&B`-lP3C>Eex#XB|Y8#EWI z+^_%rb@dgFIWC*?;`G4z0YHgl7J{BVS5G)YyF|`T*z^g;h6O+qW3i;9LjTKM;DY<^ zok!t)c@O&+&JYYifFC5zcnQGt3jS!03I_}LJ}@LpVuAjlfh#Vc2g`n@>p&t?|LKz- z+jpOTBPD>I>z+S<-hS)1eoG8tDx0Z$dEmeS`}v>$d3)-qr}#Q1W15$L>6d;<^J}Gj z^{ZcvZBO>*H-6(cLj$1Ch)zk)wvr`p=qU{`uaR)(L?*J`TcpP-z`l`kZE(!`6rlJ1HGuzHT9Z4^H?kdTId^g4f@7m^t_%W!oNIJc zjJIN>4<`ncmP$VmkiM!)U^tcY?N<FwHExGSd%7HBTH`a%T2aN?z-j2Zw1qZdj|0&2_Rpe%D#P!7 z#}<0x_6O}tCLDkK>{Yw_AO4t)^bOdV!>`%x`!>sek$$YA-G6rcvTZqZ&~E?o54lrk z1EdePWmbW;q4(af+C%qSdBSrP-Y?hpBzMzS1atwRa^J$fi$tI$J{5p*0l+HPtFAn5 zP|xulU;f>d8xubL+%Np1{m4T~XcbVf$O5n&yHK@Y^2#NvzxQ4TZcI3A-9OH2?ux34 z#_Zsrl?%{WAs~Gr<@OR}Q2|Mk9-?AhF0EJPFfq~>SI2?c3A?Z9Bkc3TAAV%jJ9k@I zZQSnyv4PP3v2$a01H$~gf%G%e@;7Kbm{TB{F$Nnw^Ocub`NX18t%aJW0F_iJsj4zd zA_sr2WUttwLjn_r+2_Z^;zupxlx0r(TYTTl7wA3tX= zzw|-MQ{HpO4*SdB`IXrB4$LdyGmNu{2dS=iyJ8pA8xJfBvnJwqqw0v4@LCg88>v## z&Bp1DfSy^u0OKI|T*K_)Y{SPjKB^M#@;l=*psz9wN^^WJf=`rop$8~zBJ&0pJ|Zipy~% z8;pYuglVTsgaLumvPwH1B|MfanoVEX4a%07$-Di_8wGGWGG}HapO7RXg@b zXWMt3-ImGu#aU|$N{(EZ6XUUfrt{M6S_J9}$L%r&&vQL&mhQe$Hzu(6No-G5p)iy7 z-3a^KtN{ACX@Ov83bnSxf!rP-o>*bvM(F2o8_@N8x;1~viO?+YJfKs=$7+-LK$x=! z1)^t72>)h|BSwiHf;6?%xbYnTxtCmZKb~FUPkp^-U5qG^_1hho!5_aK;V&Rbl(p2y z$XLTxtHzh=523KT0CwAWvMS-Pt#v&(67_dSOM zpa&~3tW!%7%TQwX3i3Ed5o?`&zwDPM?U*VVE8SL4DiH>BaW$mkAVK& zS1&r-y0#8odcjr6;`=g@Lp=7_(;BB#*7!VhLLLIN6#i4t78|zQuE_Uy{P+>+K)r5z zq^8zxQ3Aqt&58Jx#*}>Byh#c6N;F+uWUdLw8r;rl{@@ekfB4?}gnW{P5^)FICK%|S zdqFnZxh_@gt+YFC*vS8Hw-7NKZZ&0DYSNy=lJ61L$v>Ta|BUz6bI> zkne$;q6bz3&||~^M8v@LW$bX>H%@947oW%H0vD z;{RGC6Cgd=z@u`m;9Np*y3?OzU53RQLSZKc-&5MPxBHC7XhF^nlJIqsy~oh&yEf*6 zL%xKwcc7$FZj+rS+if_!F;X!Cisa1NqgJY+0%8P0VP;=) zz-rjUJlKWyvfYFIajM|V0_;!HM5f|FP2u36H`cRdpZC`+EUeYrG6nZ8+S_lx=A7UQ zGJeUSiUOFA z*|?Tq&(Pqco1e&}XHNEPCb>BAyz{70Ol4(aD)Y|W#3U4gwm2pM=kOk9hf4;C{c_J% zFO~?(uBY)7;aK82fIk4$GcFMNBmmTxYR)ZGz;V|vSr!#;}zyo00YReBk$OY zFTbA_K<{?c9|D?;>AJeq&Lx~AtVNXGPABY#Fosr>Jb-?+9?E~8?}3}A2Wl42TbXm9 z#@qbSC+F6|~SmCz;~|5QCM1IFw9R2n4QQz->78Lbj)IBE{knh3?#@V zRishE$9vu3jN9=h$y~EbBXP51J_DQR2 zZwr0<`M&Lyt`8fgPt=5Mj0#t|GNbv*MAOq^vA-5nJA?77yrMul8! zPZH)cwh>Nw^rp44&-?R-UjZ}%Li0c-fN=yFz03(5wAgjbBD;3_P42b-jh9rdpwp^X zskF1=pjAE)paoRLa|mD;K%5U$j(_r^MbCV+${EZU$DI#7q)G=5+w=eax0NU(#>x!F z>G|o!=*?zOUSd!g;?3cf8AAE8-$v45K#~-=J{^@`BvsSb~+2(jq zarD$tn^973d56Z10M6^l8k({(`eJT)#HOxx*`k>4%G)}uLhM(`WI_E!a>$IppXI7d zMLUbiR)PtW9hc3vNmamF5ZErvK98+DqM)d4-fI;Nt+FBFy2AGhNIxmy<%AN)u-q79 z0O6ym~WYVT|J~4k>rmz3}U;eHbI7d_N{!f4Ee)}gs{*X&-@pBhDJCLe?^aM#a;&}`= zs7wBvB~|^}2>O-J=SvH6myb7($)o0CM!l zX@SRKa4an?bpY~+e1)SUgYqp+s*N4eIRe{dYHHFk6Algz*p@BZ#5TG|&+eqInHhk{ z6aR2ce1`Ou2LiGUeG2w|`qD9)GsXqTTC3nEl^f9c)A`+is{xg7YHiWFR%OpW|91jB zj|(7j!0x*9KKU9|NnjbfGVQ?qnh!`ql1)K%id5@!cI@*e_W3ZdfWJ0u2cX|E=dg)OuQCUwZZ~T}#)KJ`6CvTM71WzI)OJmB3zES*Ech zU#96c&Gz^qm8zSSx_x8`sef$vVAu;?Ylu-e+KX8SfPZHhBdX9J+;;)@y_*hpEF~{Ztn7NbC`4o`p)awT?{G=tbV z?nWXP;BdtIVj$3?`gg7}{N|g|X^Iu!UkQ>Q7lGh(?^SDf>~U4Nh}%}VUWennE*p-Y z`edWE&XGRJ4BN(669~7}CvjrqGzvstRi&h%g-Uz*<>$qU-LIJH9tZXfVr5HW9q+Ys z=gx@Ga8x=_y=_xfaP+@{{vNISLrO$!mOVmpB8pRPz~7b07CW^*7HUieU}eT90NYHk zCO(eJ?+qs>^VySbP`a(STtpD1niy7*nQ^7tEf&h&2-woWbo9dLUNmR54P&buef`&q z^BwXDsj8jgpu|HF4m&BP?|s`bxgR)iw;1T} z2@*S|Rbfa8Yb3`4pl@nwu|0eC>)FmM>DTv@$GEHjd@m>Jq?^ASfd0%md;k5n-1@It zN5aum*rSiikFFSYzu4%@Dx|O0P$@(4cIl&#FkoXvBDKPHoO76r230%WDF39Z&{e20 zu>_GhqzA=%zR;a{eoNJFiX+K3Jbn74$PB0S3sk{C4EoqfR5~jtnARBJxB#1>H)(|g zYKZt)hx{7s?>$&8a1Pgr9?!+-qJ4VgoE?7aQ|FHe?^744vIp+H)o$6nS^Y>-x7o?F zSM0eL-&Om}e&p%voh2ghEegv<366jONI&hAD4e8#=&P$` zfP^mWK>h&f<*-Al#Tr@*kY4?>R+;VZx8XP6u*L_Uuo8k0%QAlEm`(Nd+0>2$ZVRC1 z>Y8RL@NtC@rf2#r#z>z6NbeQ5uyeq(3}nOh?Aw;=6(bWM1m(bCHNcPymyP8(f<2Ry z!wwY8XITBK<@~HspCYN)=SPQo-0uX)y-{pgso3XfV?$H*x&~w2j}84HVBOz4=A89p zdLtw_R8)#lh!V}qvXMY~pB?KRQ#iq3pC{P?!w$i~9TN-T3Lw3VVVKgr;5;Na%YWt) z7@&BTGXc{3V2uYD`QYH%*uDxhr__o?Yt$}WIIHJd28;mnWJGr>2tt{_B^Q=g5Kaau zj8S!U<@&8bP}Tn~Ugs1jL3+AXvUetM5_E2^)HoK%THt9)y{%OkhqJSb*4nYpooYl( zpajCH6oGRp8}V!uK5@o71=AVo{`@#uaXjMj=%{XKF+`I9U8Z51Hsw^uxyV?wr{jt>>jdFf!B~~0Vj5JG=){E6N1xg!fBj9nZExqQY}?7&H#9nF7rO@R>0kRFtgX~w8YNO>D>DLq^oWgqXk^lMJoJF=d*%rRoi+||oUDEEWZ8JY)U#@4 z!&v0cO+qF?qWSqHyVfHcNUw-buH^mTpqMI^#2gNC1pvk+2WavS6u~r{^4P=(z&MWc zfoSa3T-oQ{2^0RT0AvGR7m&%@nI#K@R;UCLFOwI~+Qg-E*7Aiftgw;&_iK5@wg4E8 zO^y%*t}KrTccka+la~ad59ZWV*SOLx;PbW}c9&S_-}{q4wrS5ukba?{+{Q0luweydW&FC}B0-V$PPX@rV+_z&R4+pUfNXON$iTLMF}2Tu z834ut)LRc0-rxVzx9mUu=fhkgsWix*|AYVipId27JjrNLL9|)f4^s;>HY>Z5b+1Zu zNA(6WUne$hx>s!AVx&hZ1mY}fNWN~)$sUYe6EJIH%qo;9QXwGydPpkvc|iNoA^Dfu zgG3b)NGfE{e7}M80P$eGWv)cZ%WDLRsMRzT*r1F-0PE3c5b&=MlOmvXnCWv70D(gS z%Z1tJVfdO+aJ@-^&|*DXiEUzEfbFa~Q2J|=|z;NDeM#r?y{DrszFby9%+B-4fcqxcfSNf0on zLXhCWH-L))-)xlNd%-V{j{`}(Z}`~!bBNyr|H(%BM#I0;gVt*zb@J&o*lVx9sD!9$ z+q>^pYpCBOMp1|fW*i6wX2HiEdq!ZwZFc423B7KyzWzS@=;QZLujLOC*@FHf9qpU# zkw>1?cmR+R=;Pt*rh3n~Vl4#FhlH6j`Mjv-ZA@bv9~!dOG4B0N5I=BV5CG+idd{|P z@6>N9wHIIfjtz^!vZZ;GSom)h+v+x(7I>tvFs|pqf(m(%n-4UeYNaoP+26BepDz@1 zV|CRw*Pdj509C_ApK46uTOL!g0rM0B00oc~6)eL{sa{WB3ot9(KJFd=5q#a~pJ88O zIN<KjN<4ii_Pu`tfPP-<)nEPHyDky>u?P3-+QFoK>THh^ z7SG%GMAYs&u-*2^r$9pcJ0G0U7@M&F;!B6DvZBnQqd|N9IdAsYA|=t(EeQ0b5$GYwleTgp&%RfFX9i&XY5ZI45O6Q)sc+n=09kl|*Eo*N*plU_Q^~aR`uKPJN zB)jhNMVppwQmE=(WvWzlq5M8owu`TSDUbgF{NiQ>&vPq0`@FB(&Ng%x)?=zv04`&UP`^u&C^I@RR3e261GZtl+H{O)84 ze>_%!`Pj!vJ#agl*irbj*d5(nBeE~3D5S(D{T=|l1HBiVp1u|g#Kf^<4tj49c(Mf0U&bk}%9H^~Mpo~$kCqx6x~U`IIN zstHI31^h|UVu5@f2tF&~mFTCNw{BOZ>(>D%vkhKwMYi`&=YxvV{^{AQ#A1e}P;KJAuCNSQ+0Y)+I0s=yFA+ z0UN#lF7egR8({#ouMkjEJ1*TP?r%#xHreL|Rks-(4yv*>Z3iifIRX1zA8hb z0KcB3A+Rau9Ah^6SXf;3szTYo@)^1$*aGQ3sy;P0r*&JtpTR*@u#>%ouGFIBfv}GQ zn~OP!%3lT2r|N_O!tPs5{9NW^$>;Vgb)<5K+pjW-UvCO!1fX``qw5zp~?~{W4rEgQoAbFw=b~t^E?Vt)q zvxRzYjyWdxImIUUwq14;OzzF9vZ&Iy+D{whpPv;mQ<2CR*oVpv<6_T;#1ctatPt_Yop;`2J9i0~ zzA&VHS0-SjYLv%|G>9P3;bf#^^~&c#e|75KGmetUlHxoIVvv95!{hehXJ=I%BOuD# zzNOV3y!RH{)D-t~k?j5aYaiKZvDG&>MC>1Z`B5tM zt8cV;MtU+DDNR=8z~5@yavv^C~+v z@Y;*66nwE9@Hi?6jv)k}G6K@8T|QXul}wCkm;yXlb)%H%Fd!plXa=5W_Z#?w6BI{1 zK@Av05P;SIb`#m>eb8#X8J65dm;c0*3>p;3XmeX(%_o5Cfh+{gFi2Bnn1;`n?R#$o z0-9$0MJGq)gz9pqA)sERC4=>Ob(}426k*X@nUzQ0pr4qhHbZc9tE*108n#$Oz2 zON(--ErZ^N2CleZ!`AK0ZOM(xWKHINU%oi#fI2*%NN>++XE6Hxao90GIY7PGmZ&FVJX3|hj|X8ljoc{mC}Rh5(a!}#c*;!Z*Q+X_nnvX0Q$s^&wtMM zK)wgoy$7lnFIf2^4!^j3^4SGDeYV?e_~9?yEl|Ts{q?hfHfwEZ(>h;p9s7Klbd22s z#HT9B9hEch^reB=#dZpWUoA#DWKJO7Iq9$EWhGkMGN0RHCrk0Be|W;W`vZ_1jAwhc zHVK#(2dt$y?55frDVq`_{g_pj1iC0ep22~r^nI~m3K)aVP$U*X7o@9IIaejjA)^A& z_fH5MF}FSpQt3J^8G!z!-}!xu$nW3Q90V`Z9iQyG6KAhl=l%EF{%4;|_O;tKI4Xu0 zu_8t)1Gb^rsi>WJ@vvPIn7*mL+A-3Xh#fdv86A&0ApL@vjrTtNgl#)`cebalDiJ0Q;CY`|SzS{sR-NG4oScO1U8R{rrQQJs z4Jio`p$!1C!um7ihsQ^+IWQUlODYl}fUW@8Co8e;cF5sRA|N}WiUyIL`}Lg1gL$xF z4!m{PqIF`#Rd58BsEuGUqWaN@Y+etDE1VWfUgs{GKJ|855PcXxfAqQMZTRSCwtb7h zq8Z2~C6Tl}{BTkLy+0fv{qS3FT3OR3tG(q;zge#ZHd7n~!Lelt0(zSfB7k}UzFZV5 zbi{hSC0QNTZr@kq2r_2t#M4j@(9gscbC^zrk3_UwQCNA7&7{`~T<{xf^z);KU= z9#$#^Cy^NiO6i|@g3SV3S1Dm^J(x8K(BJRF>x@9{ zfZLJsjt;TXXEv7H0ZIO(W1p|wvE7R58U$FMl}#Evb2kc*9^U|L^fP)cu^B5X>m0z} z|3m_T0O`4}2!Qom5+l;F&+{CGg>gSFz$`uk1Q2~i1wqfa-ZQ27H99roQsc|yd!Svp zl3x5@Uw_SBeg5Te6IQ(6wzbjT`1(I{{wn~+Q@W1`pv#(CnAKcV+ii2tqn=4EI_`NS zv1P3Qe@+bh{G!w?bqQti`a01FYDnHgRq5d&5UUl?AQ`!AMoL$W%0+hLa%p4xbcb-UZ6l zPxvb~N=Te@&xPiMWcLk!3Vgvasm$G>2Wjm`4$^ou3B)!upMb@|+Sq-PZiEU{>lQxmdxitOQspAgWZ zU1K-^aA(`*sQPL|Ne9dc$@&s#_LB!P=?2m+ z4^9Fgx*qKFiERS>htB8Y93<2LkPQ0}N%A4thom3o%k|PfQ{7L-2YyJ#6mbbyE+dgm zHhAW^Mf8z68q!Sj%w_ThBs3UdRCgxO?R7qZQsx~)X6cKp-VJi~LaiUbzh-p{V zs{Z=h@99~Zx2GRFpybg~`{>98J9e^50QpjT;NWiCzq`ZT55~{YlUE$D{zsm<+Zttu zO)2pk9sLJII!aEt#9=@77>9k=ln^G667w>NVqRFgc#c>nu#0@`%YVOauWG}%*yyLu zpA&#y$!NFTAs|(C)~8?8ZCHcvR;e~h(adgBJVWEGwcL>-RSJVCOtG;^D zgKz?-_o1w%8jAM?dEzh{(%*YdZJt)bU+z_grn|ds^u2ej{_gv&tT{ecEmEc6&6jPV zsm&ViynWpgemvMY96$HTm77{?*W|15)f&UeB0e_D8eLbfgmlIJ5E9Rb9XE=h`~3N{ z_OTKLwr<^F_uO;8(}zA&wY454s3Q&ajf&NE2uORyM&)y=RZ`{;{m_p}e%{*uAWL zM$b!tEy<=`KCUOY#E1TtLX#0mxTg)mJk>7prS%cVBw8{lp69{z!D+!NI^5 zX=-Y8L?T1-qck@+%dQ%;OBZ{jb1rIqj-QhR*FxE(UhoZJ_kjT-@dJA%Rl=lC8V~CO z+yjzRv+<95=JWvUFOYw9)+K%n4ED)&hmWe-Hf?HkRm-WIuw%z=yZ`=&mT>}s55l)U z-K)1Xy-vfJ;a(LMF6mx1TsJQQnlBJJ2hYNy5(*0os_pFAbB+bSv{Xrxs(wV}qB6aw z!o%*}`=r-LMHG0>wr$%X-(!>XNjN=%{zZQ$;b>a%clwsf8tdu9rM*2pgR=47Z~*!` z`LsUz=v~{t|29{BqWkJa>C`o{2l1sX*u{(I?8J#9(&?9EKRzY>x=inb@sq9}`3`%J zD)x|vcua!Ft~HAAay6XJ(yXfZD5<%(f7tp4My;x{+&WtuP2FMxvPA&ZqfdTzLOS@V zOU`Dy|L%Qu@UFeqtHf1s4*2ZD{sDh|+Q;>YBXExRIE`0c@RjUZHbv6vt9bxDy_tdJ z0rVMkQht|w59E6w-vjv`$hZg60qBPYClrjI7PDf&;_HJNfENL+<|?x)n?3yMVQYL~ zCHwr?iBD~2Lg2}rw>d{Qfh7!Y0!?A3GT>^!>I9@Ia|%#>y#qSQejADoV0r=su5EGv z-~{kS635_xpPU$wb8o_(0w8@PA~uOE%lVR-KKAj)*8JGBV&ji96^tJJNPz`04hq=f z1z`WGKzbbm>$fj~OnYj@nu%duUJ;3vAod_yjH``e>+pbV?klCbFzPUDDyvk&RDkfX zU~o=N4!M3Mkmj?f{XQ^Vvri_h+5VVpU;F#U9SFfE8HA6A5z@2f2L`hkX&jKgVqF4N zlp`clKFroYNkS3_FdThQAu}L-iF;PEbs#4OHwh3Xvd@S6#J`UL={1Moyr*rzPMDNBn24J$K*)iIe>9~NjN!i z(Jv-1Aw4fk6eoUv|BS{;U^H)PRZza9K!ExQ{qAL_zV_+vI_`|3Y}*aXLAMy6ymOPj z>*+d?)4AfH_gWd4ov!=1r$ut^WXqmL&<*3?v)lP~g7H~hQ=z$V#u>DXWiNof0x*5R zP#>P({XYJc;Kz(u9A-7<)yaOdoBK&zVLfu7dc9{oKnQ#-DdRqt9H26I;{vMv?Ki)h z2hhiQF#jgs1Nk1RnX`M|9cJGO1Id+!cFuYRY2XobyJ?u(V) zK6Oc~xXU0gf=au$sG5t))~1qkU8?Ld6$BQV1kCIR0jIC_k2;)YjR5sk`oA6^`l;zz zJ99Y>*x%Y#XLU6z^|w@Qz1g-;i;1eec3O<|V^&fy=k%`Lo*}2#6iR1+&BfaRFpJmK z0U!!~YH}%p8;HMmV9WvO>$h$Z8~u~kxNS==KPTg3d>{1e5O^6AXq|*l>^dCa>A+|{sgiT_^}^O1=sy*eMGCkC;4G>M_4g@YL77>S)YW$c zGWrG5D^QS&MCS3a83kjM{3543;KncmC&}zo^a6a3{<)s)^Wopld+fF$RW&Fk0QKOL zE4~H8k>5( zn8H&u=eo_X!AHBg1YYVD6MdtA^qp3u>SM_y+AEM#&s8g|5`(|k=u7Ie_lu=tpPvOd za3DmWpl9$#1kw|*BvE5t^HgzBsh<6S_0IPhW1aiye0Bn;!bV?_A-EX3cSxYlbnNr~ zI^kEqvJBzyEdzl6wFBw;Tg| zy#N$XKmEhHe*sa-Ce5?+V$TL}KQl9JZ@%@afYU>^b<1`KpkG=VRCAN-oSFWP@E9)> zkpueFiZL#d9+=hv;^J3=(LB>JKCX%YgZ<;~xk+T7r$QupF=QPD0=g`UxB{ld+S)ql zdt)}BYO~B&=yEmkky7o}OX7S`UO{C?B^DH~B=PY3U;kQQk(%AtZ%(siWk0F%P{Lf` zE7+j75+6c*HOy?;ThlaS#aHwX^Ao^K#Q8xrANUCje`t_!us-@{Y@KCWR1e&(XXuhH zr8_00b3l+T>F!Vgk!~13M5IAVI;0yJx*LH3q`M@fVPIf}IP-t5bDme{8_YE?_Wtd) z*1c8(5*I0LAa(yxOqc8G|3OD`c8^u3CI5}gc_&VA|rbu13~&-&|;KfiMbykd0?% zXL%5YhwaY!8S46j#j5$#mNVg?$E=fwni2mAU%lRkg{v4pYg%W3Dx``{z$yhJ98eND znktgln(#!!7W1b9azDx;TB(??HeoT>?nYw#N^B+6)OrR5Gr5{-^x2)jO@4*!D~TY# zNS;mL<(85;l@3T(p`bs`AwCYviJ-{UGR6Qa8TRavglfF07i*20sU?kbb{Um`zjn0> zmzWtpMEH2e%k_Vb{%m8|x3P>M!1E;+G=&MykIN>h0|#8rs-UK&`yE}NRmnzas9&eB zky7AfyMTxTs_oh~HA_V7cy+iWW1M1c<#td{lzRpj7CE%{!HH)O^~w0mSwe7Cjm>Fp z4qKKeNcf=qARLhENwJ|^e_NuZD4ia{96iesWT)0#wDx(2)S&4&HP0aIhGC4_^)Wg2^ z`$&db3w(iofSOdgCO*lkdk6cJ=y!=5*x&d4>UZt0ncW&PA2Gueq+zh;HDt^l;<6NJU-7XFFW|q4M z?&~W=?599LBY?Fj+_Cg4_?&M>%r7sOuwMWE*KR1Lw5o+5(?@SD z@zn=m9$4gDFJA5Ab%bTiQ9{-DDq<7xKJ8TTGak0gXgMvk2OlIQV zbmG`QxYe!c*$feZd0HsC(yNmU!G|(!y_Fta|8J5mh^VR+TNijB7}U;3H2T))eH>~& z$-CpC#nf>1L)?r1vT%tWy1tv%E=EvUEBK~@;rz^Yxchg;($6pOB)>T<0(RtLNeJZ8 zdZ=#!hep47V=X>CbJK|*Qc8{FRHjqbBpm(=TZhq6vh~9@cluCD_M)>dSiY+CPTiRW+I#C+<;973gU2P^Hl;T)FC!mcbXPJ2V-;+&y$H zaW7)$epdJZ64%qWV5P$uulst1+=yN61A{;Do0m}L%d4tJ3V8%0{T!sV4ndQQpM3=B zg*x|7^FMeOQkG@qy=@L$39 z99+CDa5HYk#_$}<3^+%a(&`G{Re7LYp%FNiH^5S^^EUS4T=J%Np{X%K{3Ni`6y^%& zvD6%^6aLKUN+QNP{{g8YQlZZ0*yia3A>n@nFaww}4guFc$oilyPwU-%_wtuGS7FFn zxVTrx<|fI_6qj&<+-M_AL$pc}-bSJ?{U>>}}LC45G; zvhj?ayU$@3wzDSB2k6X~9n{&vu0nKGm7Qua;K8^pM+xZw|x{ zg7gIh=o>*RljKd@FlB(^!RG_ZgPG`U@7E9_!ms{8 z($?{OZ}?p*r|Lg*d^a!ur+Dz@K+E#%IZDAeIdSR2W{i4_`W(UgvHy|*Dyu!!q!h3k z5Q81PuyF;pGllQx8A)tLj!irkdD%QzVm2SJ*jIy(7o$@;B(83-eJ)$iS`?GKQV9W5 zP_d?!Q>SiDYnX%7qgbdj_6>GVEo-So{o!mY{mSDk*?Stj)a@F?sSv?f09lz2; z!~dM(S}jYgUG7`=usMJk&=U}gYJCdlq8T+Na9%767g_ZBUR+CJ$4#JV*(awy%XLl;(gkfwi(2` zapJD5ho(mtynI`i^HGuUVPK%DvGl#$`|_Ugwp#juA<=Z|0)L>RaK&Wr{iL&`DvE>3 z&BVC5v)}K<%F8B5PJD;ILja1Vl6#01%9tmqpa&E~F|31N+ZhjTPYB=p^5m|^QMV_% z!2A5}BI)?9Bgk{v9ROP_$`Zd&``JN0X?+3C0dm*3NEB_E2MB{{YJ>OVDRa+N?bM?=kKk&pgXP8y{-*zp>$*;i5Bs z;xc68toRmSvoauF_3(CqeTWPW`n|QQ-8{zA)g&2K+;)tzmniRgvkf?L-&^*;%8ZHC zF*s%X&VegkcC|w-Ujvi^xOQ2I2~x97k4KUcPJ|w!R8itzZaw8;d`wK3Z2efI(Zdfx zLIBk(S`6@8MLX%^Zg|yPP~IW6_NXBrUD7~&ow%WTnCH9SGc(0qq=8L)5pUx>hotg} zz*M)=o%t~}WdWw5MQ5d`efspY`O3@1Yv->Zw~B><5ay&}rBp`Shhj*7aqP$AC6pct zF#T8zpjA%j<&T9zOkE3IE$7vrH2gs#8-n|h4u+$<9E9EPV|MHe^;p5FUQxPtaVdYx zcvbT9$Qj#oJe_})%{x|N@O4~IpC1}_@Dt;77n-K-zz~P^zkTGRuZ@4uxnBFMbWQLv z(NBqk^R{1wE!p!2U$rx|Tpuyu$XNlHVgWD^j&6srLlgeK#W7|+)Aqx}fKXkgbi05Z zI_JEyUBj%$oi{NyT8PJPp80l|` z6~JG%hL1M*&DBCxs&xz%b~baHW{GfmRhPiX!dM@<>Nll`&^HZ{6?g!-Nwy_s*+)s?N3>5h95+Q41C!22%h_7PP9g9Em4rY2 z_%WD;wZ^~hmR_4pt&(7^22lR{_th)9;dtRJslYTWG?f@IV&PoSE#^$uook#DsH%(g zsw_j)U~k62fs?nYS;z^x5_s0d_3)HddXYCvKa<$3QqCBRqJ)>ksd6mz^z@EMLCi_qakVx%vh+kMzAuMZ+Z=6dRL4WI zrp<-QT8EB=c@l;nU5Ira3o925%*@=P2xVCJZeGYxF^_WM+)on|jq~#^s@^S5=15g@ zhXMJ1))$zhcIQq@IPQja?HxaJF#*HYC$;U1YK@XLYf>3iUmKhLnDexHDOE7rv_D&J zr}i4>e(Ap~Mw%I+im$U?_r*#}Gq4rdMU4nh4X`Rv6|%cbA>y*(%)Z@?miJUWeUm^F z@*t9wCTk<3Kz6f=fA-=+f!cq0<3h{3y1s9WkcbUyV+buAu%T59@s12-)KKd2 z|EJ(=PlYKW@3y#z8HvZS4>{@w{!x*aSyCkRAW)ojz^%J{HU68)(O}2sC z*tF-F0yF(eL_!(9#D0_sUP?OKO&$-iB<+k2{(5GKi~_~6>fx2tYT~EvA*72va#w1> z+f4vwJMxdLW?d-ig!G-Pj+~kG=c?HULhQ-K_#%f7$-B|ui)be-4xF$Im(NHQQg!N% zvu9TW8{=IPz(Wc}btmeTCocO=SJS&p0e6 z3BWnG$O=}|jE;++Z0V`Rw(nJZT}K>c@1JJCg@wQcYnk1f1OF)SDcO|d!!?E~eHoj) zPZzGt4#JPbML$h$6|1w2AJXeUdF;@_MDkm`qXJKDs5f(qQvf=lGG+A2F9CqAVH;!f zW&6+@r_dUSw&k#cKRH*(YYT1d1OO+Q&v|AZ`>ZzV?csE|49 z1HLOOm^ewf2bgJoi`z-ncx?-R0k${$m$d@RL?iNF^}nYs=2kDE3*WbXge~9#MJs+b zOT8uj^(jQ3ch!jkBTLVto))S`-*ZY$my`05ML=+z?e}ZUAEx!wMn>32n|-zg*P2RI zR!<8Gq`gB4T5~beSPPFMWzjGZ(sY*L4L4(%_#dfH{ zT-NznRks%X5hS`?1n#MVZIep$RN5kFZ}2Ii6YI2$_01XQ8Q9i8XyohNz_leGIF6;^ zqSSyK#l(2*FQ1>g_k%`O6fg>b!))j`QE=$Z!{%@Pm?Sg#s?O$Waj)|eBh)a#14a9( zr47DKRxhE(%$ZUcj@A9iMziU&pAduO@G(rC7lz*P$(ov2dIw8SXZ**6zyl$h+5e_8 zyD~|paQ9>-Z4Hm>``x5%sa^$CMGlCJpeMB<$}!K%MF>J*5dyH}Olh7R+|(XRXo z2QM{Pw?_!wN1TFQ(Rv?Yiqhq`2;lR(~Qx}!y>UZjaeHvSff9CM2DAF-{D;DEvU|4|QUq=;c zlG*~U7GoCYZ?h4TPZ^hiUB(yE>^6g6B(nEOHa!dW zZrXVFeDb_P>5v^G08zKrF5V6|POt_ViWYCDu5vbLdVQ6a4k%tOJwxwiKYHeD4e7hZ z++<*Xr}AbN4Tob$uDX5~ZMQ&FP&-laOE<+R`E7R9#Npz8I)=(iPUCOLqI3SQYlMlU z8d-k}idn%rtgBmM82b7g0^X9LW(|-k$OO`(4@^l)d>&QAqjNpY0r24C_R->no-M_f z&MlKZ<~B9d2{6z1R-!Ud?liM)F@Vp@jr)`rmBgd!Q5}puYRzw zuZ5r*1Hm_k_&G0p41+wRM`>vnniZs~5tN^(qMygQ@3GJK3aDx~2olOU`M)r8f7DnS zGot;z9g#)!z326u79b8V;4j;eZ&bi907;xN0K<}gv{)QMlO}i`KA%2MrBm!izkHp5 ziw`Fp(y*_l5bE34gy*)#b@joYk;%gOk7I~n(ELj@c(WmHSadW&`6NS@n8J9g;En&@ z1cv>6lU}LoaWd@rS_%rO6{=Gwy}4NUF^>?p(s%WAXcFZE1kdGSR~e_K{ZUQwqRaRj z^Gk_uWPw24jr#tC9y14gw*I&on$%^s#g}8UgK|`j$?Z$uFM^}jgjBvam zq3I%#gVFQG$IDSjqsZcF*2_QZj%=tJLhPterwTZIF%%vRWljAIpeX9E4*?VtLEXwH zRqu1CT^BjRAEO9cDK{lzZw`87_YU@+3;xx6piA_w!7U==fZcOLHqLwO3|Sk*`GwFs zMY$md-vYbe{rrt8z-}f9J7C&U@WoKfb7c$UR`3k%PmM0Kj<0S^6Az{Ss>P6WuFOz? zoszg(vS=l~)i<2<+)kf~lS+pkw77VXm@}O%%A3{N&@cmh?|ejlWkitJD#g9BUoB?k z&4^qX)DPLu@l~h7$fmXC3wm-u{Ig5#lEfIUMxAs^x9CQKZPJg_{j4n5h$z7RZ$My; zI_=_JurVRbOkJI)N;Nn-zliKexw$faAXxMCH^HMK2agvasr`!WTr3t6O)g-&b9B?I z-s0Yz#PJMXg{WKtC(dbVO|I120OxhUSIXu*-#juD4>7^*+9R?UAxv zj@K42k^!3boj!3sS}}~B7C>SATvr~iki#1>14aUr_Z)Wb-jkGEziRh!?O6{vqL?5{ zB*c>{@GsJcp3!Gp?4%)(4?7;TtKe?aJW5*5#JrNGMiUUi)TcKdqO{?-h;6J%6wa)U z?SR*)zm8iCsI_?OuvRJaFfS&)cdD*#SADY4Imk_+$3rd=&(^}K+$0;vX_6Jf9`;qu z@)oy4d;>hc_~ow}^*Hu8{^Fg58vdGlaYFhI-3)=6rR?<{~PvDjOJ-)XRAmuLRDb# z-8!;q1V8?(YHBmQD##uvMfr(n++;lo{BIMU+x#yWTc0#224o(#R4ICSh@6KVQ;~aF zj)st~aBXR##IjgRawjO_b8l2XD_sw0>y<<>?0Fx(*HPRkp+hxU$99MiAxSKNK%Pj_ zI?H#l*6~-pTTS>(;N5njC!rsNjKGe-{*+;e6^)pdF_=QhVx$ewg3t0$oPm{OoBFph zx`&t5K`PR7?WE;?7~Qessy_mr;>3oHUCogwyC$8;g{o44-@;9Rhv}J8eM5EH%*HV+ za+omtvW1lkyWwNhDz&~2Kc}`t@hjU`5jobgz>?DOS6Cqi6r*%N^_-`du_Q!kZ62AI z`|79bAD3Q87d-^K=oP925)WKvPMI}}MMixCSu7i+dyz^moLi@RzHnJ8`A79Uw)A|o zlVubXn(OW?G8K4B`xw0N*X99*tG2JQk0nfeldwLzNtGAv4y{;tKaqzXZ1gALlcyek%*O=xZ1&GS?FOLaQN35=xLV<{?INuj6Qk_o?>|E z@Vr{Ji0p0qBHe*7ZC9XrkwMz9_u3R!DB}htuZGE%2ES#9V7%~h2?Eo(3@4lxwl$(6 zoiyny=P!}Jr+YXD{N&?Uu!vwENTaflAiRIf>|#ed7!E)lr*0rCPFCBvoFKl7`)Bu2 zAjhmTN$XMYRq9_`i`p?hp!FxOsT%sD#>a$>`q9etYFE97iu`^3;3<&sDHw*bc_C++ z9Mul+N&R-mCYhvQ`c2fVWE+Jf52GEx!=|o&A*+Shpa5WOqh3H2A2-1zPNLo7LUAR% z1IV%0h)%`W=ySQ0B~I1oR<8BseS`P0xr|j%9t-eVrA0=6nA!MOKI@lj4R!{Q$ABXe zQFYkMu_p46=UyM7X>rm}ZlU&X{;W_#O0J|Xgc9r623>3JoJ zS?Q3u2v*fAodaD6eH6m&vFq==Ic2y{JK31yGhFo(V7U-~k|4|vRq2Wf03reMoYqyF z^l}K41A0v)!+Ue*$QDILKt#%}f`j>)^2Q3|XRu8cq1<35mQD~&V=x;)ONUg7#$Dr2 zo10BOn-8BIZYUlj%kt;7tmxy%zECfppo-w`+riS~VYq?mNtl!^qbKzVTFIxyQ8jab z@HqKoXI3&jk>3m8SG+{o=jW1h-U|)Eh-Hys6{4PEb2&sq+wRT8>f%?;Yn)HDoKAO+ z^)pSr#T_nu$5*3TJ}hXcc}Ftp+{pXavh3mOf0-CLqYd@+SO~{~Ur=(SHyU!+8^v-l z#c}r>3>Do6E{!p7hSX0B%@cFy0gH)Jgf)1!I9|}DuJPT}ZNFZ6aNv5dc{=rdoRz&h z&=_+Jx+s6RQSQDVqXr2t>iH7>%T_+W7W1vLy1QM0$<#XGk6=Ol3L zeOUl-$EidP4G|3xfG79x12;d-;UyOhVG?5}Dp=J&l9WyAOVX^LD=hbfz1a5AtxzdZ1&gsc{MRA~*gBfRDle(#AN&1P;9Ddq?jWIxMEyL~@c3 zNo%u@Fqb!u4$c~pJ&QQc-azUArBeVT>@0Fd`4+Jpr*tkbFzdV?pa76>Y|d+_`^-6u z8&V;O?GnS%{}BJOT?r8C#r!}9ULO!el;lvBRkT$s=lX3&!Gb7{WQ(lOUtsmTt+}$P z6mafQQlof1FL>7aXN7kljzcC8FqmTC=x!IJVP}rZ3-CHZF)}FvLya~((Bk*KLBvj@ zP8~@&VGQHy>~e^{*YhK;kBO+{)8#6z3N)i{|JjAsA_oy8d2lZ}($oLc<2_>l!Bdhw zV*lIc9)kTcm(%^-sXB|h13jL3^N}AQsh{2qp}hS<@_WKiZT@ctdT`Gw6?^sSz+#rw zCD0fJUJ)bxbV z2JgF8wjU*?HV>rKQDJ_M{A{h15!O0?qICvO#e3JSjk6gn3h(DIEJRL2alo2hT}=q8 zfZDi2*$GK-gEr1Zz^4jX(;|?I<-`hp zuhhZK-B?>~`y!d0agyL9-|xSP$^sK%TEj4)WhZe(VZ2S8C1$uX`QU1nXc z2C4XR8(mj?xNhj3Jco@UbBE2}@KVdaHB|F~)Y+fA;(kqqF`ti1T9{FvEqjBLZIUBzxe0B8BHR+J&;HDSQ@ z!jdvWr`vFRD5W%&ZAyY7^ZcCmU|V~8_C{er!6@q5<8l6;*uk3jYeYc*21wJA4|sxo ze#E||_!0B$b8a8?;JkI$xhx53w~9)*FjgPhkT$#OCMK&w8BqcQ=-+8S;o6F=fw{3U zCuzo0tlnUqvNostJ3srWYg5y0Zk_5c$Fj#mQAsokwpO(U+7XdUj8pE`|4j9>b`?| z9h)@U*dCrp?1Y!r(d~0DH9$Gq36+RVf;rhRyZ|#%jc)~I(HI}{VYCjS-+-At0Qs0W z%I{P4_3sFbzV}R(^|1db) z=(Y`HXVCd3SQ1=EJB-=$%xXE=Q|Hxt4YnwEUS^E3!{#`&nZTWOsVr$mS%UE!qGWh{$#^c@t(;lC;tC>a{w|I3O?P^{t_Eh7A`E9tG*^;nsZ zN^o83BM+aY$IkH6kcQ=RqIAB*7Lp`8L7de~0&+?$2W%k;Wj}`WpVgb}DA-b&pYW@T z{F%5A&gQGrqZi9-tu+>ZpL31Bk3FYR$Na#UADW1!Pg#q;hXfI=F3RX|$|?8XlZcQyePA44+d$j|au-Or<oa!N+7JDx9Ik@!a=w%Xb+hJ}Md$ChbBL?~sLLQViax5J5=!>QFp6vI>odoy z0=Y<}p}4ZQLsm<(gZL0Tb@loE9WY-Qzhkl8@zbzXS{Iq68&E9ORDo4!_~Z8Az6t?l zMv!^_B}r-#!>!`nFY-lziWS4?V{?%&3>GKOo-x^eRu^nrTw4`$6c@cC3}c5(E2t1?{(2wOXQ%LovUK>9h1EX_n#KAb_{IM)iRpX^HEM;Zm1c?(DHkp|jzo@z|1Lvo8oi!`RL7hTBA%DvmnwKGRrMuF9iuy&*FY`v0bT%#UOkcw|KmL`rMgF3ZFDiod0Gj* zTDa*n(n9<(hX-Vletp`vdVJ60+$CG!%%&&4=@8y~;r*MfB&HzFs4s04ys%*LDMz#i zPg=82#V9?MbJ3{WV|{S$0!iOBK5m`&UvcwPw$3_JPbVo?UxVSz-FfRhl7>VD#3tIJ zdPv2Zo{poaR3{z;s-HN28vos`Q`OZ689p0Wq@8KhHDm{`yyDqu*%KkR8#3XV_j0WXl%lOdczjnn#3ZridjX$XQefPkB zhhug0VcUeVzp6w5y&{nd(3|W?+q-MWC@~*0Z*%_}5Ou(E=HxxxKSWN%vDlC*ohskCpx7c&Ss$vOUo|`M;jC z;%-Z`HL|=uvTb2uA%{Y#^GmIB5Bz*-43of0w3$?w<$btAED?VrX32}4stMNl77Y5K zmgOc?)V1s7BSoF0-53;GUPHb|=uWLuplcc~{YhqArQ7hvKlIrX-q$XxfLEiTbq36n zASzn}0&YiG`+mIpkhqhEYcVmA?K%va`v;UN(7?>3^9Xl0K-$Esm4*)OX@=cXr+-Ct zxKO&a+&(Icmj1(wMD;V%QwaUsi(-yF#F(Ca--r;h;!e&_4p=g&*z-b?;RZU~)E8Hc zj8&>14;)tBEU$3n#6tsyyxo>oxX$nCC;XX-p2x2+X6D=ttyUTjh@gDrrpIqTjd+*7 zIvr}#;OpcO5nvG14p4pld+Qyuk7dn^tJn(Q6guR}U3u(spCA*tTyb-c8t3E+{MUJA z`ZtY^a>+N)C3s{vXe)TgL0KD5g`s-oW6=rPO{!CKNfgw(sH58i2y4`1X3An|nYaKWqwi~!-ps1!^bu{PmQYd?Z3uV^L#FtgLH zGOV=mQh;AH9Gl*=3R`_|tmbr~`TR;P@Qa9cagI}q-wPA+O`r2QqwgA>gCBgVW4985 z?rSy+Vhn@Nm`ZEyQizL`ORwDR_qe&802pr;Tu95++6FGDTg-eKIYJc}hDw{}Z(l}t z-S+i`2oNb+#r@4>eZw6wB|AjZU9Tg&UN#bg&+0)b{!pu|`dXS!n$5xCua8bwDXKE{ zeO{PwXEuUowvU%)M#Mjb9j$wy8qU9g-j1B8L8XsnU;`^Xf^K!JgkJm)@GO-vB2E3TT)LB?t z5yqjt`N`9V^?S7N14~_>%hR1ru6JMFQ`n^tTOUsWLo=p z;DSXmo%EacOGHCWP47E5PtQtQn3`I8b%W}z+Tv3esDHvX7ENwgIrDp*B|^v-g&gW$93OO#<;J0pKr zd-cD)%9Zpg7*k|D1wkf@U>F-w<6F5Dk-mB;zOkc7hHOb!0Kj1BatbhWLo943s?`VALdRLc{RRo9rwjmgy z!A2st5qi_n`Os900w%aAssb~cRGeh|Zz`H-rR|>uipHD>;Ftmi-n}*WZXSuDK>Cb? zsBlA^3_CePs7 z*OIq0>S&WO*Mi^WM!M=sD8%MXcH^b&q6*VVHoyG~VdPsZ0Z?_*sk)H$T7%;Rh8$Rw zA5Yuo;fJLVUuCo9{x1$uRxLA5fuWcCyfZU=!L1UMEwoR&Y%#fa0w)(ihd@|6J<2Gr zBtaE#b^BgjL=ee-sQ$rIIvK*veyy;q2aO5uxk}j)Js(ovLw!|PfMvHquNj|eI60=b;m;^9`8^;NDd*UbRK21U@``{MN&(6Az^sE|Poq8nf35V&F3 zw+R^IXZpc0AoyFh1OOjaUHmg8w1sT&={4GiSM2pKmFIh8^Q!Ww&wk;i1%*!v%%SMZ z*Z%H9L0+w|FhUejK>~}XiQlEi(5@S&kcHw}hR`dcDhcdFVP}FXbRST!OL9`5XM3|9 z5X7=LBAu{R9FD3{@S1O8Z3Uj^<4yg5I8ItL7E5m)3+ehu{an`H-g40^L+9-DVC0sihDZb_ zi>3IJ-sy|m2S&|zA3ipVtxNNM8H=fyn&Z5=<1c&q{nPV$Y(vO~E@#D}X=H~Zo|6Ro zGD7#-T_23fXRU0o^x#=$Rf6TbZ{?O|*>{ zdvSQsQR6J1ihU@NOYp^g=;@l+OAoMZSvy9qLge@51H}=WelO~0m1_cAC)O;reNK`l z0pjEM&O!)|HU*OLvlrT1f`@Q3=)(0B=mN=KG2`Tnt$Kn@(j`K5a6{k4D3n<+!9jmwS6FO7@IRCKW62a{iRyhU2L;Ivi{+QxFxPD!{JTXZ z+o({G9E{ZmaBwZiw)|NZ*N@H$IJYOJJLP^+nxA4#r1($BsR*vozXd_w+P~V{d&=vC z0~%msr%0{+>_4z^m?8l?Ge20~xEQmpy;xN*%^cz}U8vu{s`pEy(WPQ6*@7+gw>&qG z39l|GTl#=*iH}jcIUq*hE55Y=I)MPShL%i@=j7wl=|brSe7$4gVLj_34&w%}#0t^( zaO&F~sC}FFG`c5gj5OIeUy|dEJXK=re(Z_~GsjRu#_eTl>}TG>^vq~!A$#Pu9izXk z7H6B(=P$<_om2nHv;sQwTF1iXXtVykz0EvF_Dtoef;>YFrH3{)0_B}Af~=LGimPem z509P0$gj?xE(6y)=EhGJ@Zkg{2jcDVzuz(m@xE&iP+|oH;p+oHoQ{`k?LO+mFBUqZ zkColDA+@VULna-d`Q(?1#$lbAF@DIMQ3mH7ZA4JXXL;p zIq$9$+Pe_dBSAEl2NboU+(Q48<=aac17ov#WcHlYV&M#ET6Jf;&F{u8MU-396o4o! z{L=GJYXyPCq+JM29HEu=Q=~XNn?9>BHsGe?feIc%TX)dkHK#y|uh6q}g<@i|&;von zm=!)UpPu^BGMl*$cOC9}DP4ze`0lvB<4C_Emu=?cxQ{^P1MM()Uar= z7E0%jq5XR|wb1pnn3>XRl%y8F-R%bZM&zJ@tFowel7pQrstmG!_`CF)$l>L0;o(L* zpj_T;a3+Wx0Lw&{oU0dLEdL$>=iE z{pR3uX8bZ~2%hzFlJ+&1BXv(=SMHTZH(#}xWptnnA7kf+C$-*(52ne+a}tzV*x4=^ z&xr}7!|~~@M{w5NjLK)E!(FMfn}ueY*&TXHWO;u5Zd{aU@h?5bq!mhW!6=5a#vDJp z(Qr!MVgfvjj8t{rkA?nH6QrdDJx(OPUuVfjSEBEg=(#>Qp}Xlp-YBqG5Qwgs*G_N%z{z?@*EJFz`r_*Vwt} z{#1ACg(N3_!1N|M{sv1JXr68tU+k){8ADCRz&-%RocQ6R(Jv+<|gEDN-*4MZh)f@UHo8m%sKw<`3SW1Yo8I)!x)W|C3U>M1tqA1w1}!o{ zn+U7Uq<*X#(ky}ra4QLJcv$ylgXCqU@Nu&v%2lhExYr~Jltkh&Ki0ha2vOjdcFs{QbmFdmbJ<>*j*Xd?$oCTP{Yb%G=_QfhbBN6`VOCFu(0g^Jg2A6ZRpb2T%%!QU>?P24N;hw!J91Ur}_yZxbco%LUo|a>B}7)GctK?OzW+DuO6A5 z)n{N%hab#B`G1M-2mmvK!0*q4Ds;uF21VbNPWvXnqyuA!pxF+&D<% zLGtj50VxzZ{y5bLo_&QMtoSsJ6Z=iya6U5Ma+LdB`kA8xhlX~-za=w5s7ZB2l|31! z{f1O(coxn2 z>$$5Czfa?rz_ZRjC6N!^ALIf~Il$gMgDOpX+K;WgwPmIovn?TcI99Hh$c{XoM@bed zx*dXGTpf@B5x3EEw550nawSA-Yk3`w{6r{%KNPCf;Vv1HQ4A+qZ~ol{_kFUT@of#s z*OX2eKfy2uS`0+LE*wY;69JKq-qrnRWME7X?_sgJxtkSLW}M^7(PJCGrkyGIK}}7Q z^+Gftyl33ukh<(SwtlZ2pASUbN!InOYypv)bq3yX#VG3`8vlX*9MjoJaxWwZLhQRq z)e8zI_>J95>q&#W=Qd+>{W(#NCUjS}=ews{lj1F*RTlO{ByeMz{5|=Z2k^3PuRr57 zgm#js9F6fQ=Q#kq`4CTyGloO0eoq5OQQL|s6Tx+#G01@ZVsPaEp|vfGzuJXn{8I|R zCw|P5AZ>$$Gw5Dd835|QXSYFCA&1z^UDS0f%BK|dgI$1@mH-2QaF|Nh-NgPcN8r08 zeyyH6+q>Iclezr^>Q7L6{65>*Mo}U9Z^A=IZZtcd|4J2Ko6wHzyZqJnKW~zbsTuo_ zGMn*QR4!l-17NXqV0a|b_u%QCcdPS6F%kWinGsp2P--}Cot=`=OZ&n=yliwyti`f@ z=7Ex%|K0ko?5jLwgp+N~L~&?g^A~^5)UwZZo*=4J>ZMfO6CX>tpTEyK+R*OT=jbg8!a{T>4rS63f`qLGP7llC>fCmgY#2_in#$(-t z@LDR=<}u~;${S;f|K(TC_ic(t0fn!^SN3n80W7Xu3eR*We%yT(7ddV$7mODFN`GUr zcT!D??KZSiN%)nGa;de*=FdWn#=^Gi7QCfv%;_HeAo4)v_QL^Hu3bg`fZgK2TbusL z;u!a;xB)V}A3uC+2AwU8M$>Gh)+EwWU1ZJ!L3jgUsc1=Uypt0vn@6Butuo40?q_^! zX9JCAN5pM*_w@Dr!D!`7o-)zLtmQ+4NTJ-SEyjOROgTj_0n@6Ktn12sAooD(MyAkw z4_iJ&rO|1@$#{}T#jat6Jz3DZl$0Htdjlg+*GuPAIiFMpzjbdNaL+jMYs%}rKMae8 zv8h4BR@PhTu1W@+dw`l8dt7@H$(b@zH$Te%fS2-|`Jg0PZ5$fMTOm>N+DE<17;x(? zK`@_(mCctm(fef{>!F9V#gqfDTNTv@I)y`zwEL7{>eHdfUWw`Q= zL3La_FI{+^+Ksv2IPqBlMhiaGWVPVmMz>OKB6@Eyy}z&%VeKMuQdFm>?SfB7T(rh(5Y8HI=^>c!mzqeq`N?tTf_V8cjJnY&91i z0ZK_pc_lQs*^$z8PEM~j@VxKr8^UJTeO$3;lsR#M{7$d^`uSWlhpHh{X~{L>W?YEB z?4@f%z1zEu)+S@n97!5w$?i%-rloX&2Ul%bp)my70ZO@O_3$ztRnlYmQTh4J$aJ3E zU}A5&RYO}p+~hjm!nrxABAJDu%Wgs&uhH)d9$UWFIyShwqSPpl$1 zUGN*p@|!wodJU7eCCKAJJwq1C>4s%R0mtn=6NUHA{x?f;S}Aj9xjzrVMg&#_Oc-{2 zlT*XKX1K-OJ`V5Zz^kaIqFiUO{UGEwu@fz+uvbY|UD#s_3nK%#hJhu^2+Swm2{{ob z5C43cA1$<7>q{HEiz_&)r6s_wNeF)Ryx%s5L_Jc-rylfxUx)dIfrEt5JVVD3V<15) zwh?$%`+tZ!%c!Os`0a0_yF@@zS~{c|EgdS|NC?v1FhT{SyBX4*(%m94O1h-GVK5jx z-2bOu?3|sm7kja@bH2YTKGz)0Q?!%?l_HGXl4B4`8s#0u@F&8@dHOz}eqp!6_*^&V zQ`#GVo0-^;99zAK{!o)1{}gztjC?}zb8 zd3hYyhIO7h8^{KJ$i-X~6$aFspe7y87ukZenOfJF{*=Vv-X9wi*(8jbck}E^=~Ff= zMOTeehsg@QEeyw6-#+-YA%0?ZDPks%Ys+B%aRg%?<}dTU+HLnh;E#R}l?s6D=EjK8 zB|1!IVyc>V?p`g(Qr(W?k`rdCpZ-Vh#|PAZK9_ZA>5JbrF+6>xt|Ki%bzDzS4hbnk z#5q2tTGe`Abs=QOhGF{qY?+ot7FL%5&kqo4+@y_fuDW&GFtp;PGRP#AY_|$Wz@8UZ z+h;498Z-?KAj~1FJj-gm{k(1o`-@RSmoKE`whD$Ivz@MJ_0jo;987zSg_}0`FMS`} z(be*)^Z>S@h_`=rp94WalWPmyXtjm0PTnV*Z1XBRCy={q8(~eCGx*;qdIf<^7u_LT z%5JQ=VNO-=i%Wk63JEysif6hl_p(QRjgF^dq}x54eE-nFMFjaO13S0N1wkT)tcJ|R ztaNA|8Y2Q8=J!p=B1asachQp1NPJm?>@-C2gY1A-mm-c2M$elJEqVN}ad6nD-jVhD zx0-FvaW8h4!sUVm9kZ#`W~b7qUPRHdO#8+7l|x3KVNnkEV1=XH=Pz6|a9Z;BZIzDj znUg)ksOkTjQy4wJt4SckLj=Z_dKF9w+7R%-3c?R&m$E_aB}~A=5=ZZlc=_9H9bMfO za8$H!G?bwC+WHn!h_$A`Ywq$48T}fT{d_yx0COR2o!j5>0Xq6w-uQ{0F#!N6$R62a zoW}}W%}?##!^@OFRRbn|&6(K}I9>*)(#G1>1hvIR2<*p^7iT*71djeF&v&5_(^_oW zgE0hkSUQ1ju(1ehEm49<0g`hl1w~-z9McOb;Nmsk0+DRzyj7t>8=g`N@HOC8ivAb{9o^M-cAJT7Y}y zyC7W!$vZ_kEWZK83`|h9gENLx=YNOd=2k&M>NZI~?MGv^?dbk2f~AL~*^os8J=&({ z+KsW7%rZ}*C)R1nbrn5ee?%a)b##O)E1g2KZTD#IsR>fD%Lk;nc6hkfeOl(fVTWvB zJ$Wlsj~a?6qBfo{@F?^H^+utIqxl&clPqZ}x~e_b#~6J+U}0$G6IA{&`x@N9J4Nrx@_qgAjK#{K+`w|grjrEpJ{wXjkW;9Mjzz;d1VlpzfcSF z8X4lrXta%Lg0{Sf6N3}H?tXrfs{Efk5{=tei`#5F#dLZ$cBpKp$oU<6PeKV4T{}d|-kNGW(tN zD7;M_-7}i(SYM{ZvdC&kzvIt-dgmA`IKsdzP=NEc?oFc|0}uS`j~NbD?*(1!yY#N*=}-K znTo@HWFxuV$A7N+?|ohJn{w0E1k|^eE@6RTFj2Cf5Oj>>tCB75Sq-)a-;2wND+Pf4 ze3uvEp-$&Ab{;#|tlyzSYvM2+mQwK(UZAbIT9<*usPsHt=^28Kc-%E6rj9Rc4Y&zT zH_r_=N}5L|V`a`X-LZ8BQukc;;A1Mf$}_CQg17_bZK z^9X4sCeDak&QAG@rO#My^tl_#@i+qP@w7dITkWHeUt*bCh%sA&p-XgU5L(!$>m;i$9zY|pEEW@|CzdLG;< z&C=kS!BL9_=C1q`I42lnwBz+MeLiDoN%N(ihvlFS(p6CoEzw|1=xFf@@-3xzu8nFX zpS(-Ha`%t_kQc-vyz@%-+T!9MfZVzvj1l$evmh4c-Ui{Uai_l$$7QM&%B(V(Bv%K8 z{Jk^pj6WP7oQlu|DB6|MH{rI^lD*V=OjB!%4+uCm`3f*bQ5f)Hinm<$tckaWEmqgjmpIa5C!hFxU9dM7R)RkHk~b{4NQ8 zc5OZFQUY$b|NQRe5FC!0>iph&T?jRUb%6%wAUCPI2E~kGn1yG3cjP)b_jNE%)`en! z%rddbol%{*RpFmjcl{(jN$(A-^5$Kj-E!AZ*ZBQklvjWjW0z}GtSHkg%-^YK1uQ6D zN`)U+UK31{r1zrUIT!T8t7P6ie|FmB5SeC`XKgj*dD=lu*Em_rySn>171dXgO7MCs+&>6OKF`GFwz}BK zO=ZVlO>}eTGltOymmklKu42FTk`fYb+mMdR$+VUQ5QH&C=vcK%wrd2wOpIkz$7MG? zGQD?I=SWC$vAa))8sBrR389_&cY<~2t0z!QD`{8_DeAu$Mk+=7KK0>vUi)?lU=cp_ zy1`kHjjTf#HcCm}GYs8+Pi*TQM)n*yku|v$;o2s^?AC(<nQs{)OqBb%C( z@2Iy?0g_!)WGPOb;;hc#?UhYF`t`Z%RZRQeaB6eU#aVhOb951iG0;y0Nz^?iwnWKi zuYW7rfbnCXYD!1Uks37J*4>RC7x)G}idAzWw^N#BCJ-F24ct6kd3dqUK1R6pN+)BK%8?yLw4nJ0wgV>kMM zqAB;w{c(Je>2fo)KWd+ojwYwM=@JKTgRP-;edYyT>89b`xbwvLdAm&pXeMSQG81B~ zg;~)OsFC=M*gXJu8_>q~cEqj#sUj`G1ZbX|rZt}E?Vj{XGxf&!jjEI);squ7pggJ} zSMr@8{ws4zjLQ7eL90C$$=V+&p5XopQ#QfFknK+lum2OgL=mw>O0@?YU7A=wm?UnE!wY zn)u!$c22yOr@oX+l+sr-?ZlI%EkCEQz`M%n#G9ta{fHJuv8K zD+#4KQa5-GYl16SG3aXC4F7%X4~G`?)#+@p%+t@l{WL7h+vd@s%Dhv${bihka42Pd znVb@_e(&dc*br>@^go#|Ed*=gvK^$y!W)w7Tc*mYN1#{GsH4s7R$-swTM;cWodPJB zTaMAPk-#uAVx#LC899YGKHbtje21vsBk~~+DxNUoN#8`zP^zv1W0xo92u|_X^GDDq z$mS(LH*3tTetvgaV4)}E;U&}3FAPuRwG=t=9n5*QbOt~K{5mSE#UVQPQ?ij+J?5)3 zk0~z2PXI-bL9DJ-i*XZC`i~$*Bt2?4%Db!plMPgRUr< zG+o90xj$Zlgt6ZPo>2`=FDe$Q4t`>R`9R;o4dk`y+R$j;5Z8OwuQUgWy!AMJ?DO0l z6tJ^9#8k3{2He!Hd@PK~I522C?F@78vhCmT?(;mFx1y#F()feMB~sYNM7=(`5BMVz z_@J~@Zw)`l$XfBGIxSur@^+O;cfv6g5mn_Ho$qv#s9tyuR<~+Lq{%3G8amk*+Jz-L z0=TYr!$qw0NxeJ=(-w-EfdQEBxz;FQ)KZ9BVGXr$WZee$`8|en(j8qDB+ro7$@O&O z@^gO`<()mrrgn1dJ>qyayegzvsYDvJRVfarQ@ar?2joCTzQP-qS@{yI=NOjiF%Y@oU~GmLsT9 z?6sBslLsnnn)_07ps`(#3NyzQ_(B%s|B!}X1;H%oOHo$q;d8Epg=t6LdiyomSHtKJAfs5d=~@5VXIQ8^88Uj%Y&mwLXu?)-EOgM zR@GWXzS{OnewpG1O>@=IAYOE~k{n)82oM7!TWRxa+DXVPHfDYe4!O#n5l5d(S zU*Uc;6t^SiK3M&?czU_8h#Xa%q`0>%JefD`Y)tr^90pJw-G7kTACIoY8O&8wf>h9o z+f{`oM5Sxgy~`_8Og;Km5`DrwYV{xzv^Xb#G2#j-rH{DvVwAG)mw%=~n_KkZNryRU zdjR?qwJ%FKXz+6-Z%HD+)f{A4a(Kcmmd6W<#v}gFTlV4Ffq`iHVlfu^E2u3M*N7zg z-h;{hMgGO~Xo>l~po3DEjaXIWE+$#FZp9*Q@MYyT?O8z=lSCDFx=!g#4q!9^7#C&|I&^?g&8xCd)`aie~SNOF<@r~_jdtTEe$QTqzEU- z@R4+Ns-Et?`_6l@gJl=ErNr)}yv|-!ZCX350yP}L;WntPV$prQ44i?WZ6D5zp9^LGJy&mZQTpaPP*F3Tl-;MoTQU2$MOQccc?l$JwN39X=L9=EYaITuGuhW)7 zT)D;9^^tBhC#oX0s#s?Q#`Z-@@Z4xNomA~NPrIIC$ZZj!!F7Ic6X0G~se@J?=eGu1 zrFEYyAOizxRNno4yh7|P292`W;SV}+IU_A>t^Jpl>6SbO zy4lR_bs>Twx;#SdI7ZU<>0P4D1$CrQ_Kzi4-e>4ti6#QSE|{FAMM3@)5f@nFb(hLu z8E56y2=J~AFp-p)P`w9D5L7rA04AzE-u+YiPnE4%MA2sN(5auvo}uMNZY4!4&n-0- z_jR6|B|U6Ws-_$@F68O(4v#I}*@Zqfc$9G5XYI_ke0#T4-|;3wKPP$vc!kKoUTR|y z>0y2JEAKuL`zZBSN)%>tpskOvd9)+(Te*450bk8M3Ff7wiU8eclUjMgPsXfZExV~sEznI7@oZoXgte$`KHS4Ha?<3Xwk6hwCT13id1wS*_?OFEb zYLBJNkS=13ncbv_7r|&v+f%`uD6%}cuSL!yx4U;ceJRc(_^s_taIY$3B~xb(Nq}iC z(*`;BDZdrn%H88^O+i`}b~ZSTB~V6lD$2OWcGhgX&zBjw8i-S;$3BRqm3h(XLOOsJ z;dDOtybYiELFysh^wDY4bZM#UZmCgR+{~|SF|pJ16a|0?3*6VWSKhqrkASjb8rwcE zxAMBy5rDVxPt=!Wi*Gr3 zcysMg4I6aqm`1A%ITiLCT?dOqnwo+7z@o)Co?A^m4d+a-$@GqdO z$~p0W*jU{P{))dw&}JQft7YZB&h!|AkKH6+$99^7QR(oV1*?|&)9;aK1P@{*fH{_u5{ob3wu}7?NonpYT3QBZAR83rINF8+VwhWeyu4P=St4IR zf3A*~?c+14*IK}dHQ6DZQKxgv*pYG*G|Q7iHQG%ynWzs!S=1Bu z$Vg@vCmS;vSXp6{6QV1|KBmQv-mKI`;6Rru25IfD>ecQqMMhIj|Hq^q#Xb|n zh~xS2DaZ#({<$&8+?@%qxyRfOP*T4*nCYQ;FJS6!A_W^Wm^*#DD!<$UpDh_|3$GEq zv89raDC?J-2)&r3ZZvl`a{{e0>O`yQuFbT}>RkQSXUg{`CbPq&b4}m_>h3b&fA$PW zvOw*9J9gZkqc?OJ&%~sSS59oGy{ld>=KR(Lb4&;Y)U^0`U)jk{U%R0&Hw`~h8I|oM z2?$X~6VCDY^&vp!0_FKV*2_atVvK~=9PDne;ku8o;t_$;IAe+o;Xg~WD$4w4{OXz_ z;A3X8ojxbN=wkD%dKF7f#Q{9Q;%C>}y;sH?bH6=!bT)lcoyZ{9_pho~_bkAP_^;L^ zufd+EPiFzb3*SjFw?H3vTWDumNhD*c?XC#mutf7OvQ$!rZ=SEIxAs?wn`Mst#ew?K z9(6nK8v-rlFK5bCACHoIH+NXh0#R?};rq4Kpk|6H|g#97;ZiUjRSBCj?9 zxu<)3T3N^lv&*EEv8@X3w#vzZyJ?bmMa+;hLcxpgMGi`>#j*8l!Q*0$9;FW4Vf`!U z@zhcwysszxRou!u&U#^G0rk?7fnBFQuyj{US9lkUbr8p#NVJ2(qKODr1cmly42ah z{)<}2mo3ex&6COhsnRJx*AChp{WX0k~;9rh%IXpe~6B- zjfDd3oXxC7Jn_@ev!dh4iuj8HQm99@T*)~)K+wOx1`4@x~>=YzXNb?x~t$80^f+jrr)_uVHa^|V&n zohQVl<4X{Pz9S%lYm3SnUl{N19V94hN|f{N1RUHjmV&8BfTPoIwEx}vK|Bc2vil(0 zh^+|y!nK&?XG%qpGeF8W&)cmfsLrt^JgJ)mR?`s)7Lnpx+G^%{qaXJvG0Qk6F$)<- zX%00d4rM#SG;ZUuQIpQ)TQN-DNJ{L_7CLeM^THV$W8`c|U)GuRllS@2bp-MaZSl|8 z)80obZHX=V13n1@&E0*YyGU)L!JQK*u#NDBNuq`RQLgqq_- z8W-f_EA93nAGGU|o@rWh5`0dmw+nCcYGSS(fgQlPtK^3zggFULNvCtjvp1(C#Xo`B zEMlI`*o7(wq6xOn=q}pKtlIJ>;@o1CHiH*6UD*_iP2BB{%P87bZnHZ4j?u~SRir^g z%Dth%U@q;ydx-6+diuDjtC0Eq@{~e5Mky5>?5U0m$RqWk!0k_{PbEiL2??-_(234_{aA1yTCtO`?N8qCnpqWADe|9 zaKf;qO|B}0<0KGFM7aZwwjb7o{#Kp2E>ua@(W(jrt+*-CGp%FW{C2>TN;a~i()+d| z@P^rid=KC?!=bjYyiZWEPZ^7W?(1~fJ|Fsh4Kn?T2F&GoEayB8f!&ZAM@ljJa`p;u zLYE`}eORi*dos`QJmMSwi-_#ImD43&rXSrOp-MXiLjlY;cVUlvw6)Z5M$jA-d1lpi z{&?@Hcj$)Zr9z9Vw+CWQW%qVO0K^q{lG_@6S6B#P3tXJ%-?GqmRJSdC=A5XI@f- z&qnpHZ-SGJAJJq#{f^}y;AABf_S*US_h`Oxun|51McmIWrP@ml#NHjBiraQwv2;>C zu@%D;>!gdAle2O=YVym=%s#1%>es{oJ9kJ&T6a{;c;GmCS?LYwnL-YM&fRQ=OV^`E zNtNlHw!IrO1!^WOgjM;je#KH`cao-okM<_dCm&(}jj13~KlQq%vGLuZiP{uXfezVi zT>`xsf%OsW3zrqHwzkmX(}mDeaFA<<(s3l@)}rey7fB0YdUBzb)G2~1MQ~1Cr_J?= zXVjsnPL3W|{8h_f;0w;t^c*>42=>~+TpWBAT1^xeg%d~^bcK7Bas&QnXPvgpapNPI z+LaeJ&8(r^+eD@A`hH2tuT&|1OX&akD~^AjiAgWevVZGR@NBAw7x$s{(BL&&J+>AGRF zk^5fw_Ikgf&YqMgbIxtXIgVhdDPaB#@cjusKmWCQetGA>fSiuqr{jADf}5ND&bFdpxQswNk8L#m_`}B{Y|-m@iSCRh z;bLrg<&2Z(?I5955z6_mKFsCi>_>Y&*`BBI#u*GhDs?61Ms&X?U70vJsNF62|2i(` zuwqZt>2eo9>nU6&3`y*&O z#zi_e-}|v8`U~}EB*V@&otDJhZ=p2xx2P}rVrR`0I@2utIlnp6ypA##G>2K!yj zpLchmzEM;m*_1^1)h>ZZj$;y82+$ zawWnv|9jl^f)^2SeW=d%`c8mYE=N4(EIb`c+7whMze4#h$=Z>;O*_h9J8 zIrqaIrnBCyyYt9rX*mFaOAZ!6r&Q1S7u&?^Xcv_HdNy)Z?ID#Hcb<|C9OR1%iED;A zcsg=1?wSip`AhR{MhKZ;b>BS~BGApik6(yAPCMYzOy4x|EM<Tpi6QTSI3gnQDKheEIU_ugE!r%mmQ$r~KxdvfHbFVW*2^ zyRbjzoC)ftUkJeN%Qr_W3~TOND%YEiR|l4vCc~gibSi8tiap+SU2pk#;kX>OR+Y&5 z*0sIr{NNyG%Vv#Ek^PAaw1=x=Cu~KCG|VHC8gexpr#d<3C)*fr|3=$*MB8Z1d>p4B zHiNN8z9ca8ILV9<p?k2Ll*cjDE!&I&P zyK6m=pebTg7=On*L8se}s4G7tgygj|PmW|+U@pNrgcYzi*XoTFLIWTXNX^@Z|99HC z9s&VZoy|iOG1PCfRB9wv(x>ZT8jI@@x)uMBq+nweZ!3M(a)oCbp#$J_fY1W}jF{Qtz*JY?EfG6Og)(B?j+VEC~reQgl__{fa#o|sXlj;7Z!~mqtHnT>w-09 zI&e?)68k5)qsu!>R+csHwElk7xAlxDCivU?`(_hO4GxL*dBZzeKjwaHwPW@$!mb8| zXHi}x0y2o5ZCyW(!-HALb=TfAGZ>;rQ_%;VVql<#$7#A}mVw`wjZkD>eEM~E5s_oF z0dtfXC(`pm-`;|ELnYnrf>x3GE`x$zRa=_qGuegXi<=84cj$l9FRP3xa5rbEeVcW^g_&WZZdCpJ4UQQHk>b2QPV@kisUCi_B z%r@%1IN+h|$5n18TBQqF6&@;``G*;?nT8jKPGcHy4#8NoUSX~C1=Mc3r&N>cAO zao27b48<%&UnG63s8NSQGx=1@O7kdJ#B&P8Nm5wNIK=_XDKqvk+BJLt@~Yy`VG8r$W`BQ(vF|R* zp{`l3^4!|O>)DHpuNGpRPrj!>ZTMC6{Mmd`!>V5wwfD_##m@!lvOTYNz!&m#?38h2 z`1TrkRC`dvHtW4$0Rg5dyj@Ebc{nc#16Z_UDf6|9p(t3&SHrXDH2d2~XzLxL*%UVq zb2L`gK{s2F%d##=kL$IF4!q&vlAuC|Znd>7_D(YSSb2Ff{>>!08=EXo4!n$lVw|~~7%&KOk;Y6DKrP*Dr=|iHwQQ|2Q@nq|Dyzu!N z^ud~)v@M2p_(^iwsL4|DZaB6Ak~@dL8qjax;UA)Xd3gyMI-LVoYl>`7KO;Z-asqDN zU6-?|lz@80PP1xW^R7Cj;@?F(iN9pi;^bD4_-?=0jg)yJ2q?%E>DI7bvw&a}5Ram{ zf2SdsFlT29+URE+V*! zP0(N@lf#nw(|+TeesuMM1n~3K2<=-saNuvEO7Jb@K!A*HS!ht7N|k^->j1u4cy#b%`WSq1gH6&M4S=f4pVV>vm~_ z<8I%bvb%@JPgK~Be_>a1DK&%f9c?XF+qxfW1AxR zh9ZKee+EcZY$7|7 zN}Ia7v)F}Oo0~t-&GGudS4gJnnbCf=NZuYhE;oNB+a9t@eL68*Lsac}2D`kp?xlJ< zD3@%EP|_}2sAUIe+zdn9uI728#oQw-k)n5q*Yk9fc!aTB^wB&qXT?MM1Pp8T@i}c@ zI|h)lLvBc>J?{es>s)oWJ+*smXB=PgZnGSIckp1F3fphmIBKlg(ugb?${#360Owrx z#)i55G)flDdI=O8H`kXj@BFCVDrWBVvqe=6xrG^TZVoTCkyZ~QSX2wMFUXirOv77P znfn_qXy^hKE~4z>D#q}kJIr=FYdN7z=L{8UifKCTIxIv}V zp{mBEl4Z^bfAJ>@qesGvR&(x-z(Iu8^>MJ@jSa_$Za^Un9kpz2H<8XTSJL$CX(6CHO?P&+ipEhw32 zkcO0~=6oX2z`)K;eemL|e~h6fStUxv+U69_DXLlap~p^ZfLT7RTvPP?Ugki}7$Rum z^a=+-r1X<#!dmmgz*3L|0RzOJ+Ux!E4x{X=r`um_w|E94=f#zJ=TfP0&e}~wlIWR9 zs2@$CBO{2}z>zETm5e_WnD_Di`ym8)PjnXXy!u+d%n7@;4SmLjqK9xqVp&jm@ioh- zNr$VAwNMFDuvaR!tq{6S*2$xonm6sg(K9j)jwgQRKhLpAIOJQtAd2&;TNKouDO$v6 z1)aZRynY4D;VZtVC_r(AvG&wzZ0T?JYW`|G#TjZ&y#M2)NH4|hDaE@+q_MRyx}6T! zt4jPiDct2*gU2}RxnR(Czs;wk<1#a39m-$F2=m zr}O?@bNc`@_yAz3AM+*FrndQ|YjPLwe#RSI3dLRDx0_4$XU)DkX(PY@2>dN*ZS`Ct z(U9Oo`s;fhqaAL^u{%Ts|sP~&&&&?YWk+q&s1sT4xKR?2gKJPl{X{#O_WNby26FVdM4^L00 z#q}s35~!({-U@29aEBFqqRn^ln}Oa5elqiq84&CqO2;m!E_>;yEYZ0CWq`CF8!*QB4^>>V)EW*CaUp)F|A~ZI<#JOz;Gw1qxDfWfbVH7p2@QZizixg=Jx-)x-%$%y%j~W}oPDwCdQ0_h5JBZ$rC;wXaU|8?&dYt!80W{2Rs8%Xn7&S=P-LERDQ<9as^f}5oIw+L-C`K@MKV@{0iBRy)i?WW{HZ{9Q@ z5sAGsQ|3)S>0u@Ml;4*YZ>;WBL({KjEIk@!LiPf2f$R&r!?PwPRru%^V<(4pvPE@y zQ>+Y4Zo4Odpwcq>dLt#g5ps_v%1a#37+nXLZB2|4jmPtdkw>S%M`m1`;vXteYHB3P z2w=%qhInB~SPChzeSiDBoz z$6Na(7lg0Qe>Tgm<93#-eY}|LI=d{fL##M_{QFxa&VS`Yv| z7_`Q?YsjBa$((*vN$#P&@MAJV|Fu_A0bbVmYlyXCBDV_-`NeslwD-55EWX&{iWGs<(12-cpB*M^zC) z(U)^DJ>ygsGP$m9b7A((j_npF{SN>{#j(qfQ%wNC57@|U5|EamoLjdp8&1E3>-rO2)7s?KlWR{6goD!M>cfqn!&CiQGR&;s#CQKb zqnzyM?571bs)-i;w5nOxxAcRpVWu$1DBZ z)i=&i!TS7elWE_Q(jW8Yr<4t&0SaNY3a|jQ&OojpMFvo?aJxe&ib~M&}fZ z@@{CSu-nk62tTeoIrlzpNP63?l=~g*-ye6~*LT&N2rfK?LqnwYqd?kqKb2?h?n?|L49^1-vsy5;`LCN7t_TW3wXO>S{NmOdUN9EQ- z`62QI_1CIV-HF+CcK}_@(h$p#E zPQ$v1B3MOrb<64xiCxX;=mSn@HUZ@W0W5&M^U^}>++8fRG&0m9wEiX5K_PN;1(cg3eA`H(IkC(@u8>@h2}-hF*q*gDjg8ElleoQ_ z3Rjf<5oznuR_Im*$P1G~p^m*|L=nq+H>FPith~O?(uK19d?8tSMMgYgw4?dk2Q<>! zeNZ)Y?`e4c2cgD;4fl;y^>v9rm4@llL+IN6Fn@o|aey z%Px9AT7T43zXACbc|+J1${?{4MJZj!*a=I*>pj}8!I@1rh|*W`c9%(cuE0;64a%>` zN^Ao^S}56R>A$*aPr=GGn(&;G-WfS?DEqZ)8w<7`ctxxDPAxrIH)TGI*0eEJ;(3i- z%m76=r)9?ravKc3>?dlobFz$$fABjP)fTISTwnk7e3~={EuUiY*89Zwj8-!r6gA!- zB7B_23eAKDHVIE8VP5#dMcjjy<FC76w_f6H5-Z_U*D7})3+3~Ego!zf$r*mwSyPISZte;-pX;d1% zy>lQb!eOTPoIjftDD!vM<_+>`*1&h>_wLxg9<*N)<4j0z$ z)UMH1`lAQ0(^at9IYx+BMO)bX9{edgpq=i+%o1RRvj1ceAE|#& zy0}G)@dYRRxPt28M{UN|Fn6vU%9Fz^dt-OJtIB4R9jT9)fTb61qeFup%ToT!!bEyS z!UirbiDf6zzu`d+J*}O2fBeBWvxe3Ck0pN?pGu*%!~YEcQ-jL_C$dB))+$>(n11km&t7!=xIb0Oii~tq&e_9KV&dr*s%B1hK5`6RnG~SXimslbxa>f<7X_-pI}ZKM z&v$R6xulGT#QL#7#fs?fi51xzfza38r|tlQ!QEzJOtXA$;(tp&uKwN{h|EBk7;|<( zM;aZD)uV(OCW;t&>MPujBFZ^7bwd4nt1AJr@D^3=WvxmDI3;vJn(2d4hwCt40tLJ4 zDHuZ+c=bUQ99ZFgI%j9WcK+%sbH(wz`t8>=!}CP7C<3hYCs{BA$2=Ee!szWlKj^LC zdr-n=9KZm0sKz;iAT|kPUC*BXf=p%z$LQ^NcQpgJ7!Ocu!ER0dsDnd`q_E89oBNOP z<0h7Ya}MJcSI*m)Uucm+>}?q4;k$BElU!1wSSdAQiB}^TL<^impMN&%p*jb@mh^)# zJX2<|&bLTR+4;bi^V6F>1bQ^~l~Ys7V-99Te`Yi?fCV@fLa^VbvlH_ib&)Pak?o)I z%jnT>=%c=chIu$C=DgRjNl8%533s-0%-n4&QVYCEAA?`(k66H%8_c%y;T4MTl7By) z7z3ck7#isGBCG6ch=*DeVm>#0`gCS$N~B_Nu*6d4`)9j#N%PzB|KX~<@TJS7A*X)S zirMECi6q{JF29b8ttFDQ7QMM6edBw{y ziJGBMj3knv^ho7X3wQ9kF4wkGI2c+$A&7VErK+g&@)})EZXa`sk|%=9od2>q6M6Yp z1NXPJ{(;p+iHY93ZiZM0Cv#$;D+T>)5&k61Jk)D*o-6WQEcd{>CJ5Io%08$ClgZpA z#2VY)MDxwZ8?ThT$$vB=+=)Gus4O}eqDWj zm$dtRi(F1DsU~_W$a1cF4SPIG*~%`l5G;Y8xMJjdWEMXAS17!pYy_W5xFSegRV(pd zE0RDxmq{-O%@su|R;&ET(NE#sUj0Xk7Sx4mQ)=w*t=1U?*QUvu3`FgH`+fDm+n~AY zuVnxxCPoiAd+boxIF9Fdaut|&ecBfz94Sx1tJcywgwfaJ_e=t0fhl{~{Z^ z*+FksWHzgzsfqS5FQy@Fu2#5&1>5^$8q2?54eX(vf^Bps4>j{y8tsn9u&1n$><`_R z`oZ;&bAd2}&g=FiNhQSpWdS75GD(@(ktOtH`iH&|d5-LT`R{T+W4Zz`4N<0aDvD0O zK^x*WI;a&5hIQR<$SQTIk$ElN^}M1aR;2h+QT}Ts8|!;_L3I6tbBp2Vx+c*)ld+E% zRr)h>oEsFEMc5WTi$vQGXloRx0;XUnuvF?6ex3X#mSI=f@*4PZxUTfu*wmGj-L)KG zDmCKxRd582yl>jRaZ)A=*t9U3a^&c$>po}9sD%n}_2|b{UHV+RyJ3pkR86T_B7R?5 zrG|>8soy&p55#f&p8XZYM;{1s=Snr)tzImgTl@6|_)}~tvw}hAZ%@2NOd^O# z{AL#dwm-quP7gsnx9~-yKN+b!QN-Bt>b?xxnB59l9y3udK{lu*|_lGCh6 zI#KR)idaB#Icv28wxmZIR%_c$V@Z>->iXaQI1N$krLQeFDtc8_OT?LQ*wopLpnCQz zq+oNXc&Y7oQc`LLd3-hz^ok665ih}8Rg0^bbH53%%abWQ7`VXgUbT{UW9}qW?%BjZ zQG^oUl+ZeL%ss)qRvUGnHb)K}%%AR>XdAkac97-I15sF^!s{CV^uP6bsT)v3xRl5v zCdEJkIdzjmti9iZ&~m0|vU+T&);Ww%0M`@l;o^i`sL(XK#FwC}J@7Lp zvr!C(^B%CV-T5=DArkN!;m8^^#E0S|ckq77wpcy;h2i~O+}Ss$@>-%<P0YLc1!(xfRN{PkzezeBOfCx6q`cID~-G<~ zOO1V=rwhdr$y4}zIS|t2HeX#2gSAw>HQlp>X%th9}Cu?jZp|0` zo@xJhfX2v1928hlu<)lf#$do!JnWJ4Wu%=)K+E913~J2NRhhud-26#)! z|BJ1+?uzOU|GkIqmhMKn8)iUhq`Ol@8U&<=5Tv_PLAsG{=^R30Xz6Yk80zr--S;`? zpR@KO*lX?hT-Q5Z?YsK7pNlFn#yyPRGDTyLHp}q4P>GI;W%^Cm7#0FlhLVFbh%zXR zmSN#!7|ZRes33BUg^zcB9D_AjiZ6+}YSFe{>#OB4zRiQ?x579lm>Be=(hYB+tlC@= zPOpM2MMdNto}}v5r130q-r9wMXZZ05xn3PGhlK3*KC8>$fHNg4vUC zgQ(*t%SEhf!3;@@UE6x+mS(#f0C+_Y7BqCOi6QVRtOpEHocauxHz_=wJm3bMH*t;f z2sW0t*X{oP4FIdLC|{j4_}m~jiw5?=t}v1Oi+^HufgJ~+^^q|C5_)OpDJ+0p31(zg zgMb`;S6eCBffQ_o_WOuhE*$h8adl>ZCc#bnq$a>Od8t>f`a{9*@t0sq2Uo9FE9 zsZ_zejS;L|)*7x`xJlgA!Ki>+kqg-0TA;{ExQIW>REoq!`h%>v?)601Sm)l^DhcCT=P>Q{_R_>g z;)V55U;yCnBIZg|uI=AE3{Q15)&!V-XZ`AWMvip9$f6TL<$J?AU&^OZ7WgHT0AX~I zmDcFL)P((q+pCf@i0A+hQ8QG@pPa-V0B6MbL5bm|Rcw=mi1Z}i*$nsle`F;#mQrEA zT)B`VB!j<*B-JAjR(gl19$!Tx)^VpYQQ@#Xisp}$4-~j);5%2SB>1&sjQ%t5Qs9<^wMp=(?5a#qu%b`fTmZt9NsFS zdUxFpl2hVGOB}n$OHl-8J;ppmw;zw+pgZ<@N8GXz)cHTXXI~dtJ-XYDF>U>Zqy+{Y zyp6bJ8im7eTWcW=c({A5D8bRlDK%^=VB6{y3fy0N(A}PDy$X`8&oaU#Xch_fHPj7W z!3RF^s;ZodFr$Rn6xT%v?w93M+Gk^lmZ0`IHVhtGx7+*npyy@fuzdp8)xc<$-F1Xn#&_rX5D|};UXxrSTlU8*hS?c!N{fy_EhWbG`6Wwf zi`%-yo_d0X>^3z|lfLOzj9as)`%kUim+6&FjRV#BI<*Idv%*XyCGHdEL%63V-Y<9Y zok-Tg1zkROkjJD(cIdSf!X}S-S8dbC?PTr`CePS%-POYroM3J;m;9jT_S*qcyFQ?> z^edeSU)0PnGl45nvB^MUYKbz$^ihQ=y7DRI5_L5jY_i>qFOc|US2UErKwuC@sSq6& zebKkLf|+@8+Ej-J{C#U@_Is0zV^>zGkc(7z2?&R|EUw@Ay?Cu^122ayA83Q_yN$fF zO@g+4vU9R@3%m@)gX%!nvGDYBDa)V_Slf~kl+0B+Z#AimJvac&vkNuLA%yOfxUB4E zu2RYA-S}(@1=^`g)f)B>s;?TYJYAU80eY&0H|F>CB>UM9Pc-*8-!9&e3|{BY%r!|+(%-mU~hOs}YDy>A4` zSk_ICoIAMj*u4SCDXO9==5udQ3J-5V8hgba9D;6K4vY$!22>;Nrh)MM+2r$ce+rP`dNekIS+sn!X1hQIsyQ-hsAhV^f;xD z7EKbAHa*kCdW_+^M$UX6!i1h7fP`)gVbB$%b6HeIIHy9lNqK|5&!Vds0x0SQ+O;6H z%-1<>^>`oF)!)YiqF4-96rs+G-^=;u2sFN;5d?%MSQM) zHe*gy$_oAL;4ga5??k@fnmOqc6HPQMUmG%_!{9%u*!e$DeU_uSmzehYL3 za;cU+Ns)TyeU~E)q7K-G@i3{B$8YkX4Ep3W=HG+GoGWa7lrX+3FVg7O6B7E5e$EcX zzsCh^ZhxM^%RgZBzXC^{8{%SIC)WVewgymu_GIe5C~vRaYwjIPo5 zgIfQp znE8np1Q%76Iwuw!8a_1kcE$r%<5lrLYA@AX=krEe`eR+H(Cd+t~+wTP2gFJp%Me^<)g^s zo`4pEA@46j;TJ7)3&Q~j@6}bqZZJ2v0c>G67CIo~FAB%T&j`+c;*?RhZjlM!#v3~| z)ii(J$ErA!uvOk^%C&pGy2ZBhX+Q|0)e6g;v@YuE9e-}*D z^EOuRp&=Acj~5FAWp4?%J1uo3Uwf%xM!}avOGqi! zmGqP0k*RrEe;@Oj+~FO(D9N~DC|r~-(eWSl+5Lv0v41@ryM0B2H{died7$b-w4WIJ zp`@gxm;EOE6>db(jXMW@J!M-g!4Ym!%ZQ$t#>T|e>-psxd(}yd7HQHt$ofk{9I)t# zNZM>NTS=0fUQKY*i75>yjV(FBqBm>eYIeR$8}699)KOWdU+guB`ZN{^X!-bIz-zOg zV}99h?7yT0RPEt+fQ^WqxWc0!;cu5Rc3DaC0V3-2i64wbn8K4QCavXW&vf7ibN>sw zU*>1m;icmP%u!tSaiT%bj*10u z*^``%-awft8;KYQ6lJ1QdQMvC&7-e;Ci^@C&%21GH?z-PFB*zLH9#M`Ngb&$u`O&V5i?l0%_xg9M{-2s$tP2H!tP zARzSgPS(B)!l&wSb;oejLYzS|8cZ0%fB?P!Ja|F7s)wXqc&qzIQGV>R2B**R&8Q^e zTAYz3(AWVg1r8S7h5482TjO+UktPRC$PY|=k5_yQ0x})1IeB=(0R+G1JCQ#MpN!g3 ziqKHJd0(jGX5vZ%*v_8<*2lSJI2ALlQ_Hz+Eg^JsS&3(6<|PvliH*GK#p??d8x3T| zIn?6~HrfJE7s}V8$2!Ge1`JvsGx>?r3O_nl=}EW7&bG7Q!Z#pc&2r0b>@ms`cE4wL z^7xIX@?B+ug!gHhrnrM05NNFqyy;l_1+L3U2F$(T*Di2VJl0zv9_DH8Q|Kpa?SE23 zkHgH7QNet_+EN`xq2$v#xEqJwp3rFijn5ecs79Ua zKTlZVsCnlBhu2ffA3yt@g!L+)@w4MUEtVp(w52ZuKDt!-2CjHHLGTnaabC-CMV_i4I?xNJM2e$JX(iPV^+0EwJNkK9(OTk*q(GDJS&e^MLw zv5tRU1z)Oh1V5^p#!hDyLT@oV$faU)MiS6}D2vu-X4D$ACWkVVcI^_*e}Jfm@QMB_ zrYkbtKRt{#c5A2eL!tKT&LF#2_|@N0WD6tpNz)G7357TVAKhQ8k~eh|>X0zM=@}gk zI+JMKB1m-0Ndgn2X~&Ws-qSSDN@BpGy~V(mr~8q1;3o}KU|GCr`C@DRw^1-2#%7MD z?CC+gx>5RZ^!&W=!`)W=-;yz}{VBfJBC`lj|BSh$h46kQl{e>1;9|GvrwU~UOhB zp??YUc$rxLU9o^(Y?}srNDrJglkAeXLiKs(=c0R4VCSe0)&SQagtX%`<&uE^IPo6q z^ejM8hn_?;%}58Vgl{i~^x9tvbOo9Gu{;<)Orq=t&Q)aq?_kgS`b^GcN8L~3noBX8@R@~2aFPFp*&#-kP zSbgBXZ`QXJL64Da=v9rHL>h~EVkC5IV2!ZWbEs5dc0nufO8Xd^z8+T<-MiuBK+unJ-)JRiOfMS4!NqkZBJb zGJ+v@W7-28(9N+w>p7SmN~_Y%kU$qjQ6yO{<`>(QJmT4B2P{*&59cJS&i%lkXgdcT-bmG2{c)JO&-yO{=O+!H`$49kxGGPP={t9Y&}%^Vi*&?q4omyayIwt$ zE&*Br7Ru~qtgjTz=1GD`wc|2nF+aY>IDJ&MSovqed#ZQu>+ql+ooJRCTh4))(4|Ez z=AL?Rr0;mSX_(FBRGV1M>hz;YVBy{N@23SENuK2KT^1DNInhr@rIkYQVtxg%`uW^n z8syx@bS7%lzhYSt{FJ?A)ps*Dpstoup|N>Q04gT4%`UV-o0`S2Xq^jcVN3N5isSA| zHwng|Z;u$}e~h-ACiaM@-ZnW&#tAQ$+&VmkJLTM9T{1hiE<^V%t!S`7MxZSJqGO1Figq_f3~&PKr;nOe(m96NUAp$JP1ve z&7@1y$JoY=A}kW<05=W4n=?itdib(@mG33|T8{!@vG5KOmSwfMh}c7OM91j1pu{f^ z5;!Y4^rNJn^u$rezG||~_V1&>+s}5`TcWe`NWuY%cp&&v!XjGfXf3exms7S5wl@VGi*Ib;a0b9 z^%s*_`TNwA@x!i~v-PVZnUaskLqyEy9>LR!>+OW388v35<`P;`d;aE zRq4;!=Y}a9dMh4BMixJZ@><-s$_HKF(al$sM>+oL*IWqN6E22WBP{$3Lr&uHK2-+N zTD&?+1sBx=FBy-tZy3w%Eg}AwBT5piA#tXr?E?ux`WF5#cggXBtdr2ya!yo%PKz@* zDFII9dVPOQ9w%W^mH2H0?MjykPg!Y8i(1#Yz2C#h!VWFXoVa#z)IhyqqdX1px#(o6 zQDG>`Rf3ha|9b#=1i zE8AF{X6g_CuPQ0{An|w1HG*PIPi4-8Xc&PvesYy+8aMfVO6(G6D-qpOhjK>J&7o6F z^9YV?4l|RE+}BTvcPYwKKGcod2HheD`+{VuyTwkEHUT2&ic~ad>2FypWeFtu%)_DeFy$ zWp{0X*0p<&z7CrOYl&(3c_sggyoK+mH;Y6fn>HFzm|e9tJo+Lrx)Nc|SXWjf4m@XWY>h}#cGC)PsC*ZbkB0ZrFXQ*JlP-w)WCYWkd|w^!2sf7&C=j~RNx7CGkHHT6mPKC6jrFy;pycDch1&yMIXA0Yg+c~G@+2-+})w< z6#eik8NI`+;K++trTX|Pa}p>f<&f?y4_7Zlyla;rT1d6e{{y>+fou;ts6U_K`JyS% z`Gp@2b_Q;;(5aYu8ozv; zcWvGo6{v0B`wMWwPLQrW+rKA&rBd(&y8j91Hp8TYPu@P}m552jKZRP+kS25)#Y{~^ z#6wNvrRgN_m*35UzW^u2gc{kXc@VP@3>brx^bLYbK`B*5NHaulVps{S9q{kMOfds$ zlsJ2{G0ZNT;sU;CeeXa?tqu6wjTs=>ykaphLu_gyvL(YRs#?_#ofa z=e?IB?|F$7>UQs%r$+OK*&}BUR-l^NB-RvLxFC6G3TsXI=L9@v0>NDU89eM=m0@Wpu^vB8!7c@O48dlHT+@ zw>+F$&nUAct|-~@GU7EjeOQ<#1n>hyI&@`aXKTH%51aE8g!z9x8p&8pu=}`+LiK^l z&O|y5kksp)7)(z@q7?EJbAJtUXJL{H8%@i~cKB>D2niYw@(TF#46k`vKQfJ4(tOQ` z+~yP2YGL@kbP2)rH~I-)(sXyq1a_ub8$o(y=cC zvIbm`HcG31FuuLO30k=O+W*`I^$27AJp|obZQe`Yo7;O77_qMOL%z6Za7L+J=Rg@m zm_CJB;h^dqZ&$zPhR3_0;LfAmw_|e!X1u*w2uOFBp+;ZO%iZ}{+ zkB}e=cI^39R=@==u9T?FVr+$*|4}o1M(7X{(550>WkL339XZ+PWo!!YOW$S8=puqh zAJK#Pcf&`^*$-U&jweLS8ypamni{pun7)C z))Ndq1h5XEd^2$A?{0WTNM5_peBcC{Clh5Q%Y1FX`^i@?V%~=d?|#WH>{?zYD>XX9 zcQ}|^QoKDwOS=nO*q!%q>nG8pPX2jv^>NZWarO6_O?%4T^FMCBH zc-yi}Z@xLq%Udgp{&9BOjEn3-Xult^o4L}_RcRyFMNQM?`lyEC2Hv}QapLdPC<@bN z)+<*Yvr!7I`hDDZ7=Typq|e=1{j=?_T8Fn9Z236Y&x_LH&Qe!H)T@-k(fd@kxijcc z%V0TwVJ_4I1MSqpg$j?N}Y(K99JlmSaHA7{l?n7YiPOx0Z zvkT@gn49O{k76!vB?=PO8!QX=TKYAVz9TTj#9*(Yi;w0q5o344%TskqXDFYO7vW+e ze_a?ESW1J==_{5RIdWVCo?9kq(Zm~s2}9q(`bheC(59A%WEh3vG*A|!G5*@=hc?Ch zSs1zj;^It$wYT17Mmf#IBsUb=kiYm1YY(v?O_&<~0`?a06kmRhfzJE! z)S^HFt>M6Sx2tlr7m~4sOpNbYukYUWVt)}~9@=a?mtoO|)V78yBkL{9RRA>tU&5_C z272J$M*M2Uxk(yXlapUAYX+8=`a_bKg#mGSZC@|I0xyG?HgPI4pOv_w^(5PIETgqB z3YDWg@0~2))2F&w9neci$mjbIyVYfv?$hGp5|hSqV`^!Co#&c97 zUv(CAFdw;r5rY;VJaZpSV=pV&-MoGH4U>}srvheLd8c4IxYs+_iUzWRLwL9%Ot(|Jkf{7-#Cm`(&xijg;A)#mVGP zgx6W$-bj+O@teNp{=Bfh>$JU68C@Qi@6e~1>ZjlAlg$Us-0dFaAA_Y34OKE9_4g)o zy-L)_&=!_XyDl!9=hif(6zUBA!aZtUm;GX%y-lvvQ&#$PA_GLr-DIs0Zc&JJ zOUF}GdwLUM2;qb*tb%8;w<8J~2Tmn6L%$vz_p6$9rU^O^_LrQa1+<;dS4B)#3*+yj z;vLLw;Ii;dYQjcAwPiuII$-Q$LTftmstFUt!`Sn^&G8<>HTkU-4JhAIVaIz62I@k) z{10y&elbV3u;bsgydX^Eq}fS1^K%aCX|p*yfGP^<&T8Qe*42EPOSi?aXR$gquqUF zRQWDSkgtcHVfb(IqD*8J20AI#2!aeuVXeHq+HPU1A~eOng<5S&4|Mjepmw6NW*b-S ztW4~y>gr|wkK(IS=LOhj``c-M7oKJuLe+eHggNqwq@K*UsDCo&q8(L?E&XP!PJ zxg9phs&DHnuQK@QOhXsT=NlE1|Fk_?Jb%^&I<0#9xAO~{cFZaOcJ^k4pJ zSN~>~D&Uy&Ik{@5)~P$%Zoa1(hV`r-ARs}uhJ)N{$h1R!&TgrLd8Avnc^*~P19fm8 zGfvy+O0E?D$)J!ROHMx`CqI1L-kbm?ikq*16U{OUzUW-3J?@ul)8?NbT*qr1 zE4OjEuW6{^gQnfj3+($o`vZ2SS8M2hWf0$ar<1WY%30(^1WT(HjNfL3BBgxJzwu&` zu|Vccy+AZ2Sbiiv3* zzL^ZvUzyp>d!FmA^}5?1Dlu8D8#1+wHBizm?rhUiYVz2!a_ZPr#+BR-eB4_1NY+O5 zRgO2G4_NMWs8N=R9?|Ry4(?iROJ~Pf0lahdr+rQ4Q&135E5ARhpWDzJMTa?ues{Rr=-q1kDvqn722Q!jry9VZGrjEct!e~lv;Yq z%qXepxJg--P+Lcy(Pvh^j{+MFJ!0r?N*0iL7nHeL%pEJ=}zF_Yy z()SW2*`8C{X?Sq_FFkAGOk#8kcXvhj%pm8jZ>8k-yhB9vp7R9ad`M|=WPbP_AwC1P zT`QCAOLEZjJ6N&^a4Y5QPR+}J-D=Q%1?1t(2X|t~P)my&A62@D?bA5!oqxU__)d#}8@2EXbhs_h;@6+cSAkk3$ zK!G0i7}h))P?RO`f(p?Dp%(Xhp_z<(lQBIiMQwSsJX=qT6&Duy>AnOA#G;KzteKcp z&<#`HiXTau>X~eup7#%nIV+y;4D=>E#3ma+yHi5=mi&nHsXQYUn>P;Xp3x%2G1`%o&d@Gw}trMAPI}&{@m*WODFuxbft7tV8%z1(4nmoo+#D#0hg@$Bu6Cd5e2ZZ>RINcc3FE z2PrY+Pxs#vh?}c6e)=CGqK??9F?b=r?>^j;(xJsIUh{j7_TffFS+qHVzNZwQ2i1cg zl~Njn#&*Mm`F5|c*ExVLu%3+UHwLhcN4aL}i@3#oyq3eK#21NdTw^l*Kew$7&d$nw ze8Ky6S-5r{ci|7u9l?8~DJhMD=49!TmNDbwp-i`{95ODU-zYG8TRP&ubkTJFRF?k{ z^lFe;?CCbQE;XnwkJSMDRqS8piE}>n~9pxFx%M5 zE${r1vXe&Q>05TE&unAhR(rL^ZTm>leC$8Gb+;V}@3uqhq2sL&E|KYdlMtf`|H%Ad ztEPSWYdks!@b3O?WMnJ}ULn1u7NgS0Q~CSJEEP_&IwqOP=)4BA^8flwtTvIvAcrTR`Jg}IqQBF0 zWQA&Q*PWM%vhg~Q`cam3sM#oIFs|vXzSAo%TqBjgbt0kzYFl<7D3f-EI}kz1toBAZ z=`Ej9v1<}Cc>m-jJjU*O7cR``CCT=b*f2PZuaz%39pCDCvgsbb35iT4{(flY(TO<7 zc-OnMw1iS1U47zp(8x5$19ux1@A@seb7N|-7OnC#DmwFbd;n)1LP2|?%TiYRhoXeC zYuhCyt06Jn=#H-!9fYFAk8L>n5C0VMrVPlZIyBBASv5{bNQ$ZHT+3(lb#>dN{7#7? ztvjpNS=W(A-ck;!pA&em(xgrF3i$LKVJ|-Pg*N*i=lLb8N%|%5L7;kQb;khcW0<=g$}jgaXsh2fu#% z%R|04R&GtE_w8bhRcp%X?GE6nA@!g_pZX;`pU6Fv?PL{HzqP;(x`+=GMB0X`Jj;+cMp?(FMTAh}JK!2}A*!kE*a zB3hcf_Js(Pi?l;1*r2>b#X$?R_z+x%+@;Ciy1^ zkT0Uu<*z@*ddx$TaS`wN-jVIR8KB-ebXMX9!KcaynxegoBkiS!?B!_f4mt54sfV5n z508JtGSub${AuNmB{3&4_f4w0Y#r*?5@~}U1%wR5AfWD$iC69(Vz8L(OdW+=4xYtP zmj~w`DYO7>&71yv?*_}!DG>m+EYEaszx@QO3)E0F!W9oMondQJXg zqs8Sn#H!&$q(wj1T5}NGm_`HmgY#32cv$8A?JaITeW#OgM4k)z9lIU%C}B(q94PkI z4i5UeC)CJ1nntpWPdBW4>qEtoD-yw=@bDR0y>_aCsKoDOIg$m7QIFQsHzNIUhJl~@ z*)bJ!DpBotZBcqaoX;_72a&3$KH;==UrSyPwI%o>0?nm@Ym26o1~uYjrK}0r#d($N zuaLt4$s0bp1Xr!1$^e6{1_H_;`eb?a1(X{lO})7C^Q`M2H;mr8VGMMY#h>heCNzMe5d<0o)Jw7zwmjl;mv_g%u1W-qQ~n0c_hN6@I&@0 zlu1{TB^WkBsRM6UxV&Y4Eh0QT)}8gIU+2Dc^wj>ww@W6$l70eK?)Aodj~(BrYl}El zlfMP;FJ0vz5h{|YtZjEkHuHGgnM4q2$TIM?F|XiQ-Ig2{yGm+9!v?wdt-z15yl-C~ zf+Ye!*$oC0NX$14N(bFNtb1|cWUC-=<$z1%6_jp?01B0I$lhEny)dSq6j$8A)HW42 zcle5U-=CM-&)VTj$_NKXrgHa#y}0Y8VZes+xH(pfKU4cf4pQapgz=K6QOM#snTD5s z^YaK^ag)?68Z0?1C&nS&wF3wYPR`LilGg-n$56rl=uQAlC6$b56FjK69h^tE{&4e9>t|EQoe=S^pRMe*fwfizjUm^%TVwZfd|< zpnviigb8?hwHYoJN)tU?Wh~cOrz5KL<=vEYl$Y=3cI=Lgp31w3D~I?G{i-&ncGN`lm#e4h#{PP^~XY7DiL zoW0MWyU(}lk1F1|!KAb(%xQH)3GS;r{`e_*!WSDy_Q5r&MM#CdjRxb|d_R}@BA2JN z&0Fd}-rFo8w;83%)t$wf-p$OFM(LK3Ehdd*B>mlm`JW&3Y@rM!!Y^ggq{) zC(1*5>k(6Hr}cj~vr6ow1+IdJB(V$$6RhfKdppBo*U)*`ZPF2oM6yZFuYLnWbx1)|BY^Xd z%7f=4-w-hNWpwAr9=ggfTm*o5y_5?x_u`@~xkc9bdoB1KD8rwv9D87zqUrA1j8g)~|2{XL zN^MzGl=~SxOelPEtS9)iQNMsg2QyGOW+?E;p8s)rDv>8cjgM47LI%K#MEPA+_2Gn= z{Jl)#V}!tIF&PMU4CTpB%}{Bu2q_Anq5F&R{rBI-N<#Sr6J8OKgCX7h_!xNNXJwVO z=BVeS6aUWvNsd_ds4*FLaQOjV=+snE9d|bza1!}Ndr&M;>(TAo3>W?`pXU92SID=# zqFo|Z8kl30h_eZ?@e4{7wDDAonU0g2*nN3U{c6UK<%SbWlHiFB#H^&RpQ1*4 zt`t#8cYGbvAc7z^_PL&kj&Sg=p02aXRg4rXSeVdoYbOCgUW>+jU`?{JZWq7YYIV8%GyR75GY1 z+hOo?C@RZjB(AX9G4-y0NyEfwf3*Ck=VM65E>I%CbR@mu)KYi-ACP!}L=c$%2{_*< zaLJeh*V4sJ0S9dcOPwzMpw9CQRCB!UW~(o`EH@uIMB1RC6R=8hLIgVB_-CnfUyS#? z$7@Ls6D6zcYmN0-qOk2b^xN6`_8lPvIXNQxqlw4MUUdgZ35qza|A}i@uUH5#&irv^ zLSL}`-zrawoKv%GU>@K)`U=I_E&NV7HzTi5T9D4W3A9wTFEJ^DIDfv8vfvp>i7+LA z&(Lqy&s8_}4&2GC6KLu*x!WuN^Yo7Wm8wvX|A0!TACWfk-c5`bTfISlfOI|EhaZf}X zC{u%WccVIAepXe@4e8j~Y8PVFw20k5MG5Kct?HZS-l|^pYeqIF)%vUl*5!}_a)wyH zzr0U&OtWfp;}7^21|)oGsrjHBH_T+8{FP}0;~Ggfanr)8FJEM=FCEiS1 zP#bDM+q*XT`q8k1Ht_B00oAk{^XGgJlyFdZ&L_q{6v8UNcvmlIni9G{n=gYw2q z-iKiKJ6VRH5%+$NbO|&5voH@W8#;0K zkW}RU&{V|5)cc{V?S449p0&nD3;(z#6b*0ejK4vz)1!p&Q=Z=`b8Ms9f%oj%P^{EP zS!T)C@_8{wtlCc>_d-4Y!6I~7vGEe~Ce|lux=r(PJ>R)>{rG%2Wcq8#mS5y=NjW`j z+u)v1iAWJlYMJlfJmHry8!W-b(+hJbMaQ%#4uq)dqbYJX!63%h(<=bHHhrdJ5@~<- zi`sLAKi>BLe~xTJ8~pW#0gUbT{&eLRT}Dn}>!|$k)kub4XQ2-E{Md}v+aYWXu`ld} zstCw=R3%@u-jtRSC&0~8#D39A`o(~++0KzUH15hVlxx@*0%?P*?HMfyQabdd}0;tTNx)?t=_q7po}bAo;lK-*ey@6TZB*C(B`29%lE8e~L* zB}&wAbU`b8?Ip@@O90Wb>fD39v6v@7H$WY)D1Um9$_VL0*z19{<57e$euD~pW`b?9G-yzy-e6g@ z*D`U9Fyz9dDJ(MRRyQ~mqHOH#!y90pPZj6Uu;!^@ruY%D-3JwPMJ(U}OFp@$OLT@1C5%5t2@F^=r8 z;>+pH1`m~Sj2N~lVyaFrFFhTGAMH!u29uf~c*hbrTm4fucrBS#G znwn6(FEb0>ShF~nPCjB;sr9w+G<-$k-IeX(><+R^uE5MV6(c@U9+nQWNKex7Kz_qh zIu5%(A^;H&cD!pB!Rwmb+$L1yPRAmNpiHb}SMb0mK7uRkKF4ILqz zqCyZ2Y1yazvBD*_R{byd+UUwMq2qGCy&AS6w=l28gYSj?8shlamP=^tdDc@(nVsQ= zqd@cJ!w{|K+>LVE3XQHW`c1bg#Qwo^>@98qAL_25W-T{nZC$*b9m%p5dK-4|r?ohu zgtz+Oxy`#4O89|#QauDxR>{|f3xC{4Z(`n%2NhJgZ4hK!AOu@U;ESRlM?KY&w?5AM zox+#Te0wzB{80{U5@Qw{kG!aC;=D1F!%X9vU>}kERzRtL4BR)$^A~rH*9quTdphgb z&B}l2IwB{(8gI0|Ec`9l+**?7s|G`qC{zS(7|`Cm_k-4~0SnkY7T0v=m_qc&UYBOQ z9c^t!!BG(_*}(fmxcf-w_wk&ymWqG))mNhib=FWG*$JRZ%A2%&gI<{mM?D0k~ zRE}$v_%f^&7y&g17B$dQimO>fGo&7Q0D%sNCKr)>`+-{BI9_~98zbLOp$eVHE^DoP|i9Aeb7?U`+qtXZN-w>D5y}zKhbo)>< z)|rm1_3f)Oplg|~7Kzcx^8-HRf@tTR&`oGb-$^u?x4hhy2bIV`vwC?I+6=quf?M1TO+%i?ndb( zb_3XVS(H>1_*j0SFVqc)*aa2G#Mzs#J!*4Ven`uOHqLRb00pP z&76c7e(k%eq?Q;i+92$Q`-D{P8FHg-YwTlF0$Vg;1>E$CDjqW-}6pmRO97YR5w%KRb7Yc5 zTZ=Zw#C>@PLpf_tQExmNt4ZRAq$>_^DkuFF;@G|SX$_N_?f6nfe(>cg)u|f(yca;! zVh7m6(wX>pLar;jw&Ngm+6Sp_Y0FX;seYd}2>%SbV|*}m(2h-F+bxPtx!e2M;IJ6r z`D1o9$fjiZ7qSo8KIv|~pIY+G0Btx#Sx;xjp=|c3IIY&Qr_-cY-uuWq(N&C-#drQ~ zIjNxV$>p}S2?S)4qT9MucSu=!a6kT9nRqxlfNBx|N{vA_nUGII zxugOH$&X~3I+x##Hg~{2ccvJXqbC$&?#R``n{T+p(^DxxNTRS!`Kn_6c&Cthw{kq053Cqn zdssbP^+T5L{&hoU)&Kdx=oR$}++txF62iq=tt-^KL06Tv39_4I)~x@QaW`-t`+_YW z=&x~CHg$nN2&6MU^&e{Z3WFo+lYJNeIdfU}DR zGuL&BXe=W zzCC}EjyJzM@ALM|7hLnaFwF|e`--^EXb_@Es_3X)4@-+7nrvoDuAfJ^R8Oa)JDP0cM{cT1_(*HG$@^&qfYqyaJcq z!QNoqT(^jXQhwo?qahwIdOF|lR_C6a>==bk?SwAZ(_T+^Vryti8gh*jCR+J!cXkhU&Pj~vAd_EAQF1Uz+peBSJHYyMnDe?y zY%{~^8bjI-ogD5S|33=z2N(e0i+%d9SFPsnkCh#EXf1@*42hXGf*+MZ*-Hz*B}EP! z-=k}*@(((ctzG!SsI`k#bT9W@3$C%jAWWHZlyP?(DU@G;S%CV#*gDI%DBG~x55vIF zDJ9aSpi)v2Lw8C`mq>RrFf>SmbeD7sNH<6$2n;c#ba%s^=iSHNpWYAme{dhybzbXS z>$k|ydq=nb9h`q!hWM!%hm6i|n`uY2_vrk1-jVtK({2&p2T3!h=29;rSNX>2|2Zui z1D&ordo0-suR8wbBVlk%Pv-9}ymP$kq%L}N+5vRv*W<%X^7lV!CQqctoduZ@yvVsC zKRzgbqMa|-yN>p&hP1A2(4N@~f6=a89Hu%eft)uBX>}7U_rjpqLD%C-=n(8FGe?B? zN-R^Yo|`eG>60ujSI*ohwA|6( zP0el$+t>l0%!>Iqz?}hIyhFHO^aq}+cBm#|z<;q7Cz7|(yLE?OVWv`t%^-zO5-trV zjJG3VQ*1~~RuS7+gk{v%w5NfRhExA&9#A7VRpYICtER-?i&y7mH}qtwj&V%I*S7hzlApW>(~8a>25>?N>^7lKw&pg!w|x!$5ok}yW5A8ZoKQRN1p?;PO5hw*Gc=A>UDRiUV1=H$;Cf$jyN#g zKm5M=xqlG-YVaLU-(Fkpwr#1MS{5{E^n60>u`5&EdfzXe8cCd-jBLb-HzMWN4ybIU z+Yv3O6VobmAQS>th>MQEBbu2NxrvD%^?nSpJmJAU@7N)>*;}xyJIBxv66|d|TMkCD zOFSFbfSr3#VNQaJ@Ab4wvjn>cgRx?%pLSHk$BjfQ8SKzB<$>CP5{XHo#`my&445zx z>AO;LDhKg^S6%zERhVHz^V=jPUi*VpS8FnTU)y_gXrLmXfKMj5TB6=;K9LeM$%Y3; zeTzxy49+MNqfybVIS;YVU56THYKii`#feM^GjcQHq7reyz^pqTJ76sz*qHZ1^V>`b zwEF%4-|ydohV#u@=LMO$OI2qWd@ls3`WJHY)$><|ma6C3u)y3M0#dqS#B?(Iy_E@_ zxlCt9Lp#D?HwKJYqv`TP^EDAC;;-nxAZzh5OJrpXM>sihu#zC&Yz?YF9w%cQ?j|(r+D5;*96WR$Aj!TZ#5`!*$Y3u9sSXh!)-|00dYjW^0Ok)|UM9ic# z0$}uS0&UVp%U^;-;?QcZOc*wD6fA5ypk*VETh-6U?q8?u!eDYV&-D@$7H9K-KalKBA&U@48unuv!yIPH5mPsTNt5D_0DLb5fsw1O+W_|4iu< zEl=HxF#O<-Yuo3PEv)Y%SP}kPt0s(cvQzWmh>;0cLA}$uH5Zefj%7sW77dp=>~2!8 zGOs%aie%rd6F=jKT>g{O9Jac83#&oR*VfR`z&LP*Qwcch+vH#{ChIEDn_{fo;5@CW zv?c~a{S>dsYlyCMI;1U45T&0&u!vbTIDVW^ajGCIr|k!~TP!M6q9%s;I_9#7f1~Eg zD7jVoY$hF-s+1QdUV2?gie6Y0S!BPftZtL^(nM^OCaRNs z%MjqRbNa(y`feGa6pZ1&($cKHk=aLx8d=L8QKaz}{Xy!WNZEM3Mm#az2HZvgs?uiX#Aca@B`CoHJVgwIIyKBUAG^qm{`)MKg==4yof z{yKi)3fK04W+30Wo(|<~>LjR%>$*&i?*0d?(heAs{*q4z5?7i7iy@q~581*+g}9X? zg4u4|(O@o-S@#Do;KcM+a|C^51X{*x;<7LdGLjHSg)n_qYON_^-L!T-sghz@#)d&-z5q!bO<* zwJOSiG#)7^Dcvn6{MIP;ktNqs^WG#ca|lW4W_Uh9vsveXRB0fj|134-w7hn9T4n6r zj9frB=^V}>a34&BaWZ7VfIiTq!?9`uSm_5Ap%#v5Df(m1U%fMoWskT8(6C)$^O6N- zk1a^%6t<+0)(>d+*N5qxNiy>T;0TAM9akFYMK*W{a$7hXt~q|7FgWFNV-arEAgyvS-?~^Y}BLxKheii z`IM=9FXni$hAIw2m5H7VMbuD7XRq;iX}@EN`|rG$!ZCJ#_R1RGSG($px5In7T+d?g zVy$Lc!smpt_6s``ldQ5VH?QaI;o;ydM#8*gX~q|2&@F5Q9Q^BMzLf{m+fde}rp`y` z7>`C|E$zjtS|lurS2$*5e9>m;grnz{npC9SQ15UKtW6 zhdNRi*$_vCn>Xag^H{0WHR64MlBrGWZqz)(qsFpYGyXQsPe}34kZx(uj$0~|mdOz+TdSVpi$VFZ z0BT>6ljV%6y%Rd^TAP%^HBb__v@{wjJTO``!{L;F;zq-=m!yo667L!=k)i;L|_)12+LEYrU< zgtB<^b9ACoGg~nGC&^ogoDVIb5dPTc{&R12>z7)hM&AA|b2)tF(=~*7j!GM&`>VT1 zCe^ccFwVF38PPdk(m=yWs+z=}V6&_FsNCY-W#m9`_%TLgYwOOwB|GPVveD0wsRiN#^491+i`pHg9i0hm*tH%X4~^p!hXG5dzf3mqg&@xJL;N{+~R5jwd_e z2_OV5Z=vELt(lGk0jf&Lc2_1Z%T>t_GQ$%)jA!F#N25O~!W{2W6p4Tv{O?I5)IG=h z=8FBd!S??iygZB@UW_U|h#>BPXq|hp*|a`?qkT{Fz%Rn?QOi8u2`&vjA9*YtF@Tp& zjc%vc=4`5q9T3jyM%jcTZNN8JI@J+df1jHC56WVw-I9E+cFf4F(7v+0PQk5Zq(p6W z4p;}t_76mM1-%2}^WLie&YbBO!BQ^}n6- zTYS8!#9ouxH}v1X?>uLa<^CnwH<~NsVDG+@J88WRT7HE*`Quf z6T^GC&)6|w2&S53`MeYx9F4CJjETsuGCnri#|oWh80D`yEhQ)}X5m8}SN+9|R*%3HO<#~S$6 z-`gAcP}O|tTAiRFbR*dLRJ~M+jK9VeE_R;h_zyn%bQTJ*NT6s4mGOW?CD$Li-T*!W z3i+OyyTG&klDxmZADj!+P*y3#$(!R{V}6=P`SMO|l<3gQ{iNCgi~gj`uhv9n2-NWT z{njed16;OjP~Cq9nJZDd2;c1w$c59vT6OK09ApP_{BHsga_zlg((;C$9fm){O&-1^_Y z2{?qP^rw2VpkUX&d#5BzY$@L;ab3nB_aiw56FGqVp}1pY5okQgG`9V zl54J9bkP7H_(CT&*)vRIG$g=rBf`kNly4~|fuRo}GJO@dI|VA9tHaX!j%A_Dcl~n1 zB>@)Dr13Lnr&D;e&Q{LwfKqmp+hjMh`+-0M)(9)sHVQE{L8(s}Vi*0-7(qz{=VVlIN z$}D-&+J-y(CZ?I&=(vz$6s=D~5!(Pc^8!0k(Y>h?`)5S^-8Ax0xVnAK$@$-j<=0=6 zz}pHr9nzeU&tx6M8~*eoX-Uv;Evk&|=dV2IimO6V8Y+rEa;$BK9} z*xKHGxc^j1fUs&!@Z>9Fj*X!)E6|=13E1ofskS!m_QF2#l_?wO=rB-POKIMSIPpo* z!?Hy$vt?+YpN#iVMFz?axNdprjf`qlFGSST`p_#Y-+i8z{W#i@E?;Mk9odlIo3{}{ zj^URfjJ<;k+mV2z^>3V3{;XhTA>W~B|FCHOKA{pxr*1(Xjn#R}MXcHapU@rS0a@xn;qxhk$P7(wgbdW3R*SMj&pk4^Cj+PXB zU7u$B~qwrv>77=^;+W%QKT3GT#g z2Q8gMctAx$?kVOn;qR417Oa00+$Iyy#`AZ5)DMGCx}QIxu^`IJ_PnF(4_gM5V&h@E zo#p$Div@d@D#Di)dY`FhC0?4mncPfE0sIcKDY3(V?`&e%dcC}_Ejkogxdcp6Os^(8 z(?LUC70EXGAZo)7v|23I++=;vIuPwXb4Xndtwp$#sxy!9)A+dJ-9O)f(Ax`cVVZl+ zST_XqtdQ>NpvW~_o63JqzxFinq$OPK7V$sPkN;WJ7Etf(A8HV+U;T*QA44j0Hm?V$ zQNHuIlfDrI?3!3{(h-2;mdX89Kke-`{&1}_U_g*=(Ln#Z8%O&iNN+= z!%6r$os)1)iG&`y7Ocpmn?j+>%HfHrikFRtVQmEyQFI+Fm;qg0Ix!@cOrcEj6!Jd> zwl2@A~q$Gi&~3 zt|rYnMA83J2K1V~H)bVB!d7j^NA$2skb%QH!ul5Z=8M`P(g6g8p`psRdD!3(f`r%=4Au_=WQjhLG(a z8Ue51{5KOivMl@l8%n|j)An=O2mTwCloBoON$m4OJoi4D2`YFE`b7MWKV6q!MCJkG zzUNEcdA}d=YI-YU93|Z4AHOy6Py@?9?l}Bx^iA&_SybooFGiXv<^;ypHBDE}9Hj<_PS?F;4t&N()O1RJUD#zuH8uyy--j^^F(8pgEkW$ru7cFV z75~^;IEu1TwEw-(76pXTcZHy~&s`{1-sD=C(hI`w)oN*{ayY)u&e~1$@>b^#7EGJi z5NOcH1-(yE#sIQMmI|1w>S#G<`(eKkq}%S8r{JUCZ2$J>0G#2Lqt9RH8`Ld}MsfNjEn<_G!kU8G--G z;~Kg>Q%IX-5r7-E>}g;d9cHk31a&G-Bl5ZVd$?bEaM8ihG`(cKy;?wiC6XYvgX(=&Mf&X4x zqsx>!gH0&%*1A;(T>gC&5J#Ox8Hez{{8kQe7Z+)utNOOzP+1Of;-O+O}>lL>x&el{ebP*TD-(EIgq4U2<~lp+Y>$1gh4cwDr1Cnc670+6>)#uS?OgxPbKWV zL*WQMHMfBIme6tVpbAG-+ zmL+}4j|!?poy`{~%-&oZfBLkIXHrdlfzqh2vXv~P1Xb2abJ1r&8#hduq?&UwSMNowYTsE@ulFbR| zoeXp(MX8;a6FBf@p$QWWEC}o}!0~a*xSqr41p56x+Q>Jp&oX|?c#?9K?}VSr$%9{I zrwUmQeyMACGFhpK^_*xga?oL)EC)>0&lV*j2_}43r!rM?-ePjNcj}6=9BEVzn?Xr2TKkW(79<}|q5Yc-}e3k0RB zGX}^w_sHeHmFfY1rCK_1DHaCo>FJ(k>OrU6=AEo%fTOC~tf?>K4X>@&a592U-)t0mlTtdO|Z= z7P%(XyNm!sZWLdZR=jK58vmX}?_@0tp~noqZ?L`N0_Y% zO95BQn21sP25OG1(ViAKyzQl-*Mk+K32O zUs5fBK&G635&FcbZ<|paz0~)qm8)wjzxmZ~q$4A~vmCtj3gVm(as_3JDI?Sp6)N0v z1E=7=N0V`V-BxWX!7DaG*M;`WE1PtMACH-;+KaS$dxf^jV_>;5H@goiX5dpHZpV^; zT@K56oauHvRcYhOd|q2WZ9d*A8Hx4z4fOTb+Z*;VN3*Cb$mrV5-Tm~Mds!7?Ew7=u zt~+djTQ7o{cpK%FV;&_06Y16a{=ZC&zuY%nI=hHn=YKmYdh}Ep=cu^*z0x%^<6M1* zr9lr*?_wW78Q=(%z~;?w-G$*VT8sJz3io3L{}FlNOdNGy8lc>CGjCHR73H2cZGCZp zu*hku3;NC#l0}_o$Dg?om_BW`yr!7@@&rBR_H)v^){F!k*%kQDks#YqE2-J7DeIbH z7zRIKkMrlD%uRB(-6%uso#1b~|9K1V0&UF#zmivcR|&=)grm>XfZ1rh6J8MD_`)wZ zuq3u?DSDf~yuMFlxlP23TgKx?9cIZV7*%%6g!^U8GXr-~{`8hb*t*fY2&Y0BxM^DU z9*f4#B$C&(XaG+gFE#5aVjObWfA4SSDt$i1%VG-H#;l2s>A|28hTujs?x`j>sm7$G zy1b!)QA+!BTycQR*&3Sq3gtW%ec=S34ik{ghoVU+F?GRt!VFbA(w=I33}?2YBB$aKhb zN;J;m%Z|o9%B`=p&Ruy0ZAV0n&EWzW%x@|C)?s@C#8V$gJDH>ff5{RpI2rl5jqI!WuivZmL;3XJ|Cq6_ z`=H4q8Kr3g9*5&Kvq2?e!(GVoLcJjo$UCh^wydBhBAzLus|YU$yGJpYXuBt* zS>SqWyoSz{xe(ph0Sognvgc+9ZrUeJG7_~u}XnBVz!6Vx%;io&#t6D!JITNoo7 z8%q=;;2-jJUGAe&@nEqHIHJkGbRP54mRx_(+X34cx{SDez}7DABZ6Jb2R0nG2w4iF zngOR`n?nr*m;5-V90XmvI+R;@WPBtx@U+!PILj&O52Oz?tSAVJAl;#oUFdRTHM*Ip zjuH^BX(qFr92yGO=!rqsoI;4{Wp9mewm<_O@@nN!-Yn|p$QZA>S$%#;v6n*GK{#m& zPBn<4%zv!)rSgH3XljJJJ(=;bUp+{c`mZ`^H$0>8wd!vUIAnWpZxa5(HbR=?IDUzl zc2B_z*^enbs1f^~SGT_$)H_T@%^31ykKxTmfHw6ynE}MpJzm+v*?R}0i%Yjw6_MLC z+XO082Os%v0r^)dce(%m{Yw~DdG5fMZEzsg`J8*O*i>*fHX(E#Nd9xd4bPXRTsHmt zyNHgHE`u&dtgpr9XoeQ8Qpd&qJ!J%h_ib=~{N+w}CI;YF-!&%fPc+d;22f(#jmmQv zO^g41FSlGr1oR@%_3(LTLQ*tX5#D1aV?V}bO9k^*SC3cHVcz20N|1CDEq z0%alo$mIz$dQTjcpPFsI8PG_JM(E#g`V?v=_{9U6zWU?xkw1nUE;crIm7U&;9UOlu z+Pir{gDO=_iX_uQcEWuqj!)rfe=qRE%WQ7HCL##31e!+K!p{#Kyx?)b*b;Az-c% z5!*a3p#?3vI$mB;%B@QR4ncm7H!C9*;E9d;&D-Ch zP?1^#m|GUQEAY9^`CYO;EuAtDz;(75 z4QrkW;ov1O)q3!<*`Ce}5wI-dZsFyEd6nlq$6pWircEYs$&Lo;bPw5}yRYGboNP*3cKAQl!`9ULi zMXFk(+D9{Oz^5NC`eQz58*NKh2^i6J4jeo7A0;8yBcxN1QYvkAZl8nFlin872<}`R zeJj%)|DD|7ShScmvrt!4vvUNg8xeLl&AAX>vD=#v_h|KjBaU949h}3qYc0O8!I}(f2z-zK@(dCZT?+c7o+fZOAppvY7446|PU=L@86`e0``l7+=87k;xhj%>ZCu)V2ehq#PY`z?}`Elg-(a*F)^S&~0fvG?Y8rt5HCx1LCLrrlEX zMnvx&h^~??!sXQprJi8*A5A5r5GOyYQjL!cHg{1Mv2S*R8>SpAH|K7|H_8l2eD6r+ z_Ai#h(Q7Se1g~;u8!bE@?=%DUu3Mqkhr~OcI)kW%6UsW^2nz8M@a-!baME&wfs062 z=MPHCn-{qsyrWSv06$vP9g?QyQ0 zW3!Hx#g=MAAL@O0HIz~$Px}6QwawrA7F&_e`l)A5|IiZHq@Khs`+H1(1L!Hk1scm( z>Fs1+;qG)rsh4T-VEv1o6j`8%8R^>~TAAi05=NJ_pJaSiP`Rd>*QBri-U({JzH%ah zczd@j`5Zs~UUwKhJF4g7@PZ;4jvPR3tcY2*?ZyZ4$#nZJcWg0PPKO$x8 z_n}TokY)6|nP5zpOPaiQ@Tg}{wc0$>d!DE{yizLZ%*w%LW%vE>6}R0fuW0=K5_4@T zt%j=E*)P!2a6*+X`xm@TxPj|fF}2^WXL?xFnrYe8^w1?^J~fzCmwyV3 z9qPFWr@T9%`j6#;Q(D zYiX7fR$Bt64Ckj;oEN9-MTs#Z2x$JsYigWM(AKpU6%Z0cF!-Rw&vEcD)VQ>m*Nxd= z(_Jr;3(weK{g8mciXuttLS2+Di3ZeSRxsV9D={X)oI*S!b9N)ObcB0D`gB7`D8EA>Oo2b!AV$uSJx(WiQ9IY$84Bc zaC7K>Pt9O5tO?VlpmsX!yb$W3hvPgPbN_6rPn#-6uk;$knT9X>5(5<*{gVoK77LlZ z;U#TnPC5WxI4IMRSMSu@_Gd~X-H+a|Y|i`!J7OJi<2FT$i+U9jPc49E1FQ=-KEA+~$~JGHZzx6jL{IRBxjRt{tr!t%pp17LQGU{7N_1+BRW}Z*mCmG9zJHg&<9yiB zm1PEasuvw2yu<(NQUjI14jzW=$}bma17O;#XEkK^P1;@rh)@RfGGFmS_XnUG-959Y za3GGY$(#Ow2?snTf%}I{__onv98^RIzxt0rEgPmd{g3)PzPlhlInh~L8b20y1NxDt ztZ7R`ssH(6$FR6==yl80Z`7)z6AAmXSxr9YI|hTdBCqxIi<(dKSPaA(QomVWm+%k* zfbB^zLPeYKIU}^tH1!jYi=b(PkNyJ#Zn28;dsgGQ zqj|g57KhdXnV87#D>)PsOf1}%Im73?2XrQ^C8&y+$pdJ5uh@> zdPolJ*!(Ze=1zw8ce%l)TF~o^X?`D6xIt{fXKf@zZZFKnv5|0(E*sb9&?U~+`)GeK zt)f4Iz4Fb>0jQXWdEeHsD}5dAb2RZ}=9A&7SH&1+bie37a;VnB5r``}#U8aL8xpv3 z!;Ar2QR;?>!A5mPM=Z)$=TI`Ofg>N@p4ykpC6%u0WDQunPMkv{pRU(&p(Xu^-Ptrp zAdQ3ZTHg@QkrC?`9`17Tq2}v*O;|glcs~fgkc`_j4S>D5=>E&JR)Hl^0OgBiORK(^ zRfJ^$yG=}2^UxLI+e9iQK-+j?-LkBrV$LD*5ij*SN>%S&l<4~|;r{UsO7XZ9FKab? zgW7~&zhXhwN;Lsi6Zk8F$9^}@PgT%N*L!#b;>hD^8lsVX!wujVpRi{ zilV?rtE!W<%WYmhzn$3NRUi=PmM+RU!TdxIyI2y0PfMt#)LN{!8h7dkoAbjc?H2p@ zUOzL#(5kS1^?)Fh=cIndAQ;Y*N>#)P(3sJNDVMGf_SqzXYX1cwU2)EAJn=U*UQIsw z)d@g<^fR}dX~HbE$|rgl#7^PGEEc>AdozfG*OB4H{O<`Mwz-&C(ZES2cnW#o=vK@o zR#p5Q4NAeI7Ru)->8=*wp62*H$QpCvb9!BAnH7byJvcCc7TiMrV_<*Jhh^&uEY$nB z^E(_cWbh_{Z_VKX;Kcc{E=2g%q>D~7351c>_Cf3>Ymy}45@}}8H$;8-tn*sSZJ4{G z`in+hf)!X4cZx1~izVB0_I{H7-d1-tJ?Gb=>9K>gtrl8pSQ2cqb6B4SbwN_b;fei@ ziWBYOYBUS5`z|f8p8JX+`Ld+voy~`9b{lt-$JIqE_%;PuUR)oL63PmVwTu%8;Ed$> zVrPgkQJ+-Z3&*B?H=vpf)q%4`}U8V(UB#EdrFBei3Q|9?jF8brmwWu&kJ9ctn)5}@o=|= zMSd2v^b_kkzZg6E#+IJ5J!>lL`voA;l^eBDt!_KEq08+|V@qz!N;z$!zqfy)^1dYf zH<~8M98a3pG$;1z+p`{z>Zyy z5OuKlyoWZ}_U_=VT)+SKza~xseqr(QA#W$vj_*GjO>c$odJnPW=d$%&DA8l_QU+4X z31Q`O1|qP3`Dp=cVFU0N&3k4~!5I%`wA&}TW=dv{6VlJaKPlXWukcaE+qUPI!=wGK zuI#|N#`_~Hdi&}z2AOHjLB}0y*3_Ppnn#hMN4^~-;`%gHxy^RfV5<5fi60Fmd$!pD zK1oZg88(#xXBPLXG!i-ta-rPo@0JU|W*KS}6;i8nQ&ZB{{bV`AD>eUOsC~LLt*b)i zvV;3JH$PP;a$F&;1}uO>fqq@f_AH!L>H+%%T)~fxRx3*hxN?lShoszvh(>oth8)o_ z`cu+Tm$HS^E=^hKLFG$Im z@Qve-i7FhhgOtSW%f5uzD;D)Fx$ve0BCeBIr<`q=vT>BVk-!K0~NzeF{ zY3a2fq61ONS@RkgPGyMy{&nhU$ImAbQ_x7d#PK;fuB#aN;mGiae(RCob=CbimB019 za1j$UBIUD>gIT9$QnxISBNI^jb-<68h-oaj^dm~g=9}kMh0BAu3!mFFuPp0+gLZeR z^RB|V-B@bjGN%^mgXp8cXA&b^-YOMOBPH});TwZ@%l4WZE)70oMz3NF7+#KUX2O#@ z0w3h_{5liJg6_w;v$6l=AW+NKML(HKSv0%qKDaT$Ukr!#6xWyBq9pW06N~W)s_119 zH6?COv^HlO&OKa2IvL^mKjpDiyg1$KjqQVG|Dmkx_4t>elVHChoiki5xryZpuHlX| z-J(zCH#x=L(#$UE=^R)RkaJTK6p(T#C$NAsW;4#>{d{xNI`>}+ z(PeUWwoh6^FRRsVkLwngwOioqVCdT}2y0{85L%L;pyw#}mRZdv>p;gV)`bBP6}JF_ z3V>>s2qUZ;3YNroX_@=2MJf8+ogQ3I(VzaLFxdCqruC3N@GmGDa4EwytfhZ_cnMo8 z@$ZKhi7+Eq==BSNBW7Z{IATB_^cYzjoYTcOLl)?-?BLd#uYlwfv_@ruIs z&$pH%z7wPeneZ#PPe6O*%O!2gPL11N`$uV(+1jhBxnKe30S)(-@^W=)m13MVlL^V^ zhjaFk8p@gH*ZgB%jzsVFpa1^Nm!G2GFOh`#2&7#s0dn#C2a+g+w6x+90!PK>G0rJr zj%>A|YUAf^YP{U%W*8-d#?l<$DICZj?&4oU8Bq(t*~TDg<2y~q_RMO2BLWvLJ!3K$ z=_)uODGH_MICU!)WqDB$&!;%c!nRlRyTX*ZMqrD%og!}el0a9oMiGiSkDV&T-poB- z>$k%{=Rv0WRy$YL8W*jx98OifJ7Iw3J7CRj>d~WhQlk;oyCG5pEl_k>Bh{F~4oti}pHi3<4Rp`HM)b>?M z%Q6}3IL;86!=n>rXG#WcA(oB}F8K_0O!q?D?d~$Ui~-JZL9H1EQo2ViWe~Y1l__f3 zOt5AD#ce2j`#L|efuuCT(WMbJU2%dmev_!XAz!5^6IOD0Zp4io0gnPZSsYpG2Nkw^Sf<0210 zm5l%L?D)CLMoZkhKR{*!kn%G`gkBcMvF6~6tSY}q>0obgeS*ck%#VpogGz9V)#Etk z`Td4RNctcp!ZHWCo|g9UqdRNvLtu=dljXSY(fc>y+6B(r)g5<(e^myN1jG&u+rkzw_K9A&)8mTYJbk#Gmv-ZNSo&7DJ9x+V^RKP$^|1o?wUJU52NmGhlT2U*<_Rx#C52eeaR}xnr`=4ih|F| z?;&A5;L%G?`arjPhi)(^uoz@~g|mMq$cQyTbN#}RzXk95-2N_una86?Hr7r5Gq9^= zJV>U(;JJV0t`(RxuF2j z{OaB|!#1X5=2c$6u}4H#2;d8YDo%vGhIw!Rfj{cR{ulUmGlrZ;FGn3VASjlY^ZCa$ z$~VP=wv)~{hMO5F!{pjCu#p~oF@Rm+7nXa+tK9( zP!_NHt?7jrqvU+(Xqbfb9sj%L{ZJ}C#=3(>k6wIB#d{LHsF4dTyLeSfKk~c8vH*O7 zXC>J{zJdRW|A1mQMZ0hLO{T%G_tPSPiJzE&PR{W`*g4+^aLoO7D2Uz&#bR4zZpKS$ zdL?jyEXQ@=_LCfjWQ6F1UA({bB><*aA-qJaGmBDbf0;>esh%XN6=a&zw$YNLFR3~7 z@fIugmGFBGwT7yRS8BP10p&+Q_{(bhT0%8`bK}C)uN!`TD5#a#{Pue;dGC7bPT(=v zA^s9e^!ft$~i`` zS}NXeM}XQKGg-17>W}~2jy;bz%T~}enkW{#KmA#==bM7|j$JN0lh~UeT^0GPyGgM& zxY3;2$tCobUTzVBK5LDFmz%iPhbbz*v@{7avOb@PQg&=Vw~_Ba1l-09+NL%i(bz>? z{=OT1*W7<=A?))n=v$vuwZGaw$BlQlQ!Ec{0}r7!*(k~@uLX7tF9K>yOk-cxylAv6 zBk9T?tw-B|`z{%!IB;nreMKT~HO^%1u34(QPcq9jxRAK99@P~ zzy{RE&{XTMkp)3f(N}kzW0^~Ejmk%Q=#k+gPMP{8TOQ%#7`eMHH$c(>-Sd~)eFQY$ ztg`kMTUwpus(x_8cR#UfQE;JA&+z+fs9!PiXa)Hh%&S8okMV3IU2RXNEW9ngS}T-s zFB)xTxy%(0cHvKi_;9!L~`eFIyKLGRlR#!0) zXC+W2hk!PFPw?!1bi7nP`veFi*8cV@SDSYW32afD$+q`j7T&98$q_1bO4h4eJDDt; zjhO$1rLhzClO3@T@F-pp|LgS?hIb58BUe+RYG5T%-MqRNxbem|@%%82an>3de$6uuq1@qmApY3#puqmxn&4u8m zqjHsYr*n1t>0@L>&WwUNhdD#DwrtaGfA)R6?VGRtu97bvFyQSjgXA#RzyFT~U=LAN zP+;its5@V;N0$(%B&>NMRA8cr@NI?LXiQ;j$D3~}K17-0bRC({H<(~WftXKIqnGtY zg)985-CgVMJO11r_$YkDIXoY7B6^T~na_ASH3e+{;m_R^Ur|Y?1~YId@LIUSZrZx8 zf}H+(FyrLPrM+Qwx1MPe zP`DBf^*ik8#twAl&)ii=g>g(uFiQk(^Yft;Fu*uCG)&xDD1jv{k^@aiPxNtU<%V@! zn&f0Z5#+6aQnRo9OrJcv&=sXYe5L_(Q3-*8>pbqorI?(`(O189KW*Nx9JfV4+>cSf zbmWIMn?5IJdtOchp@5fNl$EB#<7oVC-osIR?Fch!Q3plD#l%lw-Jf$}v%VHRQSXs5 zUItQy*5dvABPt6nmyubehtu!r89D3;#4<(B6WLb*9r6@1AyVejBdL0%s)maJ0fzox zeSFF@Mb!ZC@dm(s+rsReV7a2T)JvvCK@RkO+J9ov-yA{W#xTn=WIV&)VXQe3n|3Kv ziu8b|Sguj=HB8vCXHAI9k^&F+6(PS$D*MpEV8CyGpzAKEmjs=Ma)k5&Blb-kL$Z@1 zE#g`GB=I^Tz$gdv_~I3-8CAEF{Mq!8@IDIZ+HGR{7rdZoCRd`%@Y>F{e0co#_|mr% ztS%3O5a+Rp_P3;iRKMlq>Zp7=G7P5##shAlEGOWRk6(JHExtbVfZ`^a71-Cts?3eh=w zr*(a>!>U8gmyu@CFf{DW#!8Z_ES(ZEc+t6BGm!v1h#0*@20k}d(KWswv}G=WuKMe> z={YE(-pO1w&THQul3t0{d7b>1P(>flbOK*XMU~DQ;=u-*M-1$*M<$wuV z+;c8R`8HM+PJmqng#@rig3BB-J^9f|_QGA6c-vPot%XlavwJTCa4^#uA^=|xn(`O5m(B_S-oTU$K;Vu)GOByTiAL5q7>IoZ z(NpQ&>U|>c~{-hd*BcW;4o;>Fz%q_Qc6a`-GvYFsQGi}61}U~NI)9jI_?lGMK^As zf#TnIN^|cAn8a#aE4mVe=Q7p%dy=>NMT|)ITmMW0yZ1$Ah0ngWC{*0rf3;l@J}rKV z@7!u(55j-i^FJ#;x)BLL-`og@>tX~M^zM8v;;G|`lvj7pwrzrIBm#}t!yjM(=MbG4 z+*PAoAFZFSZe0%A{>yqW0kt&_m#k=tmSQkz0n<=3^{{aRM%CM2PqA1(rI`9hxAM^f zz7)5%EY+p{9bW7gnwyQk@Kyl+9mo2IT&1oKYc#g#i-wyr=^$_eYE%8n$>PARE^4`Z zX}g$+>d(hMbvEPck(0+3%dCXz4h=_ErW`BCVL!RS(%D*hE|FanxDPqJ)$V+bzkl?< zc9_n7Dze0HLB@6O)vd1QM^o0$!*fcc&q*39F(;blr)v^WKCQg(x<)W!VlIB?5|f7| z3uqeC62`dU&A+`DI@hIVXs!JSWUMg{QiNR$!M9B;KRBjwPKCkn_s?w`0os#dJKRUa z*LbV`7&R~^n&%H@2-LpKFqU|{PFW0AZt2;I$HX%yQfs9+@F&_Ih90L=UMR&!o;~4~ zIgg<^otamh0ZH!8;+P(1r+-Tmq$(3&%*@Oh{ik)UUgs^@iE;r=`yY(T^Mfx!5I}vA z`-8}I?Bc%0xi_Ix=#R?2%w$B ztSX#!vwETLm$1!v=%+I_&KYz*ge)$4{2#i`DyXgZ3)czmTCBLc7bva;3Pp++3sOpP zha$mCao3_ni(7FouEE_cc%THgli!*DxjZ*t?)FS(_TIDhTI+qD-$$dPQtz28&U2^T z&__!GXa8+&aMPy-YEW#5bc(@0Bip#B4ShPFqf`~{9`cD{M}8=_)wdAR8(@am7Xu`h zzn^VhN#3;rr$YU|b^qKcYwvDm7ywd&y^&-%byr;PsJf{jH2ztF;+XU6q@^ZD zmbFCKySMO7#rKZvIM+nf*Lj_PEwZE1WoCYY1MV$?4um?|yrkO?%ICqblpkOs*w}6R zJ*Qg@;lg7t&v(aRq3Yj68bsIH`(2g)o}kP4(I5jI?@j=xkD}A~IC9RE@5jqbcu1bl z$iiOQD%O9+9!GZb&JjvswE_7R-MvabXMGAP^HZ$fb5Kr-oXGrhbNL1_kf>e~(y<<3 zuFmMz$X6v0({JR8%CUaBA@i;Rkun=EX{f3dt>dg1r*{*_S?xcT z9?;2dzM{0q)qjM1)&pEzxPh8eVg3-Q<-|(n%T0M3+qE5tO|AI;uNoo`VX`+H1{fb$ zN~2K>+;#1-;d}!sLyBF^Z<(KpM>;MBXq#&<<~}baYUM_I-=04`cYZX%*+_D%b}zPC zgL->CT&sbb4m@G&B_6adeFnngR}Zg$84SI0GP7{UdbFmDSaVv|XC-+0c^1k@Rit52 zXf(WdA|fW;?My`cSJ)7zxwgd+Gi+&Po>W_y8cj|faMyfemJ3n%HVku4t6)BX zB}G0HC*OtU)Ko^-_5{7}Dh|tCvD@c7$%`Kj(7SvUVLv=!Jy^7|{6z1GI}mDQYRKS< zOQ`Sexem7sSZO?Ue0i3qh@0W-RL^bv{WD~|`pLsO&m_~ z1`a517aw&bYfyZaQ|)uq=ei2YvOdwJ-ue($hYFkv-u>`8b)EZx_np=n?&I(Q)$I@A z>s><^B+2C3IBGRiF+a3agH!_&Mg(g4K=`od5O(9+*f>CGOF@&f!Tmq#@_$MWf(7Jy z!Q+gTZO_Hc@eV}VX#UkJ0~|RjRE#j%p2!+F|Hxn=c>s=bjD`HPOe5CUx??B!(w`Aj zHNVGS!4o5nTya5iqo#su&>h;9o%_RBp% zL6HHPrka`^RT7R>J&W_$C}HfTPX0@yaQGHg_u1VY0+-IH^*JVkT810%@N=R;0^QQn z;3Nx%eD@j^ih1LK9%AF6F|NXC@%LClF3v7(s?P2=oLIx4kj7T0N{4}af-jARm=f1L z&D(dF$aF@yg(a_U5(8;GbIq|ruIR~%JrNRt6(ow%7!Dz?DU(jukAR|2v~MKnJX2Ej zM$rFmPnJLf-tCaHhN^f~Y2ry>6+2g1o&I4efvm39Wib!}isZ(E9acu3$W=b)Lent_ zsuI7I7d;Hg<>>Qy->jbix87QizCm1)f^wv44QaIykur)^I7}-@xpR5I1BUMk@ihhj zumWY|dRqEc4}n)m3-zd9Klj`_Z=7ERFIteH4jCAvPX%-{^Edje#BE9eEduFKuFz7P zyDuZ<(GOePWP@(QR6U}KwO!Uqy7GdnEmxt^80?Y1SJ*si2_;M-Wc zry^;VFWReA1m(`Kmqtns1PTFgh2t-##rna zE2NA$M1JS21eSFry-mq0vH26FPv}!(r-+t&SBJ@p=^@p*jQ9Rx!Nc-A;8dhF>=7FH z%`1uojpaTDWe}dS5@L~QJo~zF8}GzceYjYXJFJZTsrr>nmvQvJ2pPY&`R49MkyggF z>W{6%6OEPcUF$EQO%u$S$gH}y*CkySnP;7A4pmhwXjJ3HU5@J%&QTs$XXm+(IVkKeluYKB2-U6T!oNu3MT$3(#0&vI5JVShm(#Jb(t1D}FKSLQG=86&0ul}3nUK^LyK7oX+ zK^_SxeIL>bgzp}6cH!dNhaj=7_wvhSy@s}P`HNR;f@=k2;h=wO)1 z&T!K8RB_{&Bwwacu$z@`h?6#Xv)~s&p4o@tHpl0Ep(ZE&3boqK;g>Lau#Ez3G$e`O%vLetpSBUwJRMXPD<2VJh2|t8@g}BnIF;ukh9ukyt zbZROLEq(g4#ja}Gegl}ryzPwI&Q6oBX%hkfET-eV;$Cf*gEW(!2j~5Dy8Hd{4~_O$ zE(?>B2SK;Y%x-mdH6Ud(?)l@}=V>w*q)S3@=;_aBlEoO0);fT~A3m|&Fe!hCQ0IB# z;+P1Y#h}Rtr|0LcZ;&UA7x-FV+|D{|eP;i80CZP>RKS4Gg{q7nxPTIjf@H&&Z!Ut2 zH2lim5jtdrZS{F`!V)}74`iI9*W$b;u2*!E-JG=c@B6Nm4RQu%BnKo2Bd`@h?bKSUyg_lRrkF_ND z73^`R>wu~Hw-r*yjhdS#=#u|?=;a`SwrZ9K22Xd#Qv0ST$mIXLJe5n6J>U5ICx_e3rr2TE=k}=5Rr}4nk>|qrpW+f@*nd^J`woLn<7{Isvge#@t(D$H zKd^RSP9Z0p5FSREP-V3B#W-T#{xfIKGEe^!45UWUmQR;@wCUTt2D&DJ#1 z2S--&ytZmtImXWNmPyk)uTwsVLj6H0$9QKOXEb2v>P%wor$_q_ap$;CqA&I3kC6eL z+@%@0mM0}G0v?W5Y2*g{#@6%X9jG}PC}aU9{=*0cfyTVo+*1i^;md4_4NvvQ_CluL zg~|3W9=V4th}YTaK$qBeLYN*NY@v`mGjsm*MJS-=kLD(6F-a0epieR7;?K4QyRrR% z8sLeZ9@Z($MIV6`wC8~PQuaHB*Ocw+f42AcR3kKa5RNDtQ!{C# zVs5TiGA$0d18p3v!`5?2(-HMGUU;FfU$5u7Qnw zujjb!xz{<)--46B1=LjTLsR(lOrTdf171P!^%N`JVxx?C!i(AqohSSB$aATWE$e=4 z=J`YrdwDtCsLxO}PxYu3sDN}G8eguaOGN{?>n8W3NsbUQ=u=fAvqMwMs=Z#-cSH_R zVmGbj;MTMHH&Q4q@Znb%wCsk}>~eNQ8ci6uB~@Jh`ma=dM~CA{0lvwM;6LrMk&@xv zhA79zYEEm5SBwRJto=Wwuza=tH9*)UNw(HgW)SLgV3vDs{Fj$Gk$)cu_hc1WMEp>? zYd#<`Pt3=ajZI98rbSL3PVNaX z%cB}3ABKIYvH8!Dk>qk}PLW(LP@Q)fD)X9oP=kY<8k>U|b$T?u_xF2Nl=GK>>viOz zD$a43c(xm!OhE!MFdiU?xi68Gy|$ERGWySUp{}q&rzlakQKzxY*tL|aw1Ok;B&8v- zqQ>r>k!j`bTE>#ecs!LNU$7Y}M*-9ChxQtr-g5XKsHTI~Z`x zRjPL&>PqeU57&KnjbBYCy~^;#w#dsv}PwCumdi zHs&i=Uezof3S-7=aR}!jpkYQdlaBtIY1 zl%;=@-zE+@eij80@w)7utP?)6Gnad_-|kRbmkq?LYK~5zq*vtC%+?>BXIuL$d=oU2 zR&St4!M(2bfqd)lc@?!)%%{y!WQ6*mXGFCl57d*dx%xLDhZaB-VI$W|& z>w4hW@Y4;-ylUNli-5pYIW1p>Ei_&{AI~AT1VT}poMYT_Sxvh4I8Dy_to0wgy8cDQ zy{A=0$uGw4KQL$(w|R(P>-Z2mhAd7DnC9j2;1%rK=wKB`I1k7NmHJ}Ei@e(v0(-|T z{%EjfBVD_8@U1)PZ5CEA0ab8r4o@gN!SaL{Uz9S5a%>ZU#aoS(u*>71X3_JRms?2@ z*R6K+NvNAn_lmwFyji~MUe$5t%p?aamAm7Y@c?)uudk?~Fu7x%g$b-j@lz_|Bz`j> zil2^UG}yOTh7oIy%)m5EO3KrxS6}y}1rpcD_Dn-5q&+^2351Vh4*DK7a)QrjsoZwn z37!3te%W|XV~42(TQ#11;-ud29~{X0bG}Md(Fh;?LK|4K!RiF^h@vhr>FvN@(x(Ys zzuaH0f$-A0AL8B+U)vzqC!tu~K0|c7N%g2w;unyB83)1;J8iJfT6IOyc!ShkB4vyF za@wkzq<()Yb=B6hl1T!QbizeB+1f$BVAWQswQ*^1GYiVN# z3xwMnnGRMN6JQvgT=I50EAb7HhXdYe*^&d#n;m@rR^5Qm0vKd0Q{1Q)EDC0Lnb5EH6w= zyZo3lQ6ta2N(lf9bpSj(7N%<*(|l8I)Ih8x_`!EI>RTs%yzDxa7JBV>-%kymd3Ift z1gLX8CUEP~Q=)7(p#H|F0k-C3MF;kgkQC9JqX<6vjHc(b*f5LfI4)=PU3b!<-J$X~ zjSm&)>M&fLP~E85&mx5kCNMff4$;#m%lEqE?jIaS{Mlb2gYTghMaRer(sNUXk#7b# z`jkOhl=ywwdPw6sY3av8G^0(CEuGv*7uD{MDgJSmxwNlOrVXM2!IzhHB}J^dk;Amz z1;gzCM&h5xxL>>0Z{V|gvNuKnFHPX@7f-KED%jkBV`3g7mpoU@C;sZ5IhupLI`XmJ9=yQO8_gAc>+ zP_>hGy!{mu1K}1rDQ5&ohfhE_I%t1W<_Ao58RwW?iZl>%id44JZn08*O_GiB!m)r{ zZV|(wrN<+=Lq!R~r1Jp`{KB^}fM9k%`;qf&uNdc{mmge| zQs?vfjg<3$JW6dP*!=+T0A}0nk8U2xECfBiG&$N8^5#b(-43fEX4H$I{|s+T0_#c* zUzz1L+0`xNFMZTsxl1U2-Mm@mdFnRjtNT&p+;Yh?!;}ognYztyUCo$yvq|=TUzWM9 zr0;{k>5J7POHz+o9DA+7a6e!(+{R4l8>xFOnH90uqrh^84<2$_*rpp}&xp>i^cFN> zA9sT8dca{!9>7_cpV*>sZ1h0SuB9q$!R)=!;wnJ~y<+}%e~g6rG;TDW{q|COcoKrL z4IdU+%b&kCxV{t2ZApb83f`oMH6C^h{;n_gBNkg9>*W9V8wU5-h7V|6QR03J`pRg= z5vYN@XE}p6M9N$h;pk)!*I7PfTpSx$*@4)Ohr@kGrLX93dwMQWpKzkiW?yqrb^T)NSHGA9vnIsvw zdFBPJNwf1X*!@uw@)n^ag&gNVylLnDU>td#E+0E+b9BbV#I?3AquoraZcP0ud1W2v z*W#IzVv5U1uq^vUsd(9slX}#j)jQmpkX#S z^qKbU$u!>nJPIW^V}B7IfjY%cmezCTIp+7&FPs}1QFohLODIrD@kcx7d}w-!5s?T|7=Lbi>U_+|r1Angb-mU# zA+b@YvJhjGLR$`AOwTtYR48b{>a^h#Ge?!4k>7#u;sU^_lI_4eNL_)j@XA3@49((y z2cqzsC}k3fbnQS|Xh~I}(GnE|5kc2~q(K^f=WPu&sEY_lpYEe{4rD|yw%DQ)-2MaV z-G$+pEr#lw)ZKU>VtStzn*@|EOy%Pl!tYBp(Es;CA6*l?5p)gH@-?} zDq!;6o~5YiP@>3hiuZ41?h()He>{1^4K$->FOlXn5Yi9s>tXAL7f^6!`j= zaIBCscJsrnwZ$lEszhS}^YQF$CR{hi?0ShDpWE|4)6m&OTN2-Ub_Bvx=crz@?1y)I zBkiD_Qt8#qcR$X}l(O28(d6cdC&H*|-og{<`}^el$*V;yd6!FA=w2Nl3;B4+GR?;m!81sR{o z1K+qz+?X{jHVN|agcoh#2rkdexeTyQ?;18H$WY1($Q+?0#h*>Mx!S(s*kX|!LPt|s z=9do~?o#abxo(2GDa!h)2>Leq0FTWZHd_qYZzbArigW*63cgp@yN(8biUX)_at)<= zoG+(zGBuWlmoi%XE*M`L*{rp!`XkHbVj(I-A$C{Gsp)GQw`vChpPF`+1y0zCGvK{_ zO>@b5)%w?N@!Lz%)PI#&OMc=z(MTvSlgVm?25-x#zAlkA^9soS;<<2RAgZx>IQX;X z^6l=QHh014%h$G?tDd56go|6e>j#%GJ5;R22Ihy|I??gFdRNC@gWQOxomHVjXQX98 z=sIJdzu41wV*x+lE-DR()agwbptpqV;%tJc>`}eyvqf-Uf|d zc^;dp7JBeAzWJpAEQFHCk|DX1qWuG=0*iZ1aX24M0q_L_#Q~lbX6##g4TCcFayJ;@G?tB&&~pY)V&Oj|5F-9k@+CDH7CUS?zDBE7$#`i)21 zd*C7VXXsx=P_aUcA2acTpVeHbJEr{@(fC5q>(TG)WO5cLD0nP^nXEcQS-z1K?*bNU zdl$Oyyk5SGyWRWT>YhBno_4ynh37_;@;pCY1ct&=lzA-hlY7(lK>#*vPTF8tXk@}b z-+mWk%Lidm2TQeG?=jZ+V~zNJ+8p`$pKM!|GX6SC6aUD50+hSchNTz(9rF5BZc*8; z40OES>`g?&h~25@ynaqs(9&t)`8z=`UvtBa(-7a7QgjGRw8fLh~&*`(-oC)bLV;{60M_4uK< zaZWugKf5_0A+fX2`7~5?yQhLUsb38anlB6{6S?2MOEV(1cXP2w4JT3uFu9;Rp!K79E$S@`!QC#d=9lN*{A#+G``3)%gGL!8w*TqfHby_e7!V z%-M-RP+HVi2th%*mK<<)4cjx63LNk68gJ*a5V%KVWPz}}pMHzbo%>l<*LY#EKw#R4I;VjBbZkI#bCf}Qa%d^8lyjIDwWTvsuE8W-YLg5(}G3Ukf5C_ zrrb*^a_qg-#47q8fxMOa0q<|~ zdXcnNZy(G2NBR^&Zv;27$OcS)CElmLb7>J@f))YqBBd9v3B1i0qB4v;eHtwQ+nNg^ zw4|*Pn`3^TDb7nng;lRb%xqV`S+5q?P3cE8CJy{;U%ynWBH})*mv%b?5fyGk!cOQRha$Jk&JyN^l`LZSm zY2RIL`tutU_EcN{l!O4BeaSo9$qlcyw(%G(o-5NrOZk|@e}sRCkx4ZBFkcLvDlc-yyLLUX7^zs>8nJi zf`)*D*}-+zj{)%C;FK#)DYPm{zf`&|DuccBqeLlwZh{W}WkFNrN9I!0X!SCCz=5_e z(>N4Sa{Y{5y7ehQ7xppx@1U!uY4(1qux>WDP6ktDERn^S7CNOClsPY#Mlp6 zuTJmeRL+>vir?Ka=TUuW*q__v^1?z!KGEVXAk6a_Qa+;|wRob}3_?Z;iQbHLZxl*! zN61`U`xd01vM5110K)-#xp*^XI>{g;gJF54OGAVd%+%SI0BfgCk&YBOryiUhZuZnf z^p);PV$0g{Qm_PXgt4d2PiAPxqJ~KZK$kV`1aKxt{$(a{ePujjkV2f(Id^MZZT15d zNsV6^UEmbBsfGG5BZho9?h-#DMZ3^-3@j8;@;G=Dv~+ujWs%IZgKu)L?FI*9QNWme zaz@*eps6ZRp5gE7x|NVyyS*A+8^OY7YdyxvP1Xp7f{ICKG=mBZS}mYhjM`nzf}7A2RJA8`>wSFu@dL z=d%U}62=%Ro&l_QAIE{(phHGyaK=5CVEFfL{!9M%g8P1(%@yy+chG*vx#{qN3aCh! zek`_sG|}b}PFh8b#H4RK%L6ulL-d-CkHAn}eeii6=SJgr=lyb*e~N65u^20!#Ot${ zBv)$lOp*1M-7A@@P4B82zmJ=Zcd><0;L{k$THsD)wR!_t|07ptD?f4qgCkJ``tS)5LioT=E7=~LqsIX5;ga7nW`=_THyoD zom;?2LxVzuTg%Cd#}X+RS(0XrkPb(fsMU`RB_8wlufYOd00&l*0;3|LNir;~;xr5z zY`>jvLz<>_V@AcMQQn|4;-dW&f98IymwS9j>*8=j<^GWCyFAz6Fag!1xS_vDFv9`9 zy05CL>C<%}MfT{f!_zi{90!~fH_^Hai8pc_us?_pM@sHc=szd;VzL>X0cj^os~m~W ze~+knnY#DFp8S`QUjbf`xLrq+ugJ3#OxA4muo~+=#O_sFEA>@zQnn@59X%vLH}_(K zMV`oXi;n&n?B;-%NFo}flkfg=i0EU`X$JD5c206%B*jMu@uEjOyc=~~)p~psm0J-6eOPPUB7AYOSew&o^gtITKcdG69Yl=B$ zB4vP@HKd+~Xv>suUSDq@-1Z+FkmElc@_;%|q#iXtW0H^{El6`Co+-6p5a;Om(xv0| zz3#$4cvB+L4{JnXC)l2|oI&QC1W1LQH??@8Cl%s`=wiLFUvCGIh&=6q9;|LkI>82k zwh1`Dr?F%u0yRiT0;`B46ay=5AX#T*n4s1AIV7%~*CHY;#n0NTCgbaE#x|SinKZAy z8rV1Wdqre`gfYkbSaR4wbO@FUV5qEoL_!(Wj2q`6M(uRDbEy6>?)dfVy`)j0ueMMX zaJDuPfy{lzv%mg2hbMI0C`p#SF@$C^;tUUX=+u(v!+(H@=x}8!qt%S-`KS#_fs7?s zL8>U*wU!?=(!S=z5vi!Ca_n+eT;0t3-`wa3GYE5~pq9-#+3i)|DRo^+-t1H6E|*Ss zJ|FQ)o<2{2o=IMO|D3_Ufvh`+8ErI@|Ao}@A;~b2@zCtMC>8!Wq2W0x(I(&yVtBl>;S+KAsmN;1f@JMvA^j4n z;j8HFcc-JAkuuK54Y~v0NU?pnL!W)7k7+>_5t2Lw>N4@Jc`U4*P5xrUV;PB)^3jJl zMfllE7f5k0G<;ECROt}D4=WVEOn6X`0UpZJb_SI$ilp7XJ8Ef0xa6?0zauRv(19-7 z=0x7G*;pk3M35O~o68(XSCR20Do(38N|i|3-=x~=g6ZKgKW<_@g$~yHnW06Ej2n=H z!D#j~#_b*I>7-s!b3c1TG-%2kz=`ymBU$~c8ApzWd)8Y%lg?AQg&o>$ON^f-kx|5B z(I2IM&Gfh%AqoY&8c}A&Wk=?buuc7(9SVg1d|vv@WN3Sl{@f38r(M-z@ev_;#5`|5 z^Zf;iC|b_D;o*0H*qrq9Lo_%Vbz2ZTH|Bx&RprK;cSN<28+c5!hPvq$z^7B`#cpMG z^Gvixjie&K<%fe=LD$sOaX@vot`3^eUxpBt}Kda(QOwt13Wy?k# zuz1cYm5OYal|itG;370kBWE(JAhN418Gw=g%$dAYDkmac$)tBj{9EToo?uLT4aWmB zB`N&5Q*H?)X<8kLjA*-g6|25$Lci@y1Y6`u?!(y#i<~n~-||c`&WOHGMQuA)n|N9-I(7VsflcOLgm`~;=2ez;OsGdxNFDWOB_^)~rsf?GnI-fkvJ{&mcbRRS|%nk4I!`BCbE4Cf5bfmG&;2| z{EkEOz|noLuO;OoIB&Pln93@X?80B;K3EUCi1@V;?~J`j!r!qFSlZ}t#Cf3{c=89A zy23-d%>b&=0+D(!@Y(D*%Oe_`B9VSEhKRf`6_Zg@%YJcyFLqQQXss8Oh3K z4^cXDxHKxJq?f&+DJ~M6Q{G_sq%$X8_}(SAH0y2N=Sb^ZlEBUm-4!eRyru_B1@}Kw z%FqAiNKRVipL+MHI9j3QX_PrZD5u5q*>C17OO;iCs-bG;jjG=y?V-dZZ_bprzjW|7 zy6^88sq8bd&-z88c|t_YL!thjdQx^vLjF=fyQs3^9TC1-@1KxTfAsq_sE_P}ZqCc%93rR0(Zu4{Hv?{3+l;s| z*{O&4zNAtMuITq(%6u{FM46$u^xhYRxdtbl2v?y~Xr)M$@g?pOZg)P$-PZ&2nsN-b zJdkC&DDi@}tm9 zvfj(v?mwK`eCteHYNK9KlZAkHL+w^8RfFaDIN=F2&cd-Oiyh89l$Qihg{9ytO5s;o zIf1JB$SBbCj72E+tD!RRrmS$1Abrt^^J_XudpNmwIPkD2x6L%DBD(bF#=XyOdh%BN zPk_`QzwECcnA233F451OFK_%Y?DLanyioF8Q{GX;E}$xRPsLhN9iB<>7PZhhp%qUR zO%J0?0j`CGom8>h3C2RQ2k%o6cV}H{ER|s7Uzt3969Sn*0{MAj%|$%cZ^*eg-D$2=P6sJYoI zuKHmd%9IpGmjd0s8@Ipgd@h*vjk77qHx$}bP#Om&G17cy?zc#1S4CocwwoO-Rol9@@#qq*7{l(ZE;o$_M0Ff z?nBv#f)^~FG8x=@T&pAz-&rA+!7P%yQ+$R@c`%uBTy;BQqbpCWY@BCLjE|=;@E8t% z3n*KBTzrNv_+Se22Gw;^nw%|jN;`|g#CFR{03Y{Q+$`8_$%q|oO!CDBgOM(tkRWM| zjm^uxu+gJHWT&oES$YqPT6`;0Pxx$f;3n?JycB-48o*Pc|6hbIjq;UDnI>SENCeZp zB5W?QZ{zMx#p`78xJuqrB{Pxc=$O)21LlzXX!PshX4Q?C^H)>qY8Rs7%vqNS6R3sg zM}TQqdUZY-b7|)OHh!}IbC!ZRsoM4Z<`v6J1ZH;?(+6(;yV1DB>c^Q4@J7dV2yJEa zLlw2!nb*rg*XGa6f`?wbTM^(#p!z!rfRUxt#x6xbe6lpD0j?}<>ThIcELvR5(?=SX zH2#5aG?j^awtxY4HI@6XC%5L4w9>ul_eF+?hEds3YLf=)^d*-Z7SW)x(;OC%2&g`w zu{Oi4=(+Tgxk5B(EcI=K5_vN;6c^22cq8&uK#-BtNzzICpD5j!(W8+Dkj+xYXJQA~ zr9)XEbbzq=OXEgsFXAM@3`aewYyYI*rG+XK0 z6g8nU=ROOO;Pt8v(~FKIWh-5^Uhim!$;|V#I(5c`bxjiCr2yLJT2WS%kndee{;TZx zSlP30C2!_$OmurH%Gt8K+@{;2QgEcond%s%%R(fvQ7h(r{8_(sj=bBvQ%dZNV1c?BZ%(iC7?wRN3m_gN10{z4+UIK>PGio_ zdrl2suvc%*-sA-9J@s{Vly9|`=|tP+DC@`wZQQ0^NL0+apdn!c9dBbPqDmu}Kn=YA zMiKkpr%l`Jx(2ORzskv5IS4w4lDsxjTHovCvMQLp@wpak!q{}(P*;n*`gGcqN;zI` zv2dc0FmD8;HJU|>2#Tmj&4-LBUP>IRQ-$Z;Drtxe=NPJ{Y?8Bp?}&MxWNGv79c6pA zBR9VqgnmMnpUkQJco(dSTchHp1+}^l#o`KFiTEMRW|Q^Js?&nM&Uu{Tb#sxm!z68+ zBQ+SWr7`2m?O@HaO71!Ro)LeerEUK_r^!?|_z%a%FoF#uBp`5f#l+EfbybR$Y#;Kk z&h=)9QG@LlxO^UHA3Am)+pke)C9t7uODI_HkpPg?#=#(Br+ApzJvz{%r z=?fDrfJ-XL8hNiI8yRIR65oZJ{CmvP02UYd5b+Nh2SHNfRsV+f^WnzhI|f;kWMg{z zTN0O;pqcH1%V-JL&}w`QKK3+1l<@bcNMCRfUXmvdft^p?+|_h3xY}Drzo|* zLh-N)F(7zm*0|s~C_Hazr9Fwbj*}H7Pd_XBqWh^BcE8K|)@571e>rMRl^3kk*j7f2 zHn({30Jp<{{L+{5X$sBX2QW^{5u+AHu-oZagD4F~d&N2(}){%~fD#&gILg zH!q;oMU``35sxkPB^Z=B(@5Nk>mTU#wYwa)Evx**oWR%8Pc-?D`X=lnCM;#?_|W}b zj!hLIEynW?!@G$JhTOp%le;mJD^s_aIEjo|)hF8aJ(ZuC#^YPP?>DS3fvyv#37C2# zid9alM_&Bd!W;ZnV-MzX_58~_P4D$RJ|oNIj#JMFQv&X}#BD9>|2N=7OgSrj0Dulm zG(lN>^1zQ_A49hTcLh20C2y}YEph|q>;Eo2_gYJNSy~i*dUc$NpM?VK4KJ#IP>$Ni zX?553M$3s$__T*b@1kTfDE|8rknJgz?2#-3ac2Hb5+VhnlV!QSD~5uc``PVH?*NCG z)8m{N_1>c8P>eP$2 zjQak3j|WSXZ_Zz5t3A7Q28cOoo~3k(K_;zYJP_r^2D!x81hy)Jsl zK_6o8%ogfTy_~UJ90S?Nq5;_Z6%~MbV!xV}5tbiTaU*ryy<@!en1|%L^hXg6Wpn>P z&}`#OAI4ztu_UiHHH&1y3==lj-lChO!Mz1R{Z?IERF-ZeuWwFB=^p!$GJ+Pi7UQCI zycbXZV$1!KxMf~^76Jnw3A+O%10T!VqjL||X2t_xFHr%|mrk&+2ggV+0b&5vh4@YAg>IW)7t@P--ipx!j{2KoTaIb7opBpd zXq0m`>W~Mi^zz3XfQKc8xo5uDHchY$*1y`7!w=82T`Xulp86fo?td46@`+?7#5hS& znPuSl`*4>!;IDBKR~mlKVGKZCGB?*f_jxPMSoc%HN=pOt%zSNE%Adxz@i=Li$Fg%s zP+UrPVPL?_8^s1l~AfkeO=xMAsBC#UjJrG zkiyfj4PFu-h1J%>*x3nd8f#XwMW4Puz-Qt-G*qc7%qlCVTgXb0Y6LXx;8DD*_D;EW zV)q}W_uv8NjhO_N<`-v->kF1AR`v>;=+atMm=s-?543GvcbU>EVj8PI8o6W6oL)4# zwvKG`AHKsrf3TZPKEXvHkbL<-s&FXAp93iGHN-piWfKu2 zkeG{moK?>`55@^+QNs!gY9iuH-BaKjEFHd*r(!>68iKbU?)K{3KA1V=5S$YOc(qK` zE!Boo`QHybJXs{~rtBPNSK+j7W!xz$GTVCdMP?`gWHvh!9|A{V%)N6snT@ z2`c8ul!n#B^o@~*T%TxoaIIXTuCwRUbI@)9h)&y&{#JpYTW(dA*l(tS7tT&69SC=cc5i&L1t}>NzhNb@;kI#U za`NKLIL5`tK;AUcU)W5lQR(}FrMZs?pP=ST?;)ao$20+tHsdk%RS%xIzE6YF$r|=k z9p{ftDJZjSUE}Fz$eY|bHi9*~PDX*vtXpI%3!cixXer-*&|(UN8A^ui$wmWT2xQRa zsn4i&HMfZbwc_G(kMQOPKQaqrOMENg?Lat&-$8!A4%#}8nBjTUT&-U=)V;g%CO%=cY3NgUS?dA8gJW=G`oDIJJ`+X3x6v!V&BC_P$J4Xt65OvzsYf{W3 zhovN|6X~(lFsj=8!Ib6`}hL7buprC|9WCL3`k4zb7gbgj|ksIfVpQSCjWesU0@lo zFB4vKX+#1}VRzt^OiR+6CFeri*&U47Q#0On( zF5ZnyJ^e|O&vdCnAbA}g1eGVSH}<{7Ys)0p&{iFQ$s&b~7*9^6N>Mf9A`W%4zt(U+C^&3WE(IwvM$`_|SGV$q&q@ymjjf zqgzy6KI8sI_(A%{z~f!&>iNFmuhg!^>cA`NH+{rniodp_>skac-~Rwh7Odx5p}3+A z2%AXHJRkZCJ_%5Xduq%8rLeI^gg}CwY4aSqCdS5evi>r|32rK8Yll+t_<8b}{0AXA zSL?NwY2t`AR?ul%{bh0bA#Ccop!IAhAgc=OvSHL;S)58O^<_+WKq1G8p@-Tt@{GFM zeV;MsLA2K0x29g^0?~pqvfo%nV1ys$QP*Jag4T%d^;U%jz&|<_#pU(fkO@oL^j!wu zKTRN71wSf-DH>74KmoAy1(J)R#CG%M*!TM^wNpwybHSO(c%91IJ`^d7qe6P+e_~_)}6mdNlHgz*I`c-dvGx^Tr{uABT}5Kd`*8)70y@wi}mna=-#f7IfX?mqfv&4XRVK&h3Bv zBH?enxx3*b1N0e`O8m;+QSWxrF?A3EkdLO~BI}?`vz41x(&309oBG8g@q zgM!fwu=a-El5D;^V7ext>qPiFbp6}Q_!)5jPBus%SQCrQh6xZhI+sx2+HcWF6gy}o zhe|!(2EUw<`Cpq?o?^!L4cULsEY&2^rb~8^_NrV6&^GzBe{CPrjWfKFcJ%Q1>CIb( zbtetb+4Xzm((b2OWPg{^6~SE+o2O1zz-@_R(}m~_O?c)@E5yW^_USkPdbZBXS75;F zmI4GGR(Zf%dtc^q-BZS69JMWx=(3M%JF8YgMEUpia<<-zCpA)9I&hF%a97(km#-in zI%P|o{-i9EjPK-fo`nuc)-u@2VoJ z^OE8wSH=wghpn@0YO4*`b`spJxH~Nl#fle-TZ^{1Q=H-w5}*`!C{VOOai_QhC|V>f z6nFRF8syD0v-j*T@8kz$CbP2Ey{_vx&eLDS8|jr-an0aG5Mgb!_Vd^5*17B9#CyZ* zRfX!Hg(j~EBh=*ga%O6UfG-W4+c%8*u1|OojNX%04EC{>lGF~Ns|?N;v)z~h9ZMKS z4$S=0;8yt&w`i}!$jgd$E>=|Q;7>Zv78{6eQ{Q$h zMyVI8A4{OjZ|Yn7ZTOjlUl=ZaW zF+@29Dnv#{rUh~vICw<-(fk+&sX;P6 z&DWq(4z#T_rcAgD=}jSETqD!N-=K+K`-FYfYR(r^@7ZrC?*cs#i`2ljoh6h}GZoS3 zy892SS}$srJd340Y+y7h-0kL2)v)Tfovmin=0|M0fhp0v7dBa|@Ia&j5S{9dB0lIkr_&o}cW8ckAgh3^Br*Du$!vu8Z9e+du1 z`J@_ugW@NUSWigVbpB5qh<~ap4=J$o5yVce3=;rn>!_cGM^f~IZ}Nk(E^0%H4b?oE z3A5coT0IOKu7fJ1arO9lMgx@E68CcR9}|;DD1sJF-cK|snp-xY5n}a4E@Pd%pj?nf z(D1m^V^;C5FP<%oWIO_(Hjz<;6#oK*K*R$5zd%@(b8-pvJ&1n{TWw)FClrUBu2@4*%-f+Zve*=RBrsRQ4 zhyWfg;Qbq@u*=Vad?Wz@NX7Up= zt`ZPCky<6%Y^@;I4Sv_IC?Jf=Gqz@c*@pohPe*I!ay_<=9LOHtn0z-P9RBugn#~+9<RyvM)NBX-C=xp`eF8}EObP=tK}7o6ETz* z?GQ{Kl(=LCK~Phjdzz&j)>Wx(BFl^9aLO7%e`gjSNA;cOwyF1YQxY0J(vo*6!E@e) zvjSf(Y?jPc+iPtq9XuDd4i6YeO)XdBhuV->Z@N%G!9PB8mpkMe=cn|A?7oj--dKH4 z*mM3>BO|~Ca04vz@y@+GkPwW~6Fg%{9suyL6cg1|C+W0M^uCh+LCF@Ic1E2;lE~?U zd(NfWSy?p~IX2n#(D(i2+8g*h`CLr>#|7F8I;$kGbYJp5Ekl5bsL9XxKSBb8tULTI z`+=yJ_q45O;b4x=-QtS{W;Zu0!$QWm_;^2xtMYQk>rr8T$DEpJ8sSP-fo3vUHXI^5 z1Xquqxu3KIOG4OZr-Zz8d^wsiWkBSdkeK|_c8iCq#@+y7_ibn>&3|nWdp?G?+VK6h zCchQ=OpVOBIp!tUiy2PHc;Im-dqMhpL(ag{y%O`(V6&1sA=LH%`s%QhVMq0HEJtus z!_d;gdfMGfvM>1!Lc?LytEkV-XLSBflV%}FR{E#z>!1ji5or|Imq0jpM=@~auT*N6 zH)fLTV7hMF!51LkW*j;tRp;$sy$W&4J%ZVMknpR8SGd?T1?vA z&eosEmel{9(HCtInj7kukzWv-nRI zdMz6D;9+0)0%waQ(!n`CXj*BY{@uhVCRCija>_hOUQHif||Y2Vim?a?NrzkSM4(P<G3?X*<&r24;(% z3~;Y9KDn-b7|C#1(#sOtNDeu(lz-00cWzDiV+LKBCZzLE6l0vWzO~LO;jnMe2PSwm z)`{Ek5%=SVmSXYuPD~Fuz&0+b)^9wULC_1!{9kkg-+_!Xl&wKnP8(2^@ZND6ov~Wb ziiOEjq}Nlpy=`!e4bp=nqoY9*O$CY!O{a6`FZ9Kwc_X%~9G-B2M`A8t;+Un89kv0+ zcC8q8=g%dvPM{jj>aonT(^DRz8-Cx9JVMX$r=Jop(cC450j;l0kEk8VQl!C_gjLQ| z#_txC4DNr1D!UwEJ!o%pS;lwIskM_B5v#cN%mIjhWfMFO{*b*u9SG~DtE_E~jh6TY z+_Ahv1aCZjENQ^9d%2Pjr`=8s+z=J%b^m56`>cZJE2aYsKWLk9;LBX)OB;)wBQ zfn8}uoH{StC*Ac5nYaIQY5e6v|55v?={AFk*fl+}x@FHg);iZtr z=&M^!QSxeQ`Kq~_Wss>f0UZAjW8(z7jSG{-(^XUKEL)9!9E;PbDrE5O!oH3pI%3FQ6Dvv=l zC~c8&{41X%Z;!KEY%X=d7HPt66-xH!15a*ri<2+aScJ&-AjbXNe_H2fNzbcPtQTD; zz0DX+u6nBhzgOC)HC?PqWY@IvB=&kt(QlF@s{AE=5fs>GX15~SHrKIt$GT66I{SLx zf1s4%sJwq)mVM2<(*mzr)Y9w+3HylTn5ZrB*OYPP^Oh4r8J~}Qjx~QcfE_FcKfPPe z{pxPs-BnDWLn3R+xGx;_Jx$08E{ZMCH%X# zuC8*aSb+J$XeA-NNuwb|17pfFvOZfK#{WFc$*lPSl^1dWd$ibc{_~iTcJEsT-@OJ* z27X!P$B~2IQlh5j_#xE{1y6Hzi{C9CM5sC#C}Ui_z8x zBw?E}V_a^I=MFqNKffD%e~QK6e)UH|8KY_L$A%@^+i<+qsFt3F()duspfI)^U5_sj ztMo&-K(3#GA0f&8mB2*FRZ?Bomu`BhQp-V?k5yy0trnGN1`*econ^i?r*bT)e)ah4Ws176=MF-Ea;AbQ8JT86Uwy_|CDmK^myk~ZT^{CZ?ejm zMYOKbiCyPUy2ls=SxC_Uc4{ot(KD+Yoi`*5Mkq6cQKis~kzc~X{Ay~Pmmu1Hvsk@S zIq$2+A_eV(hoJ=DK(M}O#XLFi>67%#VQqOuw(ODJm%AkvraPCrbibFL(kAmq_MH7x zGGtXHyNZ#(sZUW;mFNXKEzEw)UMyWi;r=cDldex`zz@ww4ij|gL8pD{e;Rx1=DC^J z(0!fWcV>P8Ok-^h-~O?8>Q_oI??>+pyToJuOCtR;#bGzPipp;7cB}7AQ?osLR<{Yp+A{bU30~g)Ar#DY_?!Ox63t zvwCkk7xfl&!VBzOesdOS~cVsx+j#`D6y;-HQao7*K2<)!np83lkxq% zgpDXd_dZiGvW2Y}l!T$kW>eDP7J_b@k|XJ(o*wwl2dyo%mLaYR;dx70ZPK-h(wIG( zb>XsU4XryHXS4*|Kss>DZ`?W3-An|-{@xcC3oSd>aea+Jj(BV!l~s}H-U%u5Y-SVj zLL<6y@`5sEJGfCW-nIo~T`=CBbM{?;u={N{D53jN>$PRq4b}-Sw6m@?R&lJFzWsYE z`>C_1%!R?UOW*q3W7uQSyn1C;*1V5e38!j+&UNsIrcUfBN2ee5@74rf#UJG%$V~;* z7@l81y}bO?iE)pHypV(7yuCKVu)tN5D-99RC2!mad^MPR)?@yZf9q@Be2(EKYOk+p*9J zzhnY?X!sPfpQyi*=U>J{zpHP*QC05~litG{6b9wVwJ3_t%;f)1(cu&28UVaZFyCwr zv7!Lr;IUS&ErI8ee>}z|#}0^OTY_?1hduJ944-busw+i?X1|^hvXb^_^kIE_R>VaZ zD$%ug%~h#lg)u2XQ0iP_E;Ib96NmbPjtNeIk==LMAJq_Q6@F{d6LuGk!557*sBTO3 zQA`zhFa^`Pv`b;!Pw!54o6gr|#d^+02I+^ka#VmdlI%0Uo~lYD8R(QMX&Wlk?cZgK z8`sG^N-AbgzUpGMCNNI|aur`!$mbi7)MBM0cEu4dS*{ zTrBo|hS(S@ROui*~kG26esP74Wcqhxe>awCF`zTd6X4Ve-_ zXO_&hP&4aE(I+~RmmGfC+JAb4vYv-%!N>##x!?n*nE^R~)0ottiA5TTppTP_i>V7; ztiJgxjojc*QvduYsKzH*cfwkRgWR*>v1O`)uZ15yHoqm7>KahgO>T75S!6x9){Ih% zr`y|?EM|w=b%2&}!fywmm+ap-W47+8f{v7{Z_6nA`I6mVECpX8ZVHLo^1@Oo6(1_U=wXDzw-G|8KY2by1K*JCq$_R zUlcVo%KZ~}TcxmYg*OX5baeA-)F&C*+dg6zW9lZUH(r_H0UyJR!ephbdJpzvI#1;AQ*}391(8VH< zPY2L$INT@uDMgLLl`K%e88$ho3sTHITU7>Jyv;lU(hI(q&D}fj3>#d2i-WZ9Q(^!f zOYlFu@;3f)WbPM|FtYBVAIEBxFSV;13;+uWTud*AH-(4=q-!Uf&%Ya_2 zXKF;nS~*w3AvS~+#V#P$AZj5oK8QsG)eh#Jss90oAu|&=BfowTbMBOEiJk$aK=6MR z0Pd+jld_jVP?id2g1gME-AtM;TJBz`C7Q`-5xNzlV!9|R)D8*NkK=ig$bA44^-Dlo+0|Ds1B_miVNmvDB2; zN%JcwNkJ#Aumo8jFSZk6TDFm9|H+oAGg)Jk|MOV2f0^TQ5n^XmuH?E?B=YuU$_bBB zY}T9HG#bVbpz$m`=%vyp!0ZoH$Q!adbHnm0h6&{zbZ5sdeYzX_;;^UVTYG(HLgu`a z+&F3|=+u$ShOz-X33CGnC^uposhNB-yr6kusM1=TGPhD4M*WX2LtX=ikSq#pKRczJ zDi^P?um{jcqeIs-?Dy7ft^N&?{%VKIozku~$x$DS7feumKyD!LFqLbj3YRaDMhfM# zDt`D|j{5=)vE;jQ(MKWNAnY3B6;hHLU^XLCcq&va`pd_>%G&F>e3@xn_O$&FZ^0#> zX+^7j7|3dabKPuGd971{sHk&VSvB}2eVc;QXz%L~d$7&Z6v($SN2(bh5!8M$3PhBs z72pJSCRqyJy+HJM_O@tI>ehk{kiX9dvwQvOcbG0S=IUW3i1cIoyC^{|a^hr!qlj|2 zqS6f_L!lMY7qL(KBM_&BIvS|)%ZY|@*E@X$nZ%t*?`aG2OLORCKpcL0^9s|0P z8&{g`pVk;#U*7#-f*Hhn5-Dw3wcjx&{`ygp-dA4&A992dC*NHVrxDk9JdEu9rfu^_ zTDe_o4F2wU3-x8ooq_kE?LLKro%i?PE~}}&+5s41L`)Tzvi}t-RMWXWypxpC38f_IQhjpL6v?dVn%4+pMe70P*crfwC{h zld2rV(jK@C-wC7=z{DJE9{dsm9CZX}qapG{S2A23jc3lz|6nl= zJu~wnAfnTJb%=^ET1HfX_l>KID(5(L%{%*f@wF09Zk~4KIE}0IOAWS5Bf_eZ zy*q}JAZ>VlIpKp*KyRhnO65gkd^~Nro!BwMyYTj<_G?_lMP30U-yB(a7xPxH$^I3`Kbl7u%`NR+*iWGIIZawNscAR_yR5T_Gk`k7N1u7K@Fl5 zHRtK77X0jlBrQ6Pl6(v)m{(@H<_5UxS)R(A+qZ!1KXm{&hsFu(Q* zS!_VpTsS@S4suqq&SQ%RSTXBrzUA>oG=bO6Qb=Ex8vM8wq4pIjKJ{8Ujy8qX@GLm$ zV_pnsM`^`oK$5K+e+~$5A_)v{tjS4vGPw^85&FgU&zHXIUi#jX0EQ^HQi?!Ew7KB3NcGKCUd?~N;0%nV6tdxyOk_Wd?R^^_UUMDpU_g) zDDATjrDpAI&1eSL*wK5{uolJXd|qVu%wtxY=g(((LY+CGfH^7*qI{ul ztD?dDM)VKP8Ys)*k^J`-c zsfQB(p4Cq&^vr26uK$$B?gbcV6WD|!EBgae9R>((y-B*O^ymcah`Q7Xu2yRcT*`38 z#=#&9foluB(guCU^H{{2(7(|ew%m5vnVw78cHfzMGD;o>3IfYT^EDP5`6;#ZC zkfiaNng13Mcb6ERXYGrDJeY<23`~f%D)Zh=MQZdVu z6q);uxjj}T@p>;Qw(Y@mc#>bd~IdyjWD z(o6Qj)uzx?%=*As9UryT*R+S?O%e2q3&&EeCH1plqM4M|U)7E+d2&fa&YJsm^HOkxLHJD4t2w46HxbgG^3{&tjGO9i(e8~7Ne3>V-x;$i z#>y6W8oug_e?>9|M*9AYjN`ZHHl6>Ht}do8uj0w~$)e;!LjPnoaq3#Gt@U^ea-war z)nU|+{&Psbl*0Y-Q~JVn41YU{qlBFvo?AXqIq46*{;0Lf9|o3jj_HJXtP2ZHz*y<6 z`dm=PoCP(KH+{xKx}^3mQG!;Rw6-*#(p?Gq{IIj{>}l0Af5&&LyIY>F^I`esKQ+mT z^Dc%Fc=eFK73CN=xS2bphhZ+Ny^^6|En?AsQ9DXXQj_;K_7TQ9y^gKFgVURzljyC! zN{KQSGkJ<|n;*sD5jm2Zna=l4n3lS#< zh9CP0bb*yKul}Pcyosa_e>Zb1%s5-G(k`RM`6V2*e);UsxgY*H;Ayp5UkXa6pvEdb zeX`QGR=uXa^b@f5&Q3$Kw=bY4l89u$^C^81hDsw-g4vdTSWoa=WUmMw@$GtyY{eDH zruJ^{PZC+BBnI^%D^9L0aDN2Dv1;~Nh~zuCEdO@va}<>MkJ6Tx z*Hx>l^EvycqI!6GB)E%(=<4?0xg{B>0BbSkW)pj9k_E`8QH-vbtD}=w{)yd+vG_Ms zU-rHkcHM?tzFuz9oa~ZuKlZtPSh>6W30ok#vA59WaMz@@z$fadXU0wiPlOmA`gPDi zpQCHdefz3D)%CnFs>xD8*f3D^oT;uq>|UhC_=gH(8Tgh zycQycVG=qKn3R9}HU`G8VZH23GG4_x?b33wI6ODTI1_+XnP*`X6s}kxYm$gKY>2Me zUY4U&N^B>BqYuMkne$&;;9r^Q{6}PDk574)_KD|0Mw6gPs7JKEB02H5)4rBIF&hvd(CeltfnT6$k2OZUJ5f^u zB9%ginAj0`p-#vX;b^@*KW z(gZ#Q>JT^?St!Uk*^m1#+o zl(BTLlTg8vk&zy;(-e~ueD>ywO@tHKAX`p=YbGXV%YNW!Bhj^7N zhHHQxj&S)p#;$Pe0Z9t&-!=eMb|V=v7~2c(C4AS`gY+0i3dHD?Sn1UI(&=oR0pn-{oSv`<5@V# zi$;Eh{jeB4%UgxXPHvpP@L_t~*?e$3$1}yS=C0_JrHY+HSGsvIu{_}odPtU6+!T%O zR<6rq48M$_iC4iw^I^_cd;xBm z3xzxAf%UMbrhz36=>;|DOh%EK!~xy8txRaO3SCZ}HYr&~{MH6;J2BkZq!hWhiOOY? zMirz;L_GSefQkG&&-%lac&4k~U&7|h9JAHl zV`*=GY{msdgMn}l8&V6gVukD-B7=B#rHE;h}m}N^ZJsu z{riVP3qOV&q{*}Ap}}x_QPO@WwobPOLC$_vrtk*AA5<|*?+g#_9lEYWnH@oauGX;s zGdo%s1OS~6qAw!&W4*)+h9lXaWcAC>Vz1Sbw4hXR;4VbnAbH35C>69GUxj{$=JhHR zP$A)ZONjXl`rC$KV;9pVr%EC0!H}Cu=ojuGfbC?4-@2H^VpCx*^etEes!oR`;P?+$ z11juWHMg@-&CVzHnbd870C_^)PbN*yEXM)t8=NP&x-W^SX()l{PgevhIOC36|Ga9_{o>+sTKPuL?WxJPQyfZd;>5%Eax2>H^!ji zHaC-<1;skzY|&H_kh>EX5bE)$-&5F0qW*SkSIXJUZ}p{g;-;@#WNkTN?^ZA$ZzWhN-bqw0093H39s1dcy%t?di=y@EBCo4tr>PH339~;R%W1U%G&wU9^`MMz zw1vvH4#8qbQoy=ukvU%NX(hwe;smwVrcAvMf4$nthUWK2vfLzzP9J%1c^6oN^w26$ z3tUSO2G%N7qZ1d$h+9cXXtIHPG(cn$wko@3yi6ci0cB^h4s zhP2(DSF>@weZ_1yAbY=t11aZ>XCRg<`gr>@+O{PmS+SoZn5o-i|6Te@u|`NTnj|X) zZN|X32?rOu-G{xe$gM;(^`0m1{R!Sl%Aw{?3Q$_LDo~Y7+~3=tbjHRJSwV4*k1fXXu3|#v9iaPwjSTZ8qVe ze)@{1L90y4-NpcT$X4FYfU@aI9bK|s(;~fJrACd@f=nV? z-L0f36lIrY$XvVbyDEQN#tR)Oa3+kDQ&K(s#V&$%c${F$4nV1z>b$X80`q@>Dmcon ze7i#AB+c%*@pmuJ^fg*0OJqI44`2jC2x0S2m%sD%t4d1B(zFcDFd~_gQc1s)$j}?> zwh~*!n3&nAoRSeV5AtX$Er~u~sK_@i@*_|pXx)0|Y_yq9E;N*M>4_zzulSjG4w;J4 zbTvUu32^3KIfsGA#`ON~WTLsR2>!=ShQ3fJe#-58HQj<|A-W__Xn>Q8_oxuus zx3s`2pNUSbYrs5Q(q&)U=y8kvk1PPmlw&|B?w^-2@a(Ytg51e z*gp&K;<>|vt?G%CtmX*5FA26F<)=vWL>U$y3qA}f(z`66Bk?9fx;fP_`gS7#GDPTL zfqx}J8kY!WkhLgZMf-yP`7#k1K_qoi6ClvEq+E4yQ+f_0qAD~EU1aHz$y4KyGp`dB zu3@<#Il_I9*Ll2%J52H*_&2)vT^x&Jv>tMkMx0R;JV`CkG z^1#HyEaSZoqp&`o8#C%1OGe-oG%433{BzeDHu3CHo_g+BBdM1jsjx;3s9THlbH6m8 zA2ZJ&xg!vWt}z_X`u61ndRt@9&TpRA|}!n)aGN7-#7gx zIw|cw^A;he@f`Oq+g~(3&h6@hE28BB9H3-$8Ey|7WcG^+TW)B!!7axG(zVwTa;gj9gulYS$lg~-BPy=Byk z56!7Kbhm1sz*AiH-ea&WxN)Vq=YX9(3C=G?d8**75tCMH*ORTeLj0=^z1=ztY^WD-vb6TA7i-*%sRu;T~smj=Xjsj$2}?GM8ua^j`^ z(^0?rz;%o|%N-=<6(~M?JaU(=oy7sJ;4C-HM+r-Az+zj zR$+S2vbyt?U6!B>Q~rqlpSp>VMbB15%lZ66MAFKT2=AIGW4+Y4rO(&B>Y(&CQ4%*s zcKHu?uc&gdg~{CVj98R1{Irt~`)*dFqmHsAa|EuH#j%omu0G1}n=~<=9T^Tt5Ax_( z(FPOda{r>(%(4*SgmDHR|MSn@7yVVD)e?@(_4Vdmupv|G`Z&O^3Xp=`On1L5TK5OE zO^&lcVk2!zi4$XBtc`92BU7^-;5ji|QA~Q9gR8^Y`x$yUBEQF(CmCwtvN7{4_^id# zHjLNUm-qn_8tj6Y8F>3YL3yaOyaEOlj6cROKPHrt!KIZe@uOflZTe+P@~w;^mlAbK zk|(N#PN!>anDeND+#L94LxY2uKs>Xui>BW7y+%6v6&dt5U|O&Z``u&99(u9aJA4TuErPp5z@b|7wc~tR8~=}4F2*=ujD<5mNxNEHprGk_ z2G@yDG`CWSK3#X|yC7R?Md$8w6XCisYPWddfp;idBJTo9#+<{ZZ=JXiar*K7+FzL% zAqSO$-4wIucHhq&f@oL?7cxFMkMqZ}WGh#^ZK>)+{Rm{hwoA*rW}omHlEhp=fHllW z1l{%Zs9-IPeSkbrUcN4+^r8WWkXKC(#_T>+oAE1w0sLF|kFH(Pb?xhp%jpW-t295k z&T=wG-!WPXp8Ea)3nj*fkjJ(b`?I2|xQ z*YGMX<=-ZWxuZbBCP}=ek1+U6Enx4swfIU)y!)m#5_r0R-ZwZTGH6f@XWjV>4i5ML zoW2U{!uj>dj)ZQd*e2RUz2MgiRaHmp9@f2mpPBF?b#4Q9N+#*2X!RE_)6@MG#6K4P zAnM2a1mb5K_&0m$*!@jc}CamPK>XqQxOt`5cg>U(Iv^Bh2Lfh`KI!kj8~ z^;6lWPc1Q)YnGzBUu$0KyE-`qNVD%j-v?7o`PcB|G|R7s9c69g{L>X~sMdZ(mk)hW z^}fpL@528~0~=x2kd^@bj=9BTsM|a!s)XH5|^;l+=*9=e`60qHZC{Uo3 zjMn=E0bWddxeLP;Sp>~NIVxpEN^>eAZG2)uD z!dEH$Y!5OQa}lm@nUd}z7*+3N?&Z1x3sC?b5K|IV!vUtrmE^a-j$`--Ja$lT3nDW7 z>Eijr%2J)v+7R9@pCfCY`GU`PAs0z)$VV%w1u*V5F{;>q$4mxZZ1Py4o-~>CgtxD^ zrR6Eec^G)d*`NU&n7MwT@uvNWio=`zUj1DyI3Asfr<$M@j1|d{_qy!&K#XPPZ}b?U zY+JleB!U+4C0RBr>%)>K9IU=WNo+P-Hy&Ssn5`4DLGrW=GNSerX2vfEiP(VkNXWhQ z3S=r!?`_4;`7z3`|K(=Ymwb^j`gFd{3(^7UQQSB&TMb4#UDM-Gg9`6H#{yb%Qxlo9 zuvZIif#TaM4>@8>vUi5Z1N1U`?d^J(TgUftvUwM#i&)UUSf^f83O*K!0#5-1=;9h^ zX%PkraE)$VUJ`(!p0#Pq+^UGK{{)<2Eqxtxan)fu#iJa5vC5f$G!fP0wt{j_=UBUU zTke#u-$T(6gX>o40dY=5D?J@CypxMR$B^BCAT$l&CL_mSpn*3K446%S-fdzUW}1Sp zsNx&nc$52^GzBz4X=u=j3$#)F8kMqVIhV7gc0;l7l5f+Xo65qpfZiM;M6>Mxf5wUXb_7on7SQ|o&I7V0$x|>B} zoH`=yi^Fsw0=TipmXJ#w+>B*DewI#+O`g6^xFX2;Kgx|Ko-)=;4%zn*|W|N2B z>xNyH!C41|>^_~lgyZ`Ha6V!9tXYddga@0?PCCSTI2H0v@mIr2-AYenERjoC8yNA= zo{3v6rml4imuF0 z_)#307hfZ9nAeQMKYwYYhJI7sBrAS3U2v`MPP73CY69;&iQ8MyC1y)JxYq4^U@85$xk10cJ@F|Uu(C!u-^ni+#Hd-j9Q^$l>)D;gbL zpZ8SB9c=qy0mfBSE;97+%e$H;I4e?2ybOl7(h}}FDmssC7kDaWUhnymPn{j$>WNE; zY^ch#L^OUVv}{yf*||BUhwTR3eOclM?^sr?vAbGv&B3#$hP#Ss$#E6u1mMDKke+wz z>A(V`oqCL;s+p}N1j8xZEbM|OW{V*5@QcU~ef+_%&Og_DM-hZY=eD(CQ$quM+1F81 z~^TvMB zo28-DZ|HJn#*#vphrYo|j4U6sB{FTe0e!oQ9DtXqsg^Dn(8%1^_yYg7@Vj&Pvs!YT zs>~_v>=wI?S!PJ*nOL206kmyd;%;hH=IxnO+lNl8;y$e`jOg5C?%fF4`>y1q!KF!U*y{X( zZ(CQF>-BP=+uk*W;FK(nahuLTZn-F)VnQ{U5Ofmrgfx~Uw`BY4zHNRvd)Jp&ue!)y z@NTxd{(*hvvBkgl^qiD=AMM==HhzePi@0c!S2!>loYuJn2@PAMn`_sOSpMWNYe_b$ zS8zBc88k7;zP>VRGx8|jn7=3454^f>eEyb)GSI>*NG+hk3fO?R+=MB|kc^ugM1bVy zGGqSVEC89QkXn(O^f)R(p3+pqsTl&Gdn__`ltS}(XL{y{eI~*>+9<_Ze|KXSbkntf|kjSj;jjDR2v~op% z&TLBwX~-BdY7=-_VYSg3eJg>V_v>-H9WKUfxqG8rEhox3rJ}Hh3e0UT?JMm2eR!UXQm%aXN6tkhwYlz%Koy4oYxY@-#Ji)a#wB4t6h~UPu zOpfeEoT+>9Ovy3dC)ln1`N##_Yw@J{67!Gt$MB$yII%^in$B(4<&Lt^de>(Eb32LH z>stuy1P``KL$e-MWhr?MhPQrH2n=k07R!3eu&usSQ&Xe;`>zLNy#2Uq!DXdOdgr`B zcCbvhdm9y;5BGnHqyOJj<`o7Nto$86bWv=U*r7GU;8QX~$R>&5chWJAbF1_{ebwW( z!h|xDz@m&&wAq~`BG-79()c^K#vrz?R3B>e%<0)jAqvZe-o4mFa?Nh2 zvnm~}Il=Tgm6BC;2l+}AQ7D*IWjauG1kV#;oXP8CXhqv2YcGcDn3(NkSnsPK_ z8n)F#zKM-pS^^`kj*Pp|FK*9Eq(@M-h}+~C@7mg4EinidNS&;{jT@e0lhfIc%5+2Z zRXTe#G>pDYS+>A!w!R1EuFm1nhc^*ygaLX-FESuoW*GwMYjhwTZ4l<`byfSpd`PfI zw$PKeclKpGD#m~>6fNpBp-%mYl`SFlYZQ*i7jNFlI=5Z%TDi9j)IH3CVq#lO$11h@ zw)3+0N2s!lA`8)O0QuW-ZikPD*wfeBJozjtN!{Y&r$)xRGdk{oUpjC)+|}WRDehg} zdhw!70b2u}VU4#92)88PNKNgy-_(NJVZQgV9!EVFZ4jyJTk+OIsg6PiJyor zM~W^_8Vf*6XW7VK%dXu>AnI+-B-h(uAiD*2}4cyF8*dr z-?DP@wP{{29;wxQsAzmSGBxwB#51z_u<2_DHt`=XvIg=O7`UM!mt$9k9A5ri$< zGx4o=^SI4=u@{+A@Yx@6-#7siGcG2_Ar~SQg7!-4n5(qq6LVqu~fs`7kwyk@T!`!1OPrSP-u&1?L=-BLwZ=!4ay? zW^|zjeencicTzGu`8&xUmAJ10h+pQH*HU~sSEniY>9_=zQl^fa8c=Tss6PM zMGpOjDRg&@Ed2ZFba?+>%>AsWq8;o8$b~=u#NTle%StlGX0BSwZCLGN+-z0|$fcT; zj+9X=w^*1v7?ml%2!;xXOC1(Q5)eKPKpw@e8zRgaez6C2KEyjM9^Vfj$sS#0yKm-a zWO)SS1gi1yM$m(Jue*sCFh%b|LiphLvrCglW|C+1h>z9P)JiftnLAimSV1hn8f%b+ zYwJEu2u^L(fUT!ZtGd;xaXor|6cv*5vz+@|B>cafFrRZ0uHaYJB@lJ&i`j%{IOsss zc2jEh^8;=X;V^?d;E+^t%!c6JXNFG`jW3%y7gvIB;CX=& z$W3HTa{_fIrmD)r83D%iU$h)=2!UTWn9ahmi#1~lIBHQLD&}2rw52vgbOB@?&ftfQ z#r9Fe31;Mi`%ev)-q!Kw?(wd`xH z5dTchj0S-7`$S2)Sg}>~L9zUwf^@~WqdgEPkyJgV;{)qncdjxA8U(V5rI<1Eancz; ze!lfBA?0^A0AW#|V4HW16@QC1l+&1LIBh*mH;^%m&Sc#e!^5hu|h?cM-r0{cRZU@aW2e&y5DRP-@Ir@4$Ybg^0B=ha25 z-_`AM7eliuj@m-=@js&?T(&-6v{!^?O&8%^d#SwPj5H8&>%|OK37W3J^AuWfLH!l? zyQ(Mzunb#Obhk$SM|8j~01cT?<#&}q>%h42Qw^Sbi(ROU`p*W}j+}98Sudn(y=GCR zDjgKxk?mc?p>_6)6J31{+X%xld6h+!>mp2kzhJ5+4shs`(lIluaqRxvrxaAdmi;FJ zdaQ(wkVIYti~U{TDJZctWRZ;Q!=|n)&nOxQa(nz+-vv{`yLyg5 zzs9ri_%8N|4#}x(o!JO^{mPu>IoG(ib4ke2jLmq%)9J5rVnvZ~RcW+B#5Ao~d)xty z3FKO3!kYcnVAds){B{srIrt)NLJQkM>W@m4zTP3Y5S^Z$n8}lE)x2+dN}$y1?@q=Y zz1k)mo6%Bn_Uohd;G&9g1vg1#m!glcC>i7%h~)io*~TlahAfl1(N=wK_g+rv=-&Sa z??4d0FK(ny)q~L~8aDWCt?CB)GCBuwqjJr2#7s?y`%uX?okS*L+2|mg3tt4bDe)gb zhQxi6CF|LF?UmRRI$#)BX_b1>b<&Lm*>UINmFongN_+``HmuZU>xS8UIafS3agw9a zW8X{y=yFnPLG{jCrZubY^f5PZ{t8vWQC33Py z_9=#X(O0xvwQ7xf`k5#E=jF>*`ieohxq-gMItM76vBKI+{L!iaq35D&p&v5umTK)K zR!;H>3Ax}vNE8N0tCiM+o>Q&fZTE%Oc=muLv@B`BrcU4gg1&|xm7{8Wo+(~yJV}pK zn+UVfUL>F*2>P78j5{rRRp%c;DbO|3K8n@wxAe zW#)9SH^fFDlFLNQ2E^V4^v<~V@o>3Gg0)F_9_cIeIWcP!@KES3lOn-vJ)Vu z!{#wt7iAUw3p-*i6-&^=n|17Pf{P`?gzX1wUn;MbKpysUn0Q%+pH%nLPq~^~ z?sR#j0r3FG=sk7R4GR-ebJtzIe|+^&+4ZcitY4O-5MIBC?^kJ^!p?7P?vcGyp?OR? z2gjRAa+(VXBx9dvfJ9SlP{8JJE?9o5(0Y+w1;?jr}?xEKP`VV|FNfT<4zp8?VX*1=&5$l9_T*#yM~h0TIZ zK1d;O#9W-p@!FB-JDde%wbDie!=y}L>H@LOnT!tzl++=H@rED>%J=ihK5t-A&!!`A zEfUGr6(E+-qy<#?%?DHfJ3u=(C4ftM)sOTiioa*|FHPT&wBx1v3V@!r5y+rDfH1hn zVX;IB3^9~f`rHx)*beaOkeJ~x+Smq32BwEmhfH{!r50EMyq%Rj;j_B^0aE;9_ntQ4 zAfxRB7)%Jt!AK7a1457r<=7ayOgU!U;z*lsNd-ucu|lG8; zqmMqMKuHi3Dl91U>{i7B{4|TH$OEZmxWYu}fz)~*4j6I1u%MsC1J#Eeoj9v<uV|js8j+k zsT}9c+6Rm6dVBXk!DNRk8$UDcBAy|`->x08$wbL9{pmn>jAm1kl`Hj;2bNqa(XWffE zewv3_+&qIGh&S&|$mV(AYu|KB6j-dQPA^H0CS1^%8xxE2ZJ+)>T~j+j8&z(q2>=5A z!`t|e1<5Rd4!eM$266S-0)=m6w=^C(>W&LY-!Fe_!;&huq$d6QPWu7l0HSa2>US%z zzt(NqeY-2Eu5w+^Drs9L(hL@!#~*ZsD_2e{MV?AOpi2Tk@fG6)45$!byJXoqft1=^ zmRPbQRO*K*+Jscaf|n{yXi-GKD^TmH8XxWQ8@V=q=wSPhF;t&6+;7|D(TkY^V%qPT2wI%_Li+qapy%Nbty% z5i3z!va(8b%3=@RK6~b*XOQdd5yQOfiHjG{xn~sg##wOdEqfHSU#9^6kZ%(J4Mp%= z@v-M!*`_V7c;y-;{#UuPs$%fulLtKbi=g?Kz-S#xf*4l+SE<^-%{SjJ;5Q(8*n*SG z%!G`Y?8!lJP=pD3mMu64-+AtW6jA=pkMEN&pqzbADIq>NVF3H@jeClxpyQU z;d2TzmouN_=V!ZgVL>G0u0()sfQ{Jc?ZRywel z&`*e+o<#0Kfy*~+*eq~GmHLpxxamHA&JEjci9dI_XP572zo_#D0aI)iSPcPw7KT8U z1aJY;liV${Q33oy4{%O&t@Hi;n4T@z=tnx*UEvY|8wI4#4keA)`NqZ2->-2u*4ORw z1ft7%9V*!j4~y-0xIjIfrTbDSyR6)O&uOe*>VRFxUd00IYI=2at&GYpDYDN?PZ4g5b;(FzC&v;G+V_YaoBx<%9JCv6$eO z^TB%gD)6^4Ua3f0vt+H`#6S;oWw9Wtqwu#Sx zlo(&kW%#ZbUt!-Q{tDWK-xL8z0yx3qt^UiEtu56eBwMGk2AG6rBQa<>)cm+_@txC0_;0=M-dA0Sg7`>m>u5di{W-LWKEgM? z&_bK|k1%$*cabqJeF3r;)*O!H>kvsw~K77IOBn}#99oX-lKQ}F}wLn{K~Yi%S%c)pBedknjVfXNr%vd37N~cH zh=BmpCy?PjJ+I?pyOyrPypOa>m!cwAe(9L2lDK%@*X9uqtBO04|?gP=iE{0Jo(aj z_U?U;`maj!(M4Y=yUkxS-V1{t{twr zx<=zx$)mzH`CtzO{DwBo(o-PObPSY zR;?}l9^`Gw≫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

Uv0@`$n9XKm%!qp0B5-a!|`g(_C>jrj6 zvF=%M$d^NsJRo}PO$0Xj($|5p5|;cPtwpqjHX);pM+J%!S;5pC#Bc4qS9U`j`9lTt#Da;WmWd6MOoffB8FZ)AABMBLH>Pckf`N`= z*_5qqtzyX?9U1oP8Eu&>v4I_TwpZFk`)DW6BfyDprA79~w#BE0q~eG48^-yAPbCri zd@N(4Pd<<@b5i@@I{`!x2CZ{=7{meeq8sB@G1kQSV4sg|e(ZfD`3Jzdfk@b%@kE<= zHqlG)IRTQ6WuK4do6O28mA?mI7IWxy;)mF_gg*m(faC+l@88z`|WotnV?4ZO^n``&I&01i0>PiOsUk- z-PNwPR=NA{|FP@t>2h1QT;s0Yex3Yi?YfegbEv;S|A+W|w(fb3&WWEd>Z`GBxIO^2 z+#>@6wKkuUuWwY>R~um}_S>tizK`S^r``D6@QXu)u#gfY*l@35LoWA~1n^;-7=ZDVuz#TNPQ9oLnrByPpIi=bCf_gCnZGrh6$LJaVb2)3uKZ)cT=6 zaanQJs-p6I`9HJWAJSBrU6ONU7()-~T3dVi|NoDfM-pLBGp#!lAOy5VZEAuD;T zP8A36%@cEJRi&H>t)m5H6MAkFuOk(zx&<3OzJ3y!$}1YYkKfutoRqnaV;XqYezRBR z%O)jla*QyL*MO(x6-5G@M#;h0k9|D&RTW#T-NZX-H;J&zSEy=Jf;f?#_l~2XBu0yW6t%p=cO0jSXZyG4YyA_RR7tNO2|0ss_xkBa?8>mi^0LN zHSTJZc>a`Uli#%IN^du#M?C%XV@k3YT zUafJ_qu*7>UX1Wrs+7PGn3$m2@pQntt@Ysq21^tIz??|}APKeHSM-pYx|Op3C&Zlp zfV*`0f(QNIAziLQ6&WVPKA(zMbq11itCTPv*4>GdLJA0xShC7E$<9L+rcQxj!^x?p zFF|044V8&d>6$8CW=o))(bjkgVn%kzI4`eU8qvErZ9pG2lz#*1mI_^A_gGOl$?!Y#AowYB|X`6mVC!{>4@1NB=eEfhnT)J z+c9JH@Bni%Jwck|^(pz6WH0>3wM#_$HkByKZ|TU)uj9U_dI!%BwlltkFdIEP(9UKh zIWSLwkEzfaPI5*%61n%X#VTc!Ay%y+)5;5PdI0^W_U5_Y+&eum`F3ESzxUpI-A{k| zQ-2e`{N*pZ|MZ{!lYgJ=&sV?tRrjSYeaUa~>%ac%?)%^WezMIq0S~JbU#DwmXh^yp zKbms*dI9JuuLH||f!Imo$*2|(wt*2L5!3$u{rlZrcLl)7?|tuk?h~K*MC4FhH)VKA zOJ_R5BO9gproX@6_b11s?Kr&_Ww8eqdtk8#GVOsx0D7|e+Vs5JLfoNGr3`mdSzK}B3)8iTX zE3du571l>VFe5!;ATDfh*&$~T*^4;j1Lhz4tV9Y})G?l@oj77Bb#7o}3k0FWrOLF7 z;cmevVh|{Zu%`2B;!6)p@y0+x2C;huBbqW3Q|t^drt{k0RO25l8r^9q)a7)=?97R zf2IbqwGUthAbJ1}&p-c^yL9P-^s6#Cnyz&%EluwH1wi5>o|(SBeyM=;SGr}(R%#zW z@?FuxOue%bbv->8Pb2=@$|{xUtqcN+IWd4lK*=LwP^Ww$01F%pma$AfceI|@GX*d{ z0LRZbp}v5{%>%24`}`|`GM+=fj}jbg%*O6Zl0yK-rsP=Ec}7x(0qS`LU{7F|pmaEJ z&?InqenECxrOO%Huv(Z?lzF7_;t}r%NyMTO+iv?ze_=d_`-^dDfehO&)z^NpMYgu| zM4TqZtc7zH2X(44aO#vBI(N?1?AjCAWmpMOUCLZva_@V|ScrVjS_D(rpn`A!>P<+9 z08F1~E@Ha~m|pjtgc1|xanDXKKt1MmXFgJO&p{2odMdBxA&NI~| z-b|O@a^jR2=^t_37caSnx+?t-0z&DwF)Lq{y~KXqCpNw#_y5doylanJy(=>S{ltjM zaEsxmuwl8Yxa!)pnldsx>KY&Tcb6@_Hyue8JRd&hn3zcW#A-Nv@uDkQxz?2mkQYvh z3~y`iDb+q%S?y}ByT-nn_g9jd0W=z5HWAPgW?-0H39imRU{+!IYy$8~BvwFvVxm_% zsn}fAuAz=DS9tsdS9|+AU0!*OlWOgb9Y5k$D+#%>qS~{tKmPc`uCuE{iCXz8+rCTX z>X*we0U*Co48dD;Jd&@owWgE`*w(Ah09B|A2HP+|{h5Hqa7Rac6k_K_e6oRnjuwpN zJMZTakp55q_UG>B2afX9tOE1%2R`~i_s*Nw&AM%P17RxVV<>lr55Mf%+FJZil&;@= z#TF%=iS1HAmku${zxv8c@=2ArHETAw6Y4X-nAKu6WIGj=)pm^g_<$XPb_D%POKWt! zCEhpC+1V%%dVW&i8FnZBuu+XGg4VFn7sz%r!9D~?PkgmuTPuV4F*zv4c$H<%l-&G0pm*n;3o z1Pp5NsaX$}#s=I+{59B;0BQgqgcC>beF1VdU@8Ozv?tSmcp6R9xCJyDu->sBtf*Br z+~24@3_ya!mNDID68U-7@N1HU|wmq-}k(=I}SVfl9A0X=eZ>fEto zM+NS#(0sd0dk*<|JJEdN4<7o1&xL!4{}>-CiAjLzO?(wnwTV7Mm_uroto83rrwRjQ z{10jVq58?>WT9fIEq)%|ym^bx*CiiPxqIZmgGx}6o+ID+?%nrj{v!@7-18A!&wC37jh zE)vR2d>;u!AFkBOILB|ZP=cS9c>w?q0@$B+nLv6&k_dAY^AZUxu|BT|)1&SwU=_rk z4dxJl_vuP_zG6Hv#_{u-1al|t>P^@#+jhQQ8;=}yz0#F)rs5W(14_12GHRi~>$zI{ z!ZIx10P`9Nsz_JQfIBTve9e14;|f=932*A(=jMy-qAcH?Jk#V3JbBcuTeHONzWGW& z##qt;)+3CakwJmYlniGT-uNEyya(~~;cX~6dcG>hPsIT20_NAblI6^`yBMofDI-n< zBQpURW4fiP1Z&Hp&oI4SPUOo-?Vh4 ze_GWLnl8Jdo9=am(x(uZh_M~=idE?r008L&Lox*H$#|1dIeCd zt(#ik{kPNq0K@}$i=9xrWKATl)82Z{$8iA6g^AvXD-c68e?3RDZ5KjkncmvDeKKGm zF)Ub>5#k-h9K!1s>jGd=VrA$R)irMn8~wnUGp_gLLyGzAR-%32OQp>tO5W>u<}p{X z<9e+JEBPv8$R2{p$t<~!`9Q3NIu2y2;PW6SxkN~M|VoQGP zvHfCqANE9GTen`LDreg?ZnS1i08XxzEh@4;#iKTEyi%WuX$HV`?0Ci+wz94DrrV&8 zr$Z=Z7px)f6FShRmMjgbdgrNPP zI<$?^bo8az1Zj)UTYm-X6A7(t{ww_A==MZf#+eJhkZU)-bxJgPe1*% zO0VpSTta($yPUpJLpbt7%$o}rE{NH4mH)O(*?HXxSj0LOPo6yKzWL2>$^r6>O2)nz z+4k03Z*_b3?scE}%xB^P((O300QwJq_`^~Fj!{voDC!AH*d@sEGpfB3=| zzTn>f{`dR$4?g&y`;$NU6aW4n|M4H?R37kc@l+L2lxf6xsP6y128 zcOZm=P8f+O_!uK7PB`Ne0Vhr2G?ryff-ypHqh6&!(`BTJ4L)IXlquK~2JHgUrF|&& ztjY8t|80GqcA@k5!3@=KW-jf3tq*`P?ZTl1K$ZXl!KyI<<&dOcdTFj*a@tV37$Iwv zKF<@|-h2u{Dv}+-PK*gTin0}y2@Cg*ws1WNU+I~E$@v&+5iAR07*naRB0&pf!AKK_AssjFnyK>(GxJr3p3}d&-&FyjCz7K2#%OC z0qJMU5D&_;O?rkcf-H95GIitx*Po-l;W;M(K<-T{I}A;DN6xu(Do0#Y-_7O0{PiFN*IV4Km3R@!aFFZ zK==S9ObD*y*ubG->;^EIP|7hL^NH;j@71o+%Ga3#AzhF<$0m@=e=84e4!%s;CM@ud zF`BDHE)07N{B+ASc1gd^Rn?0!v9_A@o;c!0RZ_DmWFy&c_KK4N=EXq)UU{8R(gI@F zhm)9jpJyOeFvRK0;bA~bR3!+&Ma;3R1qP^}%N#|*6ihnS9+G!plv_w={A>ZKg$lsL z_U~-%h~0ki^V_2b`t&Tq09T@9lnSx0mZ{wOeCsWFlijXj{N%I_d+vo3?#ww=1QNLY zo;#-lOgqK}{wN3ndA8Frm3SW#uoT(4p+P|ZAQ1nGSmp`F=V|`FYF!in-6*#4mX1JQ zSiMwiYGr{l+!*V*#+72MuTok1L;`r==-DX%kNRiB%BZt3(LRgc&%Fl{&3T9Z*H2u> ztB2jjwbA>W>e&DnXVolmH-GY1r|t5K0H8OPCBT|RVirWGWW##vgE}#wnQ0yL7W#1Z zxfk8>{f`JUH{=?`MqfQujUwGkpn64fYqx7@?{=jk16hCD&2HuPtJ6A6>-|4>d8L|P zuDdDa{U!jj2|PE{(eAn){vRpt$A+1J=ffu$X%pb>*fBSvfHiFNrTQOE6t-=LIyznF z!KdBO=IdRqSV>{oEh{fdE6`-eO63($4|?7=tP zbemhTVyW6L{TAletUUP)#yt?=$tNH6eTrJ?hM(M@?Gz0y3w(GzyrH{hN2KYbF z@lDWWKk^^H<6e2~vVAq{>%AX(ulu$4?U;4D=mzvti9jF%!Zcp=;7@=H73F1On;p^R z7OSGxaV2e^5y{R{wYgJkx>(SZi~)GQun@Ls?9J(Y9X-C7$5bAjWL)O59NBu46X*m= zJa7P#X9p#atlrl*L@dt-r2*21*@}ncW1z1l%+r&vYiV3IdgK(`*Yf#|N8$P zaF0KB+&<3w`mtZS&i(F3?$C2Tvm`p;aQt8do_P)z%9nUqKtBK==1agg81@;CD=DL| z7oc||5cZ8=doyQQ@()!uNdlQo&~<0B&olqEsxQiX;zy!m zz$6~_afG+Cs+#x`X}6J%WE!XrA3NE5fHU|wnCA(Qm#Nwa00a~6BiF|FfVGDO>T4Ic zFCP0mL=l}j*253)^P~`K)~pvH#8ryZs!0^Bxuwy5Cg>a%<$ASO?Unyf9P@qXr z;Y01xT7)l{YJM$ZzJ+NJrt(zDGwgV=uK~cF`5Rv-l^nC(>C>luB}r_TTW{SXhFvN~ ziidD~*gf*dKG!Nh*|Mc8+#Pq^t+}LI^H$&^nR)C&^>w+9cha3de^&EhujbPlw_L;- z%a^ZG+XV&^$jbmeVX%p3pO=4gHP+#uG9TFfslIkyZgfpYj=7vp#Z#2b zH!0B9$Pmeas+^&u@~{vqz~-(|AMqQpkk^#>p1(~jx;OlCc+<%H(&|Fj-87j8`#NvKAAIGKzgNVb>f{TktBUqXxW7kx+=Xoc|!-#wq{e-jiV)XY!evIfAbALD7(&G9R zcOLKUamC(l+nmusM}_loWh+zxJm2+;)wx>H^VDB1&JyE zP3syo4@$4$8hO^xchJ9J^R*Z=x-D@UfU~UquQwaLucY_LepfCcfZ~;FB3+11+y3+; zF0W1%jjz5Y@_nXnV2q!fEEWdtS$FzOP)Q0)FkiaG`t=*#HP>9PPr(|Ml{My`c;XRH z09K^xc-VrFw%&Hzok~DQZ^{*zx!nWoNzlIf>g(K=E!#BDVpj*?c|i0Q>p_2O);x?Y z$vn(@l&%<)I!wuyP}tLbS^8(4Co5aFY=y3`TmOUjaH_{QOam2hsEmW)_b@*_x+voV zy9=F$Bnxcm*`!gicdF4u)*|g-EaVUk#!Gl4ri^YnIXN-KIkr zj8s6>)`whMJT`i4b@V2liRR1bX1ZS)>Sji?Xk&n955Fi$e#@o9rz+eF*ynqdyxG$| z>}>+8*3{K`**~|50Mzssb{V>r#hy7Y_85I;SOU98^P!X4I&X1c&Vdeszk_O|nTp*z zOYG)2raxp_A;69~9~A<8d&~wFQDHcd)vlRmi9}m482B&%(WgRmie2ujp~#0@->}i! z`ca^Np2r^9IZ}OPOmNIBVaG_E;h8WzK|09;vFGc2;t7$YXpPx&ZR98Xb8U}4;7YFA z;)<2zla646Ubr9(joMkScB-L%JqyS2V}bOHHGD(K80ihK5PmK!c|Mb>xmIERO$(rp z2cG9f?D%}ZkP>@S-bw)azx>O;bf5d&=lmu7!5{pA`^GoE5qmiaKLa{qk|h%^mYMyZ z{^_6GM?d<}g!}TtEw|j_*luM^hMz5kt@>(_f{%hgw3?G7C}6!+MVJ@%Lfsq^D^ zzVjXTsZV{%Z})>A{J;S+x9|V(5C3om2;KjvKTqgE{Q1v+?!NMsuh>^JUcdLf=`8d6 z_eUA%@44q5_rL=W%-ARV#gBgUBggfHC0q%BehmxP^65{1I{a1K_W#5$=CSPa1D7wTq_+UytD|5;lz$w{82rp%05}PtEEMAvKxG`=1S=32 zbzs&BD>$C*T>&SI2m*#MspIgTPZ_#&$#p;XtgF54ZkJmeb(Ho11ws10s{Gqf<0Ut` z<$5WI1XAKK|H!}%GfSa((Z+B|Rg~CRrbPqkvOU1lOeHphl|U0f`sv9CJwBNKdL$zd zGzWN%(h6G$!8v0Kv68|ltxcDY={^=Jqdw?wf_nq~0^lvy|#r80f6O8HCe;gj@KOUs6c4Z2fFy};ANr!nnH#chrn-@+& zw&!_5VCyOtD}ABB#9?8~0i-v;KS4-<^zo`E7~tCO8ON~_a`70p!ski$K0CWoKm(Q5 zQnet!?F9A!ZUESLK}_Li&WHs^)qb{%(V?!cUOHZnJAV8%*VKI3ZB$v%8*bPoBM3H- zV9wxNWZ08wKQN%ufz6gAkn3t|1JGrzj+aa$xYSi0g$e>^KUzG_X4 zcNT=to$P(fkALJUx8LXr1V}V#f9ilMT(!a#Z`fd8&H8E%tYzve?h(#!<{Q`+aFX#K zM_fE%ZVKN&+lIh3&s%}OT{r+S)Kitn_?)_TRw^#j{+{i;sRW~5k04CEcBay{c>67W z_txnF!1HG=!|(tAJ;&9{@m`Z5=rq|?7fm*~lJQH^Hre;kORlSXz^z@q#O>T6r&~xm z+y*z18wIP3D^T<5$tJ%ArQ|oS4wwZ8hDO|p^KJfn!2fHOMS(XbF9;B-wFJ3x-4d5S z#i()ml7LIne~?Y9Yh6)6V$c$0TAlxP@cK|=nt~^XVxA_G~e|!x41|C>f3I^ zntHJrr(P|E6L$9wx>M(x-L0Sgq^n-JBGQKLzHT?D3S1@x>Z;3A51iP3Z{}C4h=U$Q zQXhitNs?$LNqznRZ{j}$b&o!Dz@2#bQH_&A0qK=AuB4z$WK02!W+mdZwspI*hI+T| z)?Fz9>DwQAQ0h#MtG@B}X`so3ZIJHTd-65c^2*C@pn9#V%^h@Os?3zC%oRKzKF^RC z4FS?m2wYXADsg$0QTAQ78_um4`J2G0O1#Hs5F|Zj$uYEO<6ew9hO9Sh9TU9=lOakF{&P1AQfr8@z=+9ob=pI)y z2$F*nwISa3JnMi_E!iN}&vUW4(|zRgf2DHrfCy5PcfWg=`#(PVj?^~RR{dws%C{q% zxPGO8^a2CQCY&7YbAwGys&KH;z5Mcv0ur_hS`$cFd4=1&d8=o>?Gwv#p+I)U#fj}m z7;AHL@k1<;&EjM;4#*!M0BBW>?)9Yljrlw|ke+~FA3l&Ne^`-75dhL#JOx{@zn?0G z0r?I4jSJKSh`vBz z`dAs)x;1d|oP$9$PeJdTDTd(K?f5(~k)`9qTuG(4Ao+}QcJ&-~-~IcC-D^i0G2r>RL7o2@E74XT&Q`9b6C*dDjEWMpmH4KC1n-d%V6~5v%sgxyoC@H$G?`0 zaKT7345Yw%hmS8$ppSU$^Zvm4V~m?&JpdmSK9+EQ+4kmZpuaL<f~xh6T`Li46i^Po>DS9(N~C9rL@uiVKq|;HwStX%$NkAVDXXBf>{b{2m`A z43ONbf&zgl1PF}hlQ3V(T>Z>5Tf$h$(S52C*!{da^4cq|MAvll&Aa7e?9-U4a7T~6 z>_KOM$Ziw+d{t$Y#>6@Q%vI^xn-0o_prFc~I(1rpz-LrlD`0PB&cna9Tp%yNW|ftt z?((Jc8aJae*ymxzq}mIjZt;Fx;tTWzExVra!KJKo?6|$wZCO`D( zVb|8)<8HoTlUuX0&NI#D3DDQo)9>~@{Ib`{-gVct@;T(X^Orh3K)+Z%JCEEuh zq5QNb=m;mI*gRWPD?$>*G2SS#HOs1<(hh5z*@=rj!SwDLjyodX&Gk)|s z@H}k#8@g^LxQ8gKx5jMkYTph0y&XDNqgzs6@AWi*^Xc04fIcrP&YzPrRTV_n3oy5% z?Se2P4bx)e=GWuov$4^e9TDyWi+5Fta1WN~c!KWO-Q6$!uu|7DB%3+#txZgzR}ZMI z9X^4+u3^2N`$F|MiKQo{D2@y0E(Z1#5)+cK(Oa9Wt+951{XW~P#oeb9Enf6?B9+3? zy;7C2G043D!uR{+$h!LVepkbu%$7L7J#Ljf3-Lg>J@g&(0z?Sl6A%OBXG)@Gn2Rvp zz^dIhEUl2PoY?o`8<60SB|gn3tGy*-pubyHG#lfYFy$M7I+o2Jaz+wuv5igeBNDsE zze%5vXq(I~H~lFd(4U0rFiy$NG21JCBJ5(b_1WGM5;8sJplry#LkCqkQ!MksNtpD= zhQyatE#m5Q#jZWJogT+kTI&iz_?T3I^!Ry6G7DFDgA4(kG}C9^;`?t(0R4{j+3vfa z4kpv^4fyW9G55Fo0)-&_J@4O20Q%qht>1Fr{`R;1CBy@D$6i}1pa1n=|8*Ke`%O39 zs{_W?|F|vU}X+g`goxC z-}}Aa6X@y&Ii&~O_rL#r53aZUQG7`rK*9ie`<-k1$VWaR$IaCOcAarQ{NWEHO#Ezf zKnfg;^d^Y_^s!X}Xfw$NFxtbO|E+I*%Nc0kc+R2J+RmVi#?E155xn| zCt{z6S$$A}ldNUyeQ<}2c@vb0UI7NJ)Ts}k$g!Lb=+BOo$}5Hmj&1eNnc$YH#(&wPO(2}IGpS(6deMwD-y-wTn9U_jk) z=`TuUjVQ2crK9O&0(UNJ+^t*{1(#XpN5S;N-Z{bd@yftsuoDmkXpCT-6X?rQhVESC z!ubxl`-1FRj>CP$XfYwU$MeGfaH0agWAp&vp!7O|kyEBbfpi14lqen>n{*9RAY}q3 zIH{63w0VAT@&zm#;)s%iuvpa-U%D+?PV60#8*{wLtE5-jP&RR_+rbPbtWF?AQ^tJ? z+tup+7P{fl9@pM8?i#9c{F%tIr_F%p0nsB%mkI1#kgfZZ8`1In4{`pG@G&_-dAHzN zJ1EU55c}%2(?L20q{k@70c+xc@c^qmI6i9Z+V8x2V7$gD4E2EH)m(2FdqB3Ft;XsR z-iP;$akj^y#C&KDn*4$s&3^@QR1stg`XP4T@aOYq+kK!8_7tQ|<;KTG2OS{wbmi>n zHjV43^8j{)EJc}cL}en3wH!HPtZf+MI2&Q1O;upL>3;etSAWkhMRu7GaG~YlpSzkp zce>n)=v*DyAi*1->?9zOm5*fpVvfPdM)p0zI^~ln6ujm&90ZLVRyR2crtkCBR3g9W z4Ni6L<7}XM<^q`BYWY;lUJCp6Z_}iPa2g2ZaT3Dtz zZtb#~uqrrj4KJHG;|eCCpgq=*AN>21{`l8jv({}`ziisMI&!ZT4^Y&R+uJ|nPG1W4 zudXN-b9|sfw|4fq%dJ6j-?F;$2z#BTeE0J4%l?=!=Uurrn&@MU^^~gLvOWNlO*?t$ z!@0%|*Cm!kWW!3W?_$zhl!fboWb@ri|N6gN&+%h!{p$L(8vtwKvg@yRTi(5Q+P)n< z(jR3Tm=JufuSx&-w*Q;)wYf=*#_uq`ymaI+vVoE=@|A4#r zqRNho)pDsA>0=o-lkFe=&4BbR0@9Z+t#|8hz1gj}c3XIp$oqB?b4*H4uDN+n{DjZQ zmcg4rF?II|JU=Pm^{arprzrCYp0`sDoIUIM4<8PKEVUDYipK5`QkC|y#9sT%GXiyA#DfvB*w@u9^+4IY zJnV+(obFGQ;18q-y<(#$aGfnX13v@)4-@VsK>AVHZ@4-jBA6>HFypsh;Qdnh3ks(K zwjHwfJrj9x6d=UdE$C4)gaV!gv#`+vq|dHM%tk*rSg32rbLAQb1dq|be*VOZ?x+9$ zL)YFOfLiUElf8cGW4qj+eCkfW3BhQB@dS7gfTxVJaFRQ|M0`4s9Y7KSXm&p41!K^I z?F_#VewJ1-l$u~CmX_6dd(pld8BtpWq>qAl3k4FHKQahA4*+oN+Ass7CDF4DfFMBr z(~^I*CIg%`w){jOf55<*vd-2f1z11hop zNcRDS9ehzkgM;#i6!>+gN8kspdDqRmwf2n(sM{#LFR+cmfcKy(Wx0Fk zq5C~q#u8OZxkA-Hx>OD1)T!h0>-EW3SnsQ-(ARPadLSRyZ3Gpt&&Pt_@z-$Q045=f zDdvN)zl|})e83vb{O0}0>ZgSg5~VtI-|*EU0XPX;Fz{PbWdRVq#S#E~FsD#?hc@E7 zn+wyUKWUsl#5Q1~H~%sHWQ?V3PTYVwgY^)Zi!az8VCv6v|NWoc$mNS(zqBOs@bBUG zLrPBP`LZfbtsTAY!sT|iD|fYR_eC8{W*Hx7A-% zLP}Rg0K0|0E~;&`iJ3JFezQ1)f&UhLfa%?ZWWJ2_j+EZk1F|XlUOOVdbGgXeu6B7D z5(4y{KIZxrBbrq8s7VpyXaP;HAyZoy<)|u*s=BUOm%2^MuEstaPH0NjfVP&?nzIMf zuBMypm<#b+M>~4NpkEtp&Non~5uFj2?QB>4N+3dXp9--h+d7KA*4-&Kdg&Xiq17bb z%rntl__}*uKIBGQ+g969K!ci$;nFZGyD_}Gcwqw8R=wN?xY6ZVi^MZmIVz1yX>jjEyytNMU+mdeUncktlz?(kufwQ`hf zc!yi1F^o+;BE69~53$5_fzFBA%lE`Ku_uky8{Goz0fbJO#_KpPq*ug2Ym`WWK8zTM zmiOqQfUAuR5nIUE=)sY|Mjs3O#V>$8z}T`_pn<)U>pNLGPqlm&2c@HoEAjm*=`r$= zOLye`_&9wlV84>IOGMI$bhZbe^h}Zvt#W3dD=v+&`g2^1)AK%FH7dSOB*yF=j=S6S zr<(wajWI4I8Sp%Q1oN}hgH17iy#^gDAhxDzkxcWhw%7zpEx#Nk-mCz?DHjn(%F*99RQb|C-L704Z0 z2ab(+ ze@vP{`uVN~Mht{lNU^YFZy10cko*g$0$@YXHPOF-=lMM>$-wh$_f`VX@7c3QW%3^J zmj|mmVDGsItTO<+PoEAPe_#CK7d?}En4umA`}^Maz6j_W)_d6RO;}ivg#^%l?Q36i zU--fo?35m4wPVK)G0D6f`R=*ro>La!^^wmo&urVaO^l`j?@3ObI_1`_Tj$@$0_b<{ z-0AMS?>;$gq6#+q!y^B8fA@EOA3*SrKmNFX&!0p9`Y(U^%kIzq?9cpm0R2Dqv5!Ue z;Z1jUx14C3R8FTwN@tlC{w__1)5q+z9Tq<<_P}BfEcQT555xlK6SB|C$m~1yn#;Rs zw>O$mk_lkVU`ZOAS?Y8lS(0$v;_L>TO27*cy%{`QDgibEIw*m>_YC<8R1_s)28-#U z86Qb77;bEIwKv~6?YFLj&$>ymeOK9I;}BrKA@0wseNP~W8}j|&wULG3NHx~1Q0PKxTo_GR53QGFauZkyy5o* z2fwu!@n%u>h@OMBv!Z6r4cdl?>akvE3{t zEz0F$aB(jwbBuqu_OO6cE6>d}%63R+#M?mIlGiy!_6V=L9ZiT#>1aaKGs$%EKlSoEbLZuYM>2AFm|<#+Km^qS7Q1LQiI^rQ{YbwNd=ERMFJCyEcH8=1 zebtS1D=Fi;nJ@9&h=egpl@xv}hY&9mG0`Wbt|B(NZ(`qw70 z*)=Pmgsg0+6iayEkUT3U-EQeD$i`K*uDCE*gZjmsck)8u^sJH|u&N;d3MXT%_Xmmj zbNEz~XX46{uCsN+(wJWtKhAd#B%1Gfnw!Nw{~fn+tys*&h?tHvs)9h*=!CoLbDwe9 zQ&k9T|F*6+-QTE=!}kp}4fgX}{xu#`Z&!y(3QMm^mu2a#+8J$U&bj0JA8~D`&Weq` z(k;{fOeGAYuUOjP*4?(tt+*x%r0;m_F*hMlTg|TB8f%GdEzUox>IeNNUUNgO&93Ci zt6W=mpL_L(KXF%WS|OnS?1`Ejqir}xpuuLh_8s@SWgAv`W*)vzMF8UwsD?!h=CFuF zf-LJ4WZ4k;dbGPkL6%3|#J1a9aqUVU*opk8H|Wa*HL(#9d$SFc(t2KqZymie@T-c)_ckze~^RXAwz%=H{<>(*-& zTewzs4hdsXKsCRmEBJXx_Q!@sZ^nm$zK#6RU;V)S^N$`&`H-ts`Qv~8l@Ge>ubA%R z2p^#L*l~hWu5|6D@Yk;E)fZjq=4;*HWUf1P`nUp%owDbPebBw4qDFJDZX*A*@1Vxd z&|pstkRI@8zJ3=wqrjs8=UZEvJo~(M^Rim({_EDQm)(k zY}EV^JJ&EihJh~q4x6U@3#x393CRV=he4l&`wB6hAp;tx96L9ELiZ@JGyM-!f3k*0 zU3N=*z(&7PAPOb7$4Z!uK1U3Sxl780ISJw#V`DiwKBOD~Z33UhKmO!V_tXFH-(nAw z^z)y8;oa`z_imrDO+YBo?`?E!a(rOeza}uG1DeH`h%g`EGfE{H-Hs7{#n%E+M#RR} zkH(-^R^ID@H$zGoK;naV#rCgCn_)5t+7lZT_Xo(}kAXgnT@+gsKL;Rmd{U9*AB}-h zJ&y#)O|VyC%V+!}u}s~@8fi>#$=K&{lgJh3B^lcy^Cw|M^D_i{ME^qWf)5cN2);`I z1exBu=uwlu!#6;%8-Gf;GGur!)*5_~Jd;(`@&i@W2|WLxK)DxOS!tQuz55;B#|4Y& z(PM`NPHB{HE7voX0vKPuyg_qCXZVn_zGoh7Z3&nn6Sd2ab+wDR41alLWpd`iSx*|X zL9lKsF-dHug0{O?UOA-yFKP`e(lzhZ{aK=CAea?dlPw7XAQ$(pOaQcriBfm}{XcOX zoox;P8UQoK|7BI5dFrW01w!k0+ppcJHEgpRpUBtv$o3#}z))c@eoWK+$JoRg)*FE9 zuxOe9?C&E9LTfYrTGr-;WZ%ZO-6eK;fMbATNPZ}qS_f&9^%H(u{I>|;d3=YNRF3oq zNZ}8@E!u^zi}ks@yguRwW_RYO-kxR;47K~0sSb1I>F3?6Kfcdx-Mrj0zjORVAo|hK zF(np{xjI!f;r#x|b-0j@HP7L+^8fPPJmDoAYD>?q)t7qK~CDSjLtv=K@>PA&5_3b3f za*yeLj>ZMp0kGu$z7fLn3ZOJw$&RoFqmu$u1EfjiT9{6m8{Uk5Kd&zikGKMn05MMA zERx8N@p`pyLJ8b`hhKGrN`x+`YjEXPUF~uT(+BaPSN5Ge<_0gGb(8h7byh9M*h>F0 zlt|p5q^xws0FPAC%9qbSEa=ddz{Yw4Q}b+VQ+WS3;yv~l*F@|B5GTSM4=6SsDAe>l zwwsNOzD7Xl`Kk=g`4FlabieSttGV&EX_e?kd%IlwlaIKvYqz`NHEY;(UWFv%cG*c~ z<;3?Ir0WEL>9Ns%RYO|pnCcCQE8eJjQBJjc_L--Z{C~{r-Pr9^ z*V}phE?2*#UNPl%#dlZvwptPvI!mTitc)lyp1w_jdymNOhNS1xW|B$b#bteCLVu#n z-cdgm2<=5>6rG73-4+4|MoQhaAq)ZZV*x&Av zPmq@47+A>svH-H<^8r96eCSW@&2zuGH`m1j#oKS;?c;41{+;)4B>?@(l`B1qIqhz1 zYjZU<(Fct0(v|Oj|NHI}pZJ8|4G=l(>G8naVODiO-+;f3g?^y{^tau1o19XQ&bYL% ze)X&FOJDku|Ne8I`<(mcH@`V!n?L>2KlKR#{P4sRPsmAgv)?8bKz~l9N>{B47ToYb z2s~`wyg8C!Ks#s;k_bQ#OZ{UCVj-h4BErcC{!9J2>#n;z3qGIw`}+lmO5d=sV=cZe z_P}Bf{NnXMEPy^4`+SiM%#w{8<+Pp@AUptt(_`^il7awAxYVgwk`&xoDCZE04IuTg zv4HKJ;FkqhX(I*|fiKIz^bGlGPi#gr+a{ASB`&o;yx&!B7t8#TC=h8#<<$Vt*W7it z%hlQzE3thRFCa$1-WZA4f2Jb0uqFMb1*zqnCs+_>mjXObP|N~|FmS<|G#4f=GqTJ8 zj_tSbX99QuFf}!0o-AU<7_c~g8Kdb2Ku~B$1;&Q?9X$qc zIYy_I3-u@0AHdVSy((8O;|8HB0YMIu2Q2HJ@9AgS1>-voV1$4lY>0^*7?#~%zigAg zKFdOnbvXEg&GLt52{1kVhhV5N4#J=gz8~~$RGB+DClP)pYaO9a30C3=D3_6(i2#Zr zKz8831MafeEn!uytE-nWmoG3yhd>7;r38WcYys*CKq72MU~$Ke8|72#o(j-KTYx@B zz_z0U)}{cATwA9gu*xEG9KiX>#8?l^$TmQDy3PQCs(k`Y!UhIw8UT9CAshkBsm4wp zX2P>}k;s4%Ou&p++TdC3J(wP*hUrdP+mCHM2w!szV;;fTz_{W+tb}~FKy^*s8h#%s5x~r}bRW+VvAckY5vwgC5rSsct*O1P!7Pnpa9(cXM^I77OuNix3+J&7t z+w7iu@udIm{qMa|&hOmF@4aIsZn*G@$Y@qzkrBbezTSQ|p0bb62M9^8i1N zoVet!`|y8A$Qa(#-ZZU&ZzljfPIv$;^-DKNN6YnqAb>%cG8j$ksJGaM3kP2okp6(! zc6vOJ9&k^lg1y`<=4Ke_E0zgJf9oz+(%0k02{Z`;C?dcJ$Xdze#c#bDsPqw zJU^+#j{V>KFRoVhN_}kp(y&cVNV7S`{{|LgP&&|$~9RxxfFE`1L zE#_e*Ee4FdO5{I!RDpBpnYZ3G?ev{5KJDOm8(12E>aoMHZ;JKb{Lt)xUWqLSz!4$o z6k7&8KfIm)agKigTB0XgfCk?MK}-WyaCq7QGq7j)E>!;r&^Q+&fF9V_dIwzfj$M(~ zPsk=1(pbn{vC)I&&zw1>b!o%{>DdTY^?Z$qn{K*ACFa))&^#nNCEGLpKL5OeS9&%9 zF`hejTHyKX1g^%03qZ7ylg!}_b_sqS`U`u2m9UEzVpMBkIcCGz(+smerfk~ zfIJ5n?d)_t8aowNUhQ%PjyIvg!bn%UtGM=h-G2gXN}Lw>y`TUPd6jJYZms`RF^lel zz7LRoc(_+%xlI2{^+T{ow_doviC+^2TelXQ0 z%Xd)b{+}=XlDlpDnxy;SpCMTT`y5{p&!K@)*%7-L{{}u91U9#HeVar*VRx7HEvCm! zem*guO+g_6*M5KOab54wK#^?xU>?R7LwjJcGhsj4GaqCScFcI}^Pa&@{=cx@j(@GI zbI|)O@Hqr5>(TL#-vFN`0ABnG5LE!aPsBbSKDM>RUi${eU3*iPzb95%&H79xu8tr0 zqVZWE_!;Pva)J8|yn!E>_83Ecz#LxUA1%MrJpTcxj_wj>$OIfUE@BJ%Dzc7fKmb@T zuP9UH#EXidD#1(NQBCo>?K^dC__-#vCOK8MJ}E-4qw4bsw`b2@tz9{?@kzExU2Obi zWksuIGM@1*gaH>pe^F5&SOf7P0A8P8kZg{0x+>Svu1Y({4huL`?5m!1w70s#Vn9$) z{~_%dQj$(laf!FJ%E|?TdiKdkve&hmo40J)=0PO;_Wjs(%1;QJ{Y^KC*;Q3Pxb9@^ z^YMBRPzB@M{I-B0AnFPG<?7z&Ho6 zQCO5Of{@hovGD%szDIungh#x?&j$kVJ2+KxFt1ZuCckxJ@VvhKKXg?o^3jZ#*_5tdaY4__3wM|C4n8s-Mj9()>X+? z@9WeWzMu$~xR4Z?e$dVt}-S1AeP8nqxCfm##*pOBsj1!eb&?}Ij<;1YtxJh}vhhpwoKitCZp`#B=ttU`-Q>#U&aGY<=+%)eQhSptJEvCc;OPi}bBjgV zeqj0c?m(LQIE*Df9-`Re-yR617NBB`K5jG$|Xs^h7}P znI>4p_Rp9qS9czG#FebS(v>L5E-WO{=T?@b74He}pX_}&p$Fz^bWn>`)h%hzIx*oM zc;Kg6!^cJ1dXrC79~seNA)PEwM0`}9CXupDdJy(bWo5PWnqj?G`RZ;J5gnjmX+S!| zvq4n@bQEu5Hu>79~>lku6cwUq`YeOQNYjilk^t^dYT4+9nAx zA&>wO7jc2b<{V~sC+8gh-|yAj?&_ZIp6;F*U?I;vXQsNVt6sf&_3FKM@BQv~-NA#e z>ra^pq|+f}F}mrd+gwqhNa2(@mdtbL+#PM_rS}a-g0TF-8T>P5?{L5gYeq6kg)tU9 zKb|9!$bT5Vr1>4g%-)tEEK@%%%=5gLtt|rZ&tpad0>oJpV$TXQ(Z@f}8olquvT3Cw z1O1~u_%}?tNZ%kpI#ZB;_~r|<>+ii!Ao{4z5jh~m2g5sr14jsC zBcN@m0*A~FO?zevq{k+Ty@G%S8~4Ck5RjCqMCz$$L|xx-2Ksn_d>9-b{~I?4OZ|sG zA2>Wy-RxTlK)+$bh6tGZ%$YN8t$>kpkzf0@Uvr=R>}P!u-}%mW+=CB3n6$XJzy0lE z40zc8eppPt+qP}~c`?r7V{{6q7sWgB2%U^aM`p}1b9scnj|Iz*I&;IO; zx^r*bBa#e2|DN}}$9?_lU!QTV?fCrXKkq*J(U1DCpZUyZ+;9BGZ}`v20Q7+70f*5p z0LH??Z{PaXx7>T*``*azMF4%IDHcC0w!mTwq}c*t0DW@y`7@3*cuVeodyKIGCkuvU zbNaH7N0A8|a#=9I(1H;Q0nm%H$;SIMtC{v;EHGeG$9T%Zk@Ux5W+b8t0fDnHMlxlQ z>Q-rQ z<4WX2A>aV9sP)-c=fqrxt8pfUvm_`e<2s?7Yiy@nTA> z0igNa95jt$e$SCHC|-DP`URxN2|^nqD46txc#t{(Y5Ji5xgV*(kmk zw8Ba%U}xSv*ypniS|QSzzCeZogu0>Zhx-EiagGl3cj)?J)z`Dc=?42eb%g~WTgk~0 z08z}8$BrEiQZkE83aOLhebuTpVxO-Q2)-2R*=pW3H8QwSC79)dk1j zq<8S*)WL~6uJsd+vz+Tl@o0TJ$cNsvJ8T_u*W9UB5his8{QckFDNKdwUT8S7U?2@R3~?!%1r8&}uK@frnG#avKd!XW&W za`e|%M-8d*$1Z-KdkZ8R@8-fjfBJl@%de?*w|wN6l2)*@SE*;G11>oTplfZGY0r~h zq)4Jr5?|k2#+V`T{`~F{WqZiM(;g*YOotNk! z52SDJb*;*fQP;54?RozPTz(3sKb#f)Cy%%s0X@o;eYAM_a$oGh@BF|u@89pXZiqTI z5?#;s4d<7;W%vAoE2@atyw30;A~^#YBxS~*|k6N z12Govb|otWl9-m^Rt386SD^bn_qrSb^@6Nh(!;dgWt|LjD}mNw;5uM0bY1jv98Lfn zYUFS#7X$Tt3(jVAZv*S0d*jS9odiHO08lc*A+xnlvie2X=dTz0e4Q8>r={=2VK*vW zs{Zx|q$3sktX>x`oE6zki`Js!YM(OS#_I%NQS624h5k1nB9|X{9V|#gzt^`X>&?jt z>?}f>&!eEb^$2hTa2GMw{vW+`(*4Ij`I-myr+c~k-}Qj|(7X4<9Nu&Akbv_gK0UPk zFrhVg_v`yz`Nj>dD3ThwNPR|qK=m2GA=#@8UpfI@tE8kd21pOMcWP=}?Ri$gzn3(2 z4NKoEbIX?t#3Oy~+&RD}<8Gta{#Q!(2mrBDYG1&kMbgn=l^>TQ58IjC?o-@*>UQ;Z z2I-gBKaf({QA$HB;gko6o^cd`jlMh$n+HzB4gnp=KnZ{z;r@rjHeOJqAV8n_&F@b7 zZ%UbUa$41gheup#5;l5H9_bVbhZwgf)Ls)+^{#luCT|P+?Em;*?%8KvN?LyW57+H( zbf5d3e!bexGlCjNWa4u<|^!5VfPIx}MxIydj9**5L>R9kZ_ThKMfVmCsEtF9G` zZd@C}zCS!ztamLKbFjl;#|rC&0LB5*8yhy@a6lN@NGkUE_$+4FRk$C(EC_ZC#;tJ1 zN9xA7g)WN?hI7(kpAXmF0BFXD&u@?ojHyiCA>Iok9YG%^h@G(;a*7H82pHE*{Ii3J zPtVYg=K}K17hub-!4~#;>}O^x^0qNCL=w~vI0z7`0cgMjjw{RD<)Q8? zR;==4?y_afvAoN<9@yKe;GK2r*G-SH8jLd#TT_MmA2vGxaQOuSar%q`(RU@D5GM#c zm_IvyP7ZcAY+FSFiH-VpAjk*-&<|@Zc6WprWrC6jJmUG%m&kt7EE1an+0k#f;byg2 zqilvpHLjkOt#Gvf`PXZ0Jf-)iUjy-&Y%7Hk8wg`*z=H3KPx=r04DCinMc#L8zVvf_ ziJapzwdx%txB*}|K>B2)Cy|q~{J>fOI~evz1Ykel7i%Z>K^Vk)M}NcS!+5X|{hVu= z#E%E`Z=Ro##LzaZ?~Kd{a2`N{YBX}%LRC@5=j5aeMjAei|y{lYc{ye8=Q-uDZ^ZESH@=H2$Vrx8dfC-lsh-K=Kr9^bO0>JvHXI5@i&xDv!>S zF+V2wf__IfYSxxvzo+?qSc|Nj&Xkbg^ebYQ1*(MCVFt9E9k?uzv(}2HyUk>y?-hVp zHd5)?j470tt^d**tLy2fMFgOXLvcR)-lGTHsQia@citI9U)l-tv`y4bmJMdL0yjoR za=hM5Mz>Wf8$Bq#yu4g~xx{`BIP9L2V7pIk2Ro z3s5e00u$B_=pNuBJR7}On=PX`$FRO)TsH{=(v6ra-MJ_yr(DGpyQ4=ByH{R$!GqZ; zx4wR$k&Lp zJ@u$7Ub99SBDX~LrSkzh*+um!Fjz|)Hu+Nw(*d>#KYqMq0;DH!$g+gB%MVXbe>Q%L zNo9R(y3ncqsCw$1N8V5X{dF61-QWJoOrtj-dIVPbcuB-yAAbzr-%0@b`|i6>k#CRs z+koZ#w%cw?bW3UP3zv8P{CP3ctWJ9FZ~yjhyFdQpKlZ;r^w2{Nz&v6Of`tOmhp*)? zIQ{P{U-^pr;0HhGztJZ5+;dO(XaD(c{^q3MIQ9SlKmbWZK~!(tum0+<`p?M#^q>Cp zr`;z$@rfDd+K%U+e_oMoH~Fvs;XnKb_t$^@*Zy-d0KJ_zC{WnTFTd;A9W#Rvp8}Z_2WT9Q8uESV&fz_`2gPFm@@7rWF-SBg`HgOEf(W zyG+_Jd<|o!Ht;YCd$UqRCz2Jbclg~nOqwqq%W44*Ae?)G2?4MKAbQ$8BI+xB>Jun+ zUa?g~FMT2v%bzJomY!-vfaH$$bKX%w6!>gHG&QXBIAstN7@vMu?@(A{L*WL%0a%#N z2#yexn|>MOFgO^X*Z{Nqo^850e}UUDn{XY~H5lNNTkb0Z+Qb>enI#t;6lvBNl<82|dRE z96-PVfN-2N0Op5>G1LTs0o64!u2mOEF%c_48muPf$X&j2o9{;vaJhm7G6g2XxPVe@ zMi65lAiWo849`?90E7Xn)hWE;72_*R5#eB^MD0v!Hyr#(kqkA(#T7GxH29783NZbM z!1QeC|KW@R82-lO+=Uqh2Y4oO_H?^95@B#fFrMX1r`pS;96Q$9e}%yPyd##rE)zih zpt3~`9#c@*+wQeu-IxG~9nbyPEqUM_E?2CQ>58QjjMfLEM7vKVNDxUTV&e(H2E1F= zwF}@E#MEv*KB1r$5bYcnAyq-*D;fF!{=rC zIg>hNTK3}cnYX~30iLIp#Z#@WeBwe(g&%+Npyr$&w|ZrryLnG+@MKrcIya#-u_hy8 zs5{-%A>iSpD;H3HogAe|SMQ)ZFJ?_-nVj+s`ZGCrQs6OJ@e8#6+rGZRc6)~_jP=+} zc5Mp4tC1h$KAh4uX)|Q=8U;fNRIn%u(*mi+q-@#eOIEFOJ(C44zx|RcU!tr~BAqB& znixRR+6B8~5R}OpX<1!%j^TxAoy^7`f76C1V&r9_A;ISrGr%X{BZoNN77X!!#@QY`S@T_5^k6(M{=2j?(cF;4qjp>{l zZ@krQ-n7B>ye4M35(O3s=sh(WWbmMzj_00mh0DaSq~O}Hc>P9t6iy$6AYp)C@d3@~ zU^sAbuHmRfC(m?^7rt(?&)5afkFgW5?!$gzKugXEhyb!@!A{6NFNb#96AC)G?s`|e za;4@LnD$HbS0EiV&8^L&aj%@c=%n3h7XlJ; z=d`v=);>WSh_zq(yy>Obotiqv-EaQ+Ke-bpFQz&*=C^zAy}^C>7a#QdhLsg}=*(I5 z>)irfMCZwY^QYZ}^v=p1(m7@b`p}e|x>HI4KdL?}P>%Ls|MEb31)`vHUTiuiQ0FlP z&*h7KYK0F1hrRyr;RAABx2TWT2#DXR}M2#tq~P1vw90nJ+d!ur2~5mN<)<5Z@tjAhjW zXEknxnYtmWpl-0TnWNrx+*D-~P=uZxCW){*vD^V~7-ph0(h=;sjHTQYHq6SZhL|xO zatf|bFo|d4%a9Q}@?a8tFmeQd`&BhTK$)>MhwFud9l&~ZO_e*O`FsDXFL}_^&Yf3_ z=@(P|$hLxwJFv?os6x_R5SN76=gsbftrI5FDd`;8 zmjG&n`#Sbb=4HkV05w&ble5h*nW%CE#MymO4*($8MuQ*-&D#~4lM8b+=e(@`(CpT) z->9tL>opH_xTl|aLgSo(^-AAyt>A+o^!@=}H;K>G3aAYreI`unR#rM&>d`KyPqyK{X6Itd10=&A zb$g?L^wfvBg7*(w7Qt5Gb_#+rTD`rIbsg)wQ~^IHpL)(6d*m^ zvDEj8trqtAn)^QFO4na!O_OvB6Ma!xzTPe8jw z*v&^1*xV2XB%9yNKy_EL4eycym)kl68-2azpOs6}2V~Dj`z0zPl^r9|@o)6L!82#v zz>&k=M^b(59#>c$9e*>a%fQ)_%Aj`4O-N^PYgRc|Bfnb~l5Vy?#zcUxtizXxa3@z= zbV-19tiPA9s9vynB8%IaaY~{<6$8PtrUCGtj>NOklg-&Ol`vlcqGxT!ya0eWll5!( z`u&Fvx#5fQ&EI^7G8RPjIkREZ?7iI;)<$i#;dAHmne_p|Z3O>uZ-}jPJy5u=O7~Xn zE?>Ir4jy_Y-0s~sXkA7Yr#$z_Bj0g= z?ypn7-@0{|8xd=Lo5o=RXX63s>E46sIALI}t)Z8QbR``!xkT5Bl&iU)vJvwSr(#J@ zhmD@~!;*##(z!&UFb(!6h!)be{cq z&HCHo&YvfX$%qedC@m%UH)>DvH#EyXduPG~AlA054gLB^c6|Ct*v4aPa*B_)bz1+5 zWeY#AwN#&H^k?2nS0I$@m2bbdXT;l?>^YgPk_|B&*S3rX1XP3ZKzR0ycLWTWUKsXI z;)mpYPsT=XZ5a;ywV)K9d#3((Un%{=h6G!F_hX40J2%xf zJ|KZ{-3N`x_fJ4ZHf0VsH@lvF&$+r=?{Wp@Q3m&HFj!W13-SmDgmLfKwOH4t!i1#* zq_^v!e}Pr7HL2}ScWc=kjCg?a-cSHN7fc4C=eKx)c^(G(bmXlBpbs;~fAyN1A%^!(t08wm_OKU;uj9=Q|#G*j2#TMpXZ_3|>ggK5xH=w71$1Rw$X?Q7+}!JIX_gTW|dC#rPe7 zx`{5PemL*n2npC^qAWLaYQwk+<3yZN8o*^rVT~B`U_t4G%PYVIEs*}OBELs+U3hWZ za_P7hwNn{IS^L7K|MiQN4FwcHHHIu4kYU9Y1&_c0i_A^t05M}2U<($th(!al@XiES zfukIdH$ZsWoInbkg`^G-r!eLkC{2R{onGPLI}$b?o8m_lI{jt7gn9*xjl+6>Sr_Mc zhfTPSmZC6QB_UZ|b8{=zCdFbxY}H!xuxn~MFXja~*3?cbSFU!O1*8Yekteo+Cv?|@sgE~=E;v9oPaGDpSE-Z0J1ZqKf9O`XO~GxP{fA?FQ_M9)^PEeb9||Am#l zun2Z~?jyP31jc!cY%o8-CV}AzCuukngVh(%J(u8p=fkBY8LOuSg_3rJ`L(bRHuF4v zPwdd5&fFu$A?AZgDW%PNf3uBhrwYFPHEvk6IB9wT_cyLhzx}%v2$ic;nN^zaO!`ls za3dYfu6FNU+m+UqaSV`=rKf}mWNdUWqx#r|f_qcSx9JQ5l*JrXQCZ~Yh*2>_*t6#x z=GJsU^_)jpFox1!`E0^`$2$v{zKFjJ#*NvWQ<*qpW-H6;n`oQKbrPMQ?!LLyG2Lq{ z9+$WU-YoDuwJD!G=ZYuWV=DH|hxTb6ns7ViP~W~amN=j*Z-<-k46?x~0O-3l$B$?% zhiSg162?WX83ds3)Z8?x-y0hgd|C?Ytk%kM&Yw6RT(4Sza%+|cj-D`MJwW^oA;x-t zV(1_5{ObbYGnNB7*tYJi4X6&?+7yA=5;YnJ8G5)6m{I|4WNU4IHOf$R z+`ahHb3X0%efRx@t0)qX`OIlox_P$;)Kx3h`P8_8ohJ`?*1`Jw?)S|3iRu-fbqk3wBEO z`L1?Xd;9HHyx+36RcQD0K4m(R{?OGaw()`>825)i{GRI*aB=gdZ3 zj`Y{nFwE-tErg&u(?-VHpIcbze)sbayB|JvAnnWT-o4R1_)`zMwY_J>$gd!?Wl>ws zxY#axjvZ7sgYB-MYIbl_JdnPuOqm(w>_cyD5t};CskF3Qdh05E&K1kxArA!Frofe@ zOY1bY@hpqgj#FaCd))_yqo)E41x#C{?Y8Z^Jn(aBD!PWB?PdXf4hTpuHC{Sfi3ie$ zNiK#2jvX58_F3Fm|5pe|pC1QQ#7+e$l8k5-0<$80atxwR6ewUlH&2CUC{sfM0Jn(c zcSNj{YLlWQL0{i_?zDU8|9n%|55Q*WT;>xWy4`)^-`ryfhwbFlh-aTy_n1}2Mho<;ilxiL+@0%f zSQWCh>PzHY51N&&mEd@Q1=u#zA>hb_eLixr(1$SanflO9{6$3fOJ+3~>R~^GG^0R_ z&+*Lmk>mA&Ai4(~ z^GtFOPPk^tKVuh|oD|Umb(U?HF&ce7%#cZ+!bV+Nzf4V)Cq~kTUH?FzXC%GlmODIX z>iF>^0{EO%n+fEvd3p2Zt#0SeT`IdrV@2j5-5wD(bcwhj3_@W|<+P?EVp2cinZrpL3Wm2_}WLen?p?4<3BYHC;UK>NU>adFTClHxw{1O|)V6m(CV| z40dF)$})~Z8bseR@j-wJ79pSop+C}2nb?J`tl74gFLkSbjjOM1^maY`D`O)B<3#5x z?@Q2FJ)l37=-J)(fR+)cN-n%mwNE_T+>rB#I*<8xhGN1uEC<&*AmOP3hu zi`|~?Q9eDqR-_Ppz^*cI@|YV?7APlzf~nP7`hQ6tKC`Z0R-4?uhAj^8Jbp(5DpFpj2)7_DdNbdnRQF}SLH5TQh>(mtCXnty{KI;hxf8&3CTp_cOP5^F3(vcnxGZbqgZ-}a*(W>^Md`+k zcDZ@mG7mE!hXZ7-o$#%YJsru(Db!!N?oZiHdb?#usMdN|!~t4YJo)5fKBLbT(BJrM(QI*mo< zGuY?D8A~j%iTQn5L)4CusJz+O=pkdIjS=d~IwE-xZm!xIG5|;cg6tksYEKkzf;Kxk zI;785%D>#K_2H``#cB2BmMc3oL71$&@44q43T`0#+kpQqoqy=dF#Cstk>m9fve=_@ zu|7(NjUF-`SlF=#na|P6Oa-J)RNqNuZR9z%w)DsJS9?xjT_w@^srDIw+F17u8^Af} zLsiwwW7ek@h{NxR*yyb-@mbd`UCUuw%XVsvxSa5Ke?S`lJTM)S7WvMN*_-j0aXG9* zrcqSn5Mv7`NEw|~olNUKlx}@7%cEt zkk*BRJS@;DRe+CO+qUTd=?OlkucGHL{!xCqx}f!a2pnpctnrtno^LpSo-3yVqKB3K zi;pnCrYCPD0R3P5#b3COfBfVA#_qrWe)oeP{2;BH92y#uK`^?oBr2=0u+THuKl98p zz6=0POCl*wXBPVhfA9zHQ=j^j|KaOj|GIn6d*0(e&jmpL*kg~md+)v1m-B@$d?5nR z|He1I;oke+_xk+{%|QQGfAv?6z=UM7Uuli6z4luF^DqA5FFKg-kz@e+kA3W85te$6 zgPH%%JMZ)${Eb@ltzW<1efYy4cK`E#{!e~ZO2>hiXXAG+{#$H;#THm>ffOxZ0Q&wT zN8IS;W*?~?KD_Oz$6U#}wXSSB_$T~Zvd<_47?xR>Gp=KBOYGcf3k@>I0=Y^1VmuK&~O4^ziv}{T#I6pxP)f3Ic2yvU#x9vm+7=c9;7a&?6vFUFr0(1 z$S2?fc5jqX`YHEi60rQWM}QLE0irfHu&_n0TFNhT>Se2R*>y3X0H((fgWw!2Evt#C z8~Xu7!_YV&AV*E@DzAKFY@!|M7t6$qvrs}10_``VcRXw;f<+C7QG=K?l0}hcUnc-F zl`>!yxXYI>36OBaT~<0@*u(Or{5CeOQ84EYvGY}HTRVzQjAci(w&|MKJ1|KilD-g#}Ht$N>zw1?(Z23S|`(mU@FK=fWf*_p%3v zr79}`(vNyjJ<63ySP{gLU`}HDJ$}nE^ce&LLbBsA00sbjK==xv5D-7omO7U)llLM3 z)dQ~2_umP)!0}?NMP}&9CIX*2a?NvRV%xv@;!!F7xt@7}W73hf?|;u#ZoAqQ%K>ZB z`O>qlpuX0Xi{Uq2!T183TbLQo*GGT=QtD+Q00b_a>+tV-b!||u%S}i0{^!Nq8wL=b z`RM3auuTA}hh@^3PiQlqPrR_7`7Rlt9%HX(sV^z????Rk_C1wzDicRcs&edFnQk+= zex_w}{6f?@n|l1eaLx?yJS^^FeoxS~7o<6=CXTp*5MZsZf5?6Rkyre+-ge72x4a<$ zl(Az%i^8sgYhvo5*G-O(aRKhdhAAg$z8D-40P#Ztj}7achJD`N)wb?_cS#N_WW|z7 zx1=Tj9dyWH-_+9M_b(G$OG909M+9YaEa3bKIsR8KOFT#6$VFJU<-So3>aX~(=U=L^ zW-jdW^*6jNrjf{$(l3Yah@5FRopWRgXrl`sT{j8g9$yj%%yYToUu2W8%i?1K{Ebwy$(pT=h-c@ay2GMH(YkuV0 zu4KEw^P4x>W&QTtOZ(k{Z~lwhu^D#I*#RJoHwTYha96$SC*7LsukrQ*%XWrS2cS+k zyApa1%(sBjaMlAvD=Sm*XHKZ!-wIkAKVV7mL=$i)+`XvGHi%Kn$!rAtk2-MWpQ zNi0{uv9bQku5@kCmtt-p?h8)kKG_QlFl%Ye!-wGzgHec}Q~JTD5o*(V0UTmfeD^7G`-9F=$mR+Mrx=dbPxmebZ zc#tS`adbP>zd+JFsbDszuo%$o7x&Qt<|Hl3F-BCwt>NC>&l|XjhMGMw|AOz5lfifti zucuApMw>oO$xa~lX^mADketjB%JHS;0~$Xv1741fz+hOSaWPNNh)fl6Y}gtvAm0F- z0Du;q4!c|;U_W)wmVKUcDvWrj%Nu4WS^H;?_PRopMq%)Yp5x3d-vYs8Uz#v7^>G_z@Ezr6g#9$6zvY+ z)RHB&x^Lc5DHRzC_6kLiMTkp`=`tRG6`xra0tDuraMnrsEjC}~C2Wq>)yj;h=eQ6; zkkmjwY}f1EGtWHX=lqo`R=eA8zela0Yl6iJsNiM*vQaGJ?NNe$;hp<8FPAwK-=}e*zMEG$vph1cZhi86cDiV?HAOK334M#sqETU0FXWmmh}Dujhm2on9xSOnoAIGYYzn*JoBZm zxG4qqtxYpH)5>If;Zld|%2D9OdwwUpJMGU!W$Hg-q#xI!=CwoT-0Md!$Ywg>b|_$e z^M>W_#r>yUy8;UL-n`v4uB>&#{bLGV$i6?NU9mUlz#U7Q1cXct0(^t2GUGCqu`|rd zX(UDlro57EbYb@SI*pyHmS$!%p3xxlup^ZnV;+j1mm-XqCmc98a{h?R>1%Rj8@7mT zJT?F)or{iXO%5CVaLXk(wNm!?##Krq6|6zhIp2<9{;sQ zSy##y|1aQwSqQx^#|Nrtj%`z*3OYI9dGzvZgf%e$V(dN4pZG0Iw`I)=m=pbgCKqt+G$Kq~M& z5lc1z?jZ9H;Ot`e!VAwTgW6G7T2kuX_O`pFYq3Vn({E$4b^Orlgf-Q*KKKt{{lyE% zJRTrZf0NxWAa}4D=EtVZJyW#SQ*+5ILSPg6lKK7!mL+4!B;`&AHd!4~ZBwz)bDn{{ z39eYGtmlc=pAan!4^Mdgne0OZp|4uiD8E{R>=^VtvXYNztyJr6C`XRG?oOUOF1z`N zw}+D%Zr85en)f?&#q{;!_MVxw#R8Yn#Z$4-qZ^^i)CoxI0nqAS1Yl>% z7S5U-_WAZU2(>0=Jb#`OBqf;yt=MxUSiemf!yqPPyhChWMjytmhVPVhU{#IS=%u?N zo(*04Ai5pn2_R#zE{Fm0tv}(r=Dx}9M?cM0+FJXhSByjh+Eox)(izugV<1m2JB^7XLZXzn}ZLpL758 zPygh9dgYZ@+%?w(PG&RU0u%@AZn9y+22FaWHF@oFuf6t~?T*=g=}TYoU~+c8Spa&# z>|gxi7h~!b{=z+T?+8HzpZw$}{pUmg`WCTEH8eE%-zzFA+!Iec5dq)(ozwqdy#EKK zGes5w^wW*9xLIt0#TH1r1pv@bY7yP>@DFCP&&w&@f99B5a{t?9Z=MOjo9!YjN@3SQ zi2|4jh(4Uc6GaWjPM`j81mJx3pzsXRPt8_`@bA=v`cN-~bf+wG!Yon%JTc_rh(>Y1 z*;FD>cjps7a-<3@UJ@t+oR6WU`_&g*-CcLP{L17YCXSs=Y*AZXyV8R(IX+-3s*Nnb z*@x2L9b$4kA+#CJ@`ZBT`-_DBVHm(EW)8$4O*2^rq6=`09kd~lmN+tbrtx4GTM)v$ zO*Hb5oVHz^O)kH9W*YF(!CduG0aB-r#c6}$Fc+gu=$6zc#DbuHLE2)X^@7Du9S1Az+Jd-&I9QICa{Ji4Ps;C zN;$K-B1PfY8Wlhh_Pqgt9{Z)d6Odw3Dn|Npu>sczh&WqBFp3dI5o1)hfQ3vW|G75G z7K)}RS{O7gi|IYn2z3-z-bW(T=^qjB^~EFJzlsx$Acy>d67NvsbJ*c;?GWDbEN43g z5IxR8{yex|ObrIcx3ZWvU{*7ReS1ep3&+@ysTcsk(zRpcfITe}1N3NTr|Ww1$8PD} zKOsYVV7P&aq4lwUaW!w->k8{;8o!g(lm6J!+!JAQgIN#bVnvH`WUDjJ^W$8)4z z+oa6HDhh*VDlt&~uvn{kFT;`l^eMmvg$l%hy#eEN!e^`ghv8~AKz$G#ApmgP^GoEY z%ETFy==@aooXu~U)F;#O--!BWTBm<4$G_R&dD^jV{1w42qJWjAi|y{&=a2a&{)q>! zm%}3p1{fGGaYMz^z|%Ay!ld3kobm=)4a(k50{>QE?$VO4p_g0349UH@OhzGP#|T-fJx zR&8>tZn!yN^9&0}*)NALps}(oTV3gzSYU7%L{9-FVk)l^8}eI4Oh+(>i5ZPqUuI+6 zeyiN~Z1qgWK94Ty1Ujs`?s`X`JN5KFcj4t%#YA7?meyDL?QCTy`n_`dZdbKsmz$8C zpzTNBb+vaWeQtFW=)wLU{`bFjwF1sHEQ#(^)(%3d8klEWl`XSrp9ct*o23kiy zhm|fI)M>gOC)JCnCBLxDJ@W8(JZtan-PgOF+m!V~{>=lg?{|mAPAHeO#_SxoZQD+_ zTfl!;7>uW^f6`&^CBQXLATI#)2=)qezA(7o7>oEFwsnB?X3u8ddsC4SufF;^5BwaThyqWrsnABo zFiV}10eDkgFWui@O6(DXG62wT{`i>t^xr>`?y3Gb*0&G7{TBB#58S47Zz5LE7+ZDq zZUwBAWK@nFjQ%+&Jz+v^QbslqDMif+{JwnYf*Ta0JW?k%oaW*7j<$fA zUgxe{wZ;d402IclkIqZ5$hPe}^qc|F;?T!F7q-!*cJiYy^h+Ne(UvT3^d;D>OweNn zWRpP$5pG2~Dmr71!17`>7U;fA$0LB}Ii|39LQc)-+Q`bubgNr;Qyp@?>hIOoDfjY` zqwa-QPi0h0qjby93Os-9wv`#3m&w5dumhUK9)SG{U~$;CiJgwI3UD$4%QHG0Iy$Up z2385|2PgCnE6AcI2#U<49(L@=u(Iljk$zHrEKdNg3V~+H3~0i5z}STy3rS`-G!Tbn zeB?X`0tk-JhGCRzF`j#-?rEY5*jH^#59-yXcI@*2BaRP?fknc0HUoSc`+S&$qpPDy z?a-t4t?+>#;j-*Awvq@FpKK$fv=0NGXEI`!d2qO$Kid{NGmd%mY@Rb>b;h2|{1BGh z+$z`J-s_%z`f)#xm6unzT>|W^S+h~^T%KQ-6V#fMGvSFN8XA@hOmacr$Nczi!5QH) zXMTo(vshzLfu2XN%FOrR7LE(E&(AzhLttEA2OtiZ-XvLHkGBul@pIXZk4>rX)cSGo zl~wr)u~TgH$Cc?obD?x{ z^yV!aSGXH?ulMYp!+m23i+HQwz9&;FBwnne+Rhws1?LXCT#@}$D6qVA^%{+b zQ9UG`aye$C?XuSV$K9B+i%+crE^Kds6sto7PGLYPV;or=<^n2=x!?kR zF?;L9sB2! zv4k~DM>{}gFa?F4c|E*tvT>j5#QV!~bF0PhKkWAHd(ySaPmB=ca`Vl5rE{&__2xPEMwD~FAm%BSfFek#hWNn+8jef-S3Vb^( z;s*3}up$T~4rI?t7mVvq(!U91wBq^q_Kd{5Z&t@l%d>LXGCq%Kt-fraBNiswu>jjByfp&m9}Lqm99P)4IWtK+m*Tz zXhncJ8G$S?K9f36imbci(MMeQmaAN;>|rJ&%6QuK@^dq6()N3*t-YV&vD$(>8kP&g z6SAA8DkuCK{Th8tA@MPp2hjb(dQLnWJ?~nw_JypnT|pjUpT5~S-ZTI`H=PJX|MICx z_u_PU&k01B#@#la3=k7Ou^EdtH z&wS=H?h~K*g#QfV`#=BlKl{(||IVI0D}zN~P~x|q9s!Z2frmC3#slcDyY4zM2fX5o z>g(&1Q7mfYwesKfu6Ma_fBW11>leQ8<}lE6aniul*4A3JVzzhReYesx{>bkOGw&w? z(1!yRKKjv*y3c*?b1`M{Wm49|O`A6P-~zrc0_bUlMOkct#TLk<1pv?|XPBdH-SaFPmJ^!bcY{G1BIBsFSq7B2qObqjVsw2;rg+9(Bm}LwE8wUHfi&2V2W^v_stRGlc z93RPb|F$Bj7& zlNkr*wrnD9scW2L@l2f$9U4Q+}y6;{YI%3!Gte3{c#yc=LF6ZNb zf+fb4{tEVW^*0IqbLom&8DC=CGrrCkg)k181KijTvbkrJSEAo7N}c}CdytKiZAyE! zm;rH|18#@yA-_OCAz>*1--Ly67=;;NHDDkdY+)cy_*nm0W0VIY32c!{aISb@z4{-( z3V`)EHgU)!L1h1^#U&q`XFO zUS;Btc{7|{nbgnjJDu&DaWCoA>#caql>na46Z3qH80f=t@bEcz_-K<)-TrSLyfOTf z>zNRfO;Oa=5%Xi3Uk;xZyRiTVd3w)wZj3tdj+|)`GfuD$xJvtHo7-{l!$4mo7TrYe zIqM6qMZjo@7(mx*9$b{nTOiq3k}doEu!8;$pSb95ynC;!-+8qwsEh*Q!nGSXb3)8% zM_qnRtt;EQ)fLvmSQSV-h#oNUvbw-gX2)EKTbswi4renOXEGmNiT5_wIwfSE@9A_M zauCLY+k0DD-Kl2;q4^2~8$R%}Zuz!Yb~w&QKg79%e$IFW5DneZ#6VUR73Hq0yIU#EAJdv6-`#!J{jR>Y z-n}O9{Gme!bgt~A8vC?SVC|i*u|fK2kpe>n{8pX~uOm!~eGG?kB8d+WW^GG=FcNk+ z^PROWY=SrnS^v}uB#ExO5CTAx_OT##9JJ`FHnszdLkGmEj9^azyo=*1CHuS>`HEMh z_Y5gFC#OJdStSQ#n>#6x`G|Z3x7>2O9I~C#H>PGVTZMxks8fyV#M*J81gAM5=VuO_ zcYpY$Cln-~8AuYn`PyAqxeva5`;6eEZ0gKBJ1G4#Hy0pYfje+uzh^_nnU8GTwAC$L zx?K9Km~I7>=ge8#ZqA?0GOO=cr7^c8n*| zh_xRe=j=c}fc*mlu)zsrsX!4N$%P8AHevlgIN0s=WM8`UzZyC2>1$*f>{UO@%NPH1 zVd8hl%E@GV?BcL{{>f+E(@!1DqPA9?4im z8=3^H<^qVzE@Kk5dl^`zys}Tvc=qRIWhC1U4*{ev(euwu2%2T=4D5yhus>{Tolo}p z`1%=8Aq@P8KZfr?mb=mE?TCVIupx{_SS)eq2Wjgk{kpeEAoaRwkh+m@q?-ZKba$=` z*Z~K3m=QZXUQuR^0)NQvF`F1Gve}3NR{WE)gSdp51#@!CWj`!-=gyrL%lu*2+1aM| zD_4Otjc%(lDlSzvhADx27(ZC+!-U=0(d>aZ)CKYe?B$6a@Odgr!7sVR>VqPGP~gte zr40&#DOWjDdVf3Be=o}hRVMIs>Hs0;L)t8PUmx=G4mKGCdoRIKHZS>|^YAYxr&Qxn zv3u^hC&eg#Ms1Sk@2N)X-<( ze9z)qSyeDSj?TSuWHW_e#)1IpSIo`W*-U63K;n!Ixzf3+)lLvDWFyvxtHj!C0X&gR z2V%OUPhisqC($ED1(dw0M`iksjOTU!;%kUWuJi1T}@})sfYfLTeo_ttI>R% ziJ&7NJt=_d^*`Y%uX!MoQxhILpg{Dzl6<#B@5;d7h1p;qQiImCJM}x*PDXgKc z!TXGQdxquT4SU^yG&s8n@D_Xk*;kd0nG zyq@ma+34}_44paS>TbTnSuqbV2LSrTPd+wQtgJ*&2n>Hg>t3>Nm1(_E<$cBZvK#gH_eqx> zReO`oHeYQtqP59I>A51U(Xm{EfP+lH^Z4m63Pc{;wtb$3J)O3-Kn%t$Kh6o*Zvy6{ zME8YX)%<&aeF6QZEBM2QhX9ZF%LY>%A&4-4>Rd9|n~yvUOm1&c_ANc1c;Yndy!g}c zPp4v|=e}4c;`hhKVf}P2{fROGJ5NXtqTHDFoCA&nQap5N*w?Z1U>k%84Qx&}S?bLW zNzk%o6}L6m(grdJW}a<@dp8?Jk57=CRF34Xt z;_a3_{jT)jaO#0tFDUKKid~0FAVp68>8kjr-4mC_rpe3GEFjJ!2?{Y zs(QKiw_E+ty}`|(BQt&{S_3qlSAewO8}R|s^!+y#K+jFYgXpjOj~E^^m$w>#{@Af& zN*Nk8GTwUYt?rxO{H9U^E}3!j-Eva=%CG!NggJiw`t=Uhdf3qsfaB}dt&?FlFr0kj z8{cs6e)qd$$^qd0zW2S)efPWH_4_~ev5&dG{L8_zV*#(Et3;|GfLVzxz8)-m#7o>ivNae85+6sTOW$6-dBDjwAxm^BlNu zm)++-|9Ss8{O^zc=#Sj*{Lb%0c7=lxB0Cp9EVjU63oN!kiWV5`Js7ahZ@b!+ zC>^SaHy*$~|Ms~X9<5A_y%=+G1hAOE*%Sta1H8n!W9%bDtKt}#jTPF;&vc7}p85c& zM+w6~082hfi^*X7c{lp%GU$a2~u_OTw$iikrB^M1ZWdBdY&tvJu|zS7Xzq8 z)0*KkuW-^8l*9sksgJPEZge0&63xyczxmQ}zt{vsKc9l)!~H}ZAXU0fy&PvDLyR0C z+|#7euvx%^IolT6sEly}R(b3p^X;q@2cic`z<@%{YBr(e|Xz>+BpAz++6uOzJ(sxrpHvr^l26 z0eH7kE2Cz_S-x_c-p^dmtjM!Zl$voyCE|7%O9P5FfOZQ&SSCYAm^Cu)w1i)AMsPSCM%em|VS)E)Hju2< z)!N5W(nb1|K==T=nCmc{dB%-UPz8Yc089_4UPg}49B5^00QW{PA0Q!yO27_$wjdNc zj=EydBTEN?UFph|;_ONWgiZH85*>G?+*_i$UCH|rgXe42J(G_S3voY1Qys2i;%rRO zPd|IaU25(W8*H`Pd+Uyv-+FQy-B{jCTT0A9DZUIV*z4HYHh)BgGNi0u8O*5w;g6hY z_4`XTR&Hv{{u*}q9%W@YdnuSRYXwqRt^0YSrKU{m)is5#Qu6?8o3qJ;bO@LwFDn~O zOV6m*VzFlwDR6AL%3D&QAUnnLq*Es4b!&aq)FH+BU%o5tvPDb{#j zT^{Rj$;~ShsHj@)#rPk8M(~|AJmAdnag4gL0ac05$Zl_xRZ|S1(km|7ltscMre zkXcS{iN+SOzUm(N)6J$jCCP8BL(5eT*==&fY(>Ck!1$HqgtT`Li&?(sxo6#y+wXIE z$|zvc{n`t{(FW}EwlBQx6Uh10v-{ln7hlO5NIxnN-^C_@ntBJ_id{S0hTCrT>x8F1 z_a(Ps%`#V2ksb)_Y*U-dZ&=}O`nNwHuHuZ(=$5Q&aYhE7?#99m%;20@Q7V6ryGQ3~5|rt3g|gK7Lj7X%be9a#$l zq$l9Sgdls?$7WBdDAbtw($lWy`deI4T@*mjcjB-c?H2jV-o18e23w8SxfN=k0y*SI zb+5Tf3ErgZGBzj`c~t=Jw*p!B!|-KwS}2gET~EW6^!WjI@I;II|GxMmcU0R934+?QPAiEYNj140Fw#nxrInSmb) z3P%Or?zcndWeXeqFhKgL9MuN`4s5MaTUlT?WNhg1*TdGzyMj|ao_(Ico4ICu2|xu= zpaQyM*rt~5O&f3k5IL-bO9V&*oNOR0W}^xR{#lSjD%+q3xeFLRtg-x*f|1BH(Wk5)g<9*aTendRnA-&UsrD?HGG%$8 z|1g#U!b4)~X25x6!jgT9dGYj_le*VVjT=imc&NH&scSlaOt0>QTfHVaZ}`Ge{KGzK z89T8_6L=6N8i8F8fH;5|pT$+6iAsU|=T8*=rob&>o;)k->C-2bVQY|~(2qg@Q?*4>W7&fdkise56(#I768?z8Vp|JCJdjB1o^Hd8r$Uhi%7T37#$U(58= zgvTF0*XD*4)J%Kq*t*>J?UQFNyXvZP1#VWj0fFaf=YK7-W61@P&Gh)^0$~XR+*#BA|bvdwLgeLlNRV}TRN{9csGS^(hkNYinb zbM~O-iX6{GUQnI6Uy97M1M>9_NROPVt#M9_)lPxinaadyo*Ns=iDZ|x^9lMxUqmm$ zH;TUaMvT3v`hz5gCX#Veb_6b+AVS`wVw@~c73hRDYx7A&IkOX8@5XZF&I7@*3O4g*) z#6q)OI47r2dK|ige3qJ%M@RFO@N zr#%?{#v5-{u;ntf9f9Nh3Sxi7wY8D4Z_)$k$yB&Z0jn*S&&#I_j>2rMnb`p?h}MX{ zs7s`6rvn?=mr7#U=*vC$HlF0HqxG!pE(0Rjs?5mOHcmFlRt2hzOhm}w=xbz_nG&%a z{>yBh6Z7x|tx0ob`^2w}BwLf(z4Pv*!$xmJbDRe`+=P6PD_3Wi$(%AQFsQ0#dBkqk z(WdrHJEH@o#7d;hP(Ujf1&B2uR`mFn*i%w|<9%wn(5YvV>+J^k*=_uti!GcsM<>TV zKo*y9@Id@{OYlEHdd6F9nyJ|62^vB7F&hVV2A&l@{%n}?X&lQK58+*5O;isUl>Mw< z7`3{4?~7!TPuZBEAI)!1pp(Z_si9jgpYVO3AdhtY?V%#Q9TtMeZ~zq;954a+!&$o^ zGuyXc$6WSn*ZB4|Tt~Q%8X$j_-qAN5K+g>sh#uy780fQ+w;F(+d;G&c{6qJoU7A?hG{GG3$F*u1RH-00s55PSj`enFa;_(3baJiiK>%ac%4#xTZ{(krU?|vX{`99Kb^PKNzvw>v z;SWc?Cj!u)I(15^dp1Un0W1%oo)qsVPMmO*!M%qCR{J~eyfdav!@n+&A23YDH(E`yMn+xaVjrTakB}a-FAMAJSPd(4!&~^aQE+*#<1lf_cmR+-48ZkS z22?+c^GMhrV?fcOaB# z99Y^b0v@L1h-zFDIJNDVh1!~;W{l%p2ZI8s)x&8k7Yayk5%R{eWkC>@I&~rLJBY*; zgR0WPv0g;6BaNg*48yX3@*mGA$vcL@0A=*T`M}AIgLQQyOjfW9;E>BzpNu}+Wc3e} zPBC6h8wWbuQH}@Pnsu2QXOjY^)rWFZfXEZot);m~?V)S{0J$X=*&HA7AAc^&ZWL56 zaJ>vFvx@X;nrC#kY?E4ibUz8RG!c2cUWa zBJ_ex3l4Fdy(mU{>vttT*+iC`0ii6|DxDxM%~uUE8VW0Yh#+JJ8!ES_fC+Q-D!Uz_56jF z0JPIkU*VR?L63Cx4Z8D}yZz^SG5D@r5(|R%KV+q^<^ONMhE7h_JpC=mU*wkSXu#{SJKN?dK(?DKh|3il6-x$u(arm^&Gfyu^* z{r~%0uJ^=o4=_%2tyKG7KYGD!`^k5>wKrVra10KJS!+V#VWSOPVvHdJ+5QL(F*^W|%Vu zqih1xW~&qI&G~sajP#DlK@o_YlM}G5Hv4;>t&HGz1rrK5pO;^w_KbqbX{(8G)-8eV zlU`YgkLr5*X_sGC;VPA)-efEZ`@H=g-u8*v3`Y6@NH6B8x~jB+?^X`ua$CC?#RQTr z7MP$kZ_2G*m0loE|Gyeu2^3U}9?_iG(F;o94~J#%f30Ly^xVN56B zd~z}vYwaFc8{r5hn-e+~0zd~a9$-TNvt6BozD_u^D+K&9-7xIb=Dch&N^xGg0%((W z22d&MZcj`w9cVxqtgityPM$j8N^>S$?R7Utik`&5_4vcC>W0kN=OYC~K9Jpn@fN55 zn81k&eo*_MTVM|WWEpmHQzw8UY_aPA{!GNa6e)g=AJA!NqfdPLd+vwNoXD!Qwd)() zp1rrbci*!utMh}C1Z)-KbXRAW9HVD-&sA>Cnn33Wo?oFrq5Hj4AC|mbyRK6kj>rL7 zi+xq)ETwa0L=L>`ynS-EreC?sv+{;fr z=NS^SDe8BBNX2MYtm(T|Lc z+H}{->RuhgvzlLFZ3G)VKzaoIov|Sdc8<5T@*6fCg!dCL%95p(0vH&O#Q&7hzlak! z1S+t0fDwO484gO+*TUf9L>Dl75B-z?s^XH;2y>$8xv4TX!hy^fo`XhV3w6M)RWLBJTq%lKo~-nI+DhJ0(E=2?gl%D9AKe&#qp**1hev zyTqcc>=Fw2s@1!ZpN}1EV7BT-exD@RR62v%q#4@*2ADmR17R*CfQx60O{a=B698kr zgg_+LtzBJR?vj9DmoHyb`C@;qtC#js!p@pS;Cm`%(ETT>Tg8|3(w%K~}| zK$;8$!Wh*nUqVkejH&^V5p@dB&Dii_fb{C`m8#Q10qLm|V}$i3f=^g4K*;m>fBl%- zwsECC>xIuiTH1TvrS?9zO0swc`ogGm#*u+w z-i$f%E&OG9?h&m$APIssTR}=55E=j>(Ze!*CiB%4Mq*Q?bvc14i20DrXLhCA*~0Ae z_0_WDESeBr0WM8bl=_cDXuUi|Fs>M8Pes6q} ztXZ>NlTyLl+-e0*ce$5e-scHw_w2dVH8yVWYaY7}$KmG%(V;0ujl295JJHD zA^8OlA3oqt$SydpwHUH;#cFrkZFdSpKA?4UFoqJ8z`PF#KiiBrM&J|%e3FrwpoeVR zfqsbJ6~7{2Ux>>r_}Jf!{_#$6P1XzuzYh=fxVrkK%24>IyQuf}n%&ncaNuhH``L46 z+^hSQ%}qh7VIfHMwp;H|jEw9{`RLG@3qgUjLpX?bE^TY;JPcd4^~!j!wY`ZEc40%Q zTSDOb>|+x8F>BJ^o)N!hXRU=Wjwk+b=;vypLskIKa zNTj{xl;*%;?-$ONoTI%>B#^QjhQ})l#^4$=##>Ebv$4^eo*&LuWHyeuWQ`@`YM$&8 zRU(ZrnN)vhfAUdRwq4mFGxXV8P#EJU_m9~7IhVcvZ@c?=z`1JyEh5`KX zg#x1gt>5}BzxxYc_=5Y$M?T^|bDj6T_r3lz_et6D@|CZA#eMLDAN0E)ee_Xx&pr3V zAL9PzZ~n&p>aYH)-yaSh_|cDkSHyNX2Y z^JkB{CHKEQ<+*eDF+SC4afwps%CH=E3;?d|m*bZ-(##K4)d7&+=8CyoKhe1;J^<-) zWELw$Zdt7ibgNdnyf~)C?$=+^LTAY3Y}w@v%X4uG01m(r9|l4L4u=^Vg(ED0(_xV@ zc61aeSY!$dqkyMTfj4n_S?~eI7ytt4q#h1mE8EZ94{eB1JXMx~A{o4JFk+N#7Wh0@ z4xGX=S(%c^NMD{D9z_7g06Q6w8z&44aGyy*slG_}6?W3hH<14PSvk)Is)hju>F$#9 zEoU474GWR|z}}OvVa6C|cuz1OBoiF}7!7)R$E2VKj;w02(^gjtoGoKaUT8g*tPJ+k zr@3#8H8`yh0w*{<8-_N@D$u)Y3Ox5CsDHvV-~M7L{!vzbffTK2=QmNxlar$g5=fs} zjN<9%fbk8yh7!nlWI})uz-oX@IOGj9WWTfJorV-U0-C{q zGMkV^#DnQQOMNV$K0H6A!yahB0Sj)K?b=tm!z*0>RL-Wi(tU*Q=}P;2C4uK@o2rT9 zu3)M!(oDl*+kNP}FZ%B{-LTm;u8smor)22v$iFsnY&IXxi+#MSHvlJZSf%;AGyv-~ zwRQ{a4!f^&Ygg2`DjE9cDo4+1jjizq*|DKPVB+L+>0Gas==_ZhC2m<&;&~y_@$vhH z1#~}nLExupzSO zz$rvs2G5*v1ILcKJZ11I6N7e`Wh-1)vSan1Ix3$_jw|1`&2@{}KbaH>oVm1io7O>@ zIq}EGI~6q5maN#U_TwxgC=K1g)|Tdk$kwrutRgVY=jD-^MM0+?{5$i=bng-NddkVm z10%qG_^GdVt8E$TNJ^P-^n0-D`$$f3@?)di~aV=-gyS+d6J~tx9 zt)Yu&6CIj#-++Mhtpd`oXsC5X0?4H!C(pLHDgj!r`I&d7b9m$!13;VZyKMOywdaTk zO1`5t=7fNSTLlz6?mzF?u}fgXtK7bQPr9ay=iRQWt`QsUHCq4oxo4jFv1{*Wb!1?; z@y1)UK5lfEo6c*!7S*A-s5vbyK$vwY!I9xUNMFUlh2sys3&&BI0Ujpa-kxR;a0VDx zBgb^63{;T@NaF)K5?QD$&;UTA0S-8Q^s>@Oi|x8F6gb*<;*i+qJF{e;pS@CHW^NDQ zm9sW%uYjEl7G?AVm=~)R6qafBt=Vf4Jp%B}AN}p)?tgs!`RL9JKW*E-#=%Jcj#~n! zR)(kRa58okX)MSM7;AGz)rb1TmMj+O>Uw2WctQS{Uf-uztXRVkE(Yn79wg7THma|$ zSg}fa)}#l8b}Cp(OMmsPVz*<*H3B-qJkB^nFmsh_*0@noQ6)X4Sl5FQIbcPmtVDvN zufKm-{dUspZl%(9eO9W_!JP`KCNQY5WNzU3fBybq_wv)vc>rao__RNkl@_?a`p@rl zZ{M?d#yJyWr3Umg)O5}juU_rSHg9qH@|!HQz>LegXsqTQ5UO_(-Pr_Y^ELsi(UtS^ zCuCC?(z}}edc(>|XG=eWk$z+-U;$5RYwc6eU3r}cXaK|^%VW_T+2<`)de{lfSjt#{ z7-)mf*fVJ>&j`nkX$bRXtmB&ZR?DW`BZhe1aRK}^ZcI%LThq_FWjv*?8_@`MM{F2?oJ;`G!?e!4RHFB_ zT7c2{W7!QDR&x|6G&KbvUcvmL=m$IoQ-6WL^F7^do_&6JWZ3Q8akaZj>w#vicZ!OX zbygXw$gr@`0)QUY{t?+$SS#@CuqB(&HndTnZ1?c!!&nF-J=;V=y8~|IJu>?t=L5t{ z2UtY^P6tR&e+N`Yy8_k$ShrAtZrGn-qo=I~Tbtd z`PN%(cgEWy1z?W~eAp#j?A&zFI)!X%taqidMIr@yXOJ-wkNj(rb!Dg2KZYW9VD2pn zgq&MI)m+-iz=>g->wx?Y%nfEMz0z%Pi|q5+^#B7Cns0(q45Vx&qVM3J;m^Rd_S>ic zqN8UIx%}KQSH5|>x1rc?>261~)*cWLnV|K_M)`nN2LQZu&Id$4Hk|7w$AY;L5Isa= zCO(*PI-?AJMAjAyHP+fSQ*8|pSS!-9;^{zI14PzqoyGh1Mu_?TxEAxK0e<-&u+d+Z z{y6SRv|cULx~%qwTlpy>WQ!lXaK_c%euv9bW~%v?MC|AW#!c7%k*rR=J<<&Xa37bA zDFdZ~g^2Sv(& zt_8q8%tp@=G&g75J^b)PTC?}KJMOs82Ui|Z#zNNAV*=q~2imkr0oJmC9(aAfbly>K zFWR;1YOQ%XbtNg*8Hfk_Yh6ZNmNjhhN{ZQz=F+wRX~P*;!d2oOFx{xSMwvxrLrEsA zGs#HR+R`6mW3}L9*5`novk~wqWDX4j$Rle~0fN)XLdCii+gtEFl~J>LxhoMtg^AZo zFCOz>=K{(GJP(L|iGazxKLObJr2Nx484;FQz1TKi5`bFkdn?ld4(W#gsL@w55nJPj z+tbFC*`9N%>kKNZ2n_7tZ;X(VH9lhp_D%3rkWC=*<1PIp5gR>g_e%s1guvcpSLy0( z(mav^w<9<49Zr$ zh1v3Ay!2=DKQV`EYXEWp=<_WAzyHgB`7iE?C!R+MV9(cgBvDYPF12Ir!Jb<3_FADU+^&futVJpsWVafmP-~Me)jCZ((21SKR z{{HX(-u=6O_wW4YZ++`q9*EADg#ge4roZjB+x)e@`qi&$p;O}PV@&)02mPa-w8?wk z^B&t3*(L(e^J8ysuMbH0>}Nk4Io3Wr_~3(%K!LKdGO^dJi3C6V!5{pAzm6TZxLs_4 z#THm>fmAJU>APP@$UdL16sOhOx1>6CUVe*Db&6q(MFot zUyKE?NC2d#pIYXG@G@XGq_T@bw zP1$@4;2GHG0bef>0|8=+WIF7QW8`|4T)Lzz6C**82JG{&&=brUcJ}!Lll((DMoESV zgLXA=c{WBeb1a*}#W-@g>9AL{P`EOYXjyf>Zk&7R!lA6nG9$Ga0SLT+-7Qe81AsjM z3lkVG12DY+^#ZmhvJwEe#)!mN#Jhn(!2ZJHyp_q;1L_5U2m|r$cT+m2q)=YY5MV7vRuxRyF*IRKiuAbH3DOY#*J&}Fse24@ai1`A?Klg@$%iM$$GZQfd+)~N`zUokR zgG?ggqy2N4`e(fdXAqoZj-^cM!?BDb1Z?3PH{+!l1Nl8)&iH&es_6qT&+*4+bpn3& zV?v>v)ae*xuXLxEzoEr{Z%7MVY2bNox^Db6_3G%j*WA+Oo_yx8Z;!X%dyT6Mv9^!7 z64#R-%Yc+=!yP%(>PE+c>+RYEGkEY$9a9?lVWp8r<^$|LGCJmto^A8xm6a5_jjQYZ z=Qr}-wd)j2sh}f-RJs=~To7=mC1Di^cw^4Srov~F6PE{FXTRD@&9rW5v0Ey3K$Af+ zZ61ZaT}~+G*?1`wlNgy2moHx)`Ki5c%pDU8eY%neKtC7ud4R@sS6$_<`pE}oRAExc zph4Zwz{wM0+ftD4#x1U(Jn^~<03ks7!X-=H=!#`-sv_~cw6ftwF?I(wOurUU_Qa;9 zCVy>f^VI?&hHZC~lVW!pxu9c`2fogz{46_+8K+k3>*A7fJ+DchS~XVz#iZ-a)CrOJ zaxleV31iHTn6u$L2ECaryQWuLc;0E{vH zdHDP#SF$AN_q`_%xt`Zww!`Lq3uFD6^R4dg-~2UKR+m{|r&WfvCwe6y#dGJ*xEEh~ z&i|C77e7ZVrCYY_a92;Wc0c^^zleQpP=LXEl%BiZGtXbT+~h%o*I$2=+puAy%4+p2 z-UgIMZ!RzI^MSIgP3tW{SdO4UIfN2rK)`X#x)}!|YhWBG=G3Ng=(p&(2s$C`f;OJ} zo%8rFKF}Zxw9K6vaRn1yk*fvl^FMGUVl%H?*BIG9-yd*_#xl&-$T25|*$|*O+(t0y z0UlY%p#OjP?yK%||M;9hr8vp6lk2YA>~6aKc6Z0M>4RuuuLL-fIgGJIq0{5Ja`=}C zK>xhhp$FWyZM)=eX^<_YQ>^r_%7H#6Ana1Ve^d;6#bQ%#70~dg00GQuu*0tqAhvP! zTD9GT`dF@j@S_4y?Duo!dIen7*Vkz*!zMIy9@NelpUCrB6ruW2WW2ZFhtF*o`%All0~C^_yLZ?mdwJb{aT++zqR( zN;hs2kbbkAvC;KGqI2eBU%);+Aix5k*&NRzX6*A;zJX?$=U|}+NMBGGtnciY`PxoQ z?7!qrP8O% z%H$*tP59UZ2K&3cjg9tXodUq3tfE$c_P`d9F4MceP?CR)SB&QttmQ%B0=w}(A%Hj- zuK;c$v=O%7%d!n60y~6*uKWpU{>#ZJ)HO?Wy?kY)XpxU|xojvMu2b17tgQkdwwT|& zEo;h;6KBqx60>N(-q}*OcI|ov6jZu{hYsj|x|N+`ySqUEGyIF=V}t5%74rK&;``^8 zE!)Lzx?bZ5>tulRBWc!Db|Iyw?-A$%8w9{bfPu7|3D2B45W5|MO#*=U{EhLs0{o8Z zZ$NX)G7q|;>l7$B<)xSQx#K5}h*h-0-F4RkYL{{auUyi*(BtdEoD8Txoaxa2umJzC zrC=M!hEL!J?PM(4TrR$y0A9d0NMJ-*?7gye3+F*50V8@kWC>Q*l?bFC(46(m7yi~& z=8U;j%QIgm9y@*6O|8Dh)!g}ucAFV*ORJ0Yd;*=jOY6-;M}l?xiY1k9NlkV@z>F*L zCY`W-iS%!=X=2yK9*LO0C0kqKeB6qGw9F5{9AI+@!5suCvF}Q^B`&hhXWkoNb_LKK z4j96(Fg)$wOjIKJ8*>qJa#*HBcr|+Qgb2xpT#4q?upSaVF4gD3i|4hbJmw~}ZkvLQ zerXg4pXxk*n^Xo}fb>%nIex7}_OdXmG{8gFU-*{@xJF-`zksvZY8U)&ejxL;uoq%B z>XnVZE4`~GKZ=%4*5Fdrv(dn11V(AaYq|AY{Rs-`1m6cZue7;Ka5$miW`MiR%xi$g-ljnqB z63tbXIrTI^6E7uhaLd1tJgDv=DBAuUH|XrEL7@ ztRn!XPAZ!>8B18(5G33xQZRhsD^~|&v#(?Z|FBi@-0`pBZ$=C=5MEcau8L(ZUoJaw zp4NX;?r~+PI$d|&9=Ce+I(?sV&pz|GJEKf)n-!$6XV1-Q z!wwylnSR^W+BfYlgDF1n=1j`udBWmPzXIe9 z*xQ74JK$vWzjXZncAjmmPldtZmcc9@>}==EwzV?Dj zE?($X-<}fYXrq5m2~g)f<-Os;A71*1&MSWlPh*!N>sbL(yLYotH#a=OiH;UGMSQFw14LBtl3so2;j z3!Kk9r$wmBlmEW$Tv7~%pU-4tpv@Aq(O>rV1+tq~*RJwa;+;o-4rlUMZ~*;*_Z zJgiB1#fli`q#cv#wzIQSsb~Z;QmWqd>(|TZ5g2qcEoY&RKXc}cJFmzY0QEa}?)3G| z_L_ZteU9>2IN`ipw{D#Vz32o-JHPP43*G@tn}nUp*&|d zd6SVo0mxr|)(vgBRtxmhEGTx)d~5?}Q#jQr;NSWf<3>0oEQ@kdonp|NFBukSq)!0L z!Wscl#pIQnAIts%YyM=>Qa35)Z-j_I0MkToYBlc{Uzq^u4G0}(EDG4?Nq057;h04j z#&~n4Byxzcki$s_i$8+WStYRf8{sS<8k>7GM-)m>0Q8Rr8*;ys0;d#Jq+X+qkL0>> z8J$cy<6Z!nl1AKu1aLNRZwqN`!dL=ZG%1>4e?oB$vp`X=g$B~kWSukpaVZ=GGvxY3J&XH=Vx_ROfX0M@5=g(v%_U1i>h}cZd4O|6Lla`|3YfLZ z#ZX(ngw*x|&=I*JM?2MIS zoyb;3$CjxrdOb^1Siw!VJTpF7fRF)-GBIe{d=lS3=fcWo?_R@-Eq*RGMhVsifVFT0 zhb7E@@7eel0rcVKS^PXp3tWld`CP3}YA0Tgsrj+vP42aW=e%>^XWn^p%x}ZFb*?{m zZOpz*zKqJqedKhjKP3!mhq>&~sb;^wScbkWYvxX-(B3`ZF17|hl4VN!+fWxZRA*A> zxg2}ldZphM@B;zZ^LxMdd!8U5QJFYEAP)GnYf@^<+w-OpC>mWRapsaq@5yhn$R@ zQ=`#2=XCr1-#)$i?!LI)eedlCI79bBp>H~2pMCb(dxd}f>vNx5_^Ee9i3M$$1L#-7 zK0mGmiBsp=+(WZgc>9Cf@U>#V{_P zl>A3y^#V5KFV=fP06kS7sbomyMFf9SRaKSyiJ$lh_aFYle^~GZ#>8ekHF;HAq!(oJ z2Tk(Fg5)7Hj+H3RM8`^U3hAp#^vbQ#H4$Wu05Y~6dL@1~{C4PuUKA{toVq&C+-zG$ zuYl%r1;Xc;i2|!D$6>sh#AZi43%z|#=XGiJ`8R|TQ&Rbz@r1zTj*IRFOH`JUbISER z6jv3<-i-$#+Q0jnn^SNqPr*jY6bxtCsgPQKR?RSEqe_uhMN%BOwNkLAOM@6onSc0CT;cGtgyL0%sZnG3^NhX?&hmP@S=i&P!kuPy|5nbYyJ&x+^YP zdOiq`1$z~sb$kQa0-aW<&&qemKO7{1P4udo$;r3f)Q$uG+5qZh507w(OY8y-o>;`uRWjU+&M|8&M?%K;@aq0}t+V4~UWe?%nZg z$?QluvS~{dH#sBHpsTK`QlJ6-@9JvztbqVxZ@+!N*1vMiQ?i3JznnaER0$wmdLMy= zN=wVN%|4xeLeEH%J9FlwYZrK+SikR6Vo6bvfID*$u|XGfd{Zl#KQ{QQIZ@v1OyL>Tuf?O)cIJCdX{p^qIclRAoU{P~+X|DkN>a)D^ zDph6K=?ZG%j9%gKCb|`Xyl~FVjt#qFvC)_8j0a`I?bh-=e$B*E@rf0@0DlkTNA&E| zn$A@vqOf>E030O*-UOMM$#oL|=_jML32+MY6`&Ur&$KR(IDv5dYRp&oT+u*Dge?0XpbsOKx6=527d^o8F{L}w@pc>ZSLilpVu=QQ{478513;8J9g}C z#Z8Z?FH79xk9|~gZnbL@`+R+4v%vU$9$-EsHot6L0|_|0ckdNgpZhf-->h_C0c%nf z$Tjdoa4$))Cs7K57ZU)l0HCZwD*kBJodtc%Hca!C^Z9c38V}q9WO95^*IMen{q1Kw zfNE3A7I*mYy-JWPmmW5!c@5vR?w`ODoS*fEn8K|PeB$`-i7AjU0+2rJCqONb29dOf z09vGN=nnYa064R~Rl7pT=XvA44Goeo6;+RAZ4TSS_oMUi4#qe00m&n@Z7t>a zH=c6sZ@%UB>`Xr~txc8NdZ$E4^y9zfvX-cJxl&sT%cz){4Kipu2_pqCfilkt!yi7oP>7x~?`_C+<$tjp;(JvNaiJEJvCPI7}VU9%yyA{tK zHY4E8Fj;{$5}+aWVJ6j<{Y9+7AB%BBeX^L1K6|uP6+z-UEdGn$*Ismmsv=*yckddU z{l-Hqu=Lk%@_=TxFn06?F}Y`2O%1)SUGrU(EVNxi6Elmr)8;)_+SDP1uJZk}15d%Qdr^Gh}k(P853O7@o#L|?5hz~RoBV42bN>nJ^So8eRV>T3+}jMpS~kOHg(^o#bLRA z`T?;xUZ#D^dUpe}_dKZ?#}7gEd^Ue66)b9NOLZ^e{f=D_5gANsK8Zg&Rs}4bI4b7~ zWkR-6hhoQ}@78qEOhM_8=BdfP${6FH#AWO-1REL~kfaa%X!wUynZB*UDQieHrex*F zp6u&w^~WK0o38k(1M;b2KN}IIVFPGeCdafnI2=pXpP9s$?V2o}8)A+CdgGT&HeXrt z2K$F&hR-1zJ)cXIFbyyrv9_)z_BlyZzvDdQ=V+e3PKi@~XQvjspVN(DhXoZ2WAIF~~QJM99Cs27 ziTw=LLQ}dI*yqJwj6#>HBqksDfS8oo1!s&7gfd2-;cTQYD=H(0eAut4o-f_)P+YmE z7??R?oof&n6Coi2<1M#P>{|uP8>+IM+|(#c{}H=#*anR1QH@sstOyy{<>i!ej5|}p z?K6FE#%vh406>iq2ip<`L?|}{NDnZ+U(WnQ_W3Na4kUuf>F>1$(vv(u5-nHmcItY&Ifx9Z__CyqOpirBUAffj=QbF}k*;fYv_YP-l7@)Uf!JI_^8Ur3DEdr39{XC#vj*g{dbT~>J zq3QulEi1{4KyAG*Jn!lr{g}%UBZo=X^WSh~GRAKPLy4VZrB{N#b53i)e1!#^)zeCZ zNavX{#)9UJxBFm#In&Ys;U~6}z(p*Uv#>@1Qs7=~-WmrB0itINaQ;jH^zZkeS7M*6 zf4(_A@O}i(bEWxn1Fn4b!lH|Q{f)EkYHPQvsV;L*Ji33;ZzDM^ZXzplaQndU*h0zp z`sz~GR2v25hDOHSrFq8IY9$J`G_0OL;PQ3Np<)j~cC<)`DO!5IU38Ia_~9-A=nLin z^c@`?0=z!qi4vAO#m7GOG57Vae_d;5x=^gZC}Q8CiT#I{{35Ph-A zGba-(KRz=&;BvNZbyJP;IXnc=cXxM-sq=An{P^)jhuJ4a{8wLnRg9)lkYP>$`pGo} z&|3*y3z8d?7i;@kR5rra%FAz-&Ud42bw>6d)hi+A_|&I9<+g0uGJowc1?^h321d__ zbqE0bygV^tDX&iobgXOIJbh<0?DKg7&X(;4 z92*JD%Du0@(DQRwWQ-e|9 zezHdZGck6pR=WF!U5CJkM}Fg16y#pr90Q+busf)vB|DyqMrGwC3VIO;QgtfbUzoY5 zKro_2(v_;rdC(=yLh@gr*Hf)3WEaFHgvAe^0X~arfg)02;T;}|shlsBZD2Mhkc-|(AQN!5 zfojUj^-;B>7qrC0H8=-caIfOu)(gce(%fE3dl$`jyvZBc{%}Y{#+J`|jW8 zHpq8$_raZRTSGi>ZNI1T3Q(40@AKzQy8$t6&B{JPO2s0*O)Okhs-!^qX&9$r(mQqP zsD7Ojv-Dp1!Ki{Yt@)YxElc3vAzL76 z!80(S%8PmO*JS4`@3YZ~yd1kY;*OuZ;@U5r5nF!ryxMQ+yzbml>wfkh?sp%)|Hk!= zgrK4>`G787jH5x`RdkD(qQ!nH z+Zey5flW9bKt(|G#?qZ%Am+&8Nj(G67)bS;scttto$JO&iv>o=U1amy{f51hYx?XPyB0TefUhlG*Lrzfx<}sMem;lS#Q&{JkXKP>mE{4nUu<&mcbmyv`gC zLurM^RrxA_*yfuvf)&OtK(?k0o0T|sK?!tkOJ|r8@!C#z&pi(+F%G|dbXQ2&qAfG} zowb;F!p&H3l8u3|pXeVzDmKR1eo8(d{PrY5!Etg@vn#>V^}o41D&k4WMj|C0$i7W^*CDzw9Gozu5VR#RNlk^h{2eG+9Xc3_5g! z0OXqhTD+SEbG4UYDDkitN}Hks}^Fc(=gwd8#PcDzepAed6^;Kl-HfvQpWa zrt{E+Txu5{N(=kgn^@CUug$MEK| zJ+n9SkAYrS)3??KmNZ6NjV(SePj-~ZR8JQl}o~@86oO=&>8qb@FvAk2EskW|E zHpcSvx5Y@U(l^H;(U}Aaz|Pnr>5ADNR;Ak?Q*m>Wwm4=czO**QU1z3aKJLmm#SVZJ zFVp^{P51&kI|luDvG~4W1(thGQ(>dWX9t#n_>0;0iD2(^`gKOc(Y?<->ncTvQdl1+ z4H*|11XWUNKl~Aa=;JncD#z~Z81fi}g=b06N2l&RWDv0AXM%;o7K;cH;?My~^0fxh~(c=$QRXy+$p%_bkqHp7-1L$c4Ao~CB=^6L(NlMd&&C2|}#)*6A_8j+* zKazXX!Sl4z0)X}PnFnSwzuNUZ*Lz^S2iALFy$62KdLRVQPmfQ!SlQ-CHe0GeOf~pSQM!uP9)!+VF~CXwb&6L?Ol% z%r-dPVKczMx)rQDLt@`f%u&5zJ?d zHVk(Q_+hvLq%SFrI~&+8Q!yv5Dd1)#qId%urY&4sI8Hg&S_0`;VxLcTZEFdnH?X$# zfiVIsXMiPZQ>x#Y!E5J(O$4JS6{iFl_mr%IWufg_6aXv`aK1?ZdL%Dk2Ti3tk%MG; zFmWo!VH?0=Q&X`8rgw7$Y}zdLwE5D(sU9n0jdwcMZGM*l1(sp1N|%Yv3~X~+@O&{R zB@J>f(>TkX56doIZ$06ewjwaS0QCy0%3{6YD1hcLz&)T|z=2{P^7gK%6M7Pjq zDKgHDoj>m;uC}_G`yO35?^J(}>-*j-uI}%BA}M?C!iG2T4dwJ&uk;E`5ohXazjjJv zJSVMyD04$jPQI(1ca9N2o|zs`3xpqDCQiYtmwPqmRxB``c~*I`J0}A)UcT6)^|0Jk z*S7e>q{=}5K?r<>{j&ak?R#KUy5~g&tr>GjnHVOvZm7=4skPRvE1qk2#k1EJ9rjz# zyzPb*u-~z*(H%axebH}&IlJ6+Rs=F$^h1gtu89%8SIqDTeNe9I7)Tg=-PBm=s-)Yj zR*s)dcnPP;7WKQWabpRKBJi2(Ws9(cefAA~1M2B4ps zYE|E+pudL)O7ebKK(OBKVQ;S(3rk;5t8AH}1$MzCyQTG2Zf>=LJMrK&JL6aV<3Ijm z_osjQrwTlt@l`iT%s6=P;QX||!$$-Z7Co{06g zuG-CxPq-PeTu=6Ox$$e4Q#$@~8y!E>>UJD?!tHoyakY-+_F4Kj021Z09kT_FJ1=l! zpP1+GcDVw%&&^IaS5W1ifBq>kv9)=|?o$dXbAfl!}Nl_;JVS0$~Ds-z{L zJhtQHx?@Z9*XTS_NI31fDO@SRc{_X2jsKjrx zRbkR1z+!f)0f3f0-mn0_fn;aP)-1UZNE~e9-}*U0m0)Wh`mpSZIH+Vo&s$d2=7r5Y zP{RZDhW&Tu7r2>>haNoGFOa4B2tNwo!LVu-!95u1=`Zi!5sK8MFG#k zLa_*H{3rorOn`@C&F|#x96R=o#%aGm^)+JCJEXB2fl;%wL`aZVqy(t|FR zIzwq`srs5^5Wp2Hk73GPPb#=qRn_Fj?u=~jfq@RaUzzaWmG`>c^-Jg6sgsvvd-txY zKbxD&-OmU(|072t`*yj5WeX&buj&(2Wg(HQL_qo+fozh=$i=g6O#gE#DjY!if`;VG z^~v^4<-7Qr76;fE+n@Q2001%Wv71aH_UWF5`60h>Qgg_J`hE55tewMNhX+eF*77}A zif0f13JLAlq9)kmLxUaOX9!ppCe)P(OBPC{YwX|$K*j|$FPdkkG?vcg7}@~4keENv zKjFbJ93%7}^0{9?@cexF_{6FXlRpVis|nn5%w$5`n53UUfx;2`2e8|MZ&e$xhH_uc zCzgyQ)9-u}{!C34YE3J1JxX{xbLNC=)!LP%f3S{DOpNAncP51YQSh0tf~m z{Ypt{iQR|48vsw}8#Zul^M*!!U*+{YlI=(`B8EOZG~#v5h5M(2vi=iKz>iPTCT+=- zK{m0C%Y8P`x{WQ?LMlQqu1$PWncBwKLhv&iXwLx7sS-)pF_(L_HZ5kPhb2EgPqA*( zX9lE)XbG?!47r&|OupI|e(&?Hl&TGBCWp_;*L&*Rb(ep~6RzUke~`)P{XQkC$TU7N z<-YmsJ048>_(ONN`r0z-a^o&fNrykka(iv-4FD@+=mfM|BSzcrhY-K$?i%(wq5;2% zNiz4d4gu`{Aovj1+2_+AJyvalxB;L?#Kz=ON3&|FBz>^HFlV7(B?9CC(z9xtUFMIc z`88*{OQc@Ob;hO6$@kL(vR4G8pX%v!bAaeK%MYF;#*yq8v6(Cnq@SD3@^O+fCFzB+ z<#EMxNMiP35~Y=ls$_)E}V=ttI$(y~hF zB@OC}$S;hZE@Q#>*OU?sAXYeY_M}htqo<)ntGlv19x8zIgxB-Fa8I$-<=riyalOme2Sb7M?Z{DD4ngZl! zA`l{Ui##ig_u8D1$+dIud@NIA*9gT7=uP`V@;*MJgAVHXK&)T}3h^ z>_E%0(T7+ZOLAFFvXv*dQ1X4{!F%lV{TLPd@r=#Dm+pYuX->-LOyn0Ps8@`o6v?IUl2Ep|(!tl1mjd6qqC@0F*4% z2KyePJ`qgZdHsy$B$rW1OOBPN02%BGNVg2xIXB}oq5T(W{DC!|aald@V8(!>A_2ka zbi{(*W(-=8B3%R1oZglkWK6Pvap*@AvaDgj;57u!*zdf0F#RO#^dmliZ)_A8s*HV% ze}Z<*_bX-k_rLa<%TxL8n+xE*002M$NklC0PMiw60%x^ZCVG=hrO}>KGhzW z6dmBz_I@`uudlqH!1G)~dF+DAj}0tb4!Xc!eeFB`^IeCwiy3w?P`NkvAYr+M?bCg8 z=86~x#Vmu|v7^xg=Xig5KY;#_v~a#P0>)IRRQ;Bwbbx+# zl-0i`0_g9#=N{ME+Pdt435I^@OJ8z;luah&97YP~+3b1$tH1iI?stFpcX_+4{O}L| zuxGTlAZz*ndVr4rEOOkr7hiFM7tgy5H3Fmwgghr3B~|GY;Ha%<*nR9@|MMFd(pEl( z*s^u1@ynN#D0bQ93OHG^Wt+<_DZ63UIq5|s0@05OKv*EaaP9p+D)zMqumc1Ahd%Tn zck$w4An6SNdI9HWrWGvq0Q#6->3>K{QV%@QFu-ZvJ`g|!-JW|u@S7k^S-Hxs))9=f z{$+bRM|8hA#>xViOe{@ejyE}W?3nx9=RW5XG3-0Qsw8IId+)vWmDXbgu4m%Ue|C1E z^p%a?_OOk<@P#k9-~R32UNmkWd+agy^wUpEFNvO0Sj?xV+NA?UfHK>6rPqO1Uvv3Y zVy4@%M*(@wE9&Q&(IMCS$}?{Iwu7!}BOtLTIJn%g!ems}r-0Mcu#4r2Nm@Ihm(BJH zSYBBpru!m6@1lFyb@W{~-P@_4evZabh09V9lJPt>R1SvX&B<8&-lnLh^aJ zK$hmKU`~P6&un>;d8-7Z&yn808VT9w?KmWi^t|+p8`-|!{odD4xc~L7WA@XkURyTR zxdZ!mxeX#4ityq5xsx8SaJwohR9DxF zJ%7}V30PL8XBhB3Y=nRus|B#v#NqPu1eC6CP-*u%jbWaRNS8>~oN*C^08TMR=M~QCyo<-b@T=~fqgP$WDe2-aMq1px!?+#n_bCHG1m)BvRYw2C18y{ zP~Wt}KmP`>0pMNVQ056j@YAvW!SY|KN(|w%NKy;nRI995P&A?YA>xY^ng3V1hN;Os z1^UZ0Cshe7-0U|8l!)C=J3MQ60OAFxFr;UZ@rW;z`HFQRQ7lm_Ux55tv6vzNz&!X? z_rUxL%aJZ5k{@Jc0d$*FKhAj@8C%(eF<&fjHbR9o=GAn`1MFBUy>e{;=^+VVPN$EI z5XANcJOPLT0aOe@2|mc1EwNaxfIkJgCq+K_>-6c9u4}$}Oigv2lE)4xL2!#0X2mow z-!{OSYE{rG&@-N`$``%8z3%MUQ|`)@ivm|otGZU5d*qQL8guAeB=m;B=+t$uu+QiN z`m0Q1J!AmJhY!5?c3AhD=Fj%*!qJlbFMM# zw2xl^T7!9-I12tg?&*dW0G7AD4`visX;Z~p^uc-&gAl9p?GkHpw$_5?jg`KA9|Qn> zYo{uINT)(-HNS1Bk3U1VdTb@Dns=+)kjnXB;-ylRRojRFYUjNk0N~MvBo$BrGlpQ( zp00~ZIEw3`fasS3(CSh@@;z$!D&qVY$s0 z{Wde1?PkPCkNCuE=@$!?#5DnWujwIOu9)Wm#BVZuePh?^$mKS1|F2TNCAylz(& zgk;GHah)!;qvCskjUGJ)oPf7!WV3X3wz`*Idd};)cBCzvx5@AKp!6+O(N2SX-r{#5 zc@)nmfd8dpWp>V`UYXCZA4xVf5IJ@Y_6<5INn<8lBLIGMXRa^QXAR8FJc<6sZ)}5D zGIwCd*-J|!Dx$#1i6iz^O0V2|`ZVV6lUVYDd%v1wdwiB8 z>4eG5hEK_~TGPUOD!*))K*xnLwmAN@d{)?dHA?JV2hgW91lAeoQ|zYo&DMKhy$9BN zV7&)Y>;VJNTTpd;_dTG({o;+X9ReFYd%4(RSio~t%90W_EabOBaN-hd!Vp4fE-Mpj zQ^1B2u{L#kCob)wT?8(Y1$g*-c*pF}Xj#M*J`5DJpNokEwXt1{9*eB=*n4b4s zAI4QCi2^YD59pqmQ3oqtN81?>cnH~;xz?figpaib(%+bL(Wm>{o_3~lra*cC=NJqI zs3njJ%QQ?|VINrkul5yYb(kI+WboodG=n$MfspJx7)>ykAy==Csca_!*esQ?j~oTL zd4LmA4+t2`m1PDSfIAb%oH<9#*-KjiJEwA8iPuUwOPqP;7%>($0=IQ4AD)gxO!f+- zY}oC0vjmZio0OoE24KY!J&fsqbpr=rot!=dA^~Pk2na%g1lNub7$FHDVyG8DX1=_l z|8f2g*Ji*Po@v+vY=1T((34+~^$Lu3e*JG;)m`_=*%~>J*r)fqFS&e` zGB2HHGUmHmE#|nk@`uK-lS-0^wUuWYmZqwjjo$HYj+|7>$k}niS7RKogbI?bFyNPR z4rBtL{~!du!aiAlzxF*aCdRkHkqI{-Mt4Br?-%BIyV9!J<1WXuwnpFd_6@n`UW~wX zPdvI`K$G}9JF9?3f6g7YYuc{>3Xfk9xK&c5Ic(SFC@>V$JbCO~yZ=640f0SQQxD4d zos#@%?;UboDjkVzY^ZQG6^otDNp`s@Uu6QIry;-eOTXlP|M!1?p-uBk$wE+-^2A4u z9C5EHacU*W1VCS;N*pz%d2VC%w9c8Y{{ndnFbDVxka0`_)ETXPGs6ln4E4Dw1@oo{ zd)-uD`;wsg^OrkZ&AtQfz~BD|ay*x4y<5V*@*r{;)FPlWpl(=1v&95O2e4KGa-QlF zkSlxE<&~A_yQr*l*cWVrW4ijzzo%`Ygu7G$^c)8;IP6ngd$bnE^xdT1>%U%SX9>nF z54N)P&+H+NH8DOQz^9TOl>|VrBMzV!XPgI=0-{HM5OA7Te@@;<{XyG8$<8j4E!e33 zjN5TP^;19P{`}AXJlstB{EYzmn63f9>FlgP;{vkgn8W*>@7$f6eX+0pH+%1A zKWnYuA|yV~OA`3hYj4!1Wk1Fl7W+&J+>3Z!*t@XiyBZtaYyb1mmgEPv230G4a{K%; z-DUVM7`@4^&f%}a1s#0)Cm#~(d@5P<5<+E08>I^LxK zz{Q(Sc9fTRUxBlzj^4iA`*+QJ--!zQ}T;##KW`Xh8_YuZN zUzb>OjiNyCULK<)5i1|d0k-7#zvaCq^+(-XdW`YEh{*{MfUN2;lw;gY@?>^w(+4kh zfU|qPgdpMX8VtM~DNe)?JYpGe@hOm%A*>fhr=+oeK09C**mP0_>KjEO(PTBfWGs!k zRXf*W(0Z#%bA)4#nTKO9%bek#QL1}?yHLr+8%snCutEy9PXwD6+xkx5I=;?nZb{kT z|EX-GZIWEkv4Ed1DDOOPPF7E^Pdik5IGOvE$Y<{jOo)MS z^=#?F&@7>k#BB2XT063aFZ?ad%wacbh1mvO9Qh8bz6qIqIagN;8xyR6Tv=exD-ZKH z^j11ndgi3f%C*W9?s@AzZi--vGvQ6wX2Q;}xK0G+3(Rso?=Me#VfEKHQbmc+!|${x zQx4clLof~n^PUU({;YqFeV$-l3SWaJxb^!`RBtaA`|Rv~%amF>&rQ-KMcTJJtoQPt zSb7WYI*6>u_C>FHSF(|D*sswnig@H(DR;Q&ExtE?Gc_% zsl~PiyE?WbrEu|R_cF$;f)EYE7A9ylqK=h zE~WF>;ciF~vBk~|5=lE*vCy{krI=bw;roKU)<}ix8U-U!ktj)l?;I^G@nKv@>?2Dk zgW3++1F3>24a*$%#^E@VWL!qLK)N?K?kw2Ao-(_Y9q?pwOI;sKB6w2#0}ZcgGhO@J zq>|#k2G?CjCu_~Fo%<{O@!GXzau$=kj+d<{)6}U)BUhTbt-ansV43e`Z;^?PMa^=X zZ!SFW(U$9uCJW3Li5`L3$V@LNB7_<@-4EUE;!bx`h&_)oW_}x5PrO{nxW{W^BKLg9 zmxwzx(Wv#0!CG${-b#cO-iljgHLSnb>+5#BAhpn2jJ;tD9Z&W8B(D=Al*A!OSo7m| zvw7)-3GHs{sysdOK~D@V2%bDu_JOTRf~li8k}4lt&Mhs3&#e88@cPvUZ8S5#EKbVE zUY~C3F1IN+SYK9-B}Y=>U+;lOi$d6v_~b!}TlNANBOPZenVAak)!NtBl%fcbL%s;R z#MIA7LM%!W9H^yACUNNa#g|kjF%TR`n1!5OI+46GExE5fO}LW@H^F$AfsABqkc*Y} zhI?yl`|fZP&$0Qr-*QC`!kCn-{SW*%Q4JVcYVCKAJ(NzKmdGO^AB z{|K22G(8QvqBH#OqVxwH2PAWLa$}r|GqUv*;Rouc=yK+SwZ6L(0k%f|2<@hZeb+83 z{=~l|An4r-RH?K90j#zH*h5h=y@WHq6NN-mK%Mg##M&`ye-32eM0-0Q{q;6z--YsB z+OIEj6=W;+oalX7b~I?Vu5xi)Ua(^Y`TQhk(*8OS`mPjZ);7lJr83I^KV3g}GyNtA zJ7^C$9r2bLkUxHqLj?LYKF4WBS2ezSi(@q=F0yo*P1O{}m4<}BEGCq~^6rgdU+*VM zr2=fA3{sTq5brxIy@SNOT*~Zc)!0nJ*bn7|8$t?^zRk=u3BM1O!6u zDfoHJ^YbBa0zlM0;;fR!K}w6EzyPoz`_?Za_(+p<0&a zh{kHcXyZ-FRA`h#9rtI7Vl22?`gBcmy{=l^mz6^Hkuv_ph!Juzdo#xOX@hG+lt?|+ z?E>gZg1h8hy2#V8*FuBI77|F)(LYQ(?+a)o0d|EbjNP9jyzQyx$R#H(gF`4m3gt-8 zu0?CESBlc+GJ~=_3Rk;`F+G`!h3}Pkyfk8?q9{>?tQOc&*q<1Rx_?@a(Wr`;$L=hu zp@-%!*k^f(fxo}tQ*m608tltWYjc(Y1_AID>~y%Q3YMeuebqYpt6Qu2hG!pFA7~T0 z2wXr4;f};X;dQo?#nbkS(`sCAytUCPVzA!dS=+MjLTLiy2#CqVrSP`L(k1VU~f3OC*0r_+8hy!&2}NV zm)R&~OF$PcjqeA0P6IMw3uC*@;!B5Jg(i#AFewnmOY z^9SX>gl7D-0DrF-%TtRQCM@17&c;LGQ$zO`A$R%b%g4JSs z7|`e9qMWHF;?rN9r$SiG?}=xOae`6ya+8@94C^v_Lfud{rr@=P3#)neZ$-W^^rg?O zyjU5d=u<#m&F?vsSS=%3K6ci;5oeJ=ni@)^E=|&493iTaZ(~d6H|__&7pli{$bu zi2sO?nNkx!bMe8)?fBLQBfM+LttPadAj`t^Odb=$DY8Mb+jBytuZal~3&5f%S5cX^ z8~<{2nQ{|7S}C1lHY^VIeyDy}MVyyF-P7(G3%_h^;05h_wn(6statEWq3{JF=|R)E zJ_05TiUt2Fu=wjn2Wc6a#%6PSmR(i1uy5dryfORQ*M}R2(u)0Jh&)7!G|<(>>Xt7}!-)FSz<@_$-&O0t ze^9sF&paRhSftsFQA+vtZIh7sD%`(i>1IwIl-8?hb=IHd@Rf{QOT%L0dWG8+hl)ak zRyx|>psOd4WOrsq_3--W*RAwL@X*&0g9MWeKFxo+3_ewn3a}l~Y#P1<1S=$? zzatv%ftk*(DeUnE7IrtpR?FVhW;|~0LeOKC18Ik>ZHZg92Ln3&s9*g?Bhx{KW|%Z* zRdoA_!eA;sr;&42!NKVLlan^1gv_z~cjQpUEP68nCnt$*f4|#LDl>(dEQ6hR z)6*pr3}{}&C#3WE3%JTV@%0Y#J1HocDgyDQ&g&0rcJ1*eO}ha>xeu!j4aX@tdW@@b z{9kbQjRo#+uH0>Sy%j+Zhqj(MNiNq-JVy0)t2%!Rl8B4F*;;X;J8WZU!!&z6sRA9zUF6Fn_|bh*_q^e>sZ!X z68xou!47m*Oua`!Fr7#74CHoPtQYI6)HN#XXIsJUKzJLlJpJT&ukXlNm;EMiHKjOM zf3dwkIp^nZwZTzFjSNyTJKJCZHs_Ma^iR87sf+5&$*HxGvqsIjN#bbaAUZT()^sYcL?%c6n?_9j6si_yU&v5bs z_uS8Q{WpE+KuM=d9033*Ke88>xIaIrLoRb@VOI_;>?(Or`p>FV;_8yY4p8wbA*azJ zz4Z00$K1BsRm)G@k~c-dth7;>a0#F1mznspWv@ci^yW%4(W{l1ld$3Eo?aA|fZ%o2);p0cXbz#%g+n zC8yrblRv`8X*`*ZFI;H@-Zq;X_lrJd#tKC(E-KrXhQX#VehR+otcG3Krnqspk9v|_ zhWgoxn}{%;F{rZ!Babu6yfUH5E;RNqA8C6yp*~5n4}7$vzdOVCZ7DZNiRApFtEF+c zJgtE!v+tL@S+Jnj3ad%-MxceiyXYN%^tj!Zlxub)inb_c-Tb@rn4p|3Ms_%9dq#*h zWbH@JAwVT4JRqVp)4LwYBQU}D0;W*6{kOhpTF8hth6}s!|ElxrR5UWELkV=^)(dGi z7q(eA>as4KK_^3(r?+^d#tW9mfw&|vpDoRnf8Aw7wy`CnR0_vr>2dhjdw^#XZT^8f zXmM`Wtzwm;k!K9A%A#mtm$;wA%;JdeOmwq#{4T~l_W?@;=$=8rl}?z$gQBg9v5;Eb z|D-Vd_{wqgl4=b3S2y7g^TPSK9QwK%OyMa%>oo93#CtXl^rLvf+A7oAp|{n* zsAIO8KYyQ++eEe1jtKvJ20co_4fx4EcYt%@G@9aH3a)I99=-b!OA*pXPX-<*LBE{t zck8qTa^0AT!D^iS4ZGZG1AF?YI*+fI-!QW_=6_Mk{NbaF zD8BTp8Snoy`~fC(@Y;7%c1>oxSkbVfj@#?lUHf=vLAYv1Yeii~Ehjt1g7|M=)p-Fl|)$rLn9{l;3k8bkaK;aFu0{>d<0Y z5%uEletLCC^l&RuJU&?2zsF^e%Z9XXp4%@zl?Nh(^ew5N)vbGl$)HG~>-|i#rn}Zy z>PJj`Py&Uz1O-`s^^3))fL)6Ndr**KNm6s~w zx!7rdC8G6_qbh(9`^8 zTyEzby$UD5M|T!i7`42qq;s1CP(ziWbyl-GTC_57=k-OwC;~KVm2y&rxJ1m=5TKiv z?MOyFs9#~iMbgmbbVYetpj^D)hSy4LB$peN)%e2m#wH-{dao<=WDlmD`*p!gY~>u-7J@7W?nFO?+7^yG$s z9zI-Sm+t^m?s#ICy}HTAnt#5B#HY#tu7xR@v!T$Jnb6ml(2VVg0ErnM0zfHxI^AOz z7S@~6vqhz_H~3=T)EPp)`f}FIhvV~p8CHeU>M($-hsf^Ehu}I~{WXl3c3pIWiJ+!* z0F7+Yg$ju9{MrJW2mrtK?D~d2u(P9ZKds%b_SoKPpLV~q%nR1T9_nGYe)|r`FiYh+ zTFlIqMCqUC!ut7DOuV_!D#naOc~5y~Ztw~gI9|^W<_Fhkq6n4?_X7}C8gC-!)k=Zx zb^SDotH)i}@K{c7d-J#*0;Zs+?JQ?&PJ4I8x$RgyeHlK zDEC*P7+Mi>acWUTn@hvGKvMa45u@9)vw%cbYtuVN%zE=oHUC$p+q$!Tc*!8DHC zWFD9vR#SIIC?104c&W|Qxt{i5U)sI0i6=f|hPuvYdNTeqi13&JJZpiGYR#S{WZai7T2h z?+Hv-Wi=4DA9d;WE%=qW{)q5#kLEI^dViF>)A?qfoe|}Zt~PofrJ6U=wOXsgbREwr-^egu`>wup z=vA;Q+fAg{;7WO&@#+~bGOjA)lz((J6W(6Cxw^tg2<&seackNsjGc0i+oP+Ti#;?Y z+mjLbiopdDJ@6d-_<5a@axCk_yt-=pK}}Ed_YxFL0(LW$`t}5r3vajLWar-jgeNQ{ ze&tsOOv-r$Z`5eSu$}p>41MJ`Z;9&a%u`{17B2|vb@b2r{iA1- z(g@m#dHiWCS}uS7^RM5Pxo*_A*do-zT-`9XJ}~>c?ZiOaPufslPS6t+3uN0Tt;~+) zkBQPCH~t~#W*@l{cBh;sX;s!d#Q909YVa|>?<^`#-5vAa(}_%$?sn!SBWLG&@QguP zbKz2B`)NmOSfDhL!C0N{rmv4|^R2ud_A&;xPnS_> zUme^yCIL?oJ=0mQIfWy3Ytzjzl!X10uCm0OZ2yWy?NHUz(`4yi*!}Xo9Gzcnx-6o_ zoTtAVV1ujX5dE|^iQ^GjnEj-V!goxm>sKa0HT`@p+5aM^X@=NACP`v7z zSLItO0&SUTGVbGv*rwB-*NFcu05}EV;&+_1>vrc`VLO-7%kb${7+=aUYzua1^4R)v z`<`K8NSAx@6$+unda-;#JmJ)}TMuO7mEl4pPZD9!q`@s`dJCZXvNRKn@1O0zk8F=# z&oUVz&jGhOa*3Q(!W)t&>m2)zo(`5|H#yYd6nWO(wIgT9#X_1>|6>W*YvqvZh+JiQ zj48}DviB;;&nj3Nl*IU9nQFL;8xIK$?kzzB{Y+z-nL-elLVe$+8s$QgsT#&5k5#s7 zxYr17*~0n{0uLq1@3roHxTdKqL^M8-y7L@9M3ZPeyA&(x zvc)l9xRs1!e!{3bR7rbYb2z(b_2#so+)~kGzXrTKjVX>paM?|#4}R%?7t0l7z+Qwp zeXNSXdLYwhz_uGm-3_VZ+y0Lkj*Kc+_P8}~u5RFqftGZ{7%##8q5PT@9lMWEmJX$t zx*m&$msNU!neDL@%5*nB*7UQ))}Z}#0+;2k5Isf8XUin5AnD>ioqJ`HbiUS-EvaMUHg=U`AX>ViOAhQ=Ku6=(f=}^Fb-7k&pA|`gPnfLyyB9 z9Ef6_FeQle@!i_*3ouHc^Ta!x$p&x5OsfwDgT;v$ZulNX@VT2N&;fs}xp6*Hegia- zW8OUV!FF+%T-fnhjuYfV5uT1d@_T$nE8*zzI$K=w@8Q+Whj6|P6P&H>PlIey+XH`pGk3ocmqn zuULDN!sS~Zb@b|Ci>f13G=QsLIf}l9{U6GuPoF=6q=?Z=&`q($%nCqK48|MoG%@=a zmlEnJKvZSmb?4{!4T`AhRd3Vi)?YI*Djl*(GBpr|(b(b`YfUDPwahnJ7 zxc7G?w=N)weHu(kNriZH%f3s}7?Awj{}+>AT4ZC__#qB z3jR@i>;bW2Z*vQ|0*L+ON6)JFYMq>Nu}4eBhhMRFkUu|X!Vx%;ZTl*|Bovq#C(|-h z2RBNnpwkBpJJCZQ_Q1#fz$59)jPXz~Pb(q}e2aRs{=6J$bUQ-bX;2vtTfk)@1w5ev zcSUDOzq+uk2>Hl}uoez&ngiqRX#sAXPqDGF&sPd)7oX_?Wo@UDY%MV11dEfsef{~z zjbA5gY%;K`ku&b7gQbYSqj4efB6R5E)F76~rcPf^dnvWWCuP?H)E z4!3$Ct0KVq`mCuLoTK}LNE(3Ul*WUgW36bwk@j|e;YbX#hS9D6=g$M#Z`_BTM#djwB>eAdkGH^- z)*Y7;9Wd#;L5*fyPSVWMTnF@W+Jr0c(=50NjJN{N*YTh&A1zdMKMm$SMlE*)cGz>L zCy?Q1EoR8>3(!70H#N;psZO$xJ9Wno_UVUEEbkw(^rylj6E{5;|1v@HSsBP#)>An) zvKHcW`^d&=S^hTB56AJ8U71uM%Bb7CX21rVf#IlmPKQUX0*kiLJtMqhu!|_tp6i9O zE?uj&`SSiIaQXrk{enDSjG)mu`CzFqXDai#kp@q2;5;wAY$V z1D}7LO0mB^uFE49A?u<*?%5`1Uu-qxj^aStFXAhHW44@Nm=(v3LSi$xaqijE{ARNx z>DK#}){Le;?dB@d{kyaZ{OUgzY(nPoVV6wM>ENRT3Scs^DG;MskO6riJz+c8H30cZ zIn96V8XJswq&{sP54>~tyt5@C!3k`kJXIb33NQV`-2%EwNx>rFiWEyWU^0`>m`A2M zurra%E}8u--QjiKYDbDJHNMyGAAw54dqWcpMK*hNL^tdbrt;-w73=1Y+=gWMJM;+- zJ)|e_0wH{TBVMB^z_a*d0_G3i(6>9)SZA%bFkw-Z&$^^ZsE>U^I-y;4d>kUJ`s#QQ z18?dbeDb$2;PqkfuTRQT@i_ii<=2?V^AZQAq{EnkEzjqZjH4k?`%Lo3fQ3DQyDz|cw&05NU+I6+YY28wIzK7A1!;cI zr_Zc-+kwj+2*@IQ?2&u{Zl0C0CVwdVQTm68NeD?X9c*BhbU#p(Nxmnv@SA|zOpYyh zFM}Gx76$wEWQUut=w!|#5Ev!EGUW-tA+R?;SwvcRzaBP-Zyz0xzkcu$YcTlNuMbn* zocUliwI1$5z;7^20aG6xe@v6VK~70+=I1TG{$ufguGqJ0*i7PxedNb zJ7~$MjOiP1zL2oc!bui3ygcis+DQDhkt|&A*GFcCcMmD+figiYIsc#nQYggHPJt3> z1|r^p#wCFJInTIe&*!a*)f3w9(J0Ouic2l%Cc6m$MVaf0chE!{Lmk8KMfoH4H!H(z zD|7GN9i#29%X40hnq08W=|v_6^u3Scom-x^=|*=qLe{3v6GQ2uJaiG9SSo8Y^@~ab zFW<@I6213cGwV?hbzC#t?|Py~>Dau}FO!8O^6I_1NZ=VgU)V3(8}4yk@Yi^Jeu6J9 zm~g#L`}XbK)9m{4!TgwyfJ=mnl08|HkD)aXlW}li_ik-x@?EDWVfc@hba{aLB1E>= z{ULUqgYaA}>nZ0?E37kVFm3ZX>XfZTVkHs^pPuU9{rEbcZ4amJQO z#91m6povq3u=Y?)3Q+YD06}Cm*$#Ygk||T&6y}v316AP*DdJRoH2M zF>Ozu65dVDA|SRQuIg6fXCVW_ylBX)7FbV}6E*{=CSPqF1oV69Yt`X z{v6Z#30Ht*i#A{Uq)ofCvnc&&X&!d@FEBMd0q=v6B{lA#$oDG|y80YUz3*t~<-_z6 z+ZBn{eg)~x$95GP6lYxFgLooN`9@DGaWnuXpzTUaBi3pXbuQ(r`CV2dD(F`#m_bTkGB1P1@1QVzLvPA6Y}S=ly&!;>X<{6 za12m477lxpF0^C9J32VjLOiAVPjLfp9gj;)-prPoEQVJLOA6g;RnkhX{X&x8ZG5badA?Sm7Na3u*N)^Yq#YgSmGAQr?*B^ zT~*a?hxW@kuDLiB<$fZBzDjZGW*d@Pr>&D}MfV1q|MMW;T5Z#k#1_ojrQBvy5{r!2c+|%7C)xIcNRRuTMt_Us(}HUw->Sy53+nyG=YbaO?Q535Px@4sbep>Cq4f7cdwHMKyoJv?9nwV9T2s%{0?oiE1tSzMS& zAEdzC#1mw>p$?VitwVI-bpLKsIV4d{r2E)&}$-_7zviU7~r;Y0?xOa@m&vd>H=cXK&r(hu;q2E@sv zA6dG0mAP>}iGSXUKZ5<`$~)|*^Hm#Bb>j8wr+#@8y&;V3AcD5HGp;-Q;Ui&?D3|yW zbLzJ%K?iyo;;Qf}G=;8ZQO~&mj(D*499ElWfrSBkKO!V+#2Flt#YbmX*B=Twxp13; zj<5_Sj88p|o8|*N_*&0`U&;W;ds%(@kYPZG=pVtkisyq0tXtjFuGw*^o2*XFiU&KZ z7G;4ZO{)mkHTQXwlm8;yQjxx!c|Jl+n%cYAV3#l?NSfpNu{LnxbggZ!Rur3`#MW-Ca=+%^rK3p1L32srzkejf7jvfKv#wj2 z`>TV=Y^(nblr2tvFlxH2@pENO2H;QqC`agWgZ<)Gz0>*$9*x+>f5lf1()jpDkvW2+ zg#1$X+xtbi*ZuYm4({NGrFpm-hhR2C#5Yje2b@*OG~er^^ZtO1pk8(VoSMJ~Cq!9i zNf{O>V4POMgL{)*i(zw+EqCS(yN3jD+ z#<*H_wGo2PM^+Sm$yV@#$WGddraS*0{#j^BxBj4TB$YnbfFMJ$%Lw zBmZR3XRg)-yHqI``_TlMa9FDCMNjfPTHv8YRj4$lp#sqqq(!I>5VlLCr9?8A^e8>h6x zz)N9+s{xCWR&sje=T6MP@a;oNUHZv(U4JPkC=Kg18;$gFeB~9)_b(ax$beK0fC&Av zoegyt5D$n!mQ2DCYoxlqvy6T2uJD_G8Z=mUn|~eOMxUQwyFf~Y!2tetN_BAfT2Tc1 zwZLzI(gWdalMCTQrE0iWYs$RyE$C%3MNB;7HeA$3kEO_zGpElTI#$r(6j{R=S3TnmK|O1ghj{Rmtrz6_3u>o9-j?lUN3XOHpw(e>leDCrp82Ni?^V9_57V0nwd zN%B_-uNZ5?1cdqO9Buxq19~K|O9sV@1|-+>=%Ig!SsFOFn=4+{n;Pm-MhbRCk#|~y zzRz9pv>3_$RAj4t{q&Fe#pl`mn*Q)5iHTcFu5ToyujogUz_1Ztm`mUnq3eWuyvctD zL|}2>ZL2bq-iG9#_dk}`U1g&D8OrUaNe$m&GY6wfhp0n5~q(`EWmO^ z^KGn22S(s)AwlQ z^-XUL#v5q+#lsq-vrbkviZL!is%ci+N(sT~I=76CludR8HZv8+sF1Tl`IK~DRk3O~ zl<3w8`f>kBDOlJ&&v2EA>5|dAh{G&X<$Hb(ba%gK5X~PPk`jEgIaY#YJR2c%__blZ z?q30E>h|64`JqNfnF_W=xs_a*-``{(UaS=h{3ET|rSwdSsGMmQ{0rpkkf7fVbl6Y* zBgrAmQY^ZRO(`a3uo1tgtYyHA!rq1K8DY3IS;^zEE|TJ&Ok;}wP}5QS`oU$PtMr`O zPRrX-yPZ?(GUhS#K~m_h=F|&TC0}%*3`qK29qFu0_RymPUi$k&V@`5I5D$R!WGm21 z*Qe3S+52ZcW!+_BJJn3IkjW>0J8J38@U&u|+AwPNAbiHR zjFiA!i1Rz%i^m>LHmoL@Dus9zQm^L?(imc{Pw|SYdzNI7NyDNTY&Wro;nM{gaX(p< zf0Py>KI)~@a|9ky_x-wE-4S1#$6$W>xbJ@ney`U1D}i=-D+%q3u_K}&KrSL^mTn#Y zu*JI0AW74+|J}Zz3YoTFqOhb%mqAQmEb|bAMXTdt2%GVG4<41YT<>Vm;bvq1+Aii_ z^GkPFIKuB{^=8ia^<1o+Z6UY)Yo`N8H%3BA<*~;>yXPSgI5&a{m~zm{Z}Y` z!!FsRFMUu^NxCDCdo?CU z|NYsq^Pi=iG9)v}KYRw4n!Y1_llW}hBT&Yyo~cGUHnCQnnClyh^I74>+bUU@(k z<`|pRQFv2>wM|#V4`Q7`bM?!>&%;wU_QMpl;*gic=@Bo>-562?%IKWc|6(TpCnTi5 zjO_2^zZ%=n&`cFXt4)Z6Y+3p%@0S?yNDrlXa1s*s(9FL^gAp#`q4FgUQP?bcCJ902 z{(-YMRwQ}-O1YYQkdUsal(pmAq8KE>%_j48MP)7t=Lu45lFGRxjC}lTQjhW;1`U*a zgT+l@XP;&9RG;1r3Zew8T~QS_6+X~Czc`X2agZNZcjyn}V(7TahbqzPamBbwwZ+}0 z@cr{hleOw^qc6XQjGcvm(LrWN{&>>c@7p1U%!V79n8+V3v*P36yiihh9Swp2FQo!% z)aFXG-|)JHMJwGr?p!fb z&?PGa=op7oUh%Y~OesHXy=Y|g*C6=7^0=bjq!yU)CT;;0%~d?3=O)tw6U^0ZedJLI z=w#ITfC@7yv0{fA*pv$NP2h38YoSmBgI>Kyi|AX? z8E=QlNI!0v&KuIBBV*2O`nbX{(=8w_Z8LMbU8pHYzeQ){gX#~FzN!yl>i^EOErb7V zC8Y@=hNx|eO@Ch=y0Yi)hlp@$QY7&yvK|e(G&Uf7Hph!qvmvj(f_NW1UR(WBGZ9F!;V;!i^boQC zKNf&Pq17LpIumE_Q3*?fUX&LhP#kkO!WV*A?~zy(VrW?_Ij`ENP^6eNX>TI-Jn}Gn+t6M7+S6VbLBK z2&~5Y4#W-OWNB$>CGdG1u}CZB<2HG^iC%t{`* z=hEz*Uy(qs1Mm0{y-#bWPdS}N^MB=d@8}Yy|C{xjUkbIJvpY?+AP%+XSu|JB6WG`n zPNK)?z;nKy5#h#v=YQ$zG4c@weEx$W)7_`$cZe$b2Z0;Wz)R81`Qi4WSj6SaS;Bk) zojyJ#I@dyKH)L=f;S9Z)vh~N&b+|I)9Kqb&*md+2;V;WR0ubVb61tiQg|u5;FE+Ur z(f`VQh8IZ@BX(sF-nkTzepSB$s?J^M8}S>ijtj16B8vOCfaR;UbKR{Su7I2bUi8QS z&?UD$T!P+vBivshj^1;+?MZq8A~QC$KJoMubcN3jV4`(k>52~;Rqgb#81@)v#HT(z zS@lhktbAARtTs!t^mxPbVmOuPo%q8D^N~iK(oYaE8szPdr*}VXyGfNH#bgjdq9jvV ze<|aMKpOKU`9|(MlO_YEQ;YP+OrTq4fVen(qovdMtU{_J!)D@j5gW}J*gBdL^@H!5 znqd~%ozH7g(03@}Z)m6YzeCE)!~Rh-oqE@EszfpQ&VVFKOrMA@arofo4|O1GAv|XL zK2OLaW$@z*Vx#KsylA|M>$=Z&>BE?>!KyFY^55LK_3;}}l@j@hRO_UaS7WbK{``Tk zrGlvg8##s{WsBczZ;#`LmoU1L$j_dq9@rRG94ab_5`X!K|`hZ)Sq=hk8ihHOHwgVu~+{_0#pS%CBQx7^aGV_Q$CctXjyZZ7{ zcz4ZEoS+)DBxjqPWbk^m&&Gc{u2^|h@ot*zj(=OUGp!y&37nV_PijVV6LfJ!;L0!K z>1jH1_pNb?VqVznH~j>a5Qj`GI%K$libbZU?t=a9M?W$a1wAt(@Vj9w$c!LJz~io) zVpG8%Sr3P5h1$ta5i_AkSdmPr!h7a$?A8G*ddnddZ^y>b54h~HPHWN-xShtVkj{(*|22RGb5G^kRy+z$ za!Kpmc84=l8gCP=5ta6;m3fQK?y~V*+=Iz%h)mU)Nwp|yuZlL`(AE9Fo3-|ha!>f3 zM*#dBIVUkdpOm1m@1H2i#%>_G06`r(1!kkNTE3~g@a^r00k)YCG3#jEp3IzBNp>jI zK=n*8@BzJxZDI8#R^*A#<2E?W#42%zFtG7Yt5(Gjsvg;n(0;7}yQ%r<*0c{Od zPvi%Reph=E7~{BRn*{vISt!u$6=QwCN{1LN3oXc$E1jg180q=$$d`=Y8?~;hUw0g7GoV zeY4Bpu~X%9OV=Xe8m#4Eq4|QZ>aW=6)2pMmaJJu1Rx#xkwuDOZcPn1j&{54 zjbhhnDAdB3Y?*p4aQE~kye%-)H;lkYo}Ag#KKSIT0~%VGb>2sT*_6I&LXSzX!pf&> zldV>}-4FYuBEG_1!mm#+o}2_mwsVGiEPfW2)22Y5^e4$RaJPJ$`m!Z3p_Mu=lVCXE}7S39!gpW80S`NbR2%s#ckNS4#6%8 z87SW^ur`j`qTPqoa0k$`np3GhE3C3b^YLYIhlyUtK#bNghBW+hur#c^qRu{4+tO`j zSvFGz#p+1vF0W^cHK1#7-omEkE>466guGTT_gJ;A9zy3Idv4v)s{dUfL#OvjAq zf?g12T>ZrA7Dyk(Y*bb3{0K%)PHO=jD2oH%gfUZ$TpdeA7;O91QI+Boqmyx}%oeoO zCOlT^e1zGo7SKO&N5u8liP5X8E>Qf{4o71biRf3^ts>fZ!s^81B#54w86y0c`iDU_ zE~XJ4vS5d)DUu3wP2cP}+;9F@(=d(uxVljO3Vh8o+g{!NnrSRYPnBSxhthJqO+ebv zLz;3ugBfMDbAoq5-RZ_k+(*SPINBtn?H-y=!x5EtzoK6CWv&6kc;=^Ni5SD&wb217 zQ-I1?4@XKz*399HR1YGC#FYKH;=Y2`rGB(Xee>y7Y6KbJF7@zqucw5E$W3c1ABlZj%c!zQOR|Q-mjHa)ZjQ{p*WU2Z2zUwq-DWieRq-S={@#db| z`pGj85phZu$%HqNImYQ4B0hO*9dZIh)j|ybeLoyBG0`KTL2i}ic@i?Po6IS@dd|3_ z<~g_42HXcFV&-z|vI6||K1iAiyQFa)L#?Zg6O)#0-P@0t*PJQN#!aJw?Ft}U%k2VJ zO|0jBcIV=x0I8948MvIxzvl}+#8i#dvN!g(6_h`>-S{&0;5!58RL2>1N9CSG`eZ|N z70sNR;gZ}3JWxl|3(~AKZkhK#@QTn2b`Tkw73FtblY6ycX*l@4JlAhH#c}0CCY-^# z^BkHb7sNqx?X)o2@wm-bgtEcrz0nZ((6H+C*yqGe^EGLNKMz0JrUmjK$6H}f2X8=u z(j}0noxYS%I#;F^G0Gq=Wlk$nL=+iYthc@sU4N94cyHnAHu{M6`40R%9Jt>g%DQxy zt?gru^EgTWl-N0ZZp}}YshP)2xA1&}cwTQ=zb{+A5K-qu=h3QO(b14{M~2enAz<+` zCm9GGalBWYATY`WY$X}3GpJ*V@DVsFWfKYK7CjZBqcouUF@-wlJ{hl*VPG{ z-P}cY++yFnkUL@6yF0kB&?@)cY|r~1U^>Eps6;M-g9Ogu)9ZH3-SYgi^TOR2ep=2OwQp;y5w0M^q1&nGCtt#{b0h;mN@YKV6`Bc zT+e$$Smx79@|ceRQdT0LMKawGoVetDn0ibl6#qF3sBMS?c|S#hNC7(EfhMBloswkU zPb61%*q|p3D9L!&>J6H{E59FmuqQ{n@iR?9E(g2UDM}wzPt^u8g2&SvcEu??80<~a z-fl?1MWArNJf>QramPmj_I?wUGb!0EXr2yH)-OngG71f|p=41&%tBBYD@ph4iy@(1 z(Zp0U%zSUg_kt~k^Lz`qEcMGEdk8tJqW-GIAl}q{U1IH|{m=Z5ACob0HzAeNeX*n` zz@TkGZM^h0lLhmwc?~RDz9NJLAQCw zOX)c#E?^)+Bh*(}OjgONQlq>EOL%|Kg-tLRXA5akI=?Lq4kpDpH5X4SrWRgkA zcK+rScT7h5QdPop*yM8vc_hms@;o&fkk@}F1@KR;6WG~^`4cJfd_Vj?`9LNoNc9~9 zwKm)!Dq)j{?u;?!b?@iYU}5rTP-oMJtgZ5q(tV6azx=il3f>`uKGk(fGeXAPwbWyG zFSJs&yZ7x*_!dr(gsB@lT9*VGp8fve#H+sN0Ax63szH-8bn;6F^!8z?AyC*`L=6K` zRz!ylKTAx3&(WNdhLDmTb1Z<-AsJoMc&`W=nN9=TCyGF!;}H@;C(3PWTk1Zut@LPb z-;{Pww)&XnlQ}~{ezq0vUg3O9w*wE9<=uiI@)rLiWOG5~;n$7$eL-0%(!K>_NTCNt zSDU0gE%5r5(RvRgu3B!f!o_n7n#BGNzgf!S;~4u4=J{!h!nWN4E^3c_k=y#sk+-@3 z-a6JE?WXV;-6HMB%^9p1#A3f4QaX7t^E4Xy^Ylx`iKOkT@sxh`uOD-a*YJ0GtsT|_fz`lEzu?P!v$1C zMo!ccfsQiF_lxB7^p!G{-nx%Of5gz%)4tz2l1kx;k#gO6US~B8nsu&Jq4YpnXj%6LLd|E#)?OE5{SrTJOMLZ$K&6*aA7 z%*~gdzThT*)8(6k($lc;@~rT>2OCLC<(7rG?M~35(C+S&WwxaPW>ppXb-J1lWQrBk z`goG|pL0ZbwKP^J4N{XA8j4lC_r2UkxA8$+f(vkk-2mh-eBN(#ezZR9xW{3rDzc~Qc70-G<-Ak2kSUG1`&f50_hf@C z8r20Uew+#uEkotA=ktcYRrZtRH-bCnGh6dCQ(_Gc2IbJ+P=qxe$a4^zecSpM>X(Y4 zSux(gWp`ii@%*hRE0Zbu%8B~d@R1UD9{Xe=MVG>6r_D4f{yU^?g9HHJei(AYe%^e! zJjSfb=YIX2eEO9Z?@*aVsHi??FyZcX<`CfPsLWagx0mK8&DQDtAG2PAqW^l}Ww_D@ z4gV}#+{A7l78G)s2ml7T#_JXn^&s_Z9B&5AUS{8e0(USH zfg?*B*45qiF`B>lt?sjX!qbPC=LGdlDFv8<9oiPb7EWlSnJVYe6c^|hh({77SQn)Q zEj*;D!IzO&6k*xuz^s^ktgcYgAA!RfgKX1If;7sG$d96Zy|!1c)wfiVu10eyuNmoX zRNYd@s4=FDQuvsOGJ|XbiGLH1Ihx*rZ8MBmm*Bs!6@8~;UvSmjYmL=RqE2+IVIl{c zW@0jnH9jIjc%)P+ka3sdb?vlOXr-KdMQlY30eyP(cj}2i`5K(&eLQKp&2($M%-Giu z`ZYbr9{VuaQ-^4t;FhZ_Q9yfH4cb7+1Cz-h-eg{UUnEh7;Si~}wbR&qui|h7=Y+g1 zp;9Hoqz<%r&qFV^OV)+FM1so33MeQjM|3r2#4l$jzx=>z^O<1rHRE@w`wt=Dq zkW7#%i6D}vBAJ$$YyC_={vv&g-ySn^?jH1z9PHIl)!BB-St<0lbm@4333ED2^-F`Z zkbN3Hk=cO`H9ZY2xwK)P@u7Bkx?#EdrLi^HvROMNZ>^~^#nI{6Zwy|f&gAnPy~qRZ zaM?vx1i5SHw4Nk+^+cNwYMZ6lS$0d-*}uyjJ-&j_M%^0_dT}DW{ra`bJ7r5YZ)xME`EvWk4c(%bHrr&jhyJ zPfS;Res?lDs%nkciIar!`Jl4_CYDLKuaKnsiqZ2fhItFoH0;vm@jbRIDU0*xT^4#& z>`0fu0JBe9&oapsf!WmQa{VE!f_6El9KkXVH>4;%d);qqfYo4=AToAo7` z5>%QCb8Dizs_6&r`3zrAAg3*SJ9Pugi~^bDNZ&Jv4aUYl1Fn{8rSzN>zjuf7?nY-E zpYJC8j&vZ$N68Dp*r`dGdLU%X$ms+DPYKFrY>*^{7gq^L*pU7@*+qd$I=A7Kys3vs zGDT6yE}=jCnrf$j<6ThfAwJB#!fu&2iE054Qz!729ZO5%t>OPzDdG90E)asZre@sZ zVcUxx3P6}04*ko5QjbVs)z-NlQR~zZixO z+(RRi+zbYkmRhb=L;!d{~)-#HpLPEhC=0A$CIize|1!^$cSOGY34 z!rAW$w@5gwhJ}D31eBBO=dH7iq-FT4#mGS=!*9%QmCHuGE;+4u`K&+O@8!O5xqg1+ z&S9;Ue7n?W*MWlA{ptSFW(7-N`RL$~ZQGgZdTjoHurzSzXpODa1zKs$Cu!IS&q80t z`0h*L?tyX=VYZug(C{zRoqEQL%2}4|u`0pa07q3uGLJhcHJi=iumcL@PT(U4B$Uv) z3GRNVE#%HlI5ZoRQcEVm0SPMBP;q=}D{Fm8RPX?db~$T9);SlVK-~8K`q%|@r!Jo& z4L75zrBAkVjZRR)R2!y_ld9OSGu#$mAROi?#8Xcrh8csO17X0RZ#i9JB@D?T z>-01YkDIe%V|x0-IBi;#{S@Nq*B?;D>ZYFyOeFBw=Ju$(ErHAdt~USk(g3s+%D z-{`~ocJJ8TKyR{nBw;j3q5T*vz@3G?=}}Na>jy-J{OyU>4pBLXx1$yXlkn(^@{u3+ zg&pl~7Sgc?!v=C7DnqgFw-W=fp4M6hQ;B^%Zec;KEKM)j?US2YWA*N6Ju4E0*jc+Y zt3$_T10s^-64@wNT zKIzo%mH)0o-cA$rtL&S3?RILQ3sjx_`C(xSFyVEL*_7F81_m4K8~Yqb&bknk{VJPW z@to2D*AXtOn)(G!y2J>1f3ep&3~#qi81*RIw&(^vOlM8Kn5*#)h5|m);WSFH&m+oDnxF?UftC6t7u0jQa*5kMcc$|x` z+1hwd5E4E8=>r2q`o?@bq07GpO=+JW&T<`pl~2tu!y1aj-Hhz?-->M&s?{%;-RA-) zoD|fOjBs7BBz>P!fOgQhx=I5|vp(c_EFS!^zsZpl=#tpHx4Cs2C3)Ol#DPqT0I`(|b|O=hhvEy~|4 zJ*Ayo3t%@4erFY+^+P^Pk0KYq5Df?}DJ`Awm4{};ek$MfV!oX1@2{xC`D4=du?>7k zCG0+`rM#1`eBkgRHl#b!fB+#DOBQ*vPvmiWNDa;w7n}mbqsTf8&;bTdbe!GRbg=S8( zX`j+UkNKppsc%|+-Dm%he65E{0?4PA`>b8;G2ZQ+ZSu8GI$8?cO&s-hh=gk3A8j)t zjemD0xC&q%pdO2JCFf2Q6c;HoeDKp@U1-a5S2iJ~PRn|kZVt5c`%~kwl9<^5vAQAz z(lqz+7-ED*)Jbxj>lrMxfJKN|YG1ct4WwfeyR1vF9e#|6Fds--jls%=Xx)w&nVXDV z2ciz=5)G&Q!}Bv>ykxc$2_oC`G83Kn3%I(Uf|R*;6)51v5XSKFu0-biB&cz@pNzqw zss!M4{R|1_?&>S7b`VxiUY?j8UI@D27-yllQs#d7Jm&*`&p;jzI*=3LWWB4KPtd{0 z)nf6B2W4~ueeE!>_C>`gtC6$Ss(;O58`uTb5b6GRD3l;Q7~g}z&=n6`%CsXI!YNu( zzkB5VZ)QUFpU+^de5yX6&IwYcqh!CAtO7;NJca{62H)k4Sm9#|00CTmQZ_{C@Kk3?!v# z5eoWPF6SH~%c1Gs9zI766fvI<`U!P)?X8ynO8*^_Dgev@cZxgJ@$$uT^$4c6)~W5s z*;q3fy5zgUtY`rHyFH3++{A!M?(T$dKgIojaNo6)ebpW8v(G)A`c0-N8ZB{ZNgx=g zHBI8w8MMhSF4sg(VAi@Sgaj>m25Zvo2TKoDv23Qu^>Bf?c$vTI5e#!nY557O%IKmf zLKoediNYeIVrXUnilf`v)63CA%F|mpVvvX;p-*}f2UW@fVJpt;ID6Pv1o%O z3QIl7HB;2)y$SY<-$DLMT%jrBT;5EkjN5vqawQ~-Jj~I>8H{6X+uyfQGr`EQqLpPt z(_ieTOf*_1O~WRG8JpCWBt+iY3`l0B?Gq?Hn`Y7NVf3g{!}cStGQea=sEa~34xzj- zWZ2%wc*?N1)$Z4}6bZn17*;2Iq#Ts|nT3ZcVQBr9UP>i`Yi_5+vX^lOLP5&En${5% zzf&QaydF+6m6cCv^T!lUf01+sO@y6e0SLE@8ZAz0PE0Y@wia({RzN)wkTU-le`SU& z=njX_W|*O!(x0Zs(G{Mys2vB-DWQo5vI01*Ht%%nkQA&Yk27c+@QbbAaf)X5%OR^U z*kX`q$ka}nQ2kBWXTL&N^j62yU6(3{YRe>W+(|RBwCygU%^5B#2W+)oB$S6Z^+E2s zsBhXW5mYSLn&96O1fXLe%4-MpQ(*6}%H(&kz&&y{jOCleJ(B3I{aotjA`$;P=i&RO zYNs`EoWG&lFX^z>^0t>oSnb%5i_doBRU!1C(EKF#aXQV>*;)p|0C%Ig(R}ix13>=C zJG7IGUc-Hz*)?7XHemt(e#)2CONgL23(HEPAH>}G}*9NU}XMBkaZ_x=`}Y1UYW{zj0ApU1@Z72k`; zpJL8#4U{FFKq)@X`v&o)>*gaWbgbr%?nJat$i=Y1FcAS_(dzcZU}@bF&`X~2H&}2f zW#8Y`F`upd61c*-*Xm5P*&kYiAys}%KIEm=>_04af1z>vG*lVr^KH8K=rW#fh% zIO61vf|Oc*rN@Y54BKC)WWNWg5_w+N58QZKHGcN6GVo-TR@%It4uLUj*}UOiu9`|X zZX8*w*}wjlyr5I9w`T$KbvYv*6f!zlsAQu{qQMe<%cxNmK^B-B%tJ?M>X(=Omb@1f z(J}{Ms1VJ;0Db3M;U}L}n3}?Hg<@QB(&{#OP+AlcB(E!O23sCoB4&{S{syU$a|!PUo>xQ1hHdORX+R#!f=5`GFJE86 zK(EMlW=Mu{hmQ)~A6iYd)*uk7q(K`rIO`EGSsr>u5f+*Q2v{tZWBl}rKWY4_| zz(<7jrdufYl)&Se5&SSNqoNLnkYev?P(cIlOdJ2{Utt~jnVI69a&IZJ#<*b`v>xfc z@l7;aLPtch08Ngeo}pE<9sf0K4_p|-j0sw41M}b7hg&v2G%cq%iEr*SH7zGbeM5*V z{j=2uWTF;<3?wXHZIyir*jH%n{V9q^f35=iI`B975vR>(G(%XrH(S>0@Pz|CwA8u0 z&11F3!QNS)&f3t5$?~mCkN3x0b z1iFggBJQ=kLY*btS+cTc>JOG=z(@oQ4;rHD;b7MBb7_hzcX3zn&UT!j53!jeO6>>r zK%8SiDaq6bFyCs)y>A{1ACcavwcSUu;p)jHRHayL!mVgieKNa9SsUSiiyoEKU9#NL z3s2=7Cxwn3#60CS&3X+?NxqVC-q`Av6Y(I(YsPJ|>){>$eGCKX#7js&OoVo3NNoCj zf^EGv|M37{5Xe=l``_H2v`8Vc&TsWQd*mO-*a1aDvBWiEz9OY?BPWl|fIe62VJx&D z>4g%B!qTs)AldSfH%PD|UigDcIyj=i(2Bt#qb9c#_n(FBqAAi$iJSsD5&=Oa+q+wh zsNxEeSIrouMs{zU@kaY`5gUHu*@jWOIUFf4!RAi{o*Y746Mq`LN#Z)sJF>?B@3C)O zesWmyLYp#CK2QByWLpEWeGY(X<5Kb=iks6}4TzR-Ag~dm> zk7xe1gRt}63s!Y3XY|{NuV+qMyZo5Mc0W&)3f~J@67S*8oTAg!$8L;Hojl#P{Uc&x zGS}US7{V{-E7~Q4iBC)^RybivW@T&4dj6?t*T*RR@333}SwPAg{Yl%v(tu_2y-?D2 z-lP5$0&6K?co=>V5JBo=4=jyYHfg3Wc!!IFXC&fHxgh;`v#w11CrI&bRoZM_k;san zRYsZxt&x&2Ef3(Uu6}(1%H$7J1+Mk0FWi$`02`?vW=yLtUq2|}1`27_ztkY-$^S$g zk20eQ^g*#n$rrT9^7=HyZE?g85CCN4TGCqIjj<(m6@A{0o=I_;C+b$@+;Kqs`lDz& z=ev+B@}m(cWKSbPiY^uXrzyOEs!OA4>LOJF2h6LN*1gn1rIY z55=-u_v}ha6E4kfc2<7d%^#@+nuS#< zXeWImi5OR07~%=fkXSlhv$K$(nU`%*a!At4D3Wl{#%+`s>ibtw-zdB1y!Eu*9_= zO&{2YdmgI&j2>HS^|S3ag4py>VKAL)C;wfB5sqrdv9fE&(@b6UW7AbC0WNEKOF4@U zp2`k-vx0lv`7cSx1=3!jiDJ(Z^3b?(rin>L&hKT@M2WhHU$R!z4#(N@`e#{7pNba0EL7D z$%)`w!?o9@;A>GTnScn)F0}}4j0*mDJVk%E?h(wjspj<8t=SgyLE~MPFTd3wgTaY* z-6Y?+vjUzEO}yaN#=cKkLt6RUeTfdX4ckruiT?Aq_mMPZZ2ur8Uhq?K9`UmVuQ{!LW z4Q)(43!jUu-K+ld2XTI}v*TlueS~GeR1#g8x9F+w6_f+ENDf|R%AqsVs?@(Ck!Jx) z_&6tOGj;z35(w(9s_Yp6?p_ZAp3A{kf8Yb$019e6C(`K%bHZaD;OepqQs${isE~m! z`6Dj=_Q(sm>(!lSe9EP?_5gnhyU=sufC&b4@jE!c|B)JC1~G?1hp}!cJa$c>Ge-W~ z+5!SRc)&^Gp8St>kBZlj2CsRn&nsu+PLOvy6{|K>9{FSlpYol52+^KUw}%LUCT`tt z8{tE`_Ni$b#kXp47y#w`<+)Cwj`chH%6oUkLdtVJ_JYE~}_&2s76W?KT5LFJf}-W30Wi=+PWR- zMia2gH+~d8@-LQ=`vB3s?eGrM#1DJZSd50v2;kl;>|grDRqbfy@DU)|o|Y_m_flOZ zb5zU-hS!x0Vh2o#w^Y3X^m#)a8P_U*liqeK$*&M_QF*AfTqQm%>)!pf^Yt@Q%3o^B zop^oeAi-a$eywja^<)hqTlHa6vZ9rn=YG z;U*ygAW=`$v4nwPzHRr0Eo*1NHjuBtruX@=?-WoC(EH0cAla90u7}Xn^j=K`88#Ez zOBYyWrqmXD*KSY!4IW3hUj#@%m3wz{2A|Sl6$8Z|A8C+uX&EN3PEldhxm zvHmM%dh2lJNg}d6xE{vF3t6o6=Nc2I78hRNcQ7s)7FKJxsV?L*nG>1c#^`wwF9EzW zE4$9*I=E$8Zn!)KHKIz=jEf#Fy+G%mi2ZL8GMYTU4F^>QTm$-H(29t6wd7Jb4mO8a zC;jtg3$3Xg1{;#^%G7WX-Llbcbp0ujb>G4e{ahOJq&&-OJje|z!;Nr{qOFsL&;mQ2 zfBeE(3~3mD5aEAwfUG|Dmcm)m*+4rMhHyf##14)95=8VCSz&-s5YhYPqQt3jw9weu zk5JthRhSDw$nRHQ6xhKX>-B`dHbXn_JXbwi-BP)h@k#k_KxQxDs)YH=sPT~p7nLx_ zI)(5+I+V*l?CQmxqLAyyk1K5!bg4 z)BnLYp7gVs*=(?;=6&XK$1j{}x9W)2LD7&E;h)Ok*)}_SZe{-P@a$S2JMQ_n!rVQr zl{W-~&hDKYIy&_|QRcbj`l~Nd4G8=XUl-cP0O6Sp1Kl=s8tTA6R+#m<+pTBKqf_st zvkrmCZrHsT2l>#r+gM|2+DXjo+lo_-tObn)jV!-Ufm#Ahu?$V07_TuUly>;KfE7?$ zXB2AWOW~~mh-TUj(sh8tt$Wt2uZP^Bo|W-HXQ&kApSG}ayN*(i>uoCHp93xPm9^HW zHl;jk-X4Ee&3+QeeI52gKR6-B#dtPbQTk<*!9}3!rvAeAWHoaE8BzWbQM!pXH?_pD zl-w^Ap0Y~#1c<~gj)pTJr(vxrxx)sLJw4la@}_Wn5(Yh{*o>DK-n0Q1;08FQ*9a+>)m zpzZ721W~*7`oFV>r6AraS_1?o#9kVTVT(D22onBWWu&08*360I>*9ouF>g-g?!>3e zas^x^D!6v&ZH#c30~nw>)Pl4tgu@8lq*DW$NNI&%a6t5^&g}t<l;=gMN2xmC+vyd1j*G_CS7u!`KN6h)r8Zjl^<#?9QwDND%z|cy% zCa6!-qPvK`GxZ9pgIlT~$eSRZq|n7plJa%4NLL+%@Qvuyd=8ELvwCV_l&!I% zdL@bDcS0${yi@0g)DVvteBhL5_C4uyU@bd7hN;G(aK;*Q28zv8o|j@S^Us&NFQ9#h zOg&N52*>yNgxm$90kbZe+m1~xHkuZqB&&C$CJs^yfj-#l^g+OH@F?$i<)B^Gvmy%X zUb$hXk^ylwACmB$o?2XBCMVA&VLYpIE{$JsT|cW>4AdB&`(!~8d1dWwL5;VV+cg+M zLr)b1($LN@W;G1>kV@U#Z=S7XAx?vvtJT}h-A^bBHB{z6#KX-C%J$dkhhdb+@W-m_ zC2A(yq&s%IG|u(h4LpbH4JW!a_a?Q_gv~U!D{E?Ed^bf&r(4gVU=}pz!EHBBj3Q~O zCC%rq&=6ScfNxGhm+^TVI^(nE&vILAC13kw$KH1cOFdCYa7_lT=ZdKa}IYP3T#sG!9(pJ-Z4 zpYPv1%p&~}P=q6SE%-rnF^>C?5>vg54I{>_Hn^-l4Q zT76ItbA^Ms>muZ_sr>GMsveSL(8f8)&qWe;IM&AE$|ju~ck;9i5S_<050-E-wnG7) z{XDGYXDi?(QzsA-8p5(@-o1h>)##|MH&aq(xgKXAyrA=$|5%w%_leO;oKf=C7Y01Q z>7|umFQEBrx7t(4&OJ?b+y@||#M4>V$;;#E?cCi}p~P|E_6COITI-6~&AbJb)=TDX zvplS4ePNylE|)JEC>mN=xkIqdUf_7SyPDW_{3qnBGt;AB6r9E%@P(wSq>)XJY-<*Q z$o+rVy)XYmzp4WuG*pVh+SStd@^)D?5X((p>FDh7P5~+V^{!9iq+`1Ro`OWVn*@bt zo5Go$`!mP3=l^u?=cTsiwBB>k*VoRcdKf)rD$W$b_*68Y+^K#elx+}d7>EHYGK<4e zva-qtfX8GP!?KG2*%ULBx@{8$h;Q1vv149l4V*kq1707WP3lE!#|G}6!r)`^NrcIh z`LG(I;v}(YslYds;%e$$GOMmxY9f+npVq57_iZ@c<%%PE2E!Re&5{m4jC7L1-&mVB z)=i!yA$170f0%_6cjZ3(56%mSF5`9V$q3mU_csEDzeolIj+&TUKeGa!1MYBMJ0Nfy zZ4~#pyy_%!Ab!P2ABGgRn&^25O6KKKXJ_8505M&dk>FKo`&HQT`d92Z_C5tW%?CRc zHcKhV@Lq#cPX-S1r?P<|O2@1D!?KMQ2`Ym0&wYiD$5K~9+r@5~y~z6-uERuZ9zI_| zG=1IXp_dMdke$sQw?Vmzp5Tq$T{J=yt%3-P6SzeCT!|xg1&orfUNkA#b?rBK>Hj$g zG3}-FTK?lEa6nd(!?Bl4wvT@AyIc5|>n7t{xfd&q*l1zUy{U5DrJNeI+m?B6S<9_B zSe*lX)N_r*qGtAA`d>uM*ZCDRXnHcP&@7}WPJbrzb{$uDwwb8j%%#fo>0 z3+{&+Zf-P-4})NRd?3kEFGw(eI463d?wL{NJc#eI!O`&YIlVXZUEto((tCL(T@%|G zHl1NjM`cp0@BH@eZ_xh@8lcA-^c=ipM<=Ii&sLaK=;xe%?FxMBY2IcpG*xA0nFdXF z#SGEX=6E*LL&vLH2fhPXnvXteJqYuY@4TG502_Q0?IRd`&=awDdh8c=Ay%8>_=~zT z;>hYd&a;d#1b_l}CP_?YX=yhk%t+L>bskJHdeevyy0Lzaq=M_p19dLKHnWx$&0u+bUeIj$FQmv z(Z{1W-@09j1-%=zijd~}osyG&gYu>?Ew87(b3g1Txl8yl?OlE;S=M}W065DeKgZp) z^KS&#SvI}v2>lvGbo1pcWe$~yz?2h=W>^STj;8#(C@7w(SQ8IX$|&-Ec&YzP74hy4 zo?wzLYGWgNJ34zGoZ)|xLIw>Ynxg1_ZA=--tb{!P6|Zx|kMy+pBnngTq@=VqFetMRU{el(7*;?13Dww?f>bIzX8_i;5st!Nj^U>C;*`pZXG&1qy)c{kXJ zTI;sGOw5Aq=Z^wf_DB75Ud zD+k(lF#<^Tt5KnXd_I;``J(MxW}Ph2^hLyso(Ny7xCo@iI>28cqL@X>TD>{${R30z z6sMvm#kXt4E^NB=48r^i;#J{MXfhHkEpC;+H9~Ve$`su$LNW(RuO2L`xRbV?^CBiS z5N4kkP1f$Vuu9W7O!-=ywVzE6J71Wnz&h*J;7a=0TK=<1Ue5BWVeM6tng(lMhfK4q zpo=|=jTd<#WL&J^uOm3I4r{**4S2)Qu7_>98aXwy$gSvhqZiN=BHdPyOqEhD>46wVauugiv+bxjl^p4}?U)pUXBu-5@Z@54VR zPri}RtP;~P4D>61rNc=cJpGkodqoEa2mRe@eq|$*BQoh=DNhXew)501up=FcpJglL zuUzbK$q@$pSE^TulQ)?XoA5ETsBDPdc#R$bXbw0ZET+Q?j5qmJ9cyF(^OD@sx7ACy z`kvUIjJ9Lyy%)RsgS3r5ueE{JxeBSl>cFk`VQF!)iecEU`H1LI6qsRY)~_|59~8OW z8Tyx*S(;zOpgf1|r){`BQ#1XtO{4u4?CE?3VbD4Q-x5`jLBcB2gv&}_E!xIt)P#g- z%H|FoDb0qU-;#Yl=F;a`<93NY2;M*q`gAdayb%89&9M+3chE^1lX<7T!c9@ve9SvD zvD?2T^YuM(_#uaUap2Q}gcUdUFIxQQL3^%=&iosI>@(7iS~KfTsXoLZmsecEMc>y! z-ndget*j5HA-G?6)r{B=KNJX$kKemF7ClG4EUuKk%iuq19N;@yJ|(K)Q%D+-n+06i z)-J-gt0STMBKCifX7x?~J81q83BJr$LuqyO7`DO*>t|xUZ5RhpLQg7yA$#o_EVOPQ z$=wLNY;V_jj_?j*o%KkmOEL3QVrOyW_iJ?H5Y1^C!d7@5aZTV=Z>ba@uyShM)La9V z-YrMg^#junlC=n>oOP*mQIhE1?s%LoVs!cKCB!@?vNtr4WIUWM|Kt^9=Srbt<$*zh zOaDNUJ+SnSjTJ>|dp0pQ3W>LOO&Kk91wExXiGs;5dvvoxB4q;-VhF3D>@dN~kI5#o z&Yb6`d)V(~LNg2IiVK&r_{5ptCJHRrXmVp{!2LqPZW!PQS;0idm_(TMn(;fc>g$YF zqNdSLtsV@FL|0Dv-jA|aw?@PL;eZIzQ+KEG58N=HSLhBAoR>z2wA0mS-LZ>xwbnDTLxIN;oJ=dUr8<>aOjFeP?iE|Lodt6I+Yt z$?XA|TW*|6GTV}2r17_NdW^Oy)aO+C;4FHCm9s1n{(Y&S zX_-oQz40%*KK)pE5{)Frr3^4~b~W^S$Prv6FVIDfy%95RaMVSM#4!6X8?9)r5Qvr|@au7#x!R@q3i| z^_;rt2lOfzx>gR?v_(ipx-L3!pySoKCXMa`D=vMMRCiP_Vx%yrH00-!Zj!eVN|%_V zzvP^@w)Vy*-O}{!ZNTeoxv6z|QPG*{`Sar~O5c|WAzn9)Lz;bYTfm-~2TEzPl5*C! ze@kmGwU6y6;_GuV8*5Ij_ts;oj@gcq%e+&0r>Z!TIL;6MDbw}+{Wt&q<&pfxZUh^n z1t}k)%)bKjr%sIjsv<-xH!;M*Mzm7w2}yu=tL-lv7V?C9HvzAwuO4miv6XW5xbAhw z>7^H<48&r@z;LbDo*c`~W{~vzivzf=$bi$-3rsv8Bt}jhcic_*M^4P? zE8g^t`SAV%;#zHXFxOH1yaQ-`i$6ec9p{1XMzZ@;GZRLhbt(7F{pje&K*FGxrAgM! zu$*pB@-mDm-^QcMRyr5z{YBj_N#F0fEZIV3WIV4ICl|vNr1am8w)Z*#fRS1h=R!qK zzho|O7$lPoA+I=*(m@?)THZe^Qj}fJ?-c=)?~+FFt<}~y5Z!Eqr}^3%@4_KBV3Y{i zP~L8apwD!croR3Tl@^WO$Mfc$;E(7kw3c6h^Bw+a{wKWc+HYY}Hh^gECWD-HjztWZ z;7xIG9K`3>uXPK-+S#4WK1OOaCiduAHrkEMPdURW4U{D;GgHr;p&pooeR zb%9xI*!K!6gLaJTT>nKhayoM$O0~Yc`yaZ;r^&t~Mobyc)@#W_;Yi0Dhm86&UA*}U^ zW2x=L&-Lw>F%^$LcIS2Ouqk9i{)&XaARQ3)NC5{bA+2fmffOn7TY71?Z#xBiB1StL zX{yxWT-SzvSt!Ks#6zBawsH}m$D_-m`alDA@#uu_JUbuEXXl$&h;43+gS<^;?iZ0zZb`4j*a4$Yrh!s$8xK+aRE0} z>z9Xp-0ZX(8v+aZJRv0&!Y&36Z-IDG@S}&Ie*YMifuh&A68^3dqSAs$&9c0aB2daw34dGVj08!sAQoD({xmg> z65z+yy*amkz?-YPHf%Uj?u~T>Qq@#lYFU3%F*B68MMojgqrqFa2K=<4moA5owr|cf z{FK%oYu{O0%P@Z;o5z_)p#nD1N>PYPfcgkFrZN3+v1zKZw-QQiqp~@dPY1%We_Fq5 z3SAj$rnsc9BE{hh+#$XW@Nvi}DJmNaw^|)kx@v*jL8n>KZvFuG2;L7ami>QEDBKuY zYLH#M75^irM=%Ho3ii)IQsgJr#cj9rRMsekyo<#e3g@7g{`e<8#zQgKkb;j&ElXt6 znv=riUQs9u@4wY2Rp3q&R~%S}{Sq`>2pC~%L?O)m3%fFxl{BNf`4f0K-2Qu?gniQE;;905wLw_>m+dk&Fw}6Fr={9m&39U1q|~F$p3Y2$NYgnBo7aCN^Xd?^Qd9IPrPojdW-rH z_)PRt(288ZDpDt(P;8pNLS(8RYdt57$QApRsu&aoBSD3)D`rwS7z+HC| z+?O@U&p+Mp^o0i*H9o~8b1^x53c(^NpXi_1$iN#^2_=+3Aaqz`qr;2LAWn8EjUWWT z1M2Z6=JH~c5Z7o!JLQ!Zdd8zqs>I_P0+5{k{kWq$)axTd8Jj>{wzlYbKtw{2w$z{$ z3{oRRP1fFI9a4(_8AGw?9s!Lue$Es`ojjJ~yg$2V~63mZNW zrFHvSuJ4=DabUt39qGw1q9l&#vjB8UU>OYei6)n{3%>jp6y(c~^x{P_*mWTva3!Bv zNg?US2zdAawDhX|{#^RDAvd~49A*z&^}l7=JD9Juz^;8N$5?;t#NhHqQLY!CCUCxn z+^*F9_0v!_1zc&8jUhk+sawy!a@GF`c-m6xlWFrrjk!Il9&3DfD5?~CD7myhfu#e@ z!;sp=j{eQ0n&2V`6(VH!eFW`2bWukKRcOOzuR9vU`AFsvO(}^+A7|@Yw^2WFr^JLg znnCr2rOg2il=3Oal3~A|r+;fwWvjv3aiC`ifo4JCPJNfpDP#VO$hr~&4xDnX_@e4QW>erOoSvTIe5n1(j4cYhBdTNO**WAb!ij0od#l!1}JUQ=ozGuvRm zH^0-CITdA@YVPx?0+lrXEGK<*{lb-k!bJ;JYSM%$tO*gfoo{o?J;Xnn8dF^>C)lzL z*~3!cEgIp6L>Bt8ZgESVYhq>BjVmccKWEQ{gtW`5s|`+Pa?w}W!M%ZDS4R0S0!4n% z*+M~-w*hOA(+M&+E!Cw@RvF$sloEKuv_0s}%beMd*K-8Z+;m1c%eULoVa69goVqn= z-RidDb=1b+gJ4b`|DDnyv4BOs)z{T=At6V`HYqhx@Mt04pR8^gmL?4BE7tvj1>wmL z#0rhy=!vqad;vkc5gxw+ap#FW!+*tr3{5!v2)4tl?uLZ~JpS>`IhO}fe$P3bH+0NT z14~AsV1Ew>>@swc5u;EJo0l*Y5Olo71k3?G^bBGO@Vx<;fMC^{^4Gk=7r&#ZYoLX9l5gQ%VznpSL$&MATDWW80n9q$KE~^Nv?S#sSAR1am zK2F3L{`xeC)J-Acvb=qmqO;=OzRgDS?x!;9UmoaAy}hQn0wKJ;iDgSU#{%p}ZAlD6 zAD`Ilpfl;!hPU%Q)=!@b<1Igjm}j&S9e47Z&` z)12hru9NQ@@$t5<6mhe!AwR`2KX;EJ-bGa+0;f?Ggzcq=LLsZgPQ!V;yr3i&H{({x zk2N(32V6db?_3s9ex73kGM#K!^7!d+%@s*AsXT*03v~{w2iO#VEB;b9^SLZftfS3_ zhBv;WU-iMj#mPv9^%&QS-^~+yW{W|kNFo$lmMTU7U+iFd5_du@`&(&Sv{5F?JTlAZq9-yrgNA;aK_{@`S`&=Dp{Qk4|d?z~x z>m(75OjMp~o@`vtBwW6WJnQ+JGK>3v!(lT<3wG8n&|kDl1uOkZ0V+g4`sQYDMv zLOyM4kl}-zR;lCKK$NJojRMB1?Cw1cI zE&jgWYc~w9K{~~iI2t9vFa|RX<}Sy|?)$q^(%5@0+Tgw2!9tK+zew7<_{K(VZnzAaq_oO>wU0io5gzu&`z`GqugBGB?BHe# z+_wEOY9D(NAAegamfe+wBeY?_-4TKQfkZ(S>=>vGo!5vbQqw0*Ul0Cm?cyL488vmYr4-!Se5ZZ>_H~%7z)2-lDVa*u?Z~~Xf6b+&tcEy z#p-ylUSwA$^-?oeXtFX(zv#VJv5TagUMsD2iZj{Qxf%iKn-(;rJPtdY%2rfW0C%Sy z;Ua**EP@8_h5wfxt!My$;01V);fYglh~w5`Ou=#f2>6}lZv|;>T@Jm&B zJyidaF_3K_hPp?~mZyjtzZXv?=UpX5p z91JNTasr+f286Wo0t(QVR-?Tk;k8;nnIeQZC;l>FuG&%U0jGMqLgdJHw2Hdo&`0}X zIIYB?u2js$FRdM3eeH~R&|HhR6BK^u$BglNJm#tK<$73{uzzG&P!uVJ9S>w%0l)an z=EWT&TM*q>0+2aNA+>b{7Z+E0&CgLOod+T}Mvg4ZQg*cv9QaVzzU{;c>X(wSIFYQc2p|3ag8>g1>hK`CBu6g!7=^1nf8>@kG`urU<6X9Q$Q$>MibJy|_KXoQH{ z+p2eay1*IA+1UZAp!9Nnt5Nmf^lW-+Z;z~GyVM@%p!beBSyC6}eYq$dKKRlyLs1~h z@>Rpj0*a5lckNR;P|SA%^6IrdYoURoRMzTxi!^i3+FgW)5wJ4eGhxm7?zA|0&XwBq zfX1ildqUsG!y=$8@Hx8tF|*wyOoGL0IfFADksCD z+BkVUO5}23ks%l#NGK(W8L!y65qXn@17QH)*vZ}*UblAMwF-(jfBblgkAUSoB|M$U zeg@~zzx&zs2lY+oMc2vI)m1D2ky6vqIM}dX&BT9}MNfQf;DtOzwjL&-KtRI89X`t+sm-2PTw;%H@7V}UQcPs zwBrdtz~*F8=l{p!QYW!w5>iVCxag<2!yh~ukrR=xU{dZ~Q~fAql59)fZDwBdAp?UR zBpNZ+zx~#|M_Dc>39Vj`Hw~H0uIVoz262Y$Qx;i)3b8(?t3UoH_B{U2VM=!E=iI0{ zKx8kiv9#K?Cl}EE^l+jX7Lq#(NJkhO^kTq;#F`Au_2|~Svv^Ga(p`RC_mJJU=1}-Z znWw~aZ}Ypjlba3<6eqVeGIGT$B+zyecoIV<;(hBSRu1XRI$-#EsD=q$YxSvi@yIwN zK?;b5wzV-uZK7=Uxo(UC!3Kk00Wd~@Ol>J-d9O@3NnUB7UWwdF*B}DJQu1!|z+D{S zM;s_mae?8lkPdmj64+a1F`(D9(GgbVe9?buqt`~Tv3ThCW3^fNl|j%$OB^V8KI*c3 zuQvlrSLy2bV(2ycV)@QiX z4>6ae{Hr!iFCB;yF2(9iHkA(GZ3u{u+go8Lf6pRStD}4C3t*$dXHs+W=~a2NBgLYS z^6&ZQlTW*efJ>gi>~&{^jaufIMB7~fC>l)_z)?pNvUBFO7ksFt|EFGqGv7xsC~Nj2 zh7A zJ<^DM9o~N3VRT)jZZ3%;VwchEl?TYk^6{LO8`T~@C!Cl)^d1HMQSpB8Ie&b%s2tJ4 zW^%Rw>z@fQu3BCG^Ck{0JX-EW0cbKIPv-b*mXYz|xJeb1O&I1Q>XbU#ksry7xnC-S z;R`gOHzATzXqY>ScFfYl!pkC*O52;??GwOdhLH-*v9lPPYv3G;CNd1_@zAEJYvbN; zw~r(_v6wx)nq%vEs7MK1J$`=wwi$9xa6=~$H2~Vnd~$TM=_2dLKGe~dcU?u>uT{^B z{Q;DFL-ukVt+4(vi`N(2Tt92kZ3WbR|E8I zU5*IC!^x@lZtXxu8v}l{E-kzLGex4b^W+=yTi3omj0_aBIK-n5l2#;}-xt9ZyGf>V%Y;V<$AztVelvtj5CI_(-LZn|!#H57$3ESgE>S%2 zun-u`CvQ^q{mByeocIFp<*zgd7TV>BUFsabKjC-%7-OJ@|lBz=V-@i~YyT6t{G{xg$d zP*`F$U(8wULGYMS7RN0!ZEfb$x?1<9^YJ;$kbR}_Gm%t`lkhr!;$0!AjM9~!!N(*K zTI2jVwRZmLAYwiOTl0QC$B|h5R2te-?o5~-+b-cdE);2h70|MV$wW}?7bhr|dJ=g? z&m?V_1*}M(9qQLb(B4~%G&JY3GAOxO-85A6XJS5mIk9_PaV2fSBKY|1-ae5~(7WK8 z$u^j4=qtSYHMarjd2>;sT;uBuGqrSfqo+Jaq zSWKEc374=rrbrBO%T1N+dq0f)V_e7OuYus=Ui*;PG5OTDQRTTIs^7tyffZOr(|ea2 z&_gcDS#Z}8$ldwQ80Q9NaaQa?jgvzEI+zi)0Z&I#1x7XKvdKtY#D$~r$5wFZ1~(nB z-!(E7x~APF{dGR6drRJyRq<+BRwR?<$+q$^@TvH^622@dI;0Weghu@E$wt150X+#Y zf{-Dh{^t`aEi>C@frQdnI2c?-rHYV3~0t)&%6 z^Ix7173BtIHo`KzqrFx9!9TD!CxBE$1iQvO|I&-u7AZG8In5@~8DlLVyMB~ZvU}Cx z;cAlcOQr;zM!VnVPtL772m96>)2&QK?}(kJfw!|m6{&kmQ^V-HV-I4D9NbZJa7-v$ zX~-zyS!l;ltGvnSP>E$hQw_weZRh-x;o|QW{wLp`K@7ptce2AN3mcJZpJG86X zwYS4;7+-uLwgVTYVefPcjzo`5{uLZq)m=(y9Mjp}>jtt#jVn2_# zMN)_rF?~YF&0$g)_k_gs)SBDDm}FMTJx|}bbxgX?WH=8w8x2it>gCUIUl;`enHs!yGw6gX8FFy~M z$cBMO$y8)n!M!)11eHeQj2r#3$!^&?CoH-dfMX7FozI>NO@?g;@Zr_L{GqoBUa#eh z7*skrFmy?hWY*22lT7g>JR~i^SlCqY#v&NpMm7>P$vaEHDYKb}XOj+&BI5l4e0fRC zQruU5oRuMCY+A{74KB8?%p+V@V9Gl?3K?o&`#d`pqB3=x%QSHD-@X5{yIPdD&|*$l2PVUkO1!Czi9LV=3rq}tVnZ%&3gen(!1zf2F8B z?MK2#PlPQI@s33POER)e>zu2p;rJ&}(S)TIf+_>Y@U{Q}yKV(kXOm=)L>lJ(KaBSr zr0R(qqRzM}K?b9-imW;3Jp&oNqI9!svwp@A8KoqcY#4My0eYrH^#`A)&rgv^}*z z^W=C+V_FD)ADwgd(tb^=^$UtYx%N^<_vVdKd`BT{UJ3mv&O`uk6>Wiq_18Lqpw0+M@wsb9D^^W0wh9|9Ly5PD`!^P~8)VYT*bC}~eC)`JDr%rkn z3)U-)qvW-WjePrp=4DcI2p}dRX4WyIc-HDIwxdnkunnbAhdpql-1zsKVd1Enk zM|`M}i8;IZkf;tojK(CqI*+(yp&n4_X{KGS+uBXP*ej-oo3jmu89EuZS<%ZlI~zD^_nIxWvn&Y& z(=1;-E!NpR1ZJ&F>`%?5NkbSQFR$CY4(6cZmF@kh(iIiF`=j^2&F&SiZ{fkKe3Z8u z=+J>7?KLJ?^*()?d?cYC@naoa<{+L+*_y{%$ z&;;r>f#zi%>j+ZlJcmNdy)alUzu*noBPx9X4}+OIMd_NYKaZ{zt5Wd6!KdqT|LOhh z#~2}(gH@#>wc%Av!wJKI5=b|;s6tB=`E)p9_= z+=PaeYka`%mfcEpGAt*Jn-oGd(U2C}%_|$Mx|I^0^C(ip5UjgHad7PubJVI7h;Lh8 z>YTLy_?)YYMAzpUtqRH`8Bf%Ph^0;Mt+T%4T?H1UbH7*bvahO8o{}@S{aM8qGx@-b zRW*g#!s9rc49bNT==9=4 z|A}wlI`MTF_m`ZDnUM^X?HiLeP_)A3Z-4+G8<^qy!Vkpa>1pa3X&R^nWFRF>>)!uK zbGhe-b@vLivA)_a#wlR^{=s+@E+59ABULV#pWpWSq%XGhp|O?her*#OInjW9h@4Ee z1VVs6dZOam70LRYcau8PwS5b?wTb1ba;@4%%gp{G>{ubnLur*&pRb)mURS^3du(%j z5_5e!(*c@ZdE?UAC5nS4(uha8fD0S|CISXQw9*?2Z3cQWXcS;v(COsDPTc8patLiU zL0~~=uu>o`F~0e$_NUp}`N4h%L%W`N)3;Z*uFZ{s;c>chDzPLM#YVaxoL)e_Id)=O zQCOid|r6`pKjsk1NkI%9*8ljXK%HJ08j@r~aEMh3x%{=uhGMSMZcFq@$CcXN6}KHZX>CW6oQ~?>*Q^HeZ%pOiX{0;eH480(e3`N1 znBIaltsM-F=_aK_69IH?-OG|NG+-kE9?zHhbPR@@GXl(igWp;HC0T%}0v}(3sjTIO zD6F4#c;9=E-j^IG@7H>ockR^&8dw0mtrbH7Xjt}4oDvvjiisPfmqStN5q-s zqR3E?IZsXITtRE+a{Fb1naA(s4d;!P1uy4cGSQ8Z&dkWC-E{_3JRPm` zwgmx*g!;XHvUf@mgV%4-oqfP7=DE=u6SPD{k)0)^5>TD)D-?e=*FP2r;D($!U z9d4Ta)|_X=0Lc@W?$~(aH)yUH;Ux43()s?r{|)5x&EHUbM%X5nsN8qwULrd>dF3u z(SJ{|iG#lKYMVm~ZJtizswJDm^al#3sZu3>hM@wZXao@CuEA824cIqMfIPVxY_!`3 z_goclp0N0&k;)eWyVgeCrOq`2NRz4|n7E zw47h94z~kf5GN)F2g6CHy@_pHb%5y=Duj z*k#x#x9&U4dBgZPhKes3i6mfoSNBG+PgP{XcK|LPW}}x^<4JiO?_Zzc+MAi(W}Tsk z)VK_O(O8SnK_IAQYjsvltEErXo!J_pOwa9>Pxu0;7t&=%!NLpA{xs@_w%LY#OUkB&+6hO^fI0v|in!tm+{3 z(yMrRVX0l}VxJt6z%j!V+6whF{gkYSYSn4X$R2XLXnD-&iEc14_~tVL*GLVnu-Fa{UUxNUe&|8r%7jAdb*t2w6}}pd44Thq77}b?(%XXd4M3F2Y*x+>V81V&jskJ}=ET*M3cz4i|Fgj8cv@So}&o z!&Bb#=X*vqS%`+YLKz@GSt!G@RPniJ_aYf&&rQb4Ac{u)i0Y2*oGyZs`M2OqIEGR( zb}55-doDqQeILHvcH54hrNGcj@qt=v1G56z(^cE4$G?&RN-XU$n0oA|@-C`+R;KsT zSwEi3(3{;L&z5Zg!im_Jd5+U$y{aH8wtMIG(sAu2X{xIY8x%H64Scdi_7RtyNC*OV zaCUWch@din*&W+SF-r8MtneQ)eL7}-r*`2%Lp}w#gjBl0!)a%E0bOrkutZ7=aIZns z^RG-%3Za7PLme#rcvG0;Und2Ud4PIV)V!l1-<>-Q5L&PG23F zNdzyE^I@8MJm!%Xtju>@GG`w*W;eBtWm_HzJlu-e7m>$aN`qWYj|ryw8b$S5BJ3-H z4Y{8;bO5hWW8)o2|AqwfP(PKjb*wTP?TGK|n2Wi%Im4e?(~2%tn_ylQHk8e%9aWa; zK_qhnwPPom?=-dI?&1b?Sls@vT)y*h{^=W`_LdOFM0%9dX3J&PNb2}(VQcI1|Eh%U z(t~d)E2TiNq6dnnw}HM_71}*LOPhZq8LzG_?(B;B?GMSzooMh8j1RlYD{GHOYfELh zyw8;LY8t07QAfJ1t*&yCA5@l>YOy9)qJWwN6HNA?1r7i64%X4~Br0*@t5N~yj z6?}@7v;stHhg5_gSf3Koy?m8iPrdu#5iMEh;oi{C{hEjXslbMh5C&}o6dC48NGN7W z9FTux@S>^ITSJcfbZjvA@BSzfCEh(bR9nh*OLe;DIr8A6hUBiNR0my_lax>~;Q*Y` zqnN|O!esD(>IjQB7*IxP=^}aU1Dk1egJA9TN}v1_(l5NIASZ-7&y8RspaF zG|7`o# z{d+IPZgu{#^gaa9aZniXBSD838>Ab~16M1~^HuFM+1N~&I$Yk07`}Y$1uh+Xs8eI( zBVH`#$nkjmmdBkuci{l^O?V`ZhJTJDnnmLt6<+;QWKCNB-EjNH99dLzqrYo#QdX@``utF0NpFF@;SS^42cs@aeTkaAeabVp3Hz?4yg-0LMj(R#pT^-Q2~1k_*H9NmX=E`dy=A4MDx8?3))4U3 z$hleD!!f!)OtJb7rOHZZj-lU~eL9eK&Fw&))vXXD`1~r{8pdC3o!c0?2zHL*!LD&E;*fcI1Qlx2ki zKkKZk2=M}z1R;X)pOAJ`FZ$Z4z^`)AdqR)ZZ1}58nL&^@b)~;vAEbS)cg$IEFd!Nm z#a3CQMlbG`>(#r;U54;5v-VW-vW zaBUuHe4zT-AO&@FR9*NCoE|{a$InQ`9ZWf-899P$L0p}kqa9Wb|)DPCd-A_S}WF=zoFp>epl`{<)B(1uNINm;mEi#dLa=U%>4 z@ZSoM$N5TS)9N0Y2>*A7>uXw|GS8x4`bcf$5g{?A2O+?u-xsaNHE-b@FqKV^V$Qjb zDd5}?Zii(+ACOY5Mh;0V9pk{q#zC_vjjRc*HT|uD$HYb=&bur*Ed#K@`IpZ>sR7XY z_j`~TCjSj1{4qDa?R?CoxkKLNm-KSO)i~5C6D=X<*b^gw!ByAivp|lTVm#;b1w*w9 zm(SPavgthnPg8$|odX?mqxmXHM8mU`{y3xlYfH>XR z;jiyW8mLb-06mr_n6Pp^Fj8HJ@I{NBZ=PVl++2*f-H?k-><@z4^b{1i6tdGxkk;)j z`oLs(M&o|JV4i6R3#?-_b}&7xx0ETmPZTgSNy9PF$)rjod z2GY<%ZqSPqPOue=gEeWcA1eAXS`D!UhEA;+wgT&qbsLF5bw+bI0y&Bh@0Zwb;FW$c zX8JI_-RGnYLbBbPaYTZ&HC;c`yp~_eP&Qi)^LgIi7@hmn>X{*0RxfKE>KmQOKH)i( zt#ggiqEi9B*u=fZqJ5ZZ&+HWIgic^Vp;}qNSj%YCi|=u$WBAM%-bK`(_$7W0i=t^o zy%|(4d$(jex9LKj@GRBLPQK#e%}{_^2@zkR>#(MpM3QL7O`x3I&+@)UC2zaAWi4py zp^RFHIJ$FfmDNht*Y;PdE-qc3b0>2pqXW5PH!p>yS?KNiHi#YL9Kk#1Uth=hk?Zeb z*Z5@K%QEiHi11|V=du&v9avWol!~2zfN#)~3+veG@5H7=s|d@e58PBPgogIJnkiz# z;VZ7_X(4zkss6m|BQ=vA9e)MB2`=&b5Ck<{Qh0m}_XPCKNh6-rom^vq))lXPTP*^hKz_mKrFt=nmsx%TyI=zNb%2Jqqs6>)yJq7wCe$4e07x_T4}$& z+0`e=2!DbMKN8o0D3{1vU}+4ikJsdjoe*2VLj9p_pg^lcsu2){)DVl%xokCCt>okzn+$Etk2LRHB=Ht=M z|52T>AJ#W(cJ4tKOahKloFNGJ4zeL88QBSTr4=Rpsg~|18_(`vVTKuF+`}FgU&Frz z@w{&-v+rsR39%sA`AJtU{<%7hM50Pn@X7tHM=>l>9$1*uLz46}!$%wgh!r9lEsVp& z^z6;#j6ss9n!Gyev-@OX75+$E^;I?(ti)A1dkf_ppqmF?pQ+Zcyh&gPL6EI+2)(Lc z#56EcuZd#ZFB}hqFwSx4UkeYpStP;(d_wfZ`z`_PUhur85_X*^bPu9Z5gQ$~2*Kt+ z+oMqs(2MgwI$YjWZo{RiA8@K5N4C;7Okj;C{CjGxMMt(%8h z%%knk%Ju~I1~s|FngRBtp{DrE_0ms~7&gT3+F|OsTYdQpf|f)vK+EQjcdmwxXvbaA zD?C@OeeYF!#&bE<@P=O*iuJ^vrSo-c#c{>qb`0vo>Oyqps2ImM$XqHkbgLA1>~IG) zbc(6%&0D+O#xC|-JYO#>%B(X@O8gD<0Db6Dm!0OGV*u_0Z&Qw17E>Fen@zen#iSUl zbg=VU|6Jv74`WC)Vww3Z#ii>zJXUDug`L%RNp($m?F)C3pp)3DKHmUw9;k#<@*@Jk z1h917*?MFi&N~jiq;B4@|K`k^#c4+B5_9!%l5)fTqOI>jE|gH|%&`5VmX3zmhI4wN zTz-A?$uu8X@xWYydFw!08o<2djcn{bSxbD??l!@>B-gzQTi zfOC^eg-_A%@OW>@X%d*;oKD)WIMtlC4^y+U`z@D|6%G~dmzES7FVc}pub|eZct=jO zwH|Y5=K7$XC(eW+B& zeXCW%-F5t5GrP}!1?xTOQI6@UsS=QFRI;(oZjXVHk&^aumWJ0fUaPIKX7 zbG^*>se5Bm48!8-rbg$L{kypwpHQMr#Sz( zdEl(IC}WPz8lx-W%p8W=6|6mHlGZ3rRn;Igw+~T4FTIX&6DzTMPTac?I~RKJ zO5pU*tv7u2!AkbZv~p4HGDst)-RYhB1py6Ft`ExGPw);_WRo*aKP_4N-W+Ly>{PUZ zObzn)S3PVT{JG0khS)Xk{9Bf3hy_785~fMhyLh`T!WH;iBL+7vZi7wS3Y=#-;Z z1iw)H*oVo-)~E0i6S;QKKnltNM?fgK|HT~MUFKv+v7r1;CKiF7xV}&%1K^!b^?gXX zJEzWn5AZVx^H?2pg$04_s&%BOyD}Y&pc2cwKY$z}fv_(a?9=QpL#9CKqpV;y@|&d! z(b5U3?>lnX^z@YXC%VJF4Hmt&drelzY;OVrUfglXjXO!`SCpz@`Dt8~aO`i5#-6ZC z0)4;!sndOwUEV-MG@k+3-UX=7HlFLXF_6&wYVUCig z&<8FRy72mg(z&qL97Uz2X-Egq0zL(X9m2Qd0Orh7Xe@gICJc!h=^%-V2ekA<8qHdw%1fT?*!_{0*Wxh(KaMOY0` zplU$4L0NOqRn5axBYrO9L+>WXok=Gm-Y(bgPh5OlOJINnvQ6ut)~!M7pBp`(2N{=b z5`bc3rbghO-s){0OW*JfELqsv&b6NpUmUC7aqj6`VxnNhX@dpsQ-##IKJt!y2n*l@ z@J}VOjFgr*lNqL)cvRF@`^HAmt4RPm%r7D+cZe$Q&B5Tiz7HwZX!l;AzZ(`?NsEiCY7vqKQ9Hmd zasr*}VXGpaPko%`Yu6+_&Zg7fr$rKN zh0=^X>Go}$Y~|`xA_a0I<`FR;0{G*NJy~b7#OidkaEKX56N8*zJMJtuwpuRwZ+qt8 z?D1PisVaX>^(tw(S2YTj+^Irjpd6KXx|QzmAPgCouVhV3vIc8)nj8+(6#5+=cGge! z&I-t_Z?c)Syx>r$xe#<3L$C*G;zZ{n6}LNZ9TxIFMfq=uyK>`R5WdC*N&b6C&P;Iu z*x`YP(m!ODs9OaFN*~vTQW><)&&;&M(Jt3-)02k$PFyOIsCDj6_#PFvy6*rn-k;%y z$+mda9`^tBM}sm>+#&wOz<&k()l7VCA^2Y~v69|MBywy&kZaBu{+ao^YErFiIX_yV ziw;FkIL0B}-a&z=rr`Jwb{2WG^tSdsp;!C^rVMbU1O~-Z;zlC0R?-S0BY(+EvCpip z87ofC3P|q_xNDW>91v=*#OK(ml$BFd-#bj0bn4gYeezqpP0&w533})L(S0#XyNj)z zOcy?6OTnnD<{MU47f52v^Gb;;sA#<%(HX?m=qDOxf#JD_FmYo87qwbFCAa!zHS;)w z_E3o)T+xO3zg`KBbFUY?P7`*v?VZ1A(h5!uSbGe*dx_$Q@Ac8SoRE1(IfgORpt=}E z1#_h>fP4eVdrlR{u~aPI7;cYI~TQ=gT9J&or3gQZe-Pikv0nidDy1Z^0$WraM#2Ihj&Yk&Xe{ z3FmNXbc$GF?RMZ?iXI#jSl$@SC~y8NSLuLalE$D}TD?qls*T>uhzB|J+@yf|#~KUm zN}t`xgtv`Oi*#8=KK@oBC(j8V)zJtz*6?F&vEO3hCs&wK*(1ljf6-tVkk40=CV#A^ z4ZJG1EY(j8CqsY~n|APEJw8?7q&-}o4;%6Y&b7Y=!z>P8;rr|X_Ias>L%%s5tJ(_u zlkvCt*gc`JPETl_p<62wVPQTz#2H0JDabR9QmH-2pcBKgKOj5w=$y{R%N>eL-NqVz zK0TI(?s(+jPkFfX)z5NDY!G$2&D}LVK46`^myLUT^%p&Bc#US!t)6~c55OjIj64dd zfd!b)cwJ(2b?Go&t30Q6{NAy!)1OL!vDn<)O&$}@Zc24hV*QaYW5RMd z6*XT59|xh#@*ayufQiSOjfB=^=hiXCY#hj=@6MOyW({iH;ew-EROkj}XFa)(pU3K< zj9hs{IWME`P9tRxf#Zeb+qXWRp1+>1)*iF%bcq;=25(V*bg%2xfRm}?Q2+ukz&Zb= zf)V|Fk~{g{$;mbNV!A|g`T1k(Ta8&tv(H+9!7fhpgG+=?>vkk>(BT%;l)4qT*3{HA z@V!;DOB;X?=)^*eW!{w>ECwwAB(;PIZu(qiilRXGf4xL8Wx{C<8Q%V<-B^KLeIaOA zeg3mQZ&8c8UpP=E0cKNQrT+!l7p0}}94??swtgrC^L~IKKs~;>m1PGGPe5J_5kd+_ zz?#%4ikTr3reRzT1`o=P8wHA0g>Dy9F5|rOO)`idMA1MbMPBU^axU+FDDM|M=&CMB zXyF&LxV-;>?>tH8cX%CO}e1=*kjRfyhsEeB$mEIWynczmE4fO#iK z+IYAR_x+M8>9}_i;~h91bEi03YS6T*@>F;r=PGR~DVdgjKosQWbeN7_(uz4#SUo^m zOC5u(=YJhk1#A)PLAGBX1`t<`_T64M-|uS8`>x4PuF$Ln?xANu+?k&W4Bb5rtRpxDxJbSmug? z$M;@P-(#9yuxl$i{=!+EN8jrtDB-=z@*M|lXcxf@mNfbE3A#u>sy}Ky^BMo23n0`K zcQ6Kg^I2lDR8vwt?Mzbr1=uitWozLQXo8PhuOKS1>P2@8NLMe#LnSzlZS(C|E%UH= zK&~mChuA=729EN}Uz9-Go!`&q*VYb#%k`87*>i6?4oE(hD9X`6%qb}^td$S-1HA9F z0TVlv{H45M%t2%_$u)3N)Z)L2XOK^jufHK$xb{J$8uk27AK|a_6JC1uC?2vq0MGGO zJebF0D%@bca6tT0Z{)d<6DMBkVmyP=dy3aGnAZW!jkRX!F8GiYSSZyxUQ{?iRBi9N zGLqm4jYl;S{W*4j79|Hk<0v3e-?##BlxDsXIu`NBK!G=dNvys0>-Up2I56}=JH)ql z%evNS9o?!?dnav7b=?X0l4+!?-_D$C*ruYV!@OHoKY&gILS*G1s6D~<_YMyLx2C}X zz+|SQ09@8p2E0Qo*O1!3ZOCx`=5q`Tsd|OWuv5XI#vvxp{D)eHo9jIHaJ3f-L-97jRaEcr zV$O}LYQGr5=;g5wVtR*d5&KW@)d0X7ce8v;!?_6O}XeBIt{6wfEYEba5ZoL(stD{~#B(@WZ3y%4=Z<+qLWR)$e;b z^qoGDXw80Z%fiwtv#5`5YNlDx?c0SQwLf!XM^%P!FO`djqDQUy)ek4f%~q&&Fou{k z#pqLJl}F`cnq$ClN$x`NbM6{&k2REkgC<1B5vR)W8ExQ?4PFQ8g}7dHIdoWJ!xX5s z^sXuFh$qi3Wu%6C53M-`E_m}2FeR)3lZhaq2>yoCf!qHv8;v#_<7*0^g=Gg62Jen? z1GECijiL=E)}MiYd?uc8$f@mnEt66$V7jq^PE4edESTh_0hr>s+G69?PcsH}VuSs` zxi@o$X5nbbpd4mFcw$YH!d1k#@Gkz2LKt1AdJen51y!kwe!E8`H@o;-uZScDa3J5* z;y1}%;dBo?Y1^B!l9v(OOgH_@X=H-u`(kbI^1X4X^utbLv-cP(2AvA5wZ z7Tc~J)AMn0xo$N@4Wd<2v;c`$#WY>QjDc|nUw+R8{q^$w$y9hM(fnDo@!oZ!l<`TK zPnDmHB=%nW!}q)OA&g771#oe4Bk5H7oW6Z#VfVRf{!`?E!@;$2oh=sfV`XiOsXG>t z%yH&cvqm^bz~}JK#?@iRYPH1k670csZ1kCta-ElWcndTjlQ56k=*qC3i-;nkQl+#kmsH2y-4 z$1%G-Ki%F}%diPjh2DPSO7e01v-u>3D{iLO{;?$aTQ5fwm*EF&kACX3s1~oNq=>YVS z-YKjo0I`qEv&nWPbk{zB(~-+g@0HHakM^;8=pq8g#qP$7XO3E%ZXZ1e-OF|g@r6S| zu&u})xo1Ht|58-g-C*^rCK)>dp$L;#$9Fc*BOJF0rpjo#{@`m^ypwBbDO_6f^6$Ey z+-`jPxD$l&oHuGun9)@>;>1Ax!AJ1lS}Zr9HaQ1TwokljM|df6aJ_3>4n|1m#N zC0O`{;S+mUSH^L5+3S?DRcB6%|OWRTxcUn8-VKviyH|~Aat$=geAH)79vo5_a)_?^QnN2FY zJ8eBADP}?@{yo3W<9Ihy?eY2pwP92A3ZcY`^lm?Un4teov7WvziTD^`Y2amKs-PJT zPe!$Qm#k;)K%QPzvp+m7zCw{l7P&yIk;L*!<% zrvHRs=MEZFHjwk5^8yqi1{6*#E91QGLL>TRmlrq}+$38e@`%uUnt3>cKROQkVVK|8 z$y`uN{c+(JgD`CSe^>ndTds4M9LyLq_R(3q!0l=uv`e{NP*wVZr0*<*=yTV9l|@EV zN}ofHp8gw!4KmWP9D84C3dq-1po8HahCQnt1~)w*2fnefx-ig0I!;uhRww!ch)DwC z4%xDJ{&C}MfN`FVwqiPTjiS(OBvX2VmBlv_G#NHCyNIMX0t7hJw(Urt7^X#|SiPY9 zyX>hUtUlz^yS6A}Ai@JgP`k~E4wjYle>XmjFhBLR`6knc?w`=%IVZB}ogRw+o2ghb zmLWiwX?H$3e)Pd1PskNeSbg;IIu_wjO$4&?;D3IR1lVO~vpjY%d&;*_SK_8oSkl|X#>San8uAglc+JOE!CLBWwmK7umB%7k4QmVET}poN%6)0?+Vbt|12%X z$GT=geF<+68sg$wWxwCaMf%<+OxbwsQ|F35YPC_WPSSDkd-qDaRb)$rCQ}Rb)5=yqcOdQJ8}j} zw0xAmaP-Axz(%X--Qe)Div>(1R=0~uEYO^7Q#!#T3+=m zK*pMg16D1Q)I`x2$;frpg40(E0X4U`a_x-CtMTv5m>hb^?a1!|Lq0+chO>F9yL;=1e>r~QD>*aG` z6dq*h<@zQEgsCh$BwQOqZBlQ+t2QZT(|4#olDAroImYbfMOR*|;9v7NZeSt1gKdJ) z`+v#;v<#PBx$w{W1wjm$LA69+T?eCmj2@4tM?W#-5=oQKK+EaTCgOI~40tiGX?M4L?<5;o^s5ls6#ehrq|C(O%UhD3f$wFVzi z&!tb&15$Jz4ap6@WFYD3}vuPMY}=Kwf8R zerUO}T6kOi^XH#BetsUZXeOKN)p?0lQ9EHP~wuO zr55&+S#%A9S|rhZY^jwHOwO~jILrqla6bU+jUhJ@ubGfT(*q`-j3Tk7He{osAe_uh z53dMEc-~id*#~$)S*#^If6Hpp%`P>Sk2L)80t2<8A)#d#CeFs0vspxcI{$S|>7*iL zRBH_2{CJ7tMKV8Qb8)?Gk1*fRJrW}1@0}MHcAF_2>IDFcpDoi_Xh9)6yhld&yqVQ$ z>nf0faMgr`bKqp;PVl|6br0daF}k+!8oQ_5{jYkwof@S#14@jTTSkF(K=lGCAot?cFz?sJtcI-Lepoj-&p2oWp@5HfO46CIVf3S8(+bsz>>DV;B1`xz(7 zeU>>^7L%@i-Tj6BJhP~l(zf~X27Ys7=f!_>L|qcA9wXE&`T+g$ro-y?KpiBCWQcRa ztL4|>+GXxmg5UMtYl3-!=uvU-a9EZRY~ULc7DhKAkqO5_kTp2K@*7 za%rjcN&`|=NQ9$j$y>8;>m~(%J$()fX(n{=%+*Y)4bjr{JiDn&H}heoUX0}!7pnA- z2GRN1af*=^L#(uiGK93o2oiWluqA@dqhb)Ir&a+qbBE0;3mTD5Rk}A2p*ShFg z;2r^lRxir@OfIC`;)7{U-qZ(`fKl}~nc2Ko5RVjWhl8&lIF}d0H1V3P=RCIUVqUR4 z^n6Ytg9~wfJ6e7IiQQ7CFxM?Do=su_efUB(4fXWIpxwYA8NLNI9(^clgfv?eHK~{a zmH~SXWJ7dwQ~wW7Zxt3*<9>fn(A^=aNO$)DA|Z{SGz=|W(lvmTw19wg2q-X=bPXZh z-67rG^`GZ^z3=a2AI-JrU}o=q?|ZHFS(?4w+UnF77+Ace>bD}xgEya|?~=^>byNF* zg*I?=`OmQfOd`o!UzF0WZPuI%fEq7DeE>x5rgcQT(&az-3QDuE!z~FINOxR$bl@{) zew)bfTmtZ8SQ<;LOs?IVV6#-fWE4=A1DnFN0~$NJronlONcd#2C|(2Pp{MY{Q5g|B z=&Jcsg!Ub+G`PByz#MIcFWhmvacQ~F@z@M9lH^LjFQR+*Hp^Z8n((+Dvswy8q39_c zP$AGo^MHa8AM08c4ZZzpt&qZBr#ejcB>+cSl33iQ(GFUikyR>SJbFw^<@UOPbotYZ+@_R+@JosiRXQ2QJ(S9%wj6l zZ>bigX(FdTgD|4?J*>I$Ma(5@^tm$E_X|sV*ZIs{Jeche2-kk6H_%?0?d*3TCvu#T zkl^SZX!@(0MyYWxD|I1z^dC%f{W=LB)~bN`+Okiq1|v82YNru#hEi(yAibGK*d{l@ z3$6aX4`Nq9`unEkORkYS$NO0j$^Ad_ww>jtt2*wZupnb7X=R4aN7QqWl;1z%Z0G+# z>f~|n?7va&07uDf#;8OxU9EG_y}W;2S8R1rN$5th8{(q*yv!3+NA)2nMbh5g;>17i zX#7LF{G|k(&c0vVUhKq|YPOIv;SqVBRDVpmPj9E}KgX=x#N0eJ%mIh$LiDxT zjpeK@#1i(HQ)7V83_g*m_7fG;)$Q5 zj`|d5bEu(G3zHksed%xa=~M4@*#->nD5&)^*0VWe@Ah)7YmS^WUYHZGz0?kQ93qvD zJ1S&}FIXxjW9u`|3YoWA5o67(OjtmK^7$bI$WW+$>V zR$?$;2i7fAS*8Gr_s~Is{zf_XrayO=YTU}JESpvR?KM8=!DZDmMH#McXN(s7k6q<_ zXytsu0m?Wu4?m)&SPATWJH}G{xGQhX@C%TSvIlhlGRx$1l9?%T%Z#GmV-x!X00_|4 zu58#@-4FjDK7sG%|B{ZOt>=O=AoQd`fcKR@Uq}6nbZj_>&^g<-sb@g8XxusRB|bHc zJDSpWMn>R)bSb7KK2OzuS_HhsAN{ti`%;?IA!)GQO2w)oq@4&YK3Up2^_L6BHaif& z3_V0o3NmU36|-W)sKm&J13piF);n@F%^oqVdsU;H*xhV?6iS}$Zs`hN@!5v}cZBx@ zc4^Gu!tK+*_$)|hlJ=*^{O3L>K>SI6Wvd^Oy$5+k{!`f|OP650UY`DL&;8GgYa~kq znz*fsnBNc=P0FjX+p}sSUz`V;S_aBhY-d#_G}mRh1JH$$JuV;{6M1H)FUD5)isb57 zyomTM#0bhbvjP2TRAr@JkgAnmWlhb`D$(MRVy*Zf20e=Mk*MBP+o}<;+DUY^3tDRg zUr8TXD~1{Xr{n&UIa!WmH-@>z2CYOyyo)xp#;^L*>pGb;PxIc=(%<9@>uAr_yy|DD z=^S1BrdOWhi~Lq;O9{N0E`Q>4mNxEAXu?KOL9Ha8B3{SsXW9v2$MfgApG;JF3f&^A z<{N#k$D>9X%zN;Cb*HDx#09=D=8BQpaS9gX%n0qOyl{Ge@fO*uZTmgH%paMr*%y53 zr_ED=++yXFn*ybQ=A$E=y8Zp8Suf2$F;x+Zd;ByoN7f}N@qEEN))L|A%rZzl*>DB! z3jV~5CWUQt@I?4fX!P!(eBuU-quYJz)p*~R5HeCv{QUT#&b*p}*)BxT{P+6%Lx#lp zN-c7u{p+W%CAugWg<`{3AB2%V(#E24c;n()K6!I2Za&ZXDg4lGDaKd0@dc{kpbfQ5 zVBA}4$%>bT>=ZpR>jc?j34yzy}>Tu9Ng08M==yT zS^*3O!8Mf69qDsS-*=bGFPu`E@Hg~L%mG_o()p$D^srNjEcks9MBQgM5dM;u zSVq0f3tq0`7V?s}qbtkYROWuWRhVS-X1}lZ?>YR9U0=TgsH>k&s_Yh3-sgaRuE22Q zPXi>uhJNAn_6fp3HFuJzUf-SWWEeGF#hc0XLgH1r%BdvAM#W<)0aqnOaI!xp`eB} zEdlGa29=RHSi95zn{RI0Hs}mD4t0%>g>L25Thjo^{3kRD8mMbwDZ$@YA#7~FzriKf zdhjFAzD9w4F(CGSZ8!XJ)S??|SrS|P>`A{{*x#z~v(xNfEgXMFb_q{51UW1o@h?mV zyK5zYtQf%N)S$O<-0Y-OlF|pi_vB5S&YfhCaiwd+*S}RnNq?g7uvEAx4$d(oF#0=x zl12%}vUNNzP8@p4i?{vWu>h?_t1cO!@pYK`F4d*KPRplJ<#rp_j^W)mvOn-6wtm`Z6 zU)^CJ5 zYHgc2>VzEfG|Wo_4F7NMr|W|K8oa~me3vmhX#7}M^2x^2{p%j5-sg;>CS7}`y>8>c zxuM=2qwDVmhMPZ7in*6W8x9mq{i=D#!+~`kaX^L{=|y_{5OnD~!}mCPl(&vH;-HtG zq`Hcn!sX<{xQNLzMLq-zv=wNDf8Z3B_lX*J)JYO5b)g8*h&Ff4(VoQYrQGrM_{Cn8 z8Aawh?Wr6YHXc@eVq39d-SpC=uK0zFykuShFIO0iK1<`ex&Lyz{A+$RQfl!+3%w-B zu=lJnS6vPVupm5{_Agz9)Sy}48%gL3EbuPXhM%nH@M|=BM1}3{W;C+elX=w?hn`S$ zCcL0vt0X6l-^1d|pS&Rc+MhLsHaPpr-TGh(UzBw z@*z+Lo%NI{?DdH`{*dK0=rJlHU|e;pgBB$ISo###a*=1Z^bBJsO;!#aYFCeAEwW=u4gZFJ*m*+&o zV*D6oVl$;bmuC;_#JsYm%c3F^#Dz$lKDAUGJqJA5JU?;@I}$28cl31*=Z;ftl3^mG zmQv)GVAPkrTQx7ZZA%ulExI#BgjcVpur(?y9fCLi-OL40KED$-_*WZ6%5Bo=RENj` zgF@)jr&%rw#!Xx23J3s_*EdL`ocWPf_MLY3!edF>9s4zsip~?D0s-8$pX$|_tL8~I zkjSl_6e=bd+5e;hk=5xQ z|FMUtRiX{*T=X2@!H=tq9INg>;OCSt)pNIU>i`~05uPZ|s~obf zsH2HXQ0Qvl`pm#(=i;r5@QUDp{xKQ2?1CtwI zOIcPTF~t?@5UGFb^HSh*=bk#qM4eTUxo>*S0pquhHlA^TwmnkjUQq#2SvT;hAXAw= z4xm4t$A8Uzq%amoIGtV2x{%!qarJz&!?nk*o2t31(HbEtSz|6mv5n(Q2~-Dj>-`2q z(pRIV0}!*6{1Gz~nYa!|uncf;y}{~xrw2G9*cD^E*lEYmtm$7~G=4P}mQ0&`RnP@+ z*u2_wzRlVAJThaoxAC$fS5_!@HUDqGL7?t~IqZAMUx*W6oCll@)B?m2WSD)EutHrg zo<4cOtpd=GjziZIs5s}1H4D*=d<~#9>zzF3^-x3vTXZ7|!vPiL#1&FFU4>FS^6?3= z?w~74Jm%O4D zs_%Wslht#ps*KH35KApfW(C=2>$oyxPTm6sGJK*}e4@Phq6&|OwZisx(NQ0; z!g$&}<^Ai>RI$)X#9cgs`veMzn%4xox(_yL%Mhu$I2EOn!?hl7U)@3Zt2m}KjSXuc75&%-p~gj7Akdbt$}Y)?|w?3HApT((MAQcxV7k z0yjruHin6jypRtsy_T9=35X1(SuXmuJ!9IALl)Dgn%_*R2J144W*zW}7i|QU9vJ1a zME19vqQqg9v}!%_PM3Td0U^_ws{P-;D~)n*TMaChl(%jSXGxX`=2a!LN39GY@vARh zRFu6HX3;LU#P=Q~fo&Gt#X}Y^)Bfke)Kt%D`L(9%KFwWCmmvqA7$yH4YH14%P@v!{nsvI%0T`ud)&9_Ht-b^Z#S(&vIu zr`kQGWR4ne=FP=>+k}P>*<+i5yVuMZA#1JA+?d@yiNIh7v87t7+&^accfAiOEjdZ= zA4eH=j6bZ~lGNimL!fCR#7Xg?%2-!$ z&<=l%+D_dEfPXRXM=5wM!WO&qe}{V14!~V1NphsDQuc2}$<&qK$!P59gK~doFUPC7 zf-imd9cN~j3qsFaJu2)sE$$wN00ngy)|qyw0PQ5Uu^bV-&S>6(vllaF$oK#XBh9wl zOW2gkA?Z^YJ$(x`FRmHC>NWMy37t@V`g@I!oN}^+**dcHl^JOqq{>R+!aLx9J-K@C zxkL=61fdi<{DW8l` zMACpkoxWQ#HC{@+pg%20{Kt90x#a$ka)(>(X5 zRG4*aL3ATYqh?oJ$WvASN48-1v#OgNR&+pJU5OrqeFqM_;D)r<&ZN~2r_Qf`*P(60Bw*nsWG7n1$x}o z5CGf)f9z^85Z`d-B+Loua5ury)t$kJ9$ltJX+eCwzWZft;+RY=CoYV3&Mp3mAH=n1 z_lE;^LO~cQsI7(hWu3;d-y16fMQrFh_7ud+^1imU=_>({A<^&gL(++yBgb zNB;$r*QJ1iVM`CTe4}7{s-5HS{3SynmBoWofKl$jsLk5fqr{aCM=NbBnFRGbdI9%! zfeViv+z-JBF-!yj?A`=f4DN37be58cf4vfTv>h<~c$@v~{ZQA?@Uo2j-aRl=-<)aL z2(g|0u))0EGZ#*G6NJ>(A3CKta;6RZ0zVOY5ehv>o4FQVu;i4=wxI&<+^|Ge>YTD+ z#_dh^oAH*b_)n|&65@~DawkW3m-~m?j0^VuQFj`&X8uu#cm{>w52oLNZ;ylQd;@CiymZ++2b%tc3rLGLd=9B))5Wj{+T zh1&DH>ZaaU_~i|GN0L_fi#cl}ZeZhGNtGU;O9L^a1!M&zq}m>(@CTlh8vPM4BG2Esc7a zs;hr;@#+11dW~Ml_8$EPl_p+^6U*-S^fUl}xSJ45cTWlJX?>86l)i@_F%bL4A5i!M z#R8=QjDK$=!Ug;}eD%5MRL9uG;Tlpfh=&PdlOeB8G>6|hUZ#UARAR-D2y?XcY;?V^ z4J#;2HJCMVQ|RfKmonimrSp(BCaFn4w?(P`FUPNmR5{#@ZvoE4T3*F59SC)}CH-7- z^~i!z%1)#EcvF<%mXY@AM8yJfE}L)pq}`bT8GcZfSOAM=TVyu$0wFQw#LVvW@`t>uMb zKt`r1qLe2j3)nZhU!6d!D_SeaBf8QFH9o+tu*owp-~R)+{!9-V?lBHoveLCc&wnK; z{o=*IpCgv*W3W)V#ad?5kAri7LZtyvsZPc1dm1-!&R3}a0d8{~hW&-R84Mr13W(e==gbJ_FYQ^XurOdoj#db=X*B>^l7u-kbhafIEpzE}!VOu?Kz z=Kj7lvS=6+tf=sZ_SvLHIYHccMcmMund6Lrg z$@9T={lKopFBCR2WlO6eBT7oW-GsC3SK{pfTOoKTULEr9R>>Ys z8O?+~<7*R*a(NG<5`^#sfN_8@bC3)gf@|-qD)OC=zGY6d^Rds~a_~IUj;h5W*$#k_ zUv|^xZMTQW?twgE>Xb@HmQjJBiBp^@oU6B(sP(nY=OJ+IN5RC3x4)3P$x?)f$LQOTXyVxt;+FtEE9gxgr| zIe4#!StWZC8J}Ru2zvwG4EO&~8)otgKjJ#*x&tG)n12qEirxFx>i;%v zjs$A-2|Z&Evdxs75VclryN##Q;F$UF`8+EI^4mH|H8oD`hj{1-UNkwm=(3ns-CiHBq)`c?q)k8CX@B9c2CVCG4`X<~ z*Z-Jr{b4U#M;n-nlw_{1;yDdGdW{vs(h%~{nc+XGOLSI}NTe9h<9VZjQ_CAjCAr~d zk;6vF;+=0&J|}uJ>%E=e*Uh@ucNb{u>Ol$ff)sL~?7tA0LGyUm^bumvSvg8Rx-_N( z_24EvfApyd%4k&nk`wZ>axLG@O9;8TgydWw3Y@M<$eNxImr@W&~<&@I*7 z_#*zG>j*rI*WCD_x&)Wa*8grJSN}C&jji4TF7xow*vqb+VTZW68bb_2%TaMt3H+e6MeYjd;sPI$gZ+WB_Zj#Omyk3+cKdwK)8-f~UFTjTm2g)4cZk=*rhq}_XSVgWm6JZUI*#Bf1!eLK7P5b8)g42)7WBQ?4O(MS zh_FUa3<1bz46ur5!{y|Cl+&XV(kD%NbKbMH*N1ANm=kq765}XV{F3WJ`;sHQrqQP$ zQ(fh{H10vs%FjQ}4l}dYP%>Hd+rDK4@8SaXaGxF0A2&ljexiTPXWpK(duf4=DSr? zoSBM7gpWJpU+~hDHVxJT0&0OL3y-V}gV1<1Z-NSh*Ykm~tOMijVWcMJxqZx}9F{`^ zHg8DIySg%x<`FwOD;irr(k=Z6S1T^~D!QN>U5*nCj^ruP?0r;1g1*c@R=ks+SM4Qy zt)P*WsQ{Ez7y*b>g9F&@TRUpO-i8GojN}U5^{%a`PULFU;n=AV9pC0btS$mrG6zz> zgrLd-Elmxjxv~OV=)suVX!4*Sb&Jo^gU&-Dkz*}yIP66H`6DacOO4uQsM3chG!%a* z^JD1O;+p?t`J&n-jrrZCW4W&O%BRJt0W~Y8?dnHVOw0h!X{{HrN}rd=l-qL6qG$Gs z0s>W<>e*x%H=3KN0k9|f-35bz0?0-2Wp3UxK=#`)Sm6aA&wivQyZNSPmae1Q6md_Q z%n0`t@_O#*DGzA9<2*S8WpNXw_zf%$D8H!RKVZCmKynhVeV1EC;^I7{yQZ2V$DtWt zZTuuZ=k+{yQPlXl0bYqLFvu?7{8?%959wa~ji}@k<2`KTLX&^`Sb17%U~!QC-3_W} zSECfuGxg%wdA9JI9%?f!#J}%32?wF>{!r6ct^s&FACcm&7&Eow0p3J$E|GvRe+|y1Rm#G^*;KE`WbKb|xYj(+f z#)!53ASNaTg2OD?VoYBgOPj6?Gj;eye13Zg7lsIQ8O$O1 z7ub-;r~Q10-!?--M)5o)%Wbp76~-TgW13qua&{X=POxBQNGn6wF$~4Ungx{nvDB*_9qKA0hw5} zsC7wP+m5XeMl?q)d*Yl6YBJuh z@?djvyVK!qCcya%P{hKM>YRSA*aX>Ag$b6#GR@v@Rr&gL(t1+(D=9r+KH#U~M(O8s zGt1xPwl@RJOkx@-$ zEzXd&!UO^<;-Km6^05WX;+R!c09|CUET@J;tJ&3SCs}pSh!&YY3KFtTaz|2ouboEk z)mBv0BXB%(f2S|$iaJik!mU!!-rRpb=!VdGxh5T9$)oDGkoH<{_c8ufulc32- zC%PcHDsSYVw(8x_h>_ozyNHVu)5Ps}Y3X^K>AN_sdg!RDa%4a&{YHf%#l-q=s>i1VMc9atM=MV2J@w;k6REw$`rl;6TR%_^W)^E3cv*)G@ zlB^E~er=Wdm6KnTr~08T2yP|$QVAjyy35=F5NrbT4ZOIh9f-xQr3#vcZgHv;hl;Lc zD`x*|jZjgs=GgGTZi+`yrov0NQ|h#EsJWe@yuJ zDIIT?UJTp6XM(y#UCbn7yp_%$kt~U}9Uu7-QuBIKufi`RbsK%FL?BE1&O=>ro5aW8 z7mpSE8f8xv&7-JEjY-HSkUI*X0|CQv<6?IERhFF~*Ur!))Z7ZI&Y};+x?3iEA@MI! zC_lF=^%??qQU#q|<&XdULz|11C(*c#nEp5gSs=LU6mE4H zMPFU^-fpS7R`c?GXJ?nboMJnqzN*He+#Ud$6u*5o=e4KPEpsK_$6xc{X=BJaFua$& zv7O~Qu{6`NIbLj4>5+*8L1Wc32Q}keehzE|$Khzb3}{jIUl)T<^M|@gezuYB!i_6!FSqZO8DW?R5S&6y!q*gTX(qGSO(HU0nE{kIuVlnDh;HL3QkUpc?D z1MkGfe#D^sNmvl7x8$ILXDwND7&3V1W{i)v0yUE{SoT=_$WHUSqdXn45MQ$x+-HBN zrC4}<)AW1)y-t@iY2Vyfsd0lNr*lUzb@T}V4uOw!>zl$B);U&#Be9Av)X=?u-ohR` zax;D_kML67wUoXZKfbqsE8#YNm2>N?CvM>d&-Njls|L2UY5lr>`B$~KsHjuTgnXPv z?mmW;Z)fb?RfU)Lw~|#4X9N8gr}`lcYlZuy0G%7JOg|~)$hSfE?%W?a^c9+Z^eq3s zT_4FL2x;9m4qQ^r65(PV=F+K?1i&oV>>c$JYI@=t^QMR3t`qL3vU*)09AO3a{#VdO zzqGi2sD-!AWx!pBQ=5Zxo@pGsjLU>#me~mFjc;Iv!Brr`#h3B>Z))T@zk$0Gi&vI& zE$`_iS@W#Bh&~bai^ym~&6LiyHPIKAEq_@JhrVS-Ir}gvhR0~}X|*}J!K~m@>Oezu zi96I@En`tr=AvtHD{XxPh65%or7esGLc8CE@Od!4CcT%yLh|f0d|^%r89^65GhkE` zH5%SgJ&lkhd`rPPd*|dkTn6QA>4m>$c?=!mbU{JHe;eu)c9|K1_+J~ao%r={&sJM^ z6?2(04Qr$1_{8^fv^Cx(a!=4j5jlM_%nz72h(Y`F5~xfuev|1r@ft~M@b>UQT=toT z>5bs9kjZ6_p@uVKPMsA8Mtq(x>CBl2Y$KY>QCoSv_o zj#`j~DOG~%^%DIz`)yDAj3ZEwt8e|UR_VRC_4qaMHZ8yHC&90jP42#>b_;XRcI&g} z@)!-bUMja;C?EYdwf&ol98#2i1n2=FqwoS6?W&5?3Uc*vmaEWlFSDaO-FcX9dV#!EL z4q!Jg<-VNbd^*{j_dgw&avy=eCp#5eF$U?HCm9#I z3eYu8!Agvf5_CjB<#Hj~)j1c|Ecb%sx;^~zoqO5EJ-zv-&q#c5mXQF_haFxhdQi?+ z0b2J=LJWDKP@28xdx2*K>!jQ~k-}To#gHT5Xi5rueiT#BetFxRk>}&(-U3Rrp)rrZ z2*==ZTlB$O9f5AyqbY04F^LFVHu65StfFWO1FUmn#Kg0Wd+U+i2$m`nbfMQw<%wrvisJ_I_+@r(v1)l?= z8*c!+!hl`M@`}Sypu5#EPI)NY67bk}4t8`E8+}J*%f7T#6Y260b3mqZK1c4Fy(VaL zbF1~;nu+%4lwPTO==*p5vRyYSsZRIGN&&;xAmekIwo*gYz^t`dL|eRqriouhd`Btq z4!`$9ja#+D&@c_!7Qf?q^~TewW%N7dx1*e?z8%s&s>6|&)v=K=EVF*b=Vr1`00lTN zciZ_F=?e=HwjB zW435+j}oy|`jo{!nsP}2@dWAN3MfgPNE_bnpY`?IUsje~_VDcgN%%1~4S2#P1mA^) z5Mw}o6_Zq^T$q0GwDl@p*zf*>Inz<3Yq)q|9Qat_dzKJNN8rW8J;8Z^Dv0fq0-tX66*K*ieZ8R+UAvTG zm>B5PK>QDFQmSK$oe82&QJ!IXG}<6~;8!p+MLsrWRuzt&X`T>>0C|(wARhTm@Ul0E z<4X547s~(70zfg%UCTpd@hEdZP^BEl8eZ-FhXDFCI9fp!@Q-)KdEEi7B&0;_Y%cqs z)A5RhYO>a$R(!i`m*a!w6#N(eDDkl58728HWOq-1Y*MI(twQP~chhjkQe+fxu4R^z zP2>z=s)D_@w3&NY^)*!8*C(I4kt&9)ltT1PpmeG_Lr4j>@%y{^Hmn?V+xV&S|8F6O z+{&@r21PyJ*KskS+dpPe8ObSoRLoC?Ry+RNDRET83o3qvY!N5@kQqud2wO89-Tcbd z;&oPo6k|gV-(TG#eg&=fXTUk0;*)kiGbgL*Nc)WM=IO4huxeB4+W#m`e*?RK5sAcU zXHj?(DAO5!bb1{ z&Kd$5%{lu6DT#f2jU;+Og&>?S4|Ut}-YoaY$(MW9W|PSYuQTIm6I?KO9!v9@LXLmI zF8{WgbbORzc4oozFsB5??d?kLq)U1igDEHgTx|?R8|0xOPFKyWwuLFfVz@8wbf5E z#n5*QiL0=`5hO9+HlgEG-wwPo&HyNYNoMi%p;g;3YpPBK<=T2t-kGv~su|D<@?BNG z!FBChNv2d=K|7uQKfxI(p1tXEI~UI*gS`Vv_PIT)ub`XF%*rA63l3Alu7YJz~zDjY!1$+R?$&GDbK*r=vbZUeh|`ZsfuZ2@?c#h2Wm?C$)~s;~=byQ(SoW`5)K{GVvq7O>X7nXHx)j#%q{m5rAN%~HMTj=~R#%|pC{B@b* zsoc>^C73&Hbz7hB+gALMgun|G(6N3EEs(49 zBxrSza?Crjft?g1LkQLI2`qI2{+L89CHq5%Xd4K6YRJA9{U4|>K&24BLhEru{i(pI zEg^wEqARv23n@H5A01C!wM*moRyPOV@&f1+G*_371L^=q+_RJ`nHina?<9oobKs>;V2!RqS%sPY^R7W^P*y46 zBEO<^W_~?KcYN*@%3P+TTW>k)4PJcf`)B2Gz;6Buy`+Cp$x7zVGjHVtp2V%7PPLuR z$D)D1Gja8aagw{;zV{MT{ykWruXkwO5)A&TzUk=W$YC%XeYo*pHTi4g*YG0e3ea7J}!WuDxjg9gPi~c3TN+cx9 znv-mua%2XKf%;tueR=TmM_R1GFrFc|Q9b8T{l?MxCkB#W*gbXeli@-AAU_nduZlEB=;pa z0oS)m@xi2>mLz9$(r-+m(bmrsjiG~nzYdzdb2|HoF$rBm%k(uhIabx7AqZo0JGgV^ z;Iyd>3-6Fg%ToV0=282X(Ozp+TK;&_Bs_CRx+t1&o3l($FG?s!O*-%H9T4%DlZThB3F1<|3lsNeYh= zK((sYqd??0YifqxDYi5@uLVzEuY8v6FDAf)+1u?q*A2kO=&cq+30ad;NF&ppa>Vmi zd8$ely?a_5p{w7f-J1k!hwTE0;`gvHJrXoyicq4FT5j4*;};h@TfScUFb6UXl|qCh z*bfwIPj>F-+SaoSn&6?tvnC;F_v;WJ61ttey`?l_=Uw^5>*xQfpDWSwhwco8=d!PzdLY1e1e8-#e^+K z*Sm&K1M6*^^HZSztsFUFul-1@`;n;SSKphU^u_Nnhx*wZ^;yacN4!CMP7N;A&;GV5 z(NF!WCsrxKSkgnO@=}Ekde@V}M5W|AJut~WZHskE2Wm7%{lb40G>`gdBiYAPnoJ1R zl@HMDmCDKw`yRn2D_-9DS%DDG;B#1JUqX613Q@CbgG2Asp?cl?G%X zjucUtVpbez8hQ~F#O_`(=FpBSHC|2fc$Y6e(go8KxK!?G%yi~zrg-g7_^ae(E`Du& zjdEPlcehUyKN$Wv!dVZptQC?8l_+Da!qAP95iuXAgl`I?`q5G1vkL1JHI8vW{EZ1A~P1pe;sO&FT7 zjpQaiYI?l;i>(XS`^BhpylpQ{E-D_HGkw$;9i25OM@W#W)cBSI^Ut4}Q^GBWF?K(R zws@zXu(5+iew;>bhZ)Oe?%;<;pfY~}yAGAhdH=zG`$>p){Azc0hud^pCucRdR3Z6; zg~g|_W~yeVu(nSQ4695nCc+Dn(nMixvwrm!yn9+y@d+tHia!^AvQK;#4!}njK3(em zbobHD05LiIWZzNW>t;68@0S;T*aMCj8%-Az5F&qdwH&rD$`bZajIqEWtM=Pfm3#{V z&8xc`aouO9xxdE%*y=0ns-hF;; zTWuqP&cUu7d^fY^@KX4g;DM3Sme9j^HRu&dQ}@DkDE`Q<{T|Gn*H#}^-gsVMeebNgF_S-Vt7MrsYfY1B3 zeS;Q#j`@R}AZPgA-Rl4^-r-i=x&L1f7b?f;yxSLey6UY9<-?3UI7Pa}Z7S)fA~$P& z_CFp|!*0K#8nX#;ktOh$P-Wu*EJ_d`$UUSxZyllBcTLpxHzXAjlhUkz-rYJ z>y^qYL}afSHb4-k6|h_WR?Mi0cEK;`Lc%%;WTCGl(GOA^K~jLaS#T-*9UHsEUjxwB z>*as3mElkf`N@@!Nx6Z>M&v*trJS{$A1qBFtOSo6T{$KNU;?IKQXWZGd!1KlNRcEn z_ZGCP$ugwbTfLe_UzlMq>GyKDPqcD`e;Ehotz|Jjz=kF>*|h?5^mV5a@5c(#uX2s+ z8+qzRHfZgJCD_D&AN({k9*1yjB+9j8n@}mk3k8+|{ialjRngEd07XKyJ&O`qE`-m1 zCmD4@A0Xk#$11g=_1lri!g2crtuB5JE!4jw!s>ApC#283DmlR>YVAI6oS^dtEnYEG zeFdMKM8(vSvL02aChLe{nLwpNhKrA3dULHP>vJZ)e~R!cmtjAP{!6JR(wVa>&-(X3 z>~qpB!0b~;cPlcf5ip3E63UAR+1=y;6KEhg+ErB-=b|GZ4~c1@$QN%X!aG|)G52-O z9WCWC;CqcJMIsdO?*XKJt8Bodw+Sshm9| z9Wc@jn^M@00-=3_N69*Venk=J;Ybvbo41G?$@ui}O4+YT_umXhu-H4yfE{EG3Tyk| zXee@ZN|xETIiykhxX*n7Ba1nj{5FTD{4CN0!bt@X9)n%t;nJs)K#t-syu% zkc>8x`rcTl8@}=|wDS2Gxvk5;6{&HnEG+D?g4e2DMktXupSa7rFH20pVvpXZ^50xBM^1CFn$DKS*GP%pAG zsYWH?GlIk;-&Uhm?#fnNi`27gWmD|EVYPVo$G4OiZ+@10=4a zn~+RYIw8l!9gIDCk(cqP?QJ1-T z{p@5C`gond)RxcQxAm>bNWqnmIAJ3zlyyKz zSF!e&%8dG@0iR-q*i@u@owiy7--vvMh}}*Dv(eiFlNdAJ!SHv&ns2Vu`|SUgW{(l$ zXjn0(W`z;Y_r5-;8)%W!34csP_B`zIY@~BJ&iv41f(NzoKiRb+7}-NO56&CDjyUrC zIzZ#K6d+DzOZyC_!IfqkHYh-mj<**%bxhw6CpxP(y!T_Qs!Waz4FQ4 zwdo#Dh2!TQo0iLT%z+lf*-(;R=Dezyy8*umRH4JIzHT4ISj7W@0jVik(JfLq0l}=_ zaB@R=P8ermpaE4MolOWR5sFUHNz_r2IA~sAb1+Wl6&0QmpT^fY0g*Ty@a$Lb?q3H| z)QL*pCz&^!A{=m?Z;GX8gyih68>$Km8w(HF-`9@jy_!SrYV;?ruv7xoa@zIg1gI9b zh88A;RQ07I1>Q<0wznIXF}LQ?ZxlDll%Dg9RDX>73#h4vsFc!`J`A*=VxTfe!m72` z$!cY~Iqj)wRVK7IvyEIOqZ34Fyt3B&$TT??44K-k-u^$f&he|#KkoN?$H}%m*{+>t zGN;LQlWn`nGucyIzn&suhaFp$P`M342;n2C)AT#*eaZyP^ftT@o zlzu*ZTLQppfIYyXjYyi03T`7<{;P4m#zu57=bXl~x6)y|D{1Dib8B+?Fewcp2!RA=k zt%QucU0+2jO}SXGVX}Uv5x>ISog@WZHRF}B!h9QGu*_j%GRV*c!|Bn{;0__8g51{lbmg;e|2(^!(yY;17z$!bWb?;(W;ziT zUlKPC477@w+~Q}Q!PCYlK3S$4$Yd6VRU6#N3C+ue~`W4rt z8hxreeYbKIT+$esN5pP|HLGw+3|djQuDpOP^}ex%ocg4qAbhA`|yW$K#DlxyK^QnJL?kSX88!Da|jwFz2S%3?YgzKGOr7IPxKk`*A3>XIQC0?X)SEq&i5u z2Ib*Bwo<|a*i6AO$i67mq6yzk+C|8F$%txumiEGKR;jE8#W&PiGm}UremTexptR{X zvx~I<;uu6DapLq%(LK(B=R&1^+UYyQn#NG{5|1)A;~)O|fg^5F8OO=Dm~1NP0BICN zn`JF@&Z#jlo&*h)l+jd;C>_7gdH_-f!78n|T`vL}XqNgp!-$qWt)1k8DX`S>Mq%=t z84Y#VFR|K7!z&+BqEpo0M?2KIyStEl?(simts4Kk#qvLcEacWmU&3R}g=w8i24l#C zcV%H{i+}fm#t!yt^;jpsWnHtgKhB&`DJM!#6 zZR!&{rHmqpV_W|s1D2u>+$f8@VcvYG#9o`%)oj2+HriXNW38st;>28MmJf!j1>j@Ke+_qRU zk%NR??8L7&4@MFtHTzc163%4OH~$;~-H0ywuvd&`cHu`GoEd4!O0PHd3K@9%f{rH1 z8BJuqh?IHyGdhI|2cAMy?AhkzQ`%YJn>3dYVk0|J56E8h6aE$o(>PB?>L1hbr}mDV zxVRC10uqh2zJUUE1o*n!N*6Ov<#yg7M&`fK9s^!om(ln5{S5sf*-?&TPzqxXwZ9Az zk;d4lT40|yxw;I0N68b5oSC!Swcr-;^QPfiTD|NVEzkmdDU7dE`5~U+>|Q;h%6fVf zRCAf@t*H&y>j`5P)T^{(MbTRL3BAt#O`uiQ0Z#m*-au4hiH+)jSW?)}=(;n)t&BcT zN072bsEyc7&-6y4w+KcZX?zGRZQ&YT=hZL!$5;0g3_kYmbP_CybLAzSZKb`7L;XM( z6OL%SW}*go(K)s#tyCI6V}@--y-%7N8APRPVPE$__=iS?QXB=yIk-FPm$krJ->mh2 z6~{W;w;r{=O=fagWz#~jRkZ#`B}JmH+>ID6lnIG%e93i|k#AUSRKA)rx0_@Fia<2AqGL)SX5 z&dxRstbSp`$-VlI*?hK_Vz3Ws>YDHHyxxDf*R;{DXH2N2)r5A;Q4)ErvoMY$`-@if z>_6!4Bjtm4vYjBEvOlNbcLoV}fq))1gU|HNy)?FUnL8j5qg%e>dDJw4saX_c5-3 zm8C0rbSPX@V!qA)>cgGa7WyR<78Wq%8hUc0;!nwb!9U(-a^C7J@`}hVeFOvrUvCeb zbtgr)61nN_UYfPc3NSK!9UUnHqU-4cplt* zPOgG>TH7{5vyE=&>m>eo<@Q-Zp3{wX5qKY10YrE3PB=upxa(6@mLP95l#}SQH z=Sg8m=L(tVt)Tl^UFCEd)tfWl#paSl&aD>gHvA#9?d{se>)PdW6n&GaF=nm~`Ph3& zz)iolgd|$FgKH~JYNy|Ck~4EDxV7AXseR?R_xPRgojA}((EB&|8{l|?hn*5vqk6VE$0RA4Sp9ETSsrDV70nT%>XXQ!Eq$*~YPsyiDG(UeKr;0p5Zc>ZM&CQ8Q$^}O+rJV%{wO!db$M+ z9aM7NJ(OQzp_O8xzJRG1)OS=!l^{Fd4nK}MyX36?QyU;*i=FZba+s0@S=i@8| z`Y~h<^EAI|E*QFRiR4sY&JFYEQ3SzZ-PoP%nhSQ*cJXyz&ax9L8#dItbR(&ow^aPR zagLdTr!@%D?m4G45xnLOgoyxpP1&n6bg#nKdZj%L1r7WmSSxY?pjByXe2!`UkA#wi zQCwO5XSg<+!w&@w)>$E;re61uoy#Zgfe+JEY|(o8g|p5iIkt#~G{kP_2g{}>RD`TV zU}7SYXf{(+ZLQcqf0sGsN+m~En3zVul?NpbVm5nqM~E*APCO{DJ{8tc(?OOZ`u9fy zc7){pDc^4Lu6_hRUUN`Kn8WrtoObmwTWsO&{Vkc%ni8M87LXkt_;zU#+hjt=+R}Qy zczSn+43HgEy7fR8USd10pC~HrBhCr4#xrgVU&RA@SF#C+qsujmK^ZKa-4qg;2*trivx8?QfwH4?w z*5K@z$;v6$)OHc0RVY86n{Jy|c0Ho14bewOl8csdSoGno5uzRC8K+!O>m zT1a?MxxBCNIawBN8jMStBoo-R<(D-lRqj1Caf{mX^O>7cpE9?#4Ry7br{NW~)Pvc= zx?EPpZ^=sSU+17?y76x4Kl78#`|d~i1s)*eQD_E$Z2g?qo!LP9oGc;qB6F!`fyayl zwN3sPfOb47VGyDoQMF@k{0VMCHYx8@CRA?X*YZ4m3~4jB)v(6(Glsns89L{YbpbEj zE}sj3{kxZ=0dtL&sS~TZc5V6V1epZ<&y1tk$k$L4`RstyaJ>$@HA+K}1TE!0_+mMv z>u+di@g&FZvvs7k5372zdQTmA!_PB&Wc2?GYyNss9>D8E^}?#@f=muWlX_RY%dfG4 zP^^TnFawxaqHb07Rm!(r4*WXKK=$RwX1hw<_;pR#n(E1-Qr;1wpG=6z1Hi5$IMF?i zM2AfJWK>R7uZ{0}crC1W-H?bF;sGHu}k^IrQ~P+kX_3KL^}AelaA9=e3!VAb|grH3sV3-HtMF z`e+BU-P8XfC?MS-Qn~(%*x=3dg`YS4WatxiebAj%?L7`)z=3WtRc0o&=%d??M zY8=j>su>aai|iNlqB4mqziGanWJ7s`fzs^CKZDu69Ic=*A^hXso<&#uTv17EJERimbYzJx!})UC~>7 z4z^j%tYWe}<84tdz^%~$Z|l0~d&t0MgvF~xCT)D^_o&b+Rs5BH!UDJ8q@HL|d1D$DRpsyc*N05KFTn}PcG zPx5HF`mQLIz!Q9AOHyT4HesD_pVh6(YcGvzn%2JF_^W~akbGK$AU_V1n^R0h6{3Uj zTHx0>Ct<}3Kdy%rT~{?IQ=T2GRn0@Y_kcXk+A~WHfMq34uI~zE?yKbj4f|)fosHX- zBtN%*7xRLj%}ofV5~_k53>4p^qQ)$&myh(k3Ga3<9J4B1!TJ2a?2FKj$hXxdnE-5d zCIh)?L5>~8TZL9v?n)0T59b}8Y7$m>PmjSooEw55o0sGxDsv|8Hr@XpVQoQJ~N|d!dCqk2_;Ac!aHi72YgC&CteX ztkF8@8y=RlN-=%_DcpC_=aS_g=H>(NMt~4|OUnx&MhTdgSB~u={%E~P^Pc>nH?}|t zebFcoGvHk-hjuh*eh7NJSD}o27JQ94dSN1 zO;6^uQ&w!|7k;K~hgRS{b*?1!(gM;*2_da~{OiDPyyw}zXY^)h2h$mwjC8mnqYUM-4>% z*^ZD!Af^E)ZD2X|_$%t~LyvPWeJnH6i4Ypu&$j>)8~tO0n;5S-h-|!!gMtnJf$D)Z ziFJ_04@JE)EP^vjDi^LUx|kSlFTW*7rOzVdW8XzD0tbP*`~+^M+aopxTE_@q6fq+0 zZ5IK$?=Nb^o7GC1_IEloUG+`3vcfM{T`Qhe^nAqxOL~#Skb(R|+495OtvplQ} zq4GWSc(Qv;!dhDmp^^(rr!dEZkW@tRnd~-O7`s9ChImL;3!*1t*hpSvhBf0!OI)+M z1R_wlgJ(z%Bw|v9=i!6jo;2~BP!EwOa|>*17m6qlx*NiN_!fu}2UZA)1wbz$-*$tI z#nshvWYhryqB@J2fD>KRv>aC42$L_@Y9*7(GHH1@Dx$mb@X`rehx0o3&3di&=+X+l zx@!^5a4Q~cVLt)kxfRrK8>1?XyBwB`Pz6XU&yeYBI_xSVnB~@sq&i2YU*97klpR%Db9#J6rP; za}p%NPT>0fCNkNqe%Ok(?i~z&ibXw;iE8+EacQ?O!-%UZV>qD0nN(3G#5&lH08!(lJtHoAg9(`)vHuW-|5Z9MULb9mwufcj?X4$-H>9oEkm z+BO@A(rEBk`%cWU>^x7Nfp2BI_mye^%;KWEiTj1cKA}s0Yt0_DT^}~ZV9gl$UiN+E z6v=!~%??|!F6Eu`N0vGNcqTuhmf#9{xWY|W+1XMGpm1E39<>GIy*LaubKB_cVDq}k61OX0Ne#<2a>if zL!${XkvTNSD#UXuyU}j>8WYpsF~HAjIB@G8s1j1~XBP{NH3uIi^Ogd(KF3xW6hN`=JGILX!b}7* zeq2Q5?OUJEY)-CAj;zYhXSt;@dZ~f;Xxk;CGN@UAP!F6Jh$X$bD(y!unO)#ThyiMY~(upvALK#oE`X} zL3we~73HXT)*Bt>_8eGtBhdzBc&1 z;d+dN(|9ixLz$aU?e!*&eI&$!3~p}c1TDDXgs%aH%;TcLLLz6D7?1DXv4@~3$7@Sy zFrJ^aD;%iI*(naBxRNsw1+LgsIm6bk~6(?HCC#wZkn9xElLk z(3jhqXvbu!{>Y|Qz@O2!GpqZW1__F3f=vI4&p^;;o&@A2wi(KC|K4_dN7Jc*7c~dw zGd#n`ExyvV2h4I79hXP{2v>p+q*3FzJHtlG9xg$Gnx^j;s`0K({X7bdF1gT8!7G3P z;A*gs$6$w9Y;<1w7&9}88q||J?C*6QyLFb5XkM8I5}DaqjQxmZN$TB`9ggnOmujV3 zYr^*jOi_(_qPP<2eMGYO^>!Uwp`fC!cV|Q9y#cjYxtTU8P(Db-I`y-A2eSreU;SrmPK+0R?L^H z`VMKr)qX$X{ytFS^x$X&Itnv*OlLe^rN_-8;m^b%#=NN@r;^m-N4;Eqg110JaiN#c zX=ME*rN%)1YU-cD=yfY&HrqUy6lpeOdL*8bp?u*t8jRMgtNOOwT+*{a@Jp<_ApY|{jJd~FXz*G2bXv*~(0jud?MIewKKFCgJeXTMO06j{ zQ0{CjO%*E1wbd=q{=D`4RC_XehOmXsB*`$RvRryhgLsUC08$(%;#mk|v@`n!a2dlG zk7+^is}gjmG;%pPdpKivHDt8lbss#!lkzDdRcK+)xIPQq=Ih)>eS-$b9r%lELL_=A z)Z)}uZbLTaY13WIMm%6D(d$Tz$8GvS#}M!i21G3OuoU4pQJswS^4n=q+V;SvZrVB_ zhJ1y}&~?=g_xbaYDY@qnF`%5XC~#@seEgSFMG*pB2aOKroS}PA6P1V{?H^jWK{FTp z)!Dp8dNVVP&tVC*ix!>@rWL`9j>+S8#MrYS#NGF52!q%4=x-Uepvh_M8kj4wfYwnD zmew+p$oG++zkEe6D^+MT18a#Ab8zo|*ai-6b6_i4Aq4Q?66 zv<+*gO~OatvZ|Wwg<7ga&NHftV(-Q6=}I~Bn?99;>oc-9j@E?IP4Nx7#|%(iBsBxV zh604A=imj=8iWF9qyeb*I>r)dxV@}9pT(FL?Fda9D@UoUzm{6-Y}7zbZP`Z#re|hO zv-uxF7}YK&JAB>g9c;=Z12FZxs}mpa8N^9_2lRvWUS!d)s27Mr6?`CS_(zv{R( zC5MX`su|QUvmnf;u?<`|*MN0%_dV~g{;=>;=lbYaw|gIt>#Rk))PbEPYS>d+d4TBE zM#gwB0NdkMttBKXtPR3VPr^fOm~WhZQ>>nJ0O(&O#o8S)(jg$X?#>)I+>Yc^Pr6C8 zCYdF+1bG6$D^TNcvi@Q9cSgYFVbJ>Ewy|hdVD=BDjTl6iZ4rVHU@WHQ7l3kbjS~K5 zd^I{bm00ECj?Rr@_(DHImj$|f*f(*urJ%(QBoq(1@hib{FWuQieGlApf~79+7T9Su z9l#x=-SBjgmAtNwW>PwXRg~LvEnes?JZEq`^n;*4ISKDh3kT_VE&5&6cl-{DyxsZJr`dygH4b9`-@s`hjUr{ z#%40j(+?I#;A4uH(g=t)Y*#2Ev&XjA>r)Q;11wd?&)_TA0R@~PA{AVIX(;WLg;BfB zRsJP5Nhzs1o)YJbx_L%M=6{6Nq775p<0L2}vQH7MQ@#@`{8m<0u4tz1+0KG)XO4}L z%7%WV2F^VYY_LJ;Brc!zv0`jBAhhb7ey;iO4kHuznM{W~cb9FE$iZ9S{qh^n6I_Lf z;En)Whpf-x1LJ8L?9&2*y?q+73G=XKS-HC>9J@BT1pXIAbC@drlJ!3>_ay7~KtiJ` z5fgqb2*ELarzTqOU;8&LpI#~n#7s;IIVV8$A-p8j^9`1A00s*0j$Z<8YI?G z${n{0;!rZDPq<&M-fQpm*`3UOWN*lv3(v%--GGNmjUVlj-G$fk9b3C5L@`5f>f+g; zfl*1hbYjcCQ?29&M&uPYxk+4_2%J%Cq2^xZExIYE;G?U423%n+Q?GLcQ%T9AcR}9H z2(0dip@<=Qo-#oZN`kZX52NFL-5GTK{$?<=Z{N9eJ&Nz*Qo0QWFRAws^7FQC{~l|S zj4=ArkRflk0O~WxS25&~?+&{;4EZFyJBC>zv!kb%^LT^RNYP&MI&3lRm(lrBAEltw z6sw_sxnVCIo`a!Dn(Qfh&8`+(q0ujozfaW1Wl(1EtUq+s(}ura1e=-TG%7n)qK>I_ z{iheaSM_$I{l}`OAmR{npYc!3pSP%W7BP{fA4||vczk)@fF~$;EBo4Zj76fr|M>(- zk`o2^ZS8Y6I-KT}33_pj5GERFly4Gu4XBEvajxQ`|(CnA*6=TAbA)_^}^U52~^qZ0`l1E?m@`CYQa8F_j$*eMD4 zcCW{toejEY^BU}7l*!H}b0xTZ1#KKqhc8}U$bTw$bSuiy(pEx(m_2MS?`~Z zNi+P#M<-NIB%xSZpmCghau7U8+$D4-c8i#}=$*Mo zyT7^xDx9TO#B`2du6i+-w;q5Bt|fqYfS+M4kbQds!*{~&`Ksfo zX97w8!m8QiiWoU8+t)oBERvO-bSd$*TXG`nLyOY08nCty6Z!5D@)Q%(1EEblHh=9u z{Or-P+=r~~>e#n{Q~WiC+5r$3NKU zzEDql1|@Ck^CL{-fzJ5AUu*4m7TYp3P}^=;Sdp%hMw$0kGyII7PBGt! z`bTAawQI3FBQx^XQmoZjI*}D@h=JP%%2&f4RN&oH%eTk`JTS0l?IJL!cCh95sh_uV zA7?DvK1A_M$uH+||M(aX1WT>)YchB+3N6;G;r{pq`FUz8J>NA|gW69-tSFCHacE1gdCVwV)?qzt()KecBH^ zu|{{Uibe8arG5A*%Rsufk@B2uc(~nDev)id@!L4~SfKpY)jG^W^u!wK**?M-ge`hn z^-tsbrs$;qi$iC{I<$UPTI=clK73*{WvdmIhje_Ic<$?n_<$@tMFR1K(AYImr1X28 z33OlOY?D;L%ga5hNqd5(b5tX1OTQqV-Y8mjjk&2*kLY}%+qBmFFQUKgTj{p0<(A5l)$1*pp`n8WMN7{2JT2v*Js_ekkw|Xi63K?tpj23tAk|kBYK^F{k4-&RUbS) zytVFNVcF^CyyM#VMtF*6pZ&0dl^Nr0J$>20f+=f-s`q_!slS8F$IZp)2L`$DG#+?# zvOn*~UJkEeY&{yvcsDNOHEt0bGRl8|(qH;lSlk|>%Z@-yt$#+LSx($-OaZwE4-X1} zYeSurzkrMGu+Xz>4&?o8~|syA(gLE!SOb0M#?MRK9c4 z?w5^Cxo)M{cjRuV*mKIdsLKpB*+wXvPg4k8Gj_KaB8W`KW2c|2xhE+%MSfRV!TLGv zmwy9TmUuJvPaqMQsU_WLW}Sbeg0nL+iSaBeCxq`;N2fVmW9Exr;$`co_&L%gsA^Di zUh?0twf{{{lq70&Vb&5d4lu2}Ow=34<`PyeO;KAax6@$X{P5%Lq=$6XCMf~16_pT} zDxcx2Fw3*&=1MFwca&j+nz`hqYpkVKqDh-I&01|f z_NO3Wba;9n+nmlCB_pkA-&89@fRFubIe<>++z-dLw$iS7l6CdUPn<#X?V;Zptl)N= zTKeSWE&Y^lzK9J9wsT5opHn zlZoFuP$-DVDTj%WbwP3W%R7;r&@e_kFZ)9G=E(@=TgPx+#zio8kL09EZ|d*BtCExX3eURl z)fQNHy6W=`Q!jbX2l;5LeY^Oro=Xe=_Okt+ zJP%uOpybewwGQXJFx_)}uKo}akSyP1Xf#tv#g+;D^VEA!?HE0utZMM&&UNOC(@esa zyFzGWy=m|7?mcpby9>)j9=OpBVih4H5_S%wAt1>2l*nJ65squ0V}^S&hS5QK9t?gp zduJPTMBXnt4H$}<^D($rsf?4H3}N^e6%cEsB?QemGYT@_Se`#VcYZo$WF6KB>d?)1 z42mILLm?9K!HqT?{Y`G8-v4>OZD~H>u;OPghd;SnmaGEh9~8N1gx?%Zps`8mL}|9a z?nIzNkO2;>aZx@sq*$EbSjx&@&DN^)c4w!PX-njc8!RjjV`zRe5GR-##C928xR8`v z&BJ*<55Xxjh_-nQ+X>fA!rxOU{?&MK3%hVRHVUqx2u;xZS1WM6Hwb=9km^4H-}+#2 z8L$Xx4spbZ7&gNC_vLk6Azh{X*SzW=ybkb0OBZqJn{!{c4Nsh=VXs-msEy_oIp%8=%m%A!%8?RVwc2Gsa3 z)O;}rR(WmteZAUY7_~&=WNuK>O6o#Cg}Y$`8l>q@uG1j+x2)}%EZx||yR^|*d%pRX zKQ-5t`{Z1&G+UeX9cSZW$3`OO3apEA3$c5)y5*+Z_nPdRM2Ke`1IKno5og_rZw8WK zDH*J>I&R#-&d;vCN`~Y-1|<-396m}3BIvRfc5r~0*CevE(xEe;IN-pj01cW7#$ARu z7bOHh6n&G{1&d6#HPtu{vKQtuWSiuo`H4{m=<ilO@mJLqK+G`U7~`2Q3F-{>Zs);_C91zqu~LJWrKDQp z$9$w;PLn8<1O*2j{PAp`xD!iNANJjzC&Ke@mo_*QXz8L-iN4g%VvDckpE8&XlI6F$ zF^v&{hW3ifxsm1eczAt6oIG@ckx)p+@U?z8J5@R@zAMan?fU{b-rSzisl;)$PTySK zy2)re8TV1dq%!r@?Gmo{vWNCG8*<(Mtmqhg;vh<0XHdT&8g@lt7`H-Q`_zUes3d?D zQ~&$;)(>@T@96sVMmX9Q8j*aW9v~3NkbcalTM@)`09c}KD5WOl--2lLW#@Uf z6o99>kMMDp-Dirj8dgfX_-ivxSJ2V`Pt`~pE!Aiu?n)g`R2nlK2FR7dVA;U7&wpgp zoM7~IaHQFJ3cf@TBo)r3s}{Oe$vXQnshk-bxAQ+dP|dgb!)|7x=lXnoR*c$8d#sj> z*0&{LfF@MWpI(i&L%POPd`Kr`Z&n8%c%m%fjMmZ4Syk+GjPbA#O2@#8y2Z)}{sBNu zt}bBCewyv-Lu1R6FSnvSkY*g!mM|rojS?o?5_Ay`>VwJSS9Hn#?lU}&4eOB!N<1V6 zOi3ErJ{4Ev?3`bHJe{|+gTl&qwD|0UgZV!-HRVORN^sUi2n z2eDX`MdHW z_UveH)Vb1dhg9ii&urZ$t**4DvzSl|RkXN#9(Z$Wd|p}NHg_3WXKTcquJL2ziA?D9 zci#`sBC~@G`!#O%Y1Zi2X3`H4HtJv9cOW`kd^Y)*4Eywbws-Mt;jia$e`b-fn{sRa zBP|W}l_N>I!d36{*VTTQDuvKqp*ENsk|U%?v|i-e)4L5oY0nHmH;D(kEp;k z#lnWjX7EfIqG>OThpdh5i@r|dNpdoP&@|=4Us-C<4WKr{V%ih)K^zP3Ks-@NZ7C6u zz90*5{3F_ab)^ow3H%22H(1kp!RiB-m0d<6zgJ(0&C)Y7hLcQUFa-ZM%rLnItU+LuD5*pGC$xBE}u^(TT3 z@IYz*=hdU%$v`CDVTdU?Qv=d-|BWg=y0E_>^R2cwq-frCjmIZ|p!J`RY&2F!Rs7mg z7v2qYYvgmAa%)v$MiS`jJ&QWilCfKfn9yAB|unfp0DH3ajd4 zxiggs2PuWt%jyFGh!1F0juggfl8Zc8A+oL#`-N7In}F#I!wm`jzFP@^JU7oaBTKaF zWd`rMbK|<_ps>qbaT%s&6~0z-tk>aFytU`0h+~XJcB{3h(t+xjs4&BnOX6bif|1O2DrIhUwl__yvin&xp>j z(kZj6T^rGb8*Ai4SR=oTgAv69Wtg6u9-&-@5;VGOk!Y;^J4%nuntu4|7b{d0e}`pr zgQUSaGKpS6uoXu%O<(5irF$BvuQoH9t;~IU)=H|obhT-+1+H20+uOx-u7FGy`Q{u$ zvor1EGVD2YQUDH1YC@H1EWE79(_Fe+*rjodFloFMhw#)Y?tgB`h4~&WHFl{)By)8kp0Vbu*?+%YCUj^*Lvb1fcVr z3`MB@+CXL77y#;wyC6pa_f1Aw8L75%|Fyrr>DWo*d|F<<8zxgbeEhIoGYRd))r3U{FY z(?O&snRGo0?vCX{Y`3}jX^Rme_ zT|X+z;`@;GOXL3@_?+%P*`kT&SetTmY(P(0AP=n%{y**0HYNagkg{8>-{d1kv+k{X z-3xL1Yt!P2OoaOYXPrXh1Uf;@$d~F_9XRDUuCrs`fp?O@fmbc zn=#sA&G)-Uo7X;eQ8pSi#m0WYbxy6web~ReJlu)zYoDovDJ0+r>yoH>^IK~ayGM_< zGa*Y8u5=xoqF$JW<8mIl9pC^h>oyY=uiZ>L^ zy*hSqt}+69WR%I-EKqZd2QlfmY3LkBx_;K-i+agH%x*KF}f$|79+lZDOG3^p>pugho3(VT2UI- z06+ua@)@WSdO?r*>zg*kza+xny5rTEb9Eawi*6ZfW#LW?LKCldQk@NaSVr)GVq{)I zOQE4eDQib3iPqkCOS|s; zgoJKJ!rq$9&FHa)E8lhKIS5hK&4zma6kD0ApZ1=U(b|)(adu;ZrB>%rDbKfwhor^Q z=i|=TzIPw}z$XcKRdSe)%wnG&H&{Uqd)kPzN_h6xNu_qC1NslC2?5*F6kX5h&%3V-^Q!A6ttkw9YV%hdTh^@h3r zIlQ#e6e|&161B{{5q zXsnS`=X@Lf;UNT=#l^`s1VXu|0XzAGJR$npQW z=bZ6toH~)KnvYV4f_9(k(4s0H=)l4i$g!jxXm9s=r0V{fb?@tGym%nU1KEahSF#(p zW)}h-2i`o#l3~QZ!7g~dSYF*5uTw8Ul1`LoO315&!uO2(-tMM(&ob;gup>bGRJH)=yd>PH(&Ux< zq}0kiE&t5>hb&OnMYL-?Ob%jl~qat%UVSNgZnOK&~VrPb3;8HRmuR66O{@&|@0&tWU<| z;x{U2fH~iWEYI1KKWq^oCJ`80=mD_>^GrVd28M`5Lclj8;xA1QAlRao?gftjO%B#s zwR}rGU3hlpa`-abPy^~O+9`)kAT0j#9$6KHZOabAcXZd;@Qg|n?8lxB)56J!zy>P! z50Hy5^-^p8o;Rx~W9wNf(y=sLXN~OYhI~dNN=2*N`q{99T!$UXkQXQQ#?}`5>8An; zhIqYfynCkad=leuiH)cHThq-K4r_Ze(<$cFw$d+P&AuDYx(iPP|L)QkmSl4Kj~Soq z)rB5NV;gsvrX}|?+ z0H=(ZkpJzK*(zhVMNeBlBPP`E7rdjL%xsybh!Y-VV#y!-%w5C*nt(yJ!3@Ajmk2KH zJ3x11#K44_i%ql#CK7*fAR98^MRPY>_gSk!GP0_+lzR5O%xOS_@`9{|eUbu1jP)WF zje?N*=@@0fffq}gFP0^0;D^e!kQS z5ac$pAlfJt)WJv(1ZG}N*VgQzfvZo%u=45?0bWW z7AB3)eQY1NSgr}LF`mp0p6d8$cVaph9BZeR>S=WL5+qs z4;87YCAX9MF%%n^J)Wq=AL~#up>+{MLk-OPb7zduZA6P3%jE3H+Y(qAwVr1J-;>N5yDFpovuUzl%&wUU5?v`+r#Ba7G23N^C zuR_WMoxlARQ?q*tMicT>KJG2i#D8tRyzaz`jJJuMN39-j9IZ?g{!^UVfmd_7y&5fg zUE|)zLx$zic_~_H&F?f@Ps-n5!gT%kWF)f{M#difwf1Dnjb`t>?&L!#B>pE1@C}5n zZ(LgcbQ06`-$zu8s!Hgte({i{3C9e$kmb3^odZ&t@++|UvKek@jffAn@kHy9hBbDe z-kA+Ga}?Y&LOLXq^{E#1f{JuBGpFrd7Kl&UL#pLP;(t?LF*TtvZWG^k?Ba^X>;967 zLrr=@y$BdMLL^unC^rA;qoArAwykdAaPDW2h83JAyGVE)3Lh5bSzSoayRz4Qtal_0 zcZbHAJDyrj5fPaQ4uH_m z19B}q{FNz5!|9AC6dQu)S~5B8jB{AkYuM9WT^B~SpfZ>?_Y+mYiw&HO_sBs|mo7gm zpt>y$aHt-)^82CpIaXM1omrGc{tsJc71dS)b=xEacZcG|iWMu+q5+C)ad#<2i#x%K zyA^jU5-4uLi%W}Zaf-VHxqSb)@^W7?M)I16v(Mgh&4nWo)E*l7;b^ow8!R>g<+L2H zr7ipLVN|Dx12B&kI2Z4gs9_tsTL)87F+++zBX-7QrEan39|h;v;Qtb@v`U zk;6ZP{ z!7N-qw(4&EuOt0lEB#YSk5V}}6CXC*b<-^sfbM@@IJh;cf~?sexVghhqi95ZYza7! z-DV0E{PD!K&%FzO<9NOj4=BJmq%Flcad9&*R`!pr`Pq~viBP_xb_GJR@#CM7Lzvq109}TyfWIy@npFA!9MwuT3zj) zOCoomf{dB;F2D86s{T9fLV$l>JnT0Q{>Nf-bS5`O&1ggA0By1G-w`@ zlqA;wSbRF*U>8CQe0SeK#cydVaHP50^>Uv>oz}*bU3wF5-=OoOZfJU)s>$;rGH1dK zxR2a;A_t_Y1oxcav5hM$m}#;rIJO_ZQV~rb7_D#oc~~O)(4sHuKCbz$#|jJSC)tg9 zuePhU$(B*Bq0^CyXp-BSSNbNn(JtW0Yo8V$KE+q(u)vgnZs@qVknj|%_i?C&*GWja zrqZPk;u;)lLhB}$uCFobSARk#M$Aa*_m*DHP+?=|^LCQcC(DQ5jM6%C3zX)j$%cMl z`-EmYxHZgnJPoKcOhlg`)Kwl;Me|t%E`|oHTg%7zC`G?y`dn_@qB^!NN`_}yFDO55 z1aG6rUMUWnS%+MWhWKFedm}-onRhD9#1DR2!`(1b_3-!P#IC6!*k|bZ_ z)*3xP0bRMYJqUhc#BKb=NivGeF225UFYXLs>ZQKMeWYul9vUz~m!zQ89jK_|c{|Wb zd?f&?**%f_+oh%bX`@r91!=QSFiC#CHB&c96sY*xE5Pm{u~MzS`{=$%(3L~@z2OYc zjT_CyBYJmLL&FU9k4VS2pvp)ubrW4eGA`h>IVMu->(6@Z@b1Oot1tZN+zs_BhfB{j zl@2zp*n=vSi%RY$f2NNzLDOt!Ka}l$n-xy*~=HsWXoW3oO>;({q?R0H?53}kjfju_@X za*#fC-T4Ai0X!2#IW~|5h8Eh(xULm~9n>B4ohUoacLh(;m13XHaa~B@R|fDObb;@6 zc%wrGWa%bJ4>CuV3o5uXG`<|^-w;DzBjlShUM!M>uOCBp<37B*Tmbwu_0KbeU!W8< z@p~K)Ka$nHI;^`L^kO;65uS}6MP$Xc6Kdc z+hiQ|L3;z~)}8i!K8Di@)4`jruU&*PaFqeKkIgtrpy}`wT@!WR&47Dj1KSt^GmXbQ zoip^Xi?4H6gU`#F;6dCa7D5VZKbMBgHe-dsh_>rlCIQh8yHD$bac$$VOjo23 z!wg>j`@noTk21$xpN#}_Y7^W~1H-~8g*`6|wAFx@fh(iXuj_u*?0mwYiRpp- zgFx#eqOK-4W7m~aG{CsJDKJu3MOPa?%9eO|OPQi}D(PW3OWB}1{g0dkh-geWjscka zJzP)YQ@M_*12p3Pztiq&__R;$45BH@KJ6~R(@F1wkh^Hp|H&{dTUwZ)4J+QEn(u3+ zIr%9cc!$DiiOk__#N?#5k;gq+yW}Z8FY?aXvHAXOAVr)s`?5Y&+vJ+|K$wA@>wLck zIY++9ZWtihvLbQmy6?CAvC969?M1!Ad75KoP$E3NZmE&pV34ohx7D;FRcuhFHKN-| zq~}aeEvRplpO7J}?{i$X<2CUCGx)RejE?sU3p6n(J>f}~DSD$2XXaPDDga37HVA3m zy0m!d?CA~pXI2gL#@+-tEkb&uk?igwVw$aGCg#@8&-p#Jhxu;yOKDmh81>s9&f`9q zS1q_5#|S*lDk*((+w=0coJaESSc`uOcXZKOpP!le;HXXf1$W6y_kq_!q{)+XCQF`? z_MOiUCA;GiZQUNeYj+m+-qy>U?m*o!@rq^`Iq%Plb>cNL#b?>Kb!^Y(0|9%=^G)jj zTJm0P^9f9th1qcNH(+?x2Gy3IFyY>j-}eh=LpD3#MCER?n21r8~8Q&zjVoSIm_m^#U_f%>Z6qR$pN}P*n5fEY3i}^_ zi+RsBhcYPM;~dzyt&u)OK1l!=7su$l9r*ihEnr7K zmJEwcVT?BJf! zVqKM!)t0Tn;Lq~F>CDZwd6G}Ds)_EBCI|huz1<8)`kTZlzm;OsIzuhP@^Hfjl^Lm> z{J5eM7am*RCeyQ4>P(CzcT$+wYGzhOan+9ih+N)-qQEFRO7%LXn%DpQ6Zl}v__wfi zW)%1@JiG6A3%m7KV)&%XxU`RpR7Md}8c@{LX%c$?Ch;RdQni@eRN4!JzHgm7C#H=^WoW&!hJKZlwfht5jqYf|C4ehuhHs2SyC2`YpL43C z6U{FIg&(XaM>)~>i5_qjoSL3mw&vQLD zrD9&pA3UE_K@2sCwUKG8e|m;UzOq&9qm3-Pt-+Ie<58~BDhPk`sS z=ZRt9wLhDVx?F$L%X~djp5>>cyeB9He+a3pQ377{7UG~ih;hdI6~CAW7v?Z;8<_iJ zAWTsI>VRK{PnBI?<8n0bCMf5a=J0otxqwKIC(pRg9j+ZcgilWG6ec1dsQcZPp^$Q) zuh33+s&HHFR2qS5<28mKBf7o!7gJtHImT-ccNj<&H5*qIN5TmMsttQlie(&$*sat~ zajvy)|HGlY1oRBwA0Aw7R2?{+rKWqP)Yj3_!j{sebN?le&LtvwrXMxy`w4jb4T@43 z`)2uc_fu((RglPpo%EZRo_H-w4Lujrd|dP=7&;!y_1z_)f$E)EZoo=|@Kv(>4;kBv zWJ)RzLvL^JtH3Ikmp9$J7FWMwSh*T4E8`j(mnG;MHEmH9;g7#RmQplBnVqY#zHvPK zR$1=cHM+7~sX8itI$8eb9W#t1W@TJniS9VJifIh7Go3Odj(?gB?>a~4S;>}HtR4~V zViHQ<97{~(1x`HYe9q0*wxDZ2YlPt99DcEupl&u9iLsBYWao_KGDNg^Y9T^CyzTBRTIVH z#D~#tbr1}LS|h6BPe}S4`04RzAPSdGhhun@u~dSkeYw~R-)`L&0c4nac=9b|@WG${ z9apmx4;fUpPI5BL5#%adv=VE+pD@>46F_P@K#_zyvlfHU$M!VN)dX@9- zi?t-#sI&U3Y6>!x5##gskB27!2tDKr%SFmUZ)%>RK3J_D7G?>WgJGk=!{EbY5Yjui znf$sm7Wlg(4qrSr`xGD^Phoa!a5;61c{g}YPaV$(2S{AVe9Ru-Im#zsiFyvu=+-7< zw6n?40EHmW_zea<%XU`bee0}X`aTzwi{Y7sOkOW$(WEo!ZiBUQ(<3lWcFyjd3VC>WlG5xbJvC31-CEbxVX69RTr5WJ+?MGnRQE9~ zSqs(N=3AE)(9z;t2u_&oIbIHleXj=yyRw!m=?(rROAAfKF-G+P&zWt771^$Tir;7rDB9sG@(Q^*7rp}>M-7roXC>PZu zmAV84Mn)tEAAZCNbVKfBQo6b;gqV!(k#1g}89(_5 zcwE)_tlySUXSBHFOfa|@ca&ok)jSbu2b`m}H2rZ_U((rrOiK<$41%1N9SD?*}*-cJ?!Uf*i=*H`4ZcN7{f}{IESLtg~~CK-?RUMz45$5%&*5o z^R`v7e2Z+&fPWk@4adI%5B(=rUS;|o`R7(QaU)))Wk|-}?TXpNTWKa{o!^IH>x0E>aYR0Q(udMtkVT?fi zjVWvV_WEy$I)2{dtMB(Zqy0+fEohJ~L(?kyMq(yM9Xrg9U>|~&<+wD!>ZyG~8Oc9} z(ChBm8?M+d*P5Np+MU#?Gi+@edX1X8tkpSyHGK%|>6^I&Q@X9ZbT%R#ownR`l6 zv7xVTpz)X}_ubvxH^*&`_XnrFG@=KwR6-TK+TT*1c8_Cy#c{~759y!oa>;1UA^#*Ix)e(r`=rNtnO3~ihGL3GKk+N`cT!VUMM{3-_D=h9^H(J^ z(Vth0RKeUNH<1&Vy|7WZ_XPlt;N7U9MK@uCdDUq8@pVkXpZW>v7GQQ*61l;QOhh2c zoxAMGtlUWh;-JYYzj0iy&gEFq*tY$|+FVR;OX^EaP!XYrx|?DQnfqX39LAS7=Jc*p zfln;^MceZ0AGS{{%~zXtqwJZO3m8Z?maFVLP> zq4M~ny8ZXzy~m4g5;slqI;oI&`?00T^eUyupBuwUH@jkwlh}%*Wv_Hv5S#%gHglhf zSt-xua=fo@EaQf&b<;f}Qoe=I3GXp!$%V$y_U{RH%G{V}+N`p=Eitr~bc1i*DUeF^`Gv&+ zSV@SA8lEDP;ToLzF*GX^C;f#Dvx&?jOZ}m8)nkIpK!)L7fp?J${K4Ddd1&1NlrpI^ z1{DbtU%6!oBfd@LOaOwcti!wxsKnogIO%L zBYMh?8J?>(oy7iCM`+_LU0}H>>FOBOoZ`7(i%5~``&poL7PIhXFH%}NEM`hS`f@E} zI$e{wQclqU>0$J%>60wO>p@`d7@0t$N9PFhXcK;(QJ!}dvhV8nJW_1FiX3yaFsUTc z8VR2k$|-6YT$qAMeVvx!eH2oqn({uEYUYtJ(Ad+YBWMYFfc|~s7Xz1=pzq8{kYrIS zlUYSgdHJ*tRG9_-y+Hx}&mE_zhau;4j$g6eGdZleeN!;t8P~uI9qTs=Q{GPj9Mhcq zzrvgSSKZ=(`p;20_#r;9lE$8^Lr&4|zUs7;@}?HE^7h{xX{GaD9s+}&-Fa(W#ZVDJ zbn`xKz4WR_Rt7GVsb$Fz|B@7M^7?5c_Ftw{8XH>qj)PGev_Ydgjv8eg&u z%Tuee0Z4ebP-@_z|M}#~I?A(o;Ip5PdfqEdc?oJ!7Ou|O2N4$E|IU4f3(wty4u3Zo zJ^oFYqQDC!)VLU~YL@tpWpeZLWNp@ZLQe z9?t~b+dRV#gptfVGtRM}s@du%bqzEs&A!C7HpT=D3{OnwJP%!+liXmWN}bOo`uiU? z4Cd%)UV5@F>h3_b_6nvLD%9@=Gh3#(C#1!0X9OH_$1$bvUx}y}|61;O*|c%8e!bjM zm}pby6e$INU$(b2&sC8%&hp%~uHJ_Y8rmD@9tyyw4klVy4SU^?LE7&GMrFgb7VcLI zS@p$E7IwAyNQIq`(Qo2GQ-$=w_f$@v670q!ttB3)ZSt166O^PYTB7@?#uz~=sO!wd zWB7>=Kol}Az7-UX-y(mGU&=cuZnm{^G2YLu`=2L?{rR5m^c6O&Z1dRevYRU8ec61l zJhwe-xf|DctzEqxzKd!02jvzEkZi)??wmC5IhH25_ImO@JtuS{BWlc8;);!I2I~Qm zXji>UPDQE83ik-f<9E*qgx%rbF}b{<)!k7Yi1HE3G1FPQuV1Oz~N<1lp_A%ua^NayOCiZ>D8?7_t&MD~bvzLFMG=)5xt-UAepNc79 zXg1aMH;}B!9p2Yr%8YdU?@FL8?=Z{IAxf@C$>2$OXMK4`bB?~QUN#fXL@A!7Hw8Za z>gMl*MdH809fg=w-J zn-=mc0B_sP#S|OHuDLt#58o8f3FAvY8X6fq29aUm{=kaX`2jMY@8DMBw>d!YIpTe4 zUpJe?TJtjyDdVH&>w$MoJGHP;(89fjVf z_+R{072&sb&7uISQDdp|SA!MHKa>dqJ=6rbjwY?|8-DhA7r5OFO9`Al2_28hY1+rf zRp_)ho6p-*`u8++B(FSm3v;Bcjqs-YV=7Npi5`wV@pD~JQXXp~u0muftOerS^nKt~ zl$Xhw`@mmrh6SQ{Y`>iR&5YCBkX~W*c1yYaP2{Hd+wvnW2<$E6}=ku zrH}7h;=Ida!n;lb$DQvHFt2@47L%O7DFtLpf`crAvP5gqKZDKhZi&9}neZZ5#Xzwe z7jHD!$9vn+5{QF1f~wPOv001kkxI=D@+4_V))bn)V%Tu_WlkmNE;v@;R6I>P_L)sA zz~dgq^@J)J7|3$)uL}jWq%2dO51%EaW|!NXH!-zq+)680iq%W`7Z*Gjf;n+-+G5j; zSy&trssuJ$pC@~hHVc!Ok7ez8xscsec3#!k9fhsoQ%DG4CUJ7a>XrEsHxBw#<454r zB?+~@;Z`~11V4V(yAfI|q<{v#`M4qfmV!t@*ga2ElFJ9!g)T>0%z!_CLCtjbs=g~Q ztm&Vzu5R{t%k1NM+R3fbL~ekQU>s{@jdn98X{QruSI2rREBRrJ^$cF0sM}2!UpLNZm_W#^=4j?N^c63^$Omgf4{aTa&cJ+Q!zpYA8x9N3GT}(?8Nu6OG)|of5=O~9p z{~nV0Q7Qnyp{T&HC^<#Id(monbYb(C%b$_s)9Zm`u)ba9EI)yBlQPjSN{@>%9W%Br zmq%Sm`SKk5BYlaO{;Dd&TBHutrQgR23Y1n9m1>`lbQ(xR^@WpfNYpt)ed8aM(ydV} zJ;YaoR)~#CN5MhZ{ROinMK>xFEpB%tbE(?PYrdCNJ~x?}oh@rV=fImnm%;Wd)|bnZ}nU7D1iZm>o?cJFRs*klH7&`AdSr48J)5*$yy&1R=q2SG zps{^W2VT2Um4`gYC63R$H|+VBXu?9hx9s(L=B|qIgwQ@nx>~^x3=3mNtNQ15gbYJsIwwUnN5x zZ2T>02Bo7X49prBh;5U9?;K5p@U_t$8*n9kYh=2ooC6)eu`+pFraGb;L+C!vEXiU#Ax>aKe zWzyJ()FObqd+NVGbc_o54LsJE)<~YYvx)?^@733C)Ofd zzS+4$Sj=vlob!WL7x&@6x$tTK$A!#X%;fgN*r==Hh{4xXzxdOu-fzzis{yPK{*`m+ z$UjjAtsboqH+(JC*JUv_$j>KO6SpTq+q9yz*PCjVx;VF$O>zavPt}OOI>xL+b$|E+ zmaa!o^15zop0jQ7O&Ut;oBQ|%j?ZK0Jhu8tS0YGr7G_loZd6pH!~;M&d&Vi#Q%bL| z3%UK4Prb$RI@E$BXN{`0e?RxEH^OjcD(><4tWnDp5B>64Rx zRRExoZd;H-+WtD-yVxRr*p3;tf7P_zQ)-%`o9zxZi~I8BQjAdJ&_M;bW}hozY%O{( zdtW|&wwyF%IC;gq8qiyXKCkC-I%+8R;U2!xQ-muDBLps31%{k2B%MjYmfFwm4Y#L` z^3XNA$pdcq<{m8IqK;xHHDFsgb}lN5uiVveG2)=ts`>U9gnmiT%b1u1IzF+9`x>5A zJs&}zMUB8JuaPZxz=rK6;ePgC}=pTI?Htv;h3)X6ObNT|+!2FtI`vQFf9_RhLD==$+CvDyrpvgSRyn3@Z zjpw@i8GkKogwa@LHWVh`gTzB|!>`w3rwqB| zb7Lu)m4J?tQ~g5V*IxXzBemm&M>9Nzm>i;+2ycjo#=rh4C*$~sS4V5M0t^*cURUiB zn)jIRxZQ{|Ft`|uPL~k7-}4jTeZeXHarvM*- zsh(B>$eoI{kBOuGTtXuOb;L_l;`hxJJ>&=?Xw3X@yO8fYw}_j6%Kd5r0ns{p7ubq zIswObwnh@%yzpP5K#4h=TGl{!Xy0E!$y@-(*O-yYKOVq+%ri~y-9b`hS#32upw+<2 zVg4wfKBlR|+o{VJk3o`4Ym7sr)A3r!|NR>CSp84Uf8XtF1NL0FRq@bAp+kzP4r}fT z+S~eS(9DmF74;TLGd9S@$VJ9857RG!%{fm!Ii+sOCMtl)puWE0%!NUT8{JG(EzRf! zG*-@PVa{#z+2Sz27?j;}-Fw4w{Y0V}bZ{Xyh9TS|@_TBb%qzhn70oX7Xm!J%_G?JP zt3aJVYbT)}(9ZmIF>`dR$9E{zP*a}oyMAfeF7viTYn>X`APsoN> zoBdf*x%j@~dwwW?c7(ci?8bFR&-MyNzcQ>Z=>g(HKVb9!HSo(ePV_G-iu2uIa~{x0 z;8hOIa>mUuH&Th*3Gp%%+fm&?%^}^nI&G12(C?wRFwF><3+9n}GyUfyNHbfYG!lMG1AO?}}x^#1W`& z@~qDf2l~|kPHMl^GhVE7=EunuO&n}2SJ&_mp|2lP9JZJ@vq($T1(o#7*Di3|w$~P` zOk0c}t+Gz$FM}wk<0`Pv$WI?0HHuFVu2rbCYHGK`NEb!B6!k9oCVB&6ndzN`_hdas ziYn`E2BHT}KC8SZNUYK|O4dwW$8$NW!HhwX4Je@Lk23tKoi(BbcPUrJL_y>SZT-;1 zKFED{q6;Rllb|wRk5;oee!%K7%%LXjj`P;>I<_*wp_OB5ew8oK`W;#3E05o~4?UV9 zm+7`*Ul}&%rp5GxBR!)7W2fdu`MIDs?gR|%Uc_92U#abA(_x0>DIxkU|K8q>4=285 zN9k$oTYxP9#GgO zoR%yY`0pU&g8Am!mS_B z`Tb(@xtAND4^iZ$`3gW-5!#85*OY35-vCXJoH=U2%WccgS?2k-H1&v{7IF%x{I}3* ziiP_xV3Sd9l=Q}s5Q8HL62WrrUhQ@B-MV1A@k{i|bK=8;*h3Qq_SNC%_$tSYwFO?2 zGdurWvW|W8$-i!T#7_R(T3vQwQa4B0p9GqIFz}`P4Dov6TNS97Z_WX# zb(nrV>^UWtHLwtrMJAg}YovBc-kmQ6FOBachcFRGhi2c_DSkjkKZvxxsS`b!Wm`X+ z_qDW0Mq9Vx5feH-As5yD#+M8ISEHb{L-Yo3zC4P+jDUB8^*}?bQxG|C#o_tXTnge% z{+`0p+p5yH7=)Qa#?_9ut6$xzGc=xqg#Wvg+{Z4Co*1P=0%@`(Hjoz>rU($xBA^7Q zgp=)|zuNGGjXDG1qZAfhnemsw7j?=e-bPK|+f43sbYt6INFzT&5`z`xu-2>MKiUHy zn52teerudzCNmt++?gg&baGnXdviry3#s|w6}?a}sTP#6DV`_VNRU-3uLu&}Q(tJ6 zV2f34^>%RYCl|_v@vBOtf=kW%C~-2N{&3u7?b_c6F++;k7sHJwH|PZ629+ zeeK*rx`o!=-t=v1kGmbz*QJx(rC&m-CMv}eoF4T7X0o(`@o{Bj-GoV%y7nQG@@s8s zxEk|ys~@POk$>ihJ2o6i9gZjo(Ge!Zhh~p?l{_Ck-{h}dM99RoYz|(RHt=ZPl{NcD zDNGgw3eo>|(984P>g&dt%bULZ1y6^dOz+0iqiX!k=SJSSFeW)OCZog=zn6M`gB;KEf_;;+m0-l95`XGt{h~cBt zFYu1SAp_;PY`JZFL)uYF-kmpq|K}F7E4w}}I^N`qHO4%qyE;S(GaHLPf05l*snML| zVrAN6Eh6HkF43wOK`pZV?^*`hGRnUZg#n0&@s~1LiE)TA%>})>nyS}k!Q1Yft?I5Z z&1935bhzF$ZtkuG7 z*k8;yIV{WLHIsAQHJq)sj$J3I1A`**o%#`=;^FzNEa+u@wXz%q*Yu6Zxl>)a#7j@z z3vHs#(k0u5E4qeftFLd{_Fra@yOC;|xBQ@?yu`cF><(G>XH6Mcwu^lYn$!CoV3*$T zINiwrbCVV~-Qfs|xh2AyheYASJrz^%W|6V*Y9%%6jC_ttL4zDEr5gQzFNf3})UXg; z_cN#t@=)U>)QKDy+}wCk16Y|gwjWIG26L!v>i)~pw)a?;4A2z>*j{)Cj2`wy)&XUw z_vPAk+cYwJ4s^&%uu7z`%7|g3ipSLq%|naVDt5wFrtv zMk?DMd(Xzk*OZa@kWMD4X?F)oT-}e4fcyQ6t3-DapSx7M*QC0lfkG8da6iJa!sR&t zhTUUj{6y)OsK|(h?Xk`=l0e0(io!s;9)L@yXqY+j9;UQ65>VC6)FF)T!#Uv&M(ysG zTp!|{<6i-;J&snybQi!Gl4M1c_|A%!7u-uMh5saMQ14SH#;kZ^x=CS;nD?LOEKEq3 zx?ul{#DZoZtzdVU^~?7OP#z|fH00~f9q%N!T%>StzN7FDHQ;(0Y@Hk{_tTnA!n6He zr*zHYDSM!q3lZ6r@8{7E&>Xx(`!Z>;zIk%`#}qV1po4t6g>zYgdm z=0<&31RpYhF)!QckuM+$|GnMNGXo zO6Ft{clPeyDke0sQ^o=b7e{3zO=A2@2k6TgOexzz+G)uzZ1dHo2RIibMvEF__D&Y4s4gJsd>WzTY5|F(5JR^ra{0_ z!OEl z60?$+PYi51*oO>m3RQj!T^ampf7Ez%G&2A)jJ76(>D;=zdQ`4ka8oQc$fNZSE+oIx zroQ{7rEQ%u&r|MGw{)=X*nZX|*rXR@n?ylH;l2X;E%yAt=5NngBYQUh3#2`UlSs#n zSQIu@0RLW?yZ?5F4v{=x((Wm>2lihmP#L>s5d%|YWJsoSJRWcXU#E~MGQaqZQe?*t zd)W&%GA@{(An}xDDKiRZT=RK9?`a+3M9c$t!i!c0ee?biEy+=?r(d&^wNUw^Rv2k$rQB@=8azs* zWM_RNz-6tp@Ih1Wd)#MKb8*8a%&Cpx&!~6CPj`^TRo<&95T5`Kd?qR6KAAOrDUSpc>XE`Zy|8HFrI3B~qkEJ4td}HB<;{9!Xp8Ja%X@t2G5& zhflO3F*5wN+BaI%w#mCov7GbXD6$pu?|IhTlI>BkU7x!R+;UIU=<$qBh@}=?{50KK zKePYBk~h7|A6xtXjZ2W{BbDv>7&0N%5a4ugi7i3k>|n=5&gSiIrTQLQtW~ra zG+y=(Gi=f0+&}pLxB$R;SMRhaQlv{%EK*NWCrisTNG+|2Yf}m$&1}Ok2V;UrY6+!c zzpa=s54-!nKPIoqwosP94^dLm(8%#yO?yb1J*m$UScn;BL#83zYn$g;SQs}g?bJ8a zAUB5L-a#v}PbwP+_+aSh` zu|8-IgR02R~p3d*Z*#n!sQ(lDZL2Kr2r4BXP?l|L%+K-v|!=nVf-HV z+A9lKNYCcr_2E?^QimIlFUu9?Qam&qgdKv??tVI#v3VYDKEq&9Icslq#(pJAdz?yDI{gE#{@j4{a=jbzZ&Vk+cfxM65Aw)j%-wUD=tN{& zU@QguxG$tBn&s2h%Y_FA{V^g#D3z79q{8drR#x)tgdldO$42>_Uz8(glK~z)Qv49H z10-dPbRBewjfc3bKjm7zwz5vi&dH{#q79b+4ACk$+b-GWoL}+>4hqQngZ-ZmaHw3c z!*PZ(v>2@|+)?E#`Y%0@Jit4r+syQkun&J?DHW*bm+5(jOocWT+IB(?_k=eBWp?Hn z;=kIQt9tHH`E^kME3(nZK*@1KEY7pWF()AW$1}0g7Gfbk8=U zvjXJ%_AcprySuZ?Jrb;@Y;U2E*VPstz$gl2(S1C6BA}n$Tb;#`2rcVhe-I~#qM+3J zeMrR_?y75ppI`OaXvR;G$x6WIB6##IGmkHjPQ7_n4C2WzZ4+|@57(#h`&Zp@L5-V= z`m&l)G>kN8MVzrH(^dCTeeQntx^9K|U* z#ru96hjP#5rHre9fNrPQycl3JFURndWD=L%-C&za!>C^%eN9h%Q-$+)m-RyZW1jVV zQXzujJK;dz>$$A~=7D8Yns$08&lI2iVw!`7McxUO$c|d6>wnYJ1$M!1H$9j&tvRXE z+WC3s-tCLnSj%7i{KDVG+3jVKT#*6=oBpu~3f*MDx_tC?Z^-?rLrj>&?aWcfQJP1w za?T8}aE-2SUfbF9W7s9!y4BJH3P7^RSoo1D(i`{tUJZSW3h`D#tUbW3p}|AS#^P=S=iy@v64xn8k=zhGV=q0{-76}f2QUk!nYmu0nq zKk`Cu=Ak2tiQ`ws%@$l88eK$PU}mozV-{}%&pl|s~ z2kw&QU(rL|m6x?|UK|m2V|c3XL>6j%td&Jq+JFr6r+ZvG6sUcHj%+`!k!--kBF$a3 z9b*CxyV{49_<#^m35AXM8ip*zS|Y!~9#p%mPusx`V`t?>BKN43A3m~bJpR?=_Bcw- zi{r5d>J1M7CIpdwp>?4?;qA;!<=eh$3)v~#@U^2)!hbKa*3zdvvMdO>|CqtdZGzLU z{TbxK>QctI2vC*?cq4_&mrW*tK90>KzZ1{2?-u>I5k&CIm8z_#=LF5)hV_+&|AgaI z1I3JErO{2HpaP5m?=aFJ)GcXsL-tSN96HI-Iv<6?perXjoAbO0DGrPb&6$ z?YZ~U4dUAF|8(cB4+DOgo+J)j>uHjFYw-}h)mry@s7YAcSPl+fQI|IeXL+>}SR|ir z&zAfmNC#Y|tu4E+T}4T``Y(uFpW@$KCNUctbaq*CH$5>8JKX+ox6N|zA#K$6i;8gF zxTg|v(esI~zLstZpg@PUO--DPG+1@gD*swENB^Xil8hn8KuvOx)Ogl6H!5h>Y1%1Z zWey4Fs6zanZIzhcD<^u#&yz-?a;7QKC*471%tC|e+Z7|4RRwb`!H{{4OnNmCuyO4G{D_K*Imow|>_qSK4 z&9yZXXyPLwU%WtNxNonF^05gwWTTg!R(bU}3mPoi&6zvhI= znE5SBE-Qqg26E)i8|cjd`c+d5_XCIS4w(-0ci7x9HQBfJ&u4IIFDADKi0k`QJo3JU z+|?dkH4_-T>r{vu^$CA`2r~v>d&#nSt{zcy8RF#9-JnDu(ENLC0{38Y%>rj4@$W`& z>#$vj%+A)-k`AVZP+rb}0@2K)n@fOgn61POgUmJO$H zb`$x4X~cE>Xl-s-=vwfWmT2B=iqSt~Tv;eMu(*!rrra3$+2*fjY08N|;iT2*FCtXJ-rgA{&M>u8VGw#pELa7#AiOg*XykRi{khRyFa zO9wh#wgpLU&J*p*KWOG1s5Q)zGtxX)3W#2qcS=aG;3_gT!v8WfXuC7^kR3aZ;3u zFp2UbY7&`ovO$6i#nr~Rgl*oA#jF0<#2y8Chw0mUxY7fL%jFTD?!mn1-pws%aZxAFq!awd1%leKh&&R z6vmltH4asG4D6)X8*62=pEy7_v#oL`gahX#Laoh)-^okzKjp+8<`s-K9@ZnfjIo%G zlLyTw*X*wHNZ+ebC80+Pkw-#3!omySeufk&cgIfRch7eoXNcBB1*U+z zSbag?0sC)9$aL^=5$tqoh=yqRI~;>*Iw&FN`qwvr7(*!;MeZ}tZ5($w#$cKSPN@YB z@Vz{~iv#&c7c%err+(N*U`6pI-LiEll6DIyA_HwF+EUw=p_C8$ud6aCnv$$zol07@7Pk;QI)8Y2yX-dpf5IgUu-s-=d;X*G?`%(^3 zy!H-X+fm1vvPiN)M8QYmpcYcck5Iho-Tht`_Z^P!?FZHnR?=#zSY-m%aq5Fk+sqEm z^Ee2TXHJ#l!{bCY1+{y)PoZsUSLmg&Bd%g|tNGx{X21jP?|}Jy6@U?18Qyya*&aRf zZblq&I5rCXe2^~93$z^s!#I*p9Ag4dfFMD4Z`9|48PVGk0XX-b>h*wFU?pR>yAF(f zpUekLE7CfzEN|vE!vQMldOMr%w?ZvT!&DGD7^xJE0r4EG8dq$^hFm__qnJ?;{j#l? zpkg;{cOTH|KUBG= zxbL$NqhLQGyxfJ0QQX?I^Hz$W8uUqPuy^$-RDuA8pX1}KC5kwd^tc+@iv^2IeMA$+soqkH(XJ+SwhvAG zk6g)ZM-1@|z}0Sxf9s887_x8V$7l^8|^3B&S-c~uCzj@M%4p0rrTuK+D zE!1gc77Y)Q_NtW9KH{v z>Ag^6I`!fd6waL|z08amLC=ML4aVZXzrM~nDb64vOOFukfFYMZf-R4-9a;+K8mN3_ zT_iBF#=MDQY$Pt^8c?l~h~7#^6Hg_A(%WQEYUIPq-;i%59o%xY1wR)HzJ_4=NqP z!hOKCvS^pq{xUC$T^uwDE`CVv3PCzUhK!sOa6M@V;5c{{!tRX&Sa!wOQ)gE=d6;g8 z&y`0e%{uH%X{Dc?ipV&i4pEyx;m5559T@2>Ba;9%sVhwEIH?nRf1j#65o7DO5~B`!LQu2 z5zW{S)OR>KXbMTrEWnf+f&$LeDX^;%Do;{Bo2?HG*YpZqj657W0zN@*89jD1YJ|$< zr5OS|Fy3jf%__Kp9vHVXrGe&S`mV$1uz!;8o$}f=T^b>#(+UCVmZg5`ZG6ftzD8|s z?Pg0It2M)fBU1*e(>j%30$3hjqTBA~h?5bwo#iSF829O-C)xY&UfC5aq2q;(T~*ej zp<24Qh9udI%B=(ER>g#~8xjk9Q;#SJYhe>S0y?uLeBPFgW)Q|TwcV9VHpw)sz7 z-3fa`b1Lx~Hcj?%5~luFh4%dGu5^Rk>-LquB42sqyx1FxW=r2>ggg?y{-bMHnVNIk zqJN+bIvuLF(R9T8Al+!c^VV;hK-0eZIFN=R0EJ;#2X<@)%1xpmK0^^Bn=9-D!o70W zenWdQI?G>wzmmh+;~_bTJ`6r+HP$f9tKlnM%{d_(FzO&qLiD|F?Tb_aY>9GpQC~BP z3b>9d;{60B^zJ$YOr==#sj+_9(ALu<*zcb&m?MNm;AP$jUh}P5s+-&>$M#|z`=$WR=9rc# z<{24mcyAKs?NbWLb77`CBHYDn?oH)-3)RRSRtneIL~ke(dklzwT=2c<^{`_q($^=< zdzFBqOhf87fE3y0=do(kA7W#VH9p__=KQi*mj1*BPk`IvFxIm*xD&|av{|@aZPT;~ zcxPt`GKY{fhpd5!ioEoO>Y?eBOb1`5kGo{ruZ8;Sv zVvN`nDP(kaBw0sDZ@gtUh+;O}j{T0zWkA`Lb71H`5uN{6DptbDtFVC|+!36dj7<#3ENe_k#FkcFqiq4y>(2x1>sIQ$QM)rhdBF0U z?8x`Q5Pk2vP_;4dTGp?ooyTVa&)*P;zFFYN-~FA((|%j3IN+Abva@}pZJ6<4dTzuusnI2z!8UfQeeqa+x%_YFB^dVi+}kSu2;d( zb~&qym2a-}y8|!2>Q0=0Vpl-D^atGqHhQbvmC5i7&~i?88#)p~K#|~XvB7O)voW?c z)&YVsa{YU-VYc>I-=_fhD^Vl@Fm-8NN{wSofTMYzoW1OAN?1UP1)%wp+TuT0+m{65 zUjFVoSG&JY0K$`ESj(=jtc(o0MFkqx1kl>(J0K*b{x&6B!f7I=VAdP2yT;QGyZXMv zwy6h)Pk;JL*Y?6ouDU(@vxvPtCr}d!2MD?~$%LT}OAu^v0XuifC1hLHUis9uJ@K@w zQ9?kbBxIY9zw^4-=btE!eLl0H&Ch`70n^h5gkaa`@QhoFttwzsrM0_O*DVTqkmTCb zRHgeo70B5T1M-N<2_@YZQ05cr@duc2 zFM3vP-RB58764~}96K$s`2}}XAo^P$e(YMsz~3VveZ3NKOOYi3dPc=Yf9m)C$n~5& zm29F|_W9(FdQ&F-kUyn2=(;V+=2eo5K#j~3=#-3Gm>loH;qsvXI6%;w0fLsAXyY5n z^Ir&h<~~QKtgEY6pX2WJH-4)5V!|C2$aiUJ$(L|%7W4cQkN-gS;JCZ+^%t&B_tA@D zpf6Vt_`-#++}HY!pyRQlC)`s{J*$9g%%69jF68`)`HHy|QUZdnB>sen_}C}RR{$ju zY(yRn5@pR+GanK5&`u;H!2U=3fY|9%CYv%raqMLP4$SqG5{GsDU3&xtaeFk!Cz<5B z#2#8AyE?~2()xtGEO4^{XnE%76G43dp(HzG^QFQc zk(OBS-I6$XhDqY!{>UfHRm@q;T?l<^*1V-1{b%~boMjbl0A1nN%BHXR9d_V90Bt_` zM}1>nV$BH|;Ik!AGG@j0X>xYbttr_opD;fIq=%6nLC2y$21w&ONH)A4s_F{#!GQGq zmQU;%$9IU|W>L=r{^bVwo~vZ5FKeBMt;BRMC_z#HAtVAf)un;u(Xagat4o%ixV7f{ zWpfw$F@HNP+(T6K#D59{Dst=J{<&*NEERpI8QHow?~J*QKlo=#{yTHm{s49w+iKj! z%LDGc4==gr&OhKDK6B9PC*14Yw)0||zjkxP4XC18m52e39`1CfkMH-}B-TZOqXYo9 zTi5%Q1+9O2{Y{je@Il>+ak<~Y^ZlbUZfZ8Vmm!^?I$yreP2EmW$_x`qay;8=AMHv2~arO@)!1Zc6!(+V-}NaOZ%Y=52?z6@FAw3 z@*6Q;a3I;LBZd3sdv8qMAv=0yMZ%4b52@{t{uM@ zB2-(Sm{`=cRHBA}&YTa4mH1Zk*?Gj}NO~l}A?y>!#2#TR5Pv`L%;}z)7JK`Oa6J2Z zS~V9I7e}ToW7;O6x?NQ)5Ia^uW1wraHa#PKP5$70>XV*Tl0H_KR$PY?&fV&Q_hAsr zEUT_|<-NUbayGJSj7*MW;_rir9y|+U1lxXS%Nag^K3ej(uiB=0rc_)4$4%Ok!JJ^p z10>Xtw6K+M?n|m_``7P&?%w<67AFH-#S3--@3GvNvmnJfEhhNied3hce}u%KGWXS& zm)-yM=BF;E@j7*2pZl{vc*ZrKk$<4M(XB5n`|(|!m~!|jXU0ce@2mf@D_4wn_2w7u zuRr|S{roE>P-xu$^B+Iu9z2Bam1CB<|Kp8M+yybsld$@yzxzXX<{+4ms5du9rriJb zvyXfXv#qht{a1ga%2IkQQ~=G-E0K6%YEspr#56CkJS_A4eP2QI;kjdf&rB~T{WSar z&WA*+Qi&MC_Ord;bpSo!`G5RB<4nzV`0am(0rwaGb9;Eh}PujFKUuzyg2_8~~IXGa;CQ;f~{i zzTv!JoI_*Qn3~v!KsSv0W{mJ%CXn6k`=X#xm5geH z0Bl7?waTs^_n*mFUr`VYA+X7POfZPjiy^C%-+=#g95UuTJH7V98Pug9HQDaQhTSFh z`Q2c$O!gtq8v^I+>t)HR1;#2+ENeW$ciJ*%H*?r_z|ZE;vwOgpC`t|N*&J*4DIl@g znPC~Ccb8VrHC*P{+71Zc+J-$4=gZy66vYQF35>^9*4_TiAfh=lF{q7k4FEmt<2b=^ za+>E^KG%rt-1oH`W3F+%Kdr&H-nrl=#SDDtV5d9(R0`C{MspR%-D+9!AonnUd#qQw zVnf6V7UF2#IwYrdn*f=m%AgpHC*;UOw%b;zefYlbmkFR>5aY|Y|Ifd7=gu5* zm11KlMk*CBoG5E^)he%AUEkn=VSsvz4Gv}o1bfhV2x_xt zX9MkJJD#nJA=uF7>}(84VH*Tzv6TRUBAzK#0IyIlV+|tkjy=No(6`;ty*v}|wJR<* zIOysQ9`Ouo6}8!)xut>cJdl1}c7kW5SE*bCX7#SN=sln31mazvnsx0ze4dXh)D%xLqDeLd0 zeo1f=*7RA;FJr@-ph=bYO(euxC&u$oV4`no7W-^trJMiq3k7cyuI=%32L7o}exZPm zDkePoSh(w!?=u;0(Q89iZtfrKS_2DWZ)103)d+P2$$B_>1A$@&S#oc@@wb`-#F*CAK#+Fq5Al(=&K{PVK+#Nd^HO*s9YEVjS+PY8%HZj2E? z`Y@>l-~xb4%B34PV}IXSe;5N{7i+8K>m&VOtoY-7Hh&EJbL{|mAh5GBkHR**(^4vs zzFk4{-I&)oKWtq}wqxJ0{s9~a=LUQrbF(ASH4`|wysSd^N~#RK*)^pkUgsKL>^c(2 zSd(GoW=#$&v5-^^fCyhIK$unmh>XQB6|C=)|1L@vGT>J+_HnkpE#1EDmaameQs#m5 z^#=}S+sv&_tHQyJt8P`vEAazju0N?nz|E==?7*1LtN*LgEf9cijhZ*8><7zXHn~^q z^W38YccwkCud63Y6fh!!Oyh@;r>j-Zg4iSFixf0mKFaPX-GnjWy7OCH7!#hH{MgzYf6mZlnAbA_K*f&} zfA3&H_wn=`++zc;JQCj|rT1f+P+vdNVEJ#l+bV8)Z_<5=%ET@&b?k=^y&#(^$KHDP zwP9=k!RM+9Vw3FHCj_i-ZR^oo0+?(}<2GzNZ`^FxzG;n;H^*#PU^9ekaDhvG(mq}+ zU#9DC`j6=M#SWft>FBk_bKO%z19-l;aQc~_`r$wD%^Tr5GdvE&j+2U^3j=1Xsarh- zW_1ufIt_7@R6z7+VfGa$)Y-mC28GyVd}37bANkBxx69^c87 zncN9w(C6qYx&R3TFwSa53QXVb-=}}+h>tJH0f50}Txd)N)b_Dp!$L3v?krsiAk~g` zU5iatp!qi^Au+1+#b<1!ph`@}H&6Lx#-)??9olOX0!x>_=~^qOnLp8ewtkU>A5}Iw zWVsu*S@FhgAt99Qv1iaBiQywD0dd2Y(H~Dh^q3UidXi+Oda@^T5I?M`UmFhOwiW9x zL{{mF$Kt}ZozzF&=9mj8O<#zY5EqIQJ8^ukMuiRPwyG0lIpek`pQPJgws*Y%`?stj zvOxf51DdX?DN$v()IqfI;}iFS)gJo`c65@1iN|+$HCTP!ayxYRbz8k=oot8>fwqsw zcMb0c`if-dMaPa;fZ#{Bskk3PwF&uz0Hfz%_UXG4>H@%v9&t134YtMc@x1!k|&vpA+CgaQ$obSYu?M6;@{ z={VPKTCHm=P`|D_w*Egq`LaE=|72j6|Lu3}w6*o%Jp`Z^X6FC=_&Iy^L{so*eR2kX zUW6yo&HwuT-HK&WwZ!aWcVBPYH>?Qz>Q7SX@9wl7{0Ab$z@BoZ`JWfieEg&nE}~VJ*B`^WL({L+ikXg|9)kIwMsFlu$?=1PPKXF z%o#D=yc#~=e*5imibX-UPObEnPSd|kh!ny@h%Pv5Sapq_OO=ntfz#Y@NcWMLvsTY-OwV=-V`87j z@ayVQFt8n?&&19qM#PG|VEE@q|MX|mLE&uED8_LDmXstW3CN#Eej`8@0QCg|)XNx; zCj;?2!W@P}6mjRpLINN{!zup3P$xkke*GBNoScbJHZsL#!e*X)d#D<@I*ebW(IKz3}ws*IUDcK{h zMr92J{_{C4@jL<4uT(U)9EvOXVQm-+-J4`*mH-+RWebGIJ%}hFPDMx3pwf+-d5@OaVs33 zS)%^i-`De{>viqbYwU{6D`y;}J?9#gI!YGp@ir$d>i>mUj{QYC`8O;y;N1`m@hGZ(T3GYMa-mKPQ!3bGwyXc~dAC zPC(gpO#-(7V5m;D7!ol&_Xpq!te9m262^hD0VE_KJ)k}85!gtJiszok0iwb7NTM4R zojiEN{Lea&iVy$+#Ot;M!9aAlxIX3qLE2-zto9dnF?UR$z=?>JDc3scGq@Z4HeMJBV_V02 ztpAqkE91kx#5|phRh|12F!<`8Hd5?KSCiW!`NG!UN3p`wP1`vEsq-aDNCk0*pbJukcyK z0W9+#D8&r`qjm}uUZtSu@e{{vuK@8bCB>z7<4wC%0Ahvp_VwF?5B^X@}3I9};O1{Vaa_IW_n>?W$KnmAyG4B1SKN0gG=L&mhM6@vNKfu=# z7`oLbgn6B3k+o+rg!KjB2lsk`h#y%0;>i#61z#Ti3K$FlU?Ht7$7ClB1R%gdCyfA< zrcaC)Boy=su!Bo{-2>cRrV2u57pVljACuQ!vC#vh&np*0_J++f*0A_?RAuQscF;x? zoX=XnRSDf!%^1^R`4ze*lM{SD61MTjaJ~InbN)Xo_IbDEJsF;U!9qAb4hvy*#?J%S zl6e7rCL~2jhl#Jx-0%2Rv6B(VNk~NEH7+C;p3ya)n8=o11#_yvetLERf1!^pS(=(& z6>pRGJyg+{yw|wzNhFEi|FFIWkht_ebSreMbbT9%$DHl60}GtJ6rTi1oPe?7_kX-k zfow*7A`v4U>FMvWK2;5xPbQ?MjEIdMf)xZk6d*nRZx?(>=c^)}wCP^X58$vd-5;(0{5xF`bi>LC$Y~nuVippiu$0EJiV*&Aa zYkdDy+33-Y0XzmUt@=rS@x82Al^HWRF$-c)UWt!Bd3EPH5vwJx6Y)OJ_a0C&Hj%HF zY!5J>H6v4hdq_5D>9R^CB9*Pb(sF~1G~JV)L;I|+;j|4%uTyEJ89Fgr4V*h=LoYlm zKgq^GI553u`tL^jdaUEcXH^Ym$nv+{Z6%Z7bXr39K`-Z(1O%!i&Nr6M{2Px20>;Po zzmN*jejPlSgY^~=HjKhBO=se}Yt*xY4`s%+Re}iBc;;hrr|QZ%frv>C#+L^hy~is7 zjCZu3)d)_6gbwUe^p+M9I<$t9bdibe?rh`OP&M`I!o^0%iC2UOUuN*f#))HiH&|N2^)P-4)ok39{a}T!#Q)OToSF?VDDeEzR}WcJN4JehhsqZq{@V2`tZ?IXmZQ0paTrq- zf^Jol8S>sCA+um)@9MIe=U70oP69TPo*0WKd^Z&-%0$BwJ) zzHOT(_v5Q9`_>aL+0(C|3cv5#vc^7iE5tA}mGId>^VJ(=-%eI44GsL9{Xs7p9v-)) zE3S;rOvBP}W?#TgWs+=_%J3{Yfc}O*gsmf$u4KLqbM)T-m01>6sz+UD0Dauqnra`| z?@wtoHkbaq+LZHI@4t)ZbIv{_jxaG3rh0|P3Zuw;oGN0Gz-;fEi#yYId`{5IDg zfb#(5T{yqr`JLaf`|rO$e8mFi^7+qy-hTi0e?NTOyLYc$uM)|~o;`c)#v5-8@4xVc zFWB$??(c^8m;YQIfy*Osc?2%z5ts`=@BPMTfc1*(X&fXDr1#%>^f%Iy*D%gZ30NM715SR}A(8gh(*b%HY?84I^{Sz91;+$b z<=JsYfE+Q;bDYJJ;r=K%L_nY5j2n=!?dKP#e%z%sOOtkScw`ATw7@h9yy~7I(;rEe zV3M?f*}hbpBVwON&YmGaslsB?uUD<6+_Zr3%1TFfb!IkqL^&ut&WM2S76Ivp!z;`t zE*Rhdo0(JMfkpqFKspXfz`XwvGR3GaCqa=)L3=q$&Yk&(U^J!TC=m_A%3RWVu2;_^ z&R5-oGGLj5xK5cmeMq9fLGG*^IFUw21`NP^x`KKQ$UM#tLx4Lgdu(1dgZQx$jaS%k z0Jdb3071D*;m~9Vrv@&M_apwEAOrpKa+)|ad0x^fAvxUME^yvsw&dP-O@R!@bzinT z@_-F)-fk0eq#`(pxQ}5=Nfl5}LRDq8z<`o4=2;qZG2C4NU>jPvLbGX##!%Z&1gBlI8txpHj36Srgye~RN1MV<#d6|qS{*U@jB5gX^>AbOK3@T& ztJY~<%}`*6e*Jh$*t?^?fT-+3RHj3#TjNo5Y-a-Oj1q z;=o4q8tkM@13FWU&hf?r9&AD~9*LZBFizZ#g1Lu)WwJn<1BK#X!!}j?VZL4}TgVx6 z=jh6epW;c!=*0v-9mL3nBzgf#WerCbGvQ#cu~7g*f#Z9+t$5w$Sp&p@DM}#vzGH`U z;l#WyAbl48$9)H^q`bz;#U4H-dalns@nb7ox6Vp8M{DNPZz;Y3XxJklHTD+Zq5#y> zSe4W+w|whL+Dgxn*KMe+#cJ-jBkAuK`X#n_)7f*u7f>Pg`Er3g9b8Y_Lqqgg4Dh|9 zG7l!K{Md6=wg#5}NS9)pF#%NDo=`Aeto+4mBD;a_GZFMhYytlBp1^V2b~UL)aeu9Sj9!f@~iK%RV!8s12Al7 zo6p&!kNw!n%PMTgjXUj`-A`Dbz!)iGx9eUk)N=xOKDm9Hl_fAH$I%+DaHj0n z5#2NAC!vIcC;Y*7ge1YoDp}&skb<}c0!AZL_$nyKNjb47;czK^bQW(I&6z)ucoI0D z@onIb0n`aNaWU`xRDkr!=Jmx&%;5Ze-Qqp|E^M)^$q5U4jP=Et-9730LO?ehXD(qL zr%#@|5(oXTA3&NOB_@;jfL+BL>cM(`pDIBwJ1r;1#>#IOBI63`_Z~c81ILb8p^{Nb zHe4|y;VIsB-^rtaNpw_T+x#uJSgC+DKBjEPHDYR;}t%F{-?RZL09zA0gk+#)4E>h!rTWXB|P5|IEa1_I{-+pPKIvrOrg6oXCbW1+|!x*VwjHruomW&SoQL? z*74Z4Y=lZjX-a!%pPdkZr}lk+XayqTnN5lWpdZsY{j(C)i;D{EzB{&tF?nU*Dck$f zv0#JTxP7BtbJeOa?wr^DgJ+BcZzAvJ2437vr9~*spQ?oIUOm*IT?=3Vv=E}057w{Xp8EZu<{_^?Q=$S94>}UOZd1)p);>y?3C0ob}q{Ug+2OP%@RN zwqpQQAKy%M7MQ6?(knW5#%i|RX?bJOn&ExyKYPl$Uwgr-cHL@Y@)4nvkeEPh41W*n z8#1QEw}Jht8aL7_Hu~#SxqEtj^0v}>9cVmbU9ar5toqefboFghwi9izmNKTSd%-Uy z9UvK_zXQBkb6JBCd{X$PSgV(+ig705c7w-mXk#jwL(KE(CiaE>rT3#N&Ukj5$z5wV zc2FwfeM4ues#-BMZX_lW!{!+Z$D0JB*JjvX^c~_p+zT+oqr>nVofF_65~xf;`ScCq z1OCS=N1*o+hc74`()UzID%5eX(Wm3K;lz^snTw5{KGUv~mymSGbD9qElgDG@gl5>) zB!XUuy$D%cujW3grr}cnn}9ed9k4f`@3{m3{i}QT+5dUyIU81j3Xs-Cy-9Bam>P zV#)0S`j?g!S+(xr*<@Tv*TW~y+CzKx+fQFnMG@)FpLx$NTee}1wT{aFTeZ~6bbs}{ z{)~O$drt^J-)ofufB*jbZnK(=>Z3sZ5Ikmyq@YXV1rCLErb^fxx0{%s+FMT8hzJpL zv~8(yEQLzM;`}?>b^T?JlEhUY#&(4Jd%U~XCNyUH5Wb`RF%dPWgO*(+-=_MIl`m%e zb0Uu!8rHfoEc;27qBTDQo*$8qdICE`^VFE`(|-9|2K$vHFM#}*Vg_TXnl!5SLW3uDaqHd;CzN-M{BR`017_SK9}7U1Qn8CS;5Fh&J#!f9L5}#Tb7gZ1b)gx7b}< z*9StL=Z`hpKRy0(`2M=}%k2~Q+#m~KLSXwb`+gx}UJsn&1TYdnj>Ie+EB zXYF+*sg@TPgz;sZBgwMo4xO@ZJo-}jSXWVEzxno?Lm~rTFhqa%ljrTFV-4Z=rK+s@ zJMZ3UB^u8}(0tX#O@VE`dIO;Ox$z01v7duKXHKwy^yYd^1eK~enYnX`d=q^xIX`QkSxFMa7tQ@_pj=9}OArv1_{{ZjaO*REam2JG_pmq+082>jfPKq>%wKiPRf*wU~f@N{cX)KV#5>ut~V8Zp%lPi1X8 zkR6~tAbpHd6!L`x(!<=|(j-8I9N7*sbcWnHGi`Muj1$3D92aEB5>&zPav{J(Ajh5G zi9r?LZZTfx3;6gkJ13}*%9WE5XW>$C5RzhS6XOzbistHcbCxbr7p?DMia(~=yR z^(vzPeSF8+p3B)1Oyc|UUXO>$h|T;KgK>;fkA0(Zs7AVWS$Uqyld0sd0^eT!2=FZ# z`^#2d6&k=n!nMPxGaI0s`*sRYujiXN1EF1ltURMsw}=9|0G$g%Nw~043V(1k5r`tu zC^0C2_!R zfVgvJ?K)+pr+E)fgTkYd^7I3+NTwz4scr&b-5r%UyP9Nlrs6b@pZ`g*X9ZAy-P-Uq zj4c!6!+~WkzFjKsNf6+EaMpO(YQzO*D`x?h&(@|p2|WP|mXLNiHD_bfN!CuUfPEt> z*H?Yho2Pz;39uVx+xy-shmI;O2&m70z-=y5fO-MSnCs$&n^eA5(tq>K(8X4G|c)Rv?uXVkky> zl~@5g8d4=N>guJ*6Ij9q^ZX%De5N@9*49^-UUY%tdAfg5{G14&AC=?(g)jYGV4p9Q z!#N%4)-^wJqS>~8^0QV+r4Y@-E&v+=zyO#7uwJ2iqD%qk#Sruof^H=EBJsd4pGOr4 z0IUuxJ(9@M}w}MFy_*A>nFA#k98BidRPg*%=$@!-=vAtA2W4Conx6FOzX{)&M8Y^BN>Gkn_ zDb3va=!2HEX^Yidu^}l?A-;Vo?r+8qHj4cH86$C?)Kn6?T4xh0@71TI9JJR z+~??-iy_B$@3A9~J`SaxEftWyx-v6R1wqTEmJVwZFm26EH`tYT-EIYC3mc4qNfBU- z&ky)K%0Mzv8~^}707*naR0O1t1Nh=VYyyB05W8qW?y)fbS-GmnQe{m|O?Keme(A}r zwtf4Jws!Rz1s{7YJHNzUdgUd1ZQskbM$cteSEqG!wp&$YwZQYYDR_(B#&a#B@;njr zFk9n4p+IVfDkk>!2y9;=;vCo~u>*Uw$4qV%bq>0GU#F&^itwfS|G6%P%4QKaiA>oHNH6j7K?rFrvjvpszaz+j*V?I{tVR?1V~K=*on5j@W0q=fF@w0#79Vm8AR*v(w=XxFO>Iy*mA(2#-tl1EN^vQry;{ty4iH&}+qsz)}dZ$XnPwU8u z?UOV(7{K%bW@+t2(1jfE#eLs&U-9>LbwJi8 z21w~i_sM1-l(anC z@BV$LR4PV#e8bF}i3BtFNC47PxdNd-B!b}U=lNtUKv!if^F>&~+|l0$>oqzO{Voo_ zlVk3f_J?PSN&+OR;B(}yl zMe>{O+_A~luUVq;92WpdpsG5!X_e?c!0s^sQ`5`4T^K_X?D+YO?rTV2V#S zL5=yIH7ySG_c6E-z&3p(Irp4cuH$W^FA%%)@r|ELs_&ZwdL2{ZfAyy8t*A6dtL?O{ zGa?(R?b*kzjAZup(+N+W*vB#A6#@7>*d%hPLrRR_e3cc{W={A)Tlg%x54>iB4W}(v zl^RRd3P3s;pk&QO2X^3dVgdoW7WWNtb_aN)H?%Y#3GC~z#FNODu6T?qu9x|BV9m~i zP1u3{@izUw$>iFSaKe4a71R#3$>y`+(n-EJu2Pa1C_fx7sdgdo$sEW=6 zTbujS3F(+Ws2q@qaIaEDucf(HuNEqB)3zsol$7c`>ZfhO*^V)Is=@X@zt8^aN4sUe zM*7gwsxtf4`*v8x$~7Xd*kT|4(bYoGt_6V}$#Z_5OJ{#^msTaNCN9u>tU65G$w zIOdDQ02u`gF25OmzKy@|DJxmB#zs}?>A*kzspV*#^HgDz@#g=ClCg`+_3UY#fG}{V zx6ewel)S!lwf)Tl&)MO|)<7op+waCUC5Ff?y;pe-mCRP<9Y714WHg0Fa+KGLrNydv7-C} z>5!_r-f+@-+RkC@hyBXymRil~P1Yese%RhwVX8}u?64|q4hSs2QhvKSJ@38k!ZRtU z^;l!ODj|)Dxm^TED{AeqDlMImzS=veWNr~UYe$>ftiGbue)qk% z1^~PtuV-M${_6f`tU=?C+_`n5Sm-x~O2+$6HQBcW*oO>?M2%e88=rjZO}11xna1M> ztx90|O8vi-K=VFsye3wgCxNIoG-F3>`O5Z@AwZSxhm z=@O(S;7SlL89}aj?S#AJ6=CAUkEgisiV$h;(51LILT$L?4X1 zFgCh@mkv;rK2e$+zyZbt;Er`t0|I93^Gh;6 zZlN-xD@!BbpF2U4J(u$(m?U;zkB6P>R_UwCY&pYV9FTF?JgDa)0z)icq2Nk>c4UxB zPvse>+;H5{cuwaBTLERcQx(A51Ij2TSqAX2JK@|}mX4DMCkp{v+GI||0qg>xojH)e z5U=tv%qwS3b!fZXsch!N9cX_vfaw9$NB?0viwnSg9EgBE2*!CJJ_;gFWaRj9Mq9tP z+zD7+TN)T3XiXPPC>mYkx+dey?`o^MWS` zWa2o*aXmCRo#f$6G63;Yo#Q)p@3uSv{mKN2bLoEl6*+u{t@4H){#AJ8xrhMuVoK0` zm@1&&uiJcRSR#nymAHJ3W=#YHrNY1=sVtS?_I&4q zJ<>S|Kug9VPVyN*A(96#6ad=ML*f=-isZUt|4}jQ3P=xd5FmZgvgFS@rN{x&!&FqZ zae94@pDW33{bx?vuvp;>mMsrJ`hq2y1)cj(p0vLG`>pX1!vl zzYs9hRD&730Yp!bZB!LOyB~eT%CFu&WBdl28?5uC=d9$GH(P;%cnCqa5NJx#2R&D} z0LyYOIa4?cXMn-8V@4bxIKYemox?LHn;W}+p=CnjaPW~Q?C_&cSP6`?0)3TF&im;e ztGjnF0O<#nn6OzO`i-~kOt*=7w@1(G60;Wo6eNtDbm}-eFt!muY@R~^kO4?9u;)TZ zR+f^avx;^9fmz|Y_tt~6NRCZ;)z4FTQs-UZcR0VG4|vWT~iHu61xat_N@dpC#80p&u2C z45Y{Y?NH(m<>^Tr0}SK(0qZR56ajbGCGp{KF98f%Y#C}1yY+zsHrCyxsw`Isgb^h< zCmuI~9SD-8XLn>s1S$viTJGvAEnjxHpGSNjY)8hIbHabKSnTu6Va-ilGyEQ1lWd=v zGIGYxBiVcGZ}+S6d$Ri-KQi|iHn)rWQg|k*Fp!-+5di*)03hE!)7PN?>0ZMxz?=n; zKF*dO<}5vn^l>5d2T#0=`{|s09%fj4VezW1_(++v;>j(E;C`M-015OjRq5&1Tq&?m zDiT2K0O?h2FG}c~Sy6!Jkn86lEd2V_A}QfBJ~{Tu(>w;4o;5PRpdySlOAE;ZR3gZh zUl|`z96TTI8({u1f$8xbBUH;QDX9sSDC673-*bEtYvs+kZ;y^@I}7drOvE-MfEp-u-g&vJDVDfTX9MJ7lNNwrPCiD_c@!H(a+q zFwBpRNSD-Hog-op=ECnk@O)TP-uHGTUh3aK_w-sf?*ZR{8(hr5>NlEij&)RuPynG_ zOt-?te2o*w$>V*#Ug2j)Ct=Q6A)Um1+A~1(wX3HRfberLM=>ugi80Z8q8srEUyr=H zoyT|+`!d&Ok14Q?`|*8y`kGkTF4YQ1zMip8)rpZC9fp_-WIZI{LMG#5;Kxh#6%aU8 z)+v2mud315T&#U9&BsKlBBC0NZ#rw99~Xjx_Jc>PTvA-uBGnmcOLl z$_1cL6m%$Oqc2n|X5F2QK_>wyUZZ5p zbnZ=TCEAXYCVBEny5v^gCtlH!0i(0l`}l@=M9&bqRe5E%`YAMd2GZ40p=Ty%ifEB0 z!h9n;W11*0N@hJDNMEdZDS4pZZSDB{G*u-^)i=?%G7)0ku+QW7j3>1^$sV!nRPKwx z(~WlUh5h!I|Ms-vg46N+U0c@J`*&Vr-Tebrd*uz*d-UbN?%twA$t9Jg_E~|`3v@4| zTg4?y^I8DIYqcEF^+NK(c6y`OwI@rD>w3vqqj@mb`W3$-cEvhdMq+SxpS8-Dw5+-; zFv$Z1KOp_^p%)Jcblwrb*YCUK>cEP=Ok_Vbs_4o3JS_12{}zD$Ok07c+c$QK4P6vfi#veXCW%t0}|Ke_LOy>_xmedrB9{i+gGG88y{ z$L7^afsjtA{i1zx?6hJpfB%!c)*~Fijhk2L9L8<;>!-rGT)C>=e)--VmapWkMls?8 z>>m;^{@V4+#L8Y`&m1^u{iv(IVud+dKY;o> z?zm&t!*_Rg%Rw3e!q|xY>gwud-TpFwe%7J6{KMrDxI6-Hz!As?a7+W)H-&(VD<#RYwo%@_PZ(;MGSYiF)421+9XdEN2x6rw^vS^?>_bqc zw5%??dK*ztMJ$UldXZ2jUE|~o(!Sk7zoPVE91=K>vr+;^##u2Jo3{g~}%127H&GA@we4qL@E;}cFc0=r0#GHmn2NS}_tc0b&gGee;!DS;qWL7CX+ zXR4FwG(G3G*uq0S00~N`7__^@xIy41zl3Cf$RM7xk$HYxTC+5;h65H~B35$(rT$!| zlVFl~81zs|+6@mY#NPxA)I58aS99 zKmv>ld}a=!+5&(W9KOwsheGg@1c6i>G~Pb1jY^ss(e+un;>z%~2c>ZWW>Wgwom0!y z9*!Gl*~1x~Y;59v@%LU{k!lM#{G1&klgw|Q`>Si$XpBn3wd1+Xg!L~mBRxv;5R?7t z2q5nLpX>G9zx~iEuH7+%>817QN33YQN*AtMH`lJgSveP=o@W=Q)zp~JvbM2)!ItQO z69?RrRKQw=Q#%t0<5M_YvbU+>pjgPVLTPi_d!q&EG8qH*fzbiB>UII>`^6@K<7(xS z3ON<0*P~3^zP#VuBTzWeYNcZ*XKeKNlluY_-twi@cI(cl!ijItle5-_vTFQe%C7+B zdsIdoz`&-}Vn&_>fE*KWfbWsbYig}1#&(}_>IWY@80Jq}$G=x_u&e zo^d$-enpP>Z6E#xtKGCYfGwTjIRZA;P5Indp8=&3U`EiP zu#-|<|B@YluJ6!Qn9n&bIy$;P<(XXo7*m>Z|H!-;HZ>NG$V*4vIOxQbFR4R#2DxnIe#b?lPAU zAnre-K**VsmMi9K80m}kpY=CYX@Bf7%dZww>&BULQnbJ9jodngPO<}-i!~jcGk~d- z2!YP|vy`rvU$SwPimu+VYsO*EJ@I4fE3UWUx;4@p!~$3^0Np?$zqVE}0wYv{%F%yb zFI3Qb066oCZyQEno;#PsXD$=pgts-{>!2zW92AKD5I=6J@0qjEv+$AQ^W=Vu_l>z7|EKE@BvPiUW6>7}xcPJD zNgzeV0#GiUj=QpLoRlXS*$nblUd>EAtMO`JR3L zh#ffGVAsBBwQb+J&IWr&l&}*4p?v$Fx7UjmTz#qd&Dovh#Kya6BgJ>s2y8 zfX8S6nUmz{RWv-VhRz9NJ@Y;UI&t6`^B2tH7gB|#NmXqjks-M$UfIXbEt3jJu2VRX z0Bw0p4>o(Mp=T=0!Pu(tgjkO`XIhzu_5F;%mqn)zSXDt zvCd56fV7Jqj_n)Q!5x(ERb$vL9a$_Uclt1$d=kaJX7o$zXNb>@xFM{gU4HoOZ()fifo`6=aIsPzMc~4hS>g5oReLAe&Rj% zNvUk$xSpHHNRPf$Q85#r;)w)tqBy?~sfLMeoQZg)^~Q!Cjb&~i*`pmNZ!51LF*CL2 zYWQrU9eVL~`wOv=kI0sE$y1Es|G8tEU9+l2zMI?thX2C%o)mL=kJZT!_1X8`HiLaU z+Aquc#J&z-{djYyoszGKd8As^akmJ#zHQ@50j}}Sp_@h0rdYWRim;M~xA0njt! zNJL=wA5JpZlQ8k2Td$q*``*K6?4QM8KcwUx82vwS_YL~|iZuxgPl5mp@`-)r8r;9< zb$jBq<2I_XL$J9@3k&SlEo(K7YwU#Xjn%56T%obZudlU&mC1eMVdqQWk5}i3uNz)* zo+=U$5iN#X^Z@!#-j`>;e&0-hz|R{4{Xzlghn4-)+N$y#Vs5XjR5qr{Riq+g3M!vF zcP?ySE!LU2*zo59&~vOm_=7*NKl`&k3y1ymr$239{Nfj9?ZUUd^)37Ghd&&Cf7iR- zWk2}A4`$t#9~J^Y&$%*2Op=UIx@`WPot92~^Z1O!fy8Ytf4)2d zmq*~z7=a4`&@)2lcQ{wNDpF^SD6=`*M#0 zcLWPiroEJICdW&4AHc&}l4QVL5so>~r;>r~XJi=8Z5%o)r3a`82;od3IOWX85s;oz z#?xbVu`$wzK*?ZaXaQJ;W!aqrIN1pBQF1p+tWdDVrwTxK7I+^Y2beE5`#ebjV+y*| z08kN#o*)?D@(X33kKa$QG>s1A1a>)vhJ6VqOePL4SRr@@2u$JBK^U(bu|%cA^yZGNWh=K# z-9MqR$v*(uc}55TazBNMQ@;`1iU9TbAxMdX%FBc%0>Zg31H+ZTZh3hM=!^Y|&p4^) z5`udGDcH`RQ{SFBxUh)-(eeG>_uu2M%%u_Yf4LmJtHMv2F#pHfWb8FVhti0A&wVtk z@maHO8t@U{KG}PB@YV|u4zrqqWIOz#&=P0mSCvX8W-Tr?)pl@syn~dfo zm*sWkR#!E>cKY|1Ul(o!O2$=wdOQLyd#gXV|2Z3!Gj_|BEA47I3**v}v&F`;igcYu zBgd@f?>wzbJOk)>xHba_H0Gpbe-a~L6yf)H8Sz(-G)6kA+IiE4rEHp!^r`gbk<)Eq z-}2HzTerMAqjoOkost3QU;5jBv}FQi)};9yws-ca3~H~v^}qhn)Q|#v>=JMZXDa|0 z>>6}VmxW;4^tR@EjX-;_p+=xlY!O(HeEny=0;o<<5(Z$D|TZ5ELJ4y#h9Q=PaUyx;}2h0+7Kr=H8~-qzkt4&k{%v<0k+fu5FyP+xtV}va|Iwk5_0uFVlSW zvk;QW1_Y$fEf;`y!{!xB}0zku@Meq(Rjlg0VG*olfHX^_YQ2nVUGULFz=!-s@F?jK~`Ss`}v#TI-4 zJd52*EJDyj(f_7=NeTJ`b3>J$#Z*~Ly((b*K2BtxPj-&zefaJ14{)z=4IO;R_VH&R z(~1@I0oSMcC1Y(wAo?+Y^b*d6{=|Lu0O|4DlhBEN%yT(BM2wZV1K@SdCps7A+QEVD zzzDl)O|`X5CVWjDYw``C`7xO1#X6iLvXelxqJ99Rw=prcPx=Q)Xa#f{?~Av^dINCI zs~pS~w_t5Q@XSj#D!|gJ+7cUXIPA@&{EA)s`jN9%dh`3OZ0kKK@5hF@R2J1epF9)KX~Jd5nz3(_~d>T zm;PeBzRAwp!C}N3>cozYIEhL!A~SDeb`X6_(DTsiXq)(K{Sx`2_53rRwl*I>PnY#J zQ+Z_#;Xi;`;&}*q?vUcDnXV@ub8>$^ZMrT&oEBE}OvS7EqJM@8x}oie!0SSi2%66- zj{V9WtG?-OD-aP?TzU@evw@~FR(;#;mZJ)K^9f1S=v2hZ0vo+5mgmaXkUQ2PVE)3+ z#bZN?-M{jp4R^F!-qzc!bY(==L>~cilU%|5hpx_jgKY{JngmJoC*pRQ_zpZ~Lv^Z} z`gLJQ9MFvZLwqq^aR7Ea*?A$D-024~Q0~i_$tS8VCf}CFW!dgLHhN(g=JEr1yvO5@ zwBd;&=~fqKUl-TQ<76B@7WoB3iYG_O@xFbkuY&`M0rx7&Ggf8WW5W0;AtH2}Ga2q8 z0@8y|QMEgX1L?V!NVbNQf;c|9vHL%nyOzal?Ns~9cIdXS&tso=cMXLETK5A}MGlfP zbj0~$XtXsX65zfg$5bJ@BLL5bW$WkX<`}QY%Gyf%wYTgDOz*I#!=m2M-YxKVk^SC# zZxdU5JU*(bK4Oyp-tO0IkAT+^qkL#4`~g%B$o#zml~cpS~Et=Cvdyh}j?Z{P`s-u-O08<1f#gL|g(7z3;U@{^LImW3_MJzHt7GL!z8Gal$_L zxzE{CPdzoYKVy9Fz4wMOxZ#Ey5_h@$`SJ){9)U|>1TGXn??Z&cH~{J8{6;WBVSS6U zwqU5hq=Zq5%onT%$nMP07{u!KxX_^8g3ey_Q!Sk`X#E+ls zePU1rV-kii0!l874-Ow#;0Y2ClrC35c%j9Cx{2)boaFk;wWeb!%>0subf!!<4>>5ArG?>0uPMIi($?pK#VO(OK zm;!Ob2&;e?P8)!4Fhs{%Q{-E{VV#vnT_a2};)saoKy_#UWb4oi2w2Andc^4(sI zz@OVS>%_o0$1@*4FW$QozjnzwolkK9_H?wJwshF#04 ziQcKk`vpY*w}0OoKJUEgN?W;NI*~_k25ZaR9)4>P;~v0)Jn3iEVy(#+SwLrxz-pS) z^5j%4Q5jQbnfJy6n~0WRcZ>t7KYS{32v-R7zIGPS`+yi>a^=HdEp!ww zj2Cq((Rx|Z8-YXseP2tP?fd$_+SPKX=PQ_!jvN!{qvEP9cI|uKao%p|9N0?Cfs}{_ zxCA)Ih4~cypG09UcP4C`-qw7t1PwdIM$c;wpnfGpvL3t87eL{K#Zmt}QF5sOZ?ly= z_I)q(m7p!_C_#4mR;r*a!9o{+qX6mMoqrU*P&O%xc90mq0JnRRGK5nt5FPL9kR98@4P7h z>GM?LdZ7hB0rosLNl5(B{S{|4=XlIlj30U&b^~)3f#`IlO+M~I5>+-#gC<6L`z=S$ zevj6{!-o%8b#;xcUAsZovrTqRX|S{WILuev@7Pz^l$8RvR8*Geo>BsKcDd#f`d1)e zYo|T@@Q?I)Q1ODDwrSG_*`84nMP!VUzyb3wI_&J<|l2nY{<)91vMZ`A%!^G!O z>}0?n_*c-0D+Q$IH658^0@a!U7zn|x;Q5{{Vc7k0__dM|TmWR|`uQ9&Gx;E$-leuJ zK=Do`wNSw>V#rq_Sy?QROkh*ybtl}QKip4=HbiPio4J)UAi7-^fw+%OZ3K{EJ|I2p zfR(zZ7NbI>GhoKS*4XE9U_XJ`Ufttknlr+)ra67F*wm*6MsLQ4hOGI8S1d;fXw`T9 zqUB@_2`Eo& z;}dcJ5P;&if0glMjsRqXEav?_E_?gTX@NmB|2POI^0xqxo}M3>uev%L1gsg>`jiur z-7bXDHgQ~L`;0HQL+c{C7V{mtC^osv`TE1$#45hu?CkUTVV?5slD)DqGoIe4Y@kKum(rA7UHmqY)wJy&6As%I}Y=jlt>- zR{OT!N_n5e4e4LDK=egrd3LU?*B*T2Wv!E=!7kzK*RQF!J9ceR@?5UZk}hG5_uVUF=S$D1t&gxltgQfmU6QRQkiwt?C)24sP8v@J^H?)%q*N{jc z-M#Se%T{&WEmj!!GisvlRmGx$>T=6d)xHarp|)o0P}Q)kO8LjO-eH9?8v&v>*5CZe zs^MP!e2K0_Ce?E2D=}^KA!2y=2*$@pm6&`~Yv;J`bE>{1_r1<`p6H?gutljN-ETv% zo$*aCKcaS@FkXJ_H zxgY`jLJ~!&20>K_`sKt;4o1(;8Pl;yE}!jeXa9b5Bv-M~a`^#>y+-2@B~u)e?vQu=_5OM8lQr_iH|l8ifwHajw}BF4DL_uKN0!^Nd2nSBp^-LYbTnlP4Nu`2J#Q=+B(HtKB%OcKNkqS zu_N-GRVnfDdNI{=Z|5qxHtfz|zLB>?=&y*sA*-qIytyukkh@}&`5`RHBSZTp6Z&?|Ic(zb1r z&i(oCJ|0;03)R=(*0C99j@>0NI&A<-2k8F$?|ZY=l%-M~E6esAI&J^(=!@Y{Bs;)h zPppAQfolol{lPQm>`YsPnWFz6zw3I%n<6^_X8AAOzuQjA56F3c@@+TU<`q#gLezg@ zQFIT(LcizG8UHH0-YSOu5AM1~@2BmHUis9z+gieWQn6%(6_%8;+{*^Zw`^f?3u^0Z zSQQ`pn@(HJ9e2!V?^6EY^X8O}q`~k?6&FG(Ip3IGv;g{K;CW8w`ag&Of{7<~DFW#C z?%itux#yGr`9J@s{m~!&(bQ%zp#R2i{D%F_-~7$gcgfzo?|ttJz;T%DKk*N#*KFD*s<_E;QU)}z4g5P0OD6vOe?;xE5Gt9 z_TYmL+L<$F>_Z>=P)IU}Z$py8FaPo{%jpsY*W*DYBuM@*3%f&;pDk6Cu!xaAio-zQl+>3%mNCVkkF91KoyvRU9*%NA&$bZ!tp zs>kwki$q_sN8)%8B#j>*5DdaK z0VG!>mI55bJ>9xiVl1Oyv^}5zbcdM#YsJiw3G1Xgk8$)dcFv@jZt}uO0ayU3nfki>^_S%c8nMb7=C`}1c8b0607FIPvH)6PUTbbV9M<4u)m5k} z!}!LNfnv?gc#8uP=OPsZaOTDnGgz+ydjJ?BFo3g^WCdsR@nnp|Ykw&Q?HUB4KPPrT zmpYZmU0yp4_Ve#Azh3wV)QrBUDRp{HZd5tWC!T&iH2n7awg(nGKgvi}v32D{&+~y3 zD)lLcG*03x*NI73H}sLy=xQn#s(EwW3hAg?x8{=GegTriQa++~Y6ZyRf1)tgpH{id zB0W2R2P)*8P9_|?Zy?eouUIQ^XnuOYyku=&O5Y`d=Q;PrJuh3^o)_#&F}0*4T+dez zoVK06`f;mWzjoGLgN;M7jP%W9b`tgxEN9HC1alUXaTYeDPO;x||C0O+kUnm+aT0?9 z9ksWe3io`K$_xLj*lz>)S>uE~5rLo2PdMliFcpS5o<{;utRu6DgO}0)(0f}WVtVg8 ze9(r@p0&ztH(6o*GXLqk*Zxx{Y+To_aQRBhEt)-{Wu&X!`UNrsXqa1B6&UG@*Q^1R z71|u@7c1XG4_ft&3V0`Bzi0opXCAlVE!%A@m!!>tu&&0FGGIyV?rsj?1oRKsWU<#4 zT833gwBxBKt!C$)3ZhT@S9_H7H`Li~USv)g}a+fw4;! z&@j~8Y@NHGw)#8YX4y&zc4>d^Nh@5r+DbMN?Bn~aaE;EjM8^riaQT=>Msgt$0w&Pie5L?K8cZtSF$r+j(n2Q#=LL}_c zfWJv{sFm*s0ifH}*%Xiv=LAnFbk*sA^nxUy~K9 zvO_W%(Y)V#?2rweYqGqx8*OaqDuFek>U*VSg$oM)ci&{3Ju_6vQ^%O=H8qXs7-wgdhV?^=~ z;6`*&s@XuCkWBDL0UV114xQ8>9X7u6DpqK{nehzh;5-A&Sd!!9bE{Dh zvan+Q1U7Q1V5A=(iJrmg+BF)Fe(76PZ|I zAENv9vb5HCBKENd@3%66W9sv#Njyl*BPnlL{j~lT4wB?gi&#O=s-j`thyJVO>G`@4 z0iak^o*$~eHOmLm(9{u{TO~lyvLzKEiF~MUMAu+peAyS$*TvrVVgp!Tihj7oy2cmV zwVmrc(HT3GV9&fuauwpfZ2ZN8bfLiB452VvBPv-9ZneP3C##WMT}O*+X0)Reyfs zIH8j_Xr08)Ko`Jn$A)TYRsyb$aUsCFv%B|Nf$YiJ+utf{Nej)Spo_IV`?!^Dz1E7? zM>?kemg;N!b4rjG%XFOBhkeJgOKen?zD7F*!0c_b;-yPcZF1J_AaCfSnvwL!+zkTK zZrmR1pZE@;(w-7-@w=kOXX4lJ#8r<+(7qFMWm4Ii{XMoA*F~q9+|#d)Oq(vmm#|g5 z(m3C@D#kplSToP0Cm+VE8n8{Ajh+PeYWeXzG1-anxDP${h>lEh0*WA<8ct~^6xPfnp%jlp8S5BS?|2vNzwQ;e;msF_&QALfF zR94I8E3_uX(7zxMH-PIaR@B)oSFN^xdi13LTnF&|F@df(EUOVXJpx+;oc}#Br2}@4 zL{)#zw%Xr3_-xo`X;qp1r#rXV>HrcqJ1Ri?*B^PoI#ek+PtVz}y+wo#E9xRHmKYb29|76+UKk~difB3A<)9hF8yUDIz!yMtiYev=EFaPKnJ9swI zk^j>j*V&DmSBGsNFrt6^l(31m{LA<4u&rzHp-ot8cYiqlUXcHw=5jLLjC(E8ca>oAtr!RzWVTb?Kx7-+*`Qw|B6!5hl?@B7fY{`FMB>ujD!Ws*LG|VDB#cR4 zZaDBI{-<3@zhEOE-h=GGE7y}G1)1Dp$wdjEzkWluef2lbcMg2@p;7zFLs8~;;(%Og z0D1t~D^{$S0%ilGhXEco^FdAcFuFSkov|8G$r1;LfA4$WGr;jKFut=ttSwJI`J}-% z?*f4Q*M9BS?C<{W@9a4#ZmlY1{4f9VFX89)QUKrbmbZlWAN$zH?B<(q4)6c_fB*0H z-~QWw3-3Ss+0O>%`0ye22R8c;fB3`U8yMhe-(?{I^zpX5zX0lsi;DxJ{9pd%U;1Ig z`Nb0wzWn7c+i(8nZ%+LVK>qgIZx7=LEB!zI<3CRQ#+yU{{ZD@K6T9c0d#1Kw9Cz;A zDJ5&ze)OXs+4sNy{i)wzx2NsPa(M(UkHDof0zKXParE9 z;sFc}59ooQ6aqUf>@A+HoN9J%*m;&eIN4JH(mP`j&X;DDGz~_L*o+rL0?VSt2|#^d z018eW0cB%CfMANKufb7vr$HSmjZVL(en%PWbo$5^n?8`$5yW?)!dXV z$0C5+D8SS$R;qTDEp!0CJ9r3w64XmqU=Pd{d!RG+5^_s289gK(q^&AX|U}XJ_~4J`<*Q+VmtTPc(s51jekoCFM$H&G*C3 z`Rc*iDMz8^_=Yq4b&paOHa*ZWEIY960C=H2=A@>EL%|`L3|u}}$4(w^)io=%>d84W z1o0J^-iRa)SAW<9P{@&xlMzY&y37CgBW zgLh2|OgGCZ<5DAFz{(T?+P?ke*ZD^vXJXK*#`ewFaKC`hukAk-bmI5DEAl7!1_Rl( z)|b5|u*~l}+7!MnQZmTq)pdd0;X8otSFW8OOfWpjut&Moas}#Ou}_pPIjm1M zin&Li6`1aqRF@@gqGONSYe%B~#Hv{Z`o5Yb%zd$EMYy zN&p=r6L$CSeR|$e1r$yqt=mbnv7@2OG50Pe<1F(r!E$UQgn7AAiB?j+rp|-PI@ltx zb7jK(In_`GZ@knwyP{tc0FUc1=nsI;2$lyHSIwCvrRVDr7XqN?*!@S31~&TIH{Ul6 zXyk_^!ZjoKJJ#Q4MFJQW)Xe^Dj!SRsKMj!nL|`N@TC>&)*RHj}lP7IhVBwlrC7Sr5 zy7ntjHrQ?jTURN`p-@0j+0e3M!WhZEi-UIoWHLtBF94jYq%)@jIEx=Q+4~OpZ*v7o zF2Cy9sh>ytd#&|}hppn~TP(l6UIEW(eYmY{Sp7NQr%v^$@``*VX-vg z|I#J~`fX`_RagtAe@y)y^A14zQUMn>-+hNIRf*-r5ci=ljsf^ATfRuZKNs$K<|}+Q z2tZKC2j;ua7@KTegNiNJc~dr|z+T6mr>ywy?ePErKmbWZK~(16`z%)kH&jAG0JWq0 zGk5m&Mj*mC=$WN7fZr97?bEzaR8(T8^=!TR>WkLh)1|~XCHHlu=-(V0sN?{o*j_t$8#{Q+rE77CEo#NIuOFQPxgv0hI_xaC+b(SdmpBJ?)^{! zQGMfFGO_KG9Y5K3*d(1Ds$iw(AX!pNNF<{_vJptc+3xF!jR#@8iSVkV$_M`{&?qfVud_-2XTsyHP_E{88LT@#+uQScz=?^oM(D zp#@O19&KB)e6yaF>Gs`Yd_sjnCtgrZ4^W`%v)-{81o_mU_ zkt8Vsln0bWl2(rVB3w)Q4Ew9kGmR}xlfe1t8G=cdO0?+P@q`_8Y!VNc|AMbsAo|#2 z7y4Hxc3$)t{<9wAR{=y{rZpLTDJ}r%`}=u@BYmsm$RX=I@S3fumEI$tAHp1buDwTn z&k4YfvXW_?DBc$D2XsANKXTS8Zu=!G-Ev#v&uM?g=fN1&3YZJ%#LW)oKF)1agcO$o zc%Ff~m_XK-qW>-Jn>UReE~aZcSGV2wOU%M!O71UCcP{rB33FkbiQbP7u(!SSWUxsy zWpsD_&V9TwxMsI?(1lud}=Q~r)2X%E8X=AI`*_r zj>@+lJ4R>5FI6EdL8?G{kNXgp_9|i?i<&PndA9SwMs9EG3-{GRGP!d+kKv#LQ7s+u zI4t@Y|A_+v>co!0Mo)!}zEKSE;1FDIqg~=w*g3Ps_St4WaeWX%I=5Xs38$z8eJQd< z=W8eN_r9JI^;hSXq}^n3r1<_k`&=XU9iX$(H{x0@oOdpuVJTfsf`?y`Y6O|esBn

-Lqed}YS& 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 o&kKJvt|KKkLlvgR|ItA%nVA`7- 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

Do|+Oc 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 Y*LQv4rel%2#LxTlA|KxzT8V z>I>p@$H6{W2pRv%lgx8LrILM+4Bo)zm(H0GbaDE>^=i2@Syt;IxaHbinRf|{d*jfC05NNQC*k*sW%6lU!})lAG& z$^+_);YLp@huKd54prMc?->>VGD3{vp-lnM9@CSv-T3*aG}R!UNo;4+ z;pxh`1C8YVkNeJ%mN!8`5ng&!qEz1WhiKl4JP|^4`MT^^ymAiTw|hykzsM58$+tul zlXbHZ`&nq^a9YK*1d9OgAZsa+i+=`pcM=kO_Q(v0!$RW!=B*KeP(T z-0z%P2FC-4dZDMsHFzAa9)}z&Wqa*|bPN?uph&;dLc2U zOl6(`{x4wH(+S1Bzjd+4=r`(koOVWIPi_gGablz|buSo3fUhqrDEwOdGvnh5CNZeQ zfG$}pCAQ~foiEEFqj78h8};HP8G!W8o0)kgEiZ^-#s|9ZtUj~2XbFMb0BNN_SO@z@ z6G}PtLP*4VvnoAWrauerg8;k6+WZ&!G2hdk^7@Hbi3MtbEff?w``QHwu+h@s1zzif zn9znz7wpm@`a2Xt*NtXwlP2~$?WLD0bpB*Q6l=aKd224*`9QP-k+{u7}x ziiM29qIxD!*RymOVwT zZ(t#0Waz6!^U(T~qvW*mvXrbb@&Qh3j# z>XRCZj*cK8KeybjtOC2*OoR5WSzNfhv~_X6_nj#>REIl04q}1|95J00`*%CwKC?K> zF>V+$Q-l+=tI3M~lZWx`xKt;Fz1ZDrU@GQgZ_aQzl|)nA1RWFh=cC;HU8k$g@zw3X zrN9l}KHi*D^)5wRpWX-p#uNXCp3MsvuS> zCLKM7SL0$}ayj5T`GfOlT3^Jt3g{>ML`z8d{$u&WCeu|dvZkbUq4+J?U)kR0Cq_jx zJFo8JOC{LWOp&3uwpsAI%8)ZT9$5*v z_dX}qWt~6Fy(Zb!t*Ik1eMpN}kjAfeT?x3Gn!WS~FaNmu#h%!7BRAKFbhW!&-dVZf z_gt+Sj->OMh2m3YO+?qF0Gl#e^$@V&Tb4=bM8~_qVpBr~&fRa(%nLaWcRC#Sg9;n@ zF-%e%mna~2oFZF|ykQ0$(ny&rPr9O{0Gw=vT#dk zsq}wzQ;Uz5Z8^Uo!@kn~FrnAUknTLiBM!)O=4W>jI8B=h)>DLC%S*c>= z9V9DF^@w^0I=?@-Hvsz$G0w~QNepmxY^91cAY^trW!TFsDshy#b1Lz{RS*@2O?fRZ z(MkQq;=!c~ukybvIYpF`PKj34jd1AVt-oSJb(Pv{09%w*&H4cLU=a_lzXB!ZZkMu& zYdKVg`RmsE7fbah%J-`Ox;w=W?AU;y`ags5>RO8Jt#b5La>kZ$oiSxv>P9q&S2FR* zaP4j0a2u5k?s1gG!SidvZI$iX2q}kCEl6}~+3blfKIuRFG&G<tH+_+fz(_oEL z4xK4hM%gxapPSST3P8WaM+qvVOU#;S)H(xH)M@5QVB>yFIn%bYTHj%CT@B|9$(1im zDR_m3EJ9w0Eo&ai=ft9Q`T}l=Z)ou=TTH(~`BMBq$k~O!P(+?@1?cdtYONp@9~1d= z6W5LX#%jD-0sDCJft%`M%|GC02K`XAsF{-Z@^FUfwLRif!+kaQIUOr?ds4}kCI&T^ zwXD9ekrJpikM-NZ@n$(A_C1&&=&XSd5Th*m9s_B^9jEJp^gBp8?c{rkc6nlcnYbek z0V!@I!{m;iA9%><6$;=^#Ga^=fvMy?t8;A=<>{Nb+}l?GDl7)8>XXvoY>VFmbsl8> zUu!GeD_QB9#7aT;P|9IIyL3wDNyyLIh>Wdq463qCLFTmXzs{^I z>K(*vF8)}boxHuMNbUiB3`i&+QpsuFaR|*6U;a|Y_P-Y_c3x(S<5f$N7o77}ckeJf zkUjodVoD=x&Q3vFewE0%BsIt~pO4QM{zmdCvNug$apkdMTKb{dVECs`&XV5&N2acb z(o1cHPf-3qnCRq^uK}##E_8|?N9Fu+vI*U+J@T1YbQO@p`^|-M_2Z$$7iP+Jbgo4{ z_9Y(Z{Jve9y5@i^$vv0EXI2`;kjom@|BW;5Ko9sq7!Fth?5z?NZ}~=!axJC1A*ZyGpyMfj~kHXdZlcxn56*yG3pgo#6edFp^=n z`k=;XsdK?TWl(zFowNpvv0W4pF(;hDXBgdM0ER|jGaK8Ha|AukHDo+`U9}K=AtL=_ z{`+TRD^aS*ziEQTBQa+%xL|SpO##nC6SK@meEA%y(lj^;Ms7-pxvGHMS0`XfQK!%F z>&|D+3*||vEaDK@)ndps$@9T;{PpOVb4?(@;XVdlE@9ui=Xg-2YkD(z5O;#iLKZA` zi2*0OicqUKPbews>na|tCm?s1PkplA&M@hc0&}41oh^;u^G)NIJ3jkEDZIm)kMq9q zl57veEl49GppY8zar|{5hM;dEerG1Zx>J6VPtm}fD6Sb7skC=WCC6cfDjaaDg)>{1 z#@ePm$Kz?gfWP6RjLzHYAzi*_t`P)p6a}LJ5lM{i8_I1jEcCM6dFFPMR-Qw^G?Eqv z#!A*FT&yCk)X>LEd!v^EzLTO+P`rQtPQacp;?iFH8gV^K^sy=;o38wM#FM}$E*2|K zKI04CM1n1X8ve&buPk@;cY!|MrnhB##G)9Z^vL%T3OKe@G&2|m#g`&+U6dTt-4df$ zPHynTZrLe;g7ZMOOu`(b25fq5g@sHMRQTg{mCCbl8=9Bk=JHXqBiCpJk}ha*8F-xx zB_bwPN!MA8mMOiL7qeC}uVW&p07vo6O4+tlCJGv3ZDZe!t`Fkwl|Me%_<rOIw50Y6qZ;vMlMP2+`#8j+s_O;Lg39q}}7OuhpikKz!a3O^bzrKXd)K>y9k zJBcz|_%*Sjm6l!h50rY*7A1p4vjTYZs8jLNDdc1pzK{g(bS%RVl6F}Op34=qEhAbb z4hbxI(BZfs*FmyUwPCK%z3>w!dmRGLge;~vAa~b{=>vbB z7oK^3V)1&?Z30LyK5NV`bS{e9QK&TjLexF8Epm$ncKj5)S(whylX4j>B~dzbLDb7! z8cGSd;}`^5pMI{if7<8ame^3fG>Mb^mENic1TfyhE}IFIY_@os7Ph2^A;C>xXaEI9(Y8ujn;~GxpleZSw z0XPqBJ)Wm$wM=FJPTC<)egAzyS^|`}4F$yXw9C^WF4XW7-SNfGp++)ESx#kW6KEab!XsVyjD>~)z zFA%`L{=q^2z&=*sKSI?s%%_vntoTQysh4a5;+7u@Z;Q%oa=*|!-xB_hBvw9 zwH-K0CIUS^yeD|cf{f>cls(za)Qyk9A`!hK+LZF5MGjrER z#toOo@b-Hz)6sag`mcvEy0~e6+jQ!!jUxu@zfg?< zPC}x^e@Q++=kcte7N=j`MHuW7qjKUicp5{pwp~2|FOKcGpa-s)h&THiG3AJwVlbGU zEXPQ{+~M$VlVisdl*^Oy<}bmbwXt7eU+_KDDj|J=ACbu}cR1+{ypqlJb<0H>2mSB;N}z3@?_HgvXnmc5{B; zqm~g5M+xwksDUyd4GRnE55>eSn6%~Swg4rh`3u;0&ucurlnf$!6|$}Ek>L1O^jCqE zEW9Jm{G-UZF{-y*n;EX-{tx1TRO~H1Gs0DOV>c2!XUMClu;h1JM`~yc1PJb*u2BLb z#mL)_q>Z|l?S8hLD4hU5k&y>PPe)d0x2s^!ZXq~Vw*-IN_Tz=uX0OYQEQIH zeB|*dDi3JnM$FrJH^PIX7$F#DkGat8Gg5x5bmn3O2ycapO;B zH1yK&uaN8&#UGT4k(98~{khSn4C3{JlZlVzT5eiKJ7+G251xgE_C}{NY>>%6=^xeC z;Y6k+N-xvl|Gh_7J2T(`F2iShh=$GLbS$*S*okg5$Y#Wm+6lj%tfPz=gQ#5J;!`rO zlJXcu2NUuHVG~Ls<$ZZcwG?~Lcm!XG?BL;!yHzw;{N<8Id(c2H2M{u;1v1v3hG_kd z3xK|7zT*>NZ~A#JNE1IEi8V%nm)AJ+ic*m_*b0r-1&g^>8sT`3A35&l{eCfTV=pl%MLT+D zk+r_AbwSVU?dQ^NIRUYlreI+ZkgwOWv#{Bn-->kQ5|8rmIj{=M%!?<#$>~!(d5yIj zlf#iSi{teP|4WA=t#7T*Ap4l`MY_8i+^n3hFS3DKBvE#8P&uij^FQLz>U-Ie33WLA z2;Fu(Jfwpg=<(@O`NUP_*MN=jRnN?zuK_hUy5GaOElN>8=44e!iNMVD=B@IP(4xBT zFgPH9=^uq1?ETR#R!;P@KXk^+CYtT@v_Lv%o z&4IA{8|W@^sKPt3++fTDucIQs7kbV+g`DfWU{#cpnbs6gQx6#5cc^HZ>HD`je3gx#F$;;5@F?ZT6fd;& z)nU3usMNr)N?uH99oFi;0a`YQ?JTwRAgr7@B+!k;3wUb5}m8t3pG zp8V!DeE$~d@}LZ(V^+#JMEQz+c9Ie(_Z2r-MT8B1v0P zl!w4FSVcRpkkD^bww)u?5ARPZ{#z9Vys#cRDV>udWi9_uk~U{{bZN=SI*19Da1IGl zjo!ga3P1^>zU<2QyR&DxnBBlb?MvK(pV~5ahS0u}?$LI$98FMoLoz+!GeXW=(R2m< z9jxs}1uHLz>M0}VWZE}7^FsVEz_i1pUAPi3Tj1$p+G};V;XOLPV@dNZWyE#6MZfI_ za?E@XfIwO3iQ?FH5^V>0T=oj9kuF@pK54PvAC`%lh@DC;yJOY95WY-F5o^z6*6)7` zCF=Jc(u^Z2ZC(|oqpdPKp?}K%unb3aaI+g)ft=jXO+5Sw+c`XJ{w8>XqVZ2mCa~=% z>fo#D11_$LlF*xwywA2IBPr$_^HrN1hguFlH`7-bTjk0h4a+{h>+7#VnG35ikNiEe z{QaJD{W?$Jn@=m_;f%0H0koOazOR4&>``hXdr`HUgqW|BiKF!_LoIT7N{s6T7j%rv zVvpoKNl#Cp#kgc5-4h53ciWR5l(^}6C+vPxndN&-oUxCestOwc-9L;|%?GF~;NANV zGLwF8^_m5}Cetm<%bQ?35b;|W!*~ZT+RSUm1AH1;>$)^#9aD?QqI+VZV~d*ZcVdACo7F&OxsoJ;k0rE)WpEoj>JJft#U)<&6fQbfT*65kEsor5{;g- zk`Goz-d&Xs@IdQ+9B%`ouXd)*nRaR|*UKyTerKI`wqEu}gCB9`y>k5I5`?%Za^-2O zw)YNZ+KOB=D5~ucc64o4m%x9rFa;AGCME@|*$O*jt5E~p+IQjE_)O3(LFXA&-6)-# z8DGzk?F|$Top^)yPxVTx3&s`m=lJxv*%G-T@7U3tc&eUI(Q{Kq`QM0C?D&d|x-HA$+BfQ^jMATPQBswteLhYnQ^&)+{j0bw zVT)@%vYZ56A5<6DzN{`beTc&eC3_ zJ_~={)ZLzRXyifNbmO>T+=;%^8Y^PHsYP~z1hUfeboGL0vYJ*_eb=e z-j#LlPlZvV$3{!Tz6n>%Xg(9urN&G6dz8v=X(lmo_fJFecbS?7HjA_y*nF+Y=qMi! zM|Vt@k3q()e*RUVE;z&=`Zq=``jL?$6ocZ=1Rf0&cg!Wc zm2w-@c;p2|RJ$KavwU`UK$UvaHCLa2>-UBK7{Y$5pB0Kk(CuHXGw7x96|s4?>hPP9 zy`CXb!O>Xt`-k5&EgqKh>{cPawGbBX!DL3J{u9zepD}}I2eB$LdP>9gl~-BmYez5E z+7dR}&%qjD>^Elyml|0rPd4}n#^1aH3=^2$+Opc;R(b4 z1IFe0(;;{{^15!=zqIE?4k0hw7R)6wL(@K5D(xIox|8}#diSA7Xes|vxA{cG z(?#W~zy)}{-AA~A$)O7xBEA?Y;v=2g>23VydFmjN>~=(`EryB2BA`({*X`=Is4Ff}=`RmPZE; zV%?P>h%69>`^vq#PE6e}0hbKDCi9y5_*P>bI{%wq-XvC>UkKoEKsXng z)mt(f;PS&3Lq3B*daEj1m#xf>6$i5KD5%nP8xR@u)G=UI_3Jx8PO5(?&HeV>FvQbe zR3Ie9EGL7E(9F!GfAVWu-w4^>f>`u$Y$ay2RBe`bsZDGN7wWY*9!~$-z^ZzM`66ue zve9fHQ%h!|yF;qK4u#(p$Git#hH01k-n zFfPsDG~xk}-uw||a@xYph_}k+nZ%jro7n?QPWsu7rf8bZ_)h_@U%HAq?-#^Op6hyS z!`i;jj1x!cgGf)$=<$IvWI98&gx{=rjz@OCUXmDA0AB0C4wl4sBB005o14Gmz7FUmE3VZ_t|M#z*7tKYe%C zU#_Dj!qa){GUQ!nt#tIm$ih1A7!CTgxu$pj?Hm0~AzLUm zXyP*kbqwHLKgy7Ed_Fffd?h!ufFO%#lX)&nS?hq^vkE+fG}K`Fx(6Z5%)8n(9*P}7R`hcBPI8Mg=OY+R0x$k}-U>_}KK^i{j5_qE2P>AEw?viF<3k?Qtj?kCWA?P`HR7o2 zBGXn*wrT?2VSdGeLND(7N0SSxnO334oMvqPv^F1UDGJRfv_vZE%z3+tQtX1_> zRsEy0W2pW>VsMcEPCvfJ9d|Kt*uU!&n!i-0cqK_jwIVy`O8b~y1EUeQyRx;ODnj>V z4fMk<=*$@m`kaz@Qo-X#57k0zIM+*H7V|$=1*H1eP`fL!Zgc1zr{H8`R2Zc(VzSr$jarV0} zF$xA(T#pKy&KC~D4cg;RO#=`lhB1c7i(58W(n~*FX(hd6RnVQ0l23^blgyCMGt4RI z7-7P!?0KZU-_8skQ(JqPvS-hG&@wE z)z89CGqwraR!Tw`>k||I4e!*@=98j5{7GqK%t=kbuKgFwUnmpWhv}7GIM2lF1X0 z_eW_{oV44+pQcS0dfHp_GAh(PYaPqVkCsBb9{Q!#&pK=WPTsx)w1I#5sxhaX;NzL( z_DmY?>FvON4D!<(ok6@Ua;hXfhrE|v52P@>lI6bB~k%BVr<4-1nH{icYs01u9d?XP3rd!|o? z)6V4!amQBwi>$MLio%WC_3qN$B`pm~O2e{*bSmAA5~9S?9nxLWlG5EREwO;o-OU0^ z=i&R#IWzCf`4^s_KJ(o7eO-kMeYnEyxp{LhDK_+kOrox2^H~yC&c16Tvow6US&$TJ z9+NFGW&c9At#xHWo*uo_i`GS^mWfS>Pzz1A#R@adsrd7qJYWwcGr>fhdlC!66*+1B z=aoZ+6yk2{qjsmlPOT3tV)e;~D!}TN{=WsC5zE>0QB6Td!|W_V8X4vs-N_7f8Fu85 zV1e!gmv&hqI(GRuN2apwll^x*i-M{rR2H4+w1#&L&wNUxTAQ2OF#=UV^3o`z{bHs( zsO6+;)m!clQd-GOSB3sLI+cdCFJQa*vrQK1yoEYgr)gG}(berPt)8D>jyPg8R&#he zH#=5?*X7|sB58KK{;*GJh0AZ;l{Tfa%JKuUDFu(Xc{Jd_BQ}^3Ia)8d`(k>5Fi4rq zr5Rs>V2$u`km7N^N|Pj0$u*)j!qq9sDRBgJFr4y9DC0tOe5Kvif6u_Ty$jZ%Ox>qL z%=AgdBIqQRagf=(SS?5GtPyaU;N8+pt|fg1C--x~v5)tLcH%zuSH5TkNH}MxBJ3qP|p=&aj}}@1dF$Jg7UB zgwn$PdqR{x()mNr3wd4`qNU0T^dq$@5S`@SHgS#v_&Sy1nz~&Vi?G&5x9^5(w%p zCLcq?F!D1Xbyfe|;|NOL?hoXfR7(K)(e0*>;U@{)^jN<^JKtR<0<5!91I;5)EqAKB zD?zr$Swuu9o+mFD-K1Bq%#bbyX>)y=?mYVVZwwI*{`X*Ye}sSkr;mZgU~t`Jyk0{C zYu5=9eSoPxd6?d<1|G*rR&37fBOVPR##^d4AV7@h3e$vbcRO|#{V7vKi}%+T+j>kb zZ?_+vo*G^E5&Yt=JrWDwlrr$CA+}SjwHl?LdM3L5roSX_gro|-h&0DvAg;E(iS^Md zw<3X?HE?Q~GC6^3ytnS@8!flRhOS z+9zNyl>}$;3dG0%%;1HRI&gIl;(mxlLmi%zIot9^mfQG45iyt9P3;W&i%2&mwTSwS zLf7}BN?O9L2MlvxX%nriQ2^Z=2|JRhH-go2%SGv=TP|jL&8WmDI*4=|3knqf_*TsE zJ*g_ZBD%6bXzvR0$0)S8kNq}UV+vv7aw-JeFF!%1-wq1 z@ppfT-T}7O?BAzxu{Pam1IcMKv?g>4<1ET4Ej43tR&ip)=Pr49U=^(B;n;XwpQAK8 zRin1Hot`{q-f15|XsrhSAlOAoUoCI@z2Msh<-C4Bx*r9114|mOVruGl2Pn3O?)eF5a1U>_X6F1dCB%UM^cP(`jdbq-IV< z4}pNOfH}6_*E2_I>~{};6|x(7!S8%+KLs8_<$q5+gqKpIFOAqe7Do7EaQ{R4MONL} zX`IZn^`M+;Z+bTq!}wA1j_3YtMQ@M#SNakvva65O2H zeLOrDqjU9{d00+jy_$YU^2OrM|32S*wl`zmm%*iGe@f*Ag#_+?wzR6z9L+D~&E3+O zne2JqeXgErSQ=<^RL^~nQk!#I{QOPP57S4wnmW`5G>9(3ifeL#LRKpGb18?NKCB#SbF!hq?KYR0oewLLm;(@By&r;8F8SIu?E_fC@mNi=>f? zL%PQo;NAmwUM|YlO#Ycmay2N)5)LFP`TxIVZ% zH*ps_$^FJ~^8<9$4Z<+mL^^i4%pBbZ%XvzFTB`%B5fae49C$0xA!GEEu4u8GYlTR{3=d!xmdFYG9`K~b!ol! zH+Qyki6#B;Th!-GZ3h~Q>sIX;xZsNV!v zBB4mO=$2PQsYHEAEo5lt`uG?lhtx1`0P5ciyj09pfq5)EJZAxdnPy7< zBpHbiksfoxik1^sErCx*VwOs^6gFt^`K4XI>VY?~Iqb0_?{{UGazUUeHKkNB#CarW zs*4q%v$N~^C*ZRqZw>5Y0C%aSUV`r8nQ(36pid0rhkU-HZO8N(ai%gLZsnA&KpIbbLrIl~JCvhy@oOB&wli1(YVfq^X_$SSnX{htKj?<=L}*Smw(< z2FYY{D0D06{`dd&@LV#TGN|D-B>_B#BG!LRTL8qHWZQY5Rsqx1&tJ=|mXUx9b)Twj;`@>KosEU9Lc+GW+|4)k2u2u#3FlBYtm%%er+ z?wI+5&jRgzJ;QVH=uXw&#ZCZd&=9C) zw0z3G+x3fbFt@j~;chbY1_OmG?EzKRg!bHkaG)}mdIt+t?mgOX>bd>PCNhOoKE*45 zkOXvFwCuBeV`Gq9xv>@rl!0R;qWEgLVfd$SnTY3tNX}DB15KDcc7mh)@8MLEh5OAb zNiknhu&3IlSQg3JpBhAyqY_^852@~Y-m=mG+V+xNx5x(ZYa)q|i!m)qpL@ZX)2&2p zpFQ;rgp`Te7}TU6M(L+w z4$ykp;ZoPq&HUZ=f!BQ{9;xUZm+H$|}_vEumm<4!VGQ&WJdMK(F3G z$-_9`yM@vZ!Sy8lp(|2Mhr2FC&b zo}eng9s#Hdd2*vimsk(^ZslmO;3Q87yxrVsWn2>c#3fyYyI;@pyQ&C~be zD1vvH8uz}Uem`IUe~fm%s<@ucGI}H$7OhUF>v7#QC11y#4dpRtOhxz8(4^~8uz&wP zmUN@+g-73(PWCTm$prL6?BgwtBm;(<)hQ?=RRmB^|8YzCb+Z-ZQ82wl#gQafJZysOD{agk9SkB!rRS`54{EX}W_ zG6}+i1Wnwbe(fJ*IhhuPG7mwzYSme`X!eidcE3cOzH+WHRS?9n;pU+`41EqoxJmjo zT)GK*x%vs%*%b=#$0V}fzA17-Icl2!Lvr%3t^++7?h>XVN03=wXxp1ZGhwN^rQ+=;a({rK-3@F`t=yZ1M13z4NQBvpB=<}?)q3^9OPum-n zcK+q$mW}S7M1PSjO^`9&qaUF{y2MP_wdu7i^8zDW%GbLdR_k(Dk26F&7_^=C3dGNM zt2kPCFs76j-@=;^pb4Z_nIMo?H8>U+ZAZi+1b@qxIBsP`NJ#^`li+~? zJy+=g?G{km8{qLE=O_OFqza?%^(47|>1TdlrkdbGpc|xLP6hp-Dc?+D$S44QkBxAr z^A~bEkypSt`g{qRT&*!^s#LnJAmP}>0^u*kKif(|y_Y&iDgd0B7HZ^xZ2{1$C$WX*T)gp$qS)uf40Cx=u$P9TpteDuzc5(O04 zrSNb4VaJp->AR>>FTT>dW_B3^G2sY-^P1w%t7S>TW@r`?1w1bw>$RqKA7(8~Qu}Y& zD`p!G_~<;w*edqVR`J?^vYrpG1NvjPe(hMk7J={q=oiCTPJ6j2=K3!vzdB^1g>l$h z_^kR`yZK(**?lR;(F(HdA2kY7Rvts4du+9Tsbmf@DDDnk% z&?)A;1FS$%x_Zfy7aYVT@MuMBxjHW*9)5nDa!x-wNFKS`)`=g-`*gZB%y;#&5j{HW zdPsfMlKsN_z7{(cxhY8sTCUT94yrnZlDN> z#r<>L5H0`3u()PBKLH@o@SH58*53MDW2wpZ9!E&E~5jrs7*?JgCa z6%g#uiv%BXA%fl5~<`-bw2(}t0T*FS=?NUo_iFXBClMR5})Om*RC$&bTdvD|m z8lC=tQfVXTja*9|CG+C&;|uE%?(*DWvx}U~BH4=n^MmH|X+g)s>H`_nVSQaHU0&GQ z&~(=;!*rK@GBsNw+ct50^=?XACgB6$UyErbP}3)hi1T8zyxH_JiEIagYViC!I?tI| z6vzcg43*h)49Bvveli6)uS)#3K+FElI8lz&z5XJDpD>B7DP8EEZPSK~K8^I5kWs3?^S#!*MKQSU$)XK}Yht2PYZ?Twn`&b2 z|1zFmZk+rforL3%2y&D0GTYnwc*a6Cos#W+PH}hwW~Z(e>|>kwj(XU2^%|O~hJFccCF!j~!zSRTn zQ6@i3zDO`^3wMtdT`KY)-5koVEBR?ezbwPRHV7tHpz=Y~*^N)Al^XAJ8!jmn++-x8 zMG_?Z{tdphSNGB}^(6(DnS*39+UiYo!{eS+nL4OsWbeD<{K05agV=4RmMbICx^-ul z<;dT}nY)e1PCLm(A@|Pf6>m&;>NWl|7PNnxvnP86uf8F_3Uvh&K}0$jcun5M9FE!> zunV)IE~z;(Jo|0N(?$qQ>wggAKhW((*X)Jwpvd=!I7Vx2v z!;0|B-}Gq;j<&0i2C++T#f?av2t%Q#YVS<6hS2h&C=E|9Mv)oYC3(x&1b{XVV~oi| z4zc3?H%8$mOjEF_*vsp^z44v#6sYz4Fg~!r+tb$Cen!n#rAg6|aNb0KZ87cT<@OZi zU)S?3f_iEI;#JQ3nlT&7d?zD31x!Xxm8kcfwVd$)Go8~V(+ZB|rJ}{VIp#K$(Ylj6 zk@h!jLAwA@BWr{e$7i|ga-^`VF#H4*d!}p0ErTDK&NBX&TEH3FwTc}rlWvJ^kS-pY z{S(<&kQhuLeDfESOC&qfVsu4Y$!k<)z7cgG`R+$>`4!caiNGeH2J00eO zcR!pqaYiW_cK1u-67ozVRaPw!>cqlxj`?MvcIRF^v-xk=?$GV=c$j@(u_T`gDE{Nh zZqN)plPJY|`4a?7^*j9URWvx}Z(7`lWrQjo2cN=ItOV>(wb+J)ZhYUXkZ zfSEkSk(>iD!!%No6 zsxUgbq|`r?KNfr*JXb=K7$|&{TC+I=xd8brh9}Zb-D2xQ0FBiI0|db6IP3ByP8wn0Z6>6&$0g$h8qHujand z4jA1me?^ZWrJC-Y6}3NqkUecQ`l;lM z;_mwS3zqtq|3Nlkk(D1n62h4umqa_%mLwd$_ulkQ2#dIg!jGPAJb06b5#10gt>_)e z#GM{(?#GP{uQThDk;9gG{p1*uTr)uE%-Ff8tMg z-(;;HUvq{uRdt>>^9xSj>NK*iEk*yZm=UBB4rmjlbih5W(G`w!*}3Tp5N-FzI9)tM zGOMz!;mKA)I>y7e01Jr_bxJrv06%qepr00OU$LVM@Z6Vm-Txk7u{l2b9=ljVgjTKq z@ynbRas9dxpIQGh`BHp^oEn+ngA7H=HA&ZUDrRSNr4eI*Ob16lFLw?3=G8mS#F$ho z?3<~usD_wc8uNiSFHq7HQ3$D8{Hg4c+V_5o#6E78uYbGRhz}>=$&nFx-;!B(JQi=X zK3L>f-1+cZpdb=|Nhyq(LG@;V&&EFgP#&;%mdQM^3AyX*^b9~E7e!*>!8IWiLzrEL zH)#zWavPf$u;k+NnA1)mxG1({Y_fmQOo=y;2l4@woh$nIpTMlmIq&s=S7;3{ej0}MT*r@?NzD#f81k{c3R6IffmY(0?~W=W zLw~?keUbASqIEEvR_`Mgb~j)QovG}37z@MA6JrkFYBSnK#uiw$JaSg24 z1g(eW0dKDS0bD)V2KV$zUfWpNO-HSti+ z4`bCOE-@3`S?V`^Jp02MTGPn4g2WDnTwZ$s&W#O0{zZK_OpF0C_NEY=tY1 z9}g?R@1a)3`+_o~%gc4~+nZSrN|;zZiag%0 z(7s`zQ@WLjjj)}AXt;xw=kHf2eO1Tcgd0y^vLnR1jqW)2ZFFy$x&9mdzZ_9(yFFxT z8+}mNmJFJkdrfP-y&L#;bY^$gUV0ix%FJA$+UVW_x{kj|aXVMB9W!4}->j;aIzqto zRSXVZ)p@LC+wX)99-VjHH9?!prbQNCVcI%>``lk?2(SD8yk2Ghu$DviPxeky=SyM% z+5XIYLOt1uu_k}9fws6S%vLd_Trp}e8xJ*23W?$(rBB^4+tR@~iflG{j^o+qWiD0Z zO8rA8Vb1(>^fZ-MANv`{GXNO^oy4oVr+p1BrV;k}8o3I+wh7a}`3c$+C#WvD&Asr^ zLM&XQ!nLM&qH6p_@R&;zNKrEv%U0<-s5dMu6fb_3vewio%)|eF)Eq3S!v)67)*D}3 zE@LI@rKFG+ZvI=G%x95uS}09Rq`pS!PVHg>63sv111{&-0Vtao{)Sya2+WeO<4v@1 zWx!uY(7~hgMI1ZN-$d`>x__>+&)IKVc{h>MvL(zJ(2p*dUZ1eRbqJHt#q?47T|^>;uf61H`Cwk3YM{XVb6&gvWYh-)&K`svojA?^G!t4XxjRA69&_4 z1?TsDo^PNY(1B2tblMK@VF4M$@|$j6KSn&bwrK|KahqN8n99uKsPjx7vRt3Vmv85c zP5hWl`;xIVn(sH=o%ZI2mbpzD%c6LmR$jWTub1!t-S%yN=y(6wHOQW%`Rcmvh3ADL z@nIy^r2fy<@uN%lzzbP(iChsnX0k284pr7_E`T+68f$eRlU~CBZQXSfw)jP;%E5V@-#riNQ+o*H9k>Z>>Y$)T7jTlJ*W<1tmr9c9Zo@FrU@Q zLna~Y9+6QTT7XL}HLCi1KoI-or=55P3%I!+4%A%u&)Ktg;rX5aAmt=X$fv?jU1nMu zIGulDWSN5B4b!Zq<3qeXHIl!D&m$H>_(=?ZzgSurqeE{CX@3Nh#;Q%lu((gN8fT5^ zP-QPGV$QwY%R)Gmq;XRFI2Z|0uDhPczuj`j#~{U*hHFfjhWL815FqDh>bH`z8*VM+ zT)waAd)|SUZ?aVB>$z^_U&>T9>iB-y#%WnpH6FtUDL|IvMAWBi@4sr^($9j0IR|sZ z>m?0t8>L^bXDzm|%wRFno~uDw2{1!F9tIPM9-+BPXW!PD48y2{F;6{D@|)aA+@G@@ z!u-~B;;XO&CK75QN@;7OAJo=I#Ga9)CACOq(4O33=|rjjL$dq-2#QT#ypv6HioFT! zv01B(KX4N)fP&8{Z3-6PoPSv$jJQ&6YqDYnspqo*g|Dr`NUt9Q`LotUO%?kj zu|r<{{TV;@%w1Yr18ZuW9!^u@{a~J}j3uu|K_3iZvA|BthRC-H^$JPuKm*i={*1{1 z-;E!U&Q)!bvj>m${@9?x2T=-On_)%nqp3<<`A89gjr4~v2+xEi5q zhWlHXPf}2k*H-m$@`J&ooC=wu^kGn`?c!{Y9k~U(Vw1kU+Q0mXmXmIdQk#GAyV;N6 zUEk>Ehmo9;;*5?5q-zU4L{lXzyci%J(+T!ID+Iy9`V-ALVs-n+jj-(~N&|604enG>ft!{Jp< z$c;3tgar&|4+XAEf)qQokaR7E)E#XJ7L(Jcfj_bFmWJA>@37;7&lF+Z<4_-e1%RJu z?n;)xC@odDP>@~HT2e^?Ic_~;n(-*R6Lwp5B^uPTh6=GjL`DcejCuXIWSeTkg@qT-(-Xf7;3r(;} z=FV}yb~yCBq?OHPp{^F;3T=DAzfxB{|47z8UXpEec3&02%f{_~-OVQCj@9BPga(uC zCdn>Xx08O)q}+b!6s2YRHaeTjf8P$d2v7N4S&rr5MyGElC+VGn?%uYG-D0^fpSUow z|JPeyDtEca9s}C&u4e=B{c_h!^FJZpe)+J@PIs0)h39pNCyhUDN`)0rtNQ+ddR+Qq z+$Measf%gM?xTfG+x*sBgcGR=oC0UC#}rTgHK!ZemUl*Y=BiChqXD?QfIm99@%8t) zuG_NM1% z*axO2s53mTO>Dplp=yiIlM+oIm?+zv(~R7;fu5uM^Ssh^24IkSRA;a%WTMX4bY6&C z3?#}jA35ojGLyVk^I6}e;r$gXB~(yCmxi(~{CZ_M;hlgN!q(K(!D~CY?`Ium>*>`ll6e?W&x7oyCK|an$d)>_vr^(t1 zdG8_8_Mg$W8RkEppSGst<4w;Bhn!A4R{9N8Uv^uAxxMgaUk*EXg(F97r1SiQ&jIusL-0HVHoU=g@q z^SEmcxhqYlcq~$QY+6f%PX>4mgL6uh9-!qo{=XQk5lCj^_nklWa{_f3zpUc<3rVu< zB(c~aGuzLNS@hV>pmjf%t>-F>U=!?|$xr5w2k}JvxMmR)55^@l^RYG- zDx-#}gUUXSjF+XGIKy%rlplVx_0AO1;gqc*R{ zGu2e`L5_L-3HRuv)T!m_xD6_|3!a)cw>w^juARwM=+osX2dV|%)j!jT}RFxQ6M%h{ULf+qhs_^87nHGe;v_5)AiejMX;~FX5i$(&!vsRf6(u^bJ;eu*PO>ghx2~d zsoET0=YRT$Gd20$-sSSsg3VzMyU)XofDXBaFL)dQuNrSsibO=)StL%a*RO;Pl5*N{ z@jJ%Q@O`EV5_5E5%oX`sAVsT0LwmsF2)Kr^WU?J{fdEa;ViD`jk^#|_XfoTDYOu4r zUPxglopjGnA%_g>AM3KuzyEg?gVAr1#&fTLTFhN$q&L(2H6wZia=F@QiK`gW zuV(4je{HKHtNDeintiF^y^nxjZc=QqA@0v&+B(?6$?%LrtzJSvHUbezpYoe;re7ia zJfMG`vrj$Y=rFE!+URL!;p(`lsCTe~A_II~;d0Jo=Xcfe&+Ymz<&G?JuHZhI`7vqk z)ULP88b4XuUj;g*m93~Y#!~48VnSSEzhM%ahyfP*Wf_>n{#Wz^UP~3+B9jSk>Zct_ zN>RU=S4s8gpE@hrT&8~B%rOthIUJ2gn@%5loOm4iT-4ma);n|*uUmF_;zjnGUYN%O zfOf$54o?&T{u(xx-apejM}9VMbi-oJM>Oy~;k%$u4i0 zUhTC<5N!1KMaPGr%ufW(K{T)oDZ3HjGOsSMH@)5Pph;;14KH--7H)J6EXwEa4RYPL z0T}bD4(D?m9yW^Iw?BR;$L$V?=R2CZqLHsm<;kdY#9}!+xu8$=zUQfp#4#dqL)M9Q zOz_OXdY5yj;V4u*91E_!8~*qg;L^@GJ|2=`k4V_5%&pcO?=8r;hpY3p&g>} z9LuSj$M`W`SSN6fb3&~A(pP-L0Tf|G5Rj7jw0^Bvu`YIUpvCg4F~etPL6U|{ZHG242A2)O zv-Qote4j|b)$YFX^i60mr;gOU^7EO%8>q&kb(*)!cUN5hNMrAI)Q>sx+pC_4bk>&)0j?~ZmAG}!XqkG-u{ z?k7CFbq+vC>71wG$dp#MIx^j8G@EqWtjS$q*2RSUS;^^3|AqPb32#NN`;MI{n+&UQ z*B6t7Fwy^x*B|UvKaw-TpiUETj-Di!D+anYMGpP`1tnxAT8Zk)$K1a^mwAt{R=MzP zgS;eT9H}5FV2l|wLifgGI9JKp+SHLn75J3{;t2`5U@_PJ<5Et9ugE&|-T9SOl~e?l zEZ1V&qyZ+MMOu9c`x2mrTB9D$#Kvu{Wt6uQkbQ7Gb zP>|^*PEtiQsBmN?nfE6BcT4OD#qZU?S{pAfHxz;BQg%f>+0jZ0pCLpKaQWoTw{C>2 zsb4m#xrrzP1<)_a!cy6v3|q1`5m@iQRL7?z@ESmiL3n{dif!qAk#fQYtV6Ls*c-*^ zV`1%JmqUL8Oj_;b9#EK=(>e);MfDri9m+CHpoIjbh=D+Jo`V_^Hf6~`znv68iu+FCQ#4<@MAc4o#Yf*-Blo-W1< z*G%-X?su~Rl*9yqx+xoLFD`69(b;b-G5U32D~GaFzVxSuNF@*sj=^_wHNTq~B8sjt z?c+N5eVM&%EB*P}I*q8`TTGc<^BCBiMOi(MNirE0g1`1WZUfc92O)Z3GXD zNY){X0&YC2iI>4delNhAs(mUV*Vb=x~G9{hdd#O2bIRTCEz<;ZaF33`V~K!$`X6kP+2` z3cn7t6L2?%e}|wtnc)Y|zZ0UYf9~s(0@&?Ge$9D5tnt~Ob(6^3{=BXR#}{pf0P<*f zguu--=X5e2YW8QT)^BVaQTye$Za7*|(KB;3!mjPE6Kc5JGQv0knCHT!;k zJ*XEnjh@u@yw7qJAZXlBRC(e4_XR5>7>hT5S>2LuFK3#nx$>{r8);z^cGKN!HfY7=}-Dl?ELjTcxT< z{4iDdw^T>`=he63l(Mp+4WC0UFOO?{?s127elik_ZBkTdbUkc~mcHh??>e`mgumNfiB2acE?O-YC(wTj)qUGfwv#2kd#Z0jGA2 zH=Tg{I(^WtH#wFS>=xQ6)#jxwIF8nitR*K4{c)OI>w}=quc6?kWd@V>qqWvj^=UpY zhoSejL^Ce?+((oN_AbkGGpsU2sAvvr_XzE`{v)Mx=DRFK0#-RDGtMYKlKq@y4|iW) zsxuUgv^L4 zF>8#LP5tps&PHn8JxGjNxQ*%hxGGBCcI4M`Pr%I9Tei1-F1YkakVpEE?x5qfIFAbx z=5F!vQVX^&?!%2xHBl6!Ycny{OX07tuyDJ%9k1Xst7xBPl$rO51S6RrSL3}<4!=-id2rgoT2p5v=a>6R8aYPX$mOF}K~Eaf$)h>eaL>M(@JA#<7fG_pD#v)$B`R~( zr;aW{J0oHapFVZ2siMAuF{7syQb&`9nH8{|&UCQszV#wKg70s@H(yo2#Y^<;=#}F~ zzn9*!u#>(@TJq}Jp9NP)w^nm;D!gH%#*9UJh)hR6-huln((QfgX`_~4(Pcq=>`FsK z`m36Wrk6}#tx&b6=hDcr(`wowB-)^QH8(R=S&fThp7}fo@nen$8y+rmm)=-EqpPD+ zKx>W#%;wUZxD=*AU;!UQg;0u` z60hMPc%DGVp(_ts2&>V@S_{wkXTZTy` z<~KKA4$apSKIvB3X%@)o#kSI40G+M7MbK&ug#}|BUfd6FC5}%zs3We6VX1J6FXlZ6 z&?px=H=aK@6&b(Fe+@SsrmBj*8T42tvBJOz8)efo`vT?Zi|?U9K2kde^rbL_dT5+V%n+&PKI>V?w#Vo&OAQ(Ym=2cDTys zd7ZLYnFa(qRy8+L2%A@4Eq&j#tKY1_yj*q9&=}Pp7U62&F`3W22x~FWsW_}?`mjoJ zj=JVmNT{<^{EpY<{q=~GMtEqPWPs#(Gv?r1CXIkc_t5pSv(oLD&4UBZ7+tP4mBybD zz$fDF8zY503HCY&IUu)7Hk7)R`C8)wvk1*Z^TaC!5wupEZztinjYR#=lf_4x9PdK- zp{S(*I~T^!z77BLzpg$}G0HIXk|w9V@CONaJ;HwtnN?b!=+}+j2_Nh+`)j!wSGDs3T z$+mYt81Rw^hi#J4i6=W5P6%2PR&UB(6DgqhL$J(f&IL|(NPJ@Ykl2-aKuFwTxEFGQ zud9(x@qAi3q{ERxc`eF*3@NvLnXc^UWT`c367}gPs&*b1lQ**z@MUO(=x|m@c(4vg z;o6ppS0rUu+PXoIX`(4yO9;c;itOkepaXCnH!v)!EiT;3aD-R~=sjZsr;vPio}|gj zD-8Y_X3n~<{=%~2?_i*HOZNe{{pHS3Qx1z3Z4p48DC{1=E$V^BBJ}}V5+*vbrg>}c ziPNg5Spq{CCAf>1ST+|u*WzIKRP~2X9Kj@iuDNzd+K9YLJ_5Oe6E;-N3Hl!mZo&Z- za7|uKsNb2Wdo6IbRPUO~6o<^45l{?BqQ4;b%>%7!b000@c0k|u-xwwr>OMcTC)vjv74Rd`qa)K`tCu!yK5$e zbv-~Ot0Luk^xNDpK$qbH2mf)&{+;&R+S`gzwwE>_5lWW_X}F|c)55=0vHa?MBX=lY ziddI|%O93h-^+Oa3tGJ(P_a+P@ytS|ukX$x%j`8Dh#Na1p62SpqNoP>}#=jl`W2umz%*~Bs~4iry$RrUFHwnTwyB^NU9fU|4GH&blsCIr zb4KX3io~pT$Njh@WD+|rXW$0gYg!o(=c$q}o@U8>m$Xkk2XgKRT2$nl!CqLsi1-!T58hi%_-D@+na`r7SA4Q&aArhaZWoi zPCCR1dK$$l^QxB%A)&`cGB*`BW-cFYU~Co69?MeXnGG*g8c_7f2QtAwStWoVsCx5u z{!*>0nxBbX^YaNTCW7w$ECcQRL&U@KP5W#Txyb8hhr=_5nd>cvTUB^v7p=J8eC5-H zxTtTl+8cNak#wWTP`Urht%5uE@p(_p{ukoAfrIfW+<$Mwx&u74AKll+eV z_E;xH{W9lrOC&0$mye8F{0yE|U)bK2(INF4CCvSky01ou+kH0?WnEeR;NtHlWZg`j z*V)59;kjJ0rk;Syea4TgZbl;4|1J@Y<+fuDB$}5>hf|#@B~_UtStB+Mob;qyf~$=u z-)UBAOTKBD3|@n{30ARoc^GHRH8($OL{d!<=}}`JS-#JR&x?LM(3#1#jAYi*aZ@l9 zst8tN!YToIUE4|2+wQk=5}B~+X$r_3ZmI=W6Qm%RA6T@s`59lmjDWV)eL0pWq{qwK_Olyz_uEO7`%I8zR=aKbgYlleNhv5cvOn@ z&HQ=X1UROq`UWKh3MocU#?emAztOb9N#<}h!O&D)1y&5A_@p`i{CF`L(ioQC`(!NW z-JhOPRDNIB^su|9b$8PI^5I+CVvR)PlcXEhqH*_8U_{IU`xmuXZ+lE4-rP8J@0%}| zN90^ya)i=2j2W~KeCjsxx;)YW9p#aC12^RuZTIw?TF?^Mi8E9wCrT@>ou-4o9}U zgN~-nzUWR;Vx{_BMh?~AdhGaqcZ-fmZ)?-z;}V-sJ5CC3^Vkcy<(zpg5|e-wWQ4RG26PaYD~#=DbUEWs14-2F&4Crw~S&WeLWSg1mpjBi4_IRCJ>8Tqupa}Qhre;4vAgKjRsI;`;~KR&HG5^RfYc#RcF~0XSgow z8Qh)V4#C}>gy5D0cNi=Q?hb={@BqQx-CcsaySuv&a%Sz?XI1SV@P2ygt?KH#yDz!p zJz7Rnu>;Euva+j4ZTVYcBm6i!;3Zs4ZB8|n>U?E7Y*nMftOp=<^sd`4)ELjmL&hQs zCejh6_k0Y=<=NeCJb{%SfR;rrNoP}}N(Cd$+;ulLcIP0Ccg}NV@_6DxER|ukDMy}x z+@T)l_dxeH{Ho$UuLu>IL}V~wwm2`p8@DcUxhjV{lwmw&Lg0|tv(-q?ws?NS7BUEb z+z!iue9>(lo~U4CP6LQzKpkLU2h!f%?r!fC5#rnw#^=qyg0P$9*>%KOYy@Beux8Jy z@f+;{)_8IgU_P4*-iQz$sp=;64<(BV(3kOv)tnc6?~r5cSN zfSHTY7EA9pNfaR;Gd!UBN|?Budwt)oFW2Q+9?#0^JD^m-OqL(o5qWL!h(fGWAw3>4 zBFbBRmg1bmmHjcteRr9$9T&t@*TGje&qUb*eQ!r~qbIr2Z|YcJoEsGXk8txrTUGi8 zHM*MzJ2KCwVA7Kt`4ZjO_&OF6nJhKH>#;)+>x6p#eD>DETRDRRgrA&pfL~I+CRwYr z+Qj#TBIMu$r59kAEd#IDVo|P2w1K-xew#H*0h&SLY=LPS?ykYeIp7Cqm;Y61?y@tv zXt!`~z1JFtG63g>wOMEJlMXb)sUyfCpobm{Stq+Q&s_?RhkYN#>woEKieeb%eut}0~i^iT;4 z24zMc$vZa2o!)f5@1P@Zb-b^2IItqe$jIH6P=3m9W9j02Fl4&Yv${o(df)^8InPc3A%7%9%Bvnwpo{Zd;>-nzV=@6G3ap%Jp@3KUr;+c?sgO3lh=tvwV!)K5*23 z>)KAoNj_}08MTyPriJu+>qN%VLncE6a!Vk@4o_w%XO*yYUY>+NPW+|tby4}fF)yeTly#+{cpAZ73p3^WV?pd`RY->f zHYTIwQ~qEejuddZGR*nvk)$$g?-sbU&phvT@HhSa85N?LX#m~WKqn}UYtWpS(o9Hr zZ(2lM!8mO!z{S)FNM5@c(wI2XTS&0r^#M0+;(qkYaG$C@`SCcEX_@L5p2K%3Y5xi| zkI=Ty{_bK`+I}-`xKaoHj+r6wQ$_SGfo?pbrg(-z_rOuSZZ8A&{ta@mxcZXj?CgR# z`Epv;b*;&M;-g(-k>TF`8+EYb!ztq0g2e=??0Z<0ekT!zHcE_7!F$0o-KMgwjonKL zj`ed^d6WbVvc4UF#x+W3c){~<;|(*P(8L*SE~vs*a4>ath8Q5^+Sfa+0~9$owX*a z`_=Nv8@4hW0X)@{tzogf(b}gF2A6r-$&;LPVb^6g!)6BkpV}SS#KQL5#-6e+A10Qe zdlu6_%^h)iR-?fl4@0VRf;PF$zBza`rJw=6h5JWfvMWZ>0XNJEb9Fod(1D~6&On#! zN%PUVzUJGU1i-XXj(w(9Kzq+s`#BfY1Lvmr)0?cpMWXM&Xo?b?!<04ORQXW(Q$-C1 zdk3=6Koliqb1$Q!ed0K*2oAAD*?JiMh2mddoxO9*l`&RIZj=npRl?Axo)Y?$laTv@hMO)mVJx%?SB>M)vdC?V9>_vv}qVk)BN5& z8G5^*`CXj#cl2U!@kU_ph|W`j4!J=C&fn*!BLbm*ve zwzQt?IgY~F)PPpB<_;MgloR5YN8KHra936zw`lN?|$v1=5EIHyQZZaVpc$8ox@ z2o2?b2ot7W)C>rM!sNN9|NRm#xc*#z2AZAiKnmY}ewLRjn^dDFB+AgRKgw%jFfU+7I(P#F+Dgk<;B78{5~OdW@{? zMP9qE@74W?2Uwhf?2M{H-yii;;2&q#YMZyZ?gErh5Yv)Ua+EGGH}l7a10C3^CTPG1 z?Jv3)6+&ZCW<(TK+Z327g^@%RD3J|bpE=ktN}_9Lg>{34AHso7f>?t@&udhD^*h8L zXc%GZE{Y<9o&iqXSd4qi&3&_P#Q?nOZ6OOLXnX)1f?P-iA%gNYf@dXhRqtYu}x3 zd-Tc^j)5r_`}XC|ST|t@#p2OqfV*4P5mkXN&!ns@^hy%rZTT1f23_mNMM7=%gjlH)+Dxg|zI7e#@ zZvFb8Z`1I-QlmMB;m3>3J@eMdywF5Jft6<&ndI6L2cSe%77wY z`AzeErf%HR7y*G;N}$#7A<=5(;m@kcHPlZFE}pSFTTQ|3gc<|{{iuJO{ddtdJ8M4z zcXY@VxxFfWD$0m^E&L_-)C+S#^lnr#Y;Q?CDY81fcV!gXDnMN6rvMgn8ytGj>g8CN zF6N?`@;aLvw8k2~Qztaq;w0M_20?x|2cKt@wg80Y>*DH~F-uA`U`U{$;=lHmh0l#_ zx^`DP3i9%T(0x6OLX27-!Jj*szCUg-MJ=p7{%p|86L*7^wa4{NJveeqt2Mcjf1X{%;=={CNLDtOo&11^_xA0?oZb(Y&#f5`wM0hdAdwCSA&pbeb1x? zya3ZD&!+TnZX3Urg`j6+IZGisTCcu#EG;(g0Mg3Rh#Nk7EYUD$plqdup?9ViuVC*h z;85!ECw65+BYp(gO7IujBdw~XAYL*ED1-KFQ+$U zmW&QjkIuS{W@GrKN(+v%mZk#%1LY6ZAw90bR~J2*@3Tz(180MN+f1H)km<_2-9QdC z+ZWgO(GD^ZtoNhFXCH0#?0q)hpX%KI=4;A!aal2cVzqyu?_+ZCJJb%)%u_v#Tlt=E zHSmjb3biSer8Gw}r)2KeE{T;0lXrV4q++pq5CN3*%GURLv;XXhUav)v*oT3R%GV@< zq;sglhNSWF%%`^7R$;paN4aHh!{$#W#HKI)sqL8QESsD4Cwd+e%Y+w!)%R^8DrxGk zWIh+3^kC}dN|Mw0a+3Sk6kDk*ys;=Tx<1kCL0p*pdxk%JjDUg<0j#8-A7HcAyPYa7 zAX>kp*JCC?{o%zNCy?`AW=@hgPBJSU-?xN%(MvmNhsTMsExuWM3)-%_lycIobFg!~mJzlNsQ8-PXsR(5 zHP3lq$}KEO_dkt2b8-usOD?b-{XMOgw0-OPl{)kM>)t1W2esldhh|bv=Qfb z!1{>SXY*Z8@(+_Fn{{Opca6%{wQK{o4I zFBaLWf4}ZsRGgghR0B3h*}EZ*AwqbT#BI%#!B53QbZef?D+Wovxlj9z^Rw&bXDVVB ztx}ajGF|BqOAHEya7*YtXyToELh^NU|^c2?A^A16h7h@#I_^YIN)YI$U0YkuQ#yxI_aqO z=B#VftqeND`OZpVwC?+`p!Pj&`ycJ|HmU{saD$8&#H;d=;>nSs9ryE}I5&L1OwG@C z&c8LGX=Mr=pAb<0{ zlb+iLe}f&;4jEW2aP9nF&G`$bH%Tqg-x=r1-sW6Q3XcO#YS0DiWa}a{PVhYA6!Sel z2EVwsOroZ#p~yns#!#U{_3l9RmjQhyU2`0o+dWJkB7L_dkwm7g+Q|QL(p>D|KB`k= zeSI=Ny;%y`z;eQ-#Fb_Or?3g+e1$>2qyobt`Fwz#y=w?}4?-u}L;(8IX569BV4muM zm4NB%EI$DptXGwZyQ( ztH+CMxO>DdDvq`c`c0(bIJcO^>W|g%a-bderaNgOc|zd@_YBhst$7#TQlI}Z1@<3QsWAHXxw>MM&vF8!MoL%Akx zlL*(Uy`8l7L;Q|w9fES;Zg!*vmd~ex6oUmdwr>f<#!ouw3X8J`Ab@+igct3IJRb=J zx z=*T2MeSINix&4M9Ha_rur0frD^TR*<_Exc?$ztbnuk@)wUcV6)@BFUlUGe7~0vOd+ z+bXpsbIn3m-FG{<%cWe}6e9Spg82N&+LRsd&T@kV9!wQOVx-i$lP9-rqmMBr+RtdC zoFg9h{74KMhOJMI+zVI7ct%C)Rhv8Pc#~5e?V4FntEDO-Q-B8iie`{m+^<{hx>-!$%L-NPNjNyRY3CX5}k-i~$a z?9T;<7IWH*=#;r6+``Z9WxiJVMwz>zYSA&Drd{D)jTFg@}%Ku*Jv zj4tr8n=DH}2mv`5UFqgpZWp7$M#eXZ9aFonH{7}XQCiw@L|wlD;O>`$kEWUwZg?zm#{)qipPZ3pDuPD7weEZXbJiB z0SlwF!Mw^hDEk^eyhFjaZ=Q^mv-#61VcfEU{9lC*nm+{16JEpN5%YmhaCI zseZ_$RWIW1_u#XcS3CLcRh3GW#lTyGJdMrHf&02;W|`i}j>3`U40q*;`+%)Rz4x30 z9!D0P6}h$@u~j=I+?IkC3T&?ybo9r9g1SFEi24B+qMvf=EK(%6cVH5Jyb7|~&EMW8 zh(7IdHz+*whm}RZp!!~Rv#X{29Ln&x7OcJ!V=~&Rnjcq&%vG+}cV`PX*j@lVB`4DB z@9d8xNSvFxZwSu9p_f_9)beuMO6Ri`OJ@gdHq4Exrxi_sAhaQbX-G8fqC9{w0dD1uil-?Rw4#$qb^Q;Sp(O_mt56X8$g_y*oVj|7D{xBl$JrY4(Eq44 zSMg!V9r-`RQQKyo9y;ZPfq^e$9JA|Sd7gSzR@o^~D;=12LzvJzd4{!(mt*KdT^eQ3USfmjlrp4l}Ax$HE zYb@7wfDE3fM19oDL`cDSzbnnK8G3d&etD+>x*zE8<2KzXS(?< zacio(PY6s+SQfJz*BgG*$lTcYD133v!B-g*jSflreBJv=kS*4aTEOHtJJaa$0D=7FL4;}hZx0Xr^ah}{B{2< zyjEs}QYTS?`zz4rV3`Fjhg*Gh`hL+>7B7=vP=5!Bk%rP8ag=|S*`2u}&eAja0ocP$ z?jsuZpj_;+lmmj#cvN0l?0o$9S^b(;8GKO-4JimguX3ZZAE>>)Fbq=gNOh7neWp zFO>1iSslJrgXD0C4u*$?PCmqvapm-e&GBO6^As)=x*0P4TctP7UtUg~G5xFj#jUZ| zgRw^NDezL8bE6v-Utw~f-DhX{NASDDSM^l|uuM7Nh z6_B0p#M;Dj%P5-^sLdlG17JPh*O^7CYTyE^s&Iy{j?!%YG2s&tdOq;}5(h$I81$Yb zAK>B4(l1IA&oBt7*a(ZE|K?ZkDAMvLt>bjofT!Si%tBz#9aMq&mD-*65#1xz^*mCj za3KW;M0$@`6H+bh?MGEZX~T!(Qi5*tQ8+*PhNX?(Sp^vi&axI4w;i2IUD6rNV4FUp zK_X>1KNtT?fu^|~;@!5p_sVg&9LWCp0heBxW{b?)`@3NzMUA}DJZz@bon{FuWX8;N{IrQ#&76Qo$;fvNaIuHc=b(=5WtxjZ=^; z|6%Y(zl5B{7vA?`KprVHN`v4%42GjJ zD;FTTL%LQF%qXF>f*(VXNxtA{(48kJ>d31O(BmuprL@WhOUNNi1Bk{kE=8=+$vv&D zATWG54_Wx1z*z>HrTcDdNQIyAtUW5$WPp7RlyXpoG+6c2!RUG^tk{3Q%Bt zz4kUrgAEPNCGVoA(FaDkv_`&b~W5?s7kb&>aFZ@tuX`~Ev6owvq507ZL zuVQ|!v0J5n>BWnI6QJMiWGkR(E{(&OIoArUfpf|EHhS*nAI~10O3G2ozb-nA9OLo6 zDa!4%o)w-9*WpUkfgbOg8wwyKAAiBPR;;a-el#Yw%-!JvW6x<|9>HTcks>gzfO3ePkH=dxs3c@5cO;qf(7L zW_%#>USn-tk{_FQ`kBisVm{PO3aLNr3rU=-HuDu-qE0o;$FLd&M5(@oLM&dzMOut#J2lk?>1<&LDUcpkM(jrpD?EIAcaxHH0XPE>m&Sf z%B>TUv3y-M%IVdTA%f$CxEAsVt9OaZF#ynMYRXJx3Q;TAeQK9^W!C7oU9Y)#Ki2nr ziGH8ef#>_HTy$*a7%`?NW<4fDQ6HTjzpCb-;i?&}wePF)kd8!?*RpohX+zgLJR^{{DyAAe+jd}BvDU*Bs zT+s&MJ~=+CE|7!?uG=$DN0oTC1m$(w_W`E)$;EA)K{Kw~(R|gHymSXy8zez+h~)=cg9m@tl3HIy?9U4HpCdZaM{mx`oBhIc$!IuRjWiRSydU=nPIpy& zoHm}}H1Y#R^Cd%pUSh&Ui+fbAajf8T3=_$kSSU*B5K6lYlgb)eb-r06(%N|YPis2ON@JN$A4*HIl48a~MeM3ph#Le2`zke!+nXPBw`72u z9o@FNRGnvUx3#Ua8G^WMbGq*5k{<)x<)*Q_dh|G9=7;HyP{5hMx!l~=7&V!+yp9gO zwsmKC# zgqXP6EDw&AHb9yQtTrOp_f8Q#u&e3feil~+V*T4E?zQen6FzvlZor`oGe(RPvfjB` z_nJGf7*DI-yOKNc`nWdGH}xs?Wj}#e-0M63Pc|8RN|S*A(U$YeZ|bq(R+)fb3(ivg z(n&0_vbEti`h0F3`Rd3R`q;AWW=b9VtlM^F-S&1uW%q!CodNCG-|D&p8Ld(JSyur*L2c#GQEZ9`E`glht7Tktx;sz&?5 zdm_La&&6Gv1Lyw~lN@jPdVl7&=O!eo&;8_K+FG|Nm>D0IanRG7l)3CbXm5@of^AEE zx4yJV#4d5uOn7l}!VLSPmJB zZdkjF_}D6&c)g&`B+Y1a4j1g=^?kIPpIu(JkpX04Y-{Zy|5_Tder4}a3orydMwO%j zp2JkAo4r`CO!hr9(KYColJ628eK@y0q+hgo>>zr{5q+SqU7yt$ZH5G>dQ+I07s4C7 zyuL zpDTe`juC8ZJf0c;9<+UF4gWE56zd+_Ft}jO1Y6B(MlD=5t@V2lR!t%NRlh(04ZXPVL9h^E8pI z;lCjRK#L}J*lxi~t+Q61m@dM01iA1oZ2k)ZsCrCHe|L9F>n=JV@+rp-ILM@(b#=5f zwv2>b92S&HQDZ1}WFK%}?FGk#OpR2KR%=;kmUWp<=ax#=sD=&TE|?;xr-BS&?{Cl+ ztfWQy?Nu);thTzbA`LaFgvihwgMAiHIfffxWV#E$#xj52Zq;`2uF&2D&CX!m?94qi zpLZ7G-`K-HZ5RR-S_KqD(IznBE;qI->qtnw{(1^T>I0ksq=-mLH2|VovUJbB^~DOS z6QoD1i-?QHIc6&a8p)p~2om>IaeDH`w7&Na7Fr?8+jXo2xYFsuEb!x^T@C}3KFL)eblkFCca5g`X~YnFbWX8WKu2#vgkUj zUqsbq_SJR%G=BlWbPM9SVht?RKX#C$(|&Uf01dZp%jOUVZbXyMJ_P33iIDzuv~)S^ zm#|B4cCA}{*^YZXCCH3uwpn|-#Wbj{5DMbPQ(N%IIUmC>H}fhg!{+#=Tq&Q-6@CL7 zC@GVFr~`jaKUjHEk{A06UKyB}KwVX;*1w2XWKdJbV?ws}1cb{cwV;1U$t=}W$5nTm zY}uxyO9nDAFIXGKcGo&cxYAe7jyLLeidl`7HgaLyz9AM`n<}!TdA6SQ9n46W@%^n3 z0v$YS!k&mg?ax`0gUaYj4Mlxk(C=uNk6RJcZ%T?2OJm)K>;@*?!0Hn4-ulyi$Nr{kc|Pv6YZ34l5DDAkM5P5JVVh9Mh^|6NLP5IY zb0;GuL8EZL)j*})$1ih$Il`CK5qdA?y?4^`wiTK(J-dPlpcGI-sL75AkzUsnqIpmuwd9*7yoVW@(O2!6%)qcN*$1YJM3DPV9 zK9E9cR~G2h#aIlcDNu@Z|KYc_PNskj+r7J$HB4P?ZN%2!DNL|(8RqRo(DWKIr*ZCr ziA$;J0a_BPkZ8tM zino*#UTP9Abv~a$nD9HDknNt9p=acXIhXS6#aHAb$$zjrR6jOabrZk*wdD0><`p-3 z$7ME-!^eJ2x75&2Kbo`$BLl$WHgqJW>VA57s5jf+6Y8+VDb@*w#WLF|#N_4y075{T zQKS<`r|pPHG=0+5>*Z!XN9VH(|A|O%=*Ri~)EkoMw(@Z-+O~^&!_2?S-h4axSK?*f zLU7gHm!IQrZ~Nij>w?Qx&(daY+5DZg?M2nUkm#jv)!>h8-j*|l?UiTKMg+FGJ`X;Y zo{z}7+LcuoZ=LT8LhvxhqF0;y5+2pW69%1D(3xc@gxE4{USDHriiC-KlFf23PhvLz zajMO*ZJUOi;49iR?!2;BuKiZZs_#82NxMfk@jOAfLF9p@JU}Py19Rbg1+-5LuHzlt zBI00#m{d2+|9*QcZ!PH|xKMq09e(lmez$#F6}o*{X)WdP9lStsTc7Y$^5IH8T=@80 zZto(o@MVICm49`oY-7~7OLa~zEAe7rR&T1MjY(pyrzN>$@3d@FJ1a7d*U#P}FQ8n` zHz=$_p7KvRmc){o@5ov-OVZQro}XR2T$=BrtWIVJWPa@2^-|=ZsoS>ni>6m@pT_PW zzk%}jwmpkQ&)pd;Ku2AhM#9?$z@8^*AMD}um7sDPwN${x5@+X7-1Z6OX*RONd=y!+ ztq$(c>6@>R0n_h4KH@w)l;U@P=L3Ivo|JDiuCMbwEf+S5NN1Cr;$^LuMtX=BAxPs$ zW^UKq>4H7IGd-V#o|Y^$SaC}J;6@i<2s`ezu_AxjxEf~O5=3>wH)5I4BakhHS*e{j z>Dsi1^fglP;cQ#WNr>V<>LrUW;!No=89eA=RHMY&uYIp)c(QHNsnc|0`@kdSa36{8 za~BjRAyrpp(OEx$)6+hY-!`sX{A>Da=NJQL-p(UzL&1~S%!X|Ug{QO}QmkQJjEjZT zG@sjR9PjdW#*W)AuF6NIEku+W~=+`J+kR56{3PoKqZoXDYVKvY-8RY&H?x- z9>CwsBW42yvKh78zJ3v_zis|DmbEuj$Z~bY4>O!u*WW(v9?#`@7Ds1e&{&XUm?+LP zZ6X*l^^J)n&!o-DfUc_^xALkvw^rloZqODXt3}@T2~Ly-BkjPQM=-3CO|)wqaUMg`e|D^C)%EK=Or~!`)Dxb3EmoGJzP2B+$2C8 zQx#~a=ag6U3$)etNh|rq*+!3xxcI^7EwF?+rfvKalbL1QZia$ZNG$}Y>f~5Xct7E5 z!VB}(D4ueZOLgVEs|ih_cF0&s<;AE!9`%uLOop~od3$SIA^1Ji23bnXx#7Ubih+&E z!QNuVt)XTH_?z%e(F%ak6C)tc#HYIuvfrYxEZ*5# z)4z8g|Gv9C#wMp=`|vUtxct@X)!{zU7N8+X z7;1L@z|Wx5leMT*atShe8Gii8-?zW}V+FVPvN`wQi92gCkZYhq;Nt-2w?3HXBT(`J zZ;QAGW)Qi|jfc7%q3#9+)D$GFx$gYmrIY`ZC%W3nfPmZls)>VRIt;ijY;X@YULnI{ z3g4mz4%6 znsTUa*hx@9jg3;YTMu*Gv%uTdFcs#yIcn7FwND~<)=q>7I0+25;8Xo>W|ovL?z`Uc ztV21QT&+L}2!a2^Bqwt9KDh%cVQEz!sA5V07Ju3!M@J`G3U1xfC&Q@N49{#5>j(Fb3M zBH>X&ir1q-LCQ;O8kiReRc;SZf+pq!t6yDU{M$KA2?`d)JP15~E}yYo3= zrhnm&S0vk$atZ0=7(Z7h$p(L=e&ch!V%M?Z%UmH4?(T31_I@(#m583p;4U=1gGpZk z(D)130^v9_ zVNoG7^aHWl@uc;JWi5#h;K$LZ6TWP49*5JGPPdpo3!qDTddGv%5%@|kCzU;(`ua9mQ1yJ z1*DI@4*WgxNa8D~Z+t?`&>&!fQQ!#UtuVdz z0+k_QQ9XdxC+ygT2DQR!7HbxR*^Isa&OhgUaf2xwy#qlBy~1zD$WI1GtV!kQ$>F@H z8%Q^_*L2^isb5Fg60Jqkt=3{;-fa3L`kjHHN@m!Bo`0N4JxQrJlq90XsK8vwJGyk^ zAyE-82lpgkb_=n8^b&@|CM+i_?ZI(sJc5F_UWlx$*Cc}my{_Ghl(f$(N^E&v;!BAX ziy!52!U(T{$ehwk6D`fnE7N<^4It-w9693qYR{oUmLl z{%2X@U5rrj%lEZG5U76~^^5P$jOzT2)kKJE z{bH$1%b9GnmP+67`qL#1N;314(nMhdwaejG_#~4FF*@)dcZcq`N;QQruNJv$RKFVC zU1+12I*Rk*3iZ)jaWCLI6VmUsHnYyBjW^eT?Ds4jGkqifGWT8Qm4{tN7bVKul}6iT z%gXnz0(g+6&Cf<%9Tng_jauVs=X=#4!t-8ID#}J|!k~yF1*}A$<$}#(Vdk5Tqx$F{ zvNaEBR-^=KiI{l;uQ(O)SO2xQu~u`GN6iQezNESgx87g(m4 zKTbqF%S=?xpIV4vr}@PoCZ#8$gn#=d{4Q`ae_4f%I4`nxj;K%JtvR?e8RNpFlppFb z6BLw#I7^)B1q6-jYr6LXB!g8<18qQwxJAD>3 zo-Y=!{-t!if5yCQMaX!#(ZMZZ1RqK{&2X&PqL=(Rr1bcp*F~?Ff==n--AGNw0y8yI zkm!w_e5hV+qVJ0=aa-?U0Gks{H}GUXQu#1|G&;_{oVY^WGdUJL0jl%@tT1+>0z7=B z3tt-KwhPbK|DX@K1op`T9nqW5BlK z+V%}CAwc4<3Sovk`q}mC{MeP3wtK$-#$C_HZ`+?aBfQgziBKYMP-~G-d~WSm?hZ|$ zaCPjjdQVRiYE%}J7))~2gg_)=x3ipE0c^GQt3SMVXXAkBiSf`XOE(=M6CsT_>QY=S zPT{GV7!%z1(yujtVU^@`GBQZNpK`du-%h!{kN?HU90Uxhq`!T~biwB0Ww_@n@-}o6 zbw1?PADA+HUHyYeTL0%C;vQlJ*3C=KzVxs7%V5DcgH}Zsg>=yCw{59a8*QATR*ivh z)M|@U0fMe0z=5V*+9(xZNbaw}q(Eh9iRd%aN27eFXpeN*vX`YEzN!+~;}E)yAm1)&!U*`(& zQr$B=`3xzvH>h$PPZ5(po;F#5hP)sHofG}Ya9Pc9%;CnpnQ!}+RAUQeXR(Ffp+^rd z_Rh7odhyizsREzXU35YurecXnZ~{)qfGc80al47irGntc+-$iHGGm$fTB|XomUwL{ zEfOJwVnUGUvMbrlmB#rABcEUNBfz)aTgI8`uK1WH)!4xyeWTx9C zW+ZG?LagiyOU0@bCoK_6MI8nR+-M$3TZs>M!?(fuJK+*=jkar5bnv^J`Ov$Foaf6G zy;&1JMwV+=9f^4wDtKF+=(dWv=}LQ0uqE~Yz;ti#axupALEupAJmyMKjg**ShA>4p ztX2vQlQ}de?oifMB|WYGTi3nvdmY-DP5>Ex_fbGVIo1b9QWAau9e>`ZA=9S*B{qPw z)Oh=#cH~wXD~DzfR{_lD+RBH%17?Zn!Q_f5LCqn#n(C-iKDklwr_pqk_4)39Yu$|T z?XTvUGe$2v4lc6=Xn#T7k75K~28q8eXBN;?&KY4_4H8MF0f}SdBfgH4Uw%~_^{h90 zyJEmiWZZZ0`@y}{z{`9>C^7&*tN?{c8Z=-q?ng~zRqzL(EJfFC%AVax9XY43?7dwG zoOSnS0~Sfy4iuQBGUgM|buv!CVCQ=&rWI2xf|cFdoWo%^*5cfpdF$=M+|oycQ%1;R zM6HY61{>#WCkvqc{EYev4`A27SErCDtyq)whnQAgIN<(-+;*;ogFwrQWG}DCcC{HS ze^0vfdjb`dof!}$c4U`524KPZxA{iR6rKRQU9so&@wBe1%)oVYdG=8p9bMUYThq*z ztn9e0I#Y((e)??ZMpEK7I<6O{)tHKBdW^?$q!B0BQQ6w(;w=4pSywWC8WXNY6SP7O zoI=*H{kU+!kc}!tI)q%kyny<(ehp{wpgy?mX5`}Y=H*yYA1zbfu;JTj0-4~frHZ)A zV#OM1!-JTJ31;S^1-tkIxMYH8*d1 z#h!`WtH^jY?{^yoSRfHD%a#I`-SN!KzJTR_j$C!*bzwhuxm0aCzUcMbkb}t`$@{DS z{4r4HlV8b&ld>?Sk8_JMa_tg`s;HXbdOCA$5EC>@pJ>MsRtsWPfB3P6?WX2|v4Cc7 z7MN$z)z`;SCY&r_Acfj)p^-mtoKMFPkOj+0UzK=)s7*@VFcj@;qR-y>lXvXsB(ceB z90wFr>h@A^^f2H@4>+{womED73Bxyddc8Fm{g8pLe+)nw_@RbA}*y~=Lt1_Mp%D@ofd(vb`^f)8R zUfg6f_qDP2R>+f84f2!Yf%r?*yJRU;Dlo)I^u=%8UXY;j??O_Aa!maw3Po}0Cbd5N z3(1QRpf~l34jHiZ*)ZozYR}TVs$!wszJ%2Z)lzQ|oLF^0TM4kET!W5;r|(%ZCWhBf zFbLD1*Q<3w{s0POZkehqwDodh9yeS;DPY7q=OnCn2ys?%F(*s^xj=OqciRcH!mlJRC&id5v!G}>apG!jH+Vi(y(Z}J${X=Wv{G*^oe(1Tki|D0NBnbn zUzpi=T;P;H2zowR`5caeqXRSYE8#Ifg&$-2QaMF4PmHiFT@(6n7-ub)VjDwr_n03qR`Tpu^rHEDlc_6FPH1yUr+LjmP&)p4$ zn;=>0JvvaTeV+Z9>HAi!-{dwg1fLNyM!vB-SDFOFEDA@VBJvhVwq84-VIExWAdjr1 zIezTj6GC&Rvo;G#gt?-JJJu8nE4PdyR?G2Lie{2-zszwyA3+z;ovSr!?--EnPbKTH zQN2D$>@i3>mc5QjDpGk0yL~N3HC)~uV+Q>-tocaiH(S9-^!Wk5Mu3~{{)y3Y&Ld+? zOodJ?E)KRyu3#Ffgp&3aMDODp|8=aq+HOYJmcQptoOb7We%`ABt*8VX7}mv$KN&B+ zx(*Xi8j4arn_83*VsZ%N#W%Hlud+`_*XU+m~q(7)g=H?eO2g^ikSFe+4hr zAnmY4mu-8*XNeDdo%r^OV_tZ;;7U)_y}SPd->f_R-}^(dSY?e6`P#>!lUs!E^`cMm zk);dhq=JP92LI|B^r5Wx?Pq{_XT{T(uN<{9jsc3({2WDysx_mZXC2QQnWLgs`en#< zFEHLdd%>5(*c@N{?-^M1(q`@I(b7X>?+m_q=A< zq0xfjV9oD(={OWRbn6~Sbfd>I+zG(*kCl40dbeih2XZwX5^E4kpChTkxYtp{M& zvyaxQ^Xd)ng-po8RJMy2sxh3h3LQ3UI;k6~(iQv~d{``WWA&cWVQtzY`YJxC66BLg zMqGz=Bs5m8uD-PR>0_mTl;M8Sl(rBo&e&w*j!S>*A?GIC9=lVECdhH0i{oBrjM*@2 zmyz(r<5}n_v40!#wtG`1$^2coc*>7D`LNk;_rRYRynYoJ)jz<+%aF5vT}O}0m2zI= zO39k8T;^Kd)Wq2z?P-w>r$=k!4dKIVt`nuj7a&+D=@-Q4^JNY2C5>mPiH*+gpn`WE z9>7d5n{OkCH;*SmHhxN8B#J|}e4Z2t@zLl!Tq@k&V!4Y;hA}2p^_TD;sSe)x=l`38 z19WAhuZ|Sa$eHrz&wMF4pfl;P;zofc*#d(pS}q=Zx-+O(Qq|f?`x})iBS^H}U=SoO z{I)(Y@cKrDjZVTnb+z-C$Emi%NK3ZPOyPS>J>4MF?@AbV2J$0U0*vQ^j)Yl`vBIjh+ErN^D*co+@B9`51-Nz z0PU#|>B+~aGho1LCy_d{0Td$4Q32OcPq4&f{4bg`We&Qw8txklwS`!fekG60cM*ma zKTy62zRk#JvUQuz<(ZY$40XTuTek^SJ@q1}LG146h;39E;s2V=MWZ>0**K3yRv}H* z7nkD&$#+Pwzkt8!YK`YFAMaB4A#FTF75SOw}j4Gp#&R~t|pSgIjG` zVdA20rX^y?FDdy+LEPP!74h<{rdR9eD^|H%_ATzCD(QeT$28JO6e*v3T#?=M;2QC?YT9HAv zAMbLKYUO}bIBud}vyvkRtx$#VrY@Qb{dO+kmcK-GmY3LOGU-~vv6zc(CX@6-u4?q( z4At*Mn~zRzBo_3pwevz-8F*T@GOZz zJu98#HD@YP|-;o+Z=r4bl1d5h7 z7~2&*T&i#M)%}tU5s5u3)IMZVADynS04Vnh%ut5tWngzB$3e<+Jt^sLA8a$KlWKPT zRKyg1Zjd#qh<0O2|BLZ^jReUYH9EKEuRP;pgmv06zoL7PSx#aF6vg(LM$==#Utu4) zf}*qdmx;U9P9aYxeNCTxNFLtIh6=1+E!R@6_006DSW5LDAYBhpB3Hv-gy{AMMveqt zBD$Z}4gHTOg}lCNIZVGdVk3S&drKhy97=U5O!54GW9D-sUO>K8MPbNkoZ-BQS^w0-;ec9< zC=9uW$ny-{fEgh@q0W^^Eri*c@Tc;!f{j&EMI%5TFmx&g135PZ5s3W@3eIvLRW5X1 z4pU3GF{xe(ha<-PyrqhNif{YXDhWmNkgk3LNv5w?^X6G-%sNI!ef zW9 zSLoaicVZ5DO5Kxz@x%wwbr1YtY~_COe?y5i^e;M8t&mh}aw&#*8NTFcl>JQ^yM4N_ z^|V|SH1b{OMs}meOF-29x@AQh+h49`tj2j!XMx$XydLpWrif^@nD6#Cfcgs^jc!hV zYz}HD%&*i%exR*HX(nuJ*YwA?#S<_LsXTQJW|M3Bs-U1kx7PL?M2qoW&cEL!ywT{S1bn+z=jY|Xb)FD#73(}yoRg!+=z%r> zZxLDQQb)Qi?)B?e0d)iA@`c8FDf)23$OT{Y5L88CV!e_p2%j${{ETa_-$bV0Dv&*d z9&UE6YShnh79eh42`8G;lR6(k+tpB^+*LK40w^UA!=JiIvd~yp{aRp4p+*TM?r@l4 zgBmyTzo*}% z_kVj?ZB*~_C#`atqY+@mopyL^UESYPAJlYfE(I15hnMCu{Lp8e3cF*)se+wJo2Oyp zCzcPU43C>P5n|R*-gn7Q5J8#hTQ$LVT?;?gTYeb%-nE|h(RzPisCaUO?hM0dW-0YO zHXTHO`|~I+O%)&hy^j=nzj0Kfp;WE;Hl%gd(+hJ=uCYv?1wXiOM&gz{FOf_%cXfA_v!$GIQUx1Ai$~XHN!t0aawF71Mz>f z!CdMjvk}}sb(N4eM4N?h@@)jGgss82olm{V@4|{K(r%P#KV>0I4Jmt^AEz`4`^*tx z^Hp_8Xq379$hVLYb^SyQ{qG0MOB1}*6p;`{sNoVn`wWxZr!*`aX#6W(+ zusYrwZKoX?W94%2rN)WEl<%;C!p!=<-U~c)Ht7StNRp{76&L;(u!O%DwpY$~$vOot zr$6B&YEuj|R`os3{0LyA`s)t|IA~)Wt{Ot5=RfcKbi4Jvl7OvFi{2IcIlvFqxTCC0 z(rb3#&5(czu=7kkvkFHp^*biT@FHkDQ>ete*zv??zi9p+X!&WqdGTf^r?89Z7Ojas zcNuMju&oJjl+_=;EZ2moWm%08%DKL)H@oW{P*3SWMh@FP_OU2_$r5HwS34Y& zd7Rv^R&v5%9Fv~fD5Xy+MR8aem{;N#YqKmCVidx2ArQ497+QT+u7e^aAN3}w%n zsEXaOFX$KEthuh7X@?zetdN)wF>8*#A#9+71qBUDE%W>|>2jEUmdv=D`}y$z4)8xw z2~kz(Y_!W${j8aBTmG5`{=vvsRkOwQhBk=nvj1o2H$nz8hsVq!ikDe~fDNtG%g+y%p!Lo1MT zKahwtTT+0RL&AawVH<8f7*7eegN9X;bHP+Ha+Wu)MY_eTmfMlR{gpkNSTmK>gyo4> zJGWAwx?BAR?bnvpO$;>U5UYiAUyP8PEat18Jk~po6Vp9wiYJ36awMUIrf}LbXQ~Mo zC-Fd?zf(g-d7Re`InoQ?+UDfy)#L5_cCjiT?akAce{X(#o+PQUK{obfGGKTC7$T8n z;yx5LbmC-aTGs+@XP#3!jjE@vkb7UzgM(bl2!h{gbK=>PlNVtO1EzKgu#^k6>0X4I z%QiLB{$|AD)-x-@JC_p3A-Z$Z`MbEqf5{8<`Y5J33Jf-z{>OP`trB%DJ2^0+sjM|~ zBKJEenqoOIhLR}{kc(i!A*f(N=#m^}n%3{^CODOH9vbm`J|xjm8Ofub00j?$*NU_5 zYp_pUTCJZVc<~R)BW4LgFrKv2`XwX0?8VC6r23hn6~B!WLp2ziN=Jc6mEb>fs~T9$ z79)Jr*M+3ktmYE_SiDrZnJ!;A&&Y@`{QIisP zyjLzPN0C!7!j-zS6x~BPeo3$cK1bTJr`0DW0Ssroc{1F`&8#$M^aqC?q4M$(R2cNK z&R?AjDHCTS{H8pAvHBgq0Zh-ji{_%@4@;1KwM17P1ndY9%*vUq5^{Hn0kW;*$K7FH zgxdQvS$aaP?D1{5XIW2>l`B1HLsZMZrGUN52(J1OL9zTJq_O&=A_9U`gG#`?b>s&t$Hqa4Q@{>*VWOv~_)N0f1hNE^IEVq#l^$#*7_t@tv**t$EQcE|b6S zwmz!x8m-vy6$@4Q^Mg#zj_eu<1@cSoLWDh9hK_N;`na;t*Sok&g9_{+^ouAG17V?k zTnY=8GCV|NV-P31bhSDGAV4Urq{$ryM8_tl)QM&(WJaI zqjWl2%{}wH`YLp_XcJ_cy$W9<5ZMA=DFe(?@jmlAB+p(W0gr%$*W%bOy;wiNm@Xi)s2+|J=o^NkLcq%F;5AMX{sL1%nM9ixZ1{(}C!{K)U-bO^rU`98RQixE5WqlGKmi(4L^5?J9bp|JD zC!d@H<@U|&%uO(ZD%B~#0&bk-NWyGCf{lL=U#Wjhc2#}8$y5hlLUG@V3)mJg8etS z7{sj*fz%ax?0;Qn=V#MA$~7S-1)%p24Vg{*;~PQ~-L$ijeY<#n+-6Af19{g`b4-nl zhVng=z)4P*!?3PvCx;x{=f~%n1xF#VL_|R*m0#qUhm8>L+$B~BQ5}x|A?M_mh6_Ef>KM9fa)@4Oxn?BeqJ6jH)xex~cA4m3M^`QK!!ZOnCCyRk*)j zrl(`kFff)!5@JpSywq;IcxkLJJAkOa0F$NI1$;{`N?XyiD=^(}cQ3pGJSG#SasEd| zOI0N$OI>fziCIGLosG?|%NTx_2%0vtUjc|C9+A!%F}sZ+Wpi6#sPXnXVTLAN3L{6|x3t>%U4AR6O8l3{@>l!>C|^Ijn572O z&7wX+tb9rR^?SpE;g@)Qo%Bt)s>aFLQVAg3f75O40q||!ZQi;{Z0bws1)IdE?wW3X07&Uk5;WzV!fGh`L!l49((So?A&IuC zSpR{lO7M$tVFu3riGIga`8nYO3#EfhxD?XU8uNsDo9d={n3G1Zh)0e_M3RTr+okuG zCSb}LpZC$Oh)dPiiL2YL&K*4qcHhM3DwHecehlB}J07iz^R4MB@>ZNj0Sa$NL--Cv z+G>)%gT9OmHP=t>bb__Pv+C(n@DFft|Fp+TpJ_HO6EyQVU*=iOz+>rKRSJP} zos_U&S4QWp$2UMQ<0MSzQUd-jzdU?SQFK{nYYWH_PGzT^PYN)&93q??xCytC-Y|Ee z4l2!AN@0IqJj~|aberc}`IGur%}b?G^i|eUuZ+or1W9!&l}h?pB9aBYG-hqQ3&Xcp z8#xS~NTouaLVDU+B2wxKt6Y5Hb3lflOel|dM~)XA*7~G zGo6)KdC*_}b2YAqld|CA9fn~&dcgj}hPT%K$(bhIWKP3P_p9ET_d%yA0-GV*u!!i? zTt4XM5v1Ag=bdk}j;Yf;YvDUFfy%z1kQ!ePAJE_q%6 zxEF_^r`Uki$#YR22LIr4rsh99OabkT%ZQXnD&3Tu!XmVE_bv<0VkvCEtY$=hNUr>t zSpmo$<$Dg(Vf+}8KXQIh4Pc18rHZNl-3Q{~?UTXQN>4+f!nA@55kjg4=v!H7@&Y!X zd{?wPej3kD>DeKix1@E`38m=Y$re4APk>ufVUF2%Er9b7LQ#hI_x0OI9tO8X#`>(q zm!%;BQ0Ut_KCk;BrNVzJ^fK&8Bc3Tn z)^=WAuwbqTru<6R<7mltyf=mVtFbn*#xcO-Vb1;Uq2!NNw*x-23(k5TkS%%&%Jgz3 zjeja~L_gXYAs5S^tSYR?+~YewixNI9I{A-zW01r8KXUgXOXVLY|9C_84?_bf5RQK&bom~b^50@ zA&Te4XgON*F}B3f8tOeVjCP)K%ylduo^c~}494WVoE`WM37w?sJqLcJvWIMQl}psv zO^We{-A=p+KH!?9zf}cgq#Pe9`UTqN&e{ko*sq;z73$ZF;O1@o{~kXjF!Z|~4UOG4 z&@&wiN(S+F14JU}G8JL@RVDNRs@Uo>CX(S6gf2m6n#MVh4}U>jwzt@xUKd^`La=>y>AJkg(>}98I(gMuufKu8s(k52+T1WOA zhVfWp<>fd<>eK|W1-=@Qe{|@jeh`k{e&Js%k1h)QWG;d9i9K}J**KWA=@FwxMFO2U zbu8{%!#)tLcagm2JG;Xjmp~z3O;fE-LnazW_Aqu$GynzdCZ676tM&`B(&&~>p`y@5 z(4GYpDH9K$gc)E6IFV7_kr&wf1cNz}B^F`ImzmkpRCM*B!=ZJHxbIfvUhA?8aL-)wB>&+> z-hZE@=j!hGB~OmUZ`sh~lhv#e)%-nj-ZJ}(RXB4Z&;(!n-LLltz_WX`3D7P z!L^Z3*WYSa71oEN9J1YEZ&Te+{ET>sT>5sJRClQ-Urv5F2G8|(ko38xsZRbe7}@(@ zl8UW^$87e@ostsUvP_PCy%=-_N0Z+8Xn=|Oep3ej^wHquOqt`~RCG-af_o`L^R0M!|Pw#UbF;i;4SMJ##c) zd3oL8H|Eyj^n%c1Il>SIKxt5qAl4m<=l#WOK#R*hXLP`%++Bv^Ux_0A1lYnFEGDRC zy_3cIH?5KZ(f3ZoiP%lg6jOT}%{L_Bs9X;If{%L*7(!}|*9U0miPBi&y(G_fHr+V7ra+bO(`zFHVr7Si# zz!3Hw$rm?gu2pMhS@UoBAaCwl7SUQp-IVtw@#SmFuf_lFZ~$*Q-R6MDlQ)z0ogs5F zn~U6Sst4c6;=zO6kn-9$sDX72cKR%|IaYl(5Ii<8d<5xaq<~f|<~|I@^}U>SU`xL5 zwWl!GF}s4gXM-RMg`oS1MH|#0Xy(Znj350=rnJCn`7Cdb}C)`r$~27%879(C9!J<4C1q zFOxO%S_4Ph8l)n#t>?ADA_#qOm5e~+ucuq%1#@b@fvUr)A6tx_?>ia?5YWr(a*={2 z-E0(R9{MQuTvM@_c-ob`2-r%~oSa2D{7MJ1P=v(tTKenfv4BCuKG5JL-p8ZB)cD-{ z6lf#TGUdKjw>NNL)b!+xe>T|{hf$CU!!|7QVf@Y|oh9gg34u(!-eUA3#Htp}6u$2A zfDe;~fuV-1H57!HopeF#j`cvPnn2;C2*hqZ+)%&&D4th+-R0h6#A(u$*9@M19|!2c z39FO{eNh~=XA;5h4DgJF?Iy;0o!0tFghMY(<#{f>a+W3o`~v^pl>E48K!F?qxWh6* z6_l)&s@!Iuk8m_-`?}s8^(KiL-fv29X=N4POHM?8#{egsx)#i~0XTMb_Guo+_U`?%bDM(Vy9f3Hw0Qa*w}0wT3|qFoz3^k8Xdo!l ztMC6_P}6CA=e}-ohk%ajQz_vlWfVhib?N8!1;Q2@q}zpwFz@YyMoLT?S|?pe$u|iz z_p*g>vGQ0pRjC8Gj_!iiJD))3X<6{CG|+qw%NI^N`|gGBb{ry6d(&k1Deyn5!*6;I z1#fy!p|9WMW|t6WAY5lPDDGle+*R=w+(&1L5cb?HOq5raysXt5`Ri(axBW?58)wv6 zDW53+^9c8lz_Fd#sM2S@U#5x9U*+T~ge$~=q{X`7Kw0O-8B%xj07($j#oKnBU}ZQ; zOCax}h8h|>58%M835F`kwS#XaK-1KQgb}XskPvlBXFpA(#EHA|?Xd<8T0KKQc;JEa z%I;GXO3%}xX3weV5V>+7oH#BO{GQ)cr>XcxL;IC^{|T`5ntg?|_FCU_ zqlR<6H*%oF+^T=|y08%CZ1I|TPa_mb3_KbY+MMuUJ{XeZ9@^BX3(iU$9@LQDGq1UAvt}fa~UN9O) zT-~txpBd7v1)=NlG|E8=_2g3$LidXJvrj;$zJq&aT=<{>Kh@HIBp1lb(T?-|FhXh| z<^1X7zhtChO*QTL-UX*O1S&9~I&250uRnzro$dQ96%cfV5JN@#e*`!q6`=j|Y4y#* zm#uLG&&d49QtEykQ0fBM#j>93(SKAcxvLCH|Fx8S? zsfRexJ~JE7xy96Vqn$J$C9JL$Kyi2~NC3b#?~9HyM4g<9R)z~|Hu-nc6xZ6#2oMQA zX{2bcmSzT{_elO{*@pT(2vchlmr7q7v`Q;}EzHYUPdwH;H# z(PS-dbE<=+gqi&6HXZ0ipy7`@?B`;qqQ}4B1H%o3(?>tPgaS~D?vIc0lVsy9_!#e7 zjPBkhCAy z8}4d&?yEmE?9C^vdanPA{jN$;fF*EA zsD|*YTlE!{dw6&JmjPiq@`(tk(qct-1|^;bil>9g4h%j95; zUw-k-5w2s}3@CIrW)u{=S0JfW29RNXz7SpQZ|C0R8_1k`$iixWF2~+qC5HyvBL`&H zY5CbiJ&-lGL0^6=1&Q$29N^>`D6xQuK~0i{e6YrOzc6G0!4aMQLQRsV0RnKsKt=v# zTuhN?2@=~;j+st;*lXp{MakL?lR`FLAkS+{&-=bIQ`puh-pTWz`y$lzy05uP@y2dU zawXTn2jQIZA>Laan-%rMQQA44_J|FEkgFOnJs9ABwR6@lc%Q>H;|w`8193a@O05P} zg)4obXz0+73w4h!(#_xC5ilqtjJI(Nh7$#9F8 zW^(o|+Dzm=)i#%L`c{CGzI)sA>HGP~)FcPjEd2~QvBqC$R}OTT=&N>} z@@`1_({`egzt=1)Ql;2ua{T*qAjif-qqPs2U}60whPH*Id5)JW@PSM4A8c27=!%aS zNUpFuGH^@4H`t%zEt)mR*KdO-5aSV=&oMCM889rj4w@f+DYl=Y1n#pTvA?IkuG`&5 z*$WrATSR1uLesMNueyFcF)gml*r|xz{aHX!H>8`^eM+}Qe!@0xBKhXj`@zU1_~0T8 z|92A4wzUpmxPOw zFn`>}Yrh`R!HMiA+AXM31s#Tqe_h7`(6!cc3t2@x+r&Y-*Ikoum6_7D;BqjGnU|l3 z4hA+E#1``|M5@eIQZvt*vDy4-AXb-Nn;9Q}F(&)dex9=*jTe4rub z@APno^1~N~ESSEX>2)W&A z*obDZxrv2 zbErsQ^o0h>bZ2}+1CU?r`3lMA_^|%|4O*{J-y&4Y0MN5oy2 z$i>@AgLN;h{qoh`_TMx3Ow7$_^PqV89hmMQvukvBrSP%fR$ZCHD}YB8IDs9q;vw>{_Ozhb$`PaC(7IC;8#>+SY>2hCkJ zNv3N$0_4K_m2XSZYZ0{DoUsWcu&dPI>jO=L* zyUN9^dJ$?xgoUlR68_8g_QVqcOD5`S2w_IZgjVY-gT8d{P7;YKE8IwWr@wlBrD|uc@2KnHK6tY)B@JHehkI@ zJ83oc9<8`WPiID~>zyr?kMitUhdM;JJRO)F^VqWs9 zOHxSdMDma1X-VDgW^~H)GS0uZI=pqf)-Or?P08{8w`!r+;j_mT%+fgL#K@9C*TR~8x=y)fT#3qI5_(q2v99U?x#`?V&Nl_%zvg4Z`aRTtU- zE*Qpst6J$qP3Oh-A4M#fNtIrfd zab-BQd}t12#dai0HX`B9D; z=5nOiCU{kYDt{?S#YzxzW_J;mV*-CP?bYW`w!|iMciTO!?dtI)0iN2D=dELpb1gL zeH|Q$ZXk6)%uTV5$~j9#BT>i56$L#YRmQPa1t(;4jCx0jqoOAf8CVI>jwg{~7-zrr zn`qH#B8}Foblxa`&eM@jQ*@OL4~MT2CSU$SBCDz>_SBUP-gCw`<^a5HFh&h=8B{*L zCS~x?&T~@B#Ag;Z*D5M~e>13<5%%E*>*6nHB^+010)=$pgjeO?VnK&`1_$KZ?kp8n zmDVhvHfP^jd+1rsCQ8clBenbTo9`7sIxR{=^m_>_YEYn<_AW*^bbo!}s#YxW`UQ_$ zoE0NH?OTuf?maY%uy(Krc*FxDqy%5sBvJh4ug!LiKI-ujy-0*D)>0DVVT{wGm3e4c zRup^Qt?vtbA!64#GlY&NA2q3hLmX!P`a?xg`BnIK2Q)d6w)aL0v+ zq?y3Ce|9X9fMpCo3kKInDe$&3u%rH9*C71u3uGOU>*4rU=D(@;#Z@w&aqG5c&J^4a zeQxF5X+xS_CFWz!r`T)?DqdjEc5tyRfEJ%1`faKFAQgLH4T+*hXF@02R(7kykiuS^ z!m&31gSzwgl!@d|>*}~Dt!Bz;{C9)8lSHIo->#$Tm#Qv*qy2-hIAF%}p#hwAmsygM z9s<=i9{zQ`$cZj!OUH`r9;&MS%?Ak2!ISVy)`0U=)R!2p;J2d!tp}%~$?}@S`nI;n}2O>Y{4VA!!MEkcM*T{Zi*+QUK z8o|GX1aQtacj&pOzCpADExLLV@jMs&&vlx{RcRPTP44}+Px}LM#2GQKlu3ebBEA#% zXc`Lq>uIEF0x2Em)B!t8pqVLod*L^FvHH%3jf^M19NGbub|qx-Vubs}kkkL>tzRL0A#CG3DPlW$-Jy$79e}h~Hnj|3o)Q3)RwB ztkJ{12^2~FIv28U9(unL8~xL~jJL^0vwV9``UeGnY6Zdcs`698;Yatb28_{lty%mi z`uZ>+3;YI+-bu_3kc}ZcyCq@Dt*Z_&Ecmo!VBFt#tDJG#b+uvYEp8%GzgeOC4do>1 z+^?XX@mJ)2JDHa0=7whV@fYe6v8I{ch(%`j`F-BF%0p2A`Ut(V*$%JYQFxRgX%pv> z=tNr+r-)kQ2ws4I)5?K>w0vdG%?{%iHjzAD%xH60tezVNkpgzbYi3Ro=}(K5JCD%C z(r{Rdw%hEz(Kj&; z(ko$@=;v}824m&z(GpD_E@QN^m0w?Oo$zfGt-jn^5LvOGQz2>CX_sQkYDBg+zMQ|6 zv)Vm$@RcF_q`eewBSzXKd~bTD>4$-RR-(Brp}o+B1(+BU*VG`<2$}5gzPB3AHXmr$ z&do4PXNA))uk3RZcS#!!y7lpzk9aS`iA)AeS03Pqx1g7nh{*!PrGu$*+$1HVZWV^D z@{uc_qOUaUcc2lITXH%2ID+&`l8vh^n@aV>wr|Vxw<#y#r{o07NfZ&HXLZewjd6we z+cJ^(%SUrwbO5Q-eEpsuugy=3R)siKW!ttVS2CPNZ2GMf6c2l7qTq3KK1VpcX{IO6 zZ2kIO$@H;3^3apAE{w4s17&iGXGfI{btRTtdt`$UUmsId z)ML=3`=)Qqo#uVO4_<>KOs zZMy@|N^IVhx7w`iK)At5C2Yfp*XPtQ6#FOo zh{liP_nYPE<0~FL?Upxw4fDAl+GYwSndzLwsaB-8lpN^S&|EJ+a}D!8?HTn^*s>kG zdd-~&74E@ZYmNXB1oI);^J9ML<_q;;DC~Shq)`6XvgMoKT{!q3Z(RD$7FQ{9?sGVM zu_wJ}Mh{VB1*cD4%cp3R1QF+--b+By;J~y|#<;UPe7>BYu$3~rcfD)%_YVBMpWgpl z0GY8EHk#hwmK;kE^d532ERfx!xEws)p1Dh^y|@<#ST{YvV$g zaK*bTk9#W0vDaCG{b~WqvD%1}6r1^|bdq>7y(kIoz#Xi}T z1n#~Y_1=@9Xbex5O}ehXOnT8oR5F7CcQV^_fHbhR_o&4=+-z3mwy}Y3A7PdYT^(6B zIGWh(HCg;{bydDME$(#?Z;`*?A*y!D8!`a=m-f<8!o!a(U{ATdQhEY2EBTLb7~wmu zGafHv>OofCbVDu@_(rR=#re15V_q-fd`KRon;!Y6`Y6M1wSHi8_V<6x*aZDoSKTX~ zo$sWFThgxQEz745S7)0K1Y{GO;_QYDzWYOe1$rN;PDDqQt=o9jF4CT?r-3 z6YP_-&gTYBx%=bYOT-iHAMUgr>%-&u;x8DGzsvEi5j_iJ{ z1erUR%z!rFv^q;L@*2aGzxASdqmZ-mya;B5_R(78} z)#0C{m7^{5M0||DFdW9l9aC$O^89W-FN9)Ja$}|P!}TON?m>|Dg2*livv}7+7;gpZ z%%Z@*u9hmlx5hWtw9>e~ZpvB@P_TsYl8j1Tx5qhOLKbSiy<7Cg8D9y4pr-P7K?E1_E>URjY%LzYl1p7C>%)I}bsh^Ap?p^LxZ;&*ypq z_Bp`FPV+;MKu}g!3%99UXG82u^nD2JyB&Px)Tsju6WFQ()+x}J>_D{3xyNlUJ>)Wv z?E`Ddvc>!*WR-{(2FYQJ1kr&E0Ijw?4IlPL*{~q^_ zl?jr)_`*mKn4aiDia{cMI$-w2h=vl=@;sO-e(s|dOdK6Ak8D7B_Uae)w>QptIJ=^y zu)TG~Hk@{JUU>nYgIJ|g_BJ$7$GE(N0ro0jy6>C0G?G2Hj?lC~c5$p>Dp9aULqo)ThwX{aZ}={si=@GgFi;I;G`7FmF<+T}$sJo! zqp!Sahv4u#Q74%4&+xwIz0VnebCLM-F@Tru{|sRc_qwQsBfvR)C{527@&=$o48;>` zmBd5p;ydkc2xeJQtMWo`YW1K zV+Xcx!51B@J4lo1G9e8+yPKK7T)74!|ZvamLc|@2bPt*PZqzu z7~9NNI;jP$ldmpWtBfw5v&2rD$|@$p^x?Q|)rFj1s;OxEDkMa8-F9U0yUx5_o6&wb zg6ihommf7{!cW~+bia=jyqsL_`l8Dejk4OCPbF>fa5PY5G6jtMO?dk)*1l&Ppi=V7)FS;bZ zJQTmKGu3op0k_&vx*#AB(&7BCROhNVzI~4dH;0dUv%Iys*6F|1bx^nbN4HZpgl-LxFrfgl)1*yd^Z;9zL4Ij(w|A`5IIG5@tGA9@svh)W|LG5B{r ze$Y{`X5(hZzc4U4j(vZnyMwW)5Q57(6Tdf~^X^@txe)Oiq>smBCePdDCo?{C@Wm zqYd4J@zbRZ>$cld3h&&=P!b>ad7`b3)yAYH^njQ{i-ctiCsMi`p$Ys`yCoOe+kdUv z+yX>j9(2rXt{l@JE%sq1mt4(biV&QN+`sJ3xOLDL zMTUSctLcsFP;twfzY7YyuIG^xq<-_G++sY2(EejV^;XK{eh&YmOeKR((+L&fvKNvS zeDtA`G7e|S7%(leNtL^6jUQEddp|RSH-7*8*c2uC%3qc z)_yyZ?XJhJH5E}}WLING`nLm}y=f(jP}{`W)jx`L^xl7L)pZtN&<%VF!*zk}ZA{O*5I zb(URih3%IQ!M#ASqQ%|at$3kO+?@*UPJq$^#fn>jLh;~MJh;0BcMk*)&hX5dXJ-Cy z&N?69-0R%ezV`m@V;y<#SHVi&aaXL>mPR&jUJ8dkcxncAIHAn z!5a@7^hVX9c%!m-=tM!w@|5?D_{n52hh^o&f(}ID?hV zhM^xG(g6AC7f3S~?U=Opbz|%IzF7+@Jo3>wU(A=*YFse-<;941>Bn@Yy~HdH;G z+U;jHP|j407f%>oRZg!;ot9Ml+if}%wa6WL6s2h&{*OP(6*L`YfhB7XTwSW}O-}8` zktsxErIb;e49C=r+uw2Fx?FGVxPNe%_vW!BPmv8YT;Zo4iSP#MaFLsCs73UT_yknqgxo01G^_*&fBnoZ7Y&NWL#&}$2)0C;IEG! zT!5oT@vI)QTE}C5lmTa4MSi>ptJ)~h>~VT0GGB;GT&c)wW2~9s8Z9(jm#!Gf;r`Op z_Xr$VzzE4I_if6HRPqfA=uB4MgmfCvF}kvg=GGUIOJ$K%LQJp7`@MmNl)3B8&gq>K zerC-eEAXsfn9eQ7)Q5ZhZBdJ z(4}VZT^(@7^UV+T>y1HoA%W8K0Jn!Luf~Nl>qf($lo-iYgY4|D{t-x5RwnLiy+w=H zs1AAy=$hA7dnc;;U?5WB;?XOsl7z#_Zv6V|N;KR{jk}0hfV;?WziDlRXryIHa!H(6 zp`$-eU}22KE>Dh@Ue;g z)<4$<&~_)v`!U^>jJYzW{y_Ly>{-RF!Hi-iV6~;6`nEPW{$eyHc-s`6eJyKU*@5Z_GECegK)^k96HK*46nJ?p{E|WNKliyzJ{{R&DRh| z^P-iMm6QWyt%e8DLW&~iMV-d`3$>XlUu;?MPWr$|K$iRV8k5#fCYOAYpP$`=9-@{_ z6S@nM!OU`IG`#jrc0L)p-g)W&yp2V5iElW20JeT_6TypEr$UR*2E7%Ncnp8ijo@J- z!{5K!H^=A{3-vm4uljw#5y2_R3gQ9&)J-HiI0zdBFwtcaz!rr8A7f3crUttFj0!u^XxhZ05Ih#nd*m>oP%%G-ZJ#!>3& zbBPC~8K`<>H=$CtHN#mkt?!a!78^<&>SjfS@9~~-0u_uWEHhE_oIm)Roa$Oq02TY- z@4^{(OaJ{Vf47#>B}F5hQb}}bpAB3md~iI>VY&r{PW@VC9jnvW;VPwY8Fvd8CAsHJ zX2ZUwc!a5}j)>nv>j0C;6*3lLlr(B6G)Q9j;}jQ6L9CAQ~;oexLw$oTCV|E*Eo`PXvDH*R84sd4ZAAe_l52|1FrzouwAPcJti zdJB?qCq-ooHYG;Y#2bTZ`#m`miR?v&IbIis4srrV9hvz{8wB`-Y&npo;F5LYDPuX+ z_~ZCd$3askCyq5{jDLdIPN#?W^0z_u&hVNXi2!H{JYZ(AXEUynAOw@Nsw+E?LT!{Z zuOm9>I)zcQ-RTNg+iP0{eW?oJAlkZ~(ynj2JNzjm!S@OGD#q*K26=9J+8G<${d!E? z8Co}BgSY0@B6-`>$dOFeSaWEX`GIdG)4AR1<23O1R~I4Sdgx?+KkRxbc5#B)*+@e0WKWvTWoC@JuIle^1(!TTBcTo;R_)GLWUn6N)B#O9vW zkO5nwCJmFHt{6r?M_KhklwBDiM)A{Wx8>4FaHALgGTXYZpYMli_DjdOmFgG+BHE+H z#ll?dDo(C__5IbzZ>wR07#@R&F?IahRidV9V#_Wktr|+d)UYI{loN92J+C7ZZ;}rk zgbunvVNc&GNRj>=$(wJBlc)qR0CT@`s!3b@K63vR2paOS zJitU}cei2;Izv5rnDZ{zws24VMH>8hG)}6tl*%~q_05y{TtfTXL0YR~bF4doy}pyT zc7xbY+Z}gsup(HSD)1g$l7I89{-)jmJqr=|xG-ENZ=N(JM?>Z5`FW5l`^H3pG|}s3 zDVQd_mq{vcm@rkUx~~CmloaI97#HJ5;cTNK%`u{G2R$guGzP1qkT@z8=u`XhP-b9t zLpz%s27l^TE-o|Y7$6#h<3G!(S{(jbd+yuCle8gzU%D^Ako$0cDb^L*a|#+|dE0R% zzBVf%+hz0jVh^|%$*!rXH7eVj3)v`voN6o^vL^Z|mg+_pw$ZEJjH1@rzezGHA$--| z$Zb5zgO_DbYGoHKN$6dA^&>Y-`;mzy;SOgafCSVo1Hb+Dw|GL4u~z%GL|efSssTDG zLBT`zS2K>;jm4@ytQ@dc2#wfG=1(Nbj}AOb5d3^>!O)&OL7JoGp2FY`YMkyqa3%)v*8PHfPQfu?}5Sma`) z@AJdX2I~GIDO-ZAQl$qlMB95CMAu|rGS(RO#e+sy3@40e~OBzE0EE! zFdl2+Y^#bo4R(ch;my#KH7nu%ZaqXX_{w`OFN#F)_k#EIep#siyLRHDq`#YH(}8_I zk?dla=1MW> z9K3P^Hx7ixMzx_1JSELZslu#VWD}AL8-jcs%*nsR8&2AnG43VMNB}cFYocN9ajM(1 zgGhSC77T72(Wds2gJj+-qkL0y?9*gGG8DY;-**T|;;s1JwK-Oit;5oO7r;za^t^G(dnu@vYU*tu08i8H&Pj)0oRvRqCbpWM+T>=V~- zt<{sdjlOwX*>wXpRx$+#6ezkFBGcX}^`{qj* zPVrb*M&^QZ!Imo_O#555BI(?->QC33oXii^#Q7t3E4u&!kOkQ?#tyo>T6#5&yCfrx zs|8PR=Q3 z-P`V(@`BEG#AUaY#eUt;_n5IJPjTn-xBfAo`+&##QTZeI_<--ONcTu8IA*aG4P0;S z7BK|&?pI5PZSss%+(EBUPY6yiLR5apOzMFj#mSXBbnj2}9K5d1o^`B*B#Tuo46?{>oPCd!Zyqc>lV zErKtfzS*9_l0W&EK?>0C=qzURUdFf>_H$%NQgh1Ty2R7XjIH?DAS2bEk)YGx_vOa( zsafXLY>bDw^Fc1>c~nwRYg4NCZ;?1la*>w28H4eYuyUEr60?xWR;hN=4-zX4&o7N{ zH4|#DmS0jjEeNR=czLRJssUWS9shtxLQG+xOjZWZu95el zOd;-+Pp;Qi5R_l#WQ@@GPuLh9{FyvFU`>^xLED_*tH!z9sqHItx>pdd`ES3KS}?x6 z-4|@_9P1rhwA#PjqkP9(AKf_xf4wBFE4!q`{X}yZn7*<_|~$9)=`o_6H*^b9I&Dr5UyB zi?=`RUy9)hAX4!Alb(e3j0~MY_cr{0@DWpJFBij`3l5-IpA<{sVhBzC1mh!6CTsmQ zVT>nl`7r(~1;_1n0@{vr*u~`F+;ayKL$*d;WZYNojZtnSU9F*}5B{!?3k^@-%&`^y z2#1g&goP0X@4+>)atx^a{M|LSsdA?&U#Ri)yqE437xpgdUChQ!P8$!%d)E3Wv0g#K zc}WnBJ8FvO*Y!hQ)_8K1EVbm3$oDP|!2J<=jNG_L%$Oqq46q)Yw9iXIbbuWLpojq{ zAKlBW-V!f{bh>9D3$;O_veDSLt#j-$=uQ7(=^T<@@0}|PP8ssC6A7J9WTGTH#cj0MFvN(mTYxA>=Kmu z?;9S85QaGT7M`U$+QZQw-)&|8P5Jj!!zXE%*l{o1Q0V(szpwsz=O|zNMeLPqNShfp z?xB>nr3tu+4RFqW35mb!!HZ@dHPntI++Ny+JNE=`t9tCV;-91{^+FvB z*mCG@_$;5dSGFVVU!qY(+iPhwG>vaeu}2OcgcwuCcxVdOt~ToXn)_zcN=-Qr9^G!5 zr04Dpwj_Uxboy?=$vh%!zJ!dHVb^N*Y5pgt958s&bYG>L`c8^0*04C>|MOLvA`*Ys z-1qlN1amrmoKu+>X@2el{5X2!8%Cq|7o9UJcx|XxVJ-f3ZNp6b8^#GbOX}I>L2+s6 z2(xX@<~<|@b5^E10TGWTu#x)ZsNadLF=dc4pyimz)#;SaD>#VgB}|Sqp&9-0kJ2}q z&s8L*o4j;z>Q(aA%C9Je%v|y8fL1!5N3g@6g^_tce>Eb4-b&vCK{a`gP9X$*pRBDb zCJ^Nd-9BZ`T@baoTX|InKYJR=jfJ;~*=I` zg*w(hUOmlmNtvl|?%JDO{4J&uAbKJE{DX5;16rCu%Z}nx;ix0%{q!cIs~LH;drWvk zIzhmqASW}u3Y8Q8=_bceemqEROk*)V!6MV&{~gEdYpafsWK-Am!M)(Gj`)(*vGEq0 zZNd)iHJv2lct$&2e`n1_Kd(%6Y+hdusCCqR|3Tew_wg_|e`^IBUK zVolTR_AXH(DNEapaDdv~ufT)KgvJ-Dtq}&^-j%pGCbj(bQmMi9 zo!R~;_j;m1D}9yOjipO8c-L+c8Zp$nPj46Tl;?@s(h{>4Rxr;#G2(fG>-<^g(jE?(SQ2J&-M_w1D{mGRWMnv)SOP&iT>4 z7%f#UZ|fcs=bmb@Q{`=kwlyJPld3)U`!BWQ71y!^CJeq6Jh$7I4^fAC~`^JPNh{nIrOiXNgz3~IiE+hCQPU`M21h-yD z!pBrmHW=eX+*o3ZiH6?rq4~Ug@0tpc)4uiQ=itl^6r~1<)@PS_UdY1~AsbR+!U)A3 z@=?5o4xo~Mz(guT{Tp$m)$Y~bXlYP6;2P@cbIjHWWjU?3cWxWQjVRF8z))fjY@W#Jgu*Tf4nJoHsf8m)UOh#+P z_mM%6>=VJT@`$fViQ8W!bsD6@EsoHj578Fr%;9cER^d3mvsOd=U-J#^==6UmRkcs+ z@7$Bvt78w!xd{39n6<>o9m&dNMocHMm%-=y={0*ulL-RR@ z%^H5&75V5WdBGEX_M~9-1}_~Z{aB+I*3iYJNOYorv9qtsc%Z5U*FY)Qp(MCr{yT!- zJ=ppJyt@Rus9k_NCm&BITKzFkuKjp{Hy%W(Q)9Rj_Z#c)8e8DykEyY{dZaRQDid$f z4&M#=OakcMfMeVB`s0uJKw(qY8Lrqu90;0`D(P)?Y(SO%8u=ml&nN#%(4pj=yb$u-4{qo64kOXyvh9G!{b{x9vHLwa$jL+qb<4}j z-l_pil(=0wJEOnoi&SgwdvW1{yXLoH-BM-{x``_-Q(HSj5# z@q2|~zx()Y1uFNX8o*Q$HeFh(NSF3x0=PkzQ$UxWI7S*1^Ur(f4^40foGbp2WBbc3 zEKtXe0ey4H_sn@s7}@b>rv7s0LycI0jhW+`I`EZRXFgVaCG1k=$mh_oOxtDB_WFS| zT1y1Z9U-@3&(3@mpi>YNQq~hCq%$ z^2xNaQ?iMD(9u^gn?+;;On+<$BZ8ZrtZnhckNf!GnCMfbatpnCE1jO33OT^6Cs1Vs zpMmmU+}9Q?rFU6=-4z;r5YmloOj_z3>3oG>1nHGuEd#d9$x~KHnDI^%CV83!w=KV| zxl93tc!JlRyNh}#<#h4UyDu(A6Mmt1$J5w}p)_Eo(6u6CtdcIqHNheQGHKIP5lAgG z@N|)uPY;sFEo>JuPI9j-E?F8 z({Vkr4N(gXXQ$ZJ-m}BdradDN1~>h2u*O5Ol6NPf=YeR-(n7qBF}PRF<}sbZUCZ~k^_chia5Fs6Qri^s(?t;; zyUa7QUdLYXu1xhYZuWEq@`P2oadD^x%{+-qEcs!dzNG6iQ!B*`FZe7j3VGd4# zA0;#0BnYWr!P3q7hZk4_G2X7W}STBUbzl%qAF2Wt=L6s>OW$H$}Ul~dub(%S2rTmU0_ zq&t|Mwo{JUZx0j)P0oq*RD+QQI{z)l22!6sjy-SA?-3VFI6)pA4o%8hLq4Ig;#+O#f zg_12$mrsE;Mg|E9O8lHjj7BJr{@EC+`nbtAYHHHm;=eMNm`M3VevL%}()56%=Ba9N z=A*&Zk6Y+BZ_3>{LHKV~A`x1z{Z$WF)Ru9Vl&a~=fA~sh-bacC>T+CB)4P0NZZ|%m z33aM%PQXxL@y#%uVM_aH35g|xqW0*j0|sA&Ob->BzAFc5q-*XTMF6d3(VlyKX{2EN zK)>6b>)NQ@c;r=p*U(~i0AKC#(LW&Q=}?K;@w_(fcmVNi9a2@~D2NZOOKV64W+Arj z-8HnGEV}1O$=mc4EEr&^bn&L;QMpk!M4QclwHUEOMAJgjBA?v5<%KGx0fmC4B05Vm z3>_b80aqE)m$!CUQu~W-O64YZ4?Dt78jejioap$5!|g9kg8M>}iKR?8i|lh%_LYJw zLHdQPADLIHzb#6*!w#y-&z6nny!IsZ<~z7s#s?9)eu_`O{NvEuVz?t1HQ!qb@5DW> z!&SUOw72V7Hh5IkG;tWK{4lV2`g&An76LpfwkK zv0ko|(lJz5M8HBscz_n|?}Zk?uc?ygU15bg`1$>No@2Xd<*4&?3{oZ+3MDEp- z={Y#>c_N+3>z)a`H7#*(zgOoYhE6|)pHQzd+WMu?e*B3st2fmg+8EN42mqt&aQ{xZ z`WH9yve@)Rynr_)v@TOe7_R#fS2txu2v0A;p~{ctXNJ($6w83r(YRy$hVKl|a)Hcs zwx2y_3fFv%BZZ`g1RQ<+y870FX8nS$nbRG^!6HJ1#;&$^gOz2_FNlRL7FVsn6RAJD zbL4@s*=KS{mqhu;QxxA+4x@J=+OFga_S+{D#Mxj&9D)rE28o+Mm&an~@oI~oE#~;4 zBXZV&7JwgobY@dgr{JMMxg;{#F(E^Yy)pi7jiLSovk>KI^_@nZTqk6{At z`{O^y=K9yZiygnNOgJ>KmPs<}-*D+Xi*}2UkBUT?+!iJ=8bCROvY+o0#a`BHqyIhZNE#;tK&M9- zCN9SxeTItui}gJi5J#4(_#L&z*l3KJeY7wcE+x{E!Tjl;tRdFD#29CVtyQS{?ZB@M z@+TBy_8knDLDT`ew2wLob~90w<403 zIOs<1MF~Kw45XHMpOop|>3V{v6>Uuln$T(*>jSWz9yh7&qC%#J*-ZZt@{J_AWr4l9 zEdK%uE440FHWXqe!*PtUI*J&KdB1}jkv~aOp^Secoiu}t zLIQuOsnHu=_8+)H>fshj%yc(NME*!Gbb%8SXNGkl%ZhVvbAEAhhV{a}|D!*MR*#xg zP$cOD1>S)$3CMM%f5qi-VZ-CZP-7`{tF``0@ zdq1766zSq==H3ZQ-z;;PP~(8zo=;z}XP%~Q?@M~v$E&erfQtvYcL9Bs(&J;_bV{we z#?y^^L!!t4+eYF{o}&v5w@;0SZmg_cb?JS8zH{#c@pWN$0hkWYquz0?asA3@$%WqU zD8R7^GVS+{yUfO}9f=2sWy|pgc(WQsW$W75po%y%v(!s)TthtYGY9x({POhA5Or~J z=u>3c?ea3%waipPs|yrpd$i~%H5X7^+JgAWT!D_f<=z;5?TO8)>Uii~avPgps$FaC zUo@uZdZ^nEPc0%4BVMn+Ke7rE=)Y}%99LM?*GpP zGC>DGua&I=p}L!Ww%xhdLiKzOqP=49(x zPgga`%}CF~MJor0t-~Bd{hrU>4WraFz!5(=4R$r=wZc3ZLV<}A%lPK1U;G>V-#z9DAU+!lB4dQ6@ujFF0p zdRm0itW4d+y{t({@AQ2_DVh_p0yy0B9pRZf_#2NSBLtCbUvSq60C&^Qqm-3H9=UkH z|C!t-U&{2lRo-(6T*srRcL1l&q zZy9K}d2DiB z!#&WfK0W8cP}>sN#m4%9lYDuP1)NLU%j%ZN3l?oF~g4X;F*Ua zE%XH3eT|NAPG)H>08*^(rBh`Ku@7R2>?8uAhUyid zIrUqb{57q7kma`V5Aox@ILhh<=jU`?Hr}sRurEIPj^GCtMfZjA9bRd@R;unjE~xnP z`M6^TTa#zQ=dNYB!fTqwC+o%^_AW(NXr;C($+M*$sg52V21lwl1UH2$7L-IjL5{k# zr;B*vw+EQ_H`_mI9#Nq|cP*ua1$*xi?wpL$36S8Xge)@sPza`Y@TPT4hv;JkpH%@f z?*WAiM%^=EM;41Gvi82{n^&v7$XoY4NA@QTkmhR2K=F$S?_T}>hyj&H3EJzod zU9XR64;BS6TD#eMo>@d3k3Ix2A3ugnex}f+BO|O-O%Yv~w_#+g+Ush<=MeN^t)ifMr*TZSS7%PJBYkaN9ew|zS{g4=vfcJ19zA>~DC;Z? zH9>zC1>UIE{!Uo@f;@3yM-<{~tZFEhR$ZX0t4O@&v4S5MDiwX7J6XR4@>A9oBC?`z z{UGT|NV*!npTf|F9^5deR$mseASsfd zw*+W4klNUeX`8dB+=(3o3;!&jUdyVT9xo2n+WNCp{>NmCIk|3(Ij5Q}=hNIgpMXHur_GxYt9b1 z-RdMU)KnF_(%iBRA=CbjDn7~y%P_i?7e}H{TH5Mys_s_BXA=E^mF`}OLwP%6ByP0b znEEJ~Q`3A2-|AR!_}%2dS#LA^SzQ(|qCad;N8#*gD1v-Bt;&cyJM$^oz_)-(#Akx5 zbZ9M^J@v1%COgu#l=$Cvs((SIh_|pDfhcA9u&CCTo_gTwlWLH!K;gMiL+Bfj~xc*pjzQbp(Aw zUQed&*Vj#>S)-$xHUV#->?7mQ(emTRFG>PRue!ah@X=@Z=g&2c)>6@~*v=@c&g`no zNAK|O3A}2e98H#T>^Teipd#;H$>s+p=}$Y^%}Xa$Lh{B5E$s z6xqLdk6GzkAGQ|K%C9^e_oXz1pg^1dp-tBdA>$Cj&>#cgi&nM+) zm==DUmrYQLEUU1u>q&;ZU*4-1o%^1Ebtgu$_T^gG(b6*fU!UZE9FsSM{s2JR@I0|{ z9Pj2j#v+zMs}_zS$5zcW?1E)W-#a33m7j0P=C!rLp9y^SSE@iCR*)U~+!T6xg2e%N zOIzmf(mH7tfB0t7qWFVefE;*-f$P=F8km5TGKs*#UibSKXO?iqCToM=MoWufT8opD z`4;&@t)|lS$aMlQOQLK4bpGhip#$e35xhZxnVZKKS2Z<$ruYRJsIKv{)Rbss^;XQr zB%fleW$lu<*Rk1s8DVRZjp5y*ABfjQAPaKg5Em9=&fSoZBdwvsYiD|_oJp*`a%bR+|A<`Vmq3sEN%aUu{iN7AN<3-dST1|J>? z^H9Zhuf9eC5nA`f^x@Q=DITE!*QKe0GwZ5YesU&x^w%QA9ZCNC?)dI@Z|l3~=QoFHjT_31gZGfXzs=UYm~lGeal!@9`G~9L1c+1Q^`y@bY#kdXl^3 z+U>)^I!q(HPCoH{D`R2cZCV9Hc*lP0-J(-dw1UlzcJa>CE? zKNqDE?eB|$xDTCkjph(5^tlTP5EFK(YKVNDDjcTDiJe>+YjpoG;^}{U%ndtWj$5Eo zx^q;K0TYY*q=&`pq6)JmPt3Bs8e%=ZZ@v!P?(EKp!!wc_DXN-*5B2?Ty|I;LeL%Zu zm!$d~>x9(J{Bxpigr%oAD``Z@1@kiZw=Sl#Iq9w)0B1kr2(&R(3()I? zDSp6YcCRf>T~U`!?KaEpdYv$?x4nW(FUb+ETzd{kS@Y*)D_S9E#H$TFkvo80JV@zh zg_HV|yy6~Qccn2KEAE8`Q_nK zTPp7YXGxD1VG#*XepbqjzlJcljjBY+6$5_U>haNrrx7pQt9qt%gS9T0B4xR53BLex zHr8BaLily=3^-B(SI2kM0$$yy*%y}Z)KCVfHW4dgTq_du)3pI0#O|+?@y@OQfBQ*y zW(Tu$K<+*XE>iKJ#<$7J(B53Wn@S^&y6{F3(x>P zM9GJx*ejuh97=ejBtq)Td;9?Xi=P3Zz=_HW`h#r7enp3qWkX{UdH*&5)71~uXz+N$ z+Y&79%17ttB0((LrbcH;$Y*(R&p7t>+Y6a!H~uR$najv;&_-Knoq2(y>;W2)5{3M; zVLL1Qz=HzwVNIT|O3uno50Xtkf-`#x_oFGxS@_}?6cEo5@+m;SiTp6dvc>)Y^T z!Aw)LTL0j4_I)=blIvH<6Oe?0Yqwx;p7?tXj)3MCjnZ0CdSYhr?2H5_uz z%UOPvlBtxw&k1y0IJrH;KW<>AHbhMSu0fE_D%o=>jk7UFEJYn@+z8&rC&1k{mhV$C z{@Hn6%$HY~5RY7DV6Bwf6SjQ28j{duwfGY!b9pX~ZD2&g2YAOo_v+E1sq|@9;D9`6 zfXyx7$vjbQ&9RR}^3)T3Qv4s5%b)%v307=vvH?pWqJVKwzHdjZN2ipGbjjqJ-MVYQ zDxhnkY~t8t;;d@+>sKTLcvkjaKey)ris9Hg9yCrQ9zg(*-L)a?G}zqovJ4ulni-x` z=!jvKxDDcHv@P)tZeSuUeSDpV%}fZ)DB;sG5k?_fq&20WLABAi0ScATy>VWP0q1Kf z%J}uEHDn<5_gv$F{B%W_`p8o=h%ZktJR%=OeGiiu7j-cc5ccX-(`7rA`B+9bA8A&U zYfNAh@5;HjIiS6%*`yTJpaSnzcELZFuC1*}b%TG7=AOHQ?TA&Wv-A@V>mCRTKqyTZ znkcgRH+%;Bjb(=|Y%A7g>O1bGy8^-z;49gDpk*6bKLtugg?@OSSjeIC_mTIpOZC$^ z5s^>1RCjakdQ`~c_qQY!W;G?X<_1^RYcYA;H@0`OL8EgJ= z7I(1zf&! z5Xk04=?Wvz^$Abn60;MSS03e12Heb-oge10#i~cn2F47%oszd0=$FdVMs-PNDh zS$aZ7f47LpGi?cC%qpsA7|ZtA{2cNu?g`c!-J1$z%Os{Lu0gE&Pgj_>SaEWeztDH3 zn2lQ$#XOQ9uN#9YN>u|dGRKWt2o*iGN<{>1E8Fj^MC?*sa7RZufh!1f8A)PFq%ChR zRYZA8Hkd7%KXn{659P&e)@&a{Ns-L0DJ7EN1>szWyPrYX;ZzQBHGI8Ny*Dw@KaZ)V zgf~Nb2Q+k9z4N$(_e9dk2k*j1?pN(1f+|er0=UK7UaX7`)c@`bPl-1vSQOo?iz?VD zTgy*vs8?fNnSZFB9K@gmpEz!a0+eJ5+&m&wM*}kt2%jj--Nw^|I~C)XDHrUGvD9$x+&l+hNJl4fO!J|qcHIA+&D$dZWL1bQ!dm5OV33)*awei?T-^BAG;n zV#g1uHB(%XjSRHnTE$dKON|`@GzzMY!!KOApRyu^_rKwgUXccPdVX& zv5KK#7*42I3oXw`lY0?zL|b9u+}+(>vP#egq+Am6<8D5WRH0>bd$2no%D%(uMtiE1 z%+M?%Wq^@miCW=*~=-o)9lm{PW2{CYq3Cq+yr*8R!7&=4yQQ)x0zS8~@H? zUViy{HbA?Z#^5mw9P*ZG#6IH%hzucV7geIFWGC>9PGyXe>+X|E6kCDe8?+xBaQmfL9SDmTwM z!lQUf1-8uc>3pm8VHR4*`N;GR*xx>P?)2zXqg$*Qg0LqFDhy3s282qDq)B@{I6 zE8KMquv#aq*0L=kitG*ji)RxTM z;xvuX*2`AM<7Q0Vm{m#YX?Ixf0)oWu>^$PYZOd3~Km@w{`V|F+a+mU+1fQ(aN`Re~ zg}4TTuW{)17{0ANra#~e5XmEY#Ul&Qe>D<^Y-{-mxc<*;#RU}h!P179-XpJH2 zsMA$cO*!F*S- zU?qf;&X$MPRt?9pIOtMX-sc*_sJBeV@+ve&^Zo-$}ef8%-^3h4}nH4Y2tn#Guu)_Zc`A4jj=#$?h^JclcE0UfKS+DCi;- zI+ZDmT57K6W>_xsAjzA%885?=gFgzb)WAhQ-uuz-2R2@V&o58ZAmTkGuK3wWG2()3 z@GKv6iytwo#l~`^zhVQ6vh;!XRWkJbei>l@I1sZpP2=4ox?F18#oluc*%{Z;v8e9f z^DFz&KU;I>rwIAr4RKj#i1Spbx4OLb8N4%K&w?UX-e7$*NN6?AF($^#(`R7S7lF$- zsJGPE@hEw8a9F3~=BEabwDy9n=yUM;c&@Oj^e|cmn*sjBF2xzmKeaW8xb&tl*H|2T zN)Oyt;mK6OOOtxwgp&Af5LJLWzzMh=v42+m>nIGZ>~q{*>^EFNMyM=+Bka?1&%$16 zJu>XV|D_tab*vyrzN^T`p%@^f8?wRF&5p1XmX>L#pTBoSxzFYy~aRw^rfr#9*vG2p?9 zH)W3dWZc>3d}{)HcAe8q4vg1rxxU0al6P3ZPm`UOf`SVS6*sPyZjO@wxz9NE-w62#13W=i3z|;rQzfePgh*m6hFvSGGpzG8tJzX z(*{;A9HB2Njx|^V?`?>Oq<4bRtZi9WD zqhQHUJoj^-QTuJ3u7KcTj~chp@T5Pu;)Q0W1ArDu`3&2=V@QNGN!I>O#$p_qox>8T zgf7-tnYqeJqbTHH5hvLMv*-;43`!pF&$P0dC17VUYe@3v|7ECN>mE4n z2ZI)*bp9CO$Hvh7yeceYJJv6}6)s?~+AU4;FmTSiQ-tk+c2!2y%h#U?{2L#nCLg#$ zvmWnZy`=PLw_?@Z++17(`m2^NoYm-9(=wr$ANGGrYu?*POkdv}b>OR?-|N2HjAYJE zF|BqOf9Y?^{GD07m;KnjxmjK_i1J1Mx%IS*yP$IX$M(YgiNEr-QjDoc@Z#$8I@Rs* z5e!}WrbM@#b1`ExaLc*Ff%Q?Smbl{8&78OA}p4)K$ohI4hBw{=1}u64`|XEwHc^ICcDOxzdfGxuySB!P6(@(XUzdjvYNUr6sI(uTrDj zZd=*u&AFEnBfsd{eA1bc|K{$t(wT^{)v@A4bsqh1)o_S^Qzho4tg|w#+?b;Q*%VhD z8pD(Z1MWAr9JQ>$|8L^vC42LJKO_L)CmqAjv2iKqqKf1Z9Y)XN0|@hP`V4$z85Cxh zQ5XL-9}y}DD4^ttMEYU%{uXM*Zz5_}0b{st4HKt|7;XBXKAhyJQc_{no6MbMk^TN) z#HN5Jc<`xaz)(MZP{Om1OQss-oCodJJq7!9#~oVoPv;AGNwSTasm0w75Oz!)A>~6u{dALux`Tj_Fx=rrbIKe z7RTCMSN4aZ=wLe|8UT8ZA0b%TF7)_3 z(r9M937PLtqCJx`ej;Sw_M`Z;6|TqGtF?rQA{s@MctP@dzKej^FcCMz9)DnLb&C2J zDsu}Q*@f^Gj)h+e3WhtQ4*rLFWX+qj4<$TVSG_6ITmPy`nMw5d0n(KURp~^Mjhs)S zZ00FNc_BllyDezXrtJlBKVCqW`?sYy>IwW<9;pfcwj;#}5}i0E<;njSU1!x7Rp960 zVdyR?=}t*O8WfNYr5ow)k{m+1yFt3UVF>9ifuUvy>F$PQFZQ$lz1Wv-qGPAjhfr!w>NIfB_$k@^!Bp0=kqsxyA*XRH@6|X**|aY zHAQQuu6!-L8=m)-bD9T|){~t}FR_BJEqSETFr;zw49qA9WRR$?-q3G5pA+<#e!|Lp zVHNEu&`%$4z;&1@)JSP?7Q-ar)Zr=2s`(^IYyxcB)Y5kxuNI-SY(i`Tbka=k(B9b6 zGw+z=c_gqckj9J*Ni6|udr0l1U^Tbn$F9_FnD0++LvsuD?TT_FIEC!JgVf~fl*f~f zQ)q+Fu25w*$OOgurtCe!7GqgZAfDnRBPosj0S6(m!8@GsG}a z!)ZIlpaa99t|xA&>e5?5sL~XEOv(3+7LEE3N_8`MDxCOZG4Hv7UZ2k-+jygwxh$@` zc!L}9H5Gv{K)XiIh9%D{u$(DOb+T-QL2^vbzw7}-&8roF-S zp4Nunnd*yDkrJQZgB^ZsuKH>^oJrA3V-Y4_|EfZhYci8SVjhkSxl0pz)Z88_in~rC zBqM?0-9sDNnsH67K|7{=hgRs;1I!pkU%`amDyC5{Vw`)bfx2pe23E^|wj`qZ*kdVE zNZKfithAqapdx*g!bFA__mzibkw`+vRKut zBif^)%!n!zw`m*Mvgc$9Qx2wr^mBx#L^~Z2cmQP5pfPJiCO)Owoz|-1{Lw$L;D-p_ z?57a*Qpwh_&a}rtF`q>_iihfX=KH0fO~?>L5oz<1WsY6((@0TIBU*|lKPC}8^=eqx=Nt>-iRUlOoG%>K8yEVHjxpp32Gq9 zLQ-aSn557?>EP_w5t*ain@`UpdQAkzD3ka^HLJU@=-7&jpoDxmIT|ArR9=ARR`|E5 zeeHmYtfetuZHlW^_Q%c^dXF)op)4i;Dork0tg{-2(&9fZR2Rqs_VF#$7H;7((Cz3Q)?e>|z8_>NsG?4|9?LTE_2xB&mpmlLA* z{@pHz|D8VGTDW1ITD~VTXdbHp|6q)9MFNPoLIhtwpmRd5SYO-J%bbhQU(A5>QQo%Z zS0UL{GETXl2SbG!#mCIle+k=y!HdTepA0b%|IHM%K&o1xKdxz3wB~$O=_3*P+X4)9 zbMQ(HzSDu`XZzDWU`Vy6xA=nX(p{s!PYl`UNLV00x=mhRKk$RPWY)820@?u&{m*81 zyy+E?$&nImJyn~&HLx6Ed7TKb*to`WL{kDz(_(?_3ZOWJ%Op|rcP~G|vw!{P6n0mO z!Q32-hf!re)Mm#UyU(k#&E+%OTjcT%w$w{2x5>7g)hp&3@Hg}Xikmt2>~~4|BvPeJ z;=iS|e2+ip;$HO0SelI}@Tj>j{XBIghhyusAysK$qn!a~&loTxE#H>5H&Qsw z^M_(bdkB%?fzuo?GnPt}wx=ri=;{D$9EpGNU#sFA|o^rzt%$!55lk0T)13JI12Ln)tx)VzQI!~smTh?a~Kq5d?$m(-*N50s{_gR@*8{hxtM(ZG1I2SnA zK#mK~Ly!vwsw7d(5I(@30kReRyEijRPdP|)Hb>K9W^1|3=4IAeEwD_{=UKTn7H3$-Y)jcN!IusB1b4l)_G_M+fcs&Yh4MUO-4FAf@^|A26%;Yz$^qIAM2O*9^{5dH> zl!$?$QVy`Mvu`_pJ)xnVd46r@np5b{iZA446$F6Dtv}tto>^Ber~4NCV9$J4C(IRb z$_3|L()CK=)dJ;^o4@DMb1+Q}!o#)^|0*|;T+VLx{TDz--xZdLPf^eAF*#?6v={XV zFs{ALQ;PEnA@~wLD|Z&Vo`sX={JVg`zfr;xSJ}2Fo4qU&{SQZ_uYlXs)JS$|_b=?N zxxStj8dq3Sc9E0#phr11?Zg;8J)PekU;pt(U;p{(ihy)~e$M56RQHzLxP{FKf3kSI zA%7?SB0Dh;x+vlGtMflNF3;H)l8eyS5IXI=gyP)#e^W2sAtF2yg1zugGyuJ9mP(m8 z>aj&VS0?=~zLi4WkONNfNDC3cr-3X&N(T_{BdGUD%e(;n;#g?yM^S59hi+r^M~Aw0 z+FLYaxP7C){^QIz<#3bLY8N<%*j`+3K}_`#dWw^9C>KriRpd3Taw$|o*Shrp5O>yh=@KXez*^A(^@w)HR&Nohaue6Tv&Y znt8>1ubqX#Q;`52T*F_JR-*rjcXIxTzAU6Cyp(vk=AW@9;-Hw2axy~DDB*7SjC#P45yVI2d{ha8t?+@VE*-MtE^78R{)Wd z*-e;BfF0SlY?+o%fh2Q&ex8peuJ5OogrI^pG3qXl?%ZQWJ3wkp}Bp&rvpJilE>sR5nFlzyIa7+2oMkUIPusJFwC zUCSD?iI-uy-ON%}c7!?IXX+c5 zGw&>IU*pP8bRkBbL^Pk?|5@`gPvj2P#TP1b2{@ny2KOx|{4FhB`)!*{)@;Ra;>YF0 zN&;lqr~49@am#W-HB`&4dfVv1bVeJBIEmg&+%x{;1h6Uiwzcx@m$MzSqsZjH&TRZB z9f&nxPI;^~xq*qExURRCU0kG+cNlZ90IG;W!ugPZb{p1*Qv2}_@w+UhZ~kzEMX;@< z#ZDLqr~QWBK{ZyK=>YtZ79eg;MyE@HZB;VZwITsijwmBMqdt}c5~8Duqun$$QDQ!S z6uxVF`iZ`DT3(zzzohPc`+Rvbx?=Ii?}f5r03RDh68JLko|MPs(*5`$?)fSCmiM(1 z0`?%QGrS)J^Ko(&?dCca7i#+g^C)(rui+z$AwdLYFmJ``Dx*5i}w>88`y>guPKCM2>E%PF6N>PT!==h_BXFeNDJLx_3w(h zlFQ#pMB4i!)?1exzHfEDId@0@Oc9@pl*(?!6bb@>=VcrE;2rv6NMD_zvliuE*h2bs z*HpVqj$u3Upq(oXS}nyIBbAXG0`X*n&4T6tTGIT-q?Po`wVRy|q9Xyg&07y%WR<4` zSD=MR+h3ka1oDOzhvPUC{}I27KURmf4)rAz;Q3Z2HG? z=1QNJB+Yw(C|%2kHjGUK=pfX8Z1hSgx!m+pX>_zc;fr~Bf-^Ta|q(fF8~Qh zO_`l)DFb9nhOzT_@{ds8Q4hoc6p{gyqGhR60%$<3^#n_n%x_qNdXpBdtq&v`l&_CU z_He!m!;}5Rm;i%-&o&3#H;A8k#Sfr{2#ZFWYiQFX;CJ5m9dn2x8Afj|P5#uk&FPE1 z(yD9`H(GHY8Fe9z@=9Yvb5W#^;-tP=4kgjh>g(pVDK0vSJpn-%{-NJuvv0h~cWDKm zx5nHquO~CF9%nQS2>|tc=$5?#AqL*i6w(!2gY|nKknKYR9UfpCM3VWpIdh;@$$OJZ zdIzy*&s+w*-3wi_3;7;?pjlub?IUqfzZ?e)aE!H8jat`@oXzdgQWvINf4&6Cr&m2|h|H zXqDRBm|5=aWy1$%Tv8)h3zVx1(ZQuMA2A=1D2D|Cgq6g80gukzb3C!?2OA$musl^wVrE%bo~lduLDh8D<#bguO^F+@5RK&3uAT z)LEsDEJ(gw3oRZMKv7wfW3O&01Wa3wMxrjogg>m`5g^W(MZSO;W3)=r$l~$1X0v?{ z6m`P;b>ep-BheVTnY;fi1u*OW^>nk+be=vH_L+_my~>*yW)QnZ_P3SBI{Btv zIuW3mTXvu(`zYFR$?@v$nd7H4DB=~wXk+&YZUipEDK`wc@0Ri?Ax48zMx0&0J+G-i z$CPvmGF!+}hw_ojdqY3-WiJ_!bADszA%6iBr}qDPeu)SG4-(M&s=Lg+S7Lw0!l5wy zrGoOn2mmi!2!Qcb=PtgXN=`j`oT+FUy@l|1_&sx6-ZWK~8Zi^-Xx+u zyZIVE>j!RH%7-sbMe3AYno%jZ#0-ynYp^aBkuxI9!cYvP1qWL@W&T^!I(PM}HCb|U z5i?s?jdp*{>4I9J^Ph`FNI0j?_okX9!u8a(>1+5_u{DAOEJ+0H3Nna2K3*nm5c(Xso*N(~$uFxqK9UM+j+o{p-zl79c)fFP15E6P{LZ9rBF!Z0u#*A5vqe zj-Vv@gAozZ^_b(x6#iUmV#1NHNgE(_XEXkV(w=+Dzd@o8PC<;BQ$)+$>Fmz%z9xw{H9ayVIgS5m8J(};m7Vn)o){{2M*9Vt zCyJVskH}v73{j zej+jc>U;7tN7;xaXzYg%(MedgEzxw=q_#JLxmUW7BP$}mMBZqT;hhXAy}5F_spNU< z#}Vb1kF}!(xl<8b6gVQyf5P!SAkWysm68Xz^i0^HZGN#w5y}V=uXkH>vq5qQ?fxu) zgSMSF@8Iwc+sCj0KP7+F`ri*5;9F>|&0;k|k8e@=!W}tzept>Mq?mFI5^t{kmmN+7(agy)!zKja%xn;8WiikCmDx%>2>ot+2M| zp^VYxgFDPv4*Mb+&vy=lE_XS!8{E3#pIq|r3w}Ct`@wMv_U|O#DW)Y_B@R7nWj=a| zqCQKA(Z_>KaE!c_ht3@#VXoWs^a*54fT_viR!o9T?38_1WoLTT(=_tYRBuFo>S*6m*%$Y12l% z@mY6LO5DNDPJncEgc1!0NZp8;S1eSB!UjhSk<+IAqyoV9ZlkvdgX|fgekH1?-011a z13%x`poz-FrveQb;5}q}Pw$PwB7Pt&U^90msoTKj?C0i;lhk|O56zfwDjel#PrUpR za^f_4e>|tmfl%-siCL~rzw@rF>#<)c$LH_ELv<+IWr4JPJlAt@7COk1W*5|8J2%8X z=2#4TSA3l0%%PTIHVzn0Pt!_}_=J|WfZF(X7B6`sQf|#G7c-@k7Xv&wJna%{g16w* z!;OWpbyRzk%9NMzjx&10lNZ?soXqXg*h>O{QwnBVw=?B`gvbbCn&M!NP%ZD>J3bE} z_FNg0Qdj7~@kEIbao~UDBCvZI@_4u!$f{!)t^Dl^z64{!AvZ#-A zS~pa{7b^PnuYQLmSyD6i^7hn!7gs=MnLv*X%Y>07ag4u5HphvZ+n^LhKpPd;jWJ;Bwv)xz;CF9lmhB65F_o*!fQg z`P4<-w+*iI<$Ox%R|KK5m{X`a>p2So@0T+P`lNYihBa3Ty6y8Ma_Z61J%#tv2EO}~ zOsHbCX&~c$_4(Mtng-m}cQM-^axV7zkyjyDnPBIIV%T#-V7rr%mP<>ZQ0z1G6v3z& zK5V*8>o)yWKdoeXYK91BVeN~Xkyxlhwr>thNJsGLu-1$`0)D?j9ktwVN;LUq(mXJu z)AJi@jhw=B^It({F`C-KGV4t|yyn1{_`W#2M^8{Df_YG5UJH zlCh>;(@#h=V1J1)7E>o^RC1A0$aXVNDc9LR*4c!z)9jM*L=)DNge?J!_A+_^k>7zN z$fpq=2&k|Domku(S2M(T!}4B?^gg6-X$PXc&TkDv2Hq2LlXwz=WWsT*Hv zSa|4fsnlxzJ@$9NrI`~#T23fAg^zTXY$Ud@h#psE>Our$0Mw&K;hLH~!PuI87E)2G zgeIw!W<{P6ar)_j*I0-k0wg(HEw^iNO6 zdZ1y*ZR|aM_(EDn|3f6>NeA}QXT}p2Fp2oUyA~`8?Z(Us>f>yY65%?O7vy%z045GW79s5 zsgZwN`}P3eg;}gO`DyAsHEj6h@w5pZdo}aU{VXWTCi;gx@?MXNi~Cn4zKh-0S&iaB zyljsVxuY$f)T2qm*J|>gSEdVfLRMSYF-qDn$14RJGjDQ&yrT-1%Zq^zOw5%)9Pk7p z4mgpF5jcZxYRk+WwzR2}$w9a=79dnbvt9C7elwL?v^M4yE78>XZn!$1t$}^@i0?%T zuundHa#XxpFjU2NvE z48v+7@@JRy0b>~D{gVWNZ?;px2ED|dWdjk739HcmTo{SGD0e&Faq9?;rI8U^;kd4 z53zo8qy79R+;>m0cH1c(wsraJceKym%~*v~I9%$LD`Fe`Rc!(KT3#4}zIT-$dQ1=u zQQCc)i~;At2?PV0k4o7Qpv(HP7WAy#%$)joC@al2F>2JM_kg>STW0H3xlX@Q{q&S< zckmOVD6%I|@w>QbXLi4QnL9vNbd#VY0VuY$t9R;RRH6*G&p2S&l_xoXA>^9~*>BiV zJj^bMJN=m}<4CntRe7DqyLwre%z-`JIKs4oPc*rlWW4P1HW?BGV3RiTsVT)N`&FJh zWTt&%qFwiq?SqiwhYRG=gD>F=RJLpuS+~y?7Tfaa`R&q!(mVbp{>1f~sWjiy)dTh- zBTdmqTU1y!IjU<`Wa!5JU{|8iu}OB}xzl!2MP1RBPeybt*R@D_`B#KVj>3a-?(Z^T zPt7dt9%wkP#rmzDqDELJ-LKR_eoq>t6eo*LX7$^d>gml|p1&61GkppYD9z1_CB{$N zcKxVSt_q*+t%?4;j6aiK`lX@O{4SckFH{JWOR26w+EVS(Ht0Z%akN|Hjch;OB=KoVIP2@u{7! zMX?XA>~#TN3_mm&2a{6kK^m3TXGcU^c~dg)PGR()kcocyW43dwnLUclP~-4X5;4Se z#cp3eMN&uLVu7{U6Q(Mt+^<2YE*elL>K&s@S%@8@ei4kdIcKE2ynLu0@Z(Y|GZ!7^ zRazM*XW&ZZr#?|RsKF4@)cT#;N5wr~h8>iXb~-9o1ijbo+b`=GzEjHZ*+u=4)47it zE}Nk4=@AYd@^x9qkU?205S61*3OuN@9ZLNS%IFVmLC;g3J?wZq`A;t$>slNS05-hf zz>_&0tq3ycRP0(qr2->=BX=BaYZ(>A*1bGnk@FgD^+0kT)(~N7^sRQlah$)wHte9V`-+#I)Amy#TgQ(tN(KaiXZKIiS4pB$Ir%(~XndLC= z4kKnbpG?r%VUz`PjHmI-%K(_KNcyM5c)&~=ks~U+zydBx5Ovq<*IeJ#cDPNd=t7bc zVkrdGwy8;Q%gCF;>u&1ki=hodPfm7ouC)+%I&a>fGLYd~066|RPdpqC3;MV@WPf#! z)DucJ*9V`P+!JqmqSak~{PdulQ>z_IBRh`5;M0TaW4W<32EGj)#73kypzJ#LR zJogLTL=ROExV@Q~pHQZF_|Wt%B43P`WMk}0L6I&4zqgWMt)B4Bs4K(kF;?v7TD2>7 zu>98a%ize$@joz&8Oxc^w+LBUC_5S5D!Pk0LgkdZ2Dd#+#X$pb^n8niXZ*ucD=j&r zpwWZgkkrH4g12IKotW9pC@Uets_BuhubI`iZ8XM%KAsSIIHyp#)&17Q-s>6%2fwzH zN~djnR{cIJijn?*QO{TRa~r886x|Xd9_gSIy=lJhUa_a`8#fQr!I8MSF-fc-6VT9L(Ly?5gZ9o-3@oH`qLLKl@eyyar5dor=}k z6$)3Pvb~@wqW;}^)g4fdq3awa?>&bna|q>`S5`Jrk3lx*$|;Uz9n4IBpMRT&|LNmb z*{=J*oBQ`%e7x0?^HK1EL~nZ%!Od5(kkPWms`IYUs_)0H+5|Y}Wv!pZzrcASszfi> zv*;Qt+5DZ1t+`)9tFoEbDS081{ z{oORO$PS2yp2u=iPJ+mU)AJ1SN0)t?$YQ-`JQ5njZ3fPRWrUd`5x>&rx%3p)|we}mpjgRq5G(VDQ5)s+`yU*1IgiPP#!< z^nx4#5(zDlks5ZnS_PY5@IIQ5XQu$T!==yZP>xDVGeG6_GE-)LJr>`yr_Il8l$d4B zOf3(PRx0gcfx+d#Z6NxyR%I@bNw>WjJ<3E4cU@mnn5*Zt3+hh$W^QO3us4lx?YCSU zu6ut;BPwg`?~pXMx6{vj;O*=DDxSWc8S7xnm_rgUmq~q+TNYykbu?hxLL5Cvfh9kxW;&4Wj?LxxYPCja zAa)NUj95OUWkuxxI{aFqlW`XWnb&(82kk_09ueT&lWyHK$JlM1Apv8K&yuM-al`a4uGC?6)Bm2&MfD|McVC!n|enKcCv=Q{OAx z$FrhORhG`HSY?5K&AI7tcmNL$PuZ}#lpy4f_B(xgzw9PjYiQwQAA-g@U6~h%0p6T5 zTs!FcCS*wgF+1Y8jAeV@0YW)!MECq-cKO{y1`mv{-bUYQ5%`))}ni4ESlyGbd`mxxCiYHQQyt?ur9=AV%a|3*u4n zI4VQNVRXtFO5^HFBG6b>y6;+rc-d?4!;gF*la zZGz7Rp7A{R{BHJrda5=VxE42Nmy#M`y&jy>-P>KCLQ;zr6S7SP{ra4NH{1c3ozt}4 z62*csc1hLz&INpS&JnjS5Vh9aglar6`kiDyb(WUfnACI`lfzy^0hXCoIT2mOof(Io(m)_;%^)7#Ss+!Py>i;^K zwa}_|-8%WaVw`1&heJ7dA0A*}1HNQG#5?pE5M&#`5?nR=9V@mrz6)@qeE$)2l_;`k z+uk8mJEw`Brtggp*^ewgtgI{>V9Dg^a@4t8n({YI1dC`iziLzn`uST@^|*yC%Yedo z1}~){>!g{bIls5{M_}7DVKgUgz$M)S5oxom>^CVMYj`|%`>APER3o_?wduG->^Xkt zl)(F8e^-(U!cKJ`2d4khExSYxg1*g_%N`yGGSz~O{n|^o*B&=Fqrm5bV+)J^A|Gph z{~pPCoV+!2U=sLk$#o}G%K4oxkmAZ;>iAkBg5T6r&I@xr^1OwmEGDy~NFEx;M-;!-=cRgfq5GeH0rejyA!@{+(?=UKe{! z!vB46Vnd!w-WYX{kW1>SJOt>{E5MZ64s?hQaz6qh0gmMz*ZM zlKnm^6A26B=z;E0orIcYsq>749~w!Pi3vs8^y#-)5HfY3CcvKwmYFEe z@WP3DCAgBr`REypEfxP)&>QqDIO>=kZuW<_gRR<H>gC9bHo)qv_A)%$*X*X{TokWZNs;0yC*tZHzn@x56RNVa;> z+J@SKdK~tV<4_~$}l5i;N2pQ z0GlJ(zX(!FMIaM=tD|`(om_jYkVTkFflEOIuwu|J0xHpd`~v=DJg9ibLg#BT_Q6Xju0kbW*2Y zxAA&KRATGt`X}T4!BI-Vo5a3X*!c+xW*I{qtJ1)V76#yAaT+~`ka zcjxYTaXaecfQeLTA3F0n-j@UZIdtD@TOMF{d3<-VAA|#|sX5@&J53)xcwF7PaV?d* zvN*47h#2REFRYF|_;Fu9SA`A~R*ni}j%?x?MTYq{Yqa;w_>$B@%!e*+jp2OD5n=*s z2ymWDh`hET`U`q_31uIgX{-fj)#wI?rAYBJX>B$WW1;rQ17WS41$oCl?s?U5HZR;q z4eEgBi+m7`3%wP?S})P7xLW!m+Ce?5h=hj6p`H8GZFg#un2`$cq^zGrX#|kz<0J!q zi((pV<`_-3IJ#jihtasvrw&wKfVa0iNh>t~Q$i7xij_Y2IIG7&ueG;%3 zm#(QcR|j&2gRj)r$lbTp7IfJSO<4P4hm=tSzzR13X19B8Si z*9M9|orRNu?t%fE9B;t71D1|wzCEk-1F5p+u&?n?bg6~G9PPYA5rI$l2F@xsk} z0ko>sqUKqXSw`jb@b3!H=$f(TJe@Uuh*i`X>r*!6wR*Z*X=Z?ZDR^Mi1oY>P2|0=& zFu}{a7b@e8n?wmrdv;L0t{(2bU^${>lYo=BeBnzqA8b%^%DQoEQ$oJ>41QX!ICt@O zX5_=`<>`kVM!S018rZ@GW<^mxAp0&M<^jW{qv(S{L?&g^jII;{|FZ?qlbSnp9Nm~r zHGO-hRa0f59G^Bu%;-p1Ziym^y|;kak--84dH(nv8lBU|noIX1_x5I>_i~kW3LQ=c zBTf{H3F|WH0r?f}53#Z0(!RjoprI3803CK4!WK#gqahwThG`U|1L-08CBcxbG(f2* zB@82y*Y~p#Lrbz|zcK%B3wg(Oh2|o8&&9ul;z%e{kyGc^(fM0U>cuKK zNX%tHiEJN@?MhNUj!=9x5#iCyC-UL9H2X@rTp5))|i3sc?hbg3zftpA4hfXTWou?)q4ZbBC z-U?O3puO-a6|+B|ucR(Q2~bcqw!wr5H0 zg;u)?jvr}2=X+jz!fmp|_x1?fls6vcsy8G@-FbA|1LCv6hCYk~z0OX#tb%A8gyQyX zz&Ok`G{X;hPPrV~-am?B0oS~6{VCpT-SCCZKyu^w{tms`k1yP*_O$2}GgkYB`<05RnG%kg#Abuv>I7uc zpuJF_VMT}HCyVbx8`M7YN_qmerWMhwdYPs^^xDI%ATYT#uOIu8+Z_tXOtcMQi--z8 z*ldtfFnr%d0U6Q!>a}f{Q9l^Ne#rk0uJAI~>JbJ!&LQ}=rqZ&R;x%*-n^oKHtIwzT zxAgX7kz)zFs=B^$RTZ#hOtbe1$uZ}^RsMoNgLSaqTjmRQ&;6>&q7CyYpNYHTe0tbr zYL9RYT|zX1cdPZvoLn0V$QxC3-9x235s zb z)pZHA8Gk?O^|GV+5#XfkOlZUIUMtUD+NF2uUA8%ER)L!i|M-C@vPpk_PH$RSX4Lrj z`hf9Hdh-u|c(rPlx%bqnCTm~0QSTI&C|~N$fae!!->t&s3^4nkGFn_$yKsc}<86V& zgqO6jI=p19ronGMw7VS1*%7$%?_Ver&Ol$_fJgm~SQZ`?yVa979ae=a;8sbJe8i=Qgq<-cvgCE2Q+p(1(p zf1W1}`u)z6g6bKgG8S#KPT4mI7)c7)e}4a|b}Dj!-fDsND?-;tZgs8;GM}tek|iOR zpekh0TF;L~xWH6hOVXkCjqR8TGiJvime+^^2U^7Bi@``BSB}7CKvrZDpAF7i^E)qs z-q&L}Bm}wYGfd>Hrw@&#Wv`3Ch`mJEe6XyUBrXR-QSK$4>9fkh=XHb-xIhOs)82yV z@}4^Js}dzJZQc_}8;Kg8Qr=id$XAk0Grl~KmcD+F$QwTSAx2!auoHgLpqS36+!|!D zX^%2IVTJSg1F-Y*vVz5efF3<5HFDnH;awEd{545z8+Q^*?1|YLU{oOnyOQ+Zlt>P2 zZZL2eTV^DYEg>azQ&043`wgtO#<@AnPN~-df{=)`%Oy-SV7|WH%8jH`U+F5&4T5fA zd@!|7MK#f8lJ{>VdETA8QP3XYJv@G)1Jr=oh_FnEamX-^hc@XVdak~qLi9?w9yi_v z{&fEVw~IM>owQLdZI}$4g)f~--4L0^juSK~b)c7DTCxTF;4ReZkkA&59w;n2Y^7we zem8(2rWFie+z^&wX^TPec%tL7Zri~$`KW%!LLG9^tcEKN_zpk=B;i{)ZaV-}wK(2-DqndA1TiX1 zjkcyc!!AR32jJu|74e;Q%md$NZ5=Yn%NzfuoHE~cy%C>+!bSj(i*?xDwzq2Sd?wMX zyA2uF8$+q^J!IxLhTiP(5eF3wF%- z`?ra8;@i_syY8k^?!g3c%}XF1Vxz(=`U~Ds_uJVv+o_dG7%>+E?V@}|XH6gD&;NAL zj;{Gobr>&w+&`zhvlcDR^B_p2fba~=v(}Ri3tF5h0tiXd%T9HrqAc^sG2wM^N zj;H&%HLxve2Ve#_OEg-~C&-PDr;;r&e*7>o8ln6rqzVCL!6E_v0I@Lk@bC)zl=_r* zi!@J_UH;{b8fgQJjEVk;Sev2=CZ#-{@e%k9=%_B^lIxxp%h5`#d4O*w-Xhh-KmS+x z1!SKoLW$?yUK1U18*UNBzX5FKR><0tGuBS_ofI0niwSy?y(zMbW2E!FU9cfNeX7Kx z4n->A)yU{yg%P;_no!19${+^vf%$upK-f9mHN0?tYw8gAx6C8DX)zVcz3}Dn&TR%4 z)2F4&zpK&%C@#e?q5%fY^aqLO*kZNuv10W^Vx)~N+tTT3^(~=$hu77jUadudzpj2%-B!uAiW#zn?wT)A7QM;G-@!d1HPvmeB1(hx^bu zxYrUbbhxbl6nmX|De<@UzHNT{ zV~|W7&I;3>^!4ebcemXVPYaAa@CPAL5n6;G))nO{HPfyTc)eO{|@9o$MJ@#X-MK1m) zeJ8vvZCPGZ4^K`)UfZKu*|9a`@3YbD$#8F zL90NE3*d7I8TGahQZ;8>$sc~#2Jbb%`0KfA) zD|=E;iYs(kQx$SpdI#}_YFwb>;eM5F%xk?m?xkXVY%${r=~x1v zc74K!qiQtu0oi3mMYOFgI&EoF5(rJ_7G`ug-J+VkOSz@vhVn~6E!y=$vohT`U?j|T z|M{u&0|#3es;?gEvzLEH;m{{HEp7Qw79qFr9;tBQ??0>D$- zy@v)}R3(qas8w>Aof>&>)ud(XqpWDC&u8W2)TR2JH#k!2$?pR$SmXJjw$TyihHpWw z&AYMRf1XTYMd)>vL5uNl_j=`3RdzL)m;vb8YF`4LIH_lnZY$4-b*NN{Nh0y=r`uHP zIfac(N}!DiTPDzKX8*{E|r>#sOwMz zn%X0M3*K4Gia(LWGlmVbSq*qqhhi5NY86T!OaIw!nTqgJdnuHoUzZHVYC9A@WpHOb zlz~`(*vOV(VfVF+Mvg7V`_p?S^!lOndyBe*!U+QNub}-I&9l(2UB^d{n~z4cGN}@| z1xpFvWBds9!AaH=z*ClDFJa#HJH? z5762QphMoP9va@UV`aB*Mkiul@;(JKH^1ky9;uW0DzNmAm$!-Ux2_$1%(B~ zd6!j{H9Ve*Ss`PQ#levxeiuex8B439Oy7_KZk?*G*WjRHA#w@OfZlqvwBF0CrlpZ^ zABidMqr3I^T;*aoMsdB*&IXabwTd5flVTo(Ws6u@@hdGBaA~UP<*@&5npe=CbW{B5 zmY&60Ye8E(9VSmj+_w=4e7&rk(3Q z`9_)%fNK%3|y7x><2EHf*QyH(C8QrNqLs+YGjsx0I03IFll@#B`iF@421PTK}i5s!^_^4Aj=_q~75 zq$g;1BuMIjYpWH>9w+QlM^3M&#sr@q)wHr`RKD!|LX)D(c$O~D5AAztTITZoDwNm= zHKVwqR~J*Z*Jo9Hh7x}^qX9R1;_ht=rRCN=G4U_$8_^7RTbp0f7wWC)iQpS?=Bfi_ zD!tkFq&WN6JCWn+a2pyZRrlQ0dk5l)3~MujhTg3T=7>fGFUEf|_-J!nyFZ8$JmRI` z$XY!XFDwTb>aExP@khz9u?JgQ+=AW?Y28iH!Cb(^s8m-7PNBht>4TOrz!nbMG8#e2>WXsGzJ1DD?!0zkfyB zs^Gp6;~ZP^liTqhC#a>EuP4l-O#g`;x%Zs%<7 zf+q=#%V9A`2S#()SLRMlXvhuKC^0VQ@8Y|LJc}(h|JnKX^QTl0XP3G(UzI#S;P@bf<`@z*Y+IcuULhJ>@QsUzr!4!4RpEKv4z%y-+laO_zwxb0+xH< z7BUB?LSC7w#pvt~GZxy*(0A<)j)oS*xUGmni|v#~3JG*KsY2V(-N_3q1r~vb;6;8zo;7pD_Urv;D>>t!=+XS{Gu+XG$kU^r8!s$< zpK#xv+<>`He{+|b?i5!(x0u3h@(7$+%d};`o^y1(tSGM3kw`vg!%xn}$_e#xSGl4c z+E%m($*RA$4<~NHH4tnxBwB&Tv_EmNN)cgqU3*pOJb~R$FracD(Xl{$-*z|{FtBv z7P}m9vdJGyY8Ff(ZQ(~uQBZUmcDV;;EK&$uPVe8p=W9Z#Dev0$U}sUg2#+w}k*=IS zz;%#G%~-*g)+7MKBCQ@ykml1iudpB&>74g5cbK`r$E2i#DFY3bIMW-V_Obe{(0iVq zF<3emH8+fx-6O_HZ<$97KPcOXnG4Ckq^>i!e9$Qbt)-rrb?*nP;qdDFgpz znQgrb2M;5)GLZdtD=IXr(ev51P_KUCf9>xRLHg!3q4&}2{IWccx@*a`lJA2~FF)3k zAb2qyX>_1;{p(AcIzKCWc~9I;-12h>mTlQx;$FBlV=S1z3b#$S%8#L(z1e@pqGA2D z(OsSVv5h`~^$-c2Et6|5=%oAR6inCtmD`I~%OfUx6kJf0WJ7C4!WsNO+H$O!x_&F_G zgA;0vv6}VD#w$L7%*rF1hRoJd+%jFeTAk;Io&A;~c-cxi1Ne0N0r%3}eL*{%QfI>% zdL8_fJ@TQARV`1)Df7?B_np*aFDLKx2aK?@;ou$ahd9qI|DV)0esT8!P`3UTU1f9< zpu%9-$&-EKcq9F8oGj=Y@_eML>FsW=&9RUre$~mL97fkAML}VL6hz~N~2bc0f{0~k;`A0 zwo%q!-qlh{kfp~l5HgIP%vbat5MOCx@i%05vz(U#kP_}YLOG9*m6d?$bqA6`8^oAN z-8s%M&$arS>=kTv23bZM905jv{;3UF?l$1rL>GJIu4S(!e3l4N*QG0=v9Urzl2j~N zmz1-yBy_m%-rW!wO1m9~Q|ss;_I!^lUo&$68pOw^{yg5PhLSgEM1RnA+8 zi?M%sox#VzTSUl0+@zpKvs^wbsI&qwonFgae)m`rR36ypc#M1yEc=j7R6t~bu^n08 z7Q)X7AW7lj)H#{f>GI@u-1GH31J_aSTFSps{6!*sqMsWSjEZKUFxNMuUQ35089IvK zb6+=nfg^*F2ZPs2bG^nb(&1TN2R(kuvqI2<*_73r^ENn!3E#oq?YClDn?FeS?}Or+ zVUB98E^}~&n3nrh3D8eR{?n-2Q`OV)#0m!tliMf8wl($s;Fk1$BE(FvtEInpiWCeVjcF8r)-WSWWBo>^wL^eu+~v~ITGl#u z60v(iJ!u4=3%0cKR{6DD<`rB$LH+LyU>Bn%Gl!-2tCwDSZZhW`ZHxlIfkgl@t=T#x zz;%7|5JLRFAM+M2R3K;Gi0Ppc^AcNgW?0=?|Bp|dS#vg@SOP@VO{|UbHomO;t}N#~ zHYX!z9kF|!iWPJ^%x=da380XF0?7xyHikeTXtCBV7Ej9@<(Y~oF%3$Gw!18}Fm1xpGTC~&* z2$Df#AS4NyD2Q<_2~LBJQ4bU>eGLqs5m-wB#MG8>hzg0y3pcR^jD5;VStg zs@Bi#%5wsbnOp-yJZ}8X_)unob&h#_Te&@W$h8hac#=E|p5$`M1^G28LaZ~LoApSD z8y?n4#|_|`S^11OOp<2WBrF}?3Yr~maCPRqF}g~MR>c7s zF&|9L$qna+D)*Bl;FEKQD(HM%TJfVCL*;R7Smn35zq+~FIe&B=cC%u9Zv*fv+Le4!}i1lgsb^ zscaCylEU>isqZxzS%O$;ZlnqDdPtMyM5bm{w$4X!mSx5j;vcDpDvi$Yz=i8WTl4W2 z?PY@TRR_wm7N@G+Z+gSkZy2Wt3_`#7xhXU!?|`m zYd?eEUyPmlhV&;+x5v8bF1xX5nLE>fzJUt{N_FeOw4K3|KD4?3KH!20NZe5^bj?%m z_q>TLN!Cz1(47GyjOb~l<4^hOpV?+Yui$P6iCK<>_Oy%K&Nqz)bg&jfCMT9cqV|)| zwX7zEpM-A8aGb>w_ShAYjH+;pKEvnu{mv>wnDI@ACGmu*3 ztW0j7^WF|G(k2+qjhUJ9HcL@pIsYr~x42Gxr#kz&AAMc%YkjZVG#4)Z!C}8iEFyw6)swGPUVi*gxk+Sd zmNJdn(YH71*6nW8rlFD835^|qVF?ueAzqC#BuW{O#3LH1#XwvdKa%E`eN?8|joT_3 z-d^8s_!I(^qr5+ozO=PoC;0twO`|<|CtVNVo0zk)=KepiU$;`E?}(7~%w|=P7m4gk z7jADjEGW(c!j?OefG4dO9EP(5|D^PM>msfdNr*-GfvIYEabHiwsh0I5ggy=GJQJ-E zE1|TmuBMIg#RPs(FU`FLR^JuT9&`-Q{9xgMWSU)b?YKyPW1#%uI21lG(k%LtYO0e^ zZGV6tC?J5Vxn5GTTdRE7ULX}W0*MVAe#jYp&+OG3zG!*VUx~`n^a}f*XvcNEK8_+n za^-KG09YfuLw+`4t)ON2c=cYGTzIdjRkp2Ka|L+_v#IQDL;AvtN&LM;39D zJarI#pf}t}S_q;@0}KZc2Sw9GRBt{&{ZA1h3|IqP=&kqY-Rt*x=0tRL4Y`@6{(`;_ zeZqsRliU$I?63A=C%cFx(x{7y-m?89pOXEm<{FZ(c$0TO+cO4SBP+4Ec@f2GX`cqETFT*V5G^Yy+qhM<36Iul2@`6tB*`O~ z+0dJd2oa^=a}HzzX!-G#mS=soJCe`7Z3UbO#6=pZ!c1o4EnaFA@j~f5SN@zWFCpWl%J6THKRBeTMk!m|=TVl{ji-Ja1Cg05H zp(Iiq%r^GIlmUKC16wXn$K9i3Gysn&L)}(puIa%6o-lbsK#!q}ocOA##B>{gEZ|Sy ztN2DhOwMiFSF|6WXg-NMqw^!#$(08^KAlI70j{;t%^=8PW4v#Tl zP5SoyIpAy2>`=huKd46qkfs)CI-UQqkeNWbjeOl52Fn+hBy&=QJ$BS9ggyGP8fa*A zqdQ;oxw3qIGu)jj_~-73eXo}k#y%+=1Ww{n{Dm~bJXucKtO_^_}RHdK7=W|Kc1*6#f~y-n)n$~*`U_s23H;6e_bXOo%^AsqWKntHmO z+Dc7ztcqoEiO02i(WU(t?TeF6*okX= zJGdXc7Z>hW#HnqO)E>c?t7C9SG$Q?z;})8|wJ@{d*q_kaj<4X)+AP}4ILSWL#!TP@ zJg!`O54v?x{FHRIm=V8P<$gT7|MWv40dvb6K_*8`EkjRaR}f#)XGR}JIqWgx*)5iRyhjrEi*AXY;>tGPl zaY{2f+wXix%cMWIC5!$Pf1x{J*_7@DvAa7$tDL)(EON}3uJI%EQOburGgk(`TwrK=Y#3O15Qz1Ja=F`m9(4hUshjVD! zqi8gHntJ+m`)>>W)=X*vmQ{DNduz85;P$JUmtv+#8wYxdTIo9jTFU6wbv%L5Y{8spa{>+7@7 zH}5u@ozWr1wSo29qK#p*2d4?Xa07Gp?CI_CEio4yA57s~lv5xUbZ3gr zKr#dF9N^#AdHTc5*feRp{s=mVveg<^o28L`F1KsSFu~HC<_GiiBz|^F`t-RbQpzkG z7pcHB|3v>Z>V5n;-`4h}3LNre#rHm0qwb&ec*C|`$@m1`oy%&#_h!zb-tURd$-fUf z=7MF5kB*0E)BTj4pyzpZl{iCKC}dz-@sQAlSQCMS_@82qIL}CrywBffH>}_VY$SEB zY4k?BQy&kDOg`@TF z$Ev#?LYZP>mb3j|dYZTndq(>fipcht`2K1f@E4R5@_cbSt+sy+ZCbxo;_aJ)7GV?r z3~ZrYrQy3_p+XbtrUm5-8z?9;dTLi*c3v@aaYgRSN_+;h)9ny)HPt6Y!Bk7OV|C1{ z;iHX_91`4zPEAu9+9ce_V5N6@^{R(@RZ9D{?^VCde|30icJ;D1%sCmmFTK&{Cwr~W zzo4}CVO((^lf6-;)+rSS%@%&Weoy*V2%X5%)l@Yke0We5ujDCk59jsKSkS*&p;kfz z>r~a|zFtdlSM@YS@I9ql_l+`yp#j3srr1q)T4SAz*VkAm6ggv-~)kc!GTAkj17wOPItzBD=`9Qoq=6v zb(XCNj~momqPGJf9UMm#@<$aKJSBQmm`Twa*zoaq7Pw5;@0o&a_nUv`#hsJ34V+9~ zWE?rK<-X57RsnMPuw)P`2QdHb3DUqSZRg5Ts>P8IWuWf&?zt$r+vw<>>rwM*lyVku zbD^CDY+lhP>+92%dOKSF{<7}3a_e*CeK^Xj5WW0cr$+M$>ow5_Bg2LhhK=O`>k*~( zYwj#>yn9p=AxP+zXx?bu;&!;Cp^!y=GtBchOwl&TBVdw*OilOPc>w0-UBW2gmtD$G zU;@8tkcejw=$)F&DustyoL5VyP`5PDoUOX zVGm%B4ljf~Ks+zExONiM%4TGYqPWkr(f#iB`kN@xXvhHD!%`e{A-YVEEKHR~dh_?s zpJ)j#(r`pLm5JidC%ut=`qht zj(FW)s9EOA@`i7#oK@Cfe2@O#zj`oKuSY^u zSGS;_y#4(2$aHDQ5_RH!pPZ|6)Y4-@b5y%IFj=>5;ZHCdTd0Q9Zw_&fb_HEWjX({w zBNwS1EsZ;`w#i{~$^H@3a`~5X_{*5SFM4mhrkF;_4#r1W&8}}_mTl~F(0Cr!&Q|T4 zxQHD35)<#f$WoSEnRiVUl6v3vyoIUH)w0!Ecj3Z95b+{~gRVXeaXELOc~Ke)BYpgsYTYAy80t+4nqSU` zC>gW!JuPv;Ot&LgV*l2Eyy)%nK3+`dYHsPGf#4V#eg?iYSIP9)`kWW$3coi>lqRl9 z>uf=^=GD@+9eh+@TgxQ@FOjyi9*@B~&mfwQBztmE3Eg7EwJ5p{-3{v>YC)-A$~aMy zF8>9>lCg9fav{ZOjsK++$#8~aCidKxs90^8w6>o#kH54DD?~aZ8imzWMkSa(^bjT9 zL{j7gAkUCb(V#5xs5%8KEH(ioXU2>&N&v-|LE?E1P*kGY(iW_FO2F3pu{z^F3tpQ% zwLI>NSipq2%5(kq+|k9)u!io95f-%?SWEQyl;$~`Xz)O}Xun9~!D}Pq@V(;l z7a#6xeBV&`+PWOQEUv`1h>P83emAVMVkCUD3tGHoW&jd=PO(}9RzOVkH}Z>n%`Ksw zhXkMKO`x&hv;p#P1~_57w=LlJ`Js7fZT-SdbAXl~$Jm3KX975Dpo`uzLX<&pEoX`KK2u7{ zlkk?o{^^fubalDo(6izBFfJ+8zRUQ*p$&3}KZE%G;tXoVQ<{-+XO@0sGmGiyc1+Yn zC`x|)!nqd+AozgKXChV>x%O5F$Oa6+!bGbWw=;CCgJM2+ zFaGlX7P~oCpA`t<+s0DC2(F9C4ff~~ZtK7S8$S<63e~~&qAGX()P$=vXZDixC7H9g7Q4t6H4YZM@jo2zl`y#lP=>owvIG$`F%e zV=h=?Z=NV=e4%H5hk6?f)OXQxx=K;yw->6+i&<)?M(qeY^@#%x4iN#@j9&hG3nTFP z1Y%4!S@UW5<3zK@`8;6xO5xkQ+MwYfd5X2pG|Hkf?29oCt-%uW6YC9+))4isJMTMF z+wQ9M1pMx&H4SIL72#@|+-|7(#~igHd_Y z8fMx$F0oNA?djG*mf zku3PEFU3_5@NZyVj!S*N@siLkQuqxq)^9qzd`yQ*@(wLcVjE?+-(WjjkjA5H-|HESJ{BbZs(TEAYggCvIr zCd|Li%_m1mGqz2RWcY!C&>zNI|c`;d5( zZAIZ9UZIuaP#YdP)G*!oe3zKHf|)UCN{+Ct=$428@yML}kIP3dIZT>?sS`=P&c#a^ zRLd7lms1;io3K7t*D*s+RoU} zIcZw(GfJ(|tuG!lf0}Uj(|ch|44wbxeKSW;*|A^#dC~uOj>jd@jgYhPpLd@5{^Q3V zmVdqg57IfvmItD8M=-6MOLAXh-G1?;)p1ddhZYu%IY&)2HoU=o({FW~GoSP^RVcS5 zqTTxS@w4YX7f}MGT-zH=RaDX6Y%Hh)VO`TVicUEjo6&lNqzB4#Vr8v3RI)|koWdW$ zE|cB``x#pu17@(dlETm`cH54sOyVR3RO~^_;@qvd-9*^jHXd4bxHmC&0ydJwx1>$} z&bU>qE$5V^-&Gc3kB)6C#4C;E+}X2PG;cqk_aV}a<~Nq(UhG{@$F4Db6{%_;u5=F1 zE`6c?W1R?Y7Dh%AUNed74NZn`1wDMiK_+!YRBwTaHl}i0a9@@46&5df#+`kb@oXm_ zV`AZ8kid+;_6HDzQsvR(kG431@;FpK`~=2lLGNSV3X~kPkh(3xX)b&NPGsvRcvC19 zji33~LQ9rV<8vVXzmHQc zk8BSyo5wWx`3>M$Uyb^yHi=-P_%(#dg}w92Nk~F0$ZHW8IbQ3?&4Xu#*cNFT6w*Ak?I6uGIQLJ%Fy6T=Yc=aH-2l!t z1ZwVd-!F@PYvu@{1BCtuKka`j|GZR(6Joz6zG5gRjAtj95fRt09cCRMYDxDf1G0}k zJ(-)@R?-`4bB8`0@XZp;cbZX-}HWwo3TvDb!R>dAgO9Sm-zX@6N6UV3|yAx zn}`sw%7%kw4)=vl`SwK;McFU+qKX6C?WBjw=L8ZlzQ+z6x_-E7=H#^c?H;eYtz<6EbAKcUs0lxY7oe5rbyrSDZ1+|0mn+{*N^tW?g{m$xe^5P1m|W+ zNYgtKU0Ym|Q$O=~16R@pv4tL8E3DF!zE2JrbyN-y`KlxYh_eD?JimtmI&fg&G`sX( z5>Sd^YsGVEc;gy~;+cKxi4I`@W2so%IucytqWD;0#umX-;m?f=@dBt7{R*=Xf9r?o z6r_T9{q$*%mtm!c)9p#evC!Dp`ml-Ee-t=@O!#L=QP}OYEDqRQ^mn=vggzA4_4cu` z*AtiJ`8mXP`ZG*(d^kkOF`zpthy=!jqg$FpB&;jlmq1Z}_-?|;-k7I1OHGi&2tO4$ zTDTZ$8Or3+{nj4ie_x&U(9`tS8!Y|Sf0zE_g!`0S8=(ff*EnKi6>(xj8d-F51M?nNX!Wh$F@9zt7ky92`*o}FsmQR{r=o;?c@lf+8hf-&=1<6A(2mxd8*apWETEd$%62O zNb+%CSyGpGG=0_M2@!8-XjV>vt##QacbOd+e)u;ZM0%9?#3B$cOsT)H);Nhy;XvPO z24V)4OHIEF8Y$+uJqcN{Cb`F51Y`VeHSdP~dJ4PABrBB zV`ssy{ zGmIcsjYRprr`@fH*=JIQXk=-FV%HqEUTHE~t-=83Y^ZO_YltnGSA#-{aY-NBaP?e9v6 zNUk+}I8ytI<}%W{OY_-TL$GwuR9&;VZT_vA%)weD|7k(aDq_IXHt<>BTZ~7i zBSUbe?fxhE@W&eUkCA$ao7Yk98=4K!tDm7be}96HCuydb+k1b`{bY04`#7iP>s~*} zk_^CiHFlew7E@+}nPsdcW45wpr=}uf)|@4$es21EMaE%M`4+xfCtkRIkmMOkgH9Qa zmJeknMRV}PZ%Rh^Uhw~2pcS}3XD)!D37C=-9Nnp z-*089k3jm`Nr@Cvddf%wM-3N@{Z5STI#Eado1XNC>OXd@kX&O z_RCCnD9!-a+fq3>JHj`CFw*Yu*D_f^Kg^$_Z23c)*E<%kqu1|91je&JC)>I)&>pQL zuSZux?T|g`k9)ik~f!?uFI|}^Y z$q{#oS_updoU49{kBX|f4364YW(5qTD8j#}SDYy@4Txo4tX+S?2(>ISJu_tz>IfM%XJhddoa28bWMY~i&}W{4`G`01@3;1Pacp?!IWE9iZ{E~F>uv0mD$v1 zG^;OF#rs*EEC?~vITn?bsd?SyH#Kud@pX^sdmVZ>_7wbg7l1|kkjx4dL|_qO1ZFu_ zl?ZNbjs-a7<`O6AYnccwcpq22TXOd60eLlvaW(R1{Rm(|pSv|4&a;JsCxcn{x%!a7 zUyo3MSb*q;|7NMHyTR;Jr70TQs>vH*qGapI;D>y!kd5;~wN^v;N7*?)0_3(q_GpsZk;h-uU^jiBMGhbJ2wmUq_wTrg-kZSkUjxY9vY9w^b{C@k-}O;!bQIPLX6H zO{81OJnfM!tyz`=XEErKMrqVxT+2Dii7V&#QR>IQp4YogLz=)?}?Vk38hJ=tM zPmf5U;sSxfmoP?JGie{jsot#+w7)!gPYbo~Yh{hRNaX79jYqom6OfoAES2Fakncir z`UzzzJO4jjEY$pe=;AEklh<#rN&>p=C?{4Lgc&$=2vI~8BeRZC!~~-4zD42PcN(z- z`FFH6U9iGWu|zh1*hrc+2V$8xreY7Lvy5H=Ct~9sEWUgH(Nvs!bhCS!2oETH$MMzH z#tE#>HjaCW2IxF^rho*1OMsq^BPGGV#Xnuj=6sNp zYoc3B7WV-@Sh*3%bMx){O0Cpq{TU;-_{%MS$zS#dJu`;&ziESJb&Lk~yNr)L zztj>x$}|jHWyX>5%&@*9^1$5UUL(lI1%zGv3;cju3duY2ign#^=TH)Q+GU5@?!F>t zY?8af&FnW(Blff`#Z1c^NXT=^e5T66G8A=`!K?i1J~$VdmB6}0KxtCb^L-Zs7LlZj ztLv#h{SIH`YyIO}Zr7b(;_=Ao^Eb~kJNKrtX3ND;n?)EzKUOggF{`!@KipDLnNlev zr72#>Ukd$2RDK5=(;&EujmCgk#Z{<-IQjxU1K`fur$Ic+PnYW!>6J5g&IZ|I8cXTm z^tm~Jc`>HaJHG34*8OhCyGuKJ$U!2N_iaumV7)y8AwuB-V%QUu$eJ%a|H8_#0Qv?( zRL1osoIWuRr^m;OU932N`sjz>@)~6ac&WPk>%NPO&sdFK6_S*P#s!fk=%=XE=c}px73Qn zjh1Ji&rlyi1Q1Pt^WN#p)w+CK7LV1n$WpaE_UWg~&L#Oq=-ux%4MWo*M z2NV)ol9lD&sbtn`C)&`jfSYEh=`qlW{1ZBtwC6x)S}=@&nR<)zgZj1SwftJd8+czhO;p9L*s0TV>GZS1Aeb#S$vr4I!v%G`HEKBt(LlEC$6I+4g4SHX9Lbue-y` z9tZ%ib(mI(bJ{NI4$>>|!Vx-Hs_m~TX}iGa>L&=|STu=tx2?ayse0kbTrw8u zjgMOknfkblr#M0`l352oi+{^L`CYI#JHWU0aw0F1iLQ@6hQRJU zZIW+J6aMB;q%hnhRkwF0Al=!b|9R2&ZLfgQ&C%lv$w}D@6E_{%$hUwHzqg#mSYN&N zv0Q(LfiE{%Db`&N`$M;ysi5lx&W-h1Wt*T8vL)|3BVr-<`Pb(@MmJwq(%0cGf#ZiT zOsyl;No^}Vua}YO>r7#DVME&xPX;-a;5R6)zI3;Zo!o}a+iU;EYfwzKuwB?~QO$5q zl)Y3@i@_mLbAkV5uBODx_>fkDRW}{^%cU`VVcd1uVnzuYA9eFvMQ*3vtdLL&VN8w$ z;6@<^mRim~P1(s#{T8OvFJ>Wy?jJMu&43JxiSE|HeAqS2+Qa=SDo07 zXRCd3dsKLqx)PSZj-pzq^!gVH{x}*3FZ`KH-h=^gaLrB-p5vIRIgfSigAcYGV{AiG zT2zziqCtqQ;3F@d1K)1w9116Xu8z`km2q}!*ir?wmw|%zP1YLo#$E)Q&jw#5aiLq0BuNWFw{tSLH+QpyufATSgBjCI4{51Z50n zixA#2e7u3G9E|sW<&|9RaL zz|9rp-|RvdY5%7IvPYh6`i#c!-MOUK^14&@kp09jbWCq~8fe*hQfiM04;JPCI$Mb!G4Fv294Ra@G zrucEz?0-F32vq1UYZEnL8OIs(6H_sl8Nqnp&}wKDUMmN5RW;~y%l%j!_rryqm>e$} z`nmDd77J7y^{GbMu?(3a_%kTZVEXF&i$%0)?2P7R(VN?TFBN4yovz~ThQ$gq^^a)E zsk>iUIPQ(vx!_+7dnMUeK$9w|(-!GV38d}u|@>mMB0zrfc;)n@y*1i(ag%KF2y z4KV4Izs5w6k=(E2_{667G@oCl=@B=ZH3wJQvR){^-zb^H?lQ{B}>JlhU1| zRpsF4@_SI&bF%!beMOz$%_>{%mlL9g7YF3K;vNzit_3F2bPkN6`BUYZ@ z+UB}Ked7lD;3*0`X(mECPg!oM`hItUPsRE}Q~S#a*s3-irh8wfXf>|yBV|CMCcaoL zFXQL|fmM&J&zo+Iz4a^uW=TAEO!rkRxS5{5Kp>LExq5n1xVAp!O9j&uOM25INQJN< zn%8SbOa|^>`dy%%th}86Jrki^tiSfCsR2V*oT>i{3Quq@KY>=>9q}#gk#Jy56hUK?B0bsj69aYq2{}_(|{Aw#s7LR{R?1B{Wek?OK6J%_$7X$2RE}#?Ucd* zNTi!-`9&8%1*nxpW|!tGXvFQ+(D-wpjYl2$2Xf%pYPbpr)l_ssxH&L@{5s-$bNWmG z;-pF8@93wihKG#}F|p<_RJF*6M7mU3PcZ`k1}6u{u$!VFx((S6k2XYoWTW&-1rXn; zEEs3*a>!&soF5C}@70pi(-&*nXgwYQR3|;E+zuEGiv2Xk6uJ?*m8IZKo;;!v^geMd z-LG(R-H3S4DhT1Mi*30CEIAEHv_LdFA(w-2q3fxFWr839hQCKcZrmIeQMdhp@}aC7 zKxbkc)E&aKoX|QJSHfnV!sMjW~Z~+&x$V%a~L3GDVcLF%9 zfG>>$)}(*+&NRCnBwD8eu!`uU-Lje@XIQ|IY;rO&SU1`*m}sb~G8%%K9-p1ru&%=& z-cZbH-RX#a^6)kj4}2u2`#HFph+d6w10!$V*-YLDhgNHxG z1K9qWFndpDD?NK15s3n}b(Y)YfAY)6eSAIR4;3rZcijv%)Fuc(LQtN%CWVo7Dw?_F1vfxc+JLF#N3&y=`$85(P3z|csl})+PwL= z8;^seknY0)oKWVUm2GmyZn|7~#V1Yf!Y!&6HOqBRSS#CDYh|)>C{Irs!i}<8E5~6{a6ujc^Vt!h+}%nG^Yy(bH{boTt+KOr&C|#5530p~-*w zn)w0wu{zv!sAtrI7%AvV9u;DxB2N&^udA-=Mh}W1DzMhl@vx&tZ$hD+|;KOhHcxFIykYcJ1>xT!99iA1A!xGM6K6@M3+8c+KBHhRj*}z(Cw6rjgzq zopjJa1#3l$;cLGvpB8{!8VAfLsst7byIpk1k*cvcV*mE-S4hTd4##CdcyG0tiSMtK zSw??!kzd>hGqrt$71Zr;fe<4*>%GpL2WuFt(n#fxgIsozawO7|`}fVrrxg0Tb`7uj z4)M|c$n#rgzw{$d)Aue3w9B%UqGK7F8e(U^wBNv zVN0b&3>>qu1*f=E0jCCL==*IJf(!GKDAQZRGSSJ zKWmE#y_TNWd|Jp}M`p!|BIyxk2fUCD3O;hp+vPpR6R(;JXGc#(@9UD7v5)~m)XdvU zU-@G`^|X6U?8;=nTAWLZ+KRuMZH?=?=c4s3S^cH?hhW>pGA^~tsYOaHe5l?Jyo7J? zaPr(VzHtnG2fOzlE@&wW7VH;0-X1sL&joGIkA@Gggyx^2UCl?sCPybNpY>itNil4mgj7*{CPhKYp{ufei|MqK^pBo|aNlAzt!om~AYc@W- zbKn`*a>gos8&j)eeF8ZGBF6F-9GcMd$F}AwCdS`=Fua_kK-38L0I1km`ik@nBm!Hj zX2e8v^9}3m#b8-a5om>`F%kO0^N4i*tTKyvY)osw!7hMyyFz&Z<>i3l8muGjJ&6xbMs_*?B^GnXLE^xd{*2hOjE5R==N2@t%T1{1 zIRZy2pUH{&aK&?Li*pnPeBQc@OSqQjfPpR7v0C};9&CnD*kld+p8_~Or7R0X0FAHs zB~1J337##!F~@~>Tn};f2O&ZM593OWhV-J?ZY@PMy*^fWa#dK5C{388QmVIvAqqHaGrecgbnXjpYm*p#uauM1FE{EP{^O!vEXZ;gBiH~ zFj(ED_V^4SB0ffYyu5dl7VrCmxHlf%#?*DsQb@#140ldiB>o>&XBpI18?NgFch>^N zr8uRyyA~+!?(QzZ-MwgwyA}81E-et8;_e;-hi_(|J?H#+|0XjlllNKAEf@bctM~`u zU;9bwE%|t#q~@mAxwTduYy2)2x+~FMNlstI0o{RHKl-EKrsd`ZZAiD=D0`%F(v64j zvzk_CPL5tSA|_d?uadsBczr}M!k4$*9~oGZtOf_%e%k8X9z4;QxY>j(?o6>~o2|Af zsWMRa&>s$^-WM^RTEy^_Ik<{k_^$r@VKYUB{LlCE3Qdk*k)(yl`Rq)PCHe<5{2H6> z)E{1k%`1NA4db<}n+^jkGfZvC-csKFW_$8@)S6!S6P(eno~tKFTjTbZ7@5tf>@Gx-mL8&8wp-LLtQC9idrWVWGt+d$w24n;?)hFkSWL z9FJXSh=J8ToYcpW^@*2uAOBH-hM~1Y)enV{nn)jX^l5^ZYG6_!--p~WVk*H3wumy- zMG&GLjl--I=ps)0Xzo2m5pq`$=)E0%f%-DfY*kCjVfyK({`1vNL70o%?cu;@<7;vz zjI0EbdUa%qVO{HNzTN|jauutHIKO-sQsQuwgrVKWtT!)G43Tbp<6cCrfR9%`Y#VgL zXnp1WVs|eD19QZI;_iwC9Fg9lAr7o%sP@NFrfLuEurkai(myOltP!J$`}=>I!-j=X zEar<7qgcWh65%ENZ15@D-!Ca`^ zv+-~hPg5Uo#{I5+DUyG;QJmrgh%+7}{@7OSW3PEZ4KnXXTz?fi41QmmI!%j~E9bXf zr(2U9R1&Cvc)57}SL7U=7!}>tHHhKXIytesK5();)mZ9_)eXXPb_pp zSSxcHRljm}E*l!Mbh1ztU}nl1=l)&7PZz#th7C#k6T6y?PXqM2yAB^oPP<#XF$YiG z1~1mT8+_{wmx>jf6~eD zT&)BYb~{)0xy!H$6I}AfMBf9 z)3br2)dw+xk#{B0FRo> zKCv-_mCW4Ftzh(u0yQ5CP0{BPDMr3D#&U2^gj_b6%TL(b7{Ce5TnZ7(sHz-#D;WGkB{43BudqER99Tp+92csOQ2k(4*mZqrU z4H!no!#K%Ay??FlyTKPasNOpwtdSH$&8%=MLmRHnuqwDqbe!O>-?z(6WsZTuj&fj} z#;1IVzy~F0X8ecCN0 zQGE89GaSI}WH#W~XS)7GHf*a|q5L}~2xn#>CBzA^dBpU3jooXBGtMWxt+)t|Q<%{D zZS|6xRW(Zv@DrUZfr+dVg2@;f3cdwtwinQ>-&RTTwY+p7_g#hVK7CjZc?HTQ_QI5U zROSv=sn61z7|wP}T<$MG%6=L7MHBxBmpOXa)2JGhlz#Qy{-l7M}KgaMDR_H8fYXZ;SN6kN0sfy0M zh?#i-!ml|;|MmS$?08mq{S{6{#{|9RC-5KD*(C-zI_omuX*q~J+coz0y z1$RV{p`|`CeoEJ5ZvF3sawa{TsBXWd=dos3c^INxB{1}T6N+;CtKsW!AGtNj3;pD} zsIVyODFsN*c6tPu{Jntr{O|WNJD4pI&zg~8@UfGlpf0)5v(xJ&LhZdyv_IupWP;9S z#Y{~{(SYUt@ZM%^`bL`J4qprE35pxZ3|}Ao^VkR@B_Zr#TQ0f>ggmI2}dP4#|*X$AT(m*aS<&yUFC?C(X zuix~{?z|3Xc~42ZZg*(lkCB&3)>|{AuEk?lRw6!A;J#%3?dV%cQb{>!6uljyu^kl_ zvy3@$Fr;`shGObwgC$VY`{zELq@JCtR(Mb3PnW7#Oo%YK3(&6msYK8G`LM%^f1UXs z@Ho!n9r_^8r0L+YX~on^ea*K)6qUc=Nqcr?EhqAz=aKJ(DvOCl+E~^m92G=l5ZpWm zy_w{o32*Q)LcBr0x$*r?is!#{!@gE_<}O>Y79_+ZfH|AjRM4^6RnyIS`1yqFZS^&w z83l{PPT&-ZblMVFbC@)(VpJQZU_WL5`x*OL9xD0frXL2zg${l|EEHDiNIT;V58RLI zP=9-me)YA>;kd6FHwnMmpG6TJ6NKxy;vKfo_TdmK>@t zA{H*rT9i1Zd7^v*h2&x+&7FMI+#|*d3i} zmRcU)$C$jz!!xt$jNbi(oH2< zxv283Z6i*Z9b{Npe`={(2zHa-i@U`l%@w00j*9RW!PO`ARmL#WC{l4g8+_Gq&&2`V zaP&G_$GSh@HwbHuwyv>?vYtMukDAteEfBKRNq_Otpo;m>>AFxlc->Pixnr@ew|Ej` zyS#FTu4z!lr8cNyp)>6Cl;F76Q&H!~HqeGo_V+Cv9l^Ngr(FjZmG3k6LF21K&qYjn>qX1_K8AqTzqr1egAi7q_i#FGo$^XHr;(1HUYXF_ z3+94k)Nah}GGSGizsG$j`HNxOMYFAwlT+ez!=SEuGq9ll`t!Z@Gx39EpjNAbygM0W zK|r(l0kkm0sP|{1on*=WdD}*TZolS8CWx`XKKb0G_g@YJ-k<)fMvYvnJmxQ~Co|1j z30FQ;Ib@?gOQ}_rFcRXaS|I})EE@PSfQj%Zh~ApaMX^J8ij^vdvxy09l8S5K!?OE@ zGKA>bCX=2xi8PAsKr;pH`7hl*HWCT85&4aSn(A))K;6slm7cehlw#^t-|QztIU|-C zA*YhNr<07@&TrvpI7G^VYm+arB0q{H<;=(+10GUnP*gjAvOyk-eI1p!gl3y>Jz6PD zJHPn>%M$S`63yBEaDs|(rHI-hWg>ldNfy#02!9iU#tL|DDeF1GJpYtAU@J9J)3O^| zwUp6%V8zMl9nH}V)D?SG8l}i3^2<~1CBy?$Ha&ceL~Yy93m-PX8;<`wp1u#NJYZPB zp@Fk6mMDZ3ctn!pi7*T2Ac;K!7@h?q{XJd!wXujV1G)jUVuz@}VQ&NB@GOK!C?n0y zaBt0q#K39MRFA#H8J5$b+se*!WT-^a)TVLEXcQ~JV~oQ=<1&$0h0j@~ye<)V_!_9Z zM&=@KPn&WL%*}*`kIA`(YWEv{PRju@^7v5c+QQ$S%Z6hMZGAjdsu8i{#X@sI-%C3HnGs1i@*)&!>*7;E#*s@GC!r}VKhKud;efnHX#q#g6A4a;r+BQq{F>&>$IM8Ngb;R0v ziR!+YK51bn6(M}?sgxJ%dzL0fnu5VvTwStK8avAVm1*<})c^#nP@eZrvwRR@^^5|+|5NHGtc2*5Mh&N0^3#c_5s+X(9Y zS-?|RRI1>aHawV0Or`t2^CoTzG3gdW8ZgzX|7ZHr<-f{yz4IaOzBRKFogImmPSMgd z2_{JZ-sKXVS)L>eX4bB`YZ6&^_30ykjv2(xedXkq)ia!iH> zk?ocJKal-Sw2Z=0{jb`KU~-t)dl|=mGLkU0E7=3 z)TT5UR&2F#16{ln?nj=tohka!E4i5@`KgHpzsEgt_&$8GqneC1Fl$^0hEVOh3DLn+xc5kgoj$C z62=*9O)~|Ih}Uuv$1K233e*Jsw&3v8&=>K;ZPGU_TpCvPxBsdvDbO*^_IGianc45vm=_05BxSx@Qe?V zgFPYG!z6mzVyP1F?bWzgZLPQ=c%~-Ti)*s?{1}L=eKV)i{+=;syA^yo#l+nWd$vCs zhp!?)D%oo&TY9l~DH$$x)Ne!P6HFQ+N~$FlR4yOYkr<@1ANVA5EuW7-~tmyV0br3JoIAN@iq**3a)!%FZa0< zz380#reXAL53!Hka0;t$_B#soJTcKK#<3NeH3Mj{2&%xQ!YAahO~o ziR@CVa|?E;5yX41b>IlDwaTwgfLu&Bjy#jI$kpko z;?V!j{T&c@g8F!F{pYv8`V@|_i0HHZXC{D<=<~`t#C2`vCFR|!$^J1TBjpDRfN}Ac zTrrth5l?XtZS#3rR5I7R37s-&D`!EFh0Nff$kQF+@^|k)R_G6cg<D_AxgZakEjO#Yn&J!k2YWI#07)mecV8%)ToV4e-TEbaq&?D4 z#6zlC)X#eQcG266!K3H+M0EoG88aeF=G2MNe9I+bE$mxQdhrj6Gbo~UG|8WWtCv!7 zrV=qq5%qi1?eDH=USK=b@3dRq&XSy9CCN494dok#Tn$2@2lz|cqdEc00mT>{(iZ^P z2v*f^-w0b=4CWy*G#uJT+0+fl+xFX!ePp}4SFPeY;!wfOT>_GLb2daxmv}7Me|i+a z;9c=kKEm46_V%AYHSq^!8K=)fMR`!5#jo4VsQkcZY-3->=iLe4liry%Unz>0Phjgq zN?uZ!QQg31!-hF64Z@FXqk_sU4})U!Xm{67Lw(*G%I{kc#aBKYOvPe#{F0;BY+RK9 zeV59ghy^NAx@f#_^`M(4GLnM* zU$P?75mpj{t7beHi)%l;6^7{iwR(}6Zx2rfDX>A8W~OM$ni{^h=OBw(5qpwm*F(cH`TG_v=MI|RM+X4=oAJN^Es?88aZ9|XS_ z+(aP@PNN`Oe1T2}m4z=G_^gGx8lwfi$9zwXC$NRDO*6uONi}R|gdQ3-K7I2K^qh~$ z;fHYq#q41UIx9jA*m^rs%46Y?2&T;};4hhaE^_Mr)ID@|e7${G9gHN`?q(Fw^jd%E zqJuv*s6DRV`zbH9dEoGENr!LG6p2ZCT;u{$f&b86*rmjL(zRyP~F z9L6DA;ZKsapT-KStL1xWoc{O-C61{Ku@~%2Vq&ZmGv@vhc@wBuC#08l*d6ey-Wd@= zjwY^Pq55^$|2dpVe7C-9A0iD7_G9tt_I#!24xJklbssiEymUm^`d+oVcC;fM zinswL_oNT`;1a?53{N41Q86jn!vv`zgTTPToch#LYJFl*xAvi*#vCBnOWH2fz>}Sh zcTtZTK$XH%Uyi%UY1tKugvn; zMoHIXP?jh%WKVD5NS3z^Kk_8bLh0$~FDESWK@B1H!i!yKy27;i#?6sK#;!Q`sZX=Q zX@P^;cu3~wlhlw8BjgXZ`L0bJZ$vn(yy;BvrFANeG8Jh1ij=F|re%rRI~MTJE2|NwM0Rl#k8JEOLQ_I7--2!+iE zs^60P953BkG0w)lB9I&)v9YYF{s^uMl5Hl#J7)~-A4LhxN>{FDyXakDKwKhD)=$$d z0;eD(*-_CvLSu%HNyZ5SW7FFG$;mqLg>q=_;f)m?z@vx;`YOENa7Ske`xjDt+HfIh z-j+VBbck68k@%NyIR!m-YNk46KX1Bt}lBOv4gVKn6!egUnTCTlMd`OXZ~YLhlQP9gjn#xBu;+punR~q+5s8x6B-qrj?b!441zS(+~dT z;wv&9^v@cYa7WkR52^}5o(a6Dbrx#E)kBq>E?e)#fUKc_0t0m?spsvGTi6)EU+#yE zb_2$m6QP5{bh};p7WI?x`4bS3j_0Y?|Z}m-Z)ni!%Fm@;>EcUxelj_)cYq*d9c%o_sZolnQgRGM>|u_*?eAWvJBeu z9M}S$qLaEmxz$D{R_ys%O#nh*U_vUDb;$ff!1oEN0RJM$Qk60OO`R6}fF%`{9`mrF ze6aFV?#v3to3r7~!WtvB5I2!RX^_kUiucnU!F1w3Cf zFTm$yQ!RxJ(B59ZG0S&loRO(TB*5RuxN@c|V#4;VAjq5cbi~U~J$p~7Vfo>tU5IJ% zZ`d$B=vgH29Yy2wSk8qiX;jWD`Ugtz@{vF_X}K zIMQ5uiplG(>CL-)eG#g(P9%Ce7B0&pVHAaf`{z|C#a-LVnp4(EI~_|}xMOrA}2AMR%XZd8xzWFmeZ;(%5A>krd4k0AleJ&31` z6M=%C-K*mF*G_xAVU`0>a6Tg(&A?5*6+8JdO3O2+RvH}RHEyvyw_fb+(y9jhzZ|$Z zh<|X+j$Px3%3_Y+Y(*4@yXQLga~PcB=|~$^BI*zP;MzsMZnE&>{3t% z^=kp|9=dO6O*_tb(RjcX*P(!XHGbZqedw8#FrJaoqK?LXS9|bAJ?l3~t=l%VkwjL0 z22m7+WaqcZT8fyU&MLj#FbdO7aB6ns*7|bPJ+7wpU8+?Y#{tD`u&QQ}#W5 zFDz>FLGP z+__E2MNJCmzLy~&z%%;r{SRqrRw<(t0k#uUje1uL^RHMp8o0%}NeXjDLLYSrvux8- zaItA_BF7)d6Yyw>hoS#Va#|3w%F~o;%eW)C6E)~LrKd@g3fgejmv?<2XkMliV8Y|5 z-vo<@vHGujof|sTi9j7t@(NhQM7Q~<=`qaKEBM2cumovtWr*VK_YIp~vi;`!FH(c{ zN*P~)6|?ZMV@OBCzP8CtNa%j~fc#V7BAtC-Q%8omaW?s1j_5IRes4+q6LNgiPG@?^ zc?z4qZZU;N3$vf2jUny7GNDRccXOUkeMQhvpMg60m70Ym`dyvwPcgmrx_L7?Y{s%AE#&&L8 z)I@fq%H!H`Jfz3Wq44Yw9Q4NE4!^pBj5js81$fQx4_y3Gj0^_wd9>uYvR!q59OQB5 z@xPn1`(6E{tzFlaxa3%Mo3gAktj{0j z1$K9KLf8Lad3&w&Bd^)#t#WCaIL$>;4QgGRQU3mOb_vc#?Q<~3O)IKssr?Ms zyh9xGjx**T)@C>7hD`zpVn%IDd~;)uI_sMa{*; zzz?r5aaxU$wt1}Q`B*`~Wg9mDui@AEs@JUN#RiG!A3}2#FZc6bW$7NQtzm%$o?&%M znpVXLp^&_Qo@(9xi^fqCO6UT?5O~)#HOD06L5%s?0pvRK0WL>BV-^S0A@rcU5fGf zpI$*N}DWp8uhoR#+kGbq{^jd|MNao`s+(?mc9)k3-B;;yIFLO=;(rB z3Hm+*?ik)&_YwDul+-hsG9#8O*Y1%AYr-NFv05+4nPTA0m{$bJiW)=9HmeNRp91-*3HcKSWSYTUR0Q| znVb&_;CEAVaidX=2~d`J5oQON;cDi@+4q{$|9Ar|Pp-ore}q>TVJHnG^*+ms6mL~= zMH^{P%)5iZp(G9k4KfZW!%@b=knw7*9TrWRH;1f+BPD2&*5?_(SRVbjGwT;7_fkA? zQ#?26(kFdjZ%>m=Kb#aCzCLZtwEM=vz$4GJ{q zVbM!&VnH^O*A;#}?J~e#^-Bda8~LBV-V*w9sm)usN#%L|dv?}FooF^}W<&}wQ_&!U zD|M=@`(??|R!0xZh^dT4rUDOm{(JlBKeyZ<4Mh~D91jwwR7Q$CQu@BII_4-s{cwA*sV*V z=ODFX?BXaVIu*wFfmts#rEBAH!3A=Bx}c70myV{YrIx2Van4&m5qLQns;OCJY%D#? zdRO$diy}&d^^#UkTOSy(J~&+!2@+UArqJG&!-5v&9Du*Id&*Ma|y~x%VT*1Vdx=2G( zcitBmeAu*V6HOT$Yw?G6Xi?8?B-tr0{^NRd13ZBLIH%M&XoQ#mCCBh@oP`Tt-^1M7S3csMj4|i7IQA zo=71W3jDQ^!jBFJ8YbeVm}dal{-6y}L!9vbCq|(hVj;LwFgO1xM*`>t^sDCt7!D&N z$ubmtSEtAuM+Bnj7B%#GJg^jH|6>8TfF{B7^~xzU7c-Os%nZ&VHG%TgDO9t{*>e4X z-7XXn^l7+Z2HXt{Y*s-DpI7mKM{qK(1ymiBuAu>~VWZgq5Ng9kHu z%|x3f#Uqg^pQu9{DTmBaC_3B2C0{kdEcO%hE`>RN(2=;nl)0z`jkh*`s2@4Vz=Zf) zssRn+8OB`I?HA%w_gfIAICZUV`NnVrmmV{+X7c9Z%#8IoTTIaC8&dhA?ousq;-xau8%((u|!omDseg82Xg1aaYOOA#i$3gIwLpzQ#c> z3C-xqocNv-5%^pOk28*;x-D8CmoL0&h8Xm|TO?m=HRQa0X8qHe&BgJp1Lgz`81zCD zSI2ml8B1@s<}bpNSq-eZIArhZ9O43yiI4~4EN+D>8#WLF33b2JTCyV7e~7xCreI?OmG8{sL}sVlh`Crw&J(Cv9F_^|6K@a-$;Fz+zhBa(}V@*55m zNr;kAcB*P@c*lu`r$1kziv}JqGk#2vOzxZZ=GuF>{$PP^$zIl(l&qa#(d-RIh1bmr z4oBuqzD}-ZrnNbIK_FW(6kdp+UGHjI-`H~z$~QGL7y*zq6KFR^-Pw!++%5Q)Ixa5A zf^?A-UunoE;rjHR9{|T%5cv~D%k8*}kqo~DwyoSyIzHC)V6w+U>+i~W5dX_y^dD|qYLmSDY$YUc{6;O~?3BU3 zEWvi#_{2WV^F_Y( z``49vMl+2=o@{YH8(6?=+m|ogmGUaxr})WVN8h(fZ&1BX2|JElYqLJ1U>I<-tuns^U>p-Uq_9}g`tKnxXS9Y{BW$%Qr(}EvAUkd_E^H| zy9&bUUyP6!_9ENJKUBF)YFv{mo#!o$r7yQ?FL7AZ+d<*KK#o_`}30yNCatXqlv0##;_rwoJ7<`ZR3gBTq#zDCq^_>d{4CQG{nfh{vu?f zYP-&~GaSiotqVuHE72cgy|a!sZqGk4-BvA?ot~r6hqC8mWnlJxY(yuyY@X-wsTOcx z*84R1uhml*C@O(VP<>|sleAO)uzRFekpFXPrTDI|v7TQ*f1of|c9+-x?E<(&HKzPr zg{ks2$_MthsJ|Ar9W>=O%bd~kV(Ap*%kGdque<~1-lX4T@#Fzf-7>f<;L!KUCDCkU z0TZNFXE9-F>9*|D*JbqfeRubJ&gVQ55ZA_h`86M1PRW&jzw3}A{1%YC|92$yR}*6A z@MMIWRnbgxB9T?zLK|wwb3UdN$KxXQ1a!jV0u2kl@N>O?4DyIVzdLp4S~L@ zz=oszki-L7S~YIkW6j{7whatSoS&`16A8S*A&^R&U*mw>E#0jU#}Gg)td7VLynyR; zi!4LxEroB%wM;rT1p)WT1|9B()92=Z@*<6&Ultb^ms6F6%~)7m)tL`w8c(-&s!wm4 zZ6b{ijiF5`%->3VlUdk)BuUd!?I=2~p@Q()jj;6LdG!q>=7EabF9`Hf&uv6nyyRY| z{5WZ5h$17|BDbNJRkHB=1~le1tSB#wn>=K~)@NWgV^Q-LrAk?*^j;f(b0ryHudo=jW*jAg3l*~R zC_rT^+DkwjMlVF-5~r0Olb<=eoLMPfzzn_7LsKLZz=%|Kga=|`;<_KkYy>=S>xJ$`(=J8B!)$=K zkt3z{&eoF%5hFui4CwARB5R7J6O=!@qhNv1X;}Df$SCsu1y5*da8~(cZF;k9x%YZ> zI>H_XaXR`e$oDSL_$}&BRymPkR-Z!dTUHw)f9{fRn*7{Nnqpa6sfdOCEBer20kpor z2O}?+*kY4#bo4v7($M`b-XHY_y~@{BW;4u&t<9~sM2rRMBXes(sOo2G8n^qUjTqNa zB0t!52yANO-UZ1&COq6QGIdcv&Gj75|BC?~t@;2D1J1JeUpuA@9$)rx&7aKW_`ePf z^g6MmNgAf}s>Bxx8e5MCI%#g7-sG|5{bR2-(5k&(&9C*$!IyO=remthmOv&5Dd9P6Vq|-QV3lCtTHvVSF3GeZZVyxWUdt2-v0_vM~sfJ0pdh!sa-v+R(;NQG!CIy*lBr$j7$8 z#>?;Zn7s|;WV?zg?}`Cs!maqK63FcJk$&;I?*Z?!m#;j>rz^XP&_TL?5eJ^z?i?@G z+V6FN=X0XQC=r-ht?d2Nof!)y_qcqO3K@<}1vM z7DM0ZXTP(?ulWKFZZZiKl_8?TrU9&M%CKF(NdW>qr%djq`+(DuRhECmcq)WBbR^bf z#v*;+`p5zKz&S!)NB%(cevH(O_`IAk;R|j~VW9#E2Opbnq%ZwwS7Q7&wgp?J|ldGm50;NZ+c^< z6jLU`%b$U%H;ej4b?80N2oqIXQs7WrXz{J#!7FW4@U(u|NGPA4J@8qKv&RNikobe{V#)-Ssm z;@~iOjJ*5md zXgI0=)CfFas*1tq(X7@RBv$)V8J8ZO-Xs4?B3z(lv8QO0T2R_jtEqUSRU(ju z*>@qIsZ>j$Y=6%5em_a2R;oAIT<3U3r*NF{uSk+YbmT=doaanO3>1N9d2rF2A3Ot+ zlN#>bquN-Ef<=R~I_SYW0|14co=X43fk5D_5i@hN^T*NIKB=R@SgJc_``4L;(iTr_ zo;_k7qJRUkDtlZ&ufW$ncE(LlomeE9-7*$Q@n-iYn6&~#Pufp9^oc5ya8r$#k>3^|sj~^uflm6nByR#gOf;6886bC1-Ei>J_)@Q4>Uw`@ zX?OmTORok~D;+4|k5*mvGUP#jPmheVMi335QRi!MXbLzB9CH8!?5~3Zd;eF#e%G=$ zMKNjisou${gQ=z?mw*q`xlWbsA$*)IpM6MxSAyh@yj| zWria-oq0vcqzV8oKem@M4O!RFsnhJzPQ_{P;gUmBMGFv9thGuhRcT}%woStWZs$5- zez)p+JplRcD$TWN%^602WK?HdYgsJ8(e;UbRMX^__O2o#8fD*HZdQYoEU)v}mI+|+ zm=-+jsHZWtX*E&9Wg6r3xpa0N(=gNiA^+0sPj-F|TK83=J=N6(B0|anzgV1}Y^XY- z4a>)=z!f3wP-gyP5UE9OCCr6YFfAb0+H#dfYshz*;t&k=sv?r(vn<8BMA%JGBep7x zrKe(N_24u|s>V#wsd}lBG>NMb{&V>5luL1g>{p-tr0TnbiH&NYjv6nmEk|QVMs4D3 zLRnObeKM7Cc4wnE0h6Rq#)UF;x~Gqkos<3oan?55f_`Q zvW@SifROeLW8UpiZFGCTZAD6*^XVQ0h|j3=l6QjDx|#WBM=++09}yEj4}t|=TvV1_ zBRq{Y_02baY}n9mI$+npA$T*6^yqHge*k)F4LH?k)Mwz{?N8O8PXbcBm^U0Z#fgXo zORfosLKqWn6ZZ>86ZikDj8==@4S8PYwvDb{fhRsXxh1!yq6iDk9X+&6OQD9fCPoxIw})BQM_r^jrPM7){4KCnbXJ zS}!82ye|)h1-vPAQ=yI03Kvasz-YD&B4l!GXX)I9v#s+CuF0!^6U=Xg$j-IfL_~ik zs&3{2A{X;poxJA}WQu6oy9EZfi;wYgl3n5Z7;WW;=)O1wm=;mD=`leoYg-u8h-T2X zaQd>b73N#aFa8_$bSeo-72u6e(YU8aPu@0C%mS8`Q?8D}vY6{`6IUDFwtLYFH@J|S z0TRI5V>mdv95_d+L!GEN#kgX5y3APkw)UPeO}xIGzmI-rc{_{URqG$Sl%r_|7^Q^x zOt>Hk;6j`pR>QNVAIVV;zRFrTXPcc8!Ph7x`ML8SXl8RoE1&oeP;J;C{7rm2>7oIH z(>aT{b9KfvG@`@LS{g$1>l9?UY`6X=X9ZZi9&*Us8aFqKFNbP&o(2rqslAN$L%?v* ztT7dgqDyC382_p6DOn2MQ2{Tf7hDGZs7{~yxkl0Zow(8};VUfSkiIjpc>VZLvRDjT z=Z3PD$rF9%%r(aqcy0mDZ^fF+(RYjA>8W#;EP!eXn?PPQyQIDuGDhr2PeU0swTa8e zM*t!_MaC(>9_AJGb)T6UeUu@uFmlH{$8B@cm_?4<@L8zDAZ>iwSIT39`L{*gPmWap zTh1@zhg6spw^k_6*qURJXK5L-XhIVU>vu#>bd(uB4=1?-W(H-pgvT^BbaqdCSlske zI<26qSLRO|)wY@xX!4nTS||mH&dL=*xXU2~w5zbWFlfG=DKd_g<)z%5TG-mLo4t=~ zeWVGA!F{<9Q&I{|8kK*n1{Z%PpTs*=UV{;!rQ)I+49F9qlc4@Kr>ns@ox7Q05HvUQ zepV(OzV=i27c4(4NH}C^o=)?thVf*Y(|ZF|xBQUoKFE`{as;Tq@s8fbfzF*}A!aS1 zT8xbpeBu903vpFi+GLo`uH--{Q{5H$o=-PtY&bL5xPlWvkb?dNbMVZ=P1Dw@-L5yLmOZ8?ya@&t_-eGCSM3_$@bB^|mhwa8*e_p`zk5@-b&okgKlGlWvC*D&07J56x7Y`_3K{452V-Frxp=oG$mt z@aUik)fP7(W$Zk{ZiRmefyISZ3b#|dUAoKV0fal%rw)T>L3U8HAICYZrQg#1y}Z7x zbCdPWG%Y&_+uz;FNf@LzHz>u1QD-Vnp@2);Qs~b{9;yicDaX2leV-6oyadsP_Kj?$oaUl$L|-+>O{ z8t*I^{;H6kgarKH!6hq$hfVvTMP#k-xAp*{Td;Jkw?fas?I0}TU$X-0LnZ7&;p-a- z?)0x2Y302Xt9gU4S;wjKVg~hO08Y(unS>279#2oHXXXcNNQOwF!T#+81lU`0wmZgV zFZJ3sTr{G}l7)Zhz5PP0*K<)JilkEGmqIL)!w2n2r=to|IF8Km7VC2Ob>R-eMnX8)xa^ z`0Lacj86gYf&Guw6W_6k$J)TVgm>Kv9v&5^VXn*L?;SzEdB5J9K@Cl0ME z;P7v}j>=25>R8GzVjLpvTZ77~1`7@Bj#BAY-cuSM4tJ4F{~Pi>r~C#)xWe9@1Oa$v zvZa?rQ>X5`?{~J79%pL~n?c7qo%b7T_Dg1L%OeE=)|sqE^&f`%0JE8FvdUVYxkiX_ z3jGS$fr%o|LVBbfCQa#p^S5tfbjW^({W53u+B=!U2t$^=Bl|~Q9)=~gescI+gb052 zI&P!aq%QwnXnuIFRfBH-!2D&Ktc)Q|ojgYWgdf$Tcw&|fda>xR1ngTJ!ya7TB9VZe~>1L?2hZpf0*;hIXpo&R-kye&p$dBr<#jFTpuvwU;a;VaA{51Akl z4l-}lNCW52?MY2{yHeoYb<`qU<>)DTrwV$h_Aa$cfl}?}u!t87Z(_i6*8;7P9HlVd zNQ6o^u8>L7>9f-8p=9>Q*phK{Pqm)kE7@}LOZ4+Xx8aJUQ_>?{?O!E=RZPoP(%6y* z|BGm=UsqaxT`hcMu)AoNNzd=#wiQ42%l~#B;9v72My$Qk1@B#YwWR8=ns2s5p&Kc3 z`F1VoTeD)HQ@ZO%9z0p=p*$-?deZ-L_^eXNY04&RjEIRHd_oNpdQIySB|j~=gHAmD z?302M?au#)q>rg5R7`1ChiWQuOFg1!J`6OQlJCAfSwWaB>oA85{eRm+H=!+nugFd- zau(T(hdsd&0T91W^IFI!|$YkXGaXaRh!tKP+Y zbd~rWJPG%N1R{v`DWXD!_`6B8Hb%l*lALDZ!pOiSB!2#skB^duQeX98{}kJ(pb+w# zdjKmyMIb5#bNKRj(};3x14@1V_2O|KfcHCTqIMAR4pDqs;;;`& zm7I%9x4ajob^+<<_cE!-3sn;5mJAy~1}p}8ya>d0j8xaCtv04#q$QhGIa$jZA)gJ$ z`2)$?4gYAd^Z1tjB6$iYst>fs{IZX}drxk;-0_FvwaanX`POwqxYmT%0%J@A9XK1- z1Yv(`W4DAUG~8JwetqejWYOSRGe#Sxk}eXCjU}nUm~=Mt4Swoz3Baf8T=p_Yw2t@qyzA4w&x_;;erZ&iHe zY7;3G3g3*U!&!|f{LkB~*L9QMF6I6Y01rX%zJH5;Fh0_td96C#zhX^G%uR-*r{gzv z{1)}ZulJ=kB~Mw2lJi`~#sw07^NaBI*{AOjIUzu^NGPW~T5_KakIz`oU=+COQfbJs zsf5_Kqj~1;1D&c|RQLl6xZ=z65r7&7ygS5xAD1{g{o%c0*;cTrP+=~q78CfKSb$!8 z`%CK+cwj-`9e}&lT1RWDD+Hpi5OX->`J24|X2J9H2>_+V zS%F*YJH#H=YJ-3KKMVP>cCE_Qcl|>XHYG6Ez90T1>=IAHIfNB-TPYD6dvTRb zPpiEEFx4*fHb8}i1P(IWm+L*}#y$c}kKiPxZ=87=$8lg!6|fK~D__t)i2$e%A8gS- zE7D&Q@1C{B`ya8&j-9Ea&W{U_*QDT;Y&Qg30~Tz68^|{i;HQ81LjV`hKXLFvoV^%l zItjR2$&e4L^7OCXwB}>qw+gY2xhzhO*~kZP2VKARz#Ue5;D~>}ckzrRWPjBh z)_yP@Nq71tBuYY15LJQWQrUSVAz&lBpmR=zgz0E)z?P@~@(D)xF%q(2CO&xITAqAP zrNq+-ol_T1+x*agwLJG+*cBFP?xTZM0f*Nq&=&_;5U69kGwylrwt^ks+nH+%*n4aZ zXuT!$ld~y>XHa7v8x?^;9YA)zAmhM3e^u=B(zl(hifd%P%f;x0Z9!jQD`Sfigo=Yf zvALO_umwEPXRDd}JyD)>^US%Q!Ta&%Ib2B@N;dF0oGN9`6i*@${u6AelG5=2Nbuw2 zvn9c2HiLa0##WN{nZ^<9KicZ-@67M?F}^S)tSL%>C}eDhALj87j9sw9V(&R21pYS! zLX9{`{F?;QyRXRYY}x}WSzTS5fGKH^KP;;B6>}-F88$wC$2Vn;#twm2s9Knh^7Hm%y-dhA^`E_Ov;*=ySteWkqI9qt&1WR{m*P$$?N);5oq;+Yr$S$XJZil-8g0yEpXb7<0E<3T zDC;RY>EuKrB#@@quvd=OqtWjRjraI*Z})ciwO2(#aEDcQ?Ma<#{KUsLFF!$|y*uSoDV1JarFd9P zW2-Iod~GXYqQ4c%2Ar?owL5i49}^Dzx5!D8AY)R_g0luPGj~*FIKK=!J`Ct+}byo`3#_nqz16 zS1kg(Yxcnh5v%+&&%9*q(tDTWn;xE=5j*|s;n{xTiD#^`McCy^`9Rnyk82*bOn`SGT2YwXJGjuH(#JRF%*R7uIE=_unq4 zKj(UGq{dZZX4F;*;Se_R z{O;IwSGXK1^snmae+Hx6x@kE-u*TF3X~+eb-NR~>%k7uNRumr{f$B#sZh@l$Jg_BktU zNZb1xTvos{fj9DGM)Vn<-BC zk?R>jf5dOfc1a0JN%?)k>($TvJ7)QvyVGMDOa(ZaGF29Fd=1!|xDPn9ExafB9etO$ z2zJ!q0KUJp9mGD)R!>4FaR3L_^PLNoWQnzG1L(a+wzu0ou-yaOJ+R#a+dc3N_CO|p z-cJpX9v~*bapap|q$lvhUpz<#pt`td`PP_`{Gzn=bHqz4WAx)ppcKXxz>q{?V?9K?BUIan1 zgS(ZnUfd)Dd?py&SH&W9vuRXB86~O*96V2`bKwD5%i{XLGaw1fRzsz&z zdhZo1cJ97A?BW$MV3*s-@d`_Pyj(8NDME0TAT4tUb0x-N9Q+k_%J_#d=V1DfiLJSe z#EihasE5N#yaD8?5pcASM2M)e#$w8-olt@Y4y0W;m$R_RuE-&JAdAu(WJmYel+L zbw*chzs<7;mKIBuP#1wSS$h$jeI%B_nDE)P&ODE_z1z3h1F#>rEFE9dgv(b3?32$g zgwOuq_a4<8lMZey6gSvp@j<&G@cf8C^vHo-&2~jj&7{_sGOhV{?N76DgdOtyXHMnX z&s`l3dpC+bZtsq!HNSLrdOkdQI1S2Ov(pA|$|}TeR$Hdzo$L1QhiB}_;Vx^_oO9+v zua)aMVYVC<%lNVYmyId`|DzWkuoeZgwi)QNckHbI=mRiG44=)7T~;Qr*vQZSkL)MO z^6BO4L)LiL-FD#l=hHy7EWl74{(wsX8KMWWhBpWdv7U?y$h@HS5vdk)V||SPB~q!W zoO0n}j~M7b4}i4hhFbgK^N-k$_GW>b(reV%iH|H%T4kl(_XX#33OK7kH_Z5~kH}`g z#o>o}{Ns$SBq$=Vg##>f-4bW<^c3LKvG9F)<$M6rmy|?-#_-`S{Ihs|K%k!$Ysp}r zhn;6Z>`K-9?~^T?e!c;pO$j8lpc2ZZnnMWCU?1Hsi9pV?>Vqh#n4P^?pk&=I^e5~- z#?DqGJ@kL{nUzzK>#^^zxjah$7At|LLOS})*)u9VF7Tp2^i?}|ui4MvBnEnIT0nYi z-I_a&h*fK^e|6ip_#`G&^^1fJKpzBI;>n$HP$6~>wm1Ekk5Cr5yk4yGcifxWeMvU( z@H?+r!!adfbggA}f(a9Le8AxZ$m_(&>p*J`0Kf#MUi9p*v#t*Y-zNK;1o80omj=0G|oqq07-v zh1dfdojWSy9Wkn7!;UDam3a`LF~Fj1;C|+C`pET6+K7(;dxeC7$*FVeoi^)tx!C8q z2aJ!g(a7f(ji>eiTK5CR?;B$q!1G3HivKp>ttYCtw5qQJO!wfW|DN%^9*~}PF^6tt z1q~;ah=cm01eL)+f&r)>aJnZP&{lvqQxpBcKZOs3#Iai)Pt3=F=<#PDA!$rZmD5Vh zhK(LliENDF%mWY*IH;fT!+pD*RZrqoVdyvJ$@ud|AQz$q#KHYLyTl4E;T{&3l<1lw zbU4?o|MfntYlI!w`DXgpK_D_zc=UhPeeS@mpq{=!+UU<&-Jam8Rx67(HGy3rdcH_)>`}?o@ z?2-b^3EBB&0%dkJR@$9PczHy=fwp~nt^U3TtfD1--pe0-YG42C7k2L*yTY}n4w~_z zV$Yqnyz_2b5J^ZAJ#;rDUZHh)WYBtEf5SSSd)a2c`q%*caY0`KGlV++%id-#5lS zpHJJi_qn+TlG4#6}o^dc*g z5BJ)1nJrc{+G4u^De@`q?rgNCO;&Zgxz*o|Pna(?jpij(xEoV)>!QFr%)QLFaVb+0 zP@8-K0O<>vgX71DzrIxPXJn>N069^IQx8yNV3q$ z3Kfs(wYDo}Cf(BYyLexsPep)w637J-&&9ef`x_eqcKZ1MVoifpBQQP0L4fMhNneGw zH*^2Ycm%pB*N_hzf9A0Yd5?XN5NI|r7m-2vZy}$8jW{G8NO!>RpH0w@v7hOy>gvY8 z){cK4zdpckWO(3`0C97{4x`U1^tTmbI9q!P{cLf3!babE)7qc=p%p8h;WGI8KUn>v zkI5cxmmNN5H{N~Qrq7?Y*4_K8wQH~MwyEt#z$`s zS`6j20%jw`EJGEifoYB3THT-MIy^R%5Gb=s6$N&8cNTPiz6&h$Gt+ayuB@tpNKLwu z)+L`qCnvFm7o@AF`vn$w!0?%QqU<{+R{8k!OJYIij;atB8t500S@Hj(V#e@BHoOR% zB(^t23 z1WPUf>&c}=!HIDm3wN?LpZf}B z*AHZ7#j#kw)}!U+`GWC8&iI|#o?OHc@&3(xO`D2~C#|_fmFr~FZnjOFD#AjfaROd-rH}-QUL_bTCyP_-@QB7V*bJUA z$4B^Ov0gi%J`h$0a?iAG;rqq6+1ct7dXCcbD7UmMfaxPp{mcw{>hd;#KHibrueW<( zy9c&=V7mvld*GYufm{H3KY#u}`Vl!|mT3;^gW0@6=oZ0bMC#O+lHGP2DZ8k-fM9F_BIEGXOA+OXbd4m{46eZHY? zm(9q*LFqX_MpXhBRa8{U5unU-fpTyV5ZDamwqqv-NdMGR&skSjr@oIsJACayB2U(E zg}#$$foAfzd7hBZ&n`{m>)FWXgdr zBL(&wzzgjPvKA_ti3?uBb~C_!PoC-QIuaaoUT!X1wTSiF$sAV_GthBjCzJC9J25y1 zNjR`>&?dyQ<-;5O6IC>bDjc}s7-uQ;{jzNV7XhRLG=pFy5}c?KBQx9e)(^&eiI{fX z2@#SYOlOU>UW&=<#=MT5P$g2ltXR0hQs}k9AJ~2PJV-2>w^Ar2>I>z=+-+m92 ztxQ`(^6Z+19RK2yoxj)@SlEB`(nD*$n=S6N+2Ss{cw^Y6SCcvq?P<01*COD1odBTw zccnowYks`Jn=t`%uJwwom2L$-TovmDPV|2r8aux@nx-?r~>1wg+z zry$#cDp1MEzohCF6Yu^_-raZle2*Re(aY9-?7{GxNdZFv(W0Yd1N1UKO(~#EqAB14 zfRecY+S%CWImwEEC@Tt{oji5fe)--P0;UKYwX@A$e)eIp=trOm%8pN+{nA#BKCY6{ z5vyD#a5e(<1Du^!5KurzwPh=Tj`2<;I6p41Gh4t5l&6m;8q*dSm0@#6DytH5md{D= zNjr_>$IIt+V4r_a?DI$0vd_<4y=c={#E5(6BjG+}1Mm`f0>FzMfUSl-xSsxzPkYwe z2T&+gbYO(TrU2kbxndWBSTOf_qCrS{5a=@BN(O!$-_8vw==R>Ptog|otXu(Em)V|c zHg)=hwY(@cqt$ZP(`V1xtbp`o3Z~W_yu->Gv(KwDm(Pol{;W#QH(AY*BUav;ZoeP@ zc5DN1RnMGPJE*K8p{{j}y^_$lA_;-SP5KN5`1Qa!vsbU$%$Fyv_34)crbydv6JLEE zSk9WBcp~SekSu~f0NWxPfEKVSy1e@W!oAe9S4faE=gHUk0$r3bhMk9Q4$Bl3rCbV` zo7@JA`%X4upZD|lmVgidaldaQvJkY5+Y3B{92a4p1o*sB(yt#s*VaMdDTYrSp9BIg zk_TM!zn-Mt9Eqz~2ovvH+kwyyYbP-_P$6fKDsKOq4eQ@`DnLQm8A{r&&7KF|9pNUkaIN32k@s) z?6n=L;FBr+0-W{@=otIE?TFauoA>ON?(?->d+&Yw%i}lf%)nIUPs00sE!Fn&kxsko zV3##L_M|}c(R%g9|Mb6EgV?n@+p_!p{9sKl{IS-=2=p1AL9NdaOGv#DkY1Hh$~UjO z_&IWI!7G#aiQbAZcjDV+y@|`5m~qEO#a^jrVKWIfjO`n$5}+#zEU+BgD;PQ};pkg$ z*|?ZgJ9h1~vCrR&pFZd78iBON#im~|++)R$KWsgVkL28U`-|^R4=f8fH+$hzTORMR znwh@9La%%zd2=J6pC&@h8#go2a|MCXQFCNsMR5h`R7*4n?dlB<1VHZi>xFcUvxun*+lXp_ze$;Vd6t$^qw@{)xRqjJ53^%vlI zK5?q6mxncPRmk6dAP@!sv|>#ulzra&p}%)RF^%Pvj~X3>*xODeb*^X)1SC$fE4HW$ z0N4N$7eE}H&nu<*_r7I*he`Nul_*lek0MGOJk58Van zy?$CYXlc$kRM=^Y|6$&bfb;c6*0Ey)iz+ebWtN?+Di4iLz z!O>ni}gi5de<^Rv#d&fwYW$AqsCr|ndm>Mn1xs!Dt@-h16K7o*?zf3AKDD;r{~I=T z{hD2W?G=$M=w67`yRs(f7fk#h%NN-K=i`UNPJ(GRJ~lkYxLGyf`0vwS&(AFc`wM-J z>QW?DI^!_0Q`YyWBH4D}@Z^!dOBQ;@?DW)}Snna%5@~|;H|!wRBN*fX&d<#yi5bdO zMg`XSs;boMLyaF8AQ>cvvezX7v~OuCx2Y+`dPSDTIA%;2LsFrn66S!-gmaaauIm0x z3gj5IfjR)CBEF>Z&uUK`JnCh#QL{p<}nON-aR5oLwpI3#^ zg==T6Xx*O7_B?ZH@2nCey1xH!S&{rYJ#YQF&1v0hJFqt-0#s{UlvQuvZm*(_kCsXz z*r`K`8Rv?Lq1`>#M>LM8UUwi|2Fbknu#h{xrd^dxAop{ePA=^F%nv=+Ml>fh2p6$8 zw5LziLn@R7ik^~-I9|ocC_OgsKBR1q#dCf`eH6!PK(JP+hZ6LJW_s@?F7FudIMOpKtL#6)Ugu$mSYwe=(p>|!uN$9DD*&~2MRq<=z(46f$aeF zeo9!)V1C=4kv?lKRl%DVg}mBpuT?Xin7@!g5$hWPBe_@BS-ED?Cxu8Q*tcKZ9L>ApLpNl zxNKSPJ9m1PRSSer7Slf0k5N;lvTIfCcILMq+r^9LLa^_F2OqJ+hwhPbsgimsb9POD zj;mrr$58-Sdr_=Z$Rm$Dp=+5`8>9DpMpo%^3>fSN(PoY*95tiE6H;1B#k8SPv;y;E z?_zimkaU9~pGpC==S~Cw2jJ^;1DF6B4zbN7DE~q62VB1_WgR0RVsA(sOUgUOE6!6K zZt>u2MMaT)efErf`Q>lrXle^A230E8J32aK@4WN67{aUqws z0emlxWy_QB!ngvApRM?_6=y(?9P%WFWM`nq&xHemK!ZC(DEX<-SO6p8WT(0Tz@fOn z1PEhB!f2EOBt9p`_vJNnWMGC+u#P|ljt>Oj6Rd#*DA;=7KGQYggs2ceb+dUA0R6<+ zlnswg+2HV)^$(4UeM2CtnTWk4oN)cmL-!rAm!5wp0?=>nBaQzg@j96Vaa{MZGytby zj zU)hkrF#yV+dLl~L@f{{h4%=c;lYMhltfC6SmlALlbKSMx(XdOa*10{~0AT!B>021! z2F3o49PCy?Tx~KCFstCJgY+}8)2AP6v-hyi7c1fHm#=+ctpeyj`RGyUXRG!XfBmr? z+TU)cA3CgH@>=-5v%SF{eejSR`bu_F`O$)G-UImn=@)0D@UKdzR#Mo^x!>5#*>^WT zLF^mWr88gm*t7rfzi-WZlXDGv6!uFJ7%CR)0B%Zx8quL91-K#rAHanguP`mUj7^P) z3O>B=Y+0|O5!55Ch0>eWluSVtl@C7o#ypBcgfW)2s*xRy`+c>zGHqb9|CS2Bi66r!! zBY{(^1fs91jsSnTwqtYl`CnW0(PN>1;sD;j{tke5olT73KfqeR^a#lX1d+B1l;+yT z^!?Fosc44YO;DD5MG(s+0$oOx3^2X`f^)xem7%xawF)IbH=K$RKlnY@JN)izR(0e^ z7&q}_QYLuj{5hKwu)J#DL90D_!b$|fPM1|V^`|ahu(_MptZM&$0qIX#iO%zF2zn=s z^w`V@08tpU;sB3XC1?VoCGfylZ&2UWWB?lvzxs+*?>T5Sha%=Ij<+;EVj~~DYfaC8 z&&r#d`Djbw`Nu~Rl42X`51HmB_VYknKJ4>;9^W$7X%m54o-M{afNU37EJ+^mFxLZA zBiSGh^a3PC!U2A)ok;pg`o|80aqHmf($ZzCZ;BF~78l9|IH=qbNbjI~I%Yc`#CDzM z%x|#X*9$O@ki<=J(Md3P#>dBQCk~ZJj$i-8Sy2H!131BFuvIcm;y~NH0CWW4!tK?e z!Dt@$YHiFp_?4K?<7*!C0CN&7vj}7(Fw)bu-H_B|t&Np3@H5gLPw**`zow;yqJA&v4Q{JW?3+o^|6TGLa{TF+;nXT?50s;XDZ9rxIY-}^UG z=Fa%~f*JvkK9m14(>3JtnWku479;(t0PF~J6!T|XXcI{b~U)9osWlws{R!I85BcGZ$1n z*ae$`H5wb0xKzm|tm~}Z{0|KE0@UgW2!~+p4uE>dU&OMWZIvnSPX{#LNj$=@Whb`u zYrL=U^SfX>M1Xo#(;_CcZa@3?nYO{lANo!})lC8Q^qneJ?2;ao-mcNN-?oa@E~^zG zn9Jn3FEyRb+d%Ivo4nCu?FWunb5}I3e4kvl`2gqR$0s?2v6@I8l}cUiuIqHQZZ z#E-K`{9e_?rzU0v00$@?OOjQ50zEY!z%1wZu2|?!D2UH6Xf73qr;O%gI0O;%MYUOVd zp@;lAufF;Vn-P%w{!hLj`ihhaszLmM>&kc!H5D zU)WS{kIfDZ7z7Q>0~NJ()^Yz+R^8B~eP(Q?_lh@Bv13(+7f8QU$#m(7pNXBm;};96 zk`=)80@cq8Q?NjCfNYmCkxo>@R^QqlK=suE)mJv=zyh~^U4y^+mDL?QrmBsH!zasA zlQw%T*+=c3cVCq1`hYcTu~mlqejvUF}z#zN$4fp6qLo<4*9qP{BUe zHQD3gaZ|Rf6@b zH9r1C;-?dlOpd=no&4rPlcWtC9L@8c4&#xJV6ylh3u zgnT;?$>dsD0n>zJP5dw5SrC#n%PWdE#R-I+Vt-g;q9lwYIVE_CY7qczHKx&*;-Gq7 zL*R;d5(aSwd_ZxWMBFbMYewQFK3d3_z`zKtRRGW@dZzHA&;x}YDD*&~2MRs#E%rdR z0D5myW*|Ko(8+*o2oy`%O<|zVtW^y4540^+#>`!TpE ze-{t_<9x_9A;a6$q)G%;0)aT2K(@h+`1JvFp;WI2X}wBAdRaD%O!f``<;Zm7k$F8X ztP!+}c@ZGtW?9$)Oiu}28J9TjTmV23q`=V$xFn~3m+cyueB~5fmSeJ5<9JR+?btYg z`tbm$A0C}hC4~ih=CMb`?kT$OvEigk=i9&KVyKt@%LcYc1#n%l^PFUXzrz{*OA zO^h}ODAz0?Tvs?032-GUEza}%*$w9Wg8VM@K<(;vt6UvPY3g78?86X1K6USYyZ6Mt zl<&q$?z4r}a{Ky9v=-GUP+4DFX?;VH-m$l%A(S{z`B9c{t_vIl0~~Vvpd91n$v_K% z?VIcD^qtakI>f-4j{u-A5g_T$fBunmwl~^yPaF?=76AIa-L3ZYV^I+Atq;yANU>rs zKYvQjdnL4~ymmpd?}2Op^$Sx9Y#x#o#YC`bCuiuQ{&$ z#7O^b2|yUC9e8p-V+$a?2gGRy08zl}jCFKK5)s%U(-$w=yb=Z4o_#sI_dlbuGfR|A zRsZlK{?WEuj?aArNRQxepe^NMkaLOOOU4(V{`&fj$qByyPHdM2IAzQOI6wlcp@8)2 zr0{;Lxe0#&6`x4P@rqCMCv#aozLRi5{mF`HojF1CUR1rKM$c(7Dants-S+xb7}S$h z{XAKo-yJ-h1n%>mIUEqFk0ta>pBt#$F*@9%E)!tAW=_YtwPCN^x@{)|<>2M#zRpg15v5tT~_ z_;c^@?*P!KZ|KxH@ohx{!3D|8fPn$IF|Wsy*nGcSw*cuEbk2ePsc=4$Opwvx8)~mW zFp}UC)I312)MY{AX=-XP^bz+Hzd@!%3g7=ux1;i3O^(lNt#6X;oLnRQxY*t31FV0V z#_EkE;Z9?+}2#HUlfXA7i`ilGdUb`R*2mhip`9Ue8zO?D&x``#`Mc zfAwWwfFpJb@ckb=b;ufG35J^;cS`N*m;Jt1RpZ{cGGeb?91OcYaiGcm;8d41M6Iv(L*kw$~Ob!kiGdh0~9kE0EsjfcQM`%#Q(FCm;Th63ynSn*`*o zGODv=BMtXIYJIl`tf6?x)=ocE0MBRBX?NQ`T4!c2e`ZS~H>`T5kxP4o4`KHnj>eG#I`I_o|0-YSy!M>7umF84~rrV0YqQ6UOn}0yYz3fJ<|eS zj%!Za3QS)w0-px?KI)~L-U*oAZRJG5_BI#lF*K^;xPQ|D-{{htk(XpTEcOnGuY{Z$ z8*8+-lh5tnIs*+<}u0dB94@)ef}BXFZw7-J`j*LMw%0kqoMD3RRWR=0nKKT ztO506=5<{+({b|sj0ExFU;oNlo_SH=*kr=`t=Imw4G#@kxz^YYk#j)=l#kpgaNf^} zZQFNyTzV=bMhC;k9{_u?nW$|YD!3zst7j;JP#v$ zTvoAZZ-}%)@g63jlG4fmhzGn5*d72r%=0cJDU*=6DiA#qSm*@=Pw0SJ{Az0ezUvuL zEE>Bk0PS^L?2R>n(!=lMZz>85_8aHB8l4-NnTC;GJ}}K6ZS5Vph8lt61q7~dRP}7x z6iT?_nLxL#Z>ZP36k(M>|0AQ5_FECmO-_#6qmMqRO7REvyiUsIs1Jbn5fPgmQL@OB zPd+ExdqF_`>JUpmf8lFYvTU@MU;c^qC3z?!M*HTQFU4-(Zcjh;yyh`l#` zNwo)8l@T!1bIV2q*6%v`q}8AJs*N&+g84g-+BN-XtkYed=yP<<;I{QPTy32s{Z_kL_E zA|#x>E0|`(_s_T6Qf;iL zSo4fxAxL0o7dgRJ)qn>2RoO%S`Z#7HBp8V7iG&9v0mMJhA{`*|F@`U)_yhUpni85| zphsY`C#h|#Hf1`j>#M{)@WHxn7+*s&{Vx8Q<1&10OCBTpga<#~K)>(>is^OlyElB~ z)nxp8w#@4ZK)o;u(d&v3r-<+8uL}(H-V=pwp$7^*Q0Rd|4-|UfTkL^c0rcK948@I% z^!WklzYX?zFFTpY^9)p1?Nj*e$IGtU^I| z2bEXIi0o!-`Q{6omSH$g2DVc87ZxZR zv=lPV$-c+Nlbbx{^oNw?{>(Ek=(`F1&n}qkeU}USyq^?jMSV?|!0>hU$tUmI^`5J8 zAeY($4?Gfp{$HK_-1cOu*nh*#>44Jhx!Liofx!%7s<1!d}<;*?b&l6jH5GW zJ`N-0w46A{6?Ejy*|VS77h=tNb&&Cr2Yy_Hn9H4K^$ie^?SiQ$XEtU&-pQ6U3@P0 zvgK{<_1gn%G!{qRdfV#ndr)N=>!TS>pREX_v$Q5)z5ug~#g-10Su4-Y@b@IBcu*T= z{L<0|t80va6yEm2HuoNwpRG{RN>mMjXM}(i&J|cLuS`YHbM8ki{NlUlfrgcHR<@Q5 zI8IH^*)Ly-02$9cebTx*lYmxA-;R_%Y}2y~cI8$Cx^Hf%md>$eV_J`qqx)J^p(ejz z*ZJ!L%W94S4Di6QRAA9BEOv{;5z&?s5eK-~I4{ox6C;o;rQZ4(xBY zSKjjac&6!Tz%n4{|JC?BnH^wC+n*3%aP^DjL0 zpq)CtPhejK^wONw>A=|t)Gy%dy0D%Cz?_|l61;Ykbv-@7fOV4g#H$*?Gy~9?c9oQ_ zNH-J!GY!1yZI5p^WuJdr?DNOO_;h6B`hd*^sF*&AnEE?{9^%J^k#`EfrF0MgA^~s- z_2w=K;Q7=_1|%A!COrU@<$e*M#Wuud*)ECH0rVX|_=6BUqxs7UsKGwp`1CVYp#b1^ zGI!&K&0HYSL$_#sSE7UzK=hUSQWK#v{%D6jj6Zi&|6y#^)Fsyu zbV-1Y4mPf-t*|-;*r(olU4Z`w#6Z74(UN&30FQt1iM1;6A|FP5bX}4>(R-0}Msq&n znWH@f*vkYm2GmcRc2lt5NUXs}5#}cKkuwc*-e_(b3^pHg6S@^leAp*D!9Jhq+9Ia) z2(+7tX+1FH$C=hO=Ce(9cAY#V42X%$g|R@OSaI)+0x%0(ir+gpiyg6r$H#huf2Ozu z#{TRQeR5@=PjA#bNg}#$fV~*o1O?;wZE;a!jievhNcpg=yDgheY7l3iPj3_N1CV}B zjPy%@#FW(7(4{^}`aod91{8*nFvc93Ex6y?Cg&m8xT z`4nc_h`B%cTscUM-{Z5PO^o$B5l;|v7C*0&w4V96JDVdfE-l-~`u)H9BC15tAuz(9 zKDy5i9z7)es?vroU9tcEt;;qpA6B{S`~T#*!`6N1pq+jH6T4r@x?A1<5rNNc4UF4! zfB)~T>`j2e2aw^JP?cn?8TuZhvvsj{V;6+wEWdg_1mzzL@y=;;+j@qEU6< zV|M$^Ut8l-r_I`03jq3f2mOw{p1ty^Ee+kUs;Qe+S+r;s8XJ+xq3D1Bv&^Ef@TSkE zfr(z<&#jgyiL=6rDe0nze#d%b_nNz#VERmUar{a$f$E(N z+t)ZPY#|8{U@7w_Ab0@d+xhe3=eg6@zV5bn9hF^-e=v&0 z%|Z{OJ0x!i6_SPoPFxb<8x_=x#SV{-+SDZ9Tir&WI*jwfLyGqZ7`?I-`JiEj@93&m zj0*PpMW(h5lFmY3EO2}&KyU%)L##`HUt+~80-&x6@TtaxSUy!1CPmZ)dp%Ml-(z`2 zQokojl@)VlCYiv4&9HC(K2=E`7V+2x-LE;twO>*kTGg5rpKoevmTe=wR_yP!b#7AaV^qgqXYKF8^2aX zwS^FuJ$6(iXd-YSDTs4(oH8X=L{;Xu*7rR2=dj!83x)eUN7ScFnwsRd>MglU&#UZpdS2>{+lpn2hP546RI50 z+}UCk@;R3&QKL+i<;!ZStu)G{$k;-!6z_f_kI!WrFODA+90G|jZNg|E5n!FFGTG0| zJ|5F!;kgnEVgpm<1|OdL9r|v4qvtR8s_uz437bQbo+l`G3WLNvk&O)f_0O&0fzzs< zlJsW{z4MCIo;qcfdm_I`HpgKspnqh`&^|L$AAB!P%7;$l6&$JDh!3H){ct#Sz6l2W z7{Uv%Q%*$C-+Mu8Rgtg*+2f!%&Q2sy%*{fKFp(hZ^D&((E`#<^33FAIxExyp>E^Q5 z3C3fbt)8`-^&~F%YDqFG)7l1R34Ig-q5^b0J1<-r* z?i5Ima=P2>^90rhRjMe?yyV$``2b7Zq2XDiWQ)T-k3!kKw^7FDvNFc!f`f^E$_7Z! zemIyMkncghHkBFARC1pEGl?tc&OpsR1VQB84%xElal+!_CcAa3&)$9a4S|%C4nuy2 zQBNj6fSoc0N6V$aRf@f!LYdc9Rn>MtWyo4u>g6;TXZNfm*>|aB!nb0dj~^HieM9XY zLF%gP!w=uJ-rgI*DF={#Sw=0{@@?&HVsW`9+cZ@P#VPD%#sFXfRz{pDjBMh~fZQ+^ zObg_Pp#Y7l)qkF#@(+Kj2o{wX3NAVkxOC;=kUHtu)NEFye&f* zBXFy7T>LhZ>?E*1QMQayYI;av%EJMbD-%t6=DyE!xt3((dObMdpm%4T+~5$))H!LN zVLYy^#FHSB?0mi}MqwzSt7ns-0{xIK!O<>|2muP_UxW$?fMH-d#Hj&u9>I!~XIWFh z+L9ccV#w!NE|x(`(1-tPa(Iq@__j4Y_d*En;nXS;TeK#boCHVi2D zz%{W|&T3poK&qS$SlBtG2PVhsz9RtHJ71i2A$#EMNkfnDJkd4_MCCdPwpH(6!a_VT8D$;D6FT$5w z{8`nr{?(&t9dVElJK z6kE7}&@YK){%tYN-?%kw58k)mVAH&IW5^zP;Go@ie6LN76y}UX2ky{|?&{BNVN&|6 zfE;amkJ{j0{0~_l`BvYkm3Hs7)BpCrnbmIq@)2N0he5Xos79ig3l+KmJ;J)~0)Vzj zm3>wO;QZOEAKCSr5%`erS*rlpRVg^w*idUjBjYx&^$aG$AH8_m_8;i5;>yg6RshZl zR2V@03i{EOIH(`TFko@2C~*#e*#I7QLjWhh7|xb!f*qz#%*uL`I2|DRDd|7x@Z}W? z0*lVc7D?6TedkTt=dX)>{$?usy#FS?jWhMrCjc(d4-kS3^b7h0k}C)_{3ypiu-=Rb zEDMMiNoNbEPXN&aenc2EfUf~zXOhu(-?b72HyRamad7~B``-|#eiN2J-#4*UUjU*5 zNMF$=CheogtxN&WOfr4-f=#R9RJj6(H3HI?tL*o;B_w`wPYFT*>Se4GByyn=8@eov z)TOttSdEzSnje4GzYg2s58kkf?(Uo!ol*{>H~0b=>xp{_gSf_fy!uj92?BQf)u6uu zQr#{oBK}z0+$-)G_YMg*nw~?S6C!Xb)jP(*_W+-% z!mu3}J3Rmvm~z*_PvvFFxiuU#?GK4H0|S!+TBL&L*^Ot9Ie~Toq^}Z?RGssCoPYeK zXC_8tHg=OVYT7iOsIhIMabqWww2kdFwr$(CZQI)U>|VRqcmIaxm-lmC=e|#yA-3p~ z^vU(uMBunVvt{6SMrf31Ff*G^`^uW9p#-Qk5StcTu56yVf7noz_>g$*|LtDd{B89k zr-Gh~oOne>=y$*L(#%R>Bi?@z@g{nk<9?~JwSPCZor5SP_C|Bk`_i!iAE|ZRSh3Ru z#mu}~lDqzeu#EI$OIY!`FvI#*l8JLdnCj>Qf=Rtm*WDp}XYJQj+ojgufF)nKIvuD* z=WcfieLh&~^17j3kR6lWqk*xm1?oy1*WyR(c+VHE(VUIiqcV>-pWHrNaQ{ol^1z$p ztDKzPM^uR_f@`s`4A^AH61Yib8+qbiwob^;x0dG5u1u~!QSzl_Mju~D=cjzuxTjVl z#L0m25D)&hhni8sOtV0d_1gSl|7Z9UAMf*`N;#;prv0@Cc#IYE_A*l9R7W%KFTKx8 zclX!|McV0nE({;I-QnY0^Z5r`+D6LDSz-*{u_`AM4#ALIo;U`+>+9(sz7yTAyIU z=xFBGDhX*>T*_QjXbqGwY_ZJa?L;Yt}Uyzw~@<2VhWGwpv?NQfG3eAt1f{=SdS8qK|YT z17)m=+96mAVNR{MNj_;*LhgY3(pa4M(wO5H;_@T;R5Jy2JU!Y8+ZrIN3?ooef7^=2 zi`Tu%tE|a)S+q^Ie1LyEK?6*Ar7c+z*_^KL6EA(L%awcT0j`Obw-$Erukwc1dvC05 zdGKPi9%%Ckgo{+xV=+YX9FcIoRi+eQXF;nWBWk4QW2~}$_0HK4y^>}HXkittl|Nf* z({-K8Qi?Kfseh6y8==$ae5FnM8f+63j-=ZYgHUCSEkQ8ytSbS(B5yvZDefl)hUd(s zE+EAcqWN|Rwv0r9^@9Vn-isP&9r*qi?PdITZhpY?*pP+hdo!NCHw3Dm=M&=m z=VZ`dl^>#zoH?t@tLs1(mvBVrXlAQfRacLX5=uJD>?FJmKy7xq;1j?b(k<__U!NuL z3#F%9+x=d);lVoE@BFE;1YpIyg{I(AmI0$I5U3oH2bWuac?r+e!PlpB44$FaiHhZO~<@L1V#QUTIQq|y7ZgctS^%$$dF zJxw?Z-l(4$;uQGOtqkRQ#NqC)M>NN9nSScAmc{C3r2soOU94lIQ>s(qlMR9!U z$E zCnJe6y&Jp)vCm)&WKxR95ud93yYKJMJGr{mZKkMT?%EGPcU;W$0+9wU)?PuX?v=bU zlT*KJ@55rd`g7kC&sQsa>_8Z4y$y@8&k;4^*+xepvss3LMeh^qF~v8c{Z*F-43XTj z_K564bNPWD8|>DmfO=#1cyvt4<06>58TWF90QTa2ivt~7b11c}+d%ITMAY`iw$(b# zGV&5YY&c3e(j)OlnL67&JiJpwxvykjk!QR!7*+ODpi)FpQos!ph{KH0M3S2^)2d>R ze-1f%`XTha+K}_NOnYmtEcpSw$8~Et?m{9uTJ>3(>GLMaeKECd;b=IW@9bh)eZ~46 z-$ae)*q)7U{cppML>{ktR`0)W`IvQ%>-prs*7q$B+H>uhegJ@GkrT!2HzJMR?ti&I z>=ir2<|9_Y8Z;Nc2Ur@QHfYO95WjCMS#64rgR!KyIZl6LKeYO<*%29} zaDgn85O&Vc@z%A%{t8<7veTc?OncI0P*(y@o2&R*V0XKhfetV+USCF&RZFRlmZ<1r zT?v4hTm71tL{#KYTr^y2B;3Ze{k7>{lFut6O3l@tdetlEk^(_3zfurbJxp7O*1e z5cAe6`GrEFW8T!d-;C`OJcFN_9j*I1n27xKLHze#Eb{RIKdJYg@9v0mEt%V~wZ+tU z-?!eFR4z&J3I(v>MWh4=)wd4QPUl5Qz<6`yFV-gh0Qh)M--GS@@MGG=q{^{}JWV~x z=xQ=?Ev!yL6kQWk|CUcbSEKY7NC|NO+Cei~G>+FRY~|Y_RD#WAnMxVO#^mv}Cib4J z52P1dtmQB^!#@(uDAN^TMYo>BugqSpti$G1=T7X{v}9$f+CKU6e4f@c!)c&({lNAI z#dnRKh6RIn@3DWrQm4!J-5I*&gk@>jtAGnGwS{d*@^c`YkaJrD6*r~TKYS#nA<9e; z*#`KJ_vIl!x@Nfr)nZ}ri4Z*w6)g~$deo5W@Y*T~cQ>6&HptU7paGXF5$d8f_!4F- zpPf`i=-=nfKnfP0Deqn8m(zJG`We36ttX&wO%rVw?A)0}oY$*Vx;fX(qEu8jPDZp& z@^IRKA6VYmD+lw-bS`h<(oIVp3tj!F9dOzNJ?$TGCE>F6-&4h%%zp!n*f&Yp$SBTy z?rPJyBHS3Y$oaMzAM{1OZjTc+_3E#iJaP|%uGe?))3w%jNqMeTuIJvD#;cnC43&A+ zm2ixCIrJ5!xsSL@Rm~??a|;^epO+x)*?L=}ysDLeFj`09Fk1IpO3c?l;(A55TxB6s z>PaO3EO+nYz;uuU#;^G0$KfbHW;v9y9@TmXR1nBs#>!4@z;?{~PfZ^yRpRr?%o_dn z4cZt>=sXR*9a#^YA^v&$?`Plwy3Jo`NmxlSSd6 z1W~2y-Ugp8o{sHL~Lr!?>yN41)uTN5k{)^8KocA`MeXh2U{=F^gU$Vro6|DGr zu#h#H$LOc$yj-6IItDc(5Bm|%ErXitW#dd+^HNNS)Gg8KNp+!pT`k-RH8%1-z2ujM z+gp_>U&>V*8=D`MT5R3@(OmM+3^@@p;WF@Kf_4&r4JU8~(eJ$F)^) z&J~%{Sr+~t((|nYADBKhI~v`1SV4Zt0$&(K`~;K#X(_XbkF4!d<_fFsSf(W=MzZ|U z=3WV2b=Ye7&mir*dqktcU|kKp)bg!XD|%dys=>y$Tcd+Lxgkf-?&XJzmXS7Vc|{xT zvG2bo&`5X<<-pg5GGQx&P5ADncW+TXRP|DrpTz0|S|-@?s1{vjuX8gDvJ zo7!-WMP{T?8B1f59aI1&(jXwN8H@ne-6eScTkw*IQ~KY0_S;27-RW{q#EqZGucB}+ z=RdV^IZx8ZNCcr(_M<9i>GOOV8vT|JY?oxL<80skcm@!%+1OhP+}stf4Ml|NRgzy? zlC6cS{BCM&#F1zgX>WQW>IM5X`jxDA9fIH2^s3K9R8arzNS&gQt;c_;B{>`LIoEQe z3&fZJ^Thqs226O2mR^JU&AkzI=>+LCEXo?7bGU} z7@%kf?H77Gg8<@pPR3ufd%4<+sa#H978>-%;<*V!3s0_-{w4e;6RJ;ea^A<5{hDIF z7|bq8Cv^ep!IxL*bJ)}W-skSo95?4~RcZScsl%Qtha;?j9eKRPlyNbIl_l)|S3O-oFa;!kfN$+$fkFl5tsV zE42uw~nI;!<0fg-lQN-XAB~b`F(zvKxuN~;%KDr*&Hs1 zaO!-@M;MCVo~DiK`P9`P!85p;>5q+rVA6y`zfoDEY-2X&X~@T?cI!?L*_TUomzO1} zY#v(Rp$iy&Xu$fo7h5y2Ks zO)>s#j$Ry7B=%s7P5kvA=*lHw>Z?Pyu}bato!_0CeWc^0KAt|Bok=~~H0?k}@oSfG z*=ps=kK@GdYnOJDyA9f#{vlU(53?l)gd!CU@o0tIS|mcm$CPI!Y(*+oFfUk&pB1i2d~gpfHd$eoaUH+83eY>Se|! zU(5Zo+x9JeE_Xv^)=_T`;rVLigU5s1d%ROBZ`!S`XTPKBWdq;VbH$H$jWnf3b+|1_ zIBDT~>IJTRk#Iubp+rq0rlrLK^3T4zjx`RCs~ZV6Zsbpu3Z=nh{4J&{Kt;Hpf0gI4 zto}fCbiHh%**z1P7kuuB0<)z>j0X3>r6N2;wuJpZ*ccgr(7y9ZxWi;lqlcCb4{YR< ztnWG1ljTUB;P4`XhRT3NF;?k_n4)_JKtUr6t7){c7WR5mMvsgZD#|}9u4f* zn9-0fykvvs4Nr?P1KUJ_%hFYxd2U)J14vLrlGFTKe-=bF&&%bh`leD>L#6!9Qij?X zue|W)LUKy>ZjZlvW|>wWl>Y4tGxv9nr?9QFbBVb6f; z{pW=9f7g*cxKg9M=@$2=pCi~r$k_5Q>dCyoRuq7iYWAqn=>-u#83uts%jE%nvZ#+% z{rq~mYt#^j=-JirVb32MQ6BxgKTLSsrB~4%q;{jgd&#cY0DL> z*GFooP!fz=JtPgkv zq)_i<9$O{WoSkkc^5gw1a&fIg+3GlHqg7H`b}@wmpVW%(w4fordu- zXj&sZQIlz{vLT^U^NH>ZL_Js^$T>48;Uta@x@n+8x&IhVBE+s0CmhZ(#M>#!CbK$t zuRq4%ufKM{kLlEm-H9I0y-QbR`M=DndDVUP+QU@w;mvSD-#h-!g1)HdGflQMcrJTx zSp#lr*K&6%92J*qEUR=YXTXz|9aEPwnri1}SoSlr_fi3^%m?|#q zQ9SBvlY1~IQBo6Tw#%EY!lnA|V`NBRTCD;Ohbv+1WAI4uo!hY365)Ls)5uL)+aW?C=f&Huh4&z*D@KDo6L>L{!&GNfhe*ThG(#t(-;Jz(SW7>v3Bi+kj zKf<~7n2D4&dNaP>w;joakBDBFz#}UEr_lkuiQ5Fcz2D%N^~aQ9%RPrDf61aAUHjTX zu0ES#2$s}79EkSrPXi#Q zH@Ro8^$Tuqmhg7R^p-hI+G=*>i{F z>Rm-UUv(1h;h7yFzzuLjEO7Xz^Vr7;LhqWledr@FK;F!Rrjg_8*Z4ubYEvpojU=^~ z0?FCvr5`{0s$qV4o6^R06iBvJDXI{r5#S$28@d!13H56#Q9@~G;-`|3kxymMLDpHRprt{-4D6d!1Sacc)^XMuJcbgV8Uzt9aNQjl-_hr%? zYydV95T3hRCTC`>0?=GX>NOPk1+p0jC_}^(8r-U zxt1>+nOAF8%K)?X!w|IIPqkRTOR=Vzn-hsU`VHe(%i9ynkG@L%h*a;Pvql6DI1ukI z)S7DTF3(?#F65oV6Q4k){@0p6!R_BGpI5odA~k+9uBJM)o$35*D@Qm#0~S(#%^>pxCv& zcv(!-_)QhiL|8rH;;&8(5{Aq1GUAo)} zKhzzFbdXTGo11`@ZgNdYLfnQc{5+aAxiNkTdt4fRjs&ldZ!h!WVu*O6We9vQE+7`z z_0@Lz5zVN=LV+1UMv6n9xz}kGgWDk5AL@7x^G6S7NhsOA)No_uNx8mvp9oV(dt}K6 z_uO`X1`l8LzhXr`jxPTH$@=~`?%Xy?x?m1yt>6EV|=)=ybBr-IWHR z{yHcCzAYNpdP}XSl(`>2RK8?MmCB)I4y(cDoFC&}7cD>?$)%;j0#8PDw(EjFh<2$z z|5LlrLkl1V+$24X5#rbzr0+M0+%b#BD$?(VAuFE6QT^=kzD{X3!pqB< z-2qmvCyE2ne@Tj43;8(t2PDIOC$L`8Yc=2s-+w{X0M&$rj~t~asD3>qAUplwt1pS% zRW%ujmtvZ}iietv#bu|tj2@r_*Kbm$@qQeJO1Nw}w4j5S8S}LOLG;KAS3}Pts?>sBvZ~mmRFSL zpp5Opaq$Aku@7!HZVoPFYJ)rirzK_CDazhvlnV9;YEbQZulxvuJ z7R$8aMS$Xfqs-+v@k~0P)si`5N1gxLlp7^SPmhD}1#$qKsqU@Z+S0h@998{B!Aa27 zes6twRWnL|@t)AGETCJ`#+gLadl4cnJBXAIV7K4VuYcWn&bO{rUXvZIhQQe+_K_4C z^vk>fOgA5c#?h%+V&j?Bb+%_{+ZjAltkI?A6!99g$$=)TjKB5=`KbB5*onCYs`yk5 z+Ry6{EL3|n=`b9$-)>pJNaK$|9(M~c`DlIZRhQA&4CtCh>)NOD*B{xIPmg~hqTZY= z1*>usm?^sBGr?OP-2x9;&B6j9i7e!uN`CQ(Y zHqn1a@O*iIT?bTG##fpGb;ZO{LlBmLL`vD$f% zf0QB=pA;17@9?>{9555t4aRb1LVF$OoE$4SyB|$~sB@+%O^C;gvJQ^n+B9Pa!C`P0 zQ_p{#NHM&)iC(96fsFs;odW5ifpB9yH+SWwn!v83?kL?9IjsXCSXOYjErRb=(y~_z z?Ia=jPiCN%cS12IM)bM?yHUUE`voDYKOki?VOWK^r><+svxIu!Ydp$_SE7`%|_2``6VU{KiGsv+z z3jDUclHSfqiqCoOwi=T#5dk}hkm6>FgPv^=ry^38_H3L!OE|j`!g}Bt4K6xH8Xur0 zX)ZL?g6tYFOMgKFpd>HMlhogCXn5^4bLq+;1@D=bYoNHnV+Zkr+%AY|vAq=2yCV;% z;4e9gx$fRxR_sAL+Z-Nc8-OJc8?1Hb*btt0J8g!To!w)2)p-8>e2OPFENS<@F0bi^ za60lINE|RtD1S1$Tqwe4kU^M4;Zm5sy@)ds5Te&*kF|}&ApP6ev*^(>#XhPyb8v_BxvD- zt?C}UMF7EcY)}jRqTiLgv$80g-~h1;O3P=xTb(PrxAR)!>-tCqsbSB}t{IPp6>`Ht z?%xkni#eDt44WOp!5)U~PUcLyQv^?c0XMdKglK1yOP42^rqA6j5a_FajEJ{4+y1h6yLjjeZlnLVeZ8z&%^e4rWKR%pRJaj9qH^zh;kss=rTPfqa<{S~#Aw}f z;=|ZHrg{95FZHpcA@2wIlURvs$We@UOP4CZRAq)h?aN!v-1mFSzUN#Cww(O%n;!7e zUG49E30nAxgKI+W-Yv=|O5C1U-b@diqQ8dyrWgCw;Xh7pFm@uf@gKh@&J#<^!6i1F z)#+>#%cEk`>3f&grJyfZG&`7F^YLH1(KPWqhP?aN0pZ15fa+v&WmjGcAe=u*-fXNh zN;J&o2`gccr%!2F3o&%xhTf>dL&B%$J(v$d;np*Y5U@#ct$eC4u2Y(Wx9!(PvTve$oQ0 zmKRC>J1IT-_i@y>&85bKOuSarWL@Mg$noXYs6HsHSp%>|>Z{wXI{W)DiN2QY|XtP27Q?%}NMKsEGP07hatJuo-&!}&w`L}Po`1Nz<#6zYp zqq~3h&eBZr(u)qaC1>!xb)~;i%y00(k15|){&HI}dA zH44Gnz;DOaLnj9&d}SYr%_5!qpP-~?naq#+?eepAvs6D$iP_ZM)NFvfB&}@ z+ao+!eYS}9qM4F+9CCmUn2s6A$U%5xVa&{~X<90p6TGGAavDKWn(%(ejMVmT1F*Yu zTpFIE%th+b5b@0Y-j6E!)i@SIjK0p%6Qo1ACfo=8BGPCKoyM!)sCrh{{em-t96{=` zuKCg;_Q@m`SJ&+SD&|Ty+XAqgrFD2Mho`zflKD_xYH+Ynt}jG;8ZEQetTzePnqg1q z?Lgb^>b94gJ-M3R_H)qOUzl9J8fqSS^U!UUoo_vFyTILe^aLD-)}~ofb)wJBRDCB7 zdDbg)0==?o9b#XuUnwfP1+9k;q4&D>_#}pm4B3#yvP9QyBs&oCkY%Z}TKD!wt*Pi| zjPEkz+%f$>AC3_Ei9GrV9%L;Un)0pP|Lp`!xbRDskx{idbqKcHaOD2guUewp%Pj>Q zUT!}ef9MpY--SVr2X6H?469E0-muDH-h`rTxPgeOhn%Sg0yBQj4i<+$D#6cN?B3 zdOAZ}*vB^u*}eFL2H8diRuAL+`A9-ig${O?>&&X`5c0W6B$yCm`NP5W+;WepZ$(U| z+vm;*VGE~CA&TYcfshx3U@zk8`$-cxSJBUr&}cb#hkGANVB18pnF3DTHy9IQ+%mq6 z3H`;c5ehFjMGgPCf}#J%9A7MwSdsCY^W8Cvka>r@$ut?~FLl8yJVLctI)s@>W2;Vy z;A;|jjAh48f-7>a4DTn>-<-^_El3^LR)B(ipOo6k)CeTiW+w!>J1;o(RLdTPT;n(` zD&)Z73Qe^;U3n zBxA~c1E==n*nyBi40%*&iI9LFacARa1jGb+jVXLVO;4{vZT+znKo)n`rGy?_sYXuB zS3$L{bk{qtc6uDbm$`Byr{~?()TC)8QZmB~>)3#hD;b%&C0M&q<~BD?)9FuL2cwRT z$nXJOI|k;bD!c-GEB6e}9=x9`;w}OH?hPq(I5E>^cUSs)5b00##-ApZ z68p<9U0JUu)ARY(9PdZ_6-c_6?1_@Rk0x-GvKCjKr zXhz`BGUzByGi3PmcIx@P)Z&GRv z4=GUV`xy;4bpY24Jw$?xbW=m6vEv@Cmp~4n{U0`hLD(7Ldd-Iy zCmORE^=+6!^2fq!y+uE(+&z5ViNrzO`=u<2O~z<0)3NmWBq@9qqzou=lZNqI)nDLm z9}4*`;bJ^)>e6|`UGwihv8PLMZ+ztVP_dL5xOT~u&z6o%`lL!#nNoGeJsFSOKoUr4 z{5^)s)tTTJO&v}^&dJwR5!MK$gJGQX_~XgH!_d_rl!Z)uUJt;$Ihn*~yGXYDz&?*)vBGhex<9`Ze?uRU$H)3C zE4mf4qO-K1r9%mYmn8|(i9IIl|LX#9m5D~w$1lq+bd#fWgAou*5}?$5S~}g<1|1Qv z)0DW>NI;&hkkj(VCOF$EmB-cU=PXrZ1Dr$+V@_Yuid& z3jrA05aE>^7jA^R$DB#vPbpCUzn9<7Jwz^;#M zbo}X4;8fA?qf6?$jqX@rA?JMk(*ckCP+5ryFg7L@)>J6D?S18#jJkUE*bH+4MYajf zlJLOgh{=h%f0KRduPxi;9Z0pE}uqb#$k zA&HE)I%d90*l+7n_L>xf_CsDBl5-oHY6RaBk}B4=$3=Oew!ihiEMHzWlm1P#$YLP{ zeN2Mfys>vM9Q-QzHY+tf_q=2|clUyB_4Y!@<|@jOc%E#oMZGs(hwp8e;QgjHcU5t6 z?d4J8vX?2{d^TXlnzo%jwv(_Jg^hz&WrF^Bh>i!^7i3I5s$YsjVpI~6Pf9#+k^;f7 zU?W+Q2s|~g!YK+mE4(Mb{bPw6F&Y&PIaR=dAKDP&V*VNJU(T?jRZWLAy*Xn) ze7^AbgGAZ^A`0cFAgPPapwEUXJx1boNzvLlzpG6%$D>aeYUwK`p3i%H%1vab@v<5| zse;s-Ch*k#VNm#w8rZ)s9N`Hzwc(% z%ubGN+n^6H_sW@fk+|Z6>@Tb5j{^3hq0TZYMyhK2FcYyo38IVIh-^EOG_(S;v89}w z@y{q%CLi`aN%LJWnC@_#XT5>(4wXq}J9;G1<9P7)hV}9(`cXRQKKmCZ-3T0XheAG-ge>j zKbT*Ae0TkNXeV&T3UXsSjZF+gECoRXh%$%bcr({QWA2&m&OPKU(-Eo5b?ZBB?B7iY ztXIG|`?O686P)4B#hH?lo__=CIouB9?-O28LI~7cFe?qQ7%72~_)7 zHEy(ng(H%Oi&KVu{MggekjnS`m+x`ML2@b;C((wLpo3(TL{ccQPq-x~0U?-!eZ=GV_?u4XNZu4r8Ov5lm} z_n@h&UW^EoF+7CXY1*==BUEBCGvs?8#_eyQ5ty!?#}5^3$Y&kmZ2WnO+lI+@`AVPE zK8Y@C4|g{T;*gDVvf54b5}s_$_gW_ItEm>9PRsci&6f>s7P1YsBgc((8^9N&^}t2z z1WV~B1`_y8MN}_7f5>p5;fUIZWjsjT&QDMzB5Wyp{zgP>n4IcUJwCk%AeL63_4lW# zgr)m2CP{-`6A0YCb>XirAJeO+BjYj{=k=C!P^-cB0v8KRkLx~8*xY_tK17IEbdcjW zW@p6pjr-F>qwZ?=rw^M0paRH=Fq`-AaXRBF+fMKYaFK^L^-1`Gw@xMNDlQnBN!7J6 zs1}V=K~MI?v)>Q^7@s3n0*J2rt9Zl>%A4~LG~>bO*U8@t^ggqlx4g@^K5r+G&9%hA zdNEn15wSF?Sw8ydC`@4qktf!=S$&b*;HlH25rmUW*VC?A7LK7Hgok)#tH;;JT+buq z&VR0!UW5TPo&SkU)KDRV)1MGdN{$+yf3^;_pu%S7D5FkIBCK@%{JGFVwh$t30&-AW zc%{2vyv$zZ_@*e{v>4w97u=92J$Jt5VIv=8TX z%YB3!lVSk9;m|#D~8RT$T<|DnKNKnqXqsXBs{JdBa-Sc9`cD?Y|k43 z4;#8E;(a(|TPn%z+LFSw->7u=cvIJP!AlEZk#z$VQ*;U#b^Z+&FS$KPKS;g_SvGAO zm$f}4Tfza}D(8NNrVcUrm?#=IIWN&cZ*@ zeLvr*gEU|hxL5|eFFDxA!?K<8JgTrY&!FeSIbPK`}P=fHCJN#7Vkh1hvp zAlMCu*|G_p;P&?RR`II9@kB<;p;OmU%g-5G&=j8d$A9S@H2@#UuSCghX{P6{ zB3Y^gsjrvfSI11=9~g+8b2+4UUjw`X1B+B~5fdJW2hA86C2a~5)|kj!^`2#chi0Pv zpuo4eBo>u#1#3+_|E!?X^Y0I*QXHAJ7?78Bx1&fBMH+$xjYHb^WidWyH&**B)&y2KE}uT2}15Jn7=p5_buJ*_8IzCE8$xi|1uzHoX}a8 zCNV)%5ZcL`+f-ois;?8V9P`#Jvv~LoUszKy_fH{oM+(7;cJMb&Hs&_lGf=W=`Oh02 zeDGKYo)(r}7vtO%P3bA?Ouy5~gVTx(#C_h2*fmU7=!$QP|IyPB?(+C{{$ZkJ{eb5N z6aVBgGL+okr!M(+6^nasm*pGygM?b3qXD?jdAYF=>G<&}RORc}rOpJOi&Ut4&^l*| za~nYi!f%#JiZck>AzJmQrnCP|fSSQwIZAm*K(c!OXL_YD)t>J2%>o_c@NlPWCfoG1 zvV?Z54Phybr>YhsnUq80UhL0OmkZu?U^v-F<s0PKlmdKay`pHc&0)=dd9qyC+7bV6LO-ce@{yd!ViFd-=j`a7}e} z2`VBBg4}xQDwL`_>KEfTv~h!G6O1p+cBjfx*Xl)(Kp`J_e(SZB4qj~}kmQ;WVe>gRG4Z(bj_&t@kmb z0TX)d$eb}vYj~Dky#CmBfI7nCB>D*8!hi0S*I`!(!F+Ah}!c^vM7`JOu1p4X-$79`FlA2fX(jxtI15#S_7y#uqvJIRr{~C1^S5e>_MCApCd9@ z@fBZoovL}f;3{;29Mam0GpNnQkY@E;d5R3z?cb34laOjY`_H(`=`Wi~^y{ORXlcy+ z#@(Roo1(8QRr#%JqP3*s68nN@;HBKhiUCnL>2~@(>9k>HmA~fL!#k=VhfTGFr!M9= zPz4zngN@euHaVq@>R0v2*2t@^{Sy@i#xD_Od+5Pz8v5 z?)$Y~hp!}X=aH0Lv&Iy6@uh>wS5moFOtA6`@j1^Y*kU_>BPDW3F<^=(gnR=@Jv7xT z9@fk+=uG=Q4?`Yd2hD@8Qvgfm8gqX6k?FL<{G@8ZWp*bRk4o-KBCEq|)#zH2b3atZ z9R9#DHX`E(gh*kLXs^(Zc{uvz?fq-P?s!dHw%*P#v>I$$!Yfvc)>sT4YAHjI;OeXL ztIckA8xBS%t&UeRWRO&`t>cjyTOYr_M-Y8diL)%@v+pXpCmV7NgA=KpuTGUaE&?{om|U&b!X^b>%Z2*x!rTd2QA4TtP6n5E?($bO=S4wY02 z*7*C|m2*(|25DL&13NDU$KHdmyz~dY14%ge0~X3w*q;#XIyeMM+vNMSN^-5Wj^P*U zJ|&=ZPm<$i;HX2VAYT~b79X0+&FY2tk?+V&lF+&7dAGSRNQ*Hng7qX#jFKB?n zLpo2?+ptr5@9z+DCD8r#OTf;j(ZjcvM~5u|+M%h4zz)Ek&EA_8HHkR*dwrIZ1KUbF z)?+`^_FfB$P*mxl0hNdRP`JkSYX^{frTl_@$C!^hkOP($NNQxdWlMRdTKzFY)d8e4 zH38oU7Jh77chaV%gklZM&FO=frj|bG`v}|X`h~R_BQT_)YPVS7>v~Pki40We#qGR3 z(tSTEZYw|!uY(3_?mr`H2k`>|L$5w<2esoiq7oQj{zU^YcN*;G*zt2cGy1Y6er#gT zUrCFc;+LB?W}a5Hllfa2=LhunPo8P#WRCC*suM006hdD8DZ5=Ml2};!^f@BrPgO(8 z{xey*N59Bc??=45ug*d8e=8``-Ke3U&5C$=nD;~Q>FXK_$JJYL9WUW6)&9ElP*0Ag z+qu!)`yAuk#ZETu$5|b?i3qt-&2}uN<06SfQM0wwoT|~X`U|%zgm`285hM}4oW=}i zy9MQz87y-5IYSC8cHaXoA^oiR>jr9av#5@Wipgea{E$+m&ylkMq9} zIK1aM(wEa!;Q>SGfJ8WD2Mi}qGM`ax1PUZ>rNU@mb*YQqd=yI}2;EEmOCKDBHE0lU zL_tcB;JpoSM6j~?5xCvoNK{Ad9Bn*X8!+^ZW~w)jkoH|lQnnt$p<@ELfdd($qbpB{OWvI|8B z&K<}wV+k(Y+$c^cki&PV3I!H#bT2ly(?6K}C!4anFcigeS6O3-F6W5h z%t${MUxDQW^CY*ZnV3*lF|H|MKelwOWLoO;3yO-0OG?uOgD%>zV5S2|*k3jYii-iO zxb;fJbdsoB3koR+75wEv%l&ZduCF(nMtSUOV(-~TU3=q~^EmlO2W#aIN{y{|ODujL zURNB})mECM8eVZn!wkpMLy9cbR1D0NEyFP?w49YJEt|crNB5oguI0Mi(2BC|4SFfS z?=S2y%6esP4?BZOz(_sKrYs}1z?(DG2c1T|t=d__T7zu4#q+r1c<957g!rUxVkEZX zXxq!}FrT7NO*ck73vI`^=u5g()~D1R*uOzT^H*Y9L_e(v=U-)JD~0p(UNz*m2qEqr zw~!-)50yRw?~a;o&wSfXR)Lewca>IA*Ehgr*N(1tLY+so ztk%SJC2Kar&K3TcWixp@t%QI|QJ*H06|z1QwK>`^(RApKE^1mQN@Ksbw$hpP+ScGx zV8Kk+tIxcq@VASuwW$pfNi{Exu{45Fm8C&>ob@7QjQgOZsAWkL=A_DCC|-`!^d&!d zx&1A!*6Tb#HLC~lj|ca|(|GA_@41$_urmi=`}K}{`ZbA5By{PdlHzRpzD;DlD3;lO zJ=*LP3c@}Z+N^(+dU#BoFtGd#t5&U$LfpxwAbT`T@6o8p)@b#|!aDMOGoaKKs&RL0 zd+Q!htI6REI&1B5GB2W`@hsH%%FtRR1QbaBk&o+4|3B}kj_97t0QV&@FZCT4oJq=u zf8=W`sL&D?s!>PqCkx|w>|a)@0>J=PjxCK@h)eQ(Qb~)lBR}CJKt#W~e{;W66k%g; znE$*Z(zVb+V7IEOo5rx9yG>@JLbOEAj@D)&1TfW&6N`w2av+p}NvI;B^2Cx(P6bgL z!i%b0EjrOLb{5U}UjV*9LBCZ2W$FafMb^abp2-*wU#9)pZT5LrM9XU^OD-@$Ws?|X z1$12y`=Y!Xu+Jl06D$kuoyWp^z&$9{n<>;7G&nSHgxtD0D}#GE+>5|KuMh7A06iJR zI9Z*ojq*}3jZ+>zR|%!F)=Cmt|2~Ee9*(hEW_eI|Ty%Dejay^b1LH8p@hopAjQvph zUBPzU1{uLoX)^9Lj#|pOGd}qb7#e55R)TQ|TRjf4s`XO94hZ3Q?v%$E1nd`x33d+*^x5N&KV$p$9n^R#R)6CRTot(fVh9j-c6Q70g`+JyzaQ&u`) ztT`nPjp;hu1QOjGs6#Ni#om7Vb?fi%vnQW=*7ok%Z*RQ$ipGDX-GBchcIM2-D*Jdt zVESk6$dN;8Pxe4=`ae_FeLkRf*joqsC*=6-787GraLQ8tEfVNx)!uABe(|)mG)0vWpq!f*bHiW$@K*`907+DC;lqkAUCT11~vd=9n+QpvX zuur2Z`W)!W59AvTu*IJ;1u)901f*9GhPjn?1Bi~c8-q#cOtTZI)l{}PeBrAcdmtYG z{kf}s*8J$x*8RW((zC_>ti-8&Wo=QQOM!m=@)z%Eylz|{2+A>5E5t-oDOSzu>Z$+? zs;|{n!1}sc>3mwlNEBTVn-ocjKBn_+Q~K{nK*L5M(HUSN?6VGHWZyXZY~0SG)N(xW z7ahB)IT-{^KTkIA31Vboqc4`OTecEarSRjxK3{qCnAINL9UwNrdxC||7Vh9&KR>n^ zz*J9i&cs~o`|jixKm+Y6xhcS@nDXk69Zxy@+@#udQ^^Ighe%W+(4GquPs+h^cr$zT zs(|$8tVBTB+M~x)n3Lj%nZ0@4rmvj0V(G6nDn(q`8QHS&eRkqC?U}uBK|!b=5gAV$ zk}}A%t18#N_n4lmh7iO7$l`(x0~0p(_HKj3(U}3#F9>Li4q7Kr13Iq@{t`f!1cMQh zIANsE)<5FM$+Tr$6ENc$ZfuS!vT!cOG~|=f>>ZTo=Mj7bRd1bs%9`ZxsRD z?v8_=eczqh#uIEZvG&s@?k6CR{@WKd*RNPZGf9XWTTohBYt>cJnArGj_MbTTieGSF z8Wfy#TMHZAljX7Z0o*ys24ib{^tR@=%21s$`!jC8C*z2U9_U_x!wD>V#S?xVPmY3g zp-y1kzS|R;3zBSUQPT8u@W14GPXPg-qq@w@EbEz*-$Fhp80irz=hcdl9zUcD07KeF zq8fr-4UnEBg+T%6WU7)8CHIiH0&obRMu|Z5^i|St3y2;t z{hbK@rJfHzw)WChyLs)3{U0CSuu&xnAbWNFr@F*YuY`iD@*jP0O{4;vvr06e|ISkf z?Rb0gd1U{u)kpvAlbc~5-ZSh=1Tguj*y?}q#7S#^=|>3w1K;N(^ap(hkRIVa0xpY> zuXyzg(aKq=K=h^MvJ+M-Y<6lT>3h`g-S?amST3A-GUH|+GYibn>^r;iO3ZCcmUO@~7dh9nUkrm{->wy*dFK4fQW^0zVy3Gba zzZvtquN|y?^{N1fZVFKewwYItrQZOaLX1_e`^P#3s6L}Ip?$HHmP2JDs%w;H1mADQ zPS3gUzk6)J<2ku9dUBlaLZ}S0ysY@tI_o#O1H>%!FE)3)Pwz%Ry~lVQoQiJEdgg5C z`GDT?y$=zfepx!t;{VIudj?6CW%qrjy!TyIUDe)qPmk;Iws#gYJ8Q5o1SEl!2$CX5 z5DY4$4^rrZs4tQ}DMAX03?YI+GDJquKoSECLNJTj*&Vaveb4l?oA%|s_g4SkeRVQl zW@lApmYJOe@^niOt!r=In# zRS?XDg+4urbXK=q4Lvm(h6p-Et> zuNI(Qzp7a6ni9F0a353p z6R4iKp}hTwo%;3P3y1by{UBgs_8-}6B_f3^(f!Fr+#i+>4&Mrn$SW)CkzZ)J`i028bu^nn*(b+?Mf$?#BYTE2m-)tVsMjy_Vl6-vjv`$oD|L2l73z!#(hI1Lzarb_Edt&?BDFh{KIc z&v;ZRu-ghH~a5cj~~{2BUVaau0*LoWR>=pBJDT77k}Dc91d3VvU?=DDM2Z zBdto{)5##o(z z&PZ?f6|tXejU~K`lGqw2KDHT;3vv#VZJUckY~vMSY;zn50uh5v>RA}~fCGxR?Q zWnsIKLCM&GZDD?1S?t<|;EqmlM@5MwQHBHr>E1-pMObJ8fs+>-wTXOZFTgHa-0yNw5~aMJW#Q*;|VZkqrLw6 zs{zpe+;iX7oKY8?Yp_t9I(62rUj5Q8UHUvY*-oB3ruJkHpuZRN9#whBcK(h3P6EgL z`CRPm;Vm+*0siD738R0F8Pg5yjQ}w#vn#5c(QAMDlMi(d7j2J#ho_Gpu%@Q^00z2# ztIMw4?6QWsD*G$nf6fXOh#jAv3(dlDN>Z1z-V)4lpoh0Rfa&GfoD~xw43Fg%V#`vJ z$58)mC2P!REJf$?{qx)0dSGd>So%S2xCgLkB9v-|b+3Cd6(pG3ne%)9JbIvVwZ|%# zds8m`=dXTh6O*%cOwP?m&!q;($BRyim9EBab`9Co8c62&fjxGkGXlQXif!`9zGz*! z)h*`P>1dulbEHK9vk15|Fe=6pt(V1`+nY(mTr0skIx%A%eG#kT-liIB)!$A_p%M=( zYD&UfbLm=_-R>B)ht3|fBL`viHoYIPI#tPNtgljXkyuC+@L8M}m`bnnvO7Jn6##wR zcYikkmlg}6^3t&1ZV5;ahD2-9=NE6N~l%eQ`o8^RNBH8XkMb$`qt^SrYhYS$_!jBEaHhDV>aA z7|bgxbJN58yxDG7WJ^t7y=pTzZ&-QT{s5#eR**4W0Fh1$L_d97EXnO+h!-P$ajk%O zJ0-GZ2Y>vERUbK(!iYaN&|_mtIIa8kO9mdBKn{Z5=Q;=PBLH*+%8tG-5BHVoBD*25 z!;MRKW=;S^1M@q;RTpd_K&$A~$aX>NJmVx%qxZrj2S~v|=YaF6)-|aP8ef|aB0x5b z%E^0#?mMMK17}pmW~kHJmP2gMe_mEwf?U`a;W<;*jI-Y0>w?)--vnmU zY=fYiHYBzK_YOeG#CT-0g`^DmS6pD^WKIX{%y`!B3K|~{?ephkEB+ThKihO5{nXTw zfY$`qmAJA7qzAOmT!62`1qR-!$pQIUX2Uq5e;9*aQP6E=)*#0JRt1(g)?u%b!Sm+! zG3R8Cq(TkrOn9%Pq+;pYb@e4$XCi%^aSn){=Q3AuM!+zJiz{sW{XbF_sk`>0tNqrs z22kgm`uVCrnLPWMy*2jRj~=uNRfBQ?SpToYV1K1A^3^;pw$)MD7=U~K3+>x_?wmC| zbk29*_BKlTNmlpCl!Oqi&x5*mBv0uFNVzJKpP2cWLFe}o`xo~4osx7QeT_&es+#v% z@m#O^>*En&-+Ivt#2s0cQvvDkFME) zJ96^;Nw(YrD_V1B#6-V5eAgnD>NlBhFqe&A#8fzlYS-M`ZtcP|%ddS?0NJ113 zDo~urWwx-&W(!r_Mr0%9uz2Pr>mJxC@I1h=bYY!=(KLYS1*ivD&)Voh%nG8Ph^f9p z^I2xX8)8k&dk8iaI!C&&&N@3iet&1+hLiQm`}FwTu0$NDuk z+Ow-Vw*Q9pwv5M_Atmx$`ofCTuDY`iS!u%_TO3pM?vA_b9Tq+>ln=j9vDA)te`JC) z+lg;IXXQCC`)+vh9sCloC8TbF6s+xpwgut2phDBSghCmvkIqZ1b9x#(YBt5@b&@Fv zxpGYib!PL8Sm?Pn`YyUHGB-!{!+DL>r0=u5yim_{nV#opE^y)zjzv5^8{Vw_hg!LI z%J|0_Uo-C0LH5`l%c{1_m@a^+ySQ9)7Wyi>Sj3JWKN)LSe7^JV;^*c!0?OxEJACX^ zh|gWTc)^xg3uB^F1>x5f>ckH{^r)RZdro%8q->!I`}ETf?dr8l@)_6LOE3LE=c`it z7wyK)udGFt7#kZK)E0sDSE$w+n}nm&-t)g>C7fM)T+c2^=LZfo>9=}o?m6t94|;o) z5VUx2LQt+TUuVX4#&2vc=Ju_`9wE&uDk@7PU~?Xr`0E;@idFagh%J7wOyZ7!^z#DM zhpk>Oh!_R`NjWU_0PE!wtrW3EX}J>0et`r~{eoEE7w1S&5sST^3C1#&XIOUt*u!K` z<(ZPQvdj;{&*AsZDaizKt(sGhT0v>0-TlcQ*zD+#p6dlYAJKDB43J)b#Y$EIP#=Kx zyjN8LUYBZ%D{y8Z8rSG8Ug={i$?5f$Jgve&ycDwCFeWus?y>j zJKEM{zw*QxJ9K!zl^xz^^F7@**VS!JPoDSPY^J-zX71jwrWapKe3s1%Pn>Dh+QEHH zCeEZXv^&`W_cz#}YbQt7!jDB&da5e&x}j-b&}s0GkgSp`fZqN4i7FN%2_+FHTjIs| z?}j;Eo`(bmWoY15n18`lWGjw0XcA71N{Rlvwvs#%Rn@2r{vxj5-}{y9pWLfzcrwFY zRW3sR%>(GOy_@;{@;#96fqW0-dm!HfJJ0JSHHQ9%$%u8Jg_>9|Dn3rhN*Tp_xsK8}9dpO|l$qAJnloJhs zy{M{6S*bC{a=Z`R=|LcmGSazZe`8pX{Y}8e!OzaTwH2k&f!R3uoVnkVB}yvA2wSqT zfsX^VysTcVLJd-eN#706kfx^q(u8&Scg^vORY6%jo1w_z=5!h^wE$+QLR0SE&yu~$R@ z@LDbg-qyWIfYD}MlRVE_`78y{NqVSKzcLmnQ4iAy%nk%~`CCadL^1LsKs}{p%VpdF z0jsPpFwi%OW&RU^%A~<0uZfM;>`1 zlx=+Hoi|jPbJCu9_FJ~MwLwmg?43sIg5LKE^qwQwDwL7evlq(N=?5j4Dddzb(wv`* zxbfK9c2dWd$moyCL~b;%ud0t%1z3FJozLylFK;HCC+XLH^4uwV_R0HgUZrOj#aK<5 zROSq4uXINqjxYd2Y%yRni91

L)Zdl0l11`{qB}xCdsYDs&$z5?~~EVoVq96*GCX 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�Kl%STVu78sHzhV*{KLPV(2kOnyW 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

ny=>tS!FSfaMohFV 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

4`^n7fXHjTZ04ED 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

`110I^YPP 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 (D5UoechZsEEdhwc2ip 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%0AHv&^7>EbBd#=iZ^J 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%0DF1@ys~%_!V)Fu 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 z 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�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

`zi&@35N~0`##0w^xl>5 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 z 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 z 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

QT5EE!AWDjCPtg|C1i}D%GdFaU3Y7%KZAkb zpZYdZRVFfJ0|t_Zj9|tP_i(rRZzRzsX=s%5H& zeru{goM(Lhfgq}&FVUcrG39q~HQ~wmc=_}<=)qnnv5yW=!Qgf7vk!s~ z$6=SEM2=9E7@|}F*M@Z8)KM{#pO@pzKHmMBssz5LclSY-X3MOvuDk=}=Ol)O`Cfg5 zRWN{+Dq~PcxBQ?8CIoZkUKfpf&Nj5cgB&c5mOfzSh-|K640DV>F6DW~aO3oqLZW@iK7 zsj^1xwfLhUli#!S4$)=NXepF1^_0@Shx)x79U00y_S7Z{^6_rEN&bg*L;aC-eWfJB=A1qV~Bw7*P%IV`ralwcw}-t-obtEPX#e zPYf#!5B1VI&)IVKs9h@i zAulg<+!yh{cO!e+*7zsHU~x+wx-TUzMi+de_|k5JxIt_%blsJ|cuoa!s*W?H3RuC0 z$h3`B_H>czpuxi~CK(z+P1ZKY5o>u|j@~uLV-Je0zoSeSxW1g|ACNYW18%qyOP~K) zmGbQefOP&+Ip1d0oZ40I)e!;=5G!8N5YxaZ=npbg)%YeOBykd?En!algGy-Nks2sm ztK5-0Er0ALDfVrs8q)S{6W8 z*YVATrvTIeVhgKXo$mT)qA67m^5Zjgzc)%8N^Lgq3U=yiWI~qY!nAcjbK_ z5DR(rw0dZ157|E3`q3s>f*4Bu>Ic2gGw!O6o)kWk=tg&0!FQ-Xq`CJGOq=-gCmcW9 z;Z2e)I>e7ykB_XQst-jAT(nVNSdpwXlqpZ38`To{a&dk7Z`w4XgjrzYY zIPdXpB>GfbUJFlY4W0LMUE#;f`kM%ucaRc}pz}2uf(V7#U-kaKf7XpUu+WNAtj+xD z`&1tB`8BOnjslraw<=x3P*@&L8mkaus1G$EC#)yHP~c zW7iv2BO8;fsG~<+9$K{;mYeIds*VPYtiKCfaxA&j`8ze^G-M6En^~0@wa%lZ!<)ho zd>#MBM5iCYv9Hc*m;8TS<^Six^Qv{cb5WQjg9n7cwygFtKR49n$L#0k;Qg$D?;xNo z&M^}-?`suP%-( zw@h{_{$b+(LbIKPItB7Sg><&Bx1>e65VVaJ3h+vCU9{+b-|;8hG(Mx_mN^vx_51PW z>8pP#@k?Net+@K`nbWMO=sId_d%%u(bbrSdOhtywijm8*LaCMMBy_)u{#C7nJ7&d> zajSc|$O^IP{r`B|)5?L7h%m2x~pQPo}#p71m%r$073lsJd`HoVk zCb2Bj#jYwzNQz{Y2dZ?p%6y;m5Y5VOty)HE`URzdFCW{Q-mLZfD^7A)HT=2v zhvUh%v+HG;O#e2*N@}_^N3@p9I-`0oo)Hud=}ei4R==SdH_jH2qDXLip45x`9dh0# z++s8Ti@wGxfOUa&#QR00W=$&{5AN;4pCT~ozeZw%=Xp2SoN}wPVV)@vSiel!LYI1G)RN{jaLHDHl^yj985b8 zL|+<#K9O(N0L z%gWe&3|C@l18z`JG&D_2rGZO@L(OV}en&R514cgCOCr8c_MaE6ZmWA?{uXyIs=@pu7Pnqmh%u0 z-$}O7#*{NwF*5NwJt7}O10DAM78r? z?n4_tHkP#@Uz?nztMT$hdpY9{8tmT*p{+bzMS_=3V~}**e+`{kRP++v3%93Hw(%V< ze6i>&;E|U12~TMwvQsu!=%IPdxR)30UvU;4Mu#>++Ol=bx@ezNHn5&;jHq<;7DwEE z7r=_av&fPN+ST=nBS0rP(Nb&Ngb~3oi`69ba@?4Jf*w-+5mkw}kO6Q*0xl4TBLYW7 zB9-$p452cwyH0_DptqcPCA>)~h1^E_an}!Oked$JgHk)ohCEjSxy1^lNI_e-y2P)e zZtI<+{+%^=+?SZ(uNsffOuexilRq2!u^)imHZ29ev``VpAb zonf10K+ERT?TLH>l~#BIbwYQEO5B4y<~xg>*LUk>qw67f_>UFd5K%(#xp%NKwLh&G z_5N9U51+>~hO}?Io2PjjXGPk^$M;fbyWyJU#Iiv)gQ`Fe0{vask9%EYS4{~)RHa@tt6WG{=EYv z{NZN&?n*!)!eJiUi5{pD!m%0`GS(2Mm9qLaM-5G;??Y5jJB`G25~RL3_A5zTS^5P& zaB|$U&!JC!LDP_Xmrubjor~;+xnb1x5By zL|`yglFpwP8T()_=-blQNT;zl(w!VyA8Nq_ofV1Pmx#ca%YtP;O!4Y{7o`i5iGPt4qX&2%2P zq=HRg$lt$G50211A*+Ci+*x|Q zJDolh3BRMg{EBg|;aZxP|FEQdg1ht4Xs^r+S<0YhTSbnv5;yWZ&lPlNX`Uq=u$_%% zJG2*ki;a8wp0yL=>eM2JPhYpMLiY%y{eKlT?0UROa`{0ekvPgcy(WG9#2IR47{9qV{> zGs5-na1wfpo2Tpz13b_H%i^5}){(|ZJx#!QBS?<4YpR;sXA_@{>~P@Tlf!MGQ-D?F z%z(Sb;nb*XG)7D(#7<_8_#eJa$fb}pIaxbv%GMbcR2%V}=+89o_FsPVjU(;B;zqqr z!!Kd4)yywEm-n2D=WkUST9e?cT5z0Ty~eX}tfkU<=Qd%oz?|zVgaFVj0qeY+G4u=jLjpPcHS4kebZ*0 z?G8x4=2d4l*n#G!HFI zevFzCYk^X}<_2tOlugEsQFdfXX7aXznp-Og!VRzkaoG}CS?WTVT*7Dt( zJhKP|6IhyUyil1b`fLb(jzV}+QCX%OT5BWV+O&qHhPrF4we@f6_%H6_(zQX08Wuf& z2JD)WDSDGd+~XlPSa4LgG4N*o6<>FkA%l+X;>1SC9wIJaO20N1jdtV5&UJ^+O_nv%n25I!At_uZzoI{7Z*=qAeH*?SGM>mhkYEai??|^bF zVk<{^yI17fauvAQ&P#&vR9^s=+VA?{*IuT?F^-_k>NXshXVrPC!Qox`!^?RiRHDOA z2&NZ)N)LG*_$=lxN_HcE*?8&mhh)2KFH(#6(2lT=Wd&3b9^Cr={CHS^c)KGI6TnTG zXg@>TJaf356+2X>nm{vbH~}xTz>$W6qGw5}I8q5tUdsq?S~ijEC*9x<)D!^HmZAU` z?L6M{!x_S)jOk$ExGi;{WF9GrJ=EiL(xC9QhL~S3Q)duajvydJL z$aGOq|c9R+`BIUj*kZ= z2KcOqzqlYoIGfbF=rT-CsYHT)1MDym<;P_s_<)f+iR*^OWNKSkKm%J#IMj?SHRFMo z)o1rfsA#ua@i$+C0Bs7GlkbTiNK9n)+j4{DQk7}j|Cj^x4xr(2Hk8>r&t>wXb?Tw8 zQv}m8FLuD)ReiY8$rY&ae2QE6)QRfO%llh5B`k!J>UB{LTSA9M(-duHbb3l{t38=) zkw4Tx9p!J(AJm%iQ*GN^b}BNI7itE&%BhOi$S=B-r+ z{mqV+ylwaKd$7EC)Yq5QK@mFDSKP>LxLzG+)-TOenSXhblHl5S#)FsB|2>J5VCy&9Ap_MUe$Qq1rfpM( zMFI(QY}L1bkWFG~X3bQ=P(ctA_WPA%HF`J?k4{x#DkRygcVk4Or2;-x0%`?l(b8LA z$omJv!B87=i(R6GB^JuP3sNn7CACSvqHdHg8fZ@$X=oV(9Gip-11>Z@LM4Se-KZWy z1J0e*9NZFUz-fmU2O0?0V3!nVasaT$tcOJ`*xyQ@N+s=g(07ePrXrmDn_KEYh41?E z4z~xa=XCzHqeq`RClz8JSMW`&ghrK8fOOC(xOM`4tRFNW5J z5#0@+q|Qpu^xmn=oy1z|L%+oj*;fT?Q2^W$n-kkIA(6D80K7`4&={XVKQ0l3y$MN_ z#dEW!_)J(}aLFzgxin2$Mk2*NCv?gK&^WAL@@}uB2-5sSN{SfaPfF{+jV5!%zpF*_FsL`%-(Ul!Mi`0!brS$G zjgj{rrE&Q1VG)UqV2Qwo(e~`i_1BcpNjA}a;NQUaUvRq6MH%5g1kJ^KrjP^~R^B+g ztT3JO0G#m_XK6Rn0Oa?L!s}dI>P7pNW5p_1c(kPu^xb(j0ql;COtsKHs_s?D3NLwsK89 z&AcAkLV32UV}-NnOKAB$S78o_mg>!StkJrW+SvD)WT{XDYZJ^rfcLjU@n*Y zf5uKTVy{^sIOmQXZ(x#`Ui6%d?O7|;D#iDvLhIaE`Q56oA0xVfSV0=*f?ATWTi@y? zqywv9D-FznEXV;txPVlkP9p^}Pk8w4aM1|KpP71^-gS@!^$i0!#Jj)m8}NTv0N}lE)sHvMAH)JCMdzCSPhIWdJk%;$0 zZGXF?lGd9xi$46&GfW;wr5@ooa{2q?_fz@w#X&)ur-4zbLSv7b<#}P;&-|Nw^XpOQ z-VlFW=X;*+Q6}k2&1hx(NB8LbhK66V*7iKl&Yd{{k~u?elNeN4f#uX`gUl?|shy-U z#S*ankMx^<0RdcBCQ|FD`VVPuT~H-|)_$qS`@2@p?QOMkwnJ6=<<~bm%*V+F_#c>} z`AE*tNOhpyBX^ucfYKL5>e6q~)hiUqwVc62f>Wl4`}d(g{@G?#z-| z+o-uC*ab6jNicdiJ{gWPZu?3kG#dh`h!vWv4&H;=~sKNny7FcC_P+rM^ke?onv$Ahjzb4S* z$c>U?1<}oZ$9WP=tjg$nU+^~ZbijP84mw`JhfRM203^$Wq8+P;Vul@-47~~pi8M6y zp30&mTT~7;@{1)j<`Z>pb1k%nJRVtwceZ+2eT50^>>xJ0-1ir1*$HC?DTRW~5NQ%M z20)@WBt#g(vZ6?jwoeJYGJ9N*!FOJ*S8U(eAyYtEsgfrd>aT%nD-NeRZ|EO)zF~;$ z$ow=SE_Eye4j@;Yi3|31qV9Ksw=w@4)OzvZ8+xF4+jk z{@J|_I7V-50-j{Wng!SC9alR0{kIUXHR>+2^R#*;e|a)#8pLAh1bKr{06+SV9`e(g z+Z194IvwwPZ1L2cOym7xhw;VPJ=FE_GMgaUf@FPQ1$qrwvIf{SX8lq_&#msOSDgn% z7DK4Wj#rZt;a=}%ZXr%U)348SE5UGwPxAa;=*S+EWQ<%-X+=Y9q3gKCGTnf_i*yD9_AcID?R};PLuQ=(T03H9SLW z(txA8UKumKH)@=_VE-2YdGiNAnp{wK^w%eV$ty2n{=y*S2Bb|ypuY5Ke(nciH0<+2 z(}Hr|OFnDdcm5UPjUa?KKHij1Us{-?EEB++M`aFCiY<-5oKrk0g)EUr4;l%ZILg!@ zdE%)!zN5bu^kPLiAZ+d*N9`7Dm)C#TL@oo8c0B!I5MipwdO&N{*Av8*005M_fF(yb zA=j^mgz=3qm}%OVfbET^w+ikD_WqT=`P64u9lZWp$xcYCkBd9J|4i>xYr|ux9c-$G zCW_vuA0;QO-u-x4F8rrUVrB6!_psdY4Qx$+flOF#$y!9p!n6`%#n!)k;1Od;(&{GP zqg$3Vk(DHG?$ZQFEWbN@qy^AF`snkY7-l(K_ za>(uL7i==naB@u(JK#6)9TVUi8Pg|akUGHT4Qf0TdZ2A5|55+^VOr=#bv5JHw1Dsz z7aFJYYWAV+lb@N7MJ7WhP53dxNYYmy_9rxLf5tx3*`l&_NX*DU_Bl9L^>9WOf_6~l z)b!)MZeaBRmA0n?=?EDRLXwsg9PVlDdcUtLd zKzPH3Kay#j!}-;HpZoOWN(><2*mo2)gOIcdgIE@+>N5$~XI!Ly9Ukw$KFb%*V_Rrn zc%i#j-PnKwJ|!sBtL;1>T!M-{eOP4z!C|V+WcGD_02$B6KIFvw=5KR55ZwO>Ys){rVn_)7OyoWy#a`MHZi@mw0&`g^2U(kJ&2%V8kv zf&sh%sQKJ}0kYo>2tUQM+le%4wf_|py&)#o=!(%5t8PTH1Yk7c;!;R8@ zprQ(*6@h5O&V8|d8IVd^GH8mNzYM-Vd&Yse;l5cLs3N?TW}#-!BV4&Yi0fVk%;O3yCf+4X3k%$vB%_UxzkTt2$fpPX(kE@L|x_zkAEo! z8Rd||#I0~qy+4*D3+6Yc)M|W(xfx6^#YOKA=*add@mXI1@iAblR%q-XX{ z?{~h{c4VW^!@l2OGA+i44MT_^`_TZ=QJQ^f4!2(Pvj}go^KND_cLXj9_f)k)zx@$2 z5tGg~@5GP@w*H!s^zbycj`w&1>nLbcRpN?*b#cyt^=}^8e(l@K~as76YPtaB{Kc6}uQtVyAqUL|^MKZh3d*caP|1 zOk@@N%&ReA3`B`=&&rz1eo6%L>rARM^k+!?yym!Tqa=Q z#=&BOwAFKhCJvgpI{z&cb$8L`U7mfoO*D}a3_WR1`Fh&I>uIDOd^uq?p_J3mT<`Ac z-!c3pJh1F?)}rp@a%6jeX0XiUUcO9zvN&6uAVFZ2G8PVbX-O){~^_^jw zc|)gUZ!{nYPxSK09sH9j%EaDC&K`t2r1ieMfVdu4c65J!SGuA?j9jic**V1jWRd=t z(9&=WF|q-oOxjOr7t1Pzj-ey1=-(F>t|2G4 zO10Q5(x{ZE+E<65h7YV?wYNf2T_2~+N)cuo5hEb{FtbOd+-wD)3IpY|wxvMPFW}4> zKrE0MMiJh|%(aM_`}m_Q9X!IxZ87PR*Kb5F_$y}4W_3Om4&weO@2sjE0O>DGVvg^$ zopg&$AKniv1i3AiWGBjq_3M{tCXcQw44WZ`iW@$N+!l_TkE=avf@}@)&cA;(P zaM}iu=$MfY3o)8?1jtUs=e#7Tkm1i8KeJ9?w&o1@uG-7!xh3@rNWKYb0@zg%TfPit zwUN6y$+S4VIyvCQnbJRXJc~Q#m$+~LWhfAnzsDNPhWlMo9J^G{Y2>4p19QNCtPBaU zm8eNS4!$cJb8HIx-s8>M$eTC;`_)i?rhPEPN99YKE_9A+&Ssb-u1i%wpRxSa;v zVnMmgC{JVIe&QL|rro=wauJx=I{!Ji>e&ETzeYh+3Q8@Z} zu@Ix2zc&t2_^H2k1?vl_+&uaf2`^VZ8Wt`WIlcRd%*f|KIezA?o zQdlYQAgMg-W7#o|q38Nv=$eSs@&+eWC3TwqmlP{dpXLoV!@*eMF-XrCa~SKBlU6uB z|H53dM2^1xCIhf>1v4=UVox{U`b%2RX;dGc@O(;qc+CD>VVraQo#qmESYoGR8(dRn zxFvz(E*l#1eY23+d%pIQ6WQETXX^i!WWl=zT*@8J^5Li|6zdK1BvqqOvb#d8?3#7u z)}W@Y9Uf85gmh7fray+UGVw+(lT8iHY@!`IZDdekQT>x1UvmpnwRRVrU(t~LvhP0) zK3#K9>ToyJrHojOFC6~S)(9jpp2OOd?8rX;S5elS4Ec>5Z@Iwm@$emVp|~%27uF#0 zB)*5?3BJl+(z6V4ls3KDgTzd^9{gO${R-v|aFbMI;NEAq+;wtii2wDAi9}k;)%X!u z_&I_v+2K4%Q1RcrCwjINm(fRYYtpG-ty^gs+b<`Cu2NTDE95Kh*ktG&0fGn02mIH_ zAmwvLK9-9|H8lFh4<3$coKH(RJ(|mO5)4J%88X~V6Ua*I7|azHB%K&gUtbH0fBo3# z0e;}|y?s|I;`8uprFlQgg2vCJ@dvla?{T3lR54V8lRr#!{W}mN7)On$K(_B4*v%JSfj4o;OVg)XuBqs?A|52 zkdSn`_xaH88AW)d(mz+#(ZDLl+x$Gwy^tDsf^3S!q1!+`d{eTcKqrxXugl#GRCK|; zm%Q?{l)Hq|#YEc~KVoK+#1g6!el+@h9EM|(10DY?%&Ktgw|5(?d#`x=fiJVa@6UXZ z`*fXiPPF)Q;f_;OPF9LM^w5H|ZKYdjBKYW+7+u#h0`o76^E&I7*~HtMk&VY?9$V@I z@TGraml#z;ttP4lSIA#gE{8QCqy@8%cr zhSiL0=L2q4(+_(-C@rGFmcq49Ao_ITusAHMD$wOgUZDL@+?N#R%`sPaf_0lEi z4i_D!XXsq92vPRf5W7?fh8GplGmw<=A^9|bWUg#_WORX!P2xFfJ?Bzz92t$6F-@5Qj=m;!Sn(&P9&bnT&6?MUH2> zBQaL3H@&%14-OOG>CS?ktebSj#61PU)EZpFxSbj+QY){m%WQwK9xrnM7}z_8R^{Lr zF^;)K8NP4sUnh03{MO8J26B#Cw4V6;LByVmo9%yTt0#pD9l`uxWXWFO7Cb!T6LQ2t z+nUvD7~K~?$4F|=hmpkQ_lbV8#5@VSK`OS+gxeXMSu3ZB86YNS@!~P0Gzitem+_e z1!M;k1(~vG^m*SK#TS`Td;gtvl)vBVy)|1cUL25o#sTX@Q+*o=^YB}4J&5>aJwkh! z(pG!g`0A}{sggoHkBhmiqq91$TgZYD@GEmG7XyzVVENkOyyQ5%RVAK=s5?o1#G>p1Ik>UlW8e#aN4XJtHoMjy31Hntj0;l;O=h! zwg!xP%iR7Yd#b2*mOhobMuV9c@O0vfcU?bQN;&6QL8P}xt0o$LggLx1`E(#Ycl~M) zYC44+Yf1V({lc|GS*jXP@cZ+-7xzPMW5bitN(F&Ls6{3%L!o)0N0k`&V(dlW{$9(M zCbur@V%-p+3}6#3-=!Q^n+osQ6`6N{lM1FOG(14BlW-Iof3+bQ_W$b62~R0b~dKTZMA5)(!z3}Ja_ z(Hy3kE3xt4v!k!XQN#LKvU`!42?QM6BnpOl_sH49^+k)?{42lbkPi{b$3moNicww!!tUJM=w|)U^TaCq(r3^SV`a$JJ4kIT9BD_B0xqeA13ZMkuxD+R@ z^(osdGKY3#b*$Gc5n9GM?qWO?qSSocG<3Zx7rZJGMel~nzoPOU-c)~Aum;b#ERBQn z9vrXzk;8WnZK2B!>PYYKuqb&Pe7ynE!8`XDRTG%!>!~f#@`XqhWoqyJ=N>EipQ&pe_%1WHm%YFO6J{T`06c<1RJ6t*$-6Rkh$f} zqz~g|QRa%5*9f_RwdhDpQwVi$6%xF9a8&TV->E3HOiD0!E*K;EYG$xV=#fB_x)?k+ z9c)m~yA-l?R9KnQ!c2wCuuV0L#797ZT_@_PFYD6!X@j9nrRCO~frx+xzRH0b7irBe zw$5y!sqecla6v7~nEmuH_M~@>g3p-A9g^>8T43$P`{v;>(cNyoyJ`ir2icwOdeJ&0 zqfQwQF_Wm+^hQ$u(=vpvOjqOk7)DamQtjgvPPFdNR^3T&47lppS@Qivu=|@}?9)Q> zoaRsYIF=Ii_p}oASVROjefp%^=y;Y2T#>N%jXl|oH_s2IbLGHS$YYgY-eoKCSz+S? z4Y&P}-N1vog#@w~y7-)+H(j5X(K}4g;h(^l_xG> z#jgijsDN*25_D$m+qOfsp3;J^L;>ApF!>f!gMSl2d%lOt9N*hI^xFZ`{$M!7u^#oX zJ3)!z9v}YM66-hVP;^*OO_-pN+zUtOlz~!Y?poUVis{A+fXd;+>%%TCsazoMb z;zPgr;7_->rIaThD<)8lFXp)Ip-mF(U*eFO{uhi?Yt8P~>+DF5W2_2YxHWd%CRv#NVy}u)s3Ow5u&u2`b8=A4)y{{xxC9oL{?ll2|-s+ zhoy(}GziyuIHR*b_j9?YK<@vlkxrnSFpSK2I_`H)^n-Q2t8V0Vr#v90FlTk;fzbKI zPX~T~7wn+`1lA*q*g3}fEl9B>zAt1O_S6&O#l%pQl|(J}fe0We#?}G+S0ocA10Bzw zg3<+*&Zed144ESP@rK$S84eoFZ90Swbv0%^k4etXukH;>nw%KEU3|~M9Z2d^9p7VI|U*1hc+XI(Kn>bHs4LzgXTI!|R8gqgIU*h`BXkj>RUdTRSu zrF{S9_I~;uY?&LkV}&uTG~s>oxVX^CrONCdJJ3jHTa8nl))hGd=8FyHoFKn1#l_6{?GA@Ee0)s+8*l>Bvnalj@Ahxx=?LkCG2u{Mo(XV^mYM|V zO#(V+h(iR;^SBiFQheRSXTs@ox=j@DvR&c<|EZPjtn2OnpH%=5<{&QvZQ^JX4E+c2 z9KIw6X1J??V_ho zJUmG(7t0oc+wQpYJ&NgY4zqNDb~&K}VKS`o@MyH0{3X%q7HyRQk+0!CRX8m2FKY zBUSGwG>W~iG5dCCJq(+1R*3?EyAQvHs|?A+2qt6z9f9LwQW^bqpQWF-J>HE87g&&f z|0?{ELkL;rjr7^;InO&B4Sfb_Yz_V}T6;Y`dX zf$>7bdX#l>88mhlQ(b4vc(meXL|0g9RaXWi zZM$&Po6}T&B4pWhOFDseCQU?kEbXyvD=zPFTZ$Sf=!2KbCz8WFPOC~XAF zC=$y*)!y?)I~n>A)g7H@{N`J-j!-HVARE@}CM5rmRM%TWGeO4+BNIAEU5sQOC2Yru z#|_n@9ey6S!dBXHS7WO9X_hqLAfHN}NXEGMamnN@hC1fLjSA@HwW}$eN37JdsFp0S zJlBEtzSV&Az`k3210C$wmWhh?Z<`6z=3*iEMCO6Hkere=-Dz^1u_QLY^YoI+gEIFj zptioVyg(|Lreq_;Mcc{DVUu(QyQYY+?XfaU;G)vti~!|IEUD<2Q}qW2AzUeX==PKi z2WQUW>Y<-guFCaP5RHGr$R*`EsLgs+w(mop{RxRy4MA!Mc10CKk0u zofg%cr~%w~0{FRIrogR2UA5H5X#HFQ=oKF;KR6Eif%Ss|>QU773RS?pY2)2!zZ)?3 zUosc!vV?IzI8Dl&O}LJ;Q6%yvFU9R=4%}X_On>DmK-eVHMV}m5>X&rxqY8)a5bd+< z)=X6go`=llB9=c&I!GnG`h$Z9CRA|}$@STy8Mx8^GJGanp2s~_MWu=uqGd8?xVh3s+=#&M@dL>1&S`MEDUN#KOCXB)L8*qlUWvAJ8zcAMhTI(WueMq>zW?_ zu^zWksmiUD7c=WO_AVoBhR*S11uF0VP6E};06*@Dh+$?x%HJIbqh@GQ!4A}Oo~2*+ z*DbR@iw2VE<>{*5Tog0MMFX1yksMas`Lt5IBCs~oWblnqO`Fe--n4v|jtXRPd+>jL zGHCTQB7m#W+z;gpZ~XZuMvX;_cXVqNt&b9UFcynSqIYM&Wt6<(fA=M%a{kDgMwC(N zVHF+y!OULI1O=I4Q3SOOJ9T{xvc&l5Eod2)W3w4H{shPxxRl(%+1o; zR_~rX*n{#q|_KWuA2@RO%MV~sruUK<(M*_H?{u1cV+pC!(WhlvP zjg84fV=ilbXsTFe;B9S!&PB>9cou)H`l^{QP#NU0yy&tD*e(T?a2o>$kJjvgx*i=t z)u;>D{|thUh0aLMC?2qparw{lYk4rlP#h_)^>pKEho*0bZZ^KT#&m;TYo+lM%o{Cg zrWS=20MmV>7{~%KWrf2nQJsbd{du&k7)3qmEb{EL! z5p=k_ zu*}oz#`o0UpXPhIDi@>UTcP;sS&^*9iGrK~&>3_xa%L~n)6yj?-S|fW;b7*JHL%ys zYq6WA4L$c|{?;VX`xUAxZ~rhl6F0c=u$#lt8t2r`vmeT7i@*HS{Cksilf6RCN#~Z6 z#l+*ua{JqH9F^P9+`aqgi3%UO@X~ee44dIrwWB2aOx_{;qxr2v{9I}GYa&RF5TP2TErr> zN_~IIK^2tXCYg!iV={2jK+%-p+eBRs4_v-PU?HxCDnioI7e0Th)E_Cm%0LVOJb z1fl$MIfstuTTQ#VYu`oxEqpm2oy~aoAd%Dqh`0IeEWLHt=`3jyF#fN7=_yq_)(b__ zKA^F63iXv&l#))))gQ&2CRdz0Q?ijFJ?ShcWFE^a+4&KNs#TXfH&}^4|0#aAtr$O~ z{1-NDMJxK`lK`^Mda5|fvGqnHiNTZ`+X=`KHExI;`cQekF)wIYiyZP{p9#mP?((o? zY&G^Nr%_-VYnkjZ-7B8AfF@K&Yj9GpN-7%2d!dK%4{0Q}tZ7>Ln z@2d9f;^}=CXINveiuC0d>QKQ?Z@J)?BY!UjXudgnF5wAN3cJLuqGqijz+gCZ-}}WE zl68PwV)UK;A#07HIDG_=<3wA2dyri*{@-hQaQ7pv?2?<$RrZCG`)}TR^lTWUQ6c{hbGk>bQOH>V3pkqK!>m?I0QbA)@J$@|m z8e39l`2PUIKs>+6Gy)3j>=RUc696Z35=J)0C=4hRMv;?&iTm0E8MuuTH?q=`t&@gY z3PCiS@HQfSon7o;`g}0DvQVlqNsXX`BhFE!PV61_bLB6mkTN_nJ1empHzcvV1g9H7 zT_a$X>n!YWO2GI-M*1-R>zd&_1^b}~PFi)OtKpi4M;fNI&IEXH(rr(Hr1zIj>H#p( z7h{FYuY0lIY5?sYJd^?Z=>Dva20AeF0Nb4RrBYUUEw9u!@4p4Gw?Op-MUl0h;Cg=3 z2%Rqm_=Wyufb{^>E5M$8F5gj|e=Gwl2ZB9p3CJtD`X>GUyEjp z-E2cLZgh5eFt#+AcGPq1#&-w`StHyVVr>z$5kgs_F7KDvzKR08DtJUGk=66qnKxKd^>)?GVx*IVoz63Ksb9%WuJTBUw{wR|2TrN?lgoctbn@$}_lAW#zp$q;c;!K$_WgoIla9Z2c2dZ)KIq z{MKznn4MXEEkN`HR~kS)f%Z1QeLVmWO)XrPovX!Ny#`3Bb>laIY6N2vNWgg}|MNlh zY(uiE@jTpbY5tmVlnoBw?qp|~{vlR*38E(p3+vAmrgS2!a4twTKmtUlYjUon0F8z7 zXXWN=ugb`g6XI>n9;3%PeXlRggN^=@^xk(;#-4uWwq4?I46eTY7TA>^&(T#PbJMbZ z?zC*)_lQI{nE|Ta00F3@sZi(euY+|O47Qy6lD*u{L`fZ+EOYh%Uj7>vAvmH$sWJ*_N&r-{JxyNoY?^j?7zP0MM<4`Pdbop+uf4|Fehuke2vug zd=^7=yh9ia5Ckx;7W#sw)m3mwxpP+nV;DR@5Dvi;)Lj^)S}7YSojqh>)A=kN!UXac zV;rlgK|n}oQ(k`gyU=kOQhXIBq`Os4^g28aTV|A!uWTt-Ir0T8}v zf=&Hk04Mm0&SnDX8MvZy>z%hHgnmDCz*%S3{jQ#QUq+sJR=V#wtgDKC&z}BJeCN)~ zm@Pv_(F4lZ7{@(-5-jw7*ky{z-~C%ZBPRx}IY|^i{t&=IYUpv1w< zs32&zKbhZ~n9-vE=-laiu@$hGU%e{r#~;WEkY4-jQ^RoGyyrmXuo##O!`G256wD^7H$VluLI<SdWef?x*D2N=k}fQBx-OYLKCsj@5Ge(SBb zrPkXj_5Q_@ht{`t$hFH;vhVQ+KzD5chr zcP(GM&1z~E?B5{%pzIqiKLedP;4b=b(j#}fdYr@YJ-{K_gK>y+z?~AlM+vB7R$L8I z)v^iF^a0?`cLM{-$^ob7vH9Q18p-u)H|8?+GMXoxIBtuH()RCk=47MX_ zi#=GF#yFh-a^#EISwK)UIn2qpm zlT8FE#{3}u%F8rdTb}~k{_X>AQyVoB57j|u7&Mv6H((=KgpH)hgZZC#=K>B=$y(e; z%!_L3%{^v7hIvkKF4}DD1QE<^#Y_);&RUUqsu^>3BN)i|Ofx8-<0HoewR_~>*V@_+ znVg)G4?ld@^r2B?|2us681$Gf2~A&>jk!ta`A;F}wMmx18a^@cxdG5KVEEXvlXCC= zgEIHsKg7H**PoYvp8Vf6(3iWwI^Q%fB4OXM1V8;i+A(8%VC_H1_Gf_V0XOtTO!%GWe*3{$?+S%Nj(Z%BU#RUC{oOUxw3fW<3w5fvy}ADIA}aE#L8&9R$tW%df3% zhuvgF-h2No=-eQ;z#RR^kz;c2y(jSg2?8%-*%xSYVgFAdyCFt4dl5Un%-{#Up9Y2x zoBpNuj_>%L%*wLk6|WXpZGk)70u0g$!T-oPII$xX5>PY}YgE?&J1;XZ#&X_K+$RF! zuXAUw%A4<8;7@t+g%h&baldRJfU6v-RL>ysAA_U#OjGok-l;iQIdv{)ACAqXY=x!D znVVh5*twY@nkDvyeh&r!l|!gg1<;pj;p+Bk3shU6+5*)UsJ6f^v;YD0DpW-L0HJe& zMQK1JyVu(Z14CBf<$6Xnhk`36s+qqDpeNW>ncC(tDIm)Rqr>S4p&@|m9HrPJSk`uh z&U!Lk@tfj?vgv6?`eCq=*u?^)gKY|cbP5d=3V1HYtZy%)+~qYeL6P}SnagQtrQwl= zK!OkmC`iC?Xhno3GLu^dFf;*7ZwHm|oZLTxNfw<;ybeoh3}B|Yr2!7XtfQaXXf!te zVDqkJ3SxlyQ>j|%8$4(ZB}j#lj|8SSHX-tn%n3Fp%JZ_=hF14{R0T1Xv$@u%RhD}ek;hlw|^hN7men=t@&o9ub)nqhKf(Yb|*`w zolS&bA+G1G&zuJ=uS{84ZlrO=6-gh!z#THw(m2R|swvUpP<{h-<6AAZdfbmd3lQjy zw+;Sl?iz4)!TYn|EAF&jcSsU7&diDl081`RTA+y* zICJ;H8E$9CYe!(+*ud>hs`FRLma_@aolEZ7Qy##8b>WyxkO9A41l7W6kS`anF95)o zH0@1LdojtWKLGiAhjIZa#g64R1wGUwK;p>WEReF)anc_`Bx*DQB+S;Fa|R)5jOgbATm?E{+hHLI*Pe{c0Q2=pkw9j*Tj41ka+g**V8(F6Ock6J==&n2!deUqc6Oesj$9T%eUdw16CsIAD>2sFJxkQ;IW*;$dbPa@J0J0kL0Y+|6#HP z;GN!n9H3;I#OnZV2QZn!`jG)obr?G!rBe2JO;4{5YSqoUz|>hTV>s)iPV?S@{ic6t zIXz(KQ`-agvr8?qD$FBDi0Q`n?mZy)-~X_jJNJoU?fc4CejNR7S&)H`qkw~-B1M~&m+%vLY z298?$gwQS#u-kPa>p~@&-U1U781ov$Ya1_OYbz3*ydo|84@m<+sw%=^X9cz;m#cgRayq_NS6K#}>?nsq;5426Jw48IMYEH`hqB=}Bq2Hm92f%AEV5Tz%Dp0+g zzyN!hp~*?vj3=ad+_DjI8}AWqGaU~CJnSHTjIGLY$j!9(ykY4Xye!CO6=Bl^AD*5%= z?cWAu1ZLUou+M89W3dJR4w;pq+t@)Fh_`;>U8%#^-Z(HMO?^YUYtDBH!T#Kr%=JzZ z!xk(eOKOi=_T9QZeRTR*PfAI`MICE zeS^cAa5Ro=b<1W;D}q?Y2XEJz?T6U`=$d8Co_TG2s6$%4R^QWLbsm2d0p*2&g!b}x zd->cID?1bG!a99fC0~!+?dwomtNlDq8M5r#D_JJko4Q0B-lN_YYi>l_H0{_F`mIQu zL_q6y!8r795$J8euQ(qGd?+Sh4f7HDOPqk-3;?BnO@X{TMnR;d+F~aFw>)2^qVsOD zv=g|gfoyEsWdQ%#o`nJiDm@qXw*&V*$SBRWQc>e{UrXHD+xVXW%zuST?DzShI&t#7Y%;5aS%0eE) zSW!HXtkSy05yTqwx8wkwRo|y?nWP2`sONLVc}+V4Q?$Pk*uT0mV{AK4<41m7YCwXt zvC$+y_`%CEJUl7~57M4iC(#fxM^Antt@l14L1fOmeC48Chkg}}MWOlEz~(S0_Z&JR zgWWx{@aq33iB-!Eo?pJxZx_J%-48v5KuoahN5ZoDG3JyAx{NO^N(XEb?yjs&JUo3v z{1?y3=E-NJ4diE<;elfZpGyY*@L48!oAeplKaepnjP+0%+0uiKnJ^Rxvrz?$TS8sMY* z^P6?PooT)fW(?_ZJOkxuA* zAh$~}KstmBaZMPxwb3R^i(^_Xf4d>LE7X)IypqbA^d zIF@iur@}FrxFq6L1_ra3uMPM~uU@(--~Ox9X4glNt+IXWfuh7@S|-0M)iW~BG~bKf zHZ!N@T%pt)&VJ4>%kquuE3nOYr4yNPD2wyVNSibnY0J5WDuBM6R;un(ZGmbFR9m3h z0@W7S;TEt1=(T7@I+M*k;76KsfW4@^5lHWaF-y~8a$hR@AsDC#zNXMPz=(NHfb5`L zO`kYAhN!wa%QOHj|CBVO&_PbXGovplROnj(p4+JiW-?OKF|Q1M z%820<;m-CZ7(57un{dc-p3-3H!9-6&~0?|N!{o@(wUA*WuKx0mXVq)pWt>X3+-U9(trb|KO_Kx z_mhC=?F!j#>Rgr)nPn|4TuU2(813Ex#Ut0DMuo)mE!>+s!Af7r_0dSpYz<^=QAS5H z$t;2`-7W+IWC8WovVFUKnb&9s)YCX-cc>Ep#fV-0H-O!l-wShS8_7N!1b-zGVHq51 zg%jHXmf6p-)62?OquCeq+1x4Uqj- z2Rdu$w6O#FmF+iJHwY!TxU;j|^Hle%w!oce0dHzrnoZ)dX%bmzV|whLOfRn2iR%P8;6 zes4d>4qWJH^~h*{*63y5&uN)JegfzzUa*tyAF%?@oc67*ySrMzZje-G>9xOlO={-m zWOS(f`*>@1MQRWra^!D3cE>N!50);bpVlBw-_i}t9YVXFdUxTQe=c2*J`JFB7Nj}< z{cj@8^s`{qE&uu1N`rBFZGr7m5}kpQ^vZc z$YrwR6%%D^DFw!G1khhR3zq7z)Ezj5`3o{q0L)1##zt?z*a#MAKlyM@wbsDco&un; zkQBfe?Z-}K4rlPn>e-K^_3#k{-&=is zZ7pKR89D%}szX398A%DWrM<=rkW@LMOxFZ+b39eRdNaVE&CTVNq30n82Gz7czj)RO z<_>~ffW9 zb$X^(5BQOh0fA_2FNy|JG^awcv4FWhKxIvXLpj-2>?ch|ac}T0tiw3tBr)F-fb?@| zAbl%<^Z>e}&zBNrGih{ZK}Ou4bE5^^556auJ%PfYmfD(>0Wz5tyYzACFTW4F;;?M` z_^cF{rlCD@?aVnDeF6ab=Ir=Y{HV&e?iPUl*5aD{^MCSd05(|+gibZ9$20!>zx8X< z(Uz+Xi-SfCEXA-H~I%A**+Fl;`Jt-BAPhm%R7 zeixpzHj}}D=bxXM!1M1bET!T5NLvrk({?-AIpx$>9axp-J z0V$OPYmkM0bu|FMGJ*L4L!{t>pPhQmnonFg~Z+th*&t7s2fXZBi!@}~*FH7^jd%((% zOdV-i0{KGo;lt91`DHP20=kw0&1-o|n8Du!%JZE=;Cv-^B`vGicTG(L#^5%2LoXfX7XY{7wkr8~S00USx1oryh^L7`A^1>XR=8|`~~ zZ1;3ekJ)iMyR&X~x#aP9B#*o!6`~Z>=@gge=6hh1OvBsTCtxQRz+EfZ@Djd)19w1P#b|Q7=dL}mSxon5^^RnPqE%5 z#1IiQpFc64+bIEz^F2CpXI%d3`|nEv@5)052V~C!k4eN;{GG=3D3#h6^skeIka(Jo zHDEdQBBHuPVZ{~`f^68woPpWY9mk^ zf!YYvMxe?gkPkqwhoB;(Kzf!Pq!%y%pfDYP9+du3AxmHsfp&uF6)@WkCkeOFZ0>Th z>9xITP06Uw5?=&2)6k}nfrP*mIv<^2^aO(XbZ9atPod+D40%lm&Tdp`Qvj=$uV=gC zqnBaax=g7g{w^dOe>yHB0MirrPN4(Nu+qa3hdm>eOzXVXbTE_Qf=*Y80+o3UJ1bP#YOU1LNcvpAiyTt^{$9Pc&WTh42vNgB%NNborOM5pssvTNDT!8z|_anLfiycc+0 zbm~ya*K%LnpMA{&>Mf>v1zI`V=Wo6b=-gu9f(Zqj=ljAgH0tOer_iZM+&tN3+R(7k>AX66$} z0=RP9VghOfm}{^ElV2ztlRIOD!T!bik_*1~1APDa1_Bg2*B`fac88<}OF#L;KbKDE zlwIwG^(f~!+_*C#!AJJWuBRV#uG;e73$v~Gz6UbFWCp)hSCe2d+PeEN6$4}54_}t9 z=f5g$=+TrE7`djwK;QWlEb|w3ELVF#!j~^g62ZpyM=h{C+mGD2DY41B;yd~{bc3YP z`Kf;qY@$NFvVJY8k$RXNRIdy&1Qrl5P)rH|=;O2x5a6etM?eT|0Tm}3eZ%6EL@!>D zc9gC5__JWL44C_QEVnVdYdgiJ42;gtg`qE|)&UDJ5EfhGTEeylUn5h~a{EU=l)A*S z^zH_ObrDdr{n&HkBQiB~Q??yFCf=D@X?@@b0ELzw%IydcoJW8-_=TsXzBBt>(KZYl zHh}a5UJ!^&8;^`RD%AZJLldw`mJK_#vdpk#IgMW6V6kGRl8>1 z!ScQPB(To{m+Ly`boRsv@gdoudGCFhRV%TG%)IrgEF(cV1y)1aIAqpmA~l8gpV}ys zu)7HGXzu_RwhRD00Wj1*X*0214Nlu_w@gQh%n)!u0KMHdHMT;1T@G84vxz!XS^{R< zu%>a{iIV^JLj--&J)3Psnj$|}}@W*5f5+ zCL}gBf#e)Zhoe7)Kx`&;w=!V`vWQA_1d4Q*3Bb$OhB93f#OJPn;DPqBlgWMofb|so zB>}LYC&0{{gkOSE3QV7ZP3-3LhG%UCU@eN*y9__k3i_05FPoKl{!_+rjt$3%gb*Qs z>Kaj9sih_BugkM*&Z6Y}f-GIVBJGbnX1l+UG<5c)1oopk3aWQF#mPQzU!P97B$+^k zM^u7rz;k6-dNEEuUjl#2_Du`U^9#7N*d$&M7__btKaez{uFh>$OtkG;4v?N~zN}nG zehWePHN=pN6(79| z_E1#1?CnQVVfNc)@4yQDbY!D11dgv1NS}{=p6~bB*@&qK!O9S6(_bV@132BqWP*ubc#cJ`Bm;w_$NssK{TyCpm zEcEpU;On15vK=cTYa*%IYdm+7DOD0_pm3`Pk@t zJJu35w1Ks$`h*;dKlPu>5f@?(V7KkJbbq~P8d_KGN#Ej&Zs^kiQ$>LXoSwJ|T|I)> zu=S0pb|=C}U|dE8pqy$G(0jGoH^K9&Qz`KQ<8FL@8j(~~u2{fkKayvoNSmZS+$6&z zx8=&!OL#7(VVyCZvJPzq0DRtqN^1iW#5a2G!B` znuwwaMNFFF`ERATT(D1K%do?|ux)AAvPxJKzgGdSP0FcL@5}haUFq!TG6V(n^>MuF zEMmf~>KEhw#Cl|^(<7mtW5VPr`k87{8-XA95un~;f##PDW`pNTf(a&;P%m|2ow%Ow zVPb}ecOpKD+fkT+LZ6zQ;B#VZT3&wTv`o*0WT3A@jy`!@7F|{%oY|?!e;cteRKM-n zw%>sNsS8nG*sQ)@q?`AA6$yB#w<<0}v2vB1V+}xm&o5i;fVB~*jX-S#Y9mk^0V+{f z%Nhm-!ui1`Sb##sjKORMn(aad9$A;^45ENwTx$166^40SqJ70j=U z6uM8n&kqADmu-&g7~qSBEmnF>2%up~ma|G7yvlIh+jqc#s@1_s=Rr9D1nnzFK+!2g{YRV5k$Tr?(01JHYiwC?L?+ znT?uha1%3hJevR>0_sUPc^Xhs&_6JkQ~uA{Jo}&av`B1X9Kn?d3H0@VT?=4uBnS}T z!7-vSO`ka(l?r~)bF37wVn4nnW009M02VbmKABw5f--gdW1<7W(O7*rn8;N zhoGE#pG$hTjK-J?RfU>HZmWM z#=(ehvDjH@W6h$-$ml%*mbT8_`((#6U(VTO_JcRY)6p(14?UE#-1&n#G=a2f0LU7^nnUn8 z0Us*VtEu}D)Jh$fb^}2({S_vQES^6HhPQ=v3~!-}XAsDaNc+=I>ml<_!`H4!9LdXF zPvbmo_xi#or%Y0E;L*o$9uWj$mJ!%@!>$1!+Lk~;yOIo-1OPAzmcf47uq`cq1Ud4v z0x=<*?XjX60r}jQz@jb$H_K%V=gByO4Qk7mwoTnQZkyb_3*Z94-h1~RlnWQm;O`vt zVK=S^fXkQ?Sif`U0PMFp!xXw0ikmTHfS$~o%6@4Q08YOytEei~3467WEKH8cd}u}< z`sH6Kv`Nl#CP$q9fB$b8*n3C(DQY@n2c`8yll|52ozR6r5jPuE&_rPhx@a z`7WA8K$XJxil2dEykqTB3`nont{oK%xxeG6Jdcdloo=X=!e z-{#yE=WIROWS=Js{WA23MI`94%1I?)vULrYvEbaFe^0g_+$Sq@lO?xq!uxsT^cm?o zepu>?Bnp*msK^Fe1)jeO7QsLG_y0$cBU9IElK%kqd0!b7O|&5sakhOC8p=3)rnX)v}E@U3wv>fr>@6KG#rhvbopi?Xy6sMHQJ81;W^6Q(yN+K)}WNqac2cDaTgNlfW;6+Eo;Y#NS$-s?sc#J ziR8Rq1gw^m^q|!d>~^dsSFnGKZ_LexjV{S^%Vncat+CO=R|htFPXiMC>Mh&95P*Jq zej32=^7Ja6@4b>_4EN76lSS?`z;UgZ;A>vN@2&4eA`DwlP>mX~8490&#-`i5=C|bF z)WcY5k(HA&i4!;yZD6}yt@qTXl21_K+*KEpiHQlhdi5fzuHpH|JwTu{0rNX{AVCm` z7?-bHG=7RFpL|A0fH3>sKV*`O3JpSX)g^9#=XX91p!}N9=a86240itkS)QGd1S;FP zd_L%p{f2?v+nQ^`#t|Exzjj{YeY=g%fcO1og_Z5dQk;pY!H4Jukh|QNS~NC>?}w#} zkkG^9ZO$ZD&`0BPrBN}ut?X_ZpB}z*&HL`p?6Yw0BXOfrQPTsKpKmjudB*bjPFK-; zs(fFF?z!9Ulu{xOn3;n56AIR+740Oi^kP#e~0|yS_UCMa; z)&l6&H^grsLBOm4If?66D7Lxrv#;%08-dTx2vGM`rg`eO6zZ4?ns;KexSqaqgA0Q0 zME@Cu`kElgsRyK|^!sXJC-ErT`mFcg?DT@X_4awWaccs;Ex&x_#V2IWosC_Xh6?<* z5gQ{P@u)?v2*Q+mfSD+8Dpg&qHiP1C)K=h_mx~3e0qCoGNotMNMxZtVwGpU|Ky3ud z8-a2G^x7JoYD}W)goz66;(AZNztP752md7Sgm<)+qEo7LQ%)>rUBa|8b z2_ym#@JweJl}`4bf0hF_+dDex=-?$gJ%xQIb2tN}rNF#Ya7TydazHL*xTbYJ>Mf>J4VajN<@t~A3py7WR4{)w zb{5^7z#~?MAi$rcrWIIUjw4&!&?%FFI0pJWFgQS9dkYxP$gsH)VFCy5K_|-!+iGgI z7;X4WZiX#mBmE-qgbYabAQFQtJ-wAPKGneW8@U3teX2169V@2+BC-NVY;SmET0S^w zCEa}co5um9%<2{il(t=R?JjuO#Yjw|a6F}unbnJ+J>MaB#^z)Zr4RXS%oiY^m|c`f z1iL7^`hwEZR2(o+@Zfn?*ctcwQ1-j4t@u004n`P6Us@~Z%f##w&cjNs+X2?VU~_)Z zOrCDm7JbSiK!>D)=h>C;*rZ(g?qACzhjv=d&@%c*z`@x|L-Odaz9`MTSukT6yKZ_D z1{UXMESsSX05;0l$R+6CNbmySVXGvL;9~d;z)#P8HFJo>^tgmBos+Jwel4@?Ud+s% z_>na3+y};GE1{0Zocr)?sRvtCDHd^VtBJV;WKd_%=k(@wg`^mOzU9cHW;X`)4UpK_ z2f1wYvGJR@XqTkz;aouF!ueB%X)O5EQ-uy)_HqUr=KZzHYA;8U%Lyd!ZkI*`e^tT&)f3p;`NEeFTPU6Q&F6_=A=(KP zqwA3++hOEsGH<28j>OcIEWG!wv_JL*FhF-|HzhtbCJSdilHfDXNqu`^&@-zq%>L+A zX}<5_oO>=YGb!^Qzc202J}=%iuyZ853}A8?fyi{GM0)0cYctf-S#^#{3={?{n*pRJ z2tb8n!UR=&;;6BIlQG#@VMQ|q;w#ITCi@l-Hqd6Zt{s`^)2nXS%wc@nMLzuSU74I5 z$ND-`j{MlMC-Ls&I_vtG>Hkjr z9?Wiw07Z9xB{$JSH(y0EKq*%Ge>gub|LTv=>MnVw`*wE8 zZ~n8dg)b@rSD+aj;&uJ#aXu88Vx@z;NAqFdL9d z#bdI7_j2pQ4+FGo=_Z=gLl70OTMWLO2z)bbZH>nM&uO&4k6FCaRzRQMu~zYHBWZkT8RUddgx5Z1}jh3o+Rj0@M5bZ2%Ro*Y#)*6WC4P6B)TF7ArmP$y|{4O3DqN zLnFY(NZbdh0)@#1F4wAbRtQ#^KY0pC4j?mtFGeMN=epEEw+`%HuTK|apXdH7V4qK; ze;u9MO>;|N98M&{7`G+o>roH4Zp!2UStWpOz^v2j=Jh7=o^oS+T*i-A4v^lDBtw=r zr(c4AZAu8=5+*G88Vf(uX2UJ~uO8nxw~L8bmhWhzhbo7C-r4pF%5=owe_Mtxt^rjf z{M!aHAW-|ZX}n|7s2JgC%1u_VZ<7Vm$Hl`+f=D!0Uuiz}dF~rR!cq*(mYUEIrQa15 z20Fklyp_Z&JfAav@jcl^0R6&@{WS8ZU+j1=jTxI zmIO3yNIX+8H0_u9xl#Cimn#BTD*LR0=h!zgu#>1ref{+1&|ac0XRlyH0-ITYXbC`6 z`=Q)(%eUPE66*LzpFjJf1U@nJWgdOX2k_QD=4-EvwvC#$G3t7@Cve@$( z@PlRC&Ty>>5j;j|HhPc^pyE_MnO|A}8?^O4&A0y3T9%9hKo4E88`XXpXJsM+!Q=G- zBx3{kyw$QCg&vx8N#Ax0;H*guZ5<1^wz>LrwfeG>^dJGE#k>H^;~1%$ZZN8-xKz z0dk&vK*q7PHIg^A< zI16G0|FI{erN7s?dPBd*M&|(nb!SMS_--N_da-KhcF?^2piFdF6~B=2m}1(3Emuh; z>byR+E9cF(PWBu!F=5(`6vjtss}Ss}-$1is?LWq3|116RTWnJdwNH zYj7!(7h2mo@r~_~5mY-keflF1@Garn-6}^8ACv7!dQYe6Psx%U+0U<<^I9FAW7)oD zW0FOCg_XoB^fOhnU$wSsBT(%T;Jr?43H=w;XDKEr9q)GD|Maywg*p-$-0klY`e|96 zApkrUu~1}ur+-u9F-!1eEg`{5lS>yvVL5g3ihO+bmTCSU{nQh(;5&kMW^vy*2_KFi zUbPV!8Jfd)8HtJj_EVG~hzU}~bgqpY>(khWdSNPEm-*&c34Kd4xVwD2vIe04G_G9j zn6(k8jX-S#Y9sIyKLV8k=ykwo2rezg@MnR|7-Xh%l7Cv3j@vTJkq$%#L&)|)VRjvX z^bER}a=4ovHt=5|_IbNAk&e|Rfat>jJh=nz_aRtI zXP~m-li7WB6~+I+en|zIinL+c8@mdH9HsU;tN=F8+5Eu?#FFGHycZV1BIIkZ6!MK; z)0GI=4{zU=_|P3VXX?e@KWGBEE;t+PlB#Qv7?^{XR#%Ksz;y&v2aurA*yx30myYp> zaaz*(O9O)?J!htwyby;o6hZwwB@zkFF4T7?TYDy36v}+Q>(6UrvC_w3$Xm|2Qmphe za&qo1JR{|1qT0u&+GCp| z1Hm4n&z8Oi)Hu!8&Q>hbU=u-ifq)f^sP=Jc;QDHhXstaR0oN)37O7A4r5G9ni) z4TJT>BR}=h@tk!rSC2$o7T_jl#o7-7{0N>W1HEqzcs~VJ`WS$lT)w+M3n0?{hbQJ` z9(oVuz+hL=a`n1Txl=nJepf%h`GMl#{8DWB#g1z~4?Ad~*gmy&pN$dd599(MC(m7! zskc9r`}So4z@>T`1Bm7FjWPMc|M0V5LeJH&O6|MZ^{JFgLUU~hwsaX_Ds>(PfU2bz z7wVtUEpHD=#}m(HHi?ej5&m^N|9ocIme1hbGWq?#F-+oirmm^i{z00L9+d{LHy0BE z%gMTEXP;MKw!Q3Xu{QDs`!1h@Lp&u4py&Qf(pBJUE*t%-)F-EmUZcl}-W`_33#T!b zUldPk@#-16PdQU%@Z+|$FPZSDdOCHf5XyoxNI+e=0}Q6o@e#QLHu?sz`EA>S%3o{1 zhf>G#Ao$lfxLcMH?43ifxAo{TX&5N{{m9pz6L?J^gg=lS3kCgCUu9ouvy>yVuf2xq zTzFn=6$_vQ%k;Y^q@llGnhqT*+RP$Ae<@TQX+Qd8&UR$k_jZD1{lN!wmTL)Jd-XQj zgigDdK^cPSHNl+BjAW!|a7OiO1-!5_-4vMHH^K}?TgB^bl#cE})6bbHvUe5_kh`0XUIfmhrI(1Ndq0>;>pHA=A^7xQ|@Y)6Vgv(M1kyCR zP-!a_mlR687m{UwzlW}zlOzAtudhp>D74R&zx;FYAz0K|B$U%+!u zuyMIbR|{*&jbDVi1g1N(iQ3g71d! za%ENL_z*D9`^@clXO&{5Cp$Y?+Q~Rh0H3nq8$Vl_?-=$uIX^E;SFcL@BS_?czei>M z>_=dm+>hiPYut1>r^VRkxjqr4E#4rlOeliPW6a4)*whp;zn4=W)o>REe39`m8f9_- z-p^}g#!VY(w9&lQ2F`ss0YFcgKzbgy842w^d?U!rIS(KglM+0>T)%?p;63^;*wT*k zyt}ER;gew4=e-_OqQJdCiNdeMKPUTqz5}sJPZUWmY53v@it_j52SufjD3eCD2`|2x zg(L%{htJJJwqEnSvyv#B`!KO3m8vrUdaheq0;?&$={*48>$l#yPc?q00E#{Z0R6uE z0H9wg%|zS!;BlEa^C7AP0YGm{)~-fhw2iF*(4W10OaAOTzoUo9JMHf2lJERqzm<1g zH5L*KPf$Fi0XD}0Bx+H(jP|x0K4m7YQxd3vF)|sFB;NaefISBLav5#SM)&x?P&g*z zGfPO4N}*y~lXR~!<=^9ORP}IM1)whmo+p4!|GVsuMh342*y{F4b(29eMR54g16|aXEFq1E!8?l z_RTuaMH5d^(i<+PU80Qtv_}X;;{BuSsoZ9xqA@(O@H25!3APmcT?adkx+B5x`9yv0 znIr^!pr;TMV1h$G*sVzhWEUnS@V;g&r4$=|XJ?BUU;F+#ZzovLWuNwRWw{QO(%b;K z?ljK@ZAMnO_V`m7R{gE)qXPJQw(T>|qP{Cy+7@vgR;qqz`njS@0mQ68CIvl{b}-}Q z6xzbGQ$yxH*i4lO?KJJ9<(ZhQLZ^NA-PaBK_l|)oW7kf0o4Lur`x39iIwGBdYm5@Z}dX%OiJg!an!}$@=hpgK&U4qBB0L z8&emxnGh0!{YqP_?Xly!$)=|Ij&deMY~Rt2>zj>Fha-24{a@^0;l%)+xdtRxSbh|J zZ|>YhqPwgeRJ4sNS5QrTPTC)RBC}ce)>R3CxMO+O1DgWPHzMiR4jN^gQBZZDyLX>C zmiqsk=bq_Em1n|BAVdTS-|gGiO+rQjwm?tMHaT+SG3fA2;MN#z8n)gtep`tHRqjTn zIepJ6!9p1J!{WlE@eR-yRg>BXd|pR@aY_ZvD`_Urh5r8rf2)}~&y9X@>d{QXp>K-9 zN;d{Hj|z#-q;&Q7QfFnm6egk2kHnY)lTAPQXzJn2|_W3B!I3K>vBZ z3u=9@jX-S#Y9mk^fzRy-Y!pDRC%g*fj*RpR3o$sdz*uKvwK5?ILT6bomhh}I z00IX2Hd4Y;+jUNhvCkLEUUV|+)6qf4E}gCF^w8s2K>9ft+%dDL0YOs&>FF%Ai!pM+ zyVgvd^;?wjyZm>T1(rs-LrS{4K{}<8ZcrNOT0o?`8%4T9y1PNT7wPWK!#UqLpTFSw z>3v=IGc&Ilv=B5YLX2VfriEn&?ui!_rNCm;@Ctch9o8b_UASo%Vul3;z)ESLQXwmv zYB;F3&6tpavj}$D&$lIjI9)cbxSH*52D23q&}xE$Yt`dk zt*J37Iz{0sLR?an{czVr3pT{(bIw;1>GY&4+| zCX*%O*Pm!wDd=751-K`f^J&-8aXb2Q%Use`GM|3Y`K+$(qWqMnKEFMFh64hPU39wu zxEH98)+o;f7-b#w^uHx@6--4U3KZI9AM#TD8%eQ%pN$BVA)DaBZugW* z?&`$#c~5*bT(yyH$5cKpFAP!kB!H&R?NZfTFmEhImxfirsk zQmqtGk!L8!BY&`nRwe%VCq@aWTr6VRE#&C~9RX(hH>A;3v#IMDe3$oA3fim?@o-Y3 z-i!AVTL11FVDZtLDjCQ|%{JfmlD|6`ao=XHh3FT0F$J`iHAfaE{{=nKby zsSQI_lg|FCDXOkaQxF#%e4Y28xR37*x8GP+jP zD##(mC!9o&W|%+RRFGO;X81pQZx|>I_vItp9-ccoE9#W zmLGbTS1cD$7Ih%EXUNG7!gocD|Gui~HhO5ijj92En*bSx>V`X#@v888Dt|&>m2=*Zey*YX6lNF0hxg{Z_L zb|w~@R-%xjn|l!7{K{j%jU5Z4F!o1ll+Bj?g41py)?3!kI&x;KgLviv%9*=FM9V8Ok3;mh!Vq>-uOKL(Fn zMAw^M-qetOQ{IvQYiH;LV!ww`McV{*pz~WE%;8)l_rr1%{<>#M&?0OtraZe60qRF} zba_7>fvaMg=RU?DDyAj^D7Y9xjyF@2H9h}>hrq`e>jyu2t=M^nu&ne4ha*)DQkM>H zscL%Ee} zxmVo)5_=_oT^DrT#zuL{9dJ_if9`mKzdvx<_N~o)OuiJvQW&Ie|M`?%-@OaNwT%ZK z9n&-Ajg3*?y|6G+2Dy1K1-O%j+CAwQj>$W0Uva~D%*Qc$ETaRes}TVYKOT;58DKX# zAr^XXi*oSUbb#d;0wDIrprie*xXY-9%I`KAOkWWIiCoZNw*piE*o0Ga6VIP2CfV`xxz@A)Xd8n>6AORfN#SD8MM)aX6rC;OIs>g=}`PcQ^yGj z{8eEq#(ykZqdz@?TQz|k0sfmZ)rQMu-@zhZzh$mur5I#3Z1wrt<@isu4gU~kvq~}j zF%rk$j9y6qpABNkWcDxe0QRaik={1Ul+qvO@$X|lh+zsJzn2He;hT39DkoI_N~I-O zNFd@uNOkb`Ho7L<;Mi^C@ar^3$Ywp&4jjtF^$?8!JX|4v>k1WAXU{;IRLAD+Lu(sZ zuDTA3DEnRq!t;UO>U;OfHH-3Dm3~B9=e5o##d#N7);fwQ&I9%1SLPz2$d7t0A3Qp^ z_d*QyR$yi@R+tcs*Iks4KB36;X2$Zy+4TI_> zY}ah!#Mk-h6E$4>6J1RWgsoml>+h~0RRY#RwG7$wjf&MAbpai96AnkGr;3^1x_NVj z;S@C=F>%t>k&;c@tD~jA#ZL^8OQx%i?gvxL5G>AzNb7jfXAGbA&q3^WXypq&VYD2j zdHKj$qRQY*!$3ZSQ)D=j_r~~Px}h^;NbN2}gqZb!yG z38?pmch1Zl0!v^0V$brY^AprZL|-15uSv_z(IT%^qK)2q5f3oAi=#SsZNNo>4AzED zR7axMTCYR}As(bHlR16va!hy}3y_M<7KOJ@gGnC!G7Dd%{r{CfRl$*`u9L2bdod4s zyjY74hQ!Go_m2sd^P4iaasw54G@GS{?($>@Ic{VXWw74J$bb)n6(MRJdP;N_kK<$h zqQeKhcy_%d&DdsVHa&=a^6#$>--#L7U^$?Pbx7eC&Ds8Ec6tF~izilTr%srw9sw|8 zaO1KZ5>jEKC%kh`6lMr<1of%BLuSd+rXUz4V#s~BSIdX8S;|O6sd){!+D<;_f zt=_O8Zr9?z6yU_nI)moSu`P~yLc~@p9)&W^dy{+L>qg3n*E|a&!d<#Ih$GTILo!fV zy(aLiJ&$9!XWB!j-_^SJd0sk%)xRaN=~QkS!uy-JW%dv%r#--{Md znqUD)A(tkx>mXHjwL|EnAykCL*cPakNx@^0LVuaauogLy0$-#8n#39)n0r&0cm73M zsv(|Af?S0F{2rYrR!WCs7ix&+`M|(~1O(L_lnVEg5%1pZ3t1HyuvR{%!$rHW$v<;B znc`b^h?dh_+P$fX6 zRQxkj+R*zFJ1xy1F>ASH>#mwoorGYW|mHX1ar)tUQE2L=NUq-Pq2gRwHezZm3ls#qWi%P*dS& z&B%a6F=*CCM`^l3E=1WI0ye@|vIUEi`L(Jb%qLMF>RQ`UtBt%o3Ds}&(?;VY4D5n5 zlvPh|ZC7KXH9njrW_LhY^QzEaV!;*md$$%fXxeXLj}yc&r^DHxH9>OfnW=NT-u;X7 zTN}xVew=C${9PGBDN)Qm&XUEY@m`)m4|{G!{!vif0N&1N`Z~}~I1on~=Br1mk`r&p zR{Y0RFYMPiPgVzhLBBbOX85-CirEI1U@_umuYJJ#D9eU?txu;wb$UIyl3LB1Dm31{ zgEGT1F*fw1=O9nqIg3{Rf}P0ce_>$beL;Wjif{Gi@9&a2J;L$d`Vvj7jOta&uTMT3 z7c3{aFc3w~gv)`yDCQCoJ`TA2LRS$^ej^=LjQO2$&5X(yO?;w{>+wt3^G!J8Xv(qv ziZ#(jPD-a#Y{M6a1PUg9lYO<{d3=NX|$KErV2)=8^o&SO4 zQil`~#7E0&6j#lwJh(;`oM2~a%thAjD8JNk74y41kMP!tYVA`~0LyWnvW#O4%W5ml zGKNr5#GDe{iGE7+4wQ>jwAnt(B>;cEC(FLG4WDypQ}Ml(qutd?MtrNcq-hb(c}LFY zBy~xr-3tDWj+;hl7kL=vspERckTO#&I@l5$=&NEwl&~iiX1IQuLnib#-oZr{ppZ9dG@MUj`_=sskNrny_!}8 zO6ud-&;cYY*x+@Vr1Q#q+5989qNV7-BAXGlkaAkjL=a<}EC=fQ9r0KGzP(Z7;E*0+ z)&;#syskeKVp;P+VrJo>;sv94QT}V){$>wSPlL>(7vweGAxyyOZs}9$0E;_O1jv@_ zorI{zv%A%i=t*V!^_LhsWwqYVNtR?WW|EH?NLe?JiB5&pe?6(Os6Ih%KLp=$EuN3G zbr9&8P4NYoD;C+>EL$#_>G`nW0e@LN{q@tY$n(JiUfq=`m?F&%012oZBdgQTTT;%M zl@xrK4Beq%w0TX)YUWQ@Y5sLdq=n0%0mpt?A`%UUsF zp=@hMOLqNF7diD7sWL_@wTOCA6y1Qs=Y(Wq)@X<;N22>BT##2SR>9cBIXJ$7q6GA5HAGl=W){7xi-(-YI5Q4YT(@iab0#7o6~rS%KXCY7jMkfyL! z*P93B#GwtAsjRXjj5ZVy<6YY99(tjPwsn$dm35Y2WoaVUVf%7avJBVMJ@%2TsYQaYUbI8xplW2ig3HioPz&anLRF2x z`^IRX;>$a*Ek1QBF@>+eDspBrBr<^hLnzi*mm3Pi6xG`HW3CB*V~9V^>x{!7rI`I0U(fM+zqCKf{m(3X-kN)RuHmd0+eBqA#V*vp^WC$cua) zYhdzKlqM8J7lEkAT|2z9r0u5okxwfr_Ix%|It`ZM6|O(R$iZ`${8tpRwgHF0IwKUU z#DiLsk`TCrQxf=vX(Sayl3+P1SHScY+(P?1%EqsF0pJ=p4#!{UE+T?tU=;6%vda}F zRevhq$JP^dxH*5rO8x7{)zo&zsQs|aA04k4Rph5 z2`Ic}PSmj`u;{0w_`ap0^2e+HzKcZfmtk>j%PskY0xnG)Tmn>UU1a=se+K^NF6uLb zXi*LpjZ0efn1ACm_5yqzodFys(0;IfW&zaPJr}A%g zr(yK2&M_#3)BwguhndqUJ^U<05_`Ur6E@SI54B9a9Mww24CfLazk|niF@raE6j@la z7Hi35r6mSV*0wFa8MknY=r&7jtkbQ+va+N}0lo)oGn;{cL@hY3IDP`lyO;dSG<1Ii z9BUVjPGj&VM9_OB3APIU<8lZf*WK?b9Q=;&WKoxl!q47Equ_`AV77yg`qHiC#Ozv( z^DdJ7PeWPXdP1?OojIm;10cEL#e2Ov_1kRkN4vyE#Jko0t^UpN_SXUrfuO02$sVbe zcT%{OgLJ$3*h54tV17+J)*QrKcIx8^p}YtVbp+<*lr9p{&RsBIE??J0iCa7f;JwsW z_eh^?*Rh69MG)33aLftMhxX<{Lh*Oh5XQTV4@oZrm zkL_pKPQRN)e1PK#cWOoH2TA{b8~lqcRvjcFJ~+2CBuZ=-xgO8$JJe+B8d|*)9M2dlDp6TD$3< zZ+A;(vrjr`i%ZxZ_A!Dh6`R>R>~@g^`W_sDO|496yc*m~C&IZ6d6u9AmxCxI&fq4y z!9%(WE!TiKIX~r)sC*eTAs=b-Mple9y``rUTj|zfVmFJvi zdjDiFmoV^nTdKw^sNXxTq;|^uYulFKw}Zc5Zh(c~Gh5``QpEil-KB;#^yyd#Y z2Jw3@YwajPCcE1)uz`g4x2|~pD&+vh4n?+SQ0EmACjC0`eB%#wzdpfbvk{n@i>ocyg5c-l;d$4ZC|zADMibE-CMD^ zUn74p9AbGc^}jE@7(Mq+_!z$2^Ww$syU9^R^rW5O%?FwVPilj*8*+YeWLGM11XsF| z!9166BH=$dY*~esC4%jij|ZCeDH9?;vjC)Gho#7e|};iMbR>sdAt|=FkUQ(2lvR>B6^KY3o9|o22^?iycg#zCz9r~sJVNe z+}toMO+_PDtyg+Y&DtX_KV&nh?%%0lWJy>6Y5&%Vk=q0^%lxa}pDujqY*e(;PAE>5 zivKk#9F9-2sJ`DpQR+(BLSvM3)wCfXNQv+NrbYBHCrNV$>8~EuLUOJAHz{Ks7UN&( zROJ-)<%%(M1Xvmt8FbCY@6`dgD^!yrae@xd13O2+p zzDirKmBND|_>*kvFJ5b?#V`?wqUMan-tXYZPfcXbEJacZisg5#;rlbxGDKafGz)$z z2hEC$jn@-S`V{>AllF7DwhEp&AMR9q_-KZ7Z~T*q=G7STDXS@>X%SKHEx`~>1G0Av zO6%F$O4V=vW|(Y3{`(Vm_NjY2v5g*QSI9H~YdgpLL~5O1|Bm!8ZM}I(Z`d-zNsr)P zizm`6Z=bcUdOZ%EKhmO{RGnKw@djAfzfuutN4eJp<@|#WxR?In#HT@0V}fk_2$R0j z_Y!}Sp|x&LjV`dmNyidX>F~l#a+@g}|A_N&sqSj;d3v0{!TyKBw@sY?WyT4q$wh7? z^O$FrZd>fM%*AQ31Gn(k^WR}Cq4{!I9EKLNj1|=ZU6^JB<((D273xi|h68i$GZD0X zG@!&z>;F>p|C5H^foQ;qRYsB>F#YOz^R@A+5ND|dG0}S#e!P=55zAV9Mg1;-E166l z4w6-&N|2z#2Eu=n-!|LjB<6onr~2}y5=R$si0CN|ax zw?lX0@QLB%eIUdE^8w?K2i4;iyZu&L+yw=ssdH%r2;5S?Cnlc*J{=?rf!@~q$wHEZ zE0*w1iH_MyO8qMe6y&F`m+Vp7fY4Emrf9^n=lzgG4k~g{C3C!#X@0B6e>bo)=F zIxq`tjVY@#kZF(#!99MeQMM{rVjJba3#*?|d<^K1@8y)#iJaa#M&Y8Vd(Uf6JyL-REAs zgUq}|qsdz)HnYd}^)_mgK>4*d-mr#11Sa}M7a8}RI-MUk$N&5;qmK^1h!5QzfIr+b z9X6Ozbk=}1L|7jzqxO>KhuIq+p+ukM`M;N(v5^5z( zOh6WZSAX|)o6cnX=`mItdH@3>!V#qn{rS7+Z>ZGyuM{cf$_lzzQ+fP!(w)XP2iM`O3 zn41$&;9;xPacA=2^&wW9lcYe$nG}@&kTV1VYi9V{0y$|vqbX*@+M*pcCjz=9n_{3^ zVj~WMgdV%}uzU_s)L=<%mO@a3{NthSAN(RJi~6+AOd!Px`rvg#P$IE$2VbzU7YOn} zNX8JGE+OBA{G|X*%#vMjFHqdM!CUhIfr-tv{rTXadFy)K2q^1CwEjC+QAuUcP3Tr7 z;N3*j_w9U7>uw5pnhIKp*V@&ZqpP#l@`?cEmg@owm=i?t)6;1GBaeu6w zv2IFG%q&&VU#?$|MMq#S5I{24MQO(wv!~nX!`IKI4K>={>FIsMM}q*Kow%#XM)%4) zfiih`N)1Pf*i5MFlIF0fa(r+B2ctda_eALPLUai!*g2t17!@Xlaz*~YIE;%R=sCgL z1rzHO2)13M#-VU5(N9Y=!Hp7V#eW=Q87_hW*|MhR`>f&zwiDGNld=zSCnr2vQ?G}% zju9!UW^S3C5Ak#w6Q;}+F#p#BGjrir3-=YV+7uF%57^!RsVk9BB$($#a2n^~gLIk( z>8C_F7@YPQe=kTS4D?gfAEditeg}~edoBqeb!v@ci)e*t!w-ziyH#66iD=z~;xGT+ zYL*(%+4t?t_2R@z;bCNqgDmU;t+O(4{Z&}8_Rp9oO?v3T)6|yzQK$Jozh<~xH^Ug? z*gCIjWzi*qMX2R^3x81ah*Cynk#0DIO6J*_II+H@AF1i0ho+7mt7l68`YXrxSy z&W4BXAyXI}rZ0_~0*R(99pH@CBkP>aE@5=@M?Q&HM}H*5+DI%Aa4oqcJ3}t-n-`H4 z<4bBM75L5C-$qKK!fM4B_<-D%nVy*I#{`+$)_TW{zK zczq%Wn8O|!Mg8}p(S{l~I!12@`#7|;I7|HO9bulX1s|O*z-(lb1AWoZgeF^JSI+x8 z58uF$jmv?~xroJRH<`nGs2RshW(H0b5%qF7vjVuOw!T|2(|z<|MZ3I18)IFL{jk{B(i!SjA6r z&GQz`Y;&%MW%bWjR_Nue9N@Q+0`GVje)ZH3JHdaVfKFnhS*k+O*rsB+#pl7EDH{mf z#a;IqOPJD1Qg82v6K2e5p{LfFMTVfubu%h_r5Zl${y$!8TGf-6ge`&`Ig~V$-$SDS zd)o12J~Ehe(5Ru^bZR~IqPOd{If#4s@KvSHl;g4|C4X~hw|6=7T4~hxDd1zPpYA>p z+ixsIWV??^H>R3ua}Di&NH9sCiG-{)81b7Iwhw<+56aNe+YyX{dTzk;RdzcN*cp_6 z@6SbERW_vFAu?h##eb^!{m-H1rR*N(2=HLl*7&-VYg9PhcdaVCCSCZMKQ4)XpH;2u zSh|Ck_*llSV+oQ-1Qam?kEx&jVUrph_+ixjmLrnf9rYVo#Dm!(aAD+_g4&UguX*6d zI8BO)BsLJRh<{l&U`k3offJl}uwAi$osSHII2Ee|34k>tqsJv|j$OZ^JrljS(Yl5R zxin(z>sPgy--hxgrr1tey=uiL&DC?FZEe!$tDsrzP<5t`r=u&n@Y;X-1PVqx_W1*EInCpt{#cE%p;5pN{uyRgLgXj$ack`e*_0(iKu+EYS8xd4TF z2{vXk-K4YqB%Y?oGns>kNxR?ncfMC#lgmZesrN%kEJAlB>p8I{CvGw)(HC~~n*aSk zr3yEv?XM_`!d#z^d89MOF~aoy{l#!tZNXO~pBwT0qd^gs^F-}6(i*6}cSD|9SVz^` znJ!-gA5?)C@Fj$mX!Hh+M*J9w8pogstzJeJ1!~^%P-g7RzgtsDbo z`sXoOk;`IU+4(ziXC;Tif}?Xc;qC2TR!`6YPO@I_e8b537@|m@0gT_Qu3VSIc9sI2 zQXfR#q-&tb)?uZ~;>HwrZ779?7AHjz0b#h_azh$GSepYXjVbKfG8l|uj_bR+Z|v+| zfB0megeknNl^cf=s<>42#erR{h7BXxh;5deg0iICL{q|{jfL6R;pagHXue_HFuQ(DwC!*K7dbvxw7@5f!0G|y>qd) zP|@-BZ(fW7IYFY4@AavY8 zXz~+z6KU?rELInQ1e<%Iv*)*>Z#bjGL;u$XHT*E#@<=x4?bf=ZWx8w*v5Y7H7xjCH zTYyxF)v}1$CD!1?f$8`G&U}c~_Px=A@Udl=4dTONM#qJwO{H@m=_7Do^ew|e(~J|p zudw^u4(4Y=xB!&?BAR-F7lk&z^riYUD#a0i<*ZYb4SOku$a-HFx`W6&nne zC>tTde9bQlvYLx*IKy0d}=BTybX`?Iu&fvt$Fo6SP2^@pCi1 ztMW6ET5XPRL2v0ZFWNi}g~*s+_Acx3ZwxOM-MZd)3>CtgMF-H)!n8cLRCt!2GgV(Qw(AAwuB08&l+|K|f8c_PEmSqL2shaeqklo&V()BiP>>1VnX+(|$)XaMQ05z0p@CFx#g{UlG-ov)J_}kOW6ij|E#Bg zV9ss8fn_;|5=~=Hb!<2D?&>|!B%A9sPc%w@T#%9+tz=h|zMo{5FwUbRNMAR%Qqya{ zkvri)CwD|1s`(t8xXkX92qR3=hcYu*riII+?6fE%_&!{eQbsn7DKc+72A|SwyeW4j zA96Ez9Oz2M(@WGQ{~fcVbC_a1>Cpq?oKR^|5^y9Ie_l5pU|Tu6B* ztf*8b)c>7AAZ}i~c>Mcf#T0L@)heoE(2)7tz^-&bqpOtGPduJ!FAzs*$JipMf=t0` z%0rJ^NBvrNgrg?VmDpToynfe&jyAUJOgG^pfs;h>gvRFVovq|oysDNYUs`Ckn^^Mb zo`7w~hbM#xT=L{Q<%h^D4V zw0d92@6p4%tcXHhGm&C&9{%ETRf>FEZT~#Y<`cpx+y1*F$#354^tV3IX=j6pVSz(- zd_ti^s^s$(Z_G&iD#`gK0fB6;p{8bZ`MJz_h zF{S>~k?1Qb=yT)=rAs+vT}#WWFz*woEi#Tat&hFRt}b`5t+5bdwx~E0m%yUGfO}Rr zn=YGzV0v*z3pg_G-Nv?FU?C`mRV+zAfKcQUTsE*G_*UAE9G zNAOoQxW%zwpV-{~#mtWdQzJi$G*=RrA%drP*JIRQ>QSOV|DB266{7j}U{?QC%pD3~%0}Vn zOyK`XJW+z6JUXO(Mjk})t&G_Pxjxw(i|HnHp2@*3{1y@*f@=-7~0}+>+{Vtsh1@{crabBcaGLvE;xhC0Iq@ub}m~B%(j`JVq&c2 zLwl>bo~J#GJM(YnHY!C16H1RyH*4YPXF0pu)BW<$EWPD7#00cwh4+5vah3#N=AvM4 zL2PC8-Z;F8-84y>y3;OKkT+nWsqOi8Yb9QBR0o34`? z@ph5e0gqgp5gJ3D#l-mMldv4VNb8p_iYc1|ZHueulT8{hV=J1=>m{owf!B511Wy+x z?U`VyRsU5S@%Ew9*QjqoFHCQ}FvA$?m9KDElH~BEUr(D28liw~ekkuT05RE?wzCo` zR~3Yt8=CIxNd^{~bbEgmMB!Cf+olF+Gs)=y-`rbu#OGyjxHGz&{%5 zT!|mWRlWlPrJ$eq>P4VEi#Z5@4?GOW*$t=UF%P*txuqYsT zYtBC{k0Be=J$b6G302##%!;k=8OR3$os$+8LcgzD+X|ZMrpj6(&~)Zwr8B2W6JEA--@A=G ze7r1q@h{|bIGQx*hsDd)e$3W`E4a7It=$0zU<<>@y!C80e|HO~{47+1Ij}Hl00xdlzSXa2EPm?UU5ot# zO&fpkDe-dHXpj>VbSvuNW(7P}Zkb~xO7%_)|J-sss%r}(3-@Hqed)yvLb2Db_#S5+ zTsu+qA_FWllM+RKRzY9`NuU-^gtoIrB#AJ{Q5&eH0-!3S*>u!&#(tbww&EMIS0|R~ zY+(qBe3J}lO9TlYQynE}2jv-f_Fno5&glWA(&c`Sz~8rjcCD^eSeS`+)Igwv<)!(~ zt8E&t%8yR4ANVxE9n|eMt$1s5T9*U2KO6X8y=!$kjt}kI&y&l#@n<*wJlWp3j^7uo zBAR2tl9G>?duP*TS2LIGcHG|tn*YPBQ}-suZw_FLygsqMMyO@X&b_8acUl6kP%hs= zKXy@|b*@UM?p~smYROnIbpt$N*FTyFg*@a0ZbH^G5X7QkRdy7zrhOYx5G0QRAXlME zDpQIOe)z+8o0KWmqe$Mxm_Nu>d|j7{w3-O|723Yp)np*zGzu~Qy0&iYhFZ9;QY6&( zAL0eL#E)lkmUIHFm@D!Iwsy(B1ck9%_nE`{US{&wCm~P7Q7|3QyX9gof13Md$lJd? zY@(uxRb-jb_R&}<%-=dEp)KcDX>BvOV3fW15vxvRwT0-{P`_gPW+QvF+`q=D6ZWuU zf(1E^Ig3CpGe+VznLiyw6C;H%&TK0Om~vh2qyN(Mb`c70slimk+hRReT+e(fsH1!C zHX7jPp2dpan+sgc-6Jik53$vSvz?FhSRTa$JOS$E+JX)+)qrPUdKI zn%kQow?Z}fcz)6vOg*SxC<29z!o@y|^FIxK(p91uM+b0~Li*_9?p!Xzf9D3}rw7$c zAsF>lgv1dz1jHffSZN})Gu|n(-w*h`RvQgVz@BGw#?D**BF6n7uXsbU?wgHnYTmpg zkMUH@>gl5%hB-c@*4@<3gzL*BTg-W1`~DKs@mt;SJ!>;PBOe^G4L=jw&_tr5kyYxq%6BD}Iu}1F!CCa5JO$ z6=8=+f9R0XHN{R@otFalfOVc--!ECOObFo-61#kF2>ZDWRcb5|)Gtr_XT8yX#FCA% zsT`k&AN#9icGsjA2nWrTXyPn-_i&7P1hU?96{NKpC^F@;iS0q`OPuB4qS1MYg56Bk zzsu8zuQ0*M{d8dk)X&lK(Jh9^@v#-hV&W+L?R4Vr@~`bdc*zS=3%Fvcl>M0(Kb(y% zJFx{4cs7MBy<3s^m&%yho*Fb~+Zym%_uDeL+LUnf+bZBovx!E@2kVSTrgYL$B%pFo zdbn_95W^kQthAV-dM$aEF#+JiD_#sPx@=tB8fe_$sQ^j5)hy)2)rU=Q;bU+hd%r>*x{zF z>P64hc1vytYVbhe+)K?l%dWsaHnRw5iM2Tg9@RM*3anGIwJ>ZwS7lpXGQH%m^FCCH z$fHOmo5dOZ7%^19RXv3t_d}OUfjSIuaGpsUi#G1w&(q$3sX8ep(=@JVm2*W_T}u^3 zMF|j*&KxN*5i&9UF@XwG*ls1y8YtRoApO|BNTEwJ@LbpMC+D_sHD&3%lo!N8eOp%v z$hAx;otNHT38v)xvU-PbuTXvTkK!4?rm29cvR=zzFmH> z8~ds^UJP8Yg5J1EdjpQnZMkP;^6fR@WL)FV03P<(fvw5x*h?1vnKjvDR; zd!8oD_$FS%gcH^_bFtSIsABoF!;>m9`~n|sUJvS7Gv}z?aO)tHW+0^Nac*u+QP;a( zK`*k?^+ZLFX#u@|=g-!xJn#zd@yU%X=GbaldXPmh=3<7_$nPCfwfVC$!4FqMx+N#` zJYK-TpJUB|jfvzr1i0Uo8WSUk*+yTTA)8FJ$YG1NSMd0>$%X|TF_@z(VZtg>Gn;I071eHA@F+<~7EhY*5TT#4*Ntg>! zf&$GJ2xVRvLT8~u7lS5HcuQNVME{#7@@F8lp>1j@>9KvXTs!uI_vYrU`R&A0D^p9X zDrh-yh#LH~kamakn-Us2VY$^0FBh|x*!5oXou%|?Zd+ZQ$R)h6Mi)I}&;3DqClC1$ zv~i|_!E*WeqT}Ah^VtA^AwQ@dbChiKxRXFrU$XXv7UQFYaf@MQ3aQZ(|2g1^46fFa zI>7id3d3uXZh;>Wfa5zeT4QQkMCXnb{}DR%1&*oNggYL1;<6c`D{`b-Yuy`w6f;KS zV{mgrfcmZF@Eu$2)f5f*9%+)cQ2{n_bBr=p%c?B)D&*tf6BAp#I#e?5-38sB*V$jJ zATPV}6D>)LL=Q4yqE{-4{1va0nzVOjheRe=5Wz96$_F;k?8r;&vlzP*YFdx*5zGgu zh6B#lCIO=FeY|k8m%k7l#gE;KOWrU2wHTgUgZN{6_86n-B)UWWKzR23yt3qv z3m+IfG~NkSN{)Y21WD7+Y!c2p4PR|3VWa%2Y$w62ckzF82>g6!P*6UD&c@ZHgadEG zY152&9xt(eIE2*inp{gkepFg^uc&c&T)P%_b^0MU>(uJtd01yG6)dNpx~|OqgN=nu>yY6tIHyjCV>k+569Gj)b z4wfb7+z0wX*_`9Q0q0-H)B_e)t11c1W>Nz|f3AH*-XJV^&AC)HYHOIlau@XEVWdoL2Ch^_xrfOTMW$kE27}>bIwt^3Mce|w_6?+XO zL{t8~zdx@zw9@D4J;T_DDyp=n;Xt`0k z7{~r-glLpnNqoDV9TLa&@~*@)N|Mz!HV6@;%hE<_YN9AI619sKc|=`Bn69mequ%iX zd{qj+rzx&$cbZ&<;gxj$i9*hqxhd3-J#g3NHrY!%E|~1P!)0(1M}y2~XVG=2$y24E zv-_M~!vZX$Ss%~y?Ng*M;lM1N_NbM)gPY%v(`H(Ytpy7_>_|iHl=zo`qlOSaS@;po zwT{T}X`)+R!7ld&kLSobII&Z^I;`qOpPOgi-Ui=JYO0LmlB*m|IU&0;Ye93~mEV<`^iW0 z48@Ij%D$kOWK+m4=dMLy=>bY0Gf)6dwv zMKl`3VHP*OC)+}s2a#Po11cj%zOQgDdwC(ZvbSqySe2VDIYvBYMhkjeA{KX}i3@!t zOI$gg6N?ScWfQEOF@vHsseeDNs(FdEU%vGfUPj5=>Hg<+6d|+T|0kgzvSR|Nr=ikr zvgo(wi;iLu>w>c;jTS@BN~fY_ zrEWd*x3LZX=yC_@`C`V;C2$6z*gqCD&SddJJFI( zJ#*0*?sb(kjW?PyS@hS3(0qbvo&X#Lz|Yby0}QQ-ezBG&vKyAzRR$tyD6z2@(LA_^ z3!$?NF*xTf%Kz3qb9GLT*2$dL*)F>KuQK@OSKvP3;I-E$Jl}5`So0Nx^$M#ZV@zZ7 zeiU7WIdKo@5kT?z?To2ZL;XmL@c<~10J4V)`(Mdm^hz*5k*l7bt6sZHAJf{@I4!`M zRlmX&q0<~Ov()U_(4zipprmfu6~MoG6c^XU)eBRs4~$4FaMoP&IVb_QjTsW+$98!2 zmwhSRh8lHpL4z8b8K{{^r>PrvA`t0rNTI*0}yt@@Zd0Rp&o&W6bVkmC<>11YOVgebV$YezuAqemU6QIkH z#U+A#^V<>j{i6WU$75DCtVS@#H8%JqHGILo$%f`LAo{OsFFxHKOgIrWl;u8}R`rv)(clj%qrSx43e|Ovyst+K|93;<-3-^*6K8W%2@5(Zsg|_Ye z(%g&Z1)$ktk_DNgI^Y^8ZfuD>Qf2ma*d7RX(gZ@K!sNL`k-SJlkPvgJ3Kct z1l>Da6+bS0s*I=by=?cr^J*w)nC~#^HVRVR%$4Ht2%@LnN#=XT3MjNyNP5C=bv`{x zLEBBxZAqL&(f$!cOMo|R9lI!)mfw^%B;@J%SpeKIW3TZ&O`?^}0NCxv%qAt&ttD7m zwgKZ$JU5L|X=O7qkTM>%S;?F$-t+was*OV(m>_x*Vlnne7I~+H0Q#SY-o^L~L6H>p zcV_yI0Y`Fd8Kbd_9*^JFHr$&U+hL4>2?|UkD+T(sw^wSOiQ{D3XPmFIdl0t2rN=S$ zGChHKDD3oLdm~~4mFahdj!PYdpjEqVJvn|2_EkEEdHS;mpkD!aegzbii~>MDuQz=xw43cZqh2>n2;%)eh5Mse+>P(p(QCsp^44q8cmGl8YFw4X z&_(-Ui_W`Iaj)mgzbF@P-;_@-u!3uyVFnKbn!q}LpX}RvP)6Nb6(Di&a#ad0G# zJD9J{Huwh6J}@lv_~!9Fsls=xg64gW>X8#;i-;xn;2TnBk~Bs~G2VFhsd(^Q?cIAo z9>u){h(ET=wyWDzGNoln%ZW)zra5yvEhrQ|IO7 zm*1CgBq96vZj%EbXo>-dA)3jRvMM z0A?@)U@$Wn0JBgt+!v7|DaoctOE&3nNRF@>3M(v!MLTH9lFblBnq-LLVso7t&I$|$ zXkf4djji{+t83q@UhP%>zngX6%a{GuTDlwHI}z_?zI>VY-n^N4^PY45^B)g7C!mLM zZau8+zRX*-#Lf-|#|QEGAj|cTHx>c(x9Tbu>n-*`u?LDhQ0#%f(>*Y$NOO#RGt+Xe ztg)gK`G``Si`BzVYP>PTvqHco0jtD%WO;d2Z4oQI9MC?po5?3Bv#TBWIn{B2lixGC zr?Ssq)p3 zj5dJ)@|QDRpL9wM?0|sJVSzzl_~cwj^BOkdWAsHa-%P`3(7xQ?8)c>EoG8N^UAz%< zvkd0B&%ne48JA%^?o#HWWMZ^|UGir2Cm97|<<$wci6N!Xl4;(hSY(S69=082=s zPuG~{F)E=5dq4{Ye4dpsLq@c$&G_vV-u0HXS&Hv^>tFA28$Iv!*85>R4!fi?PU@A5 z;a$V-EtAUCQLA6Rm{R}ukH2RFgX6Y+TdO_vU@D;T&Aw(E6^OD~Or<*oFus-I`;q?3 z=be>LTj#|V3Q(9bD=QSRRsf*m{R;yM9+JaK@6aRr1BY)ubr$!z^*!LnWt^jPV-xoF z@BN7#xnqY|B=e{5>Qx4U#fBO?`s0t@k`o#oT7RnKLK++Z>;pjk(!3a$p8HM;fPO_8 z9|oWPn#~=&PmH1s>O(ogG*1scWaLV9%!lg+=zxQX`7VxmK7P*V_X9i;1=Ys|z*-ug zwB}gx+Os;cFLNN; zLz->c(~^S?dV2bTOZgqGC)4kR`3f6)M{Hy#-?IJ39?JUeic1Hck53E8yggHKiS0=c z{Zj(bA5LuF$O^i}$S^6#SFKU{Z~d+VR=zxzQsnqsuUK4qOzpAz)tA|WWk$aDJ*yNO zSp9)J6J;#v{Dz)0X_C*Q?agm1BZhBp%Aqzb2Jq__PTRI0`w=D%seh*V)m+== zf_TGvDye~2R~BJo5Y`6yt1q@ zdrmCWaRFxM;!{>B7R9>mZh`5$1*X4|VU8e%Io)%fHQocK>jl^JU`>WPHiW4ti@u2q>0aCE10A!z*?F~RP0sHw1?*%eg@Lp(8mIDOvJntiz_2&il zpuHaOQCU&r?mPAm3-5#Z$x&On{I0beQ4nhAJ{!}RQ+wb*PKL-r*y!_NpQn9MM)hg2 zgwD-PS)1&NvCv#69`6mGPTKVqfvBdZ#k43Oe7!)92w;4IxjF<;EM3dW5I=l+;n%bKbZ5pKkD?Uwcb`T258X z3h1T)i~4$t)$wT%pq}8U{De$COH%^V1E`;zbhgxT!1VgW0Mx78sJ!uKe<6TthsBn% zzXLdKMbGT~*pM}RBx#q7mba1L8wJpxICa7P_&@wsUQPJ#f9=1pj~%-^uYHRo- z>yqm|JH|+eNWy*>K%pZ;02UWzTP1r)s-K|Hx?rKlb|3a(_%hIG#uN;P6cXg=k59LR zJroc<^Wny(?nL$=d^CXQ@y~?M%Ll;X*MWf?K^MgD!>bg4ccu)rFxC$bO}lq=7<^9| z(|VUr>K(;gxmCdOjrJpDBD~W8dowS9HMnkV?hyQ|_oCRd$&R#{0CUPFu$Fq!aT39` zu2KbDkMug<7xR7k7XJj|f$0GI@i9Vtgx*cxqI+laSESUZ;9G)l5g6~$Md+htqAc!F=4G4Nr@hMj06-idID+2_a;z{h*6j$OUtTP+#dr`%fj^gL z1>&Sw)r!R`)9XR*1k-%sTUnL9%=|6@$OD`YK=aYvu|dGr?>_QfqUVN*w4(dx`f$WI^*_d43c8nNCU-$X~uZn)qwx@_CyZ=(UzdH`nIM`-&_u z;rB;h?@2uedY;riva9hQSa8^-$@+{c{!uL1re=p?fGI>5YabLgenf^Fv&5K~^! zY{!p3W7m4GIA0Oj+jsBY>vUYUEzHl`CqMa^?by+y=QY)~<=c{NiN4F24oKM(`>{W^ z6bG7Duy7`F1AotMHECJ4_80&A@b!SZCv`uC=IqVWn^>^)!L?N;HNs46E7F;}z1LT>JXeJgx1!G%2o27>5ATU_9}xRzXy%0s__; z(Zc0o*dri-paulRm5DV5)O?KUFe+^L!Vuec?W8l5!4h*T z1S3CL8@M(As1WWcvIRtyH=M;$R(j9E;f=4G_1xyu7e4sLM-+RY4J3^KOXZc5R^Lo;=v|4; z6Ym3DU$Vyg#B3T7&u-W%_C3;s;~0Z&PK0S`gZ(h(k7=HZaUUI|QQ!g3#zbEOT1Uq# z?>%qz3JlE!pii>Te=fyYIQr@fR@PLX!ag5qy8Af^gWzb~^(%8zz!PO_Z2z1K&Mn%5 zWYSCGait1hE(~P2qznre|NL3&*uKx2ltMa_0LZxb&Kr)^x^wq|tZd-Ej4?T$2QHnl zJx@GkZHEr~%^O-ehU>T9wX&gJcaN5ewcN{cNwv)=bAiIEZ3(742YwWAHVu$Ie(s#{ zX;X#+0x7(VpLo?)l?kcoL0G_U6tBB_M>P60;A?;Y`RX^kTd)am-=PB|I0kSKco06i zJoiMtKzj5t&(!17lZTmlO4K)Vb1{47nQzKjTrEJr1G@JY1uB+qT2&#ZYg~Hxf}C2- zdS*%-a0UQ9-t?nKKO()HdoR#wX>U4t|4;weY6ZS+>E531Z}&`|e&u;P^kY9^^=X0= z=ob&9rvRrr$7-xxdce}9x6_u%#@=)9TUke&)gQYz<39e6D(M)@b7c-}=5;D>2g#SE z>93!C-+txS|I!zkafw~%=YQslw!d`L<^^O2M9=4Dv(n!PrWXUZfb@Xrt2M^12wXEL za77qoo&Zh@IF$_)5I%Wd4!{XO%E**hE9aHk9lw)x*q@7yK40+s z(o&h)9FS(@lQm#rVNB0_=J!LA%{~B_CxRaYuxS*#WHuqI3xp4Ia|;5&1+0qLnj9!a z&zxhM6nH)=<5OcPbBXBx{&&88;`dLtoSCW77*sCOl3;xDAbB5vR4yAW0KzgR4U$pRqZ@zRUJE& zK3-V?^t_dY-ix`)T2!D7%=7^2mu9AvWvJX@%2-j}5CH09)m8S&AN{GAS9=spn4J}q zcj>s1iL=~l4(!cU^}7Dw2!MWSddhzL|NKAnz8%h4_s{?RAGWVN`B={ViaUIGdmyY! zZsaVzkHPD6l(ktPdJm2avyU^UL2p18LhxC^hK!!IS=md`odD58AXKmSef=89+?|&| z^kntIuLRU^Q~-Z$?F4xu{0G3B_i<+zgh|=QJnZ(v3Z8{YmvUgI_WBVFrQ>704xqac zQYzQ5&=-D#>(`}C$S39J`~L4KW!0Hd@Kve&Htn*-=OWSa$K|s`$3dSZxEdcGtkzz< z4+4J?`UdV8vg8uP4y(KG6G(Olq)iQ?^`)dPU3~)WGxxcnK7q}tvrr&#Y7Jx>2(tMC z-UJZkgYIV(@K;;6M%*DM0QV@qJ^Hhwlk>x>x_jqtOx&vQQ7!s85i*PW)cAO_{`fn zf;j{vT&tRUZ{Lw5dGTYy#pjhRZF0))5Nr9|`!8_fnTpM_y~KLH^ow@#%4Iuw@?E?8 z?vL2v!$&m-oUvD5`+=T;3H4XG4Gj;tpz#t)A^F{t8LBCqF_(K7pD5>9XyD0K zvCw<$IpD+q06+jqL_t&lIb$^Ul(#4Hd^z%;wVpvo3fn`nbeP7L9nRLpyN2uSS>>}G z;|VqJvo4PhTAAJfEz+I5%ne+($3T7t4;WqR(r54bWHWN%?S z@?&PWBJOGIF^*+k^J&HngyE=4`jE@Iu4P3<=6g6?9_yv04a)X6E*s3ZoFD$kk$V(? zaa{rGb@sr6582hLm+hq=Ja2pV9pUCds1VeY!Z5>dVp$}a3ow$alP0B`St)d9PBQ9d>{vS65hf7o{W|iU`fFB z5MUoXZ`jak>ne1Q@~%p~hoi^e>faZJ8*NM({E*s}t9I_4SM22JUgs13;^#kZBeBf( z$<5L;s5{86si4$t0bt+HRr8r=bNuZh{+$)Z6AfHHqdE7AZQGul2jtV*0)QptNo z*0Xu|$Y;Omm7X)Sp7-&#d!^$l8OQ(~nRBmE|ik*=c9*Ubi!Z>FLg zI*o!?Z}xc?+`tde0davwuJn&P<7$f-tJ|Az92;-e>C~-Uw5pW=Xi1$IkN>~FdeK$? z(U0u2y?atYl22dgcK_|{Y7z^55>Vte-sG?GskjXY)CypWK5VK_WdXgJ&6yPw_nFH9 z$bxq4>MqP+b2HmotShw#!ecA|`YX?imHPctwtshL>W(>nojiBlx*j@a+wMCc$BQOG zsne(&M{n%!rKOlnjtNMec=s;I@q1Q4u4-kU@yyH{t0Udf*#PvdpZToC*4RlgZUUT` zpI;PUZfVm&^(CiYv-<7ZtfnU!^f3C$aVziET;$-vl&1T63V>TbR|5b)JvA%`Y-V;x zO|RtaoOS`P6c}Y1#Gw>F^Qu*^#B&1ZN1lG#s>IA*w>R0g`JsLrdqY94kAKc$wYjeu zx(KW*=y2R@4NYP`Tw?^Jeax=`N2BMUpK%}52xx%J&BLl(IAc}c^CxV1IBq-c$j-8Q z{k+(^1hnqB`yM<0w_mfoLG*Hn4qQBAyFd4&wI5D0y}L%Q<7;7P$i`kcZcX>xul`N~ zOO*G^7GrG!>jZi?dO6phIcpS1zao~ek?(xl>U7RE+XDbQO-Wp@$3AT_vGJypUa`*; z+(G~-;#s>oHBZeKKnqhSjG@gf+oex6s*S<3O%^pA?qSInNWZW^3iV)o8|*(Tg)NnF zsI;`nu3hUFv;6bYU#jfUM?b4H;;)K9)tlE-JxV~p!d%-$B_qbJdBz4Yo`?9U8waW!B#A0IWT+3A9vt1Pu82wxS=>_|Z z|L|<4Y7*ObDDduI{SW`pR;8OyUcF+Iy;s#gw}zFTMlCC&&fN5bYz|_k7g)AZ4AvEG z0=w6=SX1|2frM)kAoD_5(TfE=eL0W}f)5R4R(cq31G2&01_@0$%{H$ndwu(mC9|f+-B>?EHLeE!uy)BLpD=_R0i&ZP| zNNn;kWuB)y7bcUZZCnl@WD0-mQWzxzA?mz_O%I%l(EFj<$v&FIrl5>@Zs)(ur9gLGacv$ z9JHW0eXHj7fgOgRFu=~dg?JAPBOLv0#C<6?G8%wZPxb=9yRo^)ZT5Z;e&7oj7g&~U`2f{@x%n=AP&lAg&Xqny z$b>tlc@@_)0Kl61c6TCEu%FKsYAXoWN0tB&EDbUk^s467b!9LB;E5lBcQE$=nd=bm zPYGuwV7m_hCMzBKP$6>mEyZ3ey`f7eM=KO_CEy2ClckO*E zDOjI&HhBT%x$iSciEOy|lkq(UOV)!=CZf4;S!)~*`r+t7qfiwivT>S30 z6!^cxwsp7K?CDp+MHIYVckiQCx#uo>;e}`AXN?;GXF&5;SkPquCx)J;~_gnuhYa4)8u2=Xu zz)ry2nmKVrB@FB}?s^y8aTyNa{$czlpbEge1I>r#_@&ZAt1rKA9iRPTqJ+hXQ5$*b zIqUrLR}$OSyTZ6LHO2frAQt2ui4WcfdPU2{zBWG}faY2Ef*+oD3c4LjK=kX8($Z$T zaN)9SFweRBhpYxCPrl#_iTAvH}7C4#t zL^5ERcH;NfM@;k4hVl%Poh%@{3y23PH=MPGF$SjZt@gV{&!_nNgWm&;FJuV?H1DxH zoK*mtCrA?8X6nPkm^rKYD03Q*f8l-aFfg)*X39!*JNDK)z3sNJ9M~zVR)=il;_LSE zYiC?jf9MPMTfF8zTPaCzmnqkK{phx#O*t(eG)RCGEdNUidLQgNCp^@R_T^2fa0?5G z1_OA%4p<__seGjfpwG9biu)CNpx6V&9w_!eu?IG>2Tr~Bf-4P>Cm`r3kQ;~nj8aT{ zCPmnx8^lOIDnP`XfT#dQQC4Tf$TczE=L|zkXtqi)tOBIR35}wSFpMx<3P^dJ3GD;Q??|U2Tj|n`xL>f~Eb#0~GEsB!p zZdb~_TP2Olr>uN62{xG&DE*t?dDAuL(TDG{&h}*6=9go3{Bi&~JFv6OY6OtHmC`>l zB>;V3*xl7F<}C$p-71-wp0!KYF<_f@wA5L5TfkOztJ+hnH~$`pj-@aC{vTP%*syKu zOy2wXl=jwpmu=TmUlLn#0OBqah`uaFpsYTzmBe~JWfi*5!a})CPt?0~_sn;3=rE7k z$h$Y6Hlzj6%keV!-LF~cv4^a6TSrE4U<#;S^L2prVIM23zNDEiFRyk^bk;o+UAnfF zFAWLGn`9Fk{N6Wgb?+f-*}ppl9D%bHmK)C~jpGhhaOVD9JpzyA5ROGpL&u;^jZNJt z`rUHh`&QGQ%!D&}5+?j*YdChFD>;7ovdz5rp0z)^KKA)&^Kd=@6rn%K{#4)Cr8#L5 zfI2-j;(*(9F5r{q=31MXJr^w|=kMvO1J?VUS8eyvk7_QTd7d>c5d2{8CA;eC`Axk4wyn19vFe@!Dcc>8UO}hKDFM_t zHu}qF#eSy1*!w?`vhT zSS{z3#lZ!UYEJKiVmp-8$p=J4k3|Qb5F%qZ(2M%Zy6Z%UpJ+I6(Nj7cR*;`s#twWgzIy<|psi{@ZD&UN9m6qO->nhUMz=^kP z@HO2_M}lX--vfYn;CcHW0`oPIkcKzA!+J22YnPja0n!vY{*7~{6X4)mO z9lf(A*67$h6NCl=iV&;|m^z=a!WTw>{D1X7|FwPVx!hpP`|dkv|KeAF+8w&Az`XHm z0@7c(60p)M13+z~bk3UO^X=={>gCGvvdxM?5imV0q3rd{B{C}~2p9)8cx_Ngs_O=@AGLUu~XGg@`6YHdZ^=_|k^ zg#*2oQSpi_#5eW{8?(2U~Opj~K3EIWBva(f+m23>)wzycXcIaKY7Tm%6002GX zEn_4?I~ijUzaQ&3pr`cC<=W;7PGJ9h1e+|j9c-9QYhYS}JLXhRt%~y zrstUkgtWBAD8IaB&n*{-9zZ?ISeAEvwCxXpZ}S?`a)pG&(@%O?zz+cr~mGsWZNaL|CV))$zH(wx+ovK z9*F9Zn{fu438Lpc(kJjddKS#?UPl-mzU+Jm%y;oQgfob84%o3bgH=4-AO5_;U~?Bh zr?y}(2jJ~9e0c!#dYNtkX+bQ*80s07eOr7$E6nh1vK`~cS&w+XP&g5i8tYUtbWQ zKz+ga0CWSy%y|}Km**M*o(IetX7Tr=S= zJ)N<6ebJqa!oAmuC~iQ8StsP3V5;5^#>dOtSS|ef}BSe%Aw5H`8bHy#Y`$TbbGZ zn~<;k;*|mW^4w8q<2r-5UU=oiO(oCSjuzW|e0= z3IOwf)>GSv?#8_XD3(vD#+0$|J#8JI{=E52g3I%>HuUVbtW6B`W!0GjZnL$Sc|87V zum%VLNHroa#J3w3?(qOHPqvR4y-xyLBlj-j4LTgQlZ^&q`8r{s9~c<3unhau%U7puW#o1H&NC-m(?0d^5v%OF z&lXEE`y)0>-vG}7&Vo51b3 zSnPpf4-|W#*aIKF9vB;WN6t7Vet}YkvI3*LH(dEMMp*$!k3!}pY`_FCy0WrpJ9Z@j z8GgU5S~9W4hy*yKy>p+dW?mp|j4n|SI_;i~k847V(;W79IqL=D#yFUcvCHjLz!%_o z6x*(zJ7k23xq2|nwaV#Np9QRs6O;4crobcVPz* z#(J(nYUF!%FuiAwsHmh~3==Zs2w)DNfzPcL6hHzT{Ikt-QBy;(;TAw=BOchRh_BV_*NMJ^$iK*L`1j@;0=3CeE_g0&E!U8UhJ|n(}DApc`j^sFt(9)e7&H6eA)v$_s}=~*4iEx+k66ORbnG= zpRlR=W-AfUv!%7p0k`uh&$H7zrh3ic=QV!}Go@t%)mJPH$dMe(V^@`ieDs~SZK^>| zF!e`MOO2RvtHpM+AcN|p)5QQbAbyTi2rD?pjVr}7AEd5cERitrYVKCLBF6U+12+Kr zxrGI5ec*nlA8iKvysI?w6>bl}6xvg=<`l>I2Ux;q@2Redi_N?+km1F@{Ju2^Fxj?k zcckXzPww{%Ctk4~k3MD{NA6DiF>>a#UHHb=^Jb#o3=sXq8?P%>`;4_d_;8{ftjt_I zYg6Y>+uVVVSgC?~0hXhihs6WwSEQd;oqE-p@B5flwsj?TnYnb{X0DvGc4Z6DMNMoE zujB*72=AY69Y85MC%Of!l8Cbj=$*Yo8P9SFx>qhBJ;64dufI2NTsLU!s~32(q(tx3 zk}{2B0?3XIJ3#%wfHEbF$!4KvAC^5NCf&SUK>E*o`U%a=VULWCd#Now{nvkK70OuF zwtaW%AE94oUOjI6zVt)Zv@7#Iq22Ag?yuFU8SC7Y3=$9j&-$fz->~Y#cPN{{f#_d1 z{Dytr2irJ813gP*e;XgWUNGpvvy=X_-~5ifapJ-abwxKk`P9ekAO6gfDVt~HJRiAm z(c%g)>ACMQD;Mx&MF49PyW`Ckz<6biZB|y_ZkJ#9x|KIIS=Sv0txC&$g!J*)$Lg?& zt!1YJfX$;+2&jzva##R*81(8i<{@LcJ^%^Y3k0VD#HT!%xX{7pWZRmSZ4R9>Yy)zY zWch;OapKK4thT!+Wz1N@#!{8~%mPw?wH;s`QlX%FzzRM)MK<>Ne8KaS>jB|Wz&kcN z0v`&Ic)VBr!rUk(u>5v+Xk7D+xa@$uV}08TDRVRSotae-nQSVB^h>6C0ngKCtpe#` zEA;0V4H6+hX5VH`ch8X({#J{C};e zpGU@L^d43A1dRc=QkTuY)x|x-JrLC+!~bn$-Gj}Yj%V#v_^6hgQ*YU+XdSqzY1!e&t zWG?Li!vQmVz|bBBN#|RQCyoJl*(%0#<_`E_0wSOQBo^*-O^yZVC6j89ot8`jn+3Y0 z&CIQa<-g;dDb<{roX%)Zmg=rXAw4o_0$^<0?InX7q*dT;aKnDu05;5Y=}>41Xl!%WKqeP?7_ zSW%YgV2*jS0QBlYb)kBZv&(u9WO2DHs6giN5 zrTj^Nd(r1oeR%%Z@G|ME!iMGjRS-cfhj(-LI({lhpYVr;^;CQ{+*_TSF#k!ZG|dnH z3`TuI=(5bwM&5bHb|3qstz39*!{GUmv1z;9J8V5i@3Q-U>ZjBPjba9W-(_e6Jm1>V zZif!tCD8M31uNmdo!7m*20~ZcJu5EHJohQY4fzVbYywCa&lVRUoxs+(Y^CSl6M0#+ zHQt>JNMBTDpz$|fx21iu!w4Kn-~ym{{OE2eeKx!;-!`zHXJ21fBM2+xSWi~xkKx`4 z1Leum&F`qJ;@|x0-&pHI(tTx{@Y4USzp~~>K4ldx!L#YN=UQ^l0G#(EZ{Py(ulw=Q zAJ4b~QC%3Lf!{3+%&Cf53s6fw1ds9Fzr9&1ak1)%>tTVyC<1Dc+mWM@C51Fbt|`ped=VkYhHLWk^TGFJ$tPC-~%>WBA-GA zsjXPFLtP^o{w-{?*D?Ha?E}0vYp!2dYu3Lv^Py`B1_%q_!0rcy?2E`+bJy7g{ zVhq#RCcCN88cMA7jql7*&LbQNvj z%Nrv+>ly|>*aV0W$JtpeXFd~@u&jy!3I`fMZa?8g$plEBiOoHHe7g1IWT-*RnmgPs z7$xbeUAtuf&TR*B$6!$OV0yPf%3+O^Wx(`N_HfS8P26=ZUSVe9&N*Q4fa$=qEKrs+ ztd+>HRsf@*YeNBF{vP7GIER)DAApK$>g3SEAQlqtpSbQL3^xdhMtR>QD~-=s%Y7er z+xVIv9kQ`kU$ABYKuXHXWsF&svZ9o2vpRn*o#8IAcX9;)eU$+10O|p@M{RLoFg;3m zSO7%@5%G)8@WX!?ayq*AYne2d04~R9O4PAuC8!jbK2V-e=Eb_Z3U***+P0FMG-eZcO40-26IgnJQ#r32I_K=uLHep!s0{e6?_Gx{_Dh>Q$f((@8G z0Q6feKG>ya$6c-}7(g(vY!}dHJr06-W#WL1#ycPAA5x125B{pVZ@B+A3e?ZHU&0D+ zzQ^27`>of(_d!4J+vyt6mIXbhCoc@TW;NDT+3ucHP|eM1FAkyBr8iTmJA3ZBz4`V< zXE6QIFF%y>U#~zjrv@9Glm9LO=%cbE<35H~#^uzJKf34U{JzjTVpB58A&2*NSVb(= z2)8-4>RATN^)WHmmy`xh5Wiohn>Z-T3iDqWxEC~k#2M-x zUjC4nKmj!qBi4G)y?&EYp9XE1Q@U3`BJ@AbR8mvpgzW4-=#2JW$MVkkL;-oO;J^eN zOOPuL{U)Whu5M~h0nkrhI49P@AzR*ghtIMNC&=tH8ust<7=ybHw(q#vtudE8jP`^*Q<Hbb^ zyME!6Qf5`#9e?jDiEVymJwA`h(Wo)#Ep3Ty6wJAHR6frWC}{`teVtI9nH# zSz`2+*S?%3Nt!CFQzd2=z z^OE3CoJ5`xkbo9+%R=VE<6|=dY|kbbL;d{x^;3y_&krpHIDPgw|#{nD?b`}>A%%L0$S@qhn2+j-YVtS01K z5AQf9_WVn4zh*r@{1q$HJ(^2e8`@p)Lf9GO?GHP5w-ls*UQ-Z+ttt>9)^0!i&wf*Z z2>P8vKK~htDU+ZAioyv7tY^xjK0KXgs~SZ}pWt@)~)IchHK?>Ra5XU1i_ znilA&vs(cVyR5FOJ8K~$!?3T5HJ+dl%@;jby&ii}0W7dnvWeiBZB&Mb^71O#73KuY z9~77#0)bT9NVW#Kaa`kO7>JMliVohr_{B@sd=FrjQYc6~9Y0|EXgz>;-oc{^93!hEA0!A` zSaxjo>Dqg5OZZL z77&X>k16zbkgcIi!4AQD(*yb&6o4IMoJ=h-J(ymZP#aq!*lsZ1-I==Y-t?hxR9=X}A@c@@P z%~>1P0itJ~J0{;nc<$#x@lgP^XK_S-07PFIVigDYjV`rOK)dfB<^lM|U?6R2OPx!5 za-#L>X1*E#2Lfuxh917=)Qg~pppU@h+Ou86KWhNV;NQZ(U40tA z(9NUu<(t94gEPt2g^vyKK(1(ZIPasx)`)M=GwpNz2=u__u-=RX)Z2S)Otyj&>lASp zLIwuT!xIv03V>dw9o$5#E4t65Q^6$f!SVq>entOlhcp7<5Hf)>0qSGA=eYmeN9#VI zAkASZoA9j#;P}Aj4BM6ZLZWVxaH(=a_73vDm6Ir{xz^ z>&scslIQFCwQ*(N3+|n8X0_RCeYWr8pS6h>|7yeF`GMg{>lMk&o{!&ecYo>guBoM^ zjS4QGwijRgzF6nCIo5gR_Y>p8>P7sPO@Usf{>C0PJvAn~-lBWv>DP1;0OSRd*Lfw^ zmlL39e+W&|RllQKV^FfpMYV0EG`Ftn%Zo1QN3v&=;fe7Kz`wh(;j-VaNb4p`=SUrs1%J)rrpR9A_lqxMGqAiPhZ>!q@zo;!O^p!t_|A1v5| z4}MalBJ=j{J8$V7)gk8jW746UWb^CSc}=_VggOZ3f~=AEs?X#SuA6bvGtK++<2vvT zsu5^DQ@}X-_K4mq%?d2WE&@@^VE_3|n-7HBSX}>L_W(9=51Qv$LkP^Q7HFP()6bRs zS+3}v4dw&TJohKUyd=PVkQp<7e~d5lc3wvP>dnjV+IPPF1Dh0S=Ds~$cGrFP+jMDm z-Ey<^4(!9szdY80@vraNDcPwC%d~kr^mh=1x#UPBc|ZA#t%U^n6anU>&F)YPmJxJZ5JXqEpE8KX81L!9g`t=}4$K77orSjSk+webM@ISkZtHoyo{rh5e=7xzpd=`uNw zgn?7e+r+vIDU1_Q!I%k%wW2}}I2rSiL1nNI$AAJnwjQL5(Rp>HECk-aEXTo25bWYw zQ`na`)+G9L?RkS;R=1V)?6}hv=+nEx$Qd>s7FJvCy`u_m?jt@Jd*o8WKdk3{tF8{u z=zHh;UG?=fm9}^L)(5wwJJ;B1+?tjHwt4^mn_@>jd%n*a>Z|R^$B+5VZh3a3-mXm4 zi5;)P_U~v*`H!H0alMyfGI&*sQKz~xNQKQ<&wF4ietAUgK-pE_f&|EE8-d+yws`{2+XGi7yFvHzpicJM9% z`IHVj!l)A3)vfw8#=O%5fc>0vkVN0>fSk(&qAL@aE&$lGTypQfaG5hxwQ_J(YR-Ph z&Dkdf{v)kx7Dg)pd^M4q(2y#O<;?(x#vvfdu=^_qP z-*?^0uV1wGN5lrcCd+buFI6VlTf76DzrB-{bq{pt*)DKd8rCcJ$wzR?5nNk-MPTdg zyREh-2_RikD&`ph=%<+9zWW2K-zk9U-h+u^=ZD1T{l-hy_BmyUsws>OI8jJs1w98K zJ>Wh-+%OS_^)#5Y=@aJMG2KtqwPMW|qfI)Q8=bJrfAzd=KXkX%38b4zrUXv!J^ilT z^)o+bHEpTy2Y<}SX@Tg!DG>c0f#^GPkJ;-1(Jziq*y#7aXAOt%v6>ybebt(quGq*A zp0)Ch_LM*cQor+|uh7M#K>G6KQDtcf#&!yuI(O1$hpt-X{R(t1moum;d7t^pVAmcM zI0&Xo9O&Mmk1k&bBOmPZs{&s8fLK4*?GY$}fRIAOgNNEW)o$qsUPpv|KYVXgR+QM~ z%jYy6Em}uMr}Rvn1yfwnwr;y|3k?Jf9^Bm>65NBky9KAQ#tAOLHGx0~?hcK+C%C)2 zH*z_z-aU1H!LHi1Yt>wHf8Q9M+1>jPc~en>Ie$^gXS0aIIeu-p(qH2q?m9t&nyj)` zmX@6MwN1zsqOdo^##so_-H~kSrOl{54fB{f>Kr{b$v-*{k0J3Hz{B`{0rSf^H z4f8cD@Ur&yLFL#D){oemiEEx~?P%@9!%R2Vy`L{CHS2af1HS8Z2)O@~!aBaI`C@fi zM?c9d4h|+~BqlDmz00jzfCuO%qLJZ*d`Kju*c#T5F6z6*tbyNM`$KuK!v2G=((-)< z4%O?^Q(gVH6d|qLI)QD*uV#`&I~K_{IQ-b8IbN3tWyRySsdfazy0fikdOqdHoFYR4 zy={+SqXY^t?f@$P|!nm-xm zX8xJE(k&>%>1x8D$Zkf4R7pN&4b#%~QPZVLJ(BpogJd#Pmz%GZmZI-I3lP_T7J|lg zs_E*f7oj3jfu((PKAZX?_ae`j3vTF=%;|KslU~1Q(A^ zL;Px(%WO!D38&l^#PZAVKDr3FcS6A*hti3vb$ISP13)A@%xH!62)_gD)W69MmtCAs z^_H9m^vy;vf2%UT?p65q%2}?+7PVr$;{>zV{VFt5-P}-#EF5^a$phP3duRkt(44eq z96nSAKI|ROfE<-uE8oRM2Z;h=j}O#t^INX(bc-4+mN5UabTVa^e;( zL>(qPkn7Ip9wAQoN}sq$n?jtW;0Z{?zcpL@b&?0Lp3Q1LC<2bTyd=EEVq>obDd;=0 z{dD@=a%iX-0PR`Vq9v%7!IuEHQM#S9(jEi;qVYEEr&gZ90!6DadmMpYZ=xm5gic5Tf%W#~c(OLYY$k`@A|tLth(z-okkry_)ow$H^gSc)fz0FmSK zEW^sXkirQQXsZv8BNDv3wL3esEY@Da>^?v`oK>hhzam$9j7NRXZF$ZjxuK*S#trz5zwy&ZS6?GQJl>pW?DSD>%Z+awVX(>M`fGvzRp7Rc4~|Ue{);=& zs%4u@?t#HPc6X}AxNfPgX*@yfgs0&0lSpN5DPFGyre>rVff!1^{zCok$6UE{H}?kW zfq6w3UQK&pq5Pdz$T3Hndtgr5_&>W=&y&Oo4l9u*PyUZFi5tKL*WK)#iMQ30w)7eL zp@lFF#M~)${bqe3BJy1zIQB{P!Gue=#FSq)YOhR@NTd1({?6Ik)8o;_uiC7uh%#5n z;W}GQFcY1_f;H~rzee~bJ)pdeR&KbEUA#dxKt{08J^VG^O(|blcI{l?d5s|+hmNm( zi2vmm(Bh|sjWX-Mdc=(@QJx!p$y$4~QTKq*7YxsEh*ve|BcXak-xjBI%-N5I6^bIXV*ZL^#Ns4C`4d zbg{Pn7Rq@vAHY$A5u%$A zK~eE}R+(AK1u5F$|DtQCL|wY$M0Y8(iTi5;en%)VFw;xtijbKf%-bygS}$`&lAnec zx!z$*1M<56k%QJ9r0=jLfP?~A>E~Zv%mMk!>;=VQr&cT?{C&mHO9%_05qqk1nEiL| zNT0X=ObrvrF7kmUxP9~l>~p@5=bvuFZ!nF(Gg}5R&o4USB=B;U<@G2o!5H$k41HBK z%1AirhIEJy`^N(N7=xlIObvamKm);++g7j>{z!nvhDS}PNlEh*?Ty)Cx^vjmKyL9tUlV0_gh;2aTrYi!aL}iGOhaTtsOHs;+m`WvLTXX z-xN2Sa&$Ko&1q&&78J5^`n=NY$@UVMbqyik@^e!byUM?;k?YVpr= zgxyn}zV*rg2c~^tz(|jnfvJbDb(q;Xaj1#_PF0Jb^lE9BJASp5btfjRiP zgNGiMNcQ&qRsr3mT^k&|R$uCDGgEqJ#Ou}3-m2e_r~hv4tSd#m@$>7{ z&OzssTlIO0&eHA5R3}d7MCVP-Khjq1E+$``CC+m9de3GIxL>GVj}9g1wHZ(|>>Nf00xd2*5& zX`VC41t_S*m>%JNaf7BjsGTJ4w=iKLB`%FCtjfCXN4Y>WD9=e>MR8^~!7uu24=+pe zhqzy`7p+Q%vyzOcnI(d0+0gbvvX&N|P{#ZNYAB%WjC3?*I>WTA@TJPd-+IRY6LJkV z6+QM|`tdLdU_-phxAgcVOmWAU=u&sIP~o}$jRTPxS~NeOu4mog`V`m$2mgnrB|rl3 z{j3xdh+9KZ`eZ<4vAs+xBlaw0CdN@0X&~aFHgZ z_;xwI16=JewI&17qI^9ax&B_clUv1Ofgm-t6ftW5n3nMm3UFjrdNk)NJmJw`F;sx6y0eaNOXT%wVvs_`FWz_flE^VH0^p%cJY06ClB!r^CNEOZj--Nc# zyBX3vC*lcoK;Z7T1T*aPZ_lV}+v$&4Uj8~&YF2Q=5qC`PIlhjzsIxEP*2J3UZ$v^v zUryu|0zH|A=gMRricjmf+7!;Qa4&ozJ}>fTRqx`JmawbG&+uS=8i2`>_Z4NzqYFDs zvvd_PB3xXa((DCb2FO!y@w*8HaQ??Wiiu9yF11}#`M-hSUMLrCz}!pMKH;Pr~! zv$LbbEHjw9*%k<)?i1T1v+-qe!OB{h>$^ld1Gt9s80r-pxx_QAXR1!BIYDdpocwLKd^s&nCE84ZRc_()wUuo!lh9~6nn0c(5a{G7hv@vmBM$)&? zIQEeI;BL76pSjNB)O!m$GerdbslNv0DleWv%RG)JWcytbw{NE107*xx5Q3bXuY0FY zHSTZJA${N2s9yyCC$K$zE6xjO7cI5l#+$X^@1UTh6p%-AqsMKeT z-fv5k5^@3it83b0ww%?^{`aON&#GD(1W^y+*H5}?~CR~_2hW1#U zeA?}kC5IfOS>Vb$(_75R8j=;x|C~Am)UOP}w(UC!q{> z%snB3-Hl?e1&IsAbCw?^dl7v40S-K~Bv@l{59mOjs_?^YV zs1e2l&VD7ey6gax`?7J2e26$I40{|sHQ!EtAK|vG0 zKo-rqC6dwNmp2A|n;Zw=^^@AU9PB#zxDz4I`r;+akw(qRTm2JPMxAxyH6N+7WL+V8 zx|epDyP~>{U-pi?wW>~rjyGm{a{fh?O!X%T)AJvF8|rnW98+SWo~_+Ko&ru!IH7O* zy6=*65AewUTJ4!%4hS#ibdOsww+tUnn*+R<#lzr*xH?;BH622;&nms$Jh@e#VR>9eH&`_&1|U4xy|n5{gp=5J5uBxf(T$a4J23}N*SQn zv-&(~%7)8g+jp%t)3NmnVNDS%qTFxE5VHwOKcl85g(5xuaW~?zSM;^!U%=%I-0IqV z|Cr7DGI7Ac)SOGrKUCQRA{vIghmT#~3d^J!OLq|q>8C$rK0g!SzcUq=^clE?>BiXuHipTS67J^2!9>fn@6UBg{f9FnA z0NULSQBuPQ^~~WXIjxuE+QL~>K|lGYz6!>oQM8d2$%9sb`N2*{x;`eF;U!C4wLCnH zN3VLm&o^lfE-ujBU2C3jL_rR)X8Zj9(vr|y$xVTwSLkN>uRzwP&wWwu)&O9M$-6n* z#7e#Z*qVNPFo#{%^xbDayY32lsYU^HAn`@yQgBVf#VQD65)kra;bwtonan1>x|BUtDk%&Qn$+xPaY4cN;8}EdF zp_#Mn}Ab&=yrzT^vYRzNUIU0p*p3> zaQ89q7O%zgpm1o5Hn@XrlraA@w3Y43jBgxouUm+U_fbTv(Z5)U4NX{=0ju|e`Tllq zLNLhM!}yzk%2}~rUu{49Hm!FL*AKo(7WNz^hA+)CAJx+FGvJPot0H=$ka`-?ukBcw zsRsXMa0REP>77*ge>+UIDstSsZk_d>Xom}=?(zmK1F&j74X6Bw6UT>Mn*!P2m39QK zCC3)E`Kc+7_q7>qadGj~?0lyK%zs_Le&9Y@Mnmjn{>I^^lfP#dOUeF|s;agWR<2q0 z+E_X|errq8IyIYA(LOUXD#u6)$$d4Q+gm+MAf+OwopraY@XA8&kW$?Y`GgXn^RG4Z z82Atc(zC^ONfv-0Z)jJ<=$0JYGS!e*>>D9qok6ZKRo5(jQ9}GGT2ig79o2xE@4?O* zHf_3x?FmO%N2G+cEh0kYCzCCM>!nt5ZiiFQh+<1Yaydp zB$Q<5sm{DrltKF!v4z%nAm~Xs8X8ilVWf+(Q73Q3U3p38ZHoY_`Sm&Ua~e&I4VN zK;>FCl_>n~wj+3seZrtpRa7?~knU?tX4$o`49&eODWSx)P-1_u`g^n#{TkQNmxnK^ zvWR%qE;M1siK@-GuO^`Z=gPZEtHu2Gnl~kaEafP`8;7ge%d!te=)TY zK_4pjZ|!a>W~SrVeFQ*4Ue$|ybngflLSFLoyl@||S`4qihioAxd5QZ#FBcn-GOas4 z;OB9mpC9j^TOPPch`F6&rJI5l(YlODe@m#Hda$Ch^J4$`xj(V~~&ui%fPZuN2Osdo+w+WGxnraE@@WJR0PvvLo^(F1?BV@4a z_m`lR8wBP5WdUHm#Zk86Mig1d$*%&}PJ1P6wVKGQ^jTWxT?ouz^)C}@u{__aIOHE z&z~E`!6b%~iaOwHzZgQEH}?$L(oioy73_VNMI>uPN@PNzM%VCB;^ChU_GM#%M!A8c zG~H4rd@%}>z=$9jC;(?!Z6N(w*7i(%%Es}p@CONJ-yp9d2OjbIm z-Xo>gQd+DqsLhU_nEiOAKy}03&Ci`o`WoPO3|>Xx{ZDxNz>Z)^@4tB_@=UTpWbreV z)bBD<@Lw>!Pjy8BT5I@RL zxA|GM8JeBgjV25KcBTJdFTpv#K!q5Il_ zd*FxFc#g0C6|&J;3LWq)<^0IL41b&uf)B*ypXeo^<<(I{8AU-y`UJT)fX_?948yR* zDEMLitGFhMqAKNk;){F`-C#a|t8j?+S(EpNGsk6_qv4l z_<6rG(b_bT6{_A3(t~*yzl^N4 zfoIT)={aBd3F{4JuCQERY;j|oc)Yubzwm&HG@hbW`P=Kolo73V&g|*l*E=?2_wjb~ zyW{F-SW=An@%3mQ>$A35YfGPWk(YrEt08&HdogxN^2M1Ak}Xjdk*(Pm(sHdYDQN1J z$03PvUQ!vWwPA#lR()-*yRMU-i;`JRDa@?j4it`I+19auYXE%IW!L_H=B3uxC1+jV zdMN4GLr50@E}P${?-bTYSJuIWhuiY8hzxqI@E@q0u@Qcg(TGM6cFZ0B)f%%ny*+b#cBjS`2oWHAbf9rKODp%*RD<1Sy>#<^PQ zp==zU)Ic8ZQuR_1Q}6>#91}(jSzFICfY*B0WAqs~wKp=HQ$ZSsXbhJ5GGF3(D>CM` zGl^%D@e20_Hx%>eDOYAYM?K0_a9I$T}%DIjMx;Qs93JB z;=4kEq)IjZQjX#CgFqbLV!o_Q=Rd$-T z=Cgw7_Yi@Yw372x>@~s*`cHns;ds?qL3_2{64>J=$BOm5d~?KmF+4Ks_exh*L$fdu zJ(J9Pxp`Oia$2BO%a^WTRT>?G1h~*A2mc*DN|JaNZB|F@^WekO>6X>k!WEKeZGHGl z3@#WocoGNzqA+mJ0Eu!;;4TFb*L~dgNZ~dJzJv=>I>oz?+s;23Peofz8-0vuO zZrB^w!;?RMYUx~Q_)$vWAa^zuV*Kb!bcgynb@yn`>$(|w(sD$#F~)H8OfWJ3Gkbsq zL=)nm?uqgY`8*CkA=nC{?#IZU+0UFe1~60XlOjx5%k!MTNB0mt6J{yMr{*}_$G_|t z&-3L85d9H(K776-Z^(mvD=w2WCwyEBCV6?o8#2^?+W zX;8nrf@WiPhOgr}s72MKePF-RR_+Fu*dt4xmy0Fjk>x=StJ56p=o5+(hu8_+6KARK zeP6J%KINy+B05u?_;40<9|o5b(fga#TOn9YgcVC)SoCcj`8r{7B|q2j>%L4W+k520 z8NV3^VyZV~y8UOxKR3vrMeV>9I4hwIbds&<~cr0?H{#Elj>B@YRs zIqHkT*qEbeJg_O`!MfPK$Jg#TZ!_)!8+O{id`aDR++s}&oIgzv9i*xz(ip`@kl#?g zxjt5$7ex2~hNLh+hU(<-&tR=X;=;zVoWF;cHRU#ORX+iTmJ6=hmT6I%b7j>te9b$H z6#@hbV6T|mK~j=!!1a=E*~w{-zzDN@ge2hF`1#Oy34P6%)*27_Y~H@}LhQwE{26V* z)WWR4;+|cazuSWx`B~smmSsY=KD%%vTw;&^~&5UDwpi3qF7m1bZO> zPg?7rwMK~QNs%61$6%mihdIta=qrc#_*#KFfd)Fq8u{tsr5{y*C><#fPBAgm5W`7$ zpsYDMGNk=CBBQ>oXO=BduxD(#%7s+#OKnR{g z`m`xk71US?kfk%>0SurMoo!j+g5XMhXHj)ldy%y04=}1pJTkNj@vL6W4^74s&KaiKHnt^VlTrxl zHlF9aS*86gL)s=7m*4=@VedpXIc{Ew{R*&cMwu5nvP5PPx&1?0~vjPs~U^ z)|E{#K}f`1T>_@ehsz>upuC1>o2NAh_k8F%Jf4~h?hc(S-z^$=+~O<_1RBguz9{o$8g@_2 zwB>kzVQfYX^M=zBlMeg(F~`ROnHg^1x%)GtmfC*@q&~99TX9MNxbp4tc=}zJhEA{k zJCy!?i`yqu&1h~keH)Ixh|Y;?C)9Qv!O)~WBhc+%_do87cTMC=?vBB}FPf0xj! zG4F`Oqlg4%+NX2SWzW!q41w_R*1zwTbm8*z@Dc)?@KYaYP6%H3bRs0)8MGqPnE+7W zv*yv^2kO#0pZvRcV_XT59@hCm=rOdA1GRaq7&+D+i5$pv70d7L8{zjGf}G`UdGM;J zT*}=~%Fkg{p`S;JmjS91oParG6PQLnc3gq8a21&eZn&YdcsmgQd=~l^+hUoNDCgQw zxWuIcjIT-}!V`80n<7i)5uT)N<1)|OTq~!AAqFM)>S!1l{p64j=X5G#NphDz!`IYg zzLi>qKQkso!8mgbSZ?OCJ?_XTUTN~{AJ$HWG!k(v`9JGdw$cheP3Fw5q#*oaW8^t? zOAEg1?=p1cs~UpgUdL3+fDlYZ(C4Ikd6A|5Eaboh%MB(Rb#{B(_&CYtu9#^>h++XShUIr}%E*9|WPZV19ce{3t9gOFb zx$={ZiI%$IQ+}Y#W9Ktp+=2coUiH^8eiI5zYjF}&D6gAvc3E9wvwAe4gHHfj%7wPE zTBnA7J0#kOcGdTbh0+J@(~h|cLsCsrTF(Fu+OA7H9Fkiu!^-U zoLWW8NJ#dV6bJ9>RAJBZpDb+;f7a7~( zYQWG@T7JuIyrYK)__iOP)~SW-?WjmV4J z#7z_$UJD>FcjD7$#=}E+eKV4b#Da~^NGpl1ACr;<4~Q(z z;bN-k6K;dy9lK>gP;+uY;iNIpU zjL&Lw{WE~c1gio6TF4(mJ(g4aatn4s13T~NUKb86=xh&^IaR`6t)GwW*>tXYK)N1e z6v4BPo=2LQuKj=5vn-nwAqEoob%1-6guWm>#G*TD!0}nm>O4o4HGrR1XE|i-&Ej#t z$@bdO9@rvg;J0}5M$-#@h6f5HlrTJs0pKDQmgx|Z^z?GIRi%;;oed}iBj05f67;(p zE8iH_l(;$T8oEV8T!!{m@!I-~qv4W971A6<9wU9V<8E@_rdn}5A#W@7wZMf;9Bt@r zA)Ki2mFQVD2R5??Ds)x@VBa<}{zJefeS`ScCp+oHEQjTj6{}&*&Os9oiR|jq2s)Y` z_)f{b=}Ni%ea(bgb%~1+7uqL}w*x2#C?XT~T(w|w1PR0GD%$M2-gw?iq4f(e3X=b@ zl_BE|6&kHPqWrn;-|<_~x7-nkz8T}-#Xqp5XWvLdjVD?;rjwUPKGlSeK=ycPf}N9B zi8CpTf^{Cmh%mJ5pih>8Y7+MbI|zB8<2LSIU7}>S?zn=lAxSvkek{ZCRx`{2zjTo6 zRM?E_VAnRA7taYHeEY|TCcBmo`ka|i*;saKBBGY<-Tcwd=qaORn@oahM#$?uXFyp20`_6+PiT$) z(r%fkh%-OXHv>(d;OPh3{*8p{P-iH>TMRUiN5aDN2w-riP`=GFMM>g+vH z(4(Dg!BX5#52xMTlHb?X24G32x&VS8SXhOnIl?Q=1E$_<$0O-RJoIVvP4bq@dzXaNb7>h}PxC zIao*lxh&kp^XQs-;Pu-pHbz$e{5tc^<8ZW+FJ#>EXEpbx4Ei0`FaeuL8z^=dSRr?d zcpH|)=)`WrMxGlOSG-=6ja8*{QbWarmPG-D91n|s3T5gUsq{N*w6!!e1lNT}2#Nk$ zXzQit)oL60bRA6QJ&YzVc1oNfk5w0H`zH9MtL4II84)Pi8=B$=FN1F&$K7W_o=;7h z++Kr7Nu&E*FS`m_vwv+orX@u8IlWFYmGXpbPx2HOGY5Z*20R*Oi4e|v5zcu#e?pz3 z;5-ktzlMLLy#ha7hnT|?<@HIzVgOI&II?(yNz;Eg-V>3Z%m^R`U>&Em33aIea#i@G zn?iW+`+UE7LX>QEv-C0EWxurm*9S>?b^I>QvnJs!beI@6a?n|W6`R|lQ7$DwQ`;6w zPzv_5knNfGTuHX?^|drT3Pkx9WxdCRZE`Q(nRfKIqsq~q)pi~wVJfKp3~)9CQ~k2H z8U{NwPz$^&J#bx9l|_g060{xe#fg477^602ZmJf*1c>2;{8e8l#}aECjer!r5s;>u z`#S%dJ$ge&>QBLk0rm^Z&O~oW#fPiCo>DBAaLjEMX zqWl&$J|I|vOWt;v*2O4hkmu1dOI^UxLF}Mcmk$=)0Go0mbM5Q9;`0s6D z?0NU{Y09l&t6{NfMn1)Ed;}bHO%l&}A_|v&Ul-P4kXkh(6b@z~*!E^&G1L?*lf96K zv+0IK1YH6A*r`p=KiO^tTrxbkU`)Q!yP96;0#R%L?mtI7TY58j>|q8Tx($>W>+)&p?meGB>*-dk6+8Uoo@s+jL+SiY0z4h zSUygj`^SP2c6(zLnUH$El_wvGI;Flf@-ni>52O*S1~q8`cc5b`uM^h&Pe?Mfj*?gT zuz-!B;JE11vX9(r*i!9pD}58TqDPwYN@;cf%YZNmVbrp;0%c{FUD+c%P~DvZa+xvw zGV-xDkV~)Wi4(ZTIMHdI6aT7ecD4C8)EsttKMm3y(t~19OmhIw(kD2K?QKF)MJE;5 ztGHCwMLLWCzJkRY^TcerWzAFgf?j`~nk`hT^yIZz#L-RJU$aS$lat}{qT~`EPv2tl}ou?IM9k^O^=UWj+^z?<@OU@9wGY!#$Y+n#2+4Vbdvp!(-N+;g=Lex zdg0sjY1fgA9HnbOoG`2`duI&Ivx&}f;=;?QF)RbS^vUKD{Oh>t)*M`;HGVl9din>| z2P@R5gu>nO>xi~6|M1b~{`ciZNHR(i+oy`V?iS`}P4JstT0$*+V7i9aS9=r&+4eeF zG_Tr;jm6y0rH0ojzt%Z8)%*EH=|F(|!v~k+>+cWM@ghI3+6t`=6bsEx#}UT;VRwPr z<7+3glbK|~d~~~;3UHHau=v2C;aUK9$@_1hcT2vn4i7}L+z#U+>4@^zMW3UG zjYGSuL*Hwq;KrWrdqjN!-XL}+5kWD?Qm==>%urFvhN(JG z$k2=daWphri#CVt^^&~l`_)FxOnKl#alm50^#zPXha`cIC`fpofC9}(p(%@i|1)-w>6I^$~qRfdM=R0OT zcnxYz<-T-8&i279j3@{u+CY)S>|Q_0E&$(whxI5>Bvr!6dpL%Ab`|Dome%93(65~8NedjzZCQKQ9Vj{ns2c|V z+$h4W{fFg0!*TrDtJhf2oE49p`5-g+R6_=B?M!35IV~e7<-n<0U?U)Lz!HsEGWBM+pR$(NPoYjG7xQ==T3cjotq$%zB`!D6q= zXoW{1Gdr63fin&P5aBnht7bB=8A^CahZydlew%3+@k@+xUdmtNjB~Z-DyLE(5>aNwMgJLdVb(euN*8|?Ea+f&wbh(fa;h^CfLiy2zk4C=B**Z zGhsY+rT0-ppp_-x%ceVgz{+5#^*ds5Nk@NppU%7x|3QOC{l91+k4aVMbft+nA`vCz z5FJ(33)%5fyD6s;K0lDEm|&JPW5z5ElPjsx#t8krh~lC?s>w|T*fh9LE6SS|JiCNQ z7W6I6XLu5d82k0!E7KA*{_b-3{&!(b6w`ZC1C4SvEun*BDV<_@txO z+LCuc)Tlx{w|2d?zqiaO0f~29n?!w6iHnvn%A;c|lrui)Dxe?5U~5@e4Rq2oK1#xL z+-l;)FFe@hrTape_(^kTlH=pMn|yOf6MKZO_~K7a4B$^Xoj+Ke+CQEDy(Qm2+BoUV z<-T;2P25mMf)&pY9gqNHBF%VvQtSu=xa!W^bx!vOLAnM#v_ZGeJ~-(HHM{W_3l)5i zZQdW*tyL!dwpr`ukm+{NN3c4OUlb3E9I{oNBCg>=HHB>nB^>90 zk`Hp;15#Cjw+lRWu7u>azhek4V0< zGdTRJe%P9SE;|Pb?;)aMBP9d}8ON>$(w+A2`A#R0_u(_{r(T30P<2WjHQhaLl9RL$Tw@Hp%)i-`$q9H<& zKdy2SrJ_6PH#`%BhdUgHZOvXBOfZQUPJ8pXKiOv4J2Vc9$RI}Aq;!Ah7Ij9DeLFiv z_6ZLy2`xpKXJ(>Ve=+xO&fex6wohbTW`JuA$mQQQ9j5FZ6Iro{N2*izzAR(6e3QVrXyayw*JgHj20)GRzg2wEy%o z4V*?jxP2NUZ=@x~YzQIl`EvPka8$Hk`5cX0RVORjm~0wvkPd9cZ$pS631aj_YQt|^ z^So^UQa96DS1M=L2%{L7wRjdQ`bcrciVdq8mvS!wVB_XFopgJ_oLuC*Syv)+x>^T! zd$q{N6ezdQ8@|<~4ebDm#*?8l9}=RhWJZM8<=atz{prNgQcL{&RlpIj3b`tm!Z(=i zyOK{~V7OWQ6Dlo&M|}0_FY%Y}?j7@1KMF)Pz4PjK9ax zqNAUlha3f3zNI(I2A_+DGPt7{6lfr)%3Gr2*Uuk#lq{S0y z-z>G2@{ublw1AQ>AP`SsR&g%DCGn()EcK0wlmn)%XR_*^pJI@)gwKaZ`kRaGNA4wc zc8vnn^v*iOXv%N9_p1;p3=--KiUItma=PeOtJpD;RY*BlEG7kwLa<{Gr(2;Lj$r=5 zP}v{KPz-4Vo?fCVejgrlyb%+6a?z^_3{kMWpkY-Q6NU7b(OQ#=1Mjm^$z;xp5CSx~ zsX0?cnM%Wy+bz0Z-DHHqB9t%jt0}YZLGtzJCQj$q5iV`Wzn))Y)GGuyT@Aan$K`G~ zAc^_$7D+T!1Q8*z41#qPDp#nIDrdb-LDnHH-j^9ee=%X6hjKGtfYnEpTusHYSZwei zL(Hg_mSp?ODYS_G?1TyL>6GCUe9$s#weCzyDbi`sjb0L)N;@dsy@ z`1(E#4?Nh|00Yq`JuN2#omQPOF>3?silEI^ z5J?l&7RMIAwZfxL{;0Z@i>yE>J>YqE%my6=oY3@sz7^D=qBT9z~*n2nb zi-2D5alB25G>9AT+!nv)d-dmOI`E!+H{Ia%W$g87#MNCT8ED1M9p!Bs;i_G|E8)X|?Bz$U3Bq9q68yqVdW z#1t}&--D5f-4!4JQ5xU`MQ2R=Cj}bCIV(r%By9tWvA9>qjnmx4(8VM`D2IpdQJg|O z{Q8#E$BJs+A?v~D7H-{Uf))GI`4|oa?E&)ez?vZ?9^OtO%EXi&@*#_v!c)}IQ0I4# zpRw&O$@s%amB(k+PC84SQVl4+-aizr{c$7R>~3LEk=)w-jcVNk5l@W|zOAlgSrb4f zz%?J8)lTQ@19?}tMbJcT%4=!o{mkXDImk+=Fy9|Nnxh#!Vn6QKzi9TG?Lk>tdwnO7 zNVk_nLZGc!hVde*;=iddo8>13=lbsu1D-nRhKeo*l zUqdtZ|L7I3+Q3DNBdlA{TAL1o2XA0jHHlXCI<#0K{tVZ6YHgD6)IBiL$WH|v{}J&n4%J)??jCOzaGXy1yLtm*DG85;X%HS)x3mkE#0ej0 zCunQXPRUc+(Obb^gK*D;NfTfV+x)9gLz?ACe$rP*oa_Mu6U!_i-a z&!QV(H8aq9qnxAwuJgi$bnK)`kmW^G4};V}ey3n43uM*I-HVvgLA*`uY>+s&q*a1$;|D` zChVM4w-rWN_>3q|Dv9;}U4!Sj4+rGB$c4}hwXl#QWR!lj8Sz?|(K~lbab{&x^_pgy z^kcd?9`vlf9sRTek8Q1 zmA*4LVFvEI-Kg4jE|E3y3eqM1wwzZQ*gtK^mW-zw0WM%3UtTn4xgHERaRi9KG?Kc) z2Mn^D6R^eR<*PmCXF5-9^u+|Q;<~>%kCht&cCQ=wddsOLdL$(PErTWgQ2!APv>W^a`?`x z3085y$*! z0k?R&?RLn^OF=tCBf)ANc74MQz2>gfhEqfGst7#GCem^Bi^b z_0-|xBR0a@2O9PrMtD?-$Wb$?ZXv6?&BYuuzN$+;U4K*)I+viMcY|IL?A%>9E&&dT`GPO>98cZamKWVuqXSuirqv<+~e$;n*k7>GG5nB+#E0ZU9GWB#JQ z^F61bYRh+I3$H2UwT?=!n(!Y_fQx^Q{=^A* z9RyB-X6RkF*zO2mA#4#Ibn!Ky5FzmjszK;E5d1MUd5>r;8C8vERTA)&bse~o3LIyzcQ2vwr z9r{27h^foVzOjOp$5;yT(WA%DOz9e}vT9ctB!Wb}k=GZM1w0NJ0Ahniq9DL-3O1kP59y`%PoJoO!eUp1X#m5J_G}3Kq4SeWf|?-3^Sr)uccMxa?1U)G@9N3+Kp3n6 zj$2K+AcV!mzh1r~`g%8Vd)?0S(REY?55tCiD;4IFRb-Xs`YAekgYLVn+be#ec1>XS zh{_u#c}A36D0rU&*pZ=$4d|SeYRn%)9LlaOUXY0?2n$8tl_R-xiG1yw$J~!`9nO1s zZoTwIf*_X9j*(^98znAi6qHJShcW zJgh6e!=zgO00F6>2VFb5gwuu`@o}4>^PU_14^wBs6$Jxz>tPrMknS$&M!M6Nl9EPh zXpolfVGvMIT6*Y|?(XjHl*pq!6H zFz+k8h2CWi01xeSQcy`Ppl)b@KcGm4UWQeA1EM$GqNs@ZXX$T1nYpCZ=HxOdIqcEg+->$i*vt{WNaFi8+>N zCRQ^8W*eijDpMvU<8?ED9WYPK<6b$Ufu_FS&X$t5`?^dLzEmMk{jyZn<-D*!-sD(MHUVB(~oOE_=v6zo2Vo6Drk zwMkw&hJZt*M{S#!KU00|-*laTM}@*RcAIX6um++%-u@lTN>*NM1f=ulyRz4JIiF zT6y0T=|Q@1lbYlB#lJOO?3iqg=srIB#52Orvbo~X%O;&miW^0Ak>lS}KZO0U`Rmh2 ze|zVVH~oE%4>U&z!?R3FCjYmz740k?x@nwugVRfMs?a6Ek?i%iyE6*QlZU&_$S8JU z29IUu1adH{BtWVMG~!}!MHG9Ed5J1@srY{2wgxG=4Cw|qaZf+6h)Be+MBkXYTDzl{ zf;~2vbNs}eROD)fW?!rq^Sp9d>w@-33QodA6pqa)E$WZ|HUV<>pG`Zi(D%jCBu)|a z>52r1Y(U*1V%_UCO6tIItAnJ;8+EKW?~G~0TuP?vcETGd8Ne^*TFizkCAcF{>B|B% zU-QCRvs%Oj15Y@$5R@%K)Z&^fN7SxDSOZwrWI+X#g_;-=;nd0Qn9M7a8cpvVnuD0N z6L0_}#aBw1$}}ko@KDTsOSYTX5GGRg{x|nc`AYwB`Ts(-X`x>FHs$I;Q7h#IvQz#5 z_k~D&n2aa8H-(bWL80R(;twNIcXHclk`AzaRF-_{vBz$l)M&6&#M^rDJHY|Ux! zBZNYmPuwE+V^HRI>(2~Oynb_kXg`qgfwbvV6Hj zP;Y(6>W!A_B}Y2NU#f^Il`0M}pSSI8%6nd9yF`T}eEQ&%{zZjwb`0?IW)z;sY(B-t zY8*|0qCNkW`R%yh7%CyLy#^rDw}$^#PTH!yJSd{4RzA07)@r@Kp(jZ>Q}oaY7rj{j z7w2b{uW!zv&S*bENwTNHH@zqY2ohtTT--vSHNw?gTUliiyK@<|grSrMU5otkAP)X@ zXWm;EE`W_Au{!VvGGNho=i7dN^UXi5^|auXY5Q9*tw-L|OY^f6jK=7`>y?e2plEWT z*16d7fUNaVC7mi-B;duld?!!%I}cpr=vXQMZ#K3DFiyqw-{C`0?8L$u+*z| z$9fa&I{&`=Mrl$&awnD>F=X32tFjVo%X)zBL{4_YSYA>Rl4Ht;8g~(J6`{#XGrr?= z@bs@(CJCuwWi(=Bt(X-MuL%}cm!Ki@Ys@gF{PY2{=8-ang^Q_ZxcMseBQlmEE%(MW zYs%3>qtXHp6?`>@$Qv>C4oWc4X*Kr4!m5W+vK(o6G^rh}*u&XXvonE1VK*q!mZ!Z_ zn1+B7N^U>eicS1r2GFie7q)<+`3Hawdn~dqu{EP0z>mz+e$s&pAI}))T+DOEw$YV% zsmC}q63Y7bF2@Ge|7CAfAPm5JzPGFKVrt*`NnE>3PNu-^!&MwBRk#JA9q7}?u6}Qk zh=F-5!O*=q(gTa#^Vl!n@2}GR^|8ZQOZp=7?Z&RU9xsOavB%keKOWghjI$FCns*>u zUbApjlp$y7XmOfggdG8#bPGNbeMMlgl0-=)N0`lEI<#^${$vzEf1^d-F^1ls%T)e- z%td@*D6t~KB6qJ0#g0B|HjU&jI-A_NXG!zZ#VsH{T{i3oKLl<)^qSe`b2FeBP`43 zabI%3&tSvR10Rfw@+!{HWBIMBWazuE=4Za%+TM$n*0GrwLGA?L4&DxTsg|jG^4GH0 zbDxW~)|b{6J)5>u2`=ikb5>&+HH;|-og5@N)^Im=VrDYHdOo&jQ!U|G|1>2iwh>G6 zp}<31R2k*KMhe>#&S+0o`^}7B+nf6<&-hyzQ3Ub-vBpoLJxf#b(Jrk$Zyiwz9Tq9^ zqR=JiebxgFNQrNkrx6453CFEUJeFetB~DGRog{_(CvlD9MeyZ#WnBBtrW%sd_lhVT zOrS0S-tQl@*(QT51dS8oqkdZUeAC8*jIgop>+UP$bWkIP!Qf(m?^COpH>_1tJrXcp z)^hN8ZFEUGf5}N&$;i`Amd$@c-{<~ir)xk=@U#citIHR3N~k^qcbuEeFQTlg!B8$x!n#*sr=XgeL|_Ly;JUBN zgv964e!uOuemLMtdo%_oETs6SOXcmSfot{ASOfBPu;^=Dz@^T`gwN?V+wpt_XaDO> zN?Yn>y);(&VFhxCa4uoTYLYpn@bR8&`_ZiAwLCAwoNSAwKH5>gh);=^e=kw|fF4@L z8#(E3MF{cFdkAY-alq=wS2G@dsLf)_Z%r)4q<_CrwX_(>#)4vy#e{&erfMFz7AC0+ z`)@;6@auYRA@Qk@rA#hIR}JkUN8T76UXdUomfx!Lv~5LxmC=Jj;&E6j7#6GCw*E}` zy;P1n(@sykAbVuPPnlvCv$b|khKu*mxwKH}Kcpu!!zvyV1H`$+Wf!?m|0E_ml%+n{={#!{yAZ9rt zyTM8Sk3s-+C(?0A*J>(Zt=84OhqUYnQrv6}STz3zlWKyrgOh+3X-SObZy@NS$TI;v34%0Nh+5nREs|l)RrV&FC^o9S9b{doo zwUH`y1XiEpG(GghbG7CTP=4$_$Oc}#i`n(v#2?)^H*&B)j*;YgUq&5E$wQ&Wnd4w- z5x~~x_hX>FT_xLiZo2&iyrfrQfg#n;v-Yq9hTac{k16oj(acc9+h@&RJLq`%u7M`n zj&D<=zJgAQ*gz1*Y<5#IXt1q%gvh9$13j^n)BOf)sjG^zP7C0ztw>da5PWmQW3T2@ zwvuP&Zg<}H86tZ`GA1;q7C^c9yg+HDzijVCr23c|N3(f!@P4$03v(YW6YCc=NN^{W zVg5q;+wr2sa%=&)#0%FEVEXoJw8e#2Qi$OZrTKp=ZLd)a0p}Zf4W9d{y!^Zan~@S` zzDM#$knjA~7Rihi2*I{&;`)?aBUV*EQ-VIds(Y_@O*pVQP9n;Do%Nlp|3VKFyaa5;qQsk z@QD3J#3$9V0c1GybkqYjXL3voS>^twXqKl6752ZPXzubw{Yjf!=XG5u%6{AI%-yrG zp(<8a+Qd0Ci341XXXvD zB5uhC>BJ5tgxUa{@+bCH(*H=? zjx!C)Ym&+`yE0rl;+RE)&0$h^%}R(F@F9S*j5Jc>#XY$OF-V3!{&T55`%w|`d>%v~ z=#B3ExHy?v3c(Pj-%FiWoRFmETjfy;yp+q^?N-(=7VmMXEp4}X10qRLWvS7_P|J^| zyeejTk8nL#M+{jhHfxdJbTW+gl)kmvqEBDB=IryQOGo6p2CWtUtOe{>-yxz^TIobC z`?;zPwtDo5(BT)wtVYNJCN<#B`}6C^8E^h*?30uAIN#m=_429@ml3;rT8w@wA| zK97!$#2j(m->*?#R&{@TOL)=lx*giU<$1(L45lt29Xf~SqNX<(ssLJ+(C$8i7DX_A zDL^05%(+an{izL@hp%H{5FUHpp%!+3iI!&AOd@Kd zxAhQbu|Jg5Exqm+kHIXES_wT~PmX?`2f2%iJhpP5SJ+Kq0_LYIn*KHV*qACVp7=$D zlF}ghx!F!;Rs)e&-k@IjOR>HjcR5^Lg_Y2CT$s@U(QjqYB_qYvw3syHeI7#MC>m+N zO8JJZ$g+RhbI~gc#$HgwOJ;FCsGI={w43YyN@0yGMRaYss^k&FO zIy)o@KC05h^rO{h&fjJPP+Lo7JTuGT1}V};U8@JqzS>T@Uwp=E&RF8{3*qb<_&&W0 z#}bSF*8dGDab~~y3lS`;pbiKBBQvXvHZNem=x;_Fm<;_cr)tUD@j|dtVh4?qTF_^b z%ZFZ%^IkL|yVUm@b>!Ffv@zVCh12m*ih$fU++!7>R`;3G=ZIuaV;i6!x|N%d*5^`T zO1!VX@AP;=dXl6bV-Tj8hK(KG*rB@!8=T8^T*KdKCHdd*9j|x1LXYk<{QwRykp2T4# z6u@7Z%+MD!bIZ3!+qzV%an)e|^`KMiZ?HY`A>G=?RX?~m)DmdshdS5bES7LgN>YxC zDX@MIC}`7@de(+Yi9F=Ld&W;miPfh{jSgJG`h?x#)<6f$Fh)80ffy+sbvWL9vkM%5 z-K{FtP0f+y-OaLE{|3yHj$YXE%(SUJUIMn zK1miwVos8Y?kYgrzCv1b19&!Qe^R<8aCzLTHr_GO&%oYNEq}FAP8BxGyNONg4Q1o6 zzOO_0SeE4GrmP!sEwVP{drR~QpGo>6GyWPv;s(E+j@{c-a1e99=D|G$w5(scy02K5600z(3(RIKSSo66M z`J_%jFSypD7fggx5{HILg#uQAwTM^ANA_FS!yUDfJ}D`O)dUH*a}5jSdPOczAILNs zz_rE5B;%#+eAs=J&qhY2&_2M4*`FoCEwdHvAZ=NuqvuV=IUbg)5PWjPoyAud+PdPw>Vfa>O_M9{CC>j)=z6G@D*5 z9~_#-w(m%hJ)1Wch4ve7@vpMBKjO(_hL$EI`%#YoD52ff!ToU_f1{>`g|w*uSv#sc z%%X8H_5J)hw{MvzbLTx%Ti8u4q{6xAP;+Rr<3>-m2cD2Y)ofXCUAfp=WdL{Qr9a%%dGz*x7wC^1J?T-aC0~ zKff)^i$9Fd2JU;?vc-o4OI@4jKuV5}m`v zZ_O7cZ8e&UQQ;42~N`(K(9ism#HmvB=+)vqJ3uyvX)gZKh)+ z;np%eQ-yq5|7D)7>kRETK6{Fi(eH)sjxgm4tE2UY67r9F3-Uyt01wKp-uu)4O9qn6 z6k7*N2B3ZRH+NOfZ_3jj{$s?Tk%H2R5=f$~*MpivPb&sDGS{sRN1_J15CN`PT0|Up zlpM^xZ@Wx1l(I8sqmQRf5pCIYtCvJV(KnGX?0BDM-@HyMJZaL0!I2}#BJd)4<`v?)q=(AgtygY z>kJD%+O>E*@!O{_Ps30Y!>1vDDH2*asZuG!4&10DFrxg${u2lw3W^pd@=TLLToHqO zk|WZB8U6;xpa7XI^D^oK;SGgIy`vEfX6TW!IvK+y5W6yfXVoBs12*YT)Evf)v~@yZ zKeG=-uLFCX#Q@%uh2V)9S39TSOOafn;#}VMtU;gnLr7L_VJ*kSEGpTVEv=^h0&ZBU zS?~{qC1s(Rr3@XZ1!gs^2!SLR!$)eOR=+Pv-$Q~Ek$h6XluS+5dDRu8m+&@J^UY;z zk6tb@>fZ^PKfbgZZ6btYU_A0@0GO+1|CJe80*inFt)76FK)m5QM@2PM8*#i+39PV zP*m66j+)P~ebds?i}T0Z50YP^01vqP#d9s%qY>(Qg?NJgaR>DDc*l~YIS1G)0G&}M zS^RfvOaYHY;tKs-t=!1DvWp9t)_@#AlG46#CDk+{o8_{ePSuyF0sLxhnL!3)?)cw~ zYTdV*#!y2NsVHIvUbZ;5MrA}s?%ecO$$`&1*zNA8W#Wf7aaojgxMk4HCX&M*m9F9Z zV&hjQ zPUQ=qG^8I^F_hzdC1eMGP)CMj&{8aes+{eMak0QXj~AaNuZbr$$_@p=IWGrjlXqL3 z#G9ORZalGbzEk=cO_y7itqJRQ^%E=(?O(a$Qz>FfIV60%-^C|K#w&Y1bT%IWe|i( zdJFS~(bO3QXaRLf2gjqEDhYK0GeE*=?9ab4{6S69j{jPmx&4`)I@1pHIz$(AAs0v! z33D?FU9C%W!UFVxSgY|nX194DCiBJ&PrCQ3M6FoRYccgXG^dkBwo#?Q&SF)T+Z9?q z%#~QBtLZsH!lyk%+vcT56+F?)`X%H&P2Lw(MN}jaikSPRsY< zr0IO-zj#sS#yn|%{vgDa&oW5>ik7;!63NB9(QV+7048G&D&MnGgH~TDFmmWtAhHVS zjhDELW6M2a1A_KL5V9k3_{@i5lJ??=xUsW9Y z9S1x*ehG6h;_<}eNa6MJD*d_8_4YKrxAw{w*`oUN{vsg?{(i=Poh^Fw^iL1V9_&+A zgv}!H&aMOf722-Q%^I2R{?O3xm0-I<;e`G3qj07{OKR|;+Gj35e3xFGfKASA!g+F+ zfkLY`w%46Lst*8t*hW97L>*oBIH^MK=lk&92ocJdncT#W=NtteB?EuvjEB|kPmL-{ zoQ+2+U{rc@rARaJB2&~62E1ipa7yNT{=!HM8`*t^SW1rW-wVDbAR?d|)l;*}MZAY{ zki=m(dw*sj6)o>TZ#bcN<4Kys_%RYa&=;Qi!;E$6epsZR;{1@0!jFgzWd_vnOoa_ai|Ai7CAT~bmRsR zk;DoRLZ_>g^wL$X%+3*_lp!tNuC_=;Tb|8lhWS1v6+AvY-3`&Ga;2?1HZ&*>JVug= z(6x#&6rm`P2>V5yo!}s^8c@fk60yU!7-|;_Y$-=$JMD?H13V`55O{Oqy~jV~5f=j?&G= zC=st_4>j5d<{04c-(;>hRzeN_MJJ}nAeR+KyN`$dpv8=VGb&>vX=B<$$!J(fJ?6HX zI%lr9(j@V_Lk3#WYqc1x^JiO&5UF+%m`B5Gjz4!ez~bO7KZ*TW5}lOm`aPP;dot1k zdLGfTbXz1av)Zl;?Um};m%CN24m?kWd4BND<;x|>Ket??-M^@Wf`?PF;tO5>8^R zzb;McI_4t+d1)fnEmi&SfRk;u?d7VX=WI`lhmUYK;DtB?d{}R8L^eXw{u1U6ev$`gGo1+zfIcNMrLelzfX{@?h;z`X^pT;8EWoBwQMAedeEdu;2vl>D%zg_tPGQ7 z;>C_0DGn&7=>2uf?c>QUpqx@WYvy^=rKAzg8V6=XxZ_UYQ&N=fIGo- zXi_2XJ#-Hai1YNt2x~^lGd3{)+Lu$AxqVhui3^S(z5398rG%{Dmkzch?e@arRW3~H z;LD)->ckM zHuv2yi<|koqjFtFOTc<&tY~dHz&!!HPgb6G>^tb;Q!Gr1f0Z4PY!`^UFv!5et`W_G zhYptlwMSnExujSgtv_d7!uECG?Im{GM3tNgllt;Wxh~>uVqE-q*kx)cXT zD$+6ADSMv$ExLhcyD5|K;%nD_4bn65)u}cd$$ZR5MXpZ`CUsai!(1KH1-4+(wea>5 zD!zqxfR?JrWx(d~v6D-4RfOr2J1I%%nwN2@*sGt=9t!z@*4*BAok8y}+v7T_Tf(lN zZu$UrVc!#tC{@sl&k3CLnIxsxT9hH|Z)<*p1E~spG|7{R&b)CE#o)Eo)&Javc`UXj z);7rtFyG*?Mfy9!&ZnG~;+EI9Qp_L-uRs#}3|Chb(XoZuFfu@BqHRbD1bLt9GEyos z%n#H?(RQn%q-mlFygEV_b|yo3U(VBkcSed1=m)iff~@s%>gC|S{|6@Hdeu~%>bQcI zZ?`u`p$;b@4W`;X%30A+Jiptqa(aVPt&ONRAZ>eiA^Ub`{L<_x>~hG`N;YS4cYiwA+C(L-YS1 zVjX%Mw2mcy2x|V!OD`12?a(3O$})9g`oT+^E|s60F?Ft=*eZdqI3)`#pZ+edEv%-W z^L12$cpdtD=eicKvFop`LV2u=Fh4n=%wVwi>EO%=(p13uIrQ65`Dg}!YA3U?ks;0u zDJ`<)xtZE?IH*gAEzjk-x%!RbpC9RV;^SY8Y=j{#hewb6mtuI(7xeb$fVU^eIKYc} z(dOFg4(Gs6GY?A<^Qp&PD@1PONn*u3Hv2CFKwYM?)np!t6dX3*={d_)j9tLr{Ap8m zZ%96Yyo%wCEM>c|M*AE5Q`dsC(Bgi}Xpg3^Yd;a@eh}t>wj+|*{oa6xdH(k<_g)Ot z5Efd66x~=DnjsBL+t(TE1m|Nq>wMH$J1IojM z-t9EggDB-70!dP8FZY*Jo9aVbh54;8K1v>2PQmc`D@V&|{j{XmTA!H4^Ue|zy~Jkv zV@6en#;3RR=IfjYlFNZ#ATX2T??SET2vxF(X-$1J!#F)dY#8m#IUR!9un2A7+gHXY zC;c%rxSEF;6^71qDOT9-Q&PoO=a&`LxRTa&4MOcbs(oiUNNXY!5M7maDMtKXyw>QZ zFIAzFn3MtNl{mFX-MaRpSlgA&HDDL#)Bwa^e+oJ28A7hic9e{u3LthNu(zKs%ZTps z7ZBJ@c#B8Yf&tn*Jgx_S;xU>Gu_h=0PHpCF9Z%yJ)1Po%+v=x%zHXye@}-L1;sAHV zzP&zUDGF5jepB(@{GEV-{d)FKL^8`6`6!vk^HnF=FApI%Ams$%%~iy8%Q7>J=I5V= zsg!p!I;li*K6@;_Z7Y6{BOFL+j+X5Iip@m)50mBX|5f*VqexeN{U0V}b2RRN>H2Nr z`G0`4pf}{(lMI`izWDX;`S;#eotg3Rr%mR{?1*OuL(Qoj!B*Ns+OQ1Y8 z>wYeq#OQ-qoEMeMY z8KH;>4T%mfzH-<01KOf&Q75K>l}VRLQ&1$!x|{*xyEK|=sOA}_^A(s+YHA>oDFUuo zxoFvYx~Q~U*!I-8Jwk&%t`hMV%D@iLgoY`FacL9E&6@&(zFs7Q^_6DzaQQ6K27OyywX2ZO6+hzQr4I)RSCbX@bM5!XT?lx_(5g#y9mRlT?4cnjHfZucT+auv$nPAK=s2lWMJXi#n zQn`;mxC?Y*#*F1t++2pOSmsBczgaLb{$ourFOay^t*G0+_^q(tdYXa08Zh4KwbUxt zN%`|X+kez6ku`nBqML?N;!+1g(EwHEF50^u0AWN1$zGb;Q=tx-iB&cwlw#W=e^ zB2BWi-o=s+HX$F*5nI zwXcEo*s(Ml760Ft)CV8}8LF&gsuVobmK}pKPb%@)37ne8zFcvBWc;dQ)9ziL9gtwA zdNB5{ib~#VOl7}$_cKVyl@Wkb1j*fLnW*J@#7?SAL{fy`8`O=xua9e|sr%)558Hc& zXeX1lzHdtN{vzCNnWiilg6P=xR>o8mv}7)xyX*`ne&X1O-xK$ey4IfIwiCo(MrFua zy3r=4-F7pRN)8>HZ+r!2*DNWSqEdK@c?NrrZQcEs{W@V29jO+;-bJbxG%<5;qFSbW zb6;6$*`>}0L>38F;o~0Vxqe!x%FoTuSEcm7bLPzj0+zYGUY`ZFC$}#vt!~B3CxiZw z+v(cc#@kCR^;z{|=5WgNhLM7pd5dMu*%56a5O-2Q5bDCUnFQjaTnTE##Koka(d(** z1wrwxn9SqkG5?Z-Y4I$jFn~dP2qErV@(5}f%Fjt!>wiE#nAh8G0N&f7^)<@RhwXUL zkB4%qg@9qYw$a?QAKAXy=iq&KvMOh0-8u(=%@#iSk`>IVRG ze$R34gH|7r14T^aX7ldmP=Tp)Gfeu9y^VLEZD(XI~^xNT}Tl`n1W-E*Bp>i(^FiLI{ zm_k)S?e#Bn_-3d7Yv1Z!W?bO!s&|1@4LQwuvLSMo=IfQiPT(G8={RT6lf;@>mk zC7w4WK;?p{jf0x2W3NX#+l=XcqEjbX_HDla7yp4`G>Es9$3HP7rC}wZ+bp+bzr~S# zIq0DZ8|=>+OPvgKTZ>RR6juc#N*v-QrWdxFI;3BOn3D#?wW{pRre_{GsEB=7^MBJE zV0#Kr(ZI$K`*;L<(8*3wiZvPTx_NVo2qa+k`n$)CC2&~TFYGc5xB1LqaRN0f-|&w= zMXBR*>F1ggyL5xTNrqv!4ETip*u-#Yuu)xnb_e3q%4A4!PWiURUe`q+JKRqnB?HdC zqfoA0`AlfmYLSvH0qwv-XQNGw>eeCU9rEUz|Km4EJtKX^6~BoOmOuM4#q$`MjUkrD zE~+|rztAoMl(>kS7-KmdmV&CxD+>U>tywq&*7=YV_fZa z#CwBx4bPz^+3?GR)1!Vju4u(;|79g9b*U1Na)b96>Mey!-i8??m%(5!kU{{q?#(he zH*8}YSqW1A;9;1hBf-?Hd*@>1YeLc_#83ku} zWCXAlC#|Uz>j7jjCZRp)M`k?0fUtr08Fa{KRVX znbT=azVB8(`R7|Gc}EbHdhU(4iDnkoekTa~aF?VYn5V=KWFnfa-(UoCD1`vc86>e8 z`<4~wIcv5Nn2pCCYQls9c5+YU-&#ygC9}=YfTn8gvBv83HEUAiQVRR4T*p@B(oCb083$r=4 zTnks8yAHjfMTp-dhv!hDtf;S9%Y2PHQNHaMeDpCkr+GhDY6L4arjLYjWg~*r38(z_ z9q@~g#VJog3o`P61(Jm{ybmRVso_l(_(_wsG7t2SUc8AuZ zR=Ctre)Q|uUnPm|gM&)+Bc;gj|CzuZPvQ?)|JMYTfy@Da&D=+>B#OEoLEIrwj%)^5 zU34d|5kFbqWp8Xv8ceZl}w#OvGUjF^^=_WqCklx!c4-j3(o6iKGdcs8D-)b)*j22P)8K4Xt5-O)W?u=g=p9nz(&6Ye{2lhA zi9@_>qlH;cURJiOMkI0v_cbALZX?5WeDJCM-)({4bG1JBeM2fCpdiB3HXo%5stJ(1$O%4JJMq zxTCy*0tl9#w}_RAKc2dEBJ-O!^J#0oIgp;}6Ni6-FJ`HtA zk01i>F((mkSpDlyOvFew1N(f*sbRjRaBw%jBLdvLCKb9lj z%CzETNqM*T^n?6qSSYB_ki9NjoYLM;#*fLwO zHJ0EsXkrLA!<+P9llhrNBa5d3gE8XgJEXVI%8ZL)}M0G~&I%i*VAz9;>D0=%~oL4oK2kM=P106%IUEzKqDSR@&kk{t<0{a z<&^8)FFYhpZ9t{e4q|VIysD1nCC**=hb9-9=vc;c7 zNuwL)jG}gYA{6Wc+8jbSD(u>?-pRulpf!9!h35v60aa*yGJ?Fey^INM%|s4wheBb7 zJNdbmX_0xW`x_mUj$$J~BJMi&-Y0a~vQiG!3FD!`zaJd*%}q@W9H^}!rl#nZ6-a6H zOQPHJ6`Pe-STGmB0eY}+$e*cq9LA#CFxc1dA#_q){s#nPwuXR0sral1B(Ws#hnLh=B=HPx4T&8_~B ze}SW0>G~nD#E^T3a11?)$>4JKLiX$?q6akcF;Y$C3?K3Zmw8V7gRkZuR?rC8TD3&M z96JZ_>ORtOAmHJ(H9LjJ|3s27?R7KYmEe4OhWKoVZO0jwOGd`t7XY}V3leE;Bs1JM z2aT7bFKQ{&s6@>!8*N@1u+40SU>_Nt`ID5GOZDDfhmMHcJ=k}I zFF!&5m~0QD;tgdc(Is0n1oLAJ|LA>4p5@^XE*tVv$y>uQcvSS1O1_~`BCiBy{CZus zu@QEa|C_vW+k-CoZP+NQeV@xty!rL|8t2N*vRxs|bSZ(0dou3N++A2@cn|FT+>p)K!ua%Vp3fi}_rj=US9*cIFRrsvCa0IS=vhBcB)xF3&*R zcOyxMbIz@X_Wyj+AT1#w?t-D`Djm&Yk@x9!`PsA*lF49m!Jv;{zm{A6t&m)DC}YL{ zs79%)|7XA-;j}Io$sDEIXJk~;_rBp&acMlNc;xpkTO%o3n$D6 z53~ObRSlPT#B1=z`OYS^b>64a@A$Mawk7!WvMJ#Vv#Fla(O4TtOsye_}ngk_&ENjEJL!qV=LQ> zx?S^`10^kC(Ew_}>uvmd3~~|6s1$z*Y;70YVh?Q}&r|LxBR_UO0=cEqp0YHjr<1d^ zC&qX<{hFwu4G{!r_+u5Zpx&h_Jo9(e5JY)FS?p%m2Hqx$JCdzFlKA<`cH+C1*Jj?E zTSW{&J4=;gGZRML3PTMd*|oS>@5t_zs9hKe=~pSPy?iZR#BfW>&*_e>wOMv^0zx>! z_Th&>%ed;^=x5K3_r!@*L1~KWy^Y++FWWn_V*_@Ahl-lzpLL>qRZ6kA;k~RG`T*7|rJcW1zU1q!M0uAp__pS9jq4TUJxzIr?2`PL}pl;;^?d!uYSMsT|o_hi-cf;s*~n1#IG@=Vhhd0sd>smY}Y(~vgu?L>wHjCA%C@%KCP z&*!{?&}A-R93`Be)J%X3ns;Tn2y^O=P4WFRMU|emn!=Rwz(j3Rd69?z0md^!a~oUE zn7k{qk>-+?bOXf5FEQ>kHreagfueXcP9SP@fpxDm88Rcn4SLELjsEV^4DWm#E1RE^ z-YgI11;&}G-2V*@kt9k&nrnhWriHO|_bJdxLA>LVBfHSe80nzqLZYKz3TkydrIju^ zCV<+wUW@w<+cY#bGDpAG14rb zN8}Y|pV6Do3wmMEHmg91LaCHFSwgbWlmYK}HC5d9ZMGuaw#(1{;aXOOsZ=YJ^XO3D zs+O3Df9uP^I1NrV=;+lm7u!}5xth*XYt#bIBl54h>`hU^s~j#bKYoq1N27hVY(^rs zD_yOWytap^yk*Rzd?V`;GD`ilATrKz4e)RHqbJdR3)#)M@(>83U~n73|M+$F-!=Zt zKHz5mpdtw8!d|uULfn2y+#c|dc9T|YxP>*TYpJ(ijldpu>z zub9U==TXKZ&yKQV7>L)n0B*!I6bf~_hgC287}v5GoYGn^AoF{J$zzeq8hT8nCxFDd zbxzx2g~kYGLo0o5RmE{Z>`0hDyvlRckZH*vrF;P!TfD|^?k)g`m7)(2iwt41Tx7Y> z3Y*u+Ysbx|<+)(`{qItZX2%wm8AFOmr>!3@35RPSqB}oV&tj5neuQVxzrPYmFf3}^?m_@R8uIO*l* zt-DIBNvaKo`U_7j3bR`YF3HXg`36d}McST5zHGco>9tJG9*znf$UJQ9rvN4-o{Otb z>wp|J_D|-?mp#!q`@VaqkCx{FPn6Y{d^Qc7&%~B%vC(P6SL8%-C#x-BU${E9{}y5n zV^r*+b)~OOx|fyQuP$3B6s1s_errY;gSH%YPp4wpKkgd#66%$8nvx!QY#2}t0kxSzj@}%X5 z+`=wkfrH?$b(n}V)tSNy%R7p2gs0|HeAdeZq`ckJh45XAjhZ=&TlnpT)fba;xg0wr zYM9*QNuA@BW(}ki1+m#KP-Rao)wCUpyi|~312gbt3W8JUc1q77cWWj4ho#t z=KG?8E)g^91e07w>>tuV)EApI^QKZety18}jeu9bLaIetzIyFH!9Q{IWCM7qgo;zX z`Co_;0VKm0&JvTL8$C@$%|Pb4OLMfyK31+$u2aPE^+5KnIHX=3%SdW{!9K=0_G&R3 zYB>T|57@r#Jx5@KJrP*x{{Y%RCBMXCQJlA6vKeq6NgbkiuXccawh}hY&$1|JUD?&i z@<;Y!2Jo~Z5N$hUb~cRpvyB>?3TSM!Y(;Lb zYYExM78jYBVI94nY6)um2Bu7wq`CPI;1sR?4o3c6)1m2e=aF@^N*=v*L z*ct?3-8N*sM=uUfBjC*f;Av(!dqz07+1HA4K^Y3M2MW~UnL4mD!x|vN`JdG0bUNZ@ z+oBBH1R=Kpw5xNie|`dM0-x)(F@Y@vCo>qY9Zb^-GFEW16VS{xE9>UEgY$d~fY55U zk76$8d`BrJ_>Ou3S=_OLG%W7+Y{9HcLC6G{cWn}AP7o*ATDcylUPj=x_N~^#br=0N z_JAL@!zl!d6D(~9U6dt)9-A|{#?gU z_or{M2WwV)uzRNR+-@g{65mZ^j!y9vVq9_T&@V#JKJ^O?QZN~|vBt1x22ej5b#dzC znS|HLAV;o^?ZFpZmlH%!y~V9@ zW_vcTO!aKVc0SL_8qZJ81Lim0!OP3|jc1QR_KnS*2An=UaV60V`cM+!hU1_3AYfjPCKkFI^9EG*1KmJow&dKFi8L ze6_~4o@GBM?JV(`RolTerP?7lzYp!+n6+(b z*#gb#IsD}FOgsgHyVVcQ?IfRTS=U<(86?K`z&7}0S@(~kl$VoLenwt>^+l{7Jo5C@ zUzLwOdS9*~8wUg437|i4;1Jez6VT&HWC9;ry+VdMkwx+` zuy7-T4zL*n(6_dAODG)1JCJ~AWQWAuM5g+B5P7Yw;@#`QuJ@zZ?^|_E`QisE)}qq7 zav`NT%ViB-EX#n58?WJ1*BY5-KfWt|8`vK~Tn~jrTcm zYPG;1eHvr{fmH47*|8={D#JO7a}~2xO=G>BDMM8WK>umDv!ynadZ5$;r5-5tz~`<9 zf&d(-P|1lLRwlih7C}#RCtvlPN8gvO1Con`E{&c=EO}#T3ocrnACSZg@;}RDj zOu0^`{X&I646;15cMcggKaFCps9u$-I?IWkuIx4V4&q>>Co4UL?2Pqr^wfiS0TwZ{ zjsIAlVWo$$m_l|CGSbt~>=a#S5fDO}kN?787F>jqwOLkBEzk{+p1=n# zwkZncCg7jZo?9(646%M=%v%RwXr0()fbyi%Dh=bQmc1391PUy}02c5qp&g58LvlXxBKTx^IcfmxI-@78WMrV=Iu}L0%IMo0>8tIn# zB^dt!o@#AO1(l4?24rqMUHqQ@HZacDiX9w~DP{YOaj%2`(4rjL-7QskkGU0liuzqU z+Q7V*`W~MHz3)!)Q-%y*&qab%AZ)0$im#_OrO{(*&T;1)k5Rf87A>oxpl0 zI3hSTB|rG1|6A@jI4G5QMDxuf0Awn(Aou^;SMq6c(T*ipF6e7cI8n$JOWoC{ilo`Bx5w5ynJ>&b~52YHw!G_&QgDx4?E09{V;jnw~ps6IsKV@6uVO*2b ziJx$$Ereus^1L+c97>cDFK>{@%#6%q4deuqBn~Rz3xO3r--2=M69mI{Xj*#~$MoX$ zZFOKCP7N|5Gk^Hn1!;fcNht@*&t`<{E%t}9;#1e5vz(4h6$Op(H^B-mt@TFd(f#(% zbASDpQjY-Sj{aTt%^SWCpM76i4<3?%6Az~BQ{9al8ydj?xenMf2XVm-r>6mTm~pfQ z9jXm&P3mSTg=P40>-AS92&eQ;fc*0j-_$rj^j9~4=#`<34(2+rGpQu91U!05Ds!+$ zb1llWune>%!y<*jCe)+Z532ugyXw^pex?sN9V0#OC!H0_dP%)vdh!Z%S+Jr5_~TaS z3?=iY9RNgN4Imde9GY-+moqgtvTFH!a`WbO!)O%>TY+ljXgHnW3}_;Fz8_AD)z#df z2H*ATGW`5^WZyj}GG0Qw8bE_14{zA-v^Ow_fLXt0-}t`NzyaKuWz1eb{kAmTb5!bg zWgpjcG%km$3~)dLb`>y{F5qB8BOMzQRHftyYRkwpC#w^ipVV0?3Z^G100#^m)<6E+ z|4}YpnRe8+@#oV|-!ET&lFuj@LtCxvh6;FYYXjpr0GMus0NnBl%pI_UP!eSTRLtO< zbV7iYe`Ht!0MiphUXOXOp`{HO1h+njJ6(Ii21xIPO(kxC^sPff;$L9qIfA3DASXB1 zm9Fe4vNpt~XQk!P7m~Yi|9ofO7tik9$ZW9@kdQnu^&8(QWYQ&Ynl?AG`h`LKP+J?r z{jyl6Q_sl!YheKa6Yfw}Kt|7e zEZxWNLJH2BbcYnQ%?Y6Y=J#HfH^2AKIm_xqaN{5R?r%w3OJO#voE10@xHSd#NZfCV z>dlTr5ZIxOOGcQ?Zz12~Otw#m+wN$9%>)i6kf#X4d64uImW;BPe<^qS@2vTO){Gbu-%O zeO?9$tYr-nAfXi5`Zb7^YjyftW~YaZ{>1FVs&{HTl`)c`} z{wszsNPq-01f+JuZ2=LgwQtYb&{ljdOulw8QffmexPM#`y{BDSv(CW-hkuR0rCbcZ?VUxJD+2M&o+Zq z)Q8LC*j|g}+dad#vwREuPH;RjXc>^aGRK4DVjVPZ&sL<_&p4-8qz)uMsx&@h`i*(- z=({xE@te=p=m>02Bx35e{65i<^AZAhzEG*a_-nrZD>8oRti)td_T7C1b6$GgrO-N@ z=aD&Dq}J$i?5hgsP#kYu({mnbYN-YQmOfrf*K?jfLBRZaphcqe{Jt3ftZm%b11wfSzGcW$(0|-cn;-r0 zPAOkol&X~^<1l0y*!rv_15Y^Uy8%Ju>VCqwyhAw$4d>M{Jkg;3O_1>0lf-PZBPq z69vsLAZsw^XBEEhdiqj*D7r5e>o8-NEc3KO@P1G@M(ERLP(HB>^re&CnWFE5Pb$F3 zG~yHdS5{Vs{^4`Kh`-zf6X}{-Ufv?NZcWJRufJphZwR2L?d{DsUzJJNHLHPjId<&0 z4DH$vUq1qupu^IIR#CAgAAa}_f_N_B8Lhy5iOJB;-SWT#j{u7?j`vrkS<94_VXXyQ zUm1uq@CAP)7hJ}lMQW9hbj zDbrw?^y+X*_CfjDE};T@>*l<1l(nxjI?vDDN`T|p4hzK16!i@zy;BW9x=v7iYJ15* zuz*Dg9Y0vnyA%Ru%aGo!tH)CIl}V+#Ar2)VcOhhLA|w6E5>`R@&NecAA^TUER#*y^ zKN@WbK&P>XhFbz`2&ShYhcYqdmt`2LdiriNN+OwIXjp3l+ZKTjTP;*}m|xK*m{uHPRb)Dl2g>D_c=sW&_yT8W=9(U|)=T6IBvSzlyPL zK>bh}E5SBcS=EGcDsU{aFkmeBymN-7o{MY(=`AoljRaO(44{Dl4frDyf?a5wq_Kzh zhcYpG-i)R8&IZHQM?*ugg=}9m&c(peJ~bIdeW~er31BB90oec<*iu!6PZ%$)@BE#5 z4V!77GPw{qMc@#hF$SCz3S3h~$8I#A9J^qyfoX^}utg(?i{lu=d~6haT?DDqVTEM_vXt|w|B32cJ54UE7ljj z`w31ZfPiaywoh5$D^?>?3Dz8yr8q#gAOBER2lg1?e=(nB0@!`?3&v^0`e;}t3zSOr z@^oU|XtrS;Hv8HO;$gqwuUJ9=4T1F36L@_D(GxVS!gUy(dISMbxK1LFp7X8B=o_zz z|MC?XvSks_efCeXc`pF`edJ&MEBofeceaI@0?2Ai06Fgsfd(o|7?(aU2eM6u!5Tnb ze!7tmfU1}N{_k=!oM5Pat@nW1_onzj;mwLiYhY*@8Z2MuOZz zovi^n8JUNpa&zQ{+#J3RK<2#B%zE&=KY9{@Am#2@s;++fTT&K@O83spV}As!S(Q5v zNc)lF#^#`a7H#Y5DuBN0!TZsGSLR>%2N^=}LoJy7(n%!Xld-GkrT?eD#+#Auki@p; zx^@H{1X2SIrVwy|I>{KHkEl(h3hB-j1QGy1ECQPYne20cH>mrQ^*sWH^lE^ZHGtTU z%njE@#^m4r{x?hjPp&qddgdwlxi39n^i>`^kMkKv-O-W0zntY6-5voQ$~w*KBI`7U zwE-5p(I10&Zs%_d%i{d3^c=Zgs-cUn!3qCKNECqHux}oqwvbeTd9CB%F@XC!O;fxk z=mqS%U}w)q{HIS#Z71eA{HZL?P6_{7j=B%@AxMfKZZZRt1)UPWyuFOfkBvP@>ir>k%dCxD*WCke{` zEQ@(>;T=l54*w|gcu$qX?$ZJL&31|xYa3<_X#)t8?{f{JXaG4$LqoFv-L#480tQ92 zA|Qiog<4i!9RNpF768UgIm^pcu#43KzyU&)_3WORK>afpFU#2ZOVaPssa}8J4w?D* zj5Oc#1u3h_Y}0eoPCdp6o`2)LGxFTu{1@Gw_4D_C=eOj@f#TXovsHNE#x(5AE9PEP z-^?cVY;8k*tMYj2n-gH;Mm7}6o_?%}JjDSL7pr|N zClhF%fQvS~GmDjVmYGJT0e-fFIP7FI3WDc6&7es#UpqzDcWQ6teg&d)P2H0NoXoYw zoXK>t23u+`z=_rxhwWg7D3T))7)Nk0L9T^}0@>|soYt;ZfDkS^0R-vwmMr*286ar!T+s*vRvU{3Gc6yC*U8G(_^Xfros zt!?aq5%l#jFoEyPR;<69U9G>fUp>L|)Pe2waD7}3{~5(?ut4@&GVkTsAz*T2kU|iC zvN3ZXc{Y7-1W{8IaL%BRUXbb#;O|zHO+3o8y!~dGl#N z^VMd|yX{v!j{TJnwq$bXGt<<^J1S+ z2cs{kdKsA_b{~}Rxi@6t;+xvcygy@=V1B>-QEA_MNFqVJg94L9nO|}@g!*$8Cx6+q z002M$NklUkAt=V0__07OaSP1~Z1tXL9^-Y;m44pBUrz zV2eZp*S~N~aU9XdNq=v5-#&bn<2o1N^NbjsgnbH+zf{L(6Q{?#GZOgted&DW*~GT3 z`l5kTO8Uonf&lhn>B%^-K$40?AQG=vQbT({dA_-yf*bf9?xVwt^^@5<_`>9kee zyfK&9&ft5l4Qc_Jw+Af+VJlz;KYb^~VP_}tN<$;;Als}*B^vt)d?_z)#5k>mzC{cN zGPHHHVx0TXlJs+DwkEEvH32|B2EhDlSbsLkU`l^4@!I%5^;Nl)ZZn$noPR@H`P0;l$<8K9+y`SZ+x+_Q3hc zc3FhpTnwpPLpI-)iz!7dmoT+HY~-oFb7RGJIZ?U?@57YpuDM=yksA={tb;Uu8mXN~d>}0QB0crO#3ilzO1l z1En4)^}sgvz@_s)G{y}A38hr*|!G+V_1`8F`t2{%zi9WD9=I>v>Svc$FXQc`t_Oy z%b90CKG*j+K=fp!Ut6&p=L9zM`sh@&i(#Y(czPMi9)%1c1R2x#YG?18oxTpBb<8-^ zsn~Cq&?rJ6J?{gRU>Xq2wcvV`!A09bwv*V+vr--Nrx;9PF#P%ujokL+(_r%7oMBq) za(>d;?gyZVssB2`Y|zr$W!maIF86Py4h*5MeYjrB;bK3hwvI}JoBm&ep=BCn1#G9& zum^_#0QlwQ&VE?MGl*2ku{kKdtN25T^JpB~z@l$h>B&r=R4{26tOH9JnJ1k>2#{|{Wpv`OyRd8VPJIl`GWVfGh|E}|h0*N*Y;?vZG3Y3rI z*_)ZX2EbJ%t~G9=hv|UQd9#>lhwazp{9XdkJA0(`dow){3`b>ng2pwG?)FCM!QXaC z{py(1t)?1Gzwz8V0M8)p-=RS{blX5mQ|2r0fY~j*u|?C!SHS6eWE}`UGC2=`yEO+M z7y@%a^~Q5QzB&P?47hr*M#wj<`?b+IiGVqia%4{r=D$>joZV@E8`$J)TmUrAU!O9p zPYe(^j52@JpS9U#gyPLy{ehk6$ z1ktNOFdUkbpnuvGSTkK?=xCvlQJD>uJ-G#Jto%y|))>>@{AX!@;G|SFCWC%wUi_9c zAAdlqJCZ=|#5qO!LZ)tlm$@e9TCBOg4Qm)MeE~$T5*i*hfZysp`?IEs*W(NMq;AA^ z5O`rg<6!QsZR?eq_*6=9q3f3Gz&$$Mx&m){9S9=&)*4*cX#Nz;z(0VWD6CjeSAG9}8x zWFJI3I7TT9uw)w8T?yI zL1YPVBUaFN6@tDkU^t&UUK_zVQLqW~UFsG{&kSzV^Xx&RCJi>gJNbaPStkR)sVDLo zrjTVPhA}{vom_pb*G&M#JoMn+9ebeX)M1W^%IN4Y9C|lp*RH*?dp8;EQkjwTT>Ixz zI3#EO;?HCVPW)P=h)ySq3t_nlr+4?$KP9V`79f|IHMkW2yTFF z+Az&Tkg&@@r({-_XpqBL$iMV!ms|aeDQ%J=H7=eF7pB663k1Lv8|nB zs0=m|X2uR{;Pp!900A475*R)waWKKwH-iiSPW$bar6>ZQ0)FYb z?`Z=*iuk4_3dX)B0Ne5bwZvxUWMTM*v?7QD4|(D;{1?thO?M}<09wypVn>!Q1mE$m z34vH7A0WVl0QIV>C4dwx+fz%d^f;|WqHSe@ecPvIF{5(Yk$*@E8Eop0a9 zb-)b3oYi1*ZCVc!DKsD>67j$;jBExjK>asfdqY;Di_)ArUE7|B@30*la zbzeBlXpO|a&3v%~=r0eC%isL@A7MVX^w4bO{`$ZDSMtO|_hmbzsQaR^B?N4*uY+J8 z+`XecYxx>%&V#69Q`ffZxcde>kR7htl#vfGKWn8$+WGO-Ndvy5j!s?u(qj{y#D1GXY9mGm;&h#5eQa5v+p;%y0IM1t=#Fd36IYSb@LxOi#LA zq3xF7d8aKTU4L_(I5!hEYg9YXna66zSlX96F!#6(bk%xv{bC2uT5Rm2c#l-#okH;B zT0+O7`uRaMAEC6sh?f-=m+1UHj`CZq!)NjbTuffvH%*$(K_Sm)#%Z5l_$lUBO{DEtR zdESjr&{>~?RnrAU5JXQOp4;nGu%}%|QgAbwqd5l9RIL3izbMO9J8nZcc#Xli$;w=VsedEQ+zPXr8ZBkUZGq z*Vpvv%HdqXU?aQ<+0tV>IXD`ZKKmTjewfBgbUuLJVUN2G*OQw45+vyjbK`^`O zf@(`EqzxQbNpO5BP~I8Xz;Q%-RCR0-Joqcp*k=U_vu!H?_r@zS+j{KncYe1r5OBN@ z1fR@0V1eZUj^|j%cD}bV3CD_#Co{He5 zFWi~X!Q!wb%)S1ibUyo~O=o({bPc+lnK776#{MqeZ02n(+wG^mYt{FvAb#4Q=+n&w znzz@(Ae!3RjW!+HgQ-6}{hBgY&sH<|`^X zPa2 zz<~cU&dosNQgibpNO2Bp< zTFdFFDY@Kw)@Oq!;mlhnl2|@7L+2M^4>fh4& zx!PwrwpAgp&6Xs9-foTLda?zQEs$)1WD6u)V3k^+r|Wey5mrVgG6h5e(-Y+C0hpUi zWmG_^Owu64Kd!HY&}czNzeX>+#}K6tgRvcrN2T2X?Uwn|-o#TEvcs=oy=wFU>vlC zh79)O3C}RzX9ho{;CW?$VJ;i}&vA6w$H!VHGpuU>j4LiUMosFhLX?{dgZ&ilkK+ZD z=IXTz>Y?Sb?h2-NmH^hzgX{GeUD8Nm1MBIS;a?=y7zItKQ%Kp6s;U`iun;(_*NL=L zqmVi>^c^I7BOT2ObfM#51Wsl;jS_Y8M7nmg?MVQAwAM-POSA>X5fIbbK}HCX3b0t$ zmIo{FiI$hh@ddtC7-fe2r%X@J$j=^s)%?DB_eN=`4>&pyJ|wR6@Qj+w>~S0pa!M}7 zrS*-DvHomZKNt`l1L4jMwPwHlZyIblr!V!HO+^3?HrFP`^coJdZ96NnQ zHa>ETR3yk;AFJGW_m2*79*|?$rg;vT{5bb+YGF#s0I)CK@(3v79~t<9ShK3Yngzgt zig$EWTnF|`<=t>pff0=|3r3v&=k`g?t#?Ubd1CFT<;J_D!-fvF$@VLf-E&#W@3X2VEzqmyr_53G`BUqkTf^^#L*2VtbhaO)Krokr^8 zVldUm2^x=dt#I4bQELMNs7GdGW*Ok4o-+YuH6aLcV>_uCtl9aDk)bheTykb0L29mxdr6U0K@gCKggOE~E|@~ZT`_L{8S zx!dm~4R>5T+Z04!+1LbDy3JC6KNatUTLzFNpy>J=B)h&|H%DA*&}aahGY63KSNBN&2oJKpo(}4G+B=LCnmm<}k4P!Mg~? zP%u610~Bw^8JR_3KqNVL_>h#|aVvn#3+Ep8Ihg?LkGi}lztFI!ao=Eno9UYkjm&r! z7*p)?BCQiR;`OFTb)BQDGN6Ki6}C+!(z&|bpNRnW5Del7tZ<=>9*ncdqy}5Yz9YTz z#jpQN50AJkF3y)f`0Qt;5w9M>Ta^HdrKZLHCa~Sfh|aX``Ct*Xg+Tgg02hkl7~Xxe z0P-TRhoEqR!zuljj>-7ta{$_oOCB=O5J;Z|=kTfv89c%E-go{DnHY9SQDdVNH8e_2 zi38M#Ri6>`>5M$sU}~HEhfbj!_vKb8zW#c&bNtTKezXy+31Iej`l<&u0}sC8xw#&^ zXNeI=jE}P|ky?8`ct*=ALC_SzVTlTLaW{ZK><8=*6lNmeYZz}fgG8^nTF1|#f3ofE z{y8$z51>-~@5*x3br6Agv=b|1Jm1$*fFeo0P>>**iU&5`QP>JKdjwfLhlV;~!?^gi*^vtw;^Xvbwbhm@ZC5F83J@?DUe&by+j#}Q`{mAsz)$cF^)>ITqWl7|3 z^VH0YoVnC*Dv$@;;kpJ#H$Q#>;BMF`?SO9^m|uv#(-H%izr1&~u(VP4q+IHBKv~5F zInq=U-}t()q?Owe2|zzRQ)Pg%^odZXq7AeZSxOdT(`4-x5UAh{vu!@(??NE*lmYA# zET}B5dcHl+H}kvx%gC4^u!9z3EQ|lU!+9L%i)5r{_LE`&p=r~ms1JtgWtca_I|eEF z2?HQ2s@9n?f_7$tR~aKygAB{;vm{KSZ>bPqn&x#oJzdFh{92z=9W zc~AYlW4H%z5U>&_;rX|l;0OcUuVe;XJuAMY>KybT5->?ovKlRcnZKC%ib6jk!R73` z**Rd|+VKB`Y)in@eThwu2&q?{m&D-<$h{4U*3@ z63|n#t+3&4>|!4@P9D~IZ-`0>V;zLq#o6AWe{UenHg6&1~8i=?NHPQ z!wK8NVUu?lpb=BX; z_9OY%B*yEM*PfFy*c&szrc5DuSnt#SDW!X{tvC)P)tt5Xezg)Ujau>_)lB8#=Z zCR!8C7-|Q>v7g&PG1S{^rg{4seD)K-KTJ-5fDc(B!v(n5$46UN+g|`r;`nD1&7c_V z8duZ4loViEz&OwM+UFZV)tCjQ#IVL6I`k~Y(sa2OtnsC##YVU5@9zbEV+sJ~a*PKg zx*Nr*Q^u$5#ypwdH??^&yGwOVqg({3$KfL{`EQ%q#K=ZpUCp49JUM>sC`g~Yu@VP$8ofX;fzeOyap7~qex$U z@Zdo>n(0Ufvjo!K??T$@9XocIDpG;#Xg>>3asWU~#g|MjHrSPh0Xpk#wh|iLXc*2e z1lT%0eLHHi%)$2H1tUFK=_xci5YR!T(-s0d2&AX@+52FereawSXZlhMO7?Y@vQD;f zG8NL8N}&;j2EAMuRjDXt%ntaA2W(qBV?LS266zC-Fb*TRtz7fq09cy9`V3=)C&)ft znVMvDdKEx97DFjco}QkT*49=zb?TIyIdjG=`}+EzZ2G`pxJK5lT`N0x?vxvEyb(%f z@Uwtc3d4~L?|>TpQeXsj9Bn**|Ni~*8h|yF97JAk-MUroy6Y||jm|Un!HG9B-HvBg z21S7w8g0%+avrqHSmg#9QyL$+zCj$i8B?*joj;H}(B4s{>s(lXM zXF4Njcva>EWu@mkt@X9f30-GBytv*V!1Mh*Ofd^!OI;}xq&c)P!Sgxj{U{6rzG71zzq(K$*-O{W{SS&&K*)(5-{+4!R9lZhIc!R*be)W!W?O= zb{yo&I+ukx%cf=_2g_?+MPP0b<}wR5y?M?7yGJVj1i%Hea7Hkl z<>r>E1?PuuumSyv01tTHB<6SgUXf)#6Jz4lC~p;jJ`>-d6mO<+P_td=z-2a;!lGRN zxASUfucyBFe@SCiu@nL15wA?)xt~1OAvb;IA;~VvkN31?J#Mfcz&6XF-q(HJIJ@%l zGXbDRkR-p+_-@8KchwY^wGCTMJ^kPEkooUqSC@>v`KDCvz2AR7-btjff9YA7*mS+o zRSLm^l#e<8N=n}^_eoxTljN@nfUtaE`k6^{Km?r6({al=9a%<70oG1rZX0jihmRbV zIRr$N-f&CMDYF(o-_m+b+%9u8mp+f}1BXFWma!k48O?I|)D`1EcNC(>WR)LIhbbbC3#k zLo(9SIZK_e7(ouUZa6VGC?_8Mw$yFdCIzK|fG#~>m*W7g&Oi?>sjkya5toDA9WpZ1 zFFQZP43#4bTtpZ~d z;6uPsyuepw0b_7Af%p`%K{9}Wz>s*sRqk=JcOoO41#ar?ItTp*?0}6mD3y$zvBC4a z{&76NVgyeWlMyR|TzLH@X}afLDP13Uhj}R3xEQ?8`lv1jE=I{fuwRY`fWmn_C$!j6 z7y5U{C24u@N5MijD^uRcb^}hM7G&MIUduo zO8Y@P!T@>pE&Cl}CW09-xyf7#o?(u0{Cw$uJ|^G#L9pW}T>0zPH_0D;^1bH0B8WO3 z8Ap4MqurGeooycqd`M3pj#*SBATQtX4CvV-?d>w!aRmY4IeswxTfs^{F+Pec8whqE zACVl4Ger#zQdr-BF*CdkWM%|`NU&)XZ`~znS%EQp^!#Z_%SWJAb92nL(F6Fr$xa+tONCEt{VIb#ze!s@?P30Ue z5yt*-Wxv(iA~F9b!q&eW_dxsbATl`G0V~QFA8*i$T@RBL2f(YcvIg_sPQW?r#|L54@_U=+?(2{fla!=CG4qUQ&iFJ=yA3b+1o?$U?raBfC+cHW=PF%*zV z8$J$$AH~VqlmQ_1%!~)%`DdlOhu>n6+M0U!7v6#6q66r8EZc$eX9CP^zZUoDyq-h? z6#&u4tC#D%kN|A9Z7O^X1iCUXf%;Pg0^CQD!Gy=@eeik|1}jtNqwR$t`o;DWr?lYz z?2`nW^Eon0HCga&QD5F-vN_r1=sLm01nm=GOTQP{sa5><3H`bp_Zb@K!e`vw>12S= z0B@e_@1J;wa^~Nm;Ae>7THcpBd*&}lok)Sj)Vm3oOk-fCS;ucK=fUxOUWtkWf+vVs z0rA1>p?*9qpMDz7*ZGd=d#C|1e1{p3vmB&ZdcAN<4fY6S#!x38633kI3=T{NeY)01N~=%!A}J=0WoMJD!Zzb0D?IOc{YLGw-OxjSr%| zC(5eC3x92-KE(E6A2MKgj2pCB`TtCig#(i3n8NMLElR3aUeyAfmsya!=qu;Ucv%O( zqDudhPe{@BYbC3^S~r2jt}qyt)JC}^JBIkfTHOtAZ6Mc;YN7{GChW8`vt#}`|tl{$}X@+qlBa{1C_ zd{Zl-ThS)wMmr)~BeKBl+xNJPj*ZAQJFkNtRtb>rQRyE*#%Fwla&z-#_l>tmRb>Uf zN0-gJ&wA2d&kSTH>mtT7X23af=9s+p`YW*GXG%ju6IkRMk&&z#V+yX1hj!}JF*ybh zJ+nmC)iwZ2u?LrMfceBcq=1DUvn_0k9ssja?eyzZ?!|#38J>X73On3tODN$PuRoHu z5iIlpd%D)iW}nw>58uB2*M@ms?@5>8nCPRi(9@0vISPL1r$JUUy=$n(;I5UG8rPM#L|dpg9~^L9p6;Q2qvdc!6^ht zEz~e%b|&~wQzEK?!(m})HO7^2&bEw9q>W7rC|4i;@Q3C5-~YbqlZ$VHUKPuubd?r>m5b`J%-D1tnJ&k%b`Pu@P0UbbPfP|AEK@8pbtH`v$NCG>*kwp7M`avGY!z? zEc)!c(D<%kdV=;T#7Z)bg~r%n80!c&py9NJY=IEI&s1!4V2r2X#}@W~1EvR1h6ONn zY%ZK9dFWdN71$1YUT+2$^B^*vY@vK-#t=Bs3pOV{`@DjDfGX0>wX(9D{z|qHin7ph z-7&Uh;~6;&73MeA?VueV7fzgh;sEO%wt5F>&+VbYl#zjSonUYT!yt_@WQA2mig=B- zbTmy*5uBv=t1Uq}#VV1MO=SwX&p7YDR zM=_!XzOU^a1M0XWURsiU$kt$Lh40QZwf=!5lWOT^W>B98aR|AlK ze843K{-3YQwvF`(1wagqdZZIsVfK9Xy>H1Q_u~6c270CxCuoy%3fDlJ35E;(M)TXL z!EYw>Py}Fo2b?i**-1sU18Q>h!@v(V?9gxQ=&@q}j897O&KvyqK8s90-nm>E!!suH zGUrab)=B~C$IqRU$;)tH+;*?O4qS0}c1v2_Hc0{4fI=2@0<{TPp)3XfV@{0lZxTSz zk=Kq$*`7Nkqafg%of;gFXbQ)gblTsAyNl$UUi3`zUxH)YfNJ}3osvBBwNTl4u+OokwW zR5;(|9F6^sItqp04)#~SzJ)%^XT$zNA^5xm0abMPp8NS@GB-9ZwQB=R@#dhAf0vHG zCR6S)scK#y7l?iqeZORLVBSC3*Db?GUy-sq?~?R5sI?UgdeVAH&7J&v0P0aid zQo;G3@c`-dOtRUt-x|G>I)5DCC3r8-+EcUwVHp%b& z=DVP4!sY^flX_<~ak&7RhMrprMp_ENw;WH%2AGLJm<%{~;{nhU7*0S}0LTll0lp0- z2o}{$G_zCFGTea-9apZ%6zoNBB`dubOwS&Sd7jZ>lOnwkjPwN3=Y|CLkDUhy22KI7nu$Y?+kO-(tR0!%E0w|9e_V`B`0*I6u0xKghXeN4%xAJ%b@n9h_?ZtYqpA&3e zia;*TTUJZ-J<;bzn;Zf33{bEgy7AOUS@rp@7J&JbLe_ZBxzp3Un1j#Y-NnltLo^s8 zJG%gZ91dV98mNDyyH`#KmM2; zI&dK7No&_N%UA!~{|-BF_-|9p0+w)q2AF36fVO2#0Q?oM$je;-ZzG_IvaSKdFF9G# z?HZLnjMJ3*sv>0ga`fkm0OpVRf%z2x<_Gk6bMPwvW0pAvnNzl|tv2k&t6YVsmkS4= zCkUM1Edt4lFqV?pmqH&2=Lb`m*Yf*S1~z)yX5$fNrXhKff;I?_C76-`#5x2wdcCt? zgC8?M`cNP;!OsK-^V?fixyH=r=kWdK+?sa#M6%mNsw;yOd41Zv16h^uDnp0k+>cp6 zIgca&+XiFW0_eDJ7(u1fyO;s22;cos@!JOg94jq%=4(8L!Ke&MCD_~8kz>qR zLdy;Pt?d1@e-jMN>}nL+sfTfY4lo@VT=6&wa6NqZMY+)G*u!|-`gNP+rknP__CAPT z3@GF`-i!8fNUnHHsIWZ=D&$yPg1M9iF)JYq!Se*Z#|n_;GjRfT5fp{MSPgK{Oi2Wb zYcRI9XJ%H8xz9A%*Ir!@EJ#YxHxSW>EQ?E+VhE0+S;H`@5mFHzLzgSZ1n$VXN7*F3C>Y%^Tuj2LB zX}Qa_R3Nq;SjBgmwlnq}_8}G5v(F+6SR;ZZoM+7KgSfw}dN6da3+QKh{Bkd~uKcDj z8#&v*5B-d`ZDy-k4e=9>)vU)eMBAYMg&Luvf##Xzifu|e;ZlVCzU`9Be4muSf%aqC zFjk9^e<}5k|6INs#nRK$Cr6IFBAYjF1sNc97y{M#O(>LCUU^B*A)vmZybAhLJ~D!h zU|E2Se7(>yJyHX*kG*^EgMA3(E(m@gXkOlUpjBF zrn*w9ssaJf_D!q(-X=Qf?l=uyE>&t^_f<&(=(Q!1%VY~ATOip2$rebqz$&&tD1e?0 zbh0(jC`;v##z{uStI$Z3mtTg7ao{7)eFP%V5Je*xg+^Nf>D6dvHYWJ53r1qtaQ&&q zmAxSnlSwFm{zD)7ko@2WKk#3b%GYk+B`-*rojQP7_F4r9{3V+j2I;SYZ(U;gr!5p{iBH^*FNXJ^YNKJf|p{O3O}_4W1s<7d5Ow4pK(44}XL z_S=P75LC!O|Kf`;S^#?R?i<#Rz%z2Y-6rVcU;gD^_-!3ma=pNBq(cWQJThH8MKz;u!hAOj6=+1Yb=R|07SSqB<&vUAe01Q357 zyky;qaj+|s1

&_Dug6+aW~f4UKaFw)!d5Bi+viL)Jy^4<~A{qZ7tica{tuprXfZ zbi@$UQVwSkg@#WCQ;_Y(X7nM*2>y^Dr6=4qmt$KJK))QVm@LC?0h{%_2;Y zimj)D-LlksEU5fbXWHe&DX@V8IP%DYHwNvSNUaigYG6#ZclN-M-#hQfZ>}woqWm0* zhh4sV004kN2LP}J*)$6B;s+g(xu5KN#z__i>~1sr#|wrhRK4|ERbTw=yNgYibc1wv zw{#<@2of9Flyo<2LQtf;JLE$ONXG`0?k)+54bt6k_?~m`dG7rO)(>;7XU#d^V~p3p zcyvt#*HnhAx3+K*aM`Rn?c6dWsFYD%xS1K8NXmpJLGJqDi~=XEz@pf7kS)kEzV zL+=Z+O1}u(Xa^UKVcsfNDN-qN)SX?ciC-4x4qj>j(F2Pt4h~G(0Y+=>e{S+64@Sxx zWYBu5{J8Lup)CG;;4_(bh*g`ryZzx^YV=AId8+qLwF3xD;d81?Ooc!X2LSo#nF)Yx zYgSmp(E{lroCt-L0!f{*dH_19KBHN@+@f(S5&Ozj0kDk4dd7Znv6)qF1=xQ2ihm*T zn}WczHQw2DUt)?2OfL8=GwA1t|2Ii8cA27051M&iAFVy6YRmRcV!G{-Dl)u&CgfiV z?j=G+UCV7_Da3(1fwYIj;Kzjc6VOnE9 z7DB_3VJzXPsLo$qwd$r(-!m*zyCOhf4YjE@OcwGZd`Yup5|KfgHx$kJ+{ z%X;VvP*e3)?nRz=y6YNw9`-&cdBU0`;{PL+FgiHQ-2AJr^9#2?MIsG%2U9#vrtZz+t5 z#Zz@Mi@0Agd(z~w!1=-~=~~GA~7%gY&lp!yd`!}UH+aoH@ znJx9^$6;x^0T`d?d^XtR*gu#Xupj422U19IWYoa|)~ME2Da?PbDpS}n!fo@SKwJYy z`tn_3IgJh8VW5f;DOdX>LyS7Y&A)9_MzbH^4;!A-_u2)DCIx39C-|dSzoBh@m_JZ(-LYxqX^lf~Qg@ML-Kp}2f9@6EyHhN)p>${3?Z?~6_(I1R^W_npV z&rN#(g1!E?CV)*scx&fFSwB-kx_Iajhns#lSuA?G8$lig@AuA!XbS=7%Zll@;;_5p zVrWB(sastX{`og29AKthCP*@+Mj7y+6L=36$B~3_v9k@QKAo&Sik6i_*MgFN&&FSbCJqZmKz*zP1ei~6BHe3xi|VcUEx3~)Am;oVF{zOLiDc6b z&>>TA%mbi~U;8G!$A@(QD%?sDhxe2009PE_ocGY?d#2rBD z^1v{sMlv%Tb#Kq`2RUgwx&4!L2 z*Bm5s{U?l0sx0oGX*y57yqSIm{y?+6+c9>k|G);f(}rA?XWuV1h^;G^L5)8&>wTF##BtrOPo~F9 z)VRT>kamOpT7JQ6QO%aKI*ak&^AWQ7bnSeCU{-Kr*FYW_%c>a{Uf(? zOX(Y_DFCUlrQS{}eZWCw&D90iPk_B~HIn{(`QR_EdH#`&-S7L!gX)J?$5ozW%dRwm zr%|)S)k?mqSZnEU?s zx$pfSQVg{5L_?n!F_{^+T2`O~T5#R4bK`5Cw1haEDL37YGMgzxI(D3Nvc)q<+|^}`}5pO#EM8&+MA6prj?D8g$rB1LE~rhM}b$ZfdJ{fMb8s*WKR=5 zK*S!#6CDoU>(PQq2KS(C=h)`K;*dh*&tt#dAJk|=p70I0Iu`k+oBBEz8{dKL+?ngBDa&N9ZW%IqCw!eFB=u#bnSnQ-(+!mG%!gfw#7@2vcMN6ie^vF(wA@X5U(tGgkVN9LGf4 z{jxAthJ)^5N9CdK+Um~^Blzs#Xm#I=;^Ml9Z?4(ka)uos?$^>65>*=oAL(DKgSIlv z%d*?k)nX}G7OTK8??7D&%{~<0d#G{nz0p}p0V!k1Iz|h;)l9XM^*;>X>2b>#I61nm zB?cQX`L4-fKG3L{w`e<4+EfH<`Rt6lY$t!OgdW9K=DSaN$HLaFD_Q*l?y;D0=lAJw z5*Us{_Ufz#JRCPoha!yqpOWJ1~DNb%Rz=L|@@zc{_ z?(f#QS!o;l)nU2U*wC{Xf?5jV5$OC+?~$JB>{Jbh0KLehqpRg+!S9qCw$TFVe*yj> zo@*)}L~)8NMn!!Y0h8Kk#OMPqvs$cO%H39u9ejih( zs8TKwo>qL3o%N*=Ie{IA6x`BH$gxaJ+C2P#@3&<&6V!-m;Qu9t8OLLNHKOmcO z=m4{=$lk<;6BYm-_&`6T6Q^F{bi|K&x zWx7W%>BBq<^<(62e}@S6OC2es(EA;Z>_ufsaR@p>Bpp}KOn_&?!<`E98zOnRbF5U- z!IdYG66J#&893gEtEnXqS~pd(BT5WUyd*^e01&;9H3q{vA(>>o&rQ1UNWEP1Rm9Tm z`s(zvn4FawZ=UE-Vej?IG&^|!+ z-$vMaY6FqPc;!@G4DQ|wy;o^y>j2Ph1Yu1#Y{4H;o~A_qW`_?YwmWxo@<>9=HGM-u zy@?M)1Ws!4d9%Ft`1jW<$0ql`3RCQC#-*b+?WETulH%+tPbWvkE_*x!KWhc%uSBJV z*~wx%xIW09@()B$(D|%5FIn0?+yo7VQ#t&R zEEz~HDHhLr`%HGO7BB-sQ+??e8RESjS|#=M?h_xv||dnI5qQje9BC^PXlK6>UtC5 zmM-uY8uCf6ejiH0aaR9OAe8hnh_H=+9vRFX-j&y<+peTKYlVB9gTVybrh(tRR;W*oiIe-(P-rl?#i-T6bO@}yHyiXon2|1_Ryrl z)fe?34NSy9z8miV#rQ-E%o}^qBE_ZEbiCU_EEi><7nY%W5G} z{Zhmqe+ey9-(7lg9y|DkGW3sco(2@4k?-~2nM8=Z2C%>&AOfjt^=+%kIP#H*XX#7B zH{5ae`Atd94{^sFS;y%F^Nxo^zGxTNSRRVC;(~ms4g*mj4Tcas=VluBqp>!jT<))P zTmEUjFC4Jq=U04;3;u2gyxa+WB$q@YIx!1S0j_~VH#ni>9RJPc^S&e!_BRZ`c!`qy z@D1QZR8O<@cd^e$RqKH?h+-Iq^b-i$5i~ya2`4h`v5FSmJF`Ey6l&p~_ZNfjiqO&rBGDQU9h|=E-5O@Lg>5d!c}W$k^m74g zqEXT+*b`CYKXFIBOsiMNzeH_3liT(=vqZ%!PR^eRZyV``!K;7{jrg!5&u8Fwx>6*} z8)TZjKLq$;Az7Czx%uIkxsW`jEqcXaChlVM{e`_aK*C=!~v0CQ$$#ypfOTMaD|aX)Zwo1vfB$m?hyxR$eE&78jhYSN3j(tD?i(mv8!SI& zSf|G;_Nmc)vvn$=iJXfi7NaYxDEE-88;i4i+#Ikty`AX6Xeq>H#y;{dTXyM__HMMD z8UoO+W5S)Ol3Es_b$_G}!#k4MJ8x$at?st9mNr}V9F?IGA2EAJvSKL4Rcl_|%LQy0 zJu_auXUPUZ>F-^e_p0uGWUsa`sRlOR^`2C@!bkCT28T=@U6WGzMLEhC`!>mR=#=Qv z61AxQ!5KlKy?P%)BAukYuvP`gMNnIX_$yIP-7^7BMsvS;+SB}K#7~=^-2a+3ICvbt zdW@cp478p$Etfa)49|Jan0%_){Ph3LnEW(CLdQA#k0_JpH7+WyEf3SCEuerCp^Z<)xu4tMWP!6*N`1Vf5LG3$O%=qcGtf zRzq81=Z}QLgxMyqczdknteWE20}-s@$58^fX)7YbJ3kE+htmph_>JzU>Z1$=H zFUn7w#{x!!qzqmG&quW{4RXlD<`!u0a}j~Dt=Kqu(#|Y^9eu2lC-O2WEy==8O`uq} zdysqFcU{{{@3d@ljH`cAR}@7umm%#RwK4L%Lg@Q{$>6RL6jRdcfT(=^dLIDPml`40 z6w|NY~1q;Zq* z)^e7{-SjwsrBm%N_0h$-WML@T&4UnM$w6YTbs(n<;FD9 zJi;(MS1vxDm;Ee~fybL4t4dMuv0x?F2CblsEkX2H4cYhWR8$8txa2DqI zujQ<{4n0>+gFvT)_hxocKeHbg1po-i&vNddNrf%y_rxsQ;HVd9If)Mu`wx(D>u$bZ zvL9~OnvQb3mPKcYHPnIwiS`Rgt8!Z~5CmDQ?lsSksXIpSeTd0E66vkr65ACS0aJ8S zU#2)2;Q|6Y427eRKy=~sj-Bgba&(TY-#$LYF@mY@9(*uClRX2f?}SH{Zm8cWnBHD` zF?-km_R~+mT87m`)=QQLU{Q4vxpSw_QFtT;M_bo4qL6nr*(0KqtGhU2I$9|dJ9s}9 zC!w=~*hE9)P89)8?jUQqBUPtP`eeVOtD_9ybH)2-Yxu{Z=ma2AB~boz`o<10E0v2Z zZbee!)B9D8s&=(n4p5$j&YdNNY>?jIp&$B3)+wMe1V#-b#=7|a3NcL#=xOfVan4P5 zatUG^&s_RA0QY-t4KZs#4~CGcde@ffhXeO{nggogDJg4|!0{$?I5e*ddQP>*gZz3= z5LfwwSnk%@H_U`i6j22UnMY!IWGI0E_>DgYZgL-(IKHRPIfJELUMkduOV^@ zt26V8QV!;n?4bq*nVQ|&HM;?HU%aE*H~w~*eesHmy6ie5x=RxQr0f5iQ~y1>q)Ej= z@U4$Lo5qtUWOv5#Rj(!#=k+x;iojc|_gXRRtcf!<9uu@-?=wT`_74N#T0gt0rR3%q7eG+jw7X!>Hj8sLkY^pfohl5-{?$NRD3{xJx5r#pTSb!k7$Pp4ed z|7T7V^ky?E8qQe~Dv6HZ5U8Jo>tn4^|BgmFN_Y(Mu`s`YE0WsRnx_K!dY#4~h}!*5 z=HJaOjp)^@Q;R$~D?DYbR@Fr?IVQ=OgSFq9*m6c-1e%pzvn!ly5>6=<$5dKmyCdCK9ldyl-&0@@s@J#wyf=pvF#zS-a5jBc zmdq(&0b}SG(>`;;k|6nva-jpEyvjfX^+5&D0^^WT-{01@ieipzDu*(y%gt7WfvDY~ zbi)&hL!er{K`(!v4lB~pI9oRv387&ldKQ$28R~}ld&naS&^p^rvyU`9m}|K~d{i2f z*Z|5^&+Mip-t;3AbqkXU{er`wUGL8O`@UEzq|G!K<@I>Ty26UT>Zc+VQPs~+hNL}u zcX=(0@h0+PVVz)`Enf=_y=lzaSPK@q;?j(4B+@maiHWe?OUd!Y=f$h${IX@ZtYMiQ zvymg$aa)SYI8*3GZ(qsqeG)KIB+mr3JpBzL1kciNt1W8HWaOQq)xVCMGpj(I@I_S% zT+|c*- z;V4zU@Q{O+p3>U4VgxUTHi_1%N8GO3XzU(P@CWy1m`4GRhB1CW_BKS9u%60b@}Q)K zXNe47kBE(&VHTKa!a$)Se!zt7#^2NU+3ASY$Bu7MNdMkE1nV3V52!fiV_g7j=Hg5k zZyXF%_{g`^Ik<5l(_D4S{`^50k$?!qj-pkF-QT{OuwOyPCFVoDdaIR--czS_qb=|u z6tvO2DfmGv-%%}~AmbLI*oP}n(^remts?D#v)&{p9o2P0W_n-jPV4(lWHm5#Q|tUI zJ`m$u^6n&yxXZD4S<5AK;btwMR|THBMd?iC$}W)ZW~`T;)`GXH0FFX;&KXke{_&;b z6I$<*#v*6d@Bl>(Cz`(x7bj7}x5GmbalcFA4otN1P>y4Rn2T5Em;`WhV^-bV{qyIR zc5iK>GuVx-VBq4#dR@U`@!B=c&Rq-b?p;1g$J1+wT)^t>VL+*4!mfELPKU4Re=84P zf|h1#3VsFREOV9Hi@cr8^Q4-$nVXryDv02u(es=-cpS-z5jm+hOR8->JazgoK=NCE z$IIx#O|swq`SYk1ejnBVUKC6Bi8EBc)-qqJ?7geH>K`WhRc=EnJ<>2W{wDm&#-mTJ za;hMeeqCXnNE>xGGR$BawQ=+J6=I{jx`V!|3#jjI>ewM9A~Li+vSfZm(UnyOTDzLt zA|~I&#=_d7xsnbO8R!yysT4ySproB60eu;)*L<|%)upWU>iJrd3_QwO-P{HaCBEgU zB;%2bPzZlL-<)2&f@0)Po--D_aXR517ti7aZ#4f^s<~cLi?kXWpi(gvg)<#&qhZ&l=wOKhrm1O#s%3RhdHyrn^O5J&yi7X`OX8n>4EQ=3rw|4-_$=pCvrbaBMqh#@^c4ir!V#KNhh2+x1{#`(drTQ^(cA(6h zg0>weFQ@0z-ZZaL#vWMRtx2M<&f#N1_}CkA1sYaGDb#%5IDw$lG+(4EzXinX3LHAVCHJsLeFI=G$98Cv9@WBPZ4r# z$O)q9Wl|Am+{1~!ye|~kN0in*lnP?Jq=Lee^Ya;ej{H_R$7Jp*90i7i?PmK?vQIuY z&#L+kdZS?Fx?z#u*{r{DAL(l)*$|>4JB=5=GkBxOSnijaW!{4lmpsZVne*) zKttmL-NnvT23y_(Zjs_YW=kgMmX<~}0;WjW8i8mmi$3l=^^Mse)n4cSY%N=TCj=vHzW zRjOtU(S)UW%3YWmj~TM|v%Hx%*nzJH)X-^lv8nfAFYMdGn7|R)YK-UiHl5k$)dsLN zbOh~!WDDAk{UVmFP+CEUuuRM)Y%Y%*`E#c|#BP13iFxouL%1i&}07 zfmB+9mOuM?cFHneUnH8?S1 zXZaV=mKd5CW>@1H^Y*uUlmuBxL=RFS*E(kZ1b-9L$JuI`_^&RG?^T^2%>c#{KQm*8 zTXuq}%c?x8K1m{ds_#h&n$lu%L@u+!alAGx9(vO?H}Zg!J!-kN-7$RuPY+Kilwy?X zkp<|Ki(_AdN&Cj?hj2Tu5Sz)oj)yj>jcFHMk1zbm(tS!Mva|tgot=ot?r}Qfg6y|e zKajqo+&jqBOSc4UQtHf$ff^$Z)0BD>QHpViE=>1|YDiq*b-%e4PDE-i)F8jsfO_v*sajv75vN)fK{*c*Dhj-MNPh902P| zJ`2!K&U65QX8~H()2(ik5jLG-K5gOM53H0xJaTkyBqJ%GLCm>@b>G(BUp_e(00`*q zx(1tOhkw4wjp{vjzn6UCxB(O=%{7K`&UQLLY{w!9bw2i;E@02r0+G*-~%F(IkPIS%2EyLG&S)YOOZ@S;uw-)iGH2f91%f$rtilrHS&?v<~( z8g2Bx_;No?P&#TSz0s4dSM8p!v1bSVrDkN9170tyu`*{Te@l?b2}1o?dwbO8mh{7~qAFQ_HU<{YG?w0felD!T(;k?+`X6eaX6B@hSoYS51VF zKVKe-tj0$4njKVz3j)R|%$~OAip{6+29(0TItySDoNZY|6km4XGpvpIL=5C*XPSjK zz>j_9b~Y~&E*UVE5Y9JaUpBwvXEi%J5Er4t|9cBds;weiduKwm+88_*o5$12d#(^` zk=Kc6AGf-8zcA@N^Q8KVhPLH@Frjcd^K`M?J*YJAdKHR4;M9roL|D=&f1*`JiKLS| z%$_jRm?wJtEO^=U@RHb0a0r)hffpheCg02H?@{~iD39G?bX{G6H3K6dAyEQpELPz zdpj%oVP5ADoege#PtvIMLn$dy$k1@mQWk1kc&*8MXkvr>jV$7ESgz$&6noN-2_RpC zAJYqPbIzUT`_lmC*818GyA(95Ak02co8FZW6v z{QCAND?^#x#+3JPhzyRkAgT|LGpUgB%zK-2eM01t`-pt-+q#myrE;O`Tt;^_U0#t4 z6S+(m*Wt=OkwRY5qAfK7>|sr7|iZCVjo(o1e*YevA45x}eBG zId>$z+nUW!k6sG+gQ@zZF<^ifWXu4*)L;kii!u4mDfp^y6!1%&)`NL*TsVLJm5xm6L$XzeI!~oV$2szL{AB^xX2C6kZ zNX%MKPPq&e9zaTmk1zK@Oh9uoh+;89*kbNuXiU#c{3V`@0ZPWr<@vqk^qoGybw&5& zC-TT}<%Fp=u2n#}w2+%# zMw~=i5Lx~}db_z&KYdS$Gd|cY%@s2I9M?zfR)Z78po9^_m5DxWuol3p2xYR0%lPFd z_|=z4PSzI0+fS*vcCQC2YIAIC%2{D0@mpoEwGqW~coT4!3qamGs_D>MyrXVxFH#`q z`Xy5s%yXY3FhzMJ`+_i(i2hiaAiXcCTt|7u`z=S_Mpd|tEGi4JN*se4rfwu}9r(C6 zWFL-`GU>!pcX-iFTd|t>JEb-4?EKEiunupGXJ}rCqAhVp)QW%3w94(voGO1F97^PO zV(ObOJ3*)D4-p_6-KK9kqzIKKr=UqNit|{0J`8O?=afo(KsyoPw_EAfm-({So6jn; zLT?6Ce{>B-*YGrXp19=HNp=?f!k-l#@dvnzYd_8bZ`KK3jdsJX9UU8q7o-1GQ;p7= z%Kss6jLt8}I`<#^@x@9{5W_UDj^*j7JH62VEgqAFjnqJK~a>wgD1 zIkaVEWx-vdfu-H&=R(xOI3Lr(5)<*%5d(~3_N-DCd@-iIf*y;qf{CMNR#L1I`J~$O z*-6_9z2EgP7?rOvTuMl&dpk4{@V{Q)M}UgLu7A;<{U8{A2YJ0e0;8f|{-nDt0&0Ny zwBkH##xasCaellNw$n75eh9kq3S!ND*tfnYH53sRrg(Slci7Bo)A|Ub^54}kOW^fi z$8H(mYIIuVF?+h5%a4PCm`X|)UH(9yTpY>6uZ`dIOVO1b#qBI;-^BI6yez#%jJ zVrnc3SXUF~uM{$^{kwfSpKU8t+2P>A0fZt(hZitRL3zd>uA~|<;VAxDL=F6(D8jee zMUe=HfKM+b<4q-Y)j$gsy>!}poTi*Io~i9d7ip=rKSi|4@`nvPKOy2By}twSSW%Z;4Z8{6IUsn3Epy>%hrkFTxc$C?yIw`Nb6%w{@woS|1R|)`}nS*qB?QE;<_`L(Spde zd5O94f$qrc6A7tD$6O{$p@LEx_)Ry38E`E-k;5Qcn3k-U(Pe}jZ9@L4`?yNfKxWY+68s}MYfiwTL zwP^pa^}(ao03(eak&T3e^kd96fXV*A0=J|>-6SL~F=2Jt6rP60tY>Xw((J{e%P;Ef zHaB0x5unftVXvR~YjyNB;W&v|X9UOgd#;dTXGaB;6tJm6g)P)WXYR`cw!?U2Ilg_> zIM8m7Fb*@kR=4@|-c7*uuuaGbTQ+6y#1>YgUi~SU(T4h92JOM3cP9=DYjVSV!Nn3I zhCW`srj4IZSwEiz6hp6TP44i_?wZ;xn=5jB@KnnrpVi=cKPhjEoD*GPnrZD`jSbnM z5;;n0E0{m?vs!)mMW(e@Z&vy^uPA)t48z+USoHdhaVYXF>Vt|3d-~|?1h{tQZX?xdDP<7Pq7JL85Dg%fpz=w&U ztB!e<6RZ+1rd!25*g>x1hg@j7mQEtk>A$>=lilpmR=Tw7o1L(|)#V4x{3Rhv3mPER z4)+9^igiTiJGAq_v0Oa{p7{wVGKTRVMZ^|9_iNSO)pTPnIIKsV-rCz@DUB8Jr_Vnd zx=4@1{(dHVjVV}ud6#6WIY6keFyLB5Yu!m=c31w6l{KE*N`lCeAKSE~lgp~~8|gjq zn=cm%!0knR95*iH!$J+atENvY_5!8;RMzF+b~d>-YUHpxHnJw+N)5pl9F4QG?pA2i z5b>g(|DaJLKL52!=h+Rw`J&{nzHEyb=gUzXr8IPKQ5G#0*V1LxH!FPW;$$HriO^&!^1~YDc{K z$6z@YhvJ&ag^rVXP+ZkvlnLmYM{ul>?TzB)peU>BZ)q+eJdTb40y_ z`(QObjLG>QR+O2-km;bF;h60Q4)*f1L@}H6dhQ=IL=!p}#({OaeLolOcO{vdbzTPN z8?C7G3KuGTce443s8}>L#OUQLH??qV+$(d^xbGJ>*9Y0ip;pw2>ThbLsM zZjy(6CC*bn3R<~lZIUO11Fm&@ue~`Hr57RuFurfm^#!C10C0IcsDe+L`vo4hGpiXe zyfNH{UqkYs`<9UDsZ`_l@56lFQuJo3M;&bG87tDQL3)Y3+TKR`82_Ir@E%k7GG-MD z^I=T(e>}*lo&f>FX9gR9gL2QB=oqhItlw9{S;IK7&sHb&qJJw94`b8VCZ20+)kS}^ z@l`*)yZ5zgI^9@M&iu4g42-h8(KDKWYnz8-e*Jpp$89_&Vt7gh=vt7Eq)$w7I>O*td}Fl)0BJIvSE@`z#ypNaV>IR3@{r5x`GFA&5hPx1^tN9RGj_Mo#i^?#E~J* zS>1WtQvdU6gDQaqKlF1TmtE^{iCDwWXARXS><8dng7uwjRST_!><1u z=eYK;2cnIayMB+q#`4V1=Q8~q(yJ)({zk>}YYYM9+RppNh3s}`-$`AKac*3wCadZ@ z=8#=XIlWL)AijIU#G1zCxA)Nb-{2kn^(eGGe+)oY)RyecfDSCqA5DFbqS<{n0oddO z!CoU}yMzm_5_hkuq8y#*vUmg^oI%N|Z<~9JuTF<}hxB!%E#*%4RUm)Of*vkTW4zjW zj5p9_uYr@cG>Ly&y@tT}QuO%J=L7}8;9f}Ukx7TYA#KpTOHF(m{lUS3ZcaGh#U=8K z`ZhvOzwfI3D8Tio{i<7@nwo%52_^_Q7n-!RMs+*W+Gpjx@LWRzZ+`OzGL-7%reKrt z}q!pPQK(7|oX4 z+Ms)CGB23hur6s`uXjeKJqMG!t$ojTURw;aI0w#EnVbgW`@?`=9-W>pokrZ?PcYfK z&kpS#d+*$|H8h4o0Ei=hlw`MWJVWlmC`yYZ;F2-<$7?Jl*AsqVE`Z@?*bxOi$X=#|!YZN>(uriD+vYQ_f=lks z44}jO#Y)YSy2)bK<5emq_XO5QKzLmmw+~e4{2|U1MH!d z(y|zMo}Pezd{P7?;=7Ot?jp7vV9Z0@mP#(SOE7NR76pP?n2=f6=R4l z*_n@j_WUl%^lB_3;1-W1-Qpvz;N1v5UY#)@m;o`tQ3q?=3v$dQHt`C06G4yC%Brr> zCYIR47>5m7U}fhQ!aUBKB8Huy45Svu*vV=;Xpr&LgJyjJBwLBV!W26W6WjktuOV;Q zGIUv)(n8%BtUl4l<>Wo@3I)faC|Ag&AVP0Si40Kl3Y|nLb}NgM+U?-k?k4_J_Y~J# z*~&EcU$ywcEs6rY5Z)ug{%PT3!>D1t@SMv+~7~;=VL0wAQ+7m8ff}iAaA<)_-JPXU*xdu1)N6e@~ zc&=XdDliy*?|upjE0&|OWSeshaTMr|ea#n8=fqCm`{Q-iXWC3!(QhrJ0lUa*cuT9n zCty+(lSw7UV)cJf1J~84+?!ZB4btoAp}h=`sSwLOs%q88pL42@82~CGO?m;z(CN9U zGG)|SBRg;P^p4?e_DA_Pvp}coXGmm5cZU+aH1Hxm4A!!e^Lhsnd=G~ZCQ+i8_c zBK_8nLn_7f^XX@VMO9ogSUb$#B9f9sOX*r%fRWD3936@OAo}M4z5}GG4d!^G#Yu%)?(McP=mWMHmaj z2<@9jX*3Ia=q)aD`B<*!%C2s8tnh>Xv1g2t^M}Kntw{RER0vc)!T*RExA!S`h39I^ zm0C=lg1h-mSqDwa7Qm`Wc^*^|+%B%JIG5GN!|R{`9%GZLONaa}ntgqq8b((~qZY;4 zE5*YAY6|7_bp24xc~3b zbGdJ+qB4RWdb8+TdSH+AwY2S+mLm(|+)^Kl!(sRmSzA&?eCrN#yn8qMZO)VnVY*j| z#D3gv`-2BCxGSgqV2DflE~*$u@nBEf>7M^0jY{Q3Os7dUPCvNL>%wR_f58!>Vb@mp z?8Txo=6~-Rym(dLg#$2hfT8>-jx9`h)x2{K<|55Ho6sQ$rLCV!n)LW1kybek6N%eUYHr;_B%u_hlw1(g48M`b^@U; z{AZ-O76bQEU+>6&X-$$xX1|Vv^W#)#pXX@FpFMd?%c#WU4yFv7+(RcvM^Sy&2Ea@2 zTU^Gk{{om~$2D;lk9vSp$(Y$^^Dp2mMMnt*n_|=4obl^}Ib+H#o>EH(!=e@XMZ@PNhVJo(7gUx^mE<3t+k?A1IzUj#Z_-gOB(R5*FOU`| z7Dv1-2RP6pJ8<)wDc@01l5dp;^eMe7;>^bC;^mjXr^nLavaPM;Yw4&T4&88?$x~NY zY189vW^q{=-ki&QM2i#q{{TLi%IgK#^#2}D7%)|0P?WDd`ImoQO&z_IUv}f@@8`Sh z-u`|$?7Z>S#Eee$kepsOa7j8LW{s7Rt;TxQ!ewE7zxJ6+ClJOC|Nfn!i%ikMRd{?V zl@f=_sr@`tPvMT({(19*IpYiJSC!O{S%0cP-bWN%M$NpG`gUY`lZ?tuj~>ef{bBow zA+i2l>ggVM7PE~aL-q-V9{pT`v@N?&RgN!V@s)!<2)h|tep@Kn6%jYj zJEc=2#m>{w;0-72a@n_C;O)3BxZg5+ECy2UHH>d9{RNAI}_2v{~W%Cavv6QG5074IK1DSQ!_~3p=7Sa*}M|1z)L8dr*j>xfb%qQ zzL!PFrlMDJ62SE~9jt|Q!_;=atBloqQE3mfM3uhX^;L4K&t)UEwN&?hIev%Y;NHfi z=I7*?lo=HLds;2Z>UFh!y;h#1Kke`qj3g*rrWRG=1ynVdZE*_UTOa?nu(6^dfZs#_Vo!u7dmJ>fOrKreN+(6mZ-P zJ@<}P_D1dIuJg(7$;CbDyI?TY({=3A`~KcB7(ktwoSWhp`B?Th8~80}&hnoka~9M= z!qaw*<$KO6KAcrM5AB_1h!5WsgocG!M*C6}G`g^wM1tW=1@YS~7}f4H_nYLir1q3D zPghJQ8t729D4~q`_YasC*}c~9dxufgC#e7~df{aW(-!%; zXRHOhxuz-=xmhstVi%o)h zo%}pCL=AApS&x zk^j;lAfSjH|DhRIY91U>I8cLB2-3?xbHtH@g1Rt4ywDmRrySr=gwKEfqyO3&k!{Ao zjqK;J(V1GC4Nnz7K|hzrx2U%R6aeRf*I@+?)qO58DspJ)KX#KwJ`+V9eH(FC>h=BS zJR!%~NB1Ctu=uQJx>}(WVPg86Ki1ouRlUHy0+17qFA%ehCJKE=oV^ina(m{1+eiNU z=^M2`j_T~#=qq|?wl4CyyO;nTrI87KSkRQ0xiv}#CdHlb5my8qo;)QHH>&)XDf-JW z6lo6e(s{{d!7X=w^LEAxeSv>myZRT zKUfvq|B?W2Uj6}w0}}%6wih*a&t=}qT!1YZXEBmA@+&@MF#hd_X1yGn;TEJ+_ueD zqUWQ>09AoSuMqzF!-r0w`UYafA@u<5&krYPkj<+Y3(6=vx*iW1Y|w6*-D|ykg)PP& zZLxR09!3T;_I$o;ALpM)=HD6{Vb|zj=7c7KWYFaPiSw!2>4rMu2h4fwZ%Yo**YiI1 zjBPH-O2Gcnj&+_!zVLZ+3eagqwDl%qIwVTo3-MtpmQ6;ca;M&0}Z90tTYtoU#e8 zq6ONS(EobRMQ|MqES1B3o>q;KizLJ#og0>7b=dJ=08N@6?D-k^*h7SBP!iZ z23}<)BtS1GjNI6v;oee!R`ZI{5!`u6GW}S>b7`4I)xUsU{X9nTGgL)||2d7-GG@S- zKXf`bKAw_fI_UaNHr{o3;LJ5-4Bs!H-e*h8E8T>#G}LSqe%2a!#_OO>Mix&Hq)2(Qd4B^Ui7ES-N@{5J<8@MVzOiLWiX!23x1#bQ8F z2k9F~Y;`x&WCnV&rOW%{xFlhX_mgri+9SF+1of=YxIuxv+X=uLC7AN;5wZLMj?CyN zyU>|ZPGMlmdzeVJ&W>m?^dbax9Fba#gc0@6q=Al==tNG#o* z@BW|9Tj%%TeK6O|{JwL?B=gM5>MpzNEC6WCB^cL6&s#_>0eq;qJ;DS8Bo&CHazfxr zd!!jmN|VU>g{uK|P7CGyGBuZC9o~xo=ut@3e)p5kK!F_UmfNztot^3TmOc>@3xD8e z_7o%M)$f(GcRn~8F5l-^Crd!Xq$0}yfcrqg{kQM1^s{XEb$M8UJ6PGq-zLWRLY#3Q zevKB7@y&XT+bH5m!ZQl^V$~KT*2gOI|6qFZfE0QpzrR}WiNwQGK9$I`0PjR4qmTSv z^d_}c7JucrQi5@mU_#l`$5l?6bI6C9&})V-ll~oD!K{WOJkOq-BERywNB{ZV!+k|V z?6G6|Z^vZ>y~u@FVN|Gt;%bw`^S&jm&$3l-J z2Ix2$_#{K)=&zV1dbMQI$_sW>cmfj>H4JbT(ZpqCr6>NQ1R8B4PBQqyeLoJ43Uk-a zY>TTSxqag$p2Kpj|26R}j}K_%Ubh=#Z1xC z`Ajvew;91`r)6RwU*|g~#zaKF+e{L=SwSl%bg*Jhw7zAEd=XX0`pYBma=CPqn|}ox zr+%X~^ZS{Z=Mw$7WFlIKJF#V9$anzG^=HwH$X^lejvdP-x7X6_Y22I3>$SR7K%O9L zYeUnZyZ8(w0pVW>Mo#Sn%i0VCz;W*O%gTCF3GS5Fvu^O5n}S1u&5CrHKJ@#Z>ysCh zHMoJ9#xbZbGziRHL(ZD+Y`JmYd`*GQ=i`W)6`E4aumECi9k#@8jBiTXvKkvG{nQ`n z*;Zj(+J5%ns1)XPyFH&EIEW&l_Xp9}b0QsE;Oa=`Ksbvzrg)f;@gfRw38cI)dCF&~ zp1L~3jKE9hvNTqM`TyrQUfBUbyJcOURV;8Qi#+1Bqc;P+{08^h)Boj+>D78@4Ok~c z)h{-hCoK=sDD?nS#J;ip98$t#AIgGrfDwFoc|}u7EKFe0LXxHwYw)FFFvG83zc_?` z;*mU;YX+)xoTpSnc__?k_D&poB;$~pVQAf4VPrbyk^q1kAT>m94cJuyGbjnF8V zVOgq1h!vQ(NU5a-0;VmbeW+nm^Ofi#xvOR|MHeDSk%q5pmx2)?tkB5CAI_!o4(Mf{AjU5U3W8f#vaL(*_rnM zQ$F+wbQ>28w!TLiq?eg3#> zXBe*9>F4%~$GeMen=UnEHcn1XHw2Lz>3ZJr55vJDrT2;c*ML6)2KJW(QcX|tS74+G{3|w>pp`Qn2WSWNBxnKxtp;UvWyKzRu}WHq?7A)} zZ8A-+KhBqR0T8p-d7?QXNFZGNgkcjjCuDvGt3ZpEEyFJ44a7r|{MCF7e}D5*`gMH= zJ20R5*19i=PO8T6{NWAJCwh{)MG*Jd)A){M#4nf zI+%V3x$Os(39PoOe)8J)HZk(|Of8ZdxaLXQL~Yym&LcG-x=^=K01z+i3FMTB9SwfU zMS(I*&z_TyM8C1CmSndQUSlE!5d3(9G;zR-4&3YN?mv+rb;f*)3MOm4K1p+^0q#^U z{*WKS3aP6~+kmtlc@4g4%zN`0r_8(tI*qPaV+MqyPDN+hkF_cqr*UY(C8-!Bp%IVIZ|qW~ zYA($fpBos=dx$7pTKQvLd6D7;4rVrljyPUK7v2XEf_w%mald{kZEoxz)w;e@+WtL` zucq0^j}a=5)mBqS>>|D#5!(3kA}KW56B`wu(ZWJH+$Mf9#OkeI>zIt2G4=fpO1q<;WIc(HdkMp*~cWF9HFpZEG7w(MWLSa#Peo_x>{ zKq%jNM@*coh>J9{$UQrNz^nJgPHR{IWeOfi$Q4N$YXR0e76Ucez5ul2V_VS~#?{b! zo_*qR)CxQ^wFz`bcDBddc!rN|L%$cdAnQ4Y)K{ma;4@`ZYHtMpb;sK z$|5K<71!cIz0+aI!!0oEVpaD`q`xqyt*v%ZQ=mi!yTQ}*h1%a4L^Y_BgPk|mandS4 zHrlbwf9*ql@(>xrD|8CPIk2h4OU1)SL(YZZqbcimBPl~kg2FcF`*_z*`4Ii3+_Qx` zpT0U@ucL>hM8i+zM)&JCsT$s%6|J+J4VL1^7ZTb!daFPGcpl9C@*ndZ_veY*Arbf* z@-qmq8&zPTGgvn+#hPPsr2Sr>qkVu!E^=3us|B=f7?QJM(%127-|x4>w9VM{7R6Lq z@Dxd`RIk?&Xjl~3iClId!JcaWnXSTIp^-J5mat9pgZT$dOdOeb(tEatN{qmak#6}y zB(`fz;CL>xZuO}AMh+m0@T~RI8-sWq#_@FDp=F8 z!$MA8t+T(rdZ(2Z!vyFFUg5cfy_&uuZL2)7@wEz4T2+bjuS=cLR4RS1YkoKOBQM&5 zO7lgnEyCS&NjuV9TJr2sXm6oYFSW{u9wjzG)PxP*cED(#u^!YV1@HaadpmL(q<>)f zm6`N)(}7UfJLYK4Ud1-#_EawdjHh=L?4&&1CDbH&(T;OcPFXRMqd`4^?VBV7>@d^- z_6pP)h@YYR2t^JLxN1S_h;jVcKWpgD-IyKHzC?LTy-p05`C5EFMEW%wh`v41V4(G z(?`qN?Y%PUl%R!F?v7nPM8xqoy8>xjQ`O&}{ShZ(;C&s+I@`Sj)7f)w3gvQMzfU3q zJi8A4{_#iUhfef+yxPCaHbcX$-b!2~2gIC)VfMVIPJk;Ksn1=KM0eV^e$3aO?L+5{ zRIFC)H&nY*d@CHshh2uh@ku-Nn|AWA-c7;JmzxeB!se%$L!WjXifhP6Ez&+t4?d42Cq5Aj}C6@l2d0fYgfP>gZua)}P$@F*0hl_I>uWNVNbrMsG7E2381QmM3D#H}a^Na4A0_>0 zez(mXT%I+O2)M{{`lF0PEp@nTs-*>Bw3VE)|Ajmq*l@U5r|5OOf({NQ18^2}U#3(C z$akE@IPWqM_^S03^8Kj8!2&g(bUXxDd01T$zT0Lc5k`Ack4d_D()kkPPJMl3Y_oXN zanpXjTNHQi^&30S=O218dh1$~y57L)Ga~4vf#S)OUIstS2hY-J?JJlOI$b{Dn3hXV zJ7Q_v(p%^&3ugNdY$;{m6 z(kbba8qR~I-xseBxU}34hJ~UQ|N1qmNBn^CfNpRw2-DnoF}u6%mqx%8?#2VN7NgJx zf?poiPnJvB$AK``K4pUvcH<5_I5Y|5lTVon>0kok1^z)MQQ)<#ilHAqMbRJ+ zo_?@((NSLQbX}~W=JN5E3J*0OfXdq)mCa;;zs4&5!D_UR%Y=rN;OHn)Jn9~|9U7wr zMvT_+TY#H69z0zE4>jic%xeZ&r~d}A^>HI8|8d)K4aAz%qYVqBhjCrEdl_ovIij}e zrmg_AYD^*%i3fkkg;yT>%T`Y>O7ByJhp)3|pfwMv!AXc%ysX<(zN^ZnqD#=-f9Nq= z5}lo~z+vGUNX@KWh@MAgsrNF-9~qiziw6R(mljBY6}4S)(P+ba$k4_({iWR`A{{p&rFzb|h5%-zm^feaGFl4G zRPGzMbuNjn{xQ_QLMsSMri^z&M!`` zmZi$izVL(6^wi7ISA^a7TDz7uL++)JQWqRqJW0~>quB!Lr4DGkBakor(Cfg+j2}ykAEU~i2HvR|EFm72oqmaQo>r*iG3i+XVv(GT3NTp(i}P>(QBA9 zBY_M}uTCnG@XYTkG$B?gI7RtVfXt88=||>Ah&v@_{^L1b`F`NHv!{pX^i=%PKkH2qOjGmo$5!knCYv;$H>vTYCIu z3}4OR+XuPZzs)En)Kk%rr#!@&TPf)5T(ztn7_9>V3xCmHJrvM_a)BOMV#Lc`2cG0w z`t|ThH;hAFA%CY6`PPef`eCAT%O>FXJu6E~tm|==kQD7viCJ`jwU?LJ5_jzrf9}oD zj9v8qVF8S}lIOXH$Z(z>uymM@l*VI5+WDJ}I8=#lk##S;B4-JI`Vv}W8Yfs?dzglt z6rJzPn@%TTVYy7+U$Wg0u1#(Q_++RYL0DNcKy;6DoHD2~(r|9`yd!x#!@GFDJNF~& z^JY)p%URU+l4=jCn|xrcZ~;x%7r6P>g?uA^m+$utCi8#szQSXFr-jN* zT7uHy{(M(mD;ejygF{5lr)@&C{pz)o1QJ8O;{C+4)I1q!$5nOKK`P6l@b>{_Ve;W@ z(@+J|Fo40gF=mlYhKuH$jb?J1ds<{kewRdm?dY4oSR$5}OfDWm7fmp~#o%eFWgLI* zJV#dp%15=(O%R+eo0#86DpfT8iELvo5aNzJ`RYye1wXb1%sUTai+wzM;S#hG>7Z#U zL2iY*BV~nSBh*^>(XxxC21gc>g{qdHlw@$el@vEHQL}wQ+kEwS!JWE2tfwsZgkD6f zfb)gsRQJky#F!4Soh+I@KM(M#dY3*JLgR=an1303h)%Q3avK|mV1c+<54{iNureFh zE!cO;vrm3@bk&l5#^XHA@xzq4tS?ybR5ktn7t?r*DV+2`_N|cpQZ&gI4Re}Dz>Yqa zMh%Fk@+R(HAY6N~@ld<~G%;yvm$DEh1R*B)`zPXqfyCXIR| z;85M9(QBG<4qJ+YTc^9Zv#b#q1yZKz3Y%O^Ozm;l1*31i=iHU1tV{o!E5AKkr-aIV zHiFM86B7N6F5M?mbzIX#5G{!Z^8UW5a^93JPXe0iigN53+U^`~s^tg2Ri<={hif>L zWQBzsP(|6-JT82dSls$)))3Eq_Tvi7d%aesfAij=J#eZiFe~{(aO=1f ztV`mze}A2}-|(+Q%g5-m=BZ2fnsJwo?htcT;Tg{g+`U&n^eG1EjAsL)ve!| zGYVMnNWp2yqIur!WGx!oms+Ul_9$BlzVVX!7Bp-|fjAB<2Qo!82uFiJY}yl5DNs$7yq3@!TQ1 z2SS#(C+cf7&J>uJCqajj)5^SsRU^wkV8^Sts53%j0Lf0xm@71~Fq60ZQjA(utCCtg6LKWYlK2%V+x`#96l^Qn@h?z|zV9+^GfdGi5-TnN9l;B$}KNV;zWS)`3TYZdScfXF{<53=P?4Fk-e%##S;CHv3hCPsZQzgsf3ECR8rBXo~XhMBmGx8s9dg#B5 zSCjpDP%}t7=(;ZN4grz3CaZax)%$R?yhD1@Eg7jvzA$|R;PGD|!K(PA3)J60RU%-Z zqDVgdAUj}n72Uo`t*qu3n%n2#uAC%=xOUOOSBSlSoj&v@{ccLU`X)R zz$*Zn-!>vK{yInms{rVBTsKq?zSc7~zXv}MAu)w*Z$wcOT@(BB^z}W!Nd-*>CjVL#0xiw13MaZFe!e6`wereqL*Hy+uPpUCuwc%PLFTBWzT52{4=No> z6PmfS5E_wbExaJ2z9Zf!qb$0hu~Gka0@EN>#Co*pO~u5Rwk_SGt9p7W|Iu_c(dUVY87UXo$+iacCz_2|eY;RbA2+8)#aGPU0@8TjJ^`$dGwG!-`HwvmoQC6n4FbMUP3_#7h3)zz1qL_LUba zNSk$Bz+#^EFiX%?l6m$eHepBcw4c0D4Nyzu=*cImeTy$5UUOk*fRVZ^z@rdJzJYj>%7|)AVL5*F0m%g z`xfEg%v?09sIMKMcQ?hHx zTYkB#W$?hf_vES$r}^fO0X)3hu$G@u2KDr~n4yNvg)W6Jtqhg0^ux zuBJ+%S6f?o;w52lT4a@n>sd`f-42-Ihot%$iG}6etRJAHv)K%? z4gUPWn|8AJ@=b&&e1wsC0!(7uv@TIEXXiX#k#l!q!KlGK%xxl# zy<(|e??>+~L3^i1Sg-$%T(AH#h0K@Kt};i)-T(v^VemqNb27Gi<)$Val0axsFfx<- z*jqHM)^Ffx{1Gb5)+Q=yr*e17HSW-f?C3fZn=6`;`Mo? zxzIbc-H}@=&9mJJri9P1>p^9(qUK9q#cGy2W!SW!2&AI;LM65bs|Fhff5NTK;Cv}t zy7mR%rOFZonRQxk(3iPdQS1D4f@COUmeig5+qIqefK;ZKR@vb`Bvoa1h2gm%R<(c< zF=IX!YBTMevXR^M*Fo{ySedA9EiQrDXh#u{8H2}axwaZ#japgX`(C1c4a?BUUR0>! zUg3{M+w~qv!F?|ppXCkhGWJQz(>m875}1S%p(QN`otc7pG!PgQ3&~ol8)Q>g0kH3!+ttWS?i)3 z?TDTg;po>ouRDplo~M`dKYgXp!$?^D*!yi(Td#>?QwqsZHtv;s`2j=K?A=0Qh2K4<+qebwBS<%G>*fv#t!lr;!fxlVPgFn$^-Z(MiMXl)GB?^-X^H}`8PI1o+UJL;F){#wgHe0SsEVCnS3M=-MFBH~Fcj+8jJZv3C7 z60AHz)`6>u-VX*m|0lP;SSn!j*Ydp~;TDG871D_h#Db9yatEpYUZXjc1>dCwC;WH( zdp$ge$=ycdz2?hIkxz6RCw|fbr$X9l64$(>3A*jF7n?j$iH@69RKNE`wx-{?5>mB%Q0je5^q^kSR??ug3hw4BT?68x^zm0{Br4 zOUXl|>rfUVLdiyy@RaZG??;}F);rhr9M1mrYSnnB129&Vywn&FOL^W z!zN-4j-V5Rx)$LN1*E!anJSm`Ydxo@&AcC{dE^H_BMFI@k@U4dm}qKCr<$e3{t4`D zT;XGsmht_>U1n!!c~Y5-Tt%7#mZOI?=*_q0f#wWn(X!3Q`1LTzm(^*@VH{?SMF zg@uZ5YJOtT@lM=hcE8zvY)BF14~^*IexM_>5_+8cD*2Vj=b#?4!$2a^_6zvh@84cK ziP1`}pH)M4T?d!hho=F)GqkXS+NrK35&;q9IeJXuhCoD2?8Ae?uQrBLGK2hF4`w0zs+ofFG}S{ zihYH5hxK8}c|{&6MPHwRChWysDbmrEPEMnhGH)p@B^u$|j)}UaOri&Kd*wTA#YjJ? zqeneJZl?0^jFj*NYwDgFSG_`P;JMW_5h?%B>@jzxy5lIQ9S>~Y2ZDtYt zN*@~XnopdV(3+k`n-o`m|3iRGq(&a_;gRXVuI!h$U{1m-fYaPl-rj|o1X0K?XQ`^# z;N2K|b9njGpq4r>@m zjeNE?Xt3e)Zvi7+PmWIF42M5!+tc)_cyKHOz02MCX#@->Ie^GqZ*eCa)U%7~+F54q zNNp=ZIGl2K|4Kp(8~N6|!%9mFHNKytJpdW5A^ z)MR9WKn@2*u?za&Qx_y1X`hyrm4QYM>cIPAD7hot?NYj@u>PA1#9e4)+dCg^+*L5c>x{Z~a7o|IIE(S) zy+Q(2TRbt@F1rq@6=jnz9*Arm@-4PB=iS)Z+~|^XDi@}weBzqlxziyDnVH=XxUsMP zE*bJ+xw2^WYs*`jT_eXKhhQ+%XME6Zf1kG5aIisUCK;lGuff%P%C~U5nqK!19ynmC zLFE3e7di%bHjZbEQ4M^u3ppCg6vb0cA29x4(vB8qg%?cUF&v3BK3yuStL8!VE;TST z#7o5m5V>!~;^}U+g7-((_mpmk4wWkm{O$ zpU4Z2avvk6fKu-#&m=A5eNIe9=A#CCAwgAgepFmUPr9dfh2Hds=p0*o&0@@ zA5(r<23g4+*y>kRzyMVuO!p`s1(Yl$EtQ|5nSHIiyv?YC*s26O)v}p#Psvuo2&yIOKCM~ zPnG9S2c#GGJtV=3tpF#m%#!R^(5|5V_t4E8GsK>e8!z?Mzvd-~f)z3&VG4&(T7KYI zc(hkNB}cJ~nzdFz4o8^5Wn#R1Tx0hwdidPbSz4%c*z8w>f?t^WVaiLuMAsLCTF(P& zEY$$EzRF>)R+Pw z!Dp!?iHi|_w}W3zvV$O52bBR+%~J`|A#_ORX*Z_%?trXT7{T84khvx1(dBO}n$*c8 zm}f0qSWs}!uH@%W6)L}7+Pc-ISL__aLX12{5m+~^UPrP+Jj1qj(!#^>*e{3(xPYkN zT{WSf%3qB{B>x;1j+=RbKT_Sz0kBlnJM%*|pTR}e*_Yx%-T2W!0VE3H6BnNsscwnu zLUy1RcgbERJ%#M}r<}PK6W!c~BmLMd4GEPJT?BF2iXs&XA0l=kF5=8cuQL`ATjNe( z&VaM;AGUsKb^~_}P}y&L*zRMT1LQiMuc{wnH-`}5X7;;@D5i3_oGvdgg15hq= z)aeTn&>s4a@e#GY2WqtR?N*y-9vU7bq;)H@q$BWY<4%!?lps@|%&!Wvd^UR#Q>L$_ z7J5#N~Ec34A+zG?8@Od4u`48pVxipV6YQ-&?k$2Un_X z_;Ibxj#OU+1l(*jv^PKXQ1T?DP&H$Sj*9;}eNRQ(1MV<5BdlG%5#>bP9_nSR`+2dL zYU&zhm5o0t8k=jU2mz?+0$i%|fG*VI{xLhoXUG$+QHfm|dyty$^u8qdoP5P+ zt&miM*ry9xjS+MIjmItTg0@d69nzsskt2r4%y?SkEuKNZ@W)4mzgnJR4VzZw>y7HV z+;!<`aw+HyzY1E6w29M(_Kmo38vNIquyL)vl2>vJX;j8O4zcl2BXPW{h%boSTXY91 zjG>5Ekl`IcwI4(`vGeEM-8nMB#p4|DYL?KDuBHs+9WgRq@@4ZMS1c zJTY{b5(lz_KoSAskfwSDk@W;hWh+9+;d8h@1E~XC{yTI6F$(cMF2<`IN|9Q&)(78o zhZMGBWzmIj%sqPm_UbHuw8&^k-uoN0JxdHC>vLwaR6P8=>Cik65K}O-GnUOHM=+$+ zRSbIFHUSN3TGkG+fhF5!ipV^ShN9_@sb;sgC`#_bGIqPBmWbG+W(oA*)$hZ#mKFBgBhGaO`1C*|0c=keLe zM$QTK-FsbUa|V?!$1=r%-ua!Ow6TSbx~5+tU-D0g`sw&`aS*9C44V-#ns~DaG=3!7 z*(uqKGrKrlr&+Q>+dcc;zqvdct422@RXyS;;Z2+k>r%@@ZWq{CwFE@)K^5FmUoN;C zhjEW@mWlOGloIpuxSG}jlZ-u08AI?{C)R-~VM*z-Puzlnm|}$}Kj4z6n2UR;sQv)A znm)DKQ!Cm59+Z1y5z;WzVE~wVf)wyoYJ^*)ijeTukxQeD93rSX&ose7e)w=L#$q2x zgV!n72UJrfJx+bTuLHe_wA@^UKjb0%PiE0(W8%`JBSzv_0kf96$*NpX6p9aYUr`Ng zjjK2oiXYW>Bmwnj%^#6p^|7_T>oOd=r*<~;uDtr{eRo_%dub9i_zCLXY9{T{a*ypJ zwdC;1{TD(1D{H-h5#%#q$Tvc3Tau{N1}veCmNDvk8Mba$`>O6cc`3g65r!&Y8AZUB ztATOM9cjnQq|##VJPCOU@n7<%sB7h^b4EJa%b|IV%R%~1e-MD86Wgcs;zRK2_W531 zhjZ!2uTLjXqI6Awqzn}K)0D!PvyeQ}D|9M`eAC5^7EL&%aaqTRZzZK==}5!IB{!7~ zF;a-a1S#;?%ZOu`WgrIz!w*TY>G@m%2o{Ir0oyDy;occC#UpFI{+yQaoR^H>mcZ6U zrIBzEPn3QJsaC!_Az!+qZYn<*7V{UPD6ch_xqERo0SOgBDPHc)A@ zp?!-bzc!e#SM?_cRq@QTuvCUoS?-AjjP*T-UjO=0*|%c#=K63k0+DavC9#SxhDeBN zF4dS9RhqVgJ0EJskswsi(PrG(Ca)deBWf&dhEs#^RMPB)bsH-pv-K~6o2JeFvqztT z;Sy;yT45%vGX%C4G(0)qgpf2_#d(53YTp@z5_Xz*kY7C~Jmp?EEG40R@>UDACryXi zCobmsZL7`aKZSW=wK}TQoh?26y3F$MOe7_82VUv~axV(YTJfUkT-jCbtj6^9Yd6hQ zhewJzbu_X1OI(3a`YtGWH!(xZk-xk(%;M-X{H19b5^yQ>!F!q1wd4M?+P|l)hGfp9 zq5-8eU|6kZ)2j9TZRL0bl3%0Sv}u3hKP4GQrvC!sX^{oh!B5p0U#<5g~D&1$P6 zWldGof@L=VT#udr-;tjI!@~dWsm?DzBJIil#w;LGIv_c);wIgij zumC1JLFzZ^dacq87sq3tX%GRIGCX8#CAkKDM7^biiM&d2=@8RNZDg?4L^RF%E}nV4_wNT&IrTOqMhYEJ{zB=(oYYRG)-9xCEoqni zI;yYyRLi5M@yJop!E@C1-1zeg-PfZnYYLxg^~TB@`>tAY*;me@3{@?$yqa7Rc^4VO zIZ>_ptBOj|0-K*K_W1T$E+`WL6AzhmhZtXJ-f2TD`BK!Ay-pE%r-M7A*ZQ2 z(9%sTIpMtF;o&>NFRQNol;B$pU3^FPFm&JX{~$3~JVu!CPDpKmobrripF%E@hZscAy>VR8s>^ zA$C`;e#Z#m-T`fE`#g!WEwsQ~K%aw0a$&FQy&@R(8%m)K*+*%9$tHe5rqD~$+s(wz zBiTl1W21}+YkcJEa+9Y$H4BUB8Fvj~HF`uh0r^g9QdE9ZB%(a#u4;B>3@d;Sb>!>= zqCD9TR-<@MwF?b6aaBfPj~b$(2-1|QTYqdjul3Y6-JwqEXVSJ(Y~Lm{?D(Ny%l`!Q z@Ow0J^!w#z8) z6=i{D`=q}7L&>K`b+0DI>hNL~t9XOThm$==jAGY*FH(^p<9(rQ>fb-= zTHhIJQl>P#z^Mkgrqwj&XlJa@i)|hldPH-D{-qk%Ec$iT5NixbNy82kux|q18{V|h zakhG?Z1aiKsdBo=G;fZ0iA0*1{rMz${*9x9islsKh5w7s%FLM0?{V=i=;|`RLx{vq z1}qRAWgmC$j+9U{pXe&6Rm+B^8A3XZ#z7~-%r5R1rF%o(U%VFqx4QF9ThOGek(yYg zm89f!JMNbzt&v=b%O!AD+Pn~fmwxYgosc`nRHGwWau_)f>vjvXauDe)t2q5Uk}AJ5 zkg+h){dg%t3nK4ID6i1>A_eQ_p>_|qun zj`p73EQTY~vQlR<$P5??xa}5hCJ2-!v8~>22{_G=JC6ts!1_ZKg86nR#@m>ay3MME z_2??Bml{X%+1GJwrvCjB_%`bIM5*@$P1x^pXM7elTC)sDhZfW-R+xqqIsIo}at`|L z3Z}vdZw-w$p~v_YZ^&piKxb=<5NRtd#@!I|s0O&bxZn)=5G>bz>P%?x;)W4F3WD6f zk5_0D1%+XYJV*T*)RN#LrLh~RVoRu`tElSobZg-o<=29?g0Z%?t^Q&qZh2P`uZx1| zw#)+Z|1-UeZz7(5K|RG=gPff)v8YWKYD*90F|}C3;09^3Af7I@Zr<*%FyRi&04Mj9 z2bM~+NX``a{X)mHesOI#JNAVfIV{&2pF;1D#|Z@Hmsa9V%9U8_Zp~r`?g$NX(RWMRbMLX>CdgBW zG50Zrao>z37eW2l5c8muBJ=e*n{qSDF-o+y(zqzu##5q8#y8@cfMaCUea2I*-2UJvB+l7;ZWj11389uJ)va|g;H-=N8dco z-HZZq6#)R~IN_+7V-SoQ_#lxBfZ>l!%Z+k2I8>^Rf`(`q!W_*sf~aeWKGYH;+}i>U4u?9DpN1avdhr$xLymkA6BLowdlBAZkuQ~ z+SOHd?ukhZw~Y5TIP*?qKdJD0jHWu!rINdg@bOBO4DgRjIE6F`3O3Z@tIZ*ZBsFiZ zVWiRjTA{9Af&`xy4KG&5yB#40zX~u@l_l_=Oaf=6nlONW)4shvCT&qFf2+c3Q2Y7!W`2`fvTY zvbm#6GQZh8;SDK8#ifX^t#F#^>0MoBMXGLRD>?Zy+Qga5K9fNL7?;KfB)fqSoU zAx*#+;bETM{uw^i{NI`QzwIvc37tSvu{t!dm<*LBPtX@n?>Hy#)PJ~&Ui&2saDMpH z`e6C;EQw}#z;latP5DnLmBRoWFetxcqB;(16=52eej&X7L);vFP*VGe_kNS%{-U_; z_MfhulO1x!BiUm89>_wP=IdI4Ty!sCR5rHwFN`nJsj_iviHW)q!#?Ul?!fa9D-f*JUnrgOr1(+=C+0*=NJ;H`_@i}?cIU#^RI#xcpkT;e70&YP_8!0a zhEQ28DU5P23rpo=dXM8IR} zlwW8ktUD_d{x2{2`4KKH484XOEFC~SYtKKpbfL&zKYF(xm}r&iq7t7yF_B9EFNl__ zocXhp3xK{|^VSa%PnXk5>|RGRT|9*{cSRR5vS!cN!YgJVlu`_mnx{s`Wh|}d%e`p? zLtJ=xFp1f-sT{ZKSVA}gvc>D2WN?px@@qng2c$(8iY!o{OyB#_Jb~KfoH+Q5_#7dr zxM4q}pQfc#{#%*ta75lE_@Sw+B8zcbPeu}7$S6Y{6z==>UX|(=b;~W?tJp{-7hbzOxln};`cgSp#4tF9T~Q2eZ6dOOL}^? zm8AJ^wKiFUY-3PL+RozbRgMD@dzE=H>Sv_T=weG)alIflf1t6ZB1BFBY!LdYl6PBe zGSGO+Os!Fw?7iJgAxyA~dT|e_>vBa=!7pr&ACNpU@_7RTXRK<>+#qP3QI#c%p9F=yMG4BL-ydsg9q(!Uk3OTKgu`0;PyB>wgHk4Op!JtSbf zi}y*d4|M>i%m0QTMa`+xR_^eS%S+s>Jk^RW{G20aInE1f&P`xG>X_1s+%3}*B+yc> zX!C=7&X-3@&M&%gId+4h_NwnbK(7Q}i^o}=5`{OvM*~nJ`^2s{DM5FLJ6+5^`cE=4J+5fVywGeAHP z>6Di46r=}8Bi$X+F>*BA`=9eX&$*vBd%1J=V%zt3#pkk!8j)*vMOiDRU-rd07d^M5 zGJFoNw7-d2ZQTZ4FIlIY@-sX>hWXA~n>R8I-{eGhqSHUl}g5RY=8#T>!=&(n=;gpmWx3YhL-DltbB>1;eS*-s< z6L41FlYfUO%d{OgVU5n7S}(pLc_k-<9&}}Sr1@il*&qw}YuH9+4Lg)G%NzQZmBE)q z^zlSK9y?ZP?`MJ8H=(xE=6~F#(Xj7BUCA{Fk<&TGcwE?fsw@o=GeYI<1s&*2-NFl_ zrc)v`*mvfj8hQrd-Nz~K{x?)OIZ+nUM=ZG8Kk3xrG)I_r!oK3Q_tuDPpe zv5JcbmDK=kncm4kow%gO%Q?t}mfimjYFQ#f_t2%ud#}@H=g|P*`eSGm! z00*~$H2Sk7CTXpJ+tuYSvlt~+Mv+I`6iNV2&UE9uoT6(1hG`+0#ydM63a{Z2f(TPYy;RnIRR24 zsUePdpoT(zM_dM2#ZS0xbfB~Lmg<|{@ z>4V`TWyLZ@XZ{vB;U3G5k=$81R2FCvN@x-Kv&qDwf&VIGbZc5HW(- zch%3llTA{hZ@w!28-1HZMr+#}(m?)V?HkNK(&}{GFKX2c;vHw7vD)*-?joa`<8zB3 zh7)zH=kFWWe5DeYpprK6wh)?(A%Z33;1=++XoZd|wvu4g9KydCw41Sd```Zquw(jq(`<^I^!Jh3_v4z-4me!&@xcGHSOx&vSK%PinpUNShDhUWAfmM~cG zz|)tFt%1qZO34zI)IWYW+RXQ>1yDc%X~g@`sT9_ewy7M@8MC_A@(G3nk3Hs?2Kw*B z!^R;%7SC&4rXtsVm<`s8w(TF(1q{;EX(7+PACpFUo9y@u^A5p10>ss=fH0&+cOLf- zAZ(ibOJx#$AKV_P6Z}UsyEbIPo2$)16+1Y$e?z(tK|ZRI8_?ykl@T|e_^LZsP|Hyc zYnMEAarb_n=1btS*PljP;W94qShnJy4DR9q`nOvBmG+JFGhOEHOpR-fA zZ%fs9ySwdzuS@h|B~5}($bDOT9xE30SrW%6`bDXOMy#mn>B>{Sh=u#7qsP(eykV?EoY2C~Q~C0%=c#?9|aZmz>>7>8do$3}nTe490PZ7Xlz_z81n-X>YV z9}6fLRlQSe4VJb``O&a1Q~mJgb#&`VmjGa-N|xoc=Vbz?1I%|ZRyNbWthyMp>eU^k zzXMpm%R>^wOqh@JYhzxgaJMml9P2&NTTg=`M13;=F(klH8*6#pyMMpsbkP4 z7tHU6H-&#FV`cTz2mjZdr$%SS<{enGo_jl+z9Ui!)P>zZV-I!#WlphSeV*EpW3RXD z4qlB_$(!<;d-FG~z%kaIxUsNR5mq;ifOEF;K%tQOqV~EEz<8oD#XbbHGyQ2p#DTjU z*Uf`Hj3)`^{)^Chx5M8))hP0Mm8i)v5M2Uxy#R$s()M2s%wA$!*H35&-ydIX8xeFQOT=(w-@5W zKNZ|v_L9q-S}AsZ#M%SKJVVMiTQw*)jEzGP-qMGuH-!$}-3)JKzgQ|loNzEdq^Hs- z7~6JxS;Ka2-mDBroeWPo8yMQ&fal2_lfU>vs1h*AKZ&9AwhpsWU87j`P{A_G_nfA~ za==}ztetFQa^lz06adK(b`_^QgH&$FUQZ|y!# z7HXW0$rDhqcx8pyZ4VODVasS)`GPXY;OYty<(45MbP005T3y(Vmk}>FBvG>u(gN<5 z7x|gfl17=RIw{_}M^y82FIFMo;lOk#T_U`Aramond9|8+)waCE>d?1xEQN*9C=|`s^|1n|>B7f3)o7 zd6|kIMF)mSaVuLHpO)D1z%*U*LV;%s}De z(*{LH?0@CXLeqfjZhD9aYz;%L{X7$q+Me6dWcU1<-`5xu_Valv%;zKazW{y?4NVp^DiM4qeTJMYMIEtE{mP$&$+xx(gCwzV zQNLtc>T)uw@8lf;IbTW?CnwFE+g# z=+K`j=A)m1I%4k4I!JmZffV`UfYD@_zvQum=$JWBXO$ap+qwQ04B2=f1yBkYin^8J zS*$Q+jux$nA`s+)I!sb=kjT=EA31(-SsQXb9SbsJd(F`!oX!0{g_@kA|F0N&&aD^JxdKc7~sa&67(=w>zmBUTN$}r8d_mgLW>h4$n%SV`) zphNs{@&_lQ2!5Ih)~nur5TUb|WwJE44z%!3WlzJOfL3pFmJvBo%JN$t=8eeBKp}4z zcHAn#hRkV+i)Mee4pVybFf6AtJylkIj^#LKeE0yUE&ykjb6PS?Hc@1z`yo;*#X71% zSEwPM(Lag^^p}tQRe_;W+Gy}*({N0k>1~p5=7Qokx=TKW#mnvXmeN&$+iWG`J0O+O z41BM#V0^%vTOv0J18uAAio-=qjBFHudg(U*A6b&}%?8;AiH+L2)A|d~hM|dc$GEP7 zp%=+p|H)q*lSQ-_?&>&*JY?1cZt?z4& zwPB$yb}<*o!S$!xP)^aSuIeKMo%6taNY&siLEvltICOg!s&JAExWBY)SnywB{9y?Y zt9SSMgSP*bFEbmltH|wHaRU4k+Dp@`38Y$GGO;B`h0e@&edrXY>cqu#r( z4cn617}hyKna0u!V&Uf5dO~+E{5m$MqR8ztHw>bOD~ti)g}dM^(>m%C;ULF4V8>pQ z)dwW_t7?Pg(c*nFGEZw{J1w+Xw{>pk-D&3NK%{1%_fa5SlF=OO>?bbeNQohvLDDyX z=BesxXWK?`C8<)-YS{VH!>#E2jrN61>qoV3sMGbzq{Q$&S*Z%~A~6@kIabzexea!{ zmFvNkSnA6NS8gl34I0kW?l)_-EX+NYo)8KK*#@$HZ^MSQKePX}(X~(-z z8AhA`8nu~83m*bn=C|R)bkT}0uhKlGn;Id~kdXFyQ_8ho2H?U8RccP3Q-DIc^kSk1 zUhR1J#4O{o+He0>7O=ySzv0j);}QzOsS&Y0`8mgVPp{F?-=pf56!|AoREg#{&uYg4 z3qi9$pMAjYKvrjv{o=GUxvQ$I6{{s{6f}Iz^$v%&NZv8X4{F zmwh7;!erp6g$9#A=!61E*f53iA9oJ-lWupi;^h2>K67CAEc+RK>uLXTw04ok;v7_O zIbG2>IPv|nxwO(3MoL_{yXPVNseE$&@8kG!UyB$=wP^E_lRcxx9sn#IJMZ?PS7&Rk zwb=(hm6DF~X*{DoAhLNE#gO{`!XM;nO^&3EuGuEA;7)hd_jBS4k+NgkG8jWAVqraN2V8=2xpmj;en7W$@)y zldI6s*tNi1lIty% zwX{(KGqj^2zKg8w6fV#1@panL5X_bvILaK;(a6xC+2fAjy?djL%OmC8rMP2ASj zq};T^v0TcEi{lFmeM%ff7^zaFW7FF6nFv+^L)jLJa+>29=E2Jf z3X`dM>l~OZJk->_nN1y|sJaKHk7p@(o6X7V@oQ(FE1MKOjuy5S)pIU3W2Cu-SG@A( z$#HX@5~OcPZepIU2~52!%MBax!$MB*Ri90~MC&Hfe?Ue0L3_W1((LH~neVjAE#!f_ z1AxcFy3uFyECe~)TP`<@872A!^KhQ+{Oj4-J~!yy$2;WFSKRX*PvSp5BVmj%gJ&|uA~=bMEbp=ftnXnVSE!@%47DJk|A@lP zeL$U_QtzUlR8>_8$(~x9D3(Q}W+338cY!0`RJcBqB*d)>jL!`odxx`8`IfRTv;CNO z)l^ik{B~|qO)k8+_m+OaFG9ABnn%qGi-P8TJXBOjY>HI6DYaN2AZ<+b=VcbU$z&qA zeW*CUUv@~3bs_|Z4)2|%(=M8_fFu}j`?d=4Y!G#V<02&im*jF?Y!x`pM}Gu~xd^Ms zm9yMXqOCrB55F})Q4_$Kg;Ra=cQ%`%x@ua7vu|N?xSY|+FOxyWoai-;CzNV8ELu+<1`;O1*0+M{ZNyi-A ztW1(Uw~AWg41XY3FDKtvQ!6?Jlla5c5}B!KfQ#D%QGI)RC52C6A{y|*TY+WBZZYR( z7#{lo$Mkc`qc(0{cFFU4vrw%XU`3b@aJZ)xyd<%`>L!)UuRPQj9wHVh~0A{MClH9W43y4z5v$QdUs&d(P!ZYQ*7&|dt}1btXd)sPw+DS zs2a0!k6%2ovRbw^UY^gCo;B7y)pZcr5o+a5W&-Fyt}h|2=~xWD(%WejtS?MTAIGHF zWVXu{QjF;uG9We!s}(Dikm2!g-m6hz%|K9a{~yZ8?a54SI}r;;;Gr5 z|CYB(_wToD=3EWK_eZEVh#v`?tiAqmkZ&jN1zGZ{9c_$v_p|G&j&@boQS8^3)k6zn zWiGhQK+kBITrVDuDSV5%{OtKl1X@4}K^GotI_H&{{7z@D|5z_98}T?qxt9^u6Me5o zta2Dv(Z)7k2DuX7)zG4VA*7n)@f=-O7Rj@YskJ}PXzd*(rOI*`@t|W@a^Tc!P7%af zJmN)%5*u5<_ z6S>nf#MZafhY$(m(p%SMn@1f+$qV1rz=Vtr)sBz#7zOJwRD7gkM?tjcoo8O5h3X>L z5gXMUbq1l%a zeB!PQl~WTWX!mIVk$$KI~j9}<{@2?2t+R*w16)}BArJDy2e_A&Lx$uSTLki@=%$5x!-JIFSQ>I7H^S%f*5<}7uRtr%wndm zSup9A<6$wp=l!!0xQuAs#P3JeKDRiv{;NS1Edw^-`YQC~21{5oD4$e$`HPIrf}1GC z#BlEY%B0k=FVkB3PDF|gFL*Ht*ikMJdj5ic`+T8hB+j~&x@ynKQXZihUbX2=MMVp2 z@q1niaD3$&4aNXWb<^w)a#ZzY6uwzlG%TpCg|z?B^(#v&VI{L`NZ=24Y4nJo_Mq+nMcvdV$nE4nnjj^*5yaTy^U8GH;PM z{Nn=zB~O* zV053De~A(C^|OREIXl)7Pp)3C>frM$(*7n=1bRUS#j5GB_u)@~_kzZ-Sm&rwHb|z9 z^Kz~ZBU+{Ve6&CQyivK6DeIkS%fli>LA~d#MkNCDCI1gaJ<;~Ckg6>rb5R+Grz+Bu_N z;@<=6GsHcc@qumw?F9m)MYe6|RW#7wNEeUV7#L3kbb4ldVWm-{q?ru$OwKu;-=|K% z>_7B7e9P8;@kvDi!k2`!ri<$us)~J8eLt#rokj9Wi<)}Xwt){kBZ}M?=|8Vswjt2# z0y^Yzef(f0QhhM$Znxc(M?~8_y`3v7HExw1vHfg3+3ZdfqnD^(FYJ^^%Gys3g=9nb zQ^|9K zj})|XiU#XmE)=`CIY}RM<)747^a(TaS})jcIiPcYE`Ivk&L2tORn^NRT?J@<4!^&~ zcOBmHo~%_WN&VcrkbA(MAAQ<(&H5y4!Pc-h-g~v7X>_23~dgqIX?jYk8eu` z(m+~Hl57Lo7X}_IkXu8CrXE=BWvW@X;(}w8iG&ov;JcU4-$@27q0L=gU3J5qmtZ4U zy{mQBF%hZwQqlIvzm5R{UUjYaXG4%B2kSahytP3TmcqX2W;-1`81uY>zG~=hbZAK6 zYVhT!$N7(hQI?_x%DxaVb?6q>zsF@nzz#=)$I*wImX15|8HKO>sdR$@#!PwjCH3II(M~ORJ$zzW5Z`I~L$+CAZmw))$D@y^_gTKlAZG^( zo{{E*W`}z#D0owxEaU`so*P5<7nVy4zPgjBI$W28^LR3@w@PwXCG>7Hq zqV@LtVHdfLe?SHvNl99IFhGZh_jN8`j2wWz=k;C!bL`;-l)4MQ&iIMQPL7d3Z4b-i z1jk^H)k#91lOvf5+z{(K)}Fx7Jl)uT1&LbXWy## zAf|vDauCLYw)A_pBJqkLZ*g2w^I63Lkg=SHGn^2oXOx zQ(#_?aRsv^6SY}Knj=QxIz8-SU zaE*|It<{FmT#mm|RC`Ci?UNuC=8cX`oT{dTEBg=oUUyB3mKN>#LfRE(#tU(gp*N7x z*5~%(jYA7$)8p^E^$JUVDbaZ8&9vWXuQu4|-2-lIVi*`m0)=wgKEK4V|MC1*^52!e z+Z482o`5Q_(+53xZ(i4J$tiP$yQLa$Z)z~ql~K53%8~+F?I;54ez~0>kGb$F=d6T8 z1IFhqF+ag5Qba>{*mb{*ot%Le8&F@N0Wq29>M>j+9J&<$V+6%|CgJ}&UZ^UG$dj9< zdjRsUGeD{EHJMm=CSbzVWC#~C6q*;4q~ZwzHlpmheuH-1TJq_=lAh&dZvQ(EHDof! zM<c_AqbKDCUB-HHg?s+6#uhG)8`%Ic?i-63+Z z((}vT^eXWUwT}ODJo(pY5eF^oH1qu(B;DV$^R()J;+`jVa(EaYmjb|ge^beeCbN%4=8yzy{UpO<+4$Wn zrDY~&SLLZr&ZXG!6<*>yH@R=Li2uio949)?^3+n*#a9=Y^%daTK+_j^=yFW*S;k-+Jm_N8d*u0K#Q9_^bUjU{6XTszC^f%@5k?sh9`q14=qej8#v53 zoeOb)B){-EzL@WW3B8)L=hsE6YgQ5qKdzgb0=Si$Sh!I>Y$qn~m>t&B90w#fOH3vQ zak@j_rDLx!^k?PJHi$3MXLH4u-t>C-%D9}&bs{#<_(NF@MSBzh z@g;9vTKsmT=_9rY--U_IA0b-auDE;u!b*AOvQ26HJ_u3&D@w+cDJLD>2$R<>gfBZj z`A39fLyxYbkov>sRq!pdY;T&^@szc1ELLc_b5E-HpBLEJJdgvXOZAyh_egZ;h&SGW z5iZMnP}=PXP4a0a3tO=fQvx8N%>eY>Ff2~?Pn-@zPuYmT^scRR2re$b7=%mp?d6?B z2(=4p1Ft35v&bw<2EM*%+%Kg?-YEyeXFJ5WXCXoBjv{3TW5!a_)5r1G=Poq4ts14^ zZm$Uo61Z~4dk{KxM*%Zp(mXArDZWzNN$mVZhrW+iY#x~!nosdmGj_jd)*J}c%e7A^ zcn*4b<1s}aE+%T9_+ZYZ1dl=5RB5uW* z#(^GvgsAs9dg=Aq!diPf{b(Pl%kB1%!+gl_O`2U^A$#!{QWX-WYk%JoUplejaWn#Vnc?0a<(FZ zfs-_?Jfzq%_1PAh_aGA7apzox8z1RDVlS;#d^s@SXKQ2grOH}-ffN0Yw(y2HE}_r` z(pcP-_i$n-J1~yZumKbh>Rit{-wn(NcUV|hh{~z3n^TaP0iTp~%XU!jdURu=0-cns zY5x7NMp>GigaD9;ik(cv78SZ_q$?=?{7p88tOxr{(%~dpQ*BIw;E!`*Z1<)174juL zzePbK0HjKV#pm|LZl1a5-+&?ig{s4cw8gwQZWywp?}Hf6U1@>(o~W%7)Rg%mE$I27 z<3&eeGLJwJ;uy_oHTfaMgBOX>K;PM5Wjphbb7Qmrkw@M%DmddWvBmcufM!lBhK1I3 zd-wT!u39&qHdavbyEuh7i@)k}nWuj$B`0ntzPXIxHL8A^RY|K}MyU5;Am}sHQxcS- z)%fmnDg4$di`|pg&WA73*UqhWRZ9iRD#;Me&_bVjA#tK>5HvMiT z0X$p&?OgX<=-_Dm&XR9vvho>c=b9J#VA-$>*u894AGaFx`|R;RKP#e;29W`Jsa(P5>+`C!Br$4_P5mdauia`eLr6(QMp@QVHPSIV<}(<}obK~R-}#r7V7iTJX7Y-i!o+)&T)Gfi zdUt!j1AXi1a+B*7UNQ8CTeuT}E??qupLr=3kf$k7$ZZ!uO05bfn7cdl`xaxqZ3F z^_KI0#pDQQ$(_2!6>`m{aTJR}wT*tZMOgCwE-Jhw)2y|9n$LbPfUl$Rt)doC75T<# zEv-7p_K=5gr{D-v?=7;|83va8XHK~_8cAJSGaatMy;T-%dy znhr&}uRP)U>#tc8w$@oJ#TKHudg*P{FX_O1Z>nXG2i4=BU)BvVW888!8P*bN-aR}A0> z#uy3nk*X~>m6^bqAp5kW(2IGfo;Iw8Eu`UK;rusgrfV9LwSH9D(jy#9fN8M*%O1<` zX|7L-9FS}c0LdcJ%F1xXe4%bfuM|axM69WH-2zYIkF=0z?7x4xQ{&Fb4H0tE)4Z;> z8GmszT@`@t5z0}o50B5e@kO)=!AdD#4d{1OVALE z>otZF`TR-VKs9+U5lYgxaj_NB`kZiIfnz}m|6v4!WmwpM*tnPbKDY*t-VW?n?EkTR zxAN#8iXZ>95X|(S;;$l_Do;d(GmiKeQo77>pmG4ncUyJZ)UXaHi^{VmESk3#1VI-P z1lc9QdrevRRz4ugiBlz~He=FqYxso|+$OM0CSL&0>&HS8zz2Q*+zUws+7meGE0_+y zx88Qghz<4}!vFf1Mr6mO7aEi{{EgfP~c8=&|yvriiT+BZi&*dEjEu*ZsbiG^gck;|?L_QmO3(G=Q*I@3uoB#0D3yKmZ!kELKLE}xm%x*hGZabnwdnyi`I zT0gj?+;mQwEU8@~t(iaSH08fHa9t(RgUsEPe?Fs{WquTWIl6d0h}!$$jyJMY{W(@M958qVlQ96LAHfWQp%|Ia3-rym?68XR zZaa|5a8K7mw}7LnQKcY!IPj;-G^i@0006kQ9 z75}%>7kV^PUsjrJ3C=bT4TL=At`gv3#iP z10SuZruTfrMt{gKEqp(OhQ5`^^QdNLfBB`);5J*n6!7}1;&p(qAabKcQ}>U;*+nI) zK;if>0b9-!&H7l`e8Yb;R+| zG1!{Rg9HCb4gIFOrY7W3uERHXeBl|JE{J`O*SE(S9y~JZ?>@?e^t$>U1+R?ga)*gts^=%e5 zp3_CI?)Rg1nvk&qugxC*g;}m{Ypn>2X?|}@-?sa8&%m#4bM^kFw+U)nmDJ_lW~k~^ zg*P#E;Rk3t{9K|9l0`(S=_H~M)E1{454kl4(6mHxSIDkT6=40?S$f?E-5;)Z)xO4K zo^$2?IlGmS5mjG0biUw!t(%~eHC#_~xA1|Bm&kzfT~Vzdk&RaGsebLEjlUoi=9=@O zJ_RH>t*b7X*coogpH*QaL^o37hT7BmI+%+fRQrrjP@QMC3US8uc&X@j0K0}iICAjV zKi$J8V6=F3>)!_k^+zitll^Rym1gzq5W%O$?c!#w5QQ}VXe7%ZZ!H-gT-<1_gO1vk zsO692XkctNYo-qiE=9e9v@7t>j3 zXV^;uignY=-9=Zr4)}k{#(|7s9FQSh7iPWhBX$}Gc>QWWHyW|82;3dDSeQ5}ZI{m^ z;~Ti0_SEhnsV$_WlEHJ*dmI8lR?54V6&gw>)cFjQp4*0;jSRhr0d>n)?je?ksToqP z#6HNES!DMg$aHGWx1JHsz0Z5{u!!2{Uj?E*Y}DCayxrVZUV6-A%8<9jkx;#O8uLto zW;@HxNzo4HuUk$;ns)C|sL)-p*fkAM`lp;?EgUlJbY~L#`gfbK_UBuNshrxu{b?3V zKg@r8^*u`InT&%&>Kxlnur(ewYKs@3s%Ejyugg&k*V<5d!l+}0WJVPa#0ocxD+a?) z<_MA3EGenXy!8mqff!Kt_6ckaum%$N2I0u8spUVr%NzlE?-fu$l_-;4J7qfPglysu z#wjm$x4Lpr)j`&0 z$*>#rD1z3jbsM5qxI8Cr*Zrip>Pakf-ZRgrZFsT0;IJ{CG~%|SmOX^X8_2Lrs1(5X z7uVOAKIyphhE|Y4t)FNQRdD&@auGQPM-`MdZuB}gKk_vn2C{&QUVJl73I~k^o+V@_ z{s)+ApY)ONpBRTg)Bq-D@OlHCx`{)^&tmf<|7G)dBVJL4-NeTe-^`B&2z_VH!Z?w_ z#6%n&U1p|3Z5!TJ6S@VW(uo5o@0+grKz#Kk`adKH?p*JA{6LnyzOF7LZ~sFRO2FJI zOm~PE{LEQR{@rdQVbP39pWC(xP1DeR5eV=6HEZ&DzmS#LD^nJe-A*1NWm65pQ{$fH z&AN089f$38#+qYH8y+ZcSx5PrP_}(O^?Q(!m6~02?4XU@lWNO1s5ENQendJx%~(=H zWdNb-cbrOV(jfweL6l3QQr9Ql1nB_KV-^~Am!!|LFvo+mzYv*GcsR6LLI8M=+Rr5; z^(dqD<|2dGs8f>rP+Au1V?Z!4G_vPVr#E@Xx^L2eb`EtiT)*48AKCZ?)<9mLp7cX= z=JaXvrf&yVX zP!u3hGD7<~<}#a85p8mkP5!NuxWO}0}EQS2Uf;5^unUNRr5T=o<}ad`ZX-b zha35hzb6haT#g*Q%5w@JA}=X?fPH%R)G_{*uwzCg!?uBIY;I(&S*80z|EUo%%@ha32H1v_986n>kc!b;Pg*a(8H2#ST>;+jRdC`$pPZbSn% z<7RIDe#mk-PJUjku06wvKKV}~55ilf#G1)vw)N<;`_9Xn?xTkvnZ@wO2>0T;2FnW<6G$`i-MxyLRSlS=8k_q`|WN9{sN2#I=hpM6W;8 zZvB8QKU5(U6u$yhq#K2xcVC3D9@t5I$hCDWK!0usX%EfPtw|Df&U9l6 zN!_NKs$538#~ac}VTR%VtE)o9m8x+kaV`nZ!v;3DizUgKLwV5gF9ism`>yzr3BIs za!5rWv?=%*7eBS;!JBgNfEpLA;t>~vHx(S`^^ctA-bBz!Q~k2PM&T-3_X>}Y z;{+?LEg&T3NA@?ykOITx(rljh(iA)ipx@oSlBhYiwolyCV&~|vVKd1jsU#_k8AE`A zau(dZ2kg(ko{U9uXg%DD+p$#w^>oM< z=mXA#TAZz+pEuxYK$)u9L3BIIPY%zdXH|XbhQ!I2Kx*hYS5SMvA3y}rHWFrMZ6OFb z!KIeCwM&BUwc=c$53i@HcM6Ki<4xB z_(%5s`;9opEiO`Grb-7YdhaPkhQb1f*e8SL#psfoP61OV-MZ zAVWh%NV7yxd5|RATe8$mHx)hkuC#p0zGlH_K2~)Krs2Cz-^iohgRzzE?v}q2jq>V8 zQMNmcpVJp~)=a-wSazk2)~UN?2UHGucDHQWIJ5tD^*SG%Zk&%yV7@ckW3_siN`E_0Z}y?b{@TSd4x`h%dyn(i-Aq!y?@S(TC` zos{AH_MnQLGF{z!g5=fXa=_y9vm%_S!0q{!S&#Wn`8yh?_L9Bw_E94<3A)&220e?} zuM!qFww$qFe{y>S2&nmuI-!zZsqXx%z>R_0pAsP)c(%S+he* zu+EB8qu2RgR0z$q%Co{ysK@;8bnoGKAKiqAkh$=R(>MEtdf7Wn8i^-SZXIgl!>z|x zH*IxER6m<7`*oAi&kMe_9Zgnb2kK6|EO*&(zuTW}FB-MfnuuBrWJ#GDOT2Mc^w$sZ1GIp1&Z^GROcfsNOKQHKZK)?kZ=0bI;k!sfje_^5T zXR5RtZ5zNX1e$E6unu&QWw`4`G^`N6DhO<+`^iqFLDV)WyFI(foH6N8#0^ixT!mVh^v56 zsjH?@(Qb}K)}BXUKCfP2v#VNSmQl%7>;2BtefAO0;|90*VREP5FE{QCez+aq~?X zElGGUy+gQ3~;&8OtAc6ko;>BMfOc7#tnz68KRM)4w=TAAR zC`8}L6L>QeXaDXUqfZs}R@zs=PYU>{eUa9`E*MyG#dv7|gFjMJ-4I@F`WRk9lyH^j zUuBmBrkzwWgn%-#5NBX=E7WdtvR8%@GHC(FhhOyYpDA?M2GR|giJI~9h5~(Ly{Sqm zM$+^dsr>sdrc!g%Ns`mE5x0@bs_%o8oV;4D)O+a(Cc0~J`e0pm(%sGSbLDUSCYRfn?=64}rnD}5~U2XLBD zL*tFiDE;9+5+@r=*&A3}u$FN)+?04g<#&z~hW;ihxSOgktY?gmzk32`$RKMSaK9h0 zoo&~8Nve>~)a_DDBQ;|w9C+rRY?!!mZj6icW)~HTEfXTals^it7ovAR8t~yBK`rUt z42?H?3f1wL0Ibj~1kSxAZTX6xi{zyd0E+*tcR3S!#xcyxe(QdKa0VIN2~<% ze|qhO#1foKmDh*?Eb9kFpnQ6Y1pnDdtq(nd!q{k(uy@6i$_Jtc^DT>K4s$kX*cmEJ zn--#=Akxwi(4E>2fN6v3LL>_&OSy-I))S=joIz5(Eh67@w9K4>&h-)#;TX96mSe8E zGcuomnV2%AdD_$m!a={b8?&_l!v)YW!iZDr3a|r^TVGNvCI*oH4`nmer!E{N<@kt5 zgHd9bh@q=oEoP@SW*(F6Z{WBuAr^eRft>Q0nvo(1`(!v^K&Fe2Vw|8)kq3%#u9V@C z^*!K&>)3e6=!dXi+xP()ts=qpnpN&QI7WpVnUAfD=)Klzt=(VNgIVSP^2cEozENwP z#Kmoll_TMjhn`!ua5lRGOn)qZGl5AYO>t6gL)}b=QYUGyOytSq$!#LdI%>mhArXL2 zjqpvOnd}kB@f02Bc(#-)HDTe5rO3R0;n#T?!w76U2kkcHn6UPni_-)Bs>pVJMM;ROS_cEV?sZWCQhE-!sT z8~b8afN%{l7o;0JM=#GBcHx%k`k)#zct#~joP?3*-BEjgor893oW1;f{M3%|D_Bv( z(Ha>0zPQOePG+zAilEnO!_V$fcUTxl`=PMj0DF<&*l4Y3*tQXAdpS&_{hp`XAq_D~^ zasfX}ug01B6p+bg)uE=t(pyxX=PDzl94rWaDAi-oJEXgKZ@JGgPQ%RUe+#KL=G<-r z7w?aGVS=U9uQ7qNA}u>O%6PNhHFG;=BV1fjBYR!5Urp&L;9E(7kI@w-Z`l|=Y>2+U z7wtjQj~H-W``eBDW!!g|B+0r#pmKW`Y448g%Wjt!Gkw3>LJB`$B9vVXxgDC$$kC@- zBIln~TaXzNH~#=Ffu9Ei&_F)lc~b@nbHrN)KJTUoO5By7{&nyo=vU@Z(UJtd4E4E{ zSRo~E{q}x!AvnzH-t=XQuMRdX{2=5 z)-#azYZ3dd;c)271gIP+8JKL2W4#iQrL>qwp!*U&iZMv+ra1<1EqiSVC^5<2bH0r85w!wQS}aaSf}+8Je9xA6Y9~8=h&!I zrl-Pl@Xo)#Qa|@*Fm;eE5nmyB7M>hmtQobM2@(;=j=`w+P4=k$J3W=WzYqbQ@o$pK z;UE5iD~f-3ekw#yP~W#A({d~0>^69;x&7VTJIN%%p_X!jLwDC; zhH$=mIHl!&Uu_D!?m1SN`BJ^gWH2B5Ix0FgLKE&aul`fUo9Hd`xOW;yyovyz3mkd1 z=GDP9`PVGLSYZ0-95|MDE|_Ign-C*uK7G*eKUAG%RMT(3_ZO5j($XT`pmYq8Mp8<; zMY?k^L;(Q_=|&}`K^ittx<$#6(m6Ud1`q$|JomZJ^X58xv2*rfXXpCu8=tRM@7ml>w6{Cy(8 zHh#}-==qd~0c4H_w>zV=}hK1^uyt`$booHES$EjoxC9D?xY-3?|y)1LwWcY?vBm7 zdnxckK(P1p^4Zkvm3?qiUEG1ZPb#(T)==w59l@sH@n(7EL|sY0vHb9TtAh!KPu1Kp zzvb^`OPOWcKhh{$yooilM{YFTFWx)Dr%#yPSY{!f7hWHc2!XeMRn>LC7eK=Twg2y+ zEyE3_#w8N-g~yu=LR4wXc+~|X4PH7w!!5cz$++LPz@rNh2S+GO3*C2-?3S^I0mT4| z1BpQ?=@nwjpjh#X`tZ9j%yq$Ckc{tk((-ybw~}!6uNR~)!LsbvRn1Fp|EtMRH?sJp zCw}66I~Q^Ha;M9({@$-<-|Vo$+_NLm$L=yEF^-UjutZ_Yz`6E-8gRoe6_)g$&nI2n z8yM2wCP}l%ht9t4NuYOU00I6(?Won6QA$(yN_)zal94g^T}OvsMNiyXH^SkTq$7mI zQZ5-ORqT!mm+1Qd=pT_`4AYvec2+h)mxSqkyO8LcB0xv}x=8M*3+zp&3benKHNmh1 zttYF|0GodGEiX>(lX~G5(0|h@iBF{q6E;F0bc^=W(wf@dusvTOTDkg9Q4Y9Y?ocY? z0~|bfvVuK*r`T~kVgsZ`@7KFYw2t2Y=zhV&m!X$=_=os~7O!9LE)65FNW>>Pew%pw ztNb)W&PX?^k=}L?GF%cIQNza?3gRcgI~EoB&0`m~-*ArEY(K-ZBojO%elNUhP4$?x zrJmFXe&syjQSs!P@@jLdPb$H)9UW_!;5wmZ6A{_{% zdZx9q5Bp-L;Y`Y8*MC)OOVn4@Qu&uYTUe3}upyG)HE&=9{|O8bwrpqNY>51 zD?$wP@YU0rHl|njP&5Lx&n3ojpwAudN#@mY3CfzLqp^eF^k;T2)}^Zsm!CtQi#BqpG^HTux@2p??3{Anb6eBBkbfvQ zUMgAf8SvhunEN5ikDRd6P9LU64dM6q8;@_1giMLW*fVCrTzk;=%9*{^`8)9A`;b36 zMcOV~VOfZNJda)HG=^AeV0c<3qIRv*V!GV7qY)LBNRr5_^x0%qE`^dcxa&*=5H(I+iag_(1z-0eg1m+}La>U>suC>Wgec>e_~FiDBe5f+kU z@_I3PyX`_OI>_TeCe($G+jN3H9GX_%oF*IS-1bC`S8P#2RXNI3^Z_LIrpyKvV z<``$m%@JxV3GQ-R_O3<9{m5qdH*A>+zp6ZU0xh*W}Y+S{`K{3o{J4wWNDDQ?eEEa?h{?CK#=*# zCl`fi)w{?9&Dl}GauNV<-_B%GJs>nd{9W*!{q$jH)*rBHrjlMSg){eeJFb>%ov341 ztm(yW@j-r8zSDi4GcbK(B|r5V0%(7Qday#jEDfaCNK>>LqmzEdsPJjI``Uf$mHf$h!XOqZZ^ zRFdA4E_}6qMzUe6W<^_c?~a!yz0{Mg>Fg=Zbt3=1$UOcbUg-OenOyhYwa?Rri2npao^yleoQbl?d%&> zFOO>u2(d1~k2+nb6%Y$hW=-3n_@%J+yzSJ>7_yEaz8)WZZZ)btG{Qe~+>l4@tdGGXjm2STG(ts1bbUP7Xyk7Nqtf}= zSz!Xvrc$zIl<}FRpD)hH@%EJ%m!A~f1;H0hXYOjB5TpqQ zb=F?@;A7C0pro@@q8BJJnwF6V7B2;L-E0naU1<5S=Ya|5BxZ~RDRQ$M1R9QvI?o1V zn$~*|H=!&F%!SaqCC{g(nX1Z9g-Z&x;f8?b+mMf`B~nIBp|n3bonpx{*RGjdt+@C6 z*I)ZoUZLa+@q!PrfA^vfMhp_?HggW^|0Vn9Y`bTz@eT&)R1`QL=G9h&?KCecx(Sfm zXq7k^s9B;HLS8>z?&4BOSH@vt{2KFlQnpi~F8#adh&TsQDsf;N{pKtb)%Yml<;R6r z0B#o8dfo4lDOIu|gq(kMFK-QkLw|i`&`x}Q>MiwSNi$wHALb@-fyij&AiddV+`MA5 z3^=rASW?>E!PuNZs_|}HF=s;Jbr_Z;*-h4iEH~hZO|Uz&WI=f$zR+yiV3Bwc%y#J` zKLrlemiB9}i=z2Cmb6eQ9tOWt>*_rTx&m_7?XyIe86l=XIk-xGpv{K?F+g>SdSs<2 zP7eiL^Q+HkhAu+zvyOq2rCRA^9muqVxcJ){%aBMn-RZQo{)E};#ql|`-(%(9Vv=Du zF;j8CY*zvM(qYPKh*H_X(s?ejS#QfcXrnQkU2E1Z5j%j_^8#^Rf8am*Y{mr{^Q-ph z@burQXKTikS!!->o%f1N4ZRZhNcK`QX}->mt0~1 zYdPk{ds^BIX{9KImH*~%8RKLD*RP7JtHK^AKFxxt^CJ z&-9b)>qYxx?^y2E!s8k5pN2x!#zv1!&7^PaW z{&aj`IsR5^r~*$t!b_v1D^_p5iXaQ^`Y(xa zZNRPxQUmN#Qc(<~4oUKD$V$a&t*<{dvL4u@)+HflBPAQ}GF#Ra6t<}$b}4GG*wW}R zakj<5u?7;6gZ5bWQ)KsEs5C#2qJ4AuJK4lP7{E2;ucg#0q=^88bFDQHZ3v|`amH`rO*G3!8Y9$u&L zg~$N06k#LdSB0b2wLW&bFq*f58p2f^kpSAyN_LJ5Y0Sz=0rM zkKGN`TWk3&!z%}PW|Qrzng zg}r_Js}HZ?DXGfbyPK-6aW1=>Q*Rq@F+6mRW7$zSktlOzX)pGb!(9jn@kVOh27I^ZKVJFEz`&2}T)U)DxFc*Rj z1MWC=eO8Vtfm?(qF+o>Oc5oq*iG^}|ou~!ZomDsAV8y(*>CIv0a;TW3AtqS$FR2uTr`SDl z^HBN=-0{TK^(a6~@e2#nC$1_bVq=oau%5T#`@SKY!}2J47A%tFEz|$70Aw>Sn=Q0# zYyEy|WPcA-6^DR8GNCJO-?7qILf8|!o6>b+rX>XOk+^G}s}v?>a1dMbdNrM?X&1d` zu28TqiNIbZvecKuBTU7Ja;1LE)X&tUHH5Y+2&{U$3L5~ovL*vSTOwNCownhe(AK*p z%KS`gy9!Y;VxlBXYf&gWy?}M0PH82@c|UCDr!-|SDOR%HHtkGwPJ_UN(8=FNrnurm z_gUk4&SLv+gv`$0NcoQnEHDySm6CP&%{vMxru!z=C2VhX?V|OrvEM>|>h2JV0$=c< z5ZZ33^ZQ96-`kzkU>n|8+_sPmfJrsUUz%3XJMb$fb3)C>M!^7%j&IBh36>9#60YYC zkJt?;B>c;laU5W<9VjWjrI2)q_MHM<01>V=j|D&zWm`8c zrphaHEMC!yLaz^pRHFW>o9U&5j!{?*RUfBa9C%>#22>Jexy4+e5 zz6;mT(l4nI4ESi%o_K%(zyJ~7WQ|8!ZifTfA5N&V;I`!5(jTwM?!|Q<9smb{fZ$>< zT2K7nxm!LDFdGJ=)tpd8zQ$}IvV76HUd}5a&+!lRmo>$wUTuD3Iw0&Z63^7fRihrq z87AS5BmhqK4pC8#9d>to^52kC#y_2T6^)|1{r#&p@sxivqy~0UQd0jc?1vPK+Q&1I z*=@F`Khs6!<%{-*bdXXJH-sld`+Yg?26;siMBB}dqi+pyYhCk2PvI+oNadj;|Fuue zCQvBgFsA~GJ$(@#@obTjCNM{8>l*v)Ce!x%vA-#uE!y$6&8kNEjx^Fr!aR^^l> zybiv5r3VT83?cr7@R<4FsI7Lv)Eeg{hiiq=B7r>*N-*UaQ-IQcOoxSKsd|Rzt7otM zT>k1IhWO->a?zG4`l$$9xFsijG0E&gJA9fDu;7&S65mbZBI0@|RrE2_LP!@O!}RP+ z1iHPN?j3^d?Q23-5!6ykJsHIlS$X*{2=&tD9qPKMsffD?C$`hebr?!4{@C3DT5ZJ% z?!)+Oz5bUzG&<;seeUGc4j#B4edHr=);aBZFgFpYNGXi9K(!ddWpNiCykQ~wTmT#% zR{4>1`F6cB6TU2I`)r7H$Kh(hltI?-DTggVxVE&WXhqUF4u+w7D~61@q9Vh>IT>V# zzeK)jq?%!98DdZr99f!xRKrL)<-8E;>05&q;t)|&8!Nk7+&<}(AF$Y#NM0D>;d|%_ z=axASst~GxN+MNy*AE&Z3F8Zz1Wuo^)3Eyd8THLZvlrcW;Om^)=%iAUPL)+C2*KVXO#MR?f4lESSi=9$;7S zH2HkrJtj5l49?4w^3f+g6XMDFReOfAZC77=1GQ-E%e5I*_&ts_chEs8)RX z@eEl8vdI9R#T~y&A2xB1*r55JrwI+S{;?2iZy< z70!bHtEeFVgV(%|-(dt7K2kYfzRp|rnz6~rI6gMQ*CzvSE8HF@s&@Sr&bm7hy7MN6 zG5>ly+?t~A2o_f6q}cG%{-(+T{Tp#^ucBh|K@o~&6g^lKL3bAF07YZaI?;Jz|L~5Ho|7t2^!bI(||@n{@CSNq?=7! zx2Ea&p9w*CG!KJ%a?4oksjm)}Zx04G2M6WpGat?X?bz@%VQ=}lI02I5wNKwLAVivi z@nlC7aD$DGN!>Z;VXFmUXlI^bAUL=P^o3fKiu|VQG_qBW_&pv(j=xlB%-4iTSd^_J z1#v`#SjoIw#KQ(m85*~`1Oen$xX1W1y@q@kfz;tg_~EQHx#Hp3X6S&d%euCCh6w6f z;gVO#`;;-YD+OUp;88dJ!GGZHV&Ax1jwg5Lh+AXKHwE;!fpl0eGY98I%K-4y{3G29 z<3ZLk)Px9nhz*b=Z~S`uiczF3x}sOkb{|I= zv{F+4T~{T^RSsO2P55MMj!BMEc;^#Oq88aw42xi*U;L~5gZ$JT%Z}uE8P5{?^PaMI zKtkXRh`{l!264ihToded0K)BT8$nz%WM%qeT9V9otpx?dfEFAOj5t;8Snn zk39=+DZc%uO;ETbR4DCz9raoSYAFj~0ZouHdwBWrJ+yZDvun-h#jy1CZWCO{!Za`` zt3-@CCmj2n!Y17E>v^7(P#-rVZP7BG)~7#TU(LOsW9aDWSrqD*08xs2P^`$C?AZvZ zc8F#8^_>z*#Uv|6d=19^nTUVen%8g>uwoU!gMFS;r5>r6^6#FB8vk-G!HN_D|Mzp| zh-kon=%oJJn#t8<+@O4cRGys@)E1QklnP;W69wR(6ZClicU5tBDNT~MM2Z8RnGu^f zY>78NXkk6DbHEKRuxG>8(AA7S)O6FzN7ilYY~_~wS<=MVgm z?I-eibOr)cN}j~3U|c;>6-GWtx%4!agA@!Y!krRiKOS8icd-R^tbQ+P6bh7=C5Uzd z6Fy-reg<>f1@ghkIBmj3gHEHDn|E%3W_4_tEF9AAuOddcE<0WMmap9zhKV5F4#D9B zVdwu4iY6DbX6biLG(UF(_Ei;pqxPpVaPR*Kc3yFGBb+V}uGGy4F@ zvfEA=kAqRCw?(Lk2ttR*-lD_3s;XUVmp?&@^)PyTm+CNJ!2d;;x{b{Ty1I9lj`}O5 zA1P~k^YX5onlmT)+=FX2(u|S1P7RGb75Y>2&qx7jSMjIKpr>zNLG&a^n(+ZepGkT$ z)b5Bf<5mdJWJL`Jspv?>e))m~yL{=q&iq_C}+7^I2CDaR>In{D9ksW-`$Jq5WVm?w(Cc0 zgl8Gw_c5#N={1+F=33bD0RvF&%f|}Q_TJ7PV8fQVQ+^DOOC|FhD1Z~m@0^T|xPB15&_TX;n=;QR#MvKd zz>N+zx~>)I!jBXk%>w^AQYf&t85$ZGn6XOen{bxf zQk0lZeL$R9wQmMkTc%4mmo8cDx_n1or}-)8ts~{;bAWx;ue{~z z2)F1JSJ8Q4)x5+fm;~z`m5lR;qkog0rIg#OLMiCkSUGH~x3HAv?5PO`SvB} z3JG3@$fcJx9+j`zFK&bIwpL1sAtylH{H-2|F$|p$PTKlFlp!0Z=NSm?viTmUmLFgr zmhJ+#sHeDpXZjF;$6It?J=7&EtHyc?G)HzqEtz7hTNIr5Hh-={${A3G+THzoDaLzr zH2%i@b)htA-}29|H_U0v4XBNbs*7sOy(`AMQfmAH{OnSJe6A^zZ+p}}hjZ%73m8XEM0L0B#P$S;~de5VY)-qH@d{VIeIlYQfZ4 zjh))`=TSrWx_Dcl?-!GcQ~XB)JhNa`Qzwi%&-os1 z0{3Nf3rAEutySpny5s`cAbmo!iph6=Qr72$FDs|3Eh?Vc1xT;RuApkq&i&OC z`|(X{=+#UemU-db1Mr5REYiLMjeINKhshx&awx>zEkO)2Lyoki4 z`b^P3q|)`PU;aX5CgIlHOSlCvEM7^$cWWjn|wQUU*~#x&`IHV`Kf}pszrD@ zxsIxFILipZ`c1>ca`rsxnYbTsuVd?Cm?nRYOZap!!)V!$`wMVOJVvhAY=y0hTNyWq z;^O8DMQ*5u5TCAGxF(xN?pw+h9zdW)E61*+S**)wsn)o747-1S-y3UW=+NtJsZ-#1 zVq)wn^odwhaa9F4+P@$dOJqj`^2AGG?v4O5B%@M*c;q-y-)JAmoMBDK8TqUc_0<4= z0#H+ei-mK@{e{F_4U@VJIre}%ofEz;=Ou&G`7koik-*?)UB8AE(C~pKdp_76h2nk+ z)8`BS4cuDA;-A%%3q+6_e3B=&={Z$L?!c$P&-~frTl48-m*aaox7<_RBm=Rrm-f{geaNzH1v&ApIe7n+o>W&YmtBk|*2Z&!!Z@TA zI!FpJdv{x?%CG}RzABB|m-bb2Hgi)I7FMGn2g?WMoyHs>t3I&g>$Ip&zZpR@gqV1y zQ0PHIpTTrZ>S80Rg|Fkf()})cGkiZYR_J*? z`Uhq+srjx~Aec8iBUY&@!psT&;}e?nR(?XvMzF~8=K478q!YlZ6i$4Jsq)@6!?P~3 z3^y66FL#>=yA%pQE@Aa7L^feK3hr$|(a>Fm4y(D{v6QT(zrf+L6- z2=qkqr6exbVAq)eNJb|X$3|mqyurbyN zE?obSdk6W4bA4C*b<=-pqCqoZCsFy(`+XsyIQ1|G=m)UYxZhHZ(RqCB+yU^X?>y!F2fqGk?gBgYA}!SGh2s^oDiTtr^PCUSSH{;$pkAzc9%D>`*^ zDNpWk%LGc;BLW7iN(XE7{u$Pqj|*14znNS0YHTORURsEk$_iQRYfu63nN&O!>E3DSki3E13*nV zvg|gu($_ZAScNlRIa1Aj!tC<{w^*`B*lz5Qq4w6QNj^*E&USm+P?YM*Q78_p)D!X9 zwk#Jhe|XSYVdu$ET=l*i(tqC2*s3PzW477Br=^dG-I2LJ7bn9)+-AKkZu5azF{$pK zS)8?2{s0Z_9KDmDfB0Fsvw9gNenNb=#I+-a6Seg&pF_$bsno+5l;CW92gN~!rnE<2 z+iPbY$b6MLlEaxHLPN;xovhN9<~}PA+>A2*Fk}r@EB?ufw!wA!DyBrWUK7Ft+;;v} zn;V4o8qFJa{k7>Q9%>&DXgt4X;K1jKIt2~5&)XuGPTgr?>*`V+?s*!HG9X$&ZwmI8 zz+y0Dm%5s&ErC6B;uLmtznm5x-7xTBT)iouoKC3IRwGyetqe$rUX_+=dDQ+1V*mp* zd85<5bbCc)8V}-e9R1ilvL759O%be?GOU68Bp*#S4SLHf7vfltiCLCs)Aim;(J{fw zY;YMOKE@CC&tKo97-0@CC1sRvq=>E$z}-Kwc7{}4B!sXl zKV+Q1&I>Xug*7x_YyuM4&L_nbh3Nit!~ZJJS$*vf^y2U^r!+@{ELdo;mF+F*L8-dCW!>bzc*jByRIr+XEev9FRnff znFng%5Z4YYdk^RN|63PXWxF84=(?Z+`>}-eZ;UvTrI~ytFAkxmVFh{)?mU05;PchG zQq~&pP_ZKd>}btynr12qw1NI6yyOvsant)az0A+)JTm|Kvh(BWf@v-CF5qEm^kdYO zKD#kYa{lgmfHU$C!8G%bgT@QQ-Q}I7=dsS+nw6QQVWX#B1Y-4jo}Pks=;{N-Q@%$y zxfw6R`kZPld4?fPMe~!NkFIT0;JVW98}HY*I?3<=hlqOSNyFeC7eN z0-Bq}o23fX4q`{gVj@y#o964i0UIB2g?+4XC`_b3{-NGHdyuBHEGpTu&g3=f#4Mg}Jsjy)F9X zRF#I$Dtr|_B8l*q-t(9LaPogBzE~#+97gB#hztGlto!=7Ath2k0W&u~UvRrq(6<1B zpgh7(bCSh547X>uO{atakNX&Nf0B`Hm;GtzRohKFHgutKuzFRx_r!_+0o_L5qE7-@ zJb_jAno8%v>!%@S3lo#nS}c>x`)VCD6t;pG4Ydb&YEp&$mFolr2REpdkMyMMkhX~g}WKyHAr93&WUE~Sw}Pg9L+ zGEx`Bv19e~9;mlByn@zT<;k<^H`waQl_M7pcDFEQ#}7L3+PG=hYUT)kU0%gC-j{o` zt#c8}WIrKZUDM!FLkh9Dh2>XPi6>JCf9Q|g#)?c44w;re4I0QwcfXX|8sxS#%gUvn zE|4kMxV0NaPnY(3XEn6;+2VRR%L#AmL) zzal#YpZT{zy6rEc!STl*>+lK%yAC{~=oB)J3j3WuT~~qPL^FN@sU6i%6JkEshe;`a zJ$-LKbAiN{2|n0BV3OUI>xX~_Hy5wc0o&~=TnE*6XX+7lJ?7Qdzdodb9DeQ`K6(i7 z`PL^9vE!rWvK6sz=_vSmcT(uINr(kDl zOO&no5V#W;%S%Ph%XMZS?GUwDRAhCia2&N^j_7sFIvMjD90;S!h{o%UeaZ`I*aUId z=Hg1OI6Oz8x05p}ZTqPybfqxC>#!Ue)^9g$&DTn_Kh_tc{j!2+Scyyofaf7L`MB&i zF@S@=DJ%Ui;`gI(k6HMwe7dp?2mJ~ar5wg%<-((3>$ry9ohM8bY7b)GdytcNIvHR3 z9WB$4j%kSOl;k+JqxR`#?gz2!(lQQeKgYhca{ae4G%Qf#Zeh;?d)N=F^iWW+vR1{V z=pvX4S|^b?K1y`Mrp-vvG!H!R;=9ck`oA@ksoj>&kKrIAP?_G>E<%6~L3g&~2*aZx zoH9nQgAWGeS??Po5@BCP#UH2Sq3ZkVX?D81% zro7cg2oBU8!Mlm__+79%+}ej@>%Z3iv)6S-y}giVXq?ot@SxAeW2$`tVp_L2XFx<1EgU12d4a<90v?|yn)z7 zF{faau6JMAI$64N|7Or5Zbt4x7Q&9M@~=kK!|!(%CgpE_lg*|vP=bB&@%k2;aRc)) zKcgnAx}4!5?|%IHiItHvgrHkZcBB%el$znxOJYwIVW1D_oKMH1`K=2xrLZvWYWdZ+ zy2Gxs-9M_h?s-A463!noNgG>ts&&x-7%2p_z9&l58IG9+GPTs%Eq zpEpd#f#ku_MPuoUY%flNef8oShH49k@SAcZiSCuF_kAN$hg-7K3M*0X;P&Yq>hs>U zeevFJSug;aS1&-3yCfl5spU6hUKnIzX!<3M1|Mqcqgvo4i{5yIEAF#z#?cA>1#&6G z`V1Xq=2o^&P}DX|mVU^Zms&!a(T`idbQ;l8l`RvjG@v8^OthIt+&8X&W&jJB zR;7D;<1p3N*92=%DtD4vSmAOHnkp$`@-H5*ka|j+dRFWWxH6uN=ecn?c%)nMdq=+# zJ-R9+fHeZX$}xyUB+J=ealu^W#mP1=w_Yi{E6%FfqNUnp$a@&^n|+!;?@P7+2Qbk? z9FaT<9KNj$#~9D=gZbgN&J2&z4=jP@u>Fc3{F9gRa?i>{c#b+-qtsUwd@&c(@|R22 zh|40q5h>vBwL9Ad;64jp0D7e6$20!h9gu8DNRO`&2FFgL6>>(-&$j(zF}V4&!&^0f z&D+I$v$)%Kw88$?oXv^>SeCq}Ec%S91r}pJqvj{GY+V78$V`b=JR1>eUDkX6VVV8& zyov9n2^TJFpM+@br5A%-oTX@Z)@L0*l$eg$D7Eo?Ba7~4dsbNdzJI6-T!ovED{M4h<5tVZiVMM7yB5t2fi=MAxN z{w?iY74mR;a3L^kqIRac^OIt0lKs}3sRe1P3zkipT<}Cb3VL6ptdDiUq~6RP)PMQA zz!tKo)%S%5n1al|sWV(W)gBfk+{ZRhC7%f9a|Qd%=Ij05-cttrbkuKQwmjRO|22Wtz=c%ohb;Z*p1&*%w{NQc7Y@h4?|Lr7u6PahyNcx2~i=|s;RtTK&((4}$72OzXd{iH& z8%`_bv=QI;j2h`Owb~?pxerbf5$6OuExwg{Y%Cc`i8P=lPQYSqIT_qi*qCoeS%CB}653vK0k{jdPTW)PNxl5Q@1!#GTt0$KVv8qjt9AD;rVt*Y>74v$@0 zk@S>$)(W6fV?zBRAect(@vhC$&``B*j#1gw=_fTGi}5PN4nH@(DA$4V)_<~2 zJg(auK=r;(CRxxf*q;a>$HHIZ^mK7=7sFRYw_=X8W1AH4R$+X7q(SEDju$z`iFMrhazTr$rXoR99U@}GUArMj^#0phZ1e6tYr6|D_pt7<;mV!nqb(j;`Lh4ngqijF(F9W~thTHatJOpQc^Z()R_ zoYvE1rso|%RMEwJ7!8h|_>0bukTX7);mS5y;WkvrY3?RT?c~;c)RXdEkwBk#VURmL ze93$-H{>WVPA1;P^>tn-e{Mx(@jTg@wZ~m;d$XaR#zrU*#Qu3vvkic*>(%Ll*?y&_GNa@6;e^FMmoesPGb48-^k8%<}?h&Wks4`vCbf3tbP zKWDbsGRqaU7;#H#rpD_^#<{}$Q_J_J@An+?&pzYwHJB-VasJJ-=8i}UZI$`#DjmQ< zb_nV;NB?zH#M!l~Wn(PglH;}E2tAmh=x^|{tPONcN!(P=sT?MQZS@i8?^~aE#GktM zGD{T46=!0X2{mVXJCq#@*ZFoJFx|PuQ4!p~m@bgs)tky1Ii7S@!c)qAUn_g@4_Bq< z7A`(>0eD1Ujw1~F!8Ggf(p%S~1Kmegi%^&m8fTp66UTmP+MGsWO9mbS?w`>&odLnl z_(GwPI1NYcY?AYU$wGqTqoAwg3OFbofE$rW?4ttGbFs&O(lSX{~roxd4; ziw?@N^$T5>F|t7P@us4svOI;jHeOV<*_Kwd?QGgd=QT6wl9IY_j?!m)1efTt@bBsX zsCqkQ1;{#W4J;0tyoX7L^P>NxT?Zrdo5_6l`{;<&zC6IZR}@zRCxNbEYSFx}>}i>^=j=bt5`VTT%9Rt9pz1G*?=lOQ;(Cu&jv% zaw2)+0RXR8DnGYFbr2tE!sejo7_baLcrIb9C8%$|27K-;cPZh}gliJ(Cx8 zN)q8;@X*Z%;}2ZG7Qw4hU;?mxz(u^tk;C#wr*5GNDwkcxo!!$@kH)*}74{2-yK$xJ zg;%$H2A(~b@YSvT+vWn6qls!vw>AJHA^P-5&PTKyY#7k-`N8tr@0Dl5v6N2$tc-)k zt$?4D$*-T-J*Xik3XxW%9qc|Md|{9dcl{(YPz2ab*|jSzM#9fQe4Vb6poMOYM8J=2 zLxp{aZFa+!%aTQzHK*u%^U6u2%+~-V)`?hZ+uU(Ig#6=`;G9g-(}jk6HJy~4(faz` zJN-H3F_a71cf8gf%}>y<=<*#9+*dMfgd4Kk=0N!O`DCkh3u&h<2?;XfCuY(@CmNbx zuY;O%S?o{Xp)@^#d+3-&VUOk(r{|eMeaiptY%$L|A}(DdioMG$2m!%ak*;?+qwZnK zDot(-Ur#GuNCd6>wtwPI!L5hdbq=Sm__>dO_l%8R4{DXP)nZ}Z8N6#|UxWKRPW|jL z_c#W^Ftz0|CacZRFd=bRzWif=i%##mMx>5ZXN? z3?y6I>S?gxnu5aRg;m66l!cUJ4W6yM%Dfn~#TQQO`tTgrl6^@90y9%~*ahegeX*!h ze82Tkw%uLicfS*rCvDD}!Vp+CCb6OnM~6h2zp zK(01;8dV9P2^TdlrlivdvRRdLsNS15oXZCuvCnS*%6hapl)JM0@f7jRfH&mv36q!H zVG0UI=AmiL;<-KIpVUKs$dSF@%eq4`XhABU>n1`3_d}!jW$Sh1%-~HJS$t<1{kE~& zucO@x#)jPOy?Xc}+1&egB(#qW2%pYldURZSk?ueESXz+Rd7;yM1Y)u0p|Y@ypeIc$ zA`w+;+ygEMw1plY{7hMy~Sw0+|@%JhTl zi~DdDgZWMQ&g})%MwXsXve(e%vladwtDOfGE6WuzRy_So;P~^Gps?Fy~mZN5&t?x+@3#V>=71-*UN6{a<^AX?xDy!tcDpP zET!+);^EvIDZg^sz%ykrYEFA4Ye|pNQUMYd|}ayZs*rS`!Q6O@fxvIY2F0f;3S=nh9y-Q9ftT7 z;aVzb@(I^86?z|1VG)17fP9}Qu>`J8`{b_|!+b`=fh0$AL2`Nz&BpRl^_tW)ES!4+ zDT$cL%Y-U)FSXiqGwZhe$$!36crraSMmqWFLTckjS=ouKxT=X9XX@t;$WC2c?C?|* z4%ZWLTQ83??2nxu&*(<^8#lf*(JU)=C+j+Wtu2)~XmDBrS*>i>5i0Dm{eBAtI;x#3 zNkJuYs^FZ#9Cl?>mleoidLT7lcJht&OD3iM)hgprmLmEUsVYUmE8getC_1{f3({~S z)fHpic>1naNqjn)#@HOez4LV8P;s(K3Ct%3_a5`YZn*RuJy8S zQNII|o0uPukTUy57~pLYkENLdcD#23+3lKV9X)X>kxBBiR2MPMlsRX_k>ALqP1`Mb z>i@nk)%NX?{Ae9LK9;XdsQbn3ItOsWdL*2HN9QRUmnWVMHk*GS^}&qF&KYpA z`|27fsZhI$<1AKM8o5P+VI)5PK-e`n`bpku=qu@=4oba#pLW#+?N=QML|7G?#;aM1 zrq%n5zP=m1uA=Qfu@y--XRJD&{tIH2gdH)8Ot~V-aY+Ro+%!rPOsg5aELD0^udyth z`(bcw-@Rd^ylf1|jO|z4d`Wh&GfUJTQteOBkIG$(V&jqP8ql9cy@ix^i=)-= z{FR*{z(upOqkfs6K%AH`_xlg9kdjMo3?27UB`r2!HiEV1_B&?Ha+y~hAEF?V{^eRF z-N)T#TQ#^BC$7PU$7G9}MU}wyEFK)cRa+EPDv6oO8s=Uu4r??9hTAq!>`7}sW3+V> z=F$u0?Nh=N4ZnN$@?+YY(V?^co_fCO#{KLxaZXR}mE(VI$f`G|n?!vo1tOMZ z7nw0Q_n9aMl8L_1zDv&rky6-!n+bpU;Ow?)>SX&9u0KNombCYUuvwc7P}{$foX5yX z)19UE<&sp#R`h1Otv18Vf)}q+dDXLkr~`UoGyjYC)ZG7vt+RY;tAW3K5`t@?xE7~4 z6!!{Hw79#rxH|-B3&km}p}4yg5AIOh3ZbRA1Sb$=d499IvoH1!xUcTay=T7XoX^o` zWMj*G!M0uaDg=*kOM*eFB!vLqaHNepHH#FW7Nn8GD`oY@Ql95`+ghlgZHD-*){Nm_ ztixy2QgV1$Di?e+ecD^-L}Dtiai=qMQ}FoBU`yAJ+c|6%IzZKZ-5;Bp^xPFH^`*&> zM}B@Jl#uwJey+qVl?ORYKzcQS7n2WNj%s`YIE9uEjTSoiuc2z)QHG3s+mBmJgKL`L9zg|BZzvfa$z(yxlNm92&Kr6X3>1~%g(*HyzTA9-e zRL3_&uY%waYG~9f;;Q+1!0Zk{rqNZ$r+dtP|7MGdl*P#q8Xq9qr}zg-z92Ph^V?Wq zQ*8(IrV1u=J9;8qCc8w>4eifu!Z@!~6BKn+^PtGQog08nrgx{k2`0fx8|@-<=Ur)7 zntBvR*KJ%oR{=BDI1_}1K`L&(HV+CYMEKvMk2$(D&Ko6li%7!V)_mqC8ZZ@N@Hr?P zjVoOQd%Ec=O$~IIYqk9WGKAnr5FBM4Eqb8OJ9=@k%{WYF~=`~`dQjR1^Qstq^d&mem>C@ey&8zNZj zBO}Th80;Hl=~!_K)zq6pNY@QXpAS4%xG-OKAs+}k#)7wkrt8qw;#FwAeA&9i-CtvY zkwB19{SkbR)J3IY!yF!`*4nU4x&* zUEI-LVva0=6UdaH`hj;Jvt34xwruptDfQ^|1YTg$1&`NX;_IZ!hu`;JKAhI^2OyWz zE~PMJGf%p#51-9jN(Td|wy-{6WY@Z`i{y&O7;6{ZH}


4~ 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

    ` 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ⅆVv55Cpv2 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
  1. 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 Kl&fHI=l=jSx(4L{ literal 0 HcmV?d00001 diff --git a/amplify-migration-apps/store-locator/images/deploying-main-branch.png b/amplify-migration-apps/store-locator/images/deploying-main-branch.png new file mode 100644 index 0000000000000000000000000000000000000000..0f19512dc15d0a5726f6840e16cbff5290a52158 GIT binary patch literal 100219 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�(vqwVs`Nacv%cLdfwA7bnPXZ1++z1h`*0fD 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≥-tz9zP|CNSOBzgfEkXioVa zQkj(%{+s>V&*G&mR<^SX|MKmtRuV@^Na!)hC+-(5x(0Bk2sciF-o&RX@*e}?X)p`W z-Bj}M{PtU@$;=FH?W|m22ub(G=`qTxR&^rHpNaazRi?v!r&@<Cl~6dT(X|3s@btJm@V?_g{6kPAj~!vb>Bst5Q}2LxW8IKv>%KJb zuQ%V_I6M%dpj-f24-EX1!|)5Z$B%lUYF{90WC9S16(e};(KN(SlWB?_@p1A}0bnpf zonGW6cB-#x!qlYEyOB~oFFrbmB8%*23-(_LeWBcSOpX59KOSjOYX-a(i#ql=F2>s@ z(Vqcqoz|D7T)(RW1_(~FxB?E^Yj4|``~leC&4gsfXe_B%S~5NO6=bNpo&k4lT5*E{j+j%QKTA#YzOmXP7(lzaxrY03Zqi!{XG_J%{zZId#MAIAT6{A4&-^{z4IY_rCfO8!M z^gx4_P>W{eS))Xl%K(vM<~00c-hmSUBMtOw^onYO90iI-kfjC3?h8Mz04AGU^5E+i z>fAJY4f*GH4zolJj#nrSso$JEXJk10Cms5ukWx&k(<~VMtwMgvAc^+%QEyzZFE4S- zhO@7~lszV|W*dX?Uf=#NNEta9!v3;_pa>7{dV_=t_>?SJlR2;}_Og@}Xtk3%!$N2za=mcu7j&2k9)8(4?{-n%tzD2e$(ajY5$zrfPQv zrx6on5b3}@s1-PVf&ZR9^rK%9^B)=eC--?=mml;bmY1AOE@O_ZvG0yG(t_AKWZweWE5| zL`Ee%g%0~S%l4lO_-}r(AsQM_r?&uWk6z|t7!?(jrly+8gP9a{S5T+VL0QM5+;D2c Z_w3}{+(%ka5b#hcP4zo!1*)e0{{vzANp%1K literal 0 HcmV?d00001 diff --git a/amplify-migration-apps/store-locator/images/find-gen2-stack.png b/amplify-migration-apps/store-locator/images/find-gen2-stack.png new file mode 100644 index 0000000000000000000000000000000000000000..6e62d9e9d1c9babbe7092eea83dd93bd61f6bdd7 GIT binary patch literal 76269 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 z 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 BGNk|j literal 0 HcmV?d00001 diff --git a/amplify-migration-apps/store-locator/images/hosting-get-started.png b/amplify-migration-apps/store-locator/images/hosting-get-started.png new file mode 100644 index 0000000000000000000000000000000000000000..498dfa66164eec58cf91c57d26de8d8322253c2a GIT binary patch literal 89784 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 U5K=hx8}LU(QR7b0ZPS + + + + + + storelocator + + +
    + + + diff --git a/amplify-migration-apps/store-locator/package.json b/amplify-migration-apps/store-locator/package.json new file mode 100644 index 00000000000..8a49ddcd8df --- /dev/null +++ b/amplify-migration-apps/store-locator/package.json @@ -0,0 +1,41 @@ +{ + "name": "@amplify-migration-apps/store-locator", + "private": true, + "version": "0.0.0", + "type": "module", + "installConfig": { + "hoistingLimits": "workspaces" + }, + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview", + "sanitize": "tsx ../sanitize.ts", + "typecheck": "cd _snapshot.post.generate/amplify && npx tsc --noEmit" + }, + "dependencies": { + "@aws-amplify/geo": "^3.0.92", + "@aws-amplify/ui-react": "^6.13.2", + "@aws-amplify/ui-react-geo": "^2.2.13", + "aws-amplify": "^6.16.0", + "maplibre-gl": "^2.4.0", + "maplibre-gl-js-amplify": "^4.0.2", + "react": "^19.2.0", + "react-dom": "^19.2.0" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@types/node": "^24.10.1", + "@types/react": "^19.2.5", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "eslint": "^9.39.1", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "globals": "^16.5.0", + "typescript": "~5.9.3", + "typescript-eslint": "^8.46.4", + "vite": "^7.2.4" + } +} diff --git a/amplify-migration-apps/store-locator/public/vite.svg b/amplify-migration-apps/store-locator/public/vite.svg new file mode 100644 index 00000000000..e7b8dfb1b2a --- /dev/null +++ b/amplify-migration-apps/store-locator/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/src/App.css b/amplify-migration-apps/store-locator/src/App.css new file mode 100644 index 00000000000..913eace8803 --- /dev/null +++ b/amplify-migration-apps/store-locator/src/App.css @@ -0,0 +1,158 @@ +.app { + height: 100%; + display: flex; + flex-direction: column; +} + +.header { + padding: 1rem; + background-color: #232f3e; + color: white; + position: relative; +} + +.header h1 { + margin: 0 0 0.5rem 0; + font-size: 1.5rem; + font-weight: 500; +} + +.search-form { + display: flex; + gap: 0.5rem; +} + +.search-input { + flex: 1; + padding: 0.5rem; + border: none; + border-radius: 4px; + font-size: 1rem; +} + +.search-button { + padding: 0.5rem 1rem; + background-color: #ff9900; + border: none; + border-radius: 4px; + color: #232f3e; + font-weight: 500; + cursor: pointer; +} + +.search-button:hover { + background-color: #ffac31; +} + +.search-button:disabled { + background-color: #ccc; + cursor: not-allowed; +} + +.search-results { + position: absolute; + top: 100%; + left: 1rem; + right: 1rem; + background: white; + color: #232f3e; + list-style: none; + margin: 0; + padding: 0; + border-radius: 0 0 4px 4px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + z-index: 1000; +} + +.search-results li { + padding: 0.75rem 1rem; + cursor: pointer; + border-bottom: 1px solid #eee; +} + +.search-results li:last-child { + border-bottom: none; +} + +.search-results li:hover { + background-color: #f5f5f5; +} + +.map-container { + flex: 1; + width: 100%; +} + + +/* Fix marker popup sizing */ +.maplibregl-popup-content { + padding: 10px !important; + box-sizing: border-box; + width: auto !important; + min-width: unset !important; + max-width: 250px !important; +} + +.maplibregl-popup { + max-width: none !important; +} + +.maplibregl-popup-content h3 { + margin: 0 0 5px 0; + font-size: 14px; +} + +.maplibregl-popup-content p { + margin: 0; + font-size: 12px; +} + + +/* Auth section styles */ +.header-top { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 0.5rem; +} + +.auth-section { + display: flex; + align-items: center; + gap: 0.5rem; +} + +.user-email { + font-size: 0.875rem; + opacity: 0.8; +} + +.sign-out-button { + padding: 0.25rem 0.5rem; + background-color: transparent; + border: 1px solid white; + border-radius: 4px; + color: white; + font-size: 0.75rem; + cursor: pointer; +} + +.sign-out-button:hover { + background-color: rgba(255, 255, 255, 0.1); +} + +/* Amplify Authenticator overrides */ +[data-amplify-authenticator] { + --amplify-components-button-primary-background-color: #ff9900; + --amplify-components-button-primary-hover-background-color: #ffac31; +} + + +/* Center the Authenticator */ +[data-amplify-authenticator] { + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; + background-color: #232f3e; +} diff --git a/amplify-migration-apps/store-locator/src/App.tsx b/amplify-migration-apps/store-locator/src/App.tsx new file mode 100644 index 00000000000..f4be171cb61 --- /dev/null +++ b/amplify-migration-apps/store-locator/src/App.tsx @@ -0,0 +1,208 @@ +import { useEffect, useRef, useState } from 'react'; +import { createMap, drawPoints, AmplifyGeofenceControl } from 'maplibre-gl-js-amplify'; +import maplibregl from 'maplibre-gl'; +import { Geo } from '@aws-amplify/geo'; +import { Authenticator } from '@aws-amplify/ui-react'; +import 'maplibre-gl/dist/maplibre-gl.css'; +import 'maplibre-gl-js-amplify/dist/public/amplify-map.css'; +import 'maplibre-gl-js-amplify/dist/public/amplify-ctrl-geofence.css'; +import '@aws-amplify/ui-react/styles.css'; +import './App.css'; + +// Sample store locations - New York +const storeLocations = [ + { + coordinates: [-73.9857, 40.7484] as [number, number], + title: 'Midtown Manhattan Store', + address: '350 5th Avenue, New York, NY', + }, + { + coordinates: [-73.9805, 40.787] as [number, number], + title: 'Upper West Side Store', + address: '2100 Broadway, New York, NY', + }, + { + coordinates: [-73.9442, 40.6782] as [number, number], + title: 'Brooklyn Store', + address: '445 Albee Square, Brooklyn, NY', + }, + { + coordinates: [-74.006, 40.7128] as [number, number], + title: 'Financial District Store', + address: '100 Wall Street, New York, NY', + }, + { + coordinates: [-73.9855, 40.758] as [number, number], + title: 'Times Square Store', + address: '1560 Broadway, New York, NY', + }, + { + coordinates: [-73.9654, 40.7829] as [number, number], + title: 'Central Park Store', + address: '10 Columbus Circle, New York, NY', + }, + { + coordinates: [-73.9934, 40.7505] as [number, number], + title: 'Hudson Yards Store', + address: '20 Hudson Yards, New York, NY', + }, + { + coordinates: [-73.9776, 40.7614] as [number, number], + title: 'Rockefeller Center Store', + address: '45 Rockefeller Plaza, New York, NY', + }, + { + coordinates: [-74.0445, 40.6892] as [number, number], + title: 'Staten Island Ferry Store', + address: '4 Whitehall Street, New York, NY', + }, + { + coordinates: [-73.9496, 40.6501] as [number, number], + title: 'Flatbush Store', + address: '900 Flatbush Avenue, Brooklyn, NY', + }, +]; + +interface SearchResult { + label?: string; + geometry?: { + point?: [number, number]; + }; +} + +interface StoreLocatorProps { + signOut: () => void; + user: { signInDetails?: { loginId?: string } }; +} + +function StoreLocator({ signOut, user }: StoreLocatorProps) { + const mapRef = useRef(null); + const markerRef = useRef(null); + const [searchQuery, setSearchQuery] = useState(''); + const [searchResults, setSearchResults] = useState([]); + const [isSearching, setIsSearching] = useState(false); + + useEffect(() => { + async function initializeMap() { + const map = await createMap({ + container: 'map', + center: [-73.9857, 40.7484], + zoom: 11, + }); + + mapRef.current = map; + + map.on('load', function () { + drawPoints('storeLocations', storeLocations, map, { + showCluster: true, + unclusteredOptions: { + showMarkerPopup: true, + }, + clusterOptions: { + showCount: true, + smCircleSize: 20, + mdCircleSize: 30, + lgCircleSize: 40, + clusterMaxZoom: 12, + }, + }); + + // Add geofence control + const geofenceControl = new AmplifyGeofenceControl(); + map.addControl(geofenceControl as unknown as maplibregl.IControl); + }); + } + + initializeMap(); + + return () => { + if (mapRef.current) { + mapRef.current.remove(); + } + }; + }, []); + + const handleSearch = async (e: React.FormEvent) => { + e.preventDefault(); + if (!searchQuery.trim()) return; + + setIsSearching(true); + try { + const results = await Geo.searchByText(searchQuery, { + maxResults: 5, + }); + setSearchResults(results); + } catch (error) { + console.error('Search error:', error); + setSearchResults([]); + } finally { + setIsSearching(false); + } + }; + + const handleResultClick = (result: SearchResult) => { + if (result.geometry?.point && mapRef.current) { + const [lng, lat] = result.geometry.point; + + if (markerRef.current) { + markerRef.current.remove(); + } + + markerRef.current = new maplibregl.Marker({ color: '#ff9900' }) + .setLngLat([lng, lat]) + .setPopup(new maplibregl.Popup().setHTML(`${result.label}`)) + .addTo(mapRef.current); + + mapRef.current.flyTo({ + center: [lng, lat], + zoom: 15, + }); + setSearchResults([]); + setSearchQuery(''); + } + }; + + return ( +
    +
    +
    +

    Store Locator

    +
    + {user.signInDetails?.loginId} + +
    +
    +
    + setSearchQuery(e.target.value)} + className="search-input" + /> + +
    + {searchResults.length > 0 && ( +
      + {searchResults.map((result, index) => ( +
    • handleResultClick(result)}> + {result.label} +
    • + ))} +
    + )} +
    +
    +
    + ); +} + +function App() { + return {({ signOut, user }) => }; +} + +export default App; diff --git a/amplify-migration-apps/store-locator/src/amplifyconfiguration.json b/amplify-migration-apps/store-locator/src/amplifyconfiguration.json new file mode 100644 index 00000000000..a3e03b57894 --- /dev/null +++ b/amplify-migration-apps/store-locator/src/amplifyconfiguration.json @@ -0,0 +1,51 @@ +{ + "aws_project_region": "us-east-1", + "aws_cognito_identity_pool_id": "us-east-1:4ea514e6-bc16-4990-a5ea-cefe84c3050d", + "aws_cognito_region": "us-east-1", + "aws_user_pools_id": "us-east-1_R1pdziFVe", + "aws_user_pools_web_client_id": "6am6ldh23n8ke819nuvk51cddq", + "oauth": {}, + "aws_cognito_username_attributes": [ + "EMAIL" + ], + "aws_cognito_social_providers": [], + "aws_cognito_signup_attributes": [ + "EMAIL" + ], + "aws_cognito_mfa_configuration": "OFF", + "aws_cognito_mfa_types": [ + "SMS" + ], + "aws_cognito_password_protection_settings": { + "passwordPolicyMinLength": 8, + "passwordPolicyCharacters": [] + }, + "aws_cognito_verification_mechanisms": [ + "EMAIL" + ], + "geo": { + "amazon_location_service": { + "region": "us-east-1", + "maps": { + "items": { + "storeLocatorMap-main": { + "style": "VectorEsriStreets" + } + }, + "default": "storeLocatorMap-main" + }, + "search_indices": { + "items": [ + "storeLocatorSearch-main" + ], + "default": "storeLocatorSearch-main" + }, + "geofenceCollections": { + "items": [ + "storeLocatorGeofence-main" + ], + "default": "storeLocatorGeofence-main" + } + } + } +} \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/src/assets/react.svg b/amplify-migration-apps/store-locator/src/assets/react.svg new file mode 100644 index 00000000000..6c87de9bb33 --- /dev/null +++ b/amplify-migration-apps/store-locator/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/amplify-migration-apps/store-locator/src/aws-exports.js b/amplify-migration-apps/store-locator/src/aws-exports.js new file mode 100644 index 00000000000..2f8c052177d --- /dev/null +++ b/amplify-migration-apps/store-locator/src/aws-exports.js @@ -0,0 +1,57 @@ +/* eslint-disable */ +// WARNING: DO NOT EDIT. This file is automatically generated by AWS Amplify. It will be overwritten. + +const awsmobile = { + "aws_project_region": "us-east-1", + "aws_cognito_identity_pool_id": "us-east-1:4ea514e6-bc16-4990-a5ea-cefe84c3050d", + "aws_cognito_region": "us-east-1", + "aws_user_pools_id": "us-east-1_R1pdziFVe", + "aws_user_pools_web_client_id": "6am6ldh23n8ke819nuvk51cddq", + "oauth": {}, + "aws_cognito_username_attributes": [ + "EMAIL" + ], + "aws_cognito_social_providers": [], + "aws_cognito_signup_attributes": [ + "EMAIL" + ], + "aws_cognito_mfa_configuration": "OFF", + "aws_cognito_mfa_types": [ + "SMS" + ], + "aws_cognito_password_protection_settings": { + "passwordPolicyMinLength": 8, + "passwordPolicyCharacters": [] + }, + "aws_cognito_verification_mechanisms": [ + "EMAIL" + ], + "geo": { + "amazon_location_service": { + "region": "us-east-1", + "maps": { + "items": { + "storeLocatorMap-main": { + "style": "VectorEsriStreets" + } + }, + "default": "storeLocatorMap-main" + }, + "search_indices": { + "items": [ + "storeLocatorSearch-main" + ], + "default": "storeLocatorSearch-main" + }, + "geofenceCollections": { + "items": [ + "storeLocatorGeofence-main" + ], + "default": "storeLocatorGeofence-main" + } + } + } +}; + + +export default awsmobile; diff --git a/amplify-migration-apps/store-locator/src/index.css b/amplify-migration-apps/store-locator/src/index.css new file mode 100644 index 00000000000..5d5be76d5d0 --- /dev/null +++ b/amplify-migration-apps/store-locator/src/index.css @@ -0,0 +1,11 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html, +body, +#root { + height: 100%; +} diff --git a/amplify-migration-apps/store-locator/src/main.tsx b/amplify-migration-apps/store-locator/src/main.tsx new file mode 100644 index 00000000000..ff81d6c69dc --- /dev/null +++ b/amplify-migration-apps/store-locator/src/main.tsx @@ -0,0 +1,14 @@ +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; +import { Amplify } from 'aws-amplify'; +import './index.css'; +import App from './App.tsx'; +import amplifyconfig from './amplifyconfiguration.json'; + +Amplify.configure(amplifyconfig); + +createRoot(document.getElementById('root')!).render( + + + , +); diff --git a/amplify-migration-apps/store-locator/tsconfig.app.json b/amplify-migration-apps/store-locator/tsconfig.app.json new file mode 100644 index 00000000000..a9b5a59ca64 --- /dev/null +++ b/amplify-migration-apps/store-locator/tsconfig.app.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/amplify-migration-apps/store-locator/tsconfig.json b/amplify-migration-apps/store-locator/tsconfig.json new file mode 100644 index 00000000000..1ffef600d95 --- /dev/null +++ b/amplify-migration-apps/store-locator/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/amplify-migration-apps/store-locator/tsconfig.node.json b/amplify-migration-apps/store-locator/tsconfig.node.json new file mode 100644 index 00000000000..8a67f62f4ce --- /dev/null +++ b/amplify-migration-apps/store-locator/tsconfig.node.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2023", + "lib": ["ES2023"], + "module": "ESNext", + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/amplify-migration-apps/store-locator/vite.config.ts b/amplify-migration-apps/store-locator/vite.config.ts new file mode 100644 index 00000000000..8d84b235208 --- /dev/null +++ b/amplify-migration-apps/store-locator/vite.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], + define: { + global: 'globalThis', + }, + resolve: { + alias: { + './runtimeConfig': './runtimeConfig.browser', + }, + }, +}); diff --git a/packages/amplify-cli/package.json b/packages/amplify-cli/package.json index 89caa667a6d..5d311cf5d93 100644 --- a/packages/amplify-cli/package.json +++ b/packages/amplify-cli/package.json @@ -89,7 +89,7 @@ "amplify-python-function-runtime-provider": "2.4.54", "aws-cdk-lib": "~2.189.1", "bottleneck": "2.19.5", - "cdk-from-cfn": "^0.271.0", + "cdk-from-cfn": "^0.291.0", "chalk": "^4.1.1", "ci-info": "^3.8.0", "cli-table3": "^0.6.0", diff --git a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate.test.ts b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate.test.ts index d692cf96f55..41c5aa3ffb8 100644 --- a/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate.test.ts +++ b/packages/amplify-cli/src/__tests__/commands/gen2-migration/generate.test.ts @@ -66,6 +66,10 @@ test('mood-board snapshot', async () => { await testSnapshot('mood-board', { buildSpec: BUILDSPEC }); }); +test('store-locator snapshot', async () => { + await testSnapshot('store-locator', { buildSpec: BUILDSPEC }); +}); + async function testSnapshot(appName: string, appOptions?: MigrationAppOptions, customize?: (app: MigrationApp) => Promise) { await MigrationApp.run( appName, diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate.ts b/packages/amplify-cli/src/commands/gen2-migration/generate.ts index c62d996b5f8..ba507b4b575 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate.ts @@ -121,7 +121,7 @@ export class AmplifyMigrationGenerateStep extends AmplifyMigrationStep { case 'geo:GeofenceCollection': // All geo services share a single GeoGenerator instance. if (!geoGenerator) { - geoGenerator = new GeoGenerator(gen1App, backendGenerator, outputDir); + geoGenerator = new GeoGenerator(gen1App, backendGenerator, outputDir, resource); generators.push(geoGenerator); } break; diff --git a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/geo/geo.generator.ts b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/geo/geo.generator.ts index 4c4a8793ac3..ee0e65cb048 100644 --- a/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/geo/geo.generator.ts +++ b/packages/amplify-cli/src/commands/gen2-migration/generate/amplify/geo/geo.generator.ts @@ -4,7 +4,7 @@ import ts from 'typescript'; import { Planner } from '../../../planner'; import { AmplifyMigrationOperation } from '../../../_operation'; import { BackendGenerator } from '../backend.generator'; -import { Gen1App } from '../../_infra/gen1-app'; +import { DiscoveredResource, Gen1App } from '../../_infra/gen1-app'; import { TS } from '../../_infra/ts'; import { GeoRenderer } from './geo.renderer'; import { GeoCfnConverter, GeoCodegenResult, GeoServiceName, GeoProviderMetadata } from './geo-cfn-converter'; @@ -34,12 +34,14 @@ export class GeoGenerator implements Planner { private readonly backendGenerator: BackendGenerator; private readonly outputDir: string; private readonly renderer: GeoRenderer; + private readonly resource: DiscoveredResource; - public constructor(gen1App: Gen1App, backendGenerator: BackendGenerator, outputDir: string) { + public constructor(gen1App: Gen1App, backendGenerator: BackendGenerator, outputDir: string, resource: DiscoveredResource) { this.gen1App = gen1App; this.backendGenerator = backendGenerator; this.outputDir = outputDir; this.renderer = new GeoRenderer(); + this.resource = resource; } /** @@ -59,6 +61,7 @@ export class GeoGenerator implements Planner { const service = meta.service as GeoServiceName; operations.push({ + resource: this.resource, validate: () => undefined, describe: async () => [`Generate amplify/geo/${resourceName}/resource.ts`], execute: async () => { diff --git a/yarn.lock b/yarn.lock index 14b3730a9c3..10bff008ea2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -235,6 +235,44 @@ __metadata: languageName: unknown linkType: soft +"@amplify-migration-apps/store-locator@workspace:amplify-migration-apps/store-locator/_snapshot.post.generate": + version: 0.0.0-use.local + resolution: "@amplify-migration-apps/store-locator@workspace:amplify-migration-apps/store-locator/_snapshot.post.generate" + dependencies: + "@aws-amplify/backend": ^1.18.0 + "@aws-amplify/backend-cli": ^1.8.0 + "@aws-amplify/backend-data": ^1.6.2 + "@aws-amplify/geo": ^3.0.92 + "@aws-amplify/ui-react": ^6.13.2 + "@aws-amplify/ui-react-geo": ^2.2.13 + "@eslint/js": ^9.39.1 + "@types/aws-lambda": ^8.10.92 + "@types/node": "*" + "@types/react": ^19.2.5 + "@types/react-dom": ^19.2.3 + "@vitejs/plugin-react": ^5.1.1 + aws-amplify: ^6.16.0 + aws-cdk: ^2 + aws-cdk-lib: ^2 + axios: latest + ci-info: ^4.3.1 + constructs: ^10.0.0 + esbuild: ^0.27.0 + eslint: ^9.39.1 + eslint-plugin-react-hooks: ^7.0.1 + eslint-plugin-react-refresh: ^0.4.24 + globals: ^16.5.0 + maplibre-gl: ^2.4.0 + maplibre-gl-js-amplify: ^4.0.2 + react: ^19.2.0 + react-dom: ^19.2.0 + tsx: ^4.20.6 + typescript: ~5.9.3 + typescript-eslint: ^8.46.4 + vite: ^7.2.4 + languageName: unknown + linkType: soft + "@apideck/better-ajv-errors@npm:^0.3.1": version: 0.3.6 resolution: "@apideck/better-ajv-errors@npm:0.3.6" @@ -1748,7 +1786,7 @@ __metadata: aws-sdk-client-mock: ^4.1.0 aws-sdk-client-mock-jest: ^4.1.0 bottleneck: 2.19.5 - cdk-from-cfn: ^0.271.0 + cdk-from-cfn: ^0.291.0 chalk: ^4.1.1 ci-info: ^3.8.0 cli-table3: ^0.6.0 @@ -2163,6 +2201,21 @@ __metadata: languageName: node linkType: hard +"@aws-amplify/geo@npm:^3.0.92": + version: 3.0.93 + resolution: "@aws-amplify/geo@npm:3.0.93" + dependencies: + "@aws-sdk/client-location": 3.982.0 + "@aws-sdk/types": 3.973.1 + "@turf/boolean-clockwise": 6.5.0 + camelcase-keys: 6.2.2 + tslib: ^2.5.0 + peerDependencies: + "@aws-amplify/core": ^6.1.0 + checksum: cd277e4c1219f6d7871780d9bf68dcfa27db7cf1c8abd5b029d002d60df5bc1e68851989802d62ec3ce43e5cc0a5eecfcd6a4ff87b994b9b084d45e096548ded + languageName: node + linkType: hard + "@aws-amplify/graphql-api-construct@npm:1.21.0": version: 1.21.0 resolution: "@aws-amplify/graphql-api-construct@npm:1.21.0" @@ -3284,7 +3337,26 @@ __metadata: languageName: node linkType: hard -"@aws-amplify/ui-react@npm:^6.10.1, @aws-amplify/ui-react@npm:^6.13.0, @aws-amplify/ui-react@npm:^6.13.1": +"@aws-amplify/ui-react-geo@npm:^2.2.13": + version: 2.3.2 + resolution: "@aws-amplify/ui-react-geo@npm:2.3.2" + dependencies: + "@aws-amplify/ui-react-core": 3.6.2 + mapbox-gl: 1.13.1 + maplibre-gl: 2.1.9 + maplibre-gl-js-amplify: ^4.0.2 + react-map-gl: 7.0.23 + tslib: ^2.5.2 + peerDependencies: + "@aws-amplify/geo": ^3.0.59 + aws-amplify: ^6.14.3 + react: ^16.14 || ^17 || ^18 || ^19 + react-dom: ^16.14 || ^17 || ^18 || ^19 + checksum: 2b1dc7d24b87d165baf80bf833add37441e366dab0636672466fbf909443b5fee75f698a9a9fab2c1147183079cd5250f87c811264210833468299372db38c55 + languageName: node + linkType: hard + +"@aws-amplify/ui-react@npm:^6.10.1, @aws-amplify/ui-react@npm:^6.13.0, @aws-amplify/ui-react@npm:^6.13.1, @aws-amplify/ui-react@npm:^6.13.2": version: 6.15.2 resolution: "@aws-amplify/ui-react@npm:6.15.2" dependencies: @@ -5806,6 +5878,54 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/client-location@npm:3.982.0": + version: 3.982.0 + resolution: "@aws-sdk/client-location@npm:3.982.0" + dependencies: + "@aws-crypto/sha256-browser": 5.2.0 + "@aws-crypto/sha256-js": 5.2.0 + "@aws-sdk/core": ^3.973.6 + "@aws-sdk/credential-provider-node": ^3.972.5 + "@aws-sdk/middleware-host-header": ^3.972.3 + "@aws-sdk/middleware-logger": ^3.972.3 + "@aws-sdk/middleware-recursion-detection": ^3.972.3 + "@aws-sdk/middleware-user-agent": ^3.972.6 + "@aws-sdk/region-config-resolver": ^3.972.3 + "@aws-sdk/types": ^3.973.1 + "@aws-sdk/util-endpoints": 3.982.0 + "@aws-sdk/util-user-agent-browser": ^3.972.3 + "@aws-sdk/util-user-agent-node": ^3.972.4 + "@smithy/config-resolver": ^4.4.6 + "@smithy/core": ^3.22.0 + "@smithy/fetch-http-handler": ^5.3.9 + "@smithy/hash-node": ^4.2.8 + "@smithy/invalid-dependency": ^4.2.8 + "@smithy/middleware-content-length": ^4.2.8 + "@smithy/middleware-endpoint": ^4.4.12 + "@smithy/middleware-retry": ^4.4.29 + "@smithy/middleware-serde": ^4.2.9 + "@smithy/middleware-stack": ^4.2.8 + "@smithy/node-config-provider": ^4.3.8 + "@smithy/node-http-handler": ^4.4.8 + "@smithy/protocol-http": ^5.3.8 + "@smithy/smithy-client": ^4.11.1 + "@smithy/types": ^4.12.0 + "@smithy/url-parser": ^4.2.8 + "@smithy/util-base64": ^4.3.0 + "@smithy/util-body-length-browser": ^4.2.0 + "@smithy/util-body-length-node": ^4.2.1 + "@smithy/util-defaults-mode-browser": ^4.3.28 + "@smithy/util-defaults-mode-node": ^4.2.31 + "@smithy/util-endpoints": ^3.2.8 + "@smithy/util-middleware": ^4.2.8 + "@smithy/util-retry": ^4.2.8 + "@smithy/util-stream": ^4.5.10 + "@smithy/util-utf8": ^4.2.0 + tslib: ^2.6.2 + checksum: 92039a4c23fe94e258f30e94d2ada3d7f08f42324f1a537003b352d0eb2e9e3ffe0b6031beb9cd9e9c685fe5e051e5e2cea562c221fafe9d50dfb79805ecf3ac + languageName: node + linkType: hard + "@aws-sdk/client-location@npm:^3.919.0": version: 3.1007.0 resolution: "@aws-sdk/client-location@npm:3.1007.0" @@ -16210,6 +16330,177 @@ __metadata: languageName: node linkType: hard +"@mapbox/extent@npm:0.4.0": + version: 0.4.0 + resolution: "@mapbox/extent@npm:0.4.0" + checksum: 2c287dcd5e3d2654727f81bb375034cf9c88c828524ff881d72fe20cfd561072d80c652fa58691785211c63f231e9e6dd2c0567a626c2f74198e835d6bfcf669 + languageName: node + linkType: hard + +"@mapbox/geojson-area@npm:^0.2.2": + version: 0.2.2 + resolution: "@mapbox/geojson-area@npm:0.2.2" + dependencies: + wgs84: 0.0.0 + checksum: 46a85e14877bbd24486f4352810b2d078ce072f4a81120b9481eb967334e5cc9d2c5ae8b2ddab2dfbe1c0822b18758b39f078339b43a18754ef514a32e95fb1c + languageName: node + linkType: hard + +"@mapbox/geojson-coords@npm:0.0.2": + version: 0.0.2 + resolution: "@mapbox/geojson-coords@npm:0.0.2" + dependencies: + "@mapbox/geojson-normalize": 0.0.1 + geojson-flatten: ^1.0.4 + checksum: 490709b75cb2cd348a2300ff847e28e5f1f7cf4fdb652ba170ddd3b1c2ad7f9c3261bd8128b82273ef8c85aac6dba171bdf24428aec1b8b993cd3ec7635bc446 + languageName: node + linkType: hard + +"@mapbox/geojson-extent@npm:^1.0.0": + version: 1.0.1 + resolution: "@mapbox/geojson-extent@npm:1.0.1" + dependencies: + "@mapbox/extent": 0.4.0 + "@mapbox/geojson-coords": 0.0.2 + rw: ~0.1.4 + traverse: ~0.6.6 + bin: + geojson-extent: bin/geojson-extent + checksum: d02666aac92d3107b1d32471d9b8cd44ced9c93748f92858f347e9d19044dbeaa3b675c16d154547e52ea35ceaa475ef66abdb29691dd6202beb07c7ccc92c0b + languageName: node + linkType: hard + +"@mapbox/geojson-normalize@npm:0.0.1, @mapbox/geojson-normalize@npm:^0.0.1": + version: 0.0.1 + resolution: "@mapbox/geojson-normalize@npm:0.0.1" + bin: + geojson-normalize: geojson-normalize + checksum: c51e7fa1462a9152493e2b639ce0b50d4c59ed8615f79c6be509312e4db2f29741cae50ecba1b8e290ce50c50f00c892039df3a5306d15712e51a6a28fcd4ecf + languageName: node + linkType: hard + +"@mapbox/geojson-rewind@npm:^0.5.0, @mapbox/geojson-rewind@npm:^0.5.1, @mapbox/geojson-rewind@npm:^0.5.2": + version: 0.5.2 + resolution: "@mapbox/geojson-rewind@npm:0.5.2" + dependencies: + get-stream: ^6.0.1 + minimist: ^1.2.6 + bin: + geojson-rewind: geojson-rewind + checksum: 631f89ba5b656cb1e02197c242b231f98da0afb96815fa26481497176d6bd5f2aac77af4950da91c954094694acbc26382bd3d38146705737e8ff06442d95a12 + languageName: node + linkType: hard + +"@mapbox/geojson-types@npm:^1.0.2": + version: 1.0.2 + resolution: "@mapbox/geojson-types@npm:1.0.2" + checksum: aa0a2cb95a358d8756ab5aa70356bcbd6f554a4571703a88a09e7db6580061d6ef4054db5fe3ecb2817c383b8b5433746a8f46712dc606b32063f73b154f99fc + languageName: node + linkType: hard + +"@mapbox/jsonlint-lines-primitives@npm:^2.0.2": + version: 2.0.2 + resolution: "@mapbox/jsonlint-lines-primitives@npm:2.0.2" + checksum: 5814e42fc453700132f93ea742aabcef9a3c98d9bf17d4c1106f82d1dcd91bbc93052e66e29014323b9b2a41b020c743d897e4a96cc4ed2f734482d587d8c2b2 + languageName: node + linkType: hard + +"@mapbox/mapbox-gl-draw@npm:1.3.0": + version: 1.3.0 + resolution: "@mapbox/mapbox-gl-draw@npm:1.3.0" + dependencies: + "@mapbox/geojson-area": ^0.2.2 + "@mapbox/geojson-extent": ^1.0.0 + "@mapbox/geojson-normalize": ^0.0.1 + "@mapbox/point-geometry": ^0.1.0 + hat: 0.0.3 + lodash.isequal: ^4.5.0 + xtend: ^4.0.2 + checksum: fcf7d33273fcb3cc7a7a9626b1ab0ede859150fcbab9dccde0373e42319b4a33fa768684f371268a97c062eba009e9230b39117081c9cfa06ba7ac60b8368bb2 + languageName: node + linkType: hard + +"@mapbox/mapbox-gl-supported@npm:^1.5.0": + version: 1.5.0 + resolution: "@mapbox/mapbox-gl-supported@npm:1.5.0" + peerDependencies: + mapbox-gl: ">=0.32.1 <2.0.0" + checksum: 5b7712e8b546e598dc5152632504cad53081211b64ddc4447825840ddca703275bc36599167b9550ab906ca8a9554936bcdae562073fdef24b8d38d78ee262fb + languageName: node + linkType: hard + +"@mapbox/mapbox-gl-supported@npm:^2.0.1": + version: 2.0.1 + resolution: "@mapbox/mapbox-gl-supported@npm:2.0.1" + checksum: d4876381cbc2fb401851eebb5195bd2e14b08c0351e9628fb18cfa15e89ce0ab19ac98bdbe6a6c13c6de359b44e07cad0fd2189cd2bfd981a16727618204551d + languageName: node + linkType: hard + +"@mapbox/point-geometry@npm:0.1.0, @mapbox/point-geometry@npm:^0.1.0, @mapbox/point-geometry@npm:~0.1.0": + version: 0.1.0 + resolution: "@mapbox/point-geometry@npm:0.1.0" + checksum: e4d861908574cb3165f5ad37b000416ebc90a2d6b3e0073191e6b6dc5074a6159d84ac5114d78557399bb429134f0d05bfb529e7902d1cb2b36d722b72ab662c + languageName: node + linkType: hard + +"@mapbox/tiny-sdf@npm:^1.1.1": + version: 1.2.5 + resolution: "@mapbox/tiny-sdf@npm:1.2.5" + checksum: de0252388a628ddb491c986c715f0b63ca6a74f5dac16d3e51eb75a21935a31e34fba5db47c81cc59a462d782021fc68b2e3cc119b2d6cabe15d31e311674d6c + languageName: node + linkType: hard + +"@mapbox/tiny-sdf@npm:^2.0.4, @mapbox/tiny-sdf@npm:^2.0.5": + version: 2.0.7 + resolution: "@mapbox/tiny-sdf@npm:2.0.7" + checksum: f117d8537ee4b5ee2deed54b9b426792744c15a649681305b4fb21b608b7c6a815015f015cd612923cc8efa30424d0440abfc1af2c85eda00a726024bb4f3ede + languageName: node + linkType: hard + +"@mapbox/unitbezier@npm:^0.0.0": + version: 0.0.0 + resolution: "@mapbox/unitbezier@npm:0.0.0" + checksum: af1943ebeb7532317a5cedfc38d0e580b7bd76cc5c43988df65541d377f3e3fa7d68c201dda20f5239213a4bc81ec5d13146354107196ffc4f14d6f39b8343b5 + languageName: node + linkType: hard + +"@mapbox/unitbezier@npm:^0.0.1": + version: 0.0.1 + resolution: "@mapbox/unitbezier@npm:0.0.1" + checksum: 97f39d4fbdf9579d0a1a8be0d536eb113a805d36459e774014f488a7ca6cc9dcfc77ab7a2ebe5af395ad50da6efb4dbf2566de0db3f62b6b8675cddbace8f86a + languageName: node + linkType: hard + +"@mapbox/vector-tile@npm:^1.3.1": + version: 1.3.1 + resolution: "@mapbox/vector-tile@npm:1.3.1" + dependencies: + "@mapbox/point-geometry": ~0.1.0 + checksum: ffb271b95c383923768295e72bdf95e428efb906434b864ea04d3853a8373cf0de19f039bd6615f7cf018fbfb4dbf4599f27ebaa86c2b7b09f7d69187f8d7da1 + languageName: node + linkType: hard + +"@mapbox/whoots-js@npm:^3.1.0": + version: 3.1.0 + resolution: "@mapbox/whoots-js@npm:3.1.0" + checksum: fe9e959a9049bcbc2c05d9d1156e050191ad697a1bd95e41cdfa069051ff1d6f2930ced234a8d68d5a0bf78091feab30d76497418ec800d90f0aac8691fe4fd4 + languageName: node + linkType: hard + +"@maplibre/maplibre-gl-geocoder@npm:1.5.0": + version: 1.5.0 + resolution: "@maplibre/maplibre-gl-geocoder@npm:1.5.0" + dependencies: + lodash.debounce: ^4.0.6 + subtag: ^0.5.0 + suggestions-list: ^0.0.2 + xtend: ^4.0.1 + peerDependencies: + maplibre-gl: ">=1.14.0" + checksum: 99b911f0081ef41c446ecc8458ce124a6405ff87e449444ca029cbc579d4d727701863e21ee5f1407da80e9f61a788615384bae91fe086562c69e48d077996ff + languageName: node + linkType: hard + "@microsoft/api-extractor-model@npm:7.33.4": version: 7.33.4 resolution: "@microsoft/api-extractor-model@npm:7.33.4" @@ -18318,6 +18609,16 @@ __metadata: languageName: node linkType: hard +"@smithy/abort-controller@npm:^4.2.12": + version: 4.2.12 + resolution: "@smithy/abort-controller@npm:4.2.12" + dependencies: + "@smithy/types": ^4.13.1 + tslib: ^2.6.2 + checksum: 839bee519c6bc4cf405395f71a07d0b5b42c22ce1c0163a157a61e18804d5dacd4ade1a3b2b69fea26462eecff4c92593726e96318f16ea8adfb419e7f3dab43 + languageName: node + linkType: hard + "@smithy/chunked-blob-reader-native@npm:^4.2.3": version: 4.2.3 resolution: "@smithy/chunked-blob-reader-native@npm:4.2.3" @@ -18573,6 +18874,19 @@ __metadata: languageName: node linkType: hard +"@smithy/fetch-http-handler@npm:^5.3.15": + version: 5.3.15 + resolution: "@smithy/fetch-http-handler@npm:5.3.15" + dependencies: + "@smithy/protocol-http": ^5.3.12 + "@smithy/querystring-builder": ^4.2.12 + "@smithy/types": ^4.13.1 + "@smithy/util-base64": ^4.3.2 + tslib: ^2.6.2 + checksum: 456f98b8bba5214a01aa9ca73ab4088a529ad6473a72cc74747d676d2c5225748167eb3cddccbc2ef884141965132dab49d19b7599414e899c9c36f71a04ce85 + languageName: node + linkType: hard + "@smithy/hash-blob-browser@npm:^4.2.12, @smithy/hash-blob-browser@npm:^4.2.8": version: 4.2.12 resolution: "@smithy/hash-blob-browser@npm:4.2.12" @@ -18868,6 +19182,19 @@ __metadata: languageName: node linkType: hard +"@smithy/node-http-handler@npm:^4.5.0": + version: 4.5.0 + resolution: "@smithy/node-http-handler@npm:4.5.0" + dependencies: + "@smithy/abort-controller": ^4.2.12 + "@smithy/protocol-http": ^5.3.12 + "@smithy/querystring-builder": ^4.2.12 + "@smithy/types": ^4.13.1 + tslib: ^2.6.2 + checksum: b4bbbb47a047a13558a22b3bd22c507dbe91aab36d6859bc77c97253be37966b51ff8c6ab84ebba3ab6dbebf951eec2df004bd8af826a832c0fa033a0d10a8b9 + languageName: node + linkType: hard + "@smithy/property-provider@npm:^3.1.11, @smithy/property-provider@npm:^3.1.3": version: 3.1.11 resolution: "@smithy/property-provider@npm:3.1.11" @@ -18908,6 +19235,16 @@ __metadata: languageName: node linkType: hard +"@smithy/protocol-http@npm:^5.3.12": + version: 5.3.12 + resolution: "@smithy/protocol-http@npm:5.3.12" + dependencies: + "@smithy/types": ^4.13.1 + tslib: ^2.6.2 + checksum: f71f8e54d42637acbef9f01e3974a8ad46187ae020366de4dc84dac7ba8413a8a6fb21369c83b660afa110fc5a56d185c7e48de7d2cf45351ebb1b29aa77962b + languageName: node + linkType: hard + "@smithy/querystring-builder@npm:^3.0.11, @smithy/querystring-builder@npm:^3.0.3, @smithy/querystring-builder@npm:^3.0.7": version: 3.0.11 resolution: "@smithy/querystring-builder@npm:3.0.11" @@ -18930,6 +19267,17 @@ __metadata: languageName: node linkType: hard +"@smithy/querystring-builder@npm:^4.2.12": + version: 4.2.12 + resolution: "@smithy/querystring-builder@npm:4.2.12" + dependencies: + "@smithy/types": ^4.13.1 + "@smithy/util-uri-escape": ^4.2.2 + tslib: ^2.6.2 + checksum: 171c0d4da2fd024466741e6ee1c05cac5664e0da82c4ac5afd3218278925c25ed00bc3518e02481f4daf3f366034f273fb1cb579f146f10d0edee14dc5676c21 + languageName: node + linkType: hard + "@smithy/querystring-parser@npm:^3.0.11, @smithy/querystring-parser@npm:^3.0.3": version: 3.0.11 resolution: "@smithy/querystring-parser@npm:3.0.11" @@ -19086,6 +19434,15 @@ __metadata: languageName: node linkType: hard +"@smithy/types@npm:^4.13.1": + version: 4.13.1 + resolution: "@smithy/types@npm:4.13.1" + dependencies: + tslib: ^2.6.2 + checksum: 775ed9748d9290b8816d933bfb9726eb9301ef2fe9fba1bfbc1966372b9f0d4dd1d3b611aca3c000094bed2ca9d821e10fe2795a75df5bc305bc8845a1e413f7 + languageName: node + linkType: hard + "@smithy/url-parser@npm:^3.0.11, @smithy/url-parser@npm:^3.0.3": version: 3.0.11 resolution: "@smithy/url-parser@npm:3.0.11" @@ -19392,6 +19749,22 @@ __metadata: languageName: node linkType: hard +"@smithy/util-stream@npm:^4.5.10": + version: 4.5.20 + resolution: "@smithy/util-stream@npm:4.5.20" + dependencies: + "@smithy/fetch-http-handler": ^5.3.15 + "@smithy/node-http-handler": ^4.5.0 + "@smithy/types": ^4.13.1 + "@smithy/util-base64": ^4.3.2 + "@smithy/util-buffer-from": ^4.2.2 + "@smithy/util-hex-encoding": ^4.2.2 + "@smithy/util-utf8": ^4.2.2 + tslib: ^2.6.2 + checksum: c21a5a0639197ebb915efd43cb3b03699733c5bb3f56f14abc8abc7af96456d8fcd4f6391ce70d38075a138c9fc4e2bdf215b00c491d47b599c2ab69186c117d + languageName: node + linkType: hard + "@smithy/util-uri-escape@npm:^3.0.0": version: 3.0.0 resolution: "@smithy/util-uri-escape@npm:3.0.0" @@ -19766,6 +20139,41 @@ __metadata: languageName: node linkType: hard +"@turf/along@npm:^6.0.1, @turf/along@npm:^6.5.0": + version: 6.5.0 + resolution: "@turf/along@npm:6.5.0" + dependencies: + "@turf/bearing": ^6.5.0 + "@turf/destination": ^6.5.0 + "@turf/distance": ^6.5.0 + "@turf/helpers": ^6.5.0 + "@turf/invariant": ^6.5.0 + checksum: adfcda37ce8b20d58a18a4b5e0080c8bb8fe17c73006d18b6b412ed2c8c3c1e4ba836a3ac064636148d6f8d1b0be81a0da9335e10d88da3ad909175b99605201 + languageName: node + linkType: hard + +"@turf/bbox@npm:*": + version: 7.3.4 + resolution: "@turf/bbox@npm:7.3.4" + dependencies: + "@turf/helpers": 7.3.4 + "@turf/meta": 7.3.4 + "@types/geojson": ^7946.0.10 + tslib: ^2.8.1 + checksum: d68b9a3a5da99806e66f5b96a62ac639529e0a5f95de391685e5c3a1b21ccf2da113b58dd8b87964756d0a00bca19c024db3ce262b693dbe3c356610ccc68070 + languageName: node + linkType: hard + +"@turf/bearing@npm:^6.5.0": + version: 6.5.0 + resolution: "@turf/bearing@npm:6.5.0" + dependencies: + "@turf/helpers": ^6.5.0 + "@turf/invariant": ^6.5.0 + checksum: 9c6d5bb85289fee408592ffe8768987512dad1793130364bd43cd8a420ec1ea7b376ce35e22c3fdd91c051eaaa70de4682709111c5cf0ca93681fe9ef238a406 + languageName: node + linkType: hard + "@turf/boolean-clockwise@npm:6.5.0": version: 6.5.0 resolution: "@turf/boolean-clockwise@npm:6.5.0" @@ -19776,13 +20184,53 @@ __metadata: languageName: node linkType: hard -"@turf/helpers@npm:^6.5.0": +"@turf/circle@npm:^6.0.1, @turf/circle@npm:^6.5.0": + version: 6.5.0 + resolution: "@turf/circle@npm:6.5.0" + dependencies: + "@turf/destination": ^6.5.0 + "@turf/helpers": ^6.5.0 + checksum: 319fadc9cdc7b9992bc30e3cb40d7fa435ddb8f59c49dd6ca94658446000fee45e7bafa26ab74dcb0300a4ad5bc2dbeb1143609aa47bde6e9c21f968019cda40 + languageName: node + linkType: hard + +"@turf/destination@npm:^6.5.0": + version: 6.5.0 + resolution: "@turf/destination@npm:6.5.0" + dependencies: + "@turf/helpers": ^6.5.0 + "@turf/invariant": ^6.5.0 + checksum: 3f26d0e6426f224d8a7b0ee6c3a6df21934a345701948354e3062818f4e49ebad89d4218f357fc1e5bfe3e5059a1d97845a355467efe8db4cb07935b7746ef66 + languageName: node + linkType: hard + +"@turf/distance@npm:^6.0.1, @turf/distance@npm:^6.5.0": + version: 6.5.0 + resolution: "@turf/distance@npm:6.5.0" + dependencies: + "@turf/helpers": ^6.5.0 + "@turf/invariant": ^6.5.0 + checksum: 7419d7bd541ae22c116054728252f793df3c7a0b342c928625478cc1c92a7df21f190051db07b66452a21f6ae5d211674d0db3e9aa6c3ab6ffa05e339aac88dc + languageName: node + linkType: hard + +"@turf/helpers@npm:6.x, @turf/helpers@npm:^6.1.4, @turf/helpers@npm:^6.5.0": version: 6.5.0 resolution: "@turf/helpers@npm:6.5.0" checksum: 786cbe0c0027f85db286fb3a0b7be04bb29bd63ec07760a49735ef32e9c5b4a7c059a8f691fafa31c7e0e9be34c281e014dc24077438bae01a09b492a680fb6f languageName: node linkType: hard +"@turf/helpers@npm:7.3.4": + version: 7.3.4 + resolution: "@turf/helpers@npm:7.3.4" + dependencies: + "@types/geojson": ^7946.0.10 + tslib: ^2.8.1 + checksum: e10cc2e9d4e25c46e79310847a9b1a3c8613558defaa8bcc0b2e8622d106c875e4e4c7895942bc89687ab72b12bdce0835cac10362118f8eeb3c0939042a5ccd + languageName: node + linkType: hard + "@turf/invariant@npm:^6.5.0": version: 6.5.0 resolution: "@turf/invariant@npm:6.5.0" @@ -19792,6 +20240,87 @@ __metadata: languageName: node linkType: hard +"@turf/length@npm:^6.0.2, @turf/length@npm:^6.5.0": + version: 6.5.0 + resolution: "@turf/length@npm:6.5.0" + dependencies: + "@turf/distance": ^6.5.0 + "@turf/helpers": ^6.5.0 + "@turf/meta": ^6.5.0 + checksum: 8d532395066c908144829252a754139ea540940c83a1cee5e4f567ce0d25c140cf847062d5608c563e0debefa181fa4b530c09ca3c78a592b40dfb8877c77e5f + languageName: node + linkType: hard + +"@turf/line-intersect@npm:^6.5.0": + version: 6.5.0 + resolution: "@turf/line-intersect@npm:6.5.0" + dependencies: + "@turf/helpers": ^6.5.0 + "@turf/invariant": ^6.5.0 + "@turf/line-segment": ^6.5.0 + "@turf/meta": ^6.5.0 + geojson-rbush: 3.x + checksum: fe339af2e2348254d2ff5782a91abf935bfe322634eb5e9280098ecab3528575d8fdedf38ad7dd46b49c7932fc42e3d7de3a5f47f91d32f63b5398f2eada3632 + languageName: node + linkType: hard + +"@turf/line-segment@npm:^6.5.0": + version: 6.5.0 + resolution: "@turf/line-segment@npm:6.5.0" + dependencies: + "@turf/helpers": ^6.5.0 + "@turf/invariant": ^6.5.0 + "@turf/meta": ^6.5.0 + checksum: 5fa92ca0b3dbb909c957eefd8d98eda2dcb9ea924854507f1f8f8c2ad304d78c84734affd4601d10eda6732e808857020fccb2eaa91a76981fcce3eeafa72757 + languageName: node + linkType: hard + +"@turf/line-slice@npm:^6.5.0": + version: 6.5.0 + resolution: "@turf/line-slice@npm:6.5.0" + dependencies: + "@turf/helpers": ^6.5.0 + "@turf/invariant": ^6.5.0 + "@turf/nearest-point-on-line": ^6.5.0 + checksum: 3ff84d0bd0f201808e596d977d7cc1d6318085f26816728a05fae1a4405afa191dbbf387c6f039b9dbc739874441c21765c2b6f1f0e1b7f62d636df9ea6d7efb + languageName: node + linkType: hard + +"@turf/meta@npm:6.x, @turf/meta@npm:^6.5.0": + version: 6.5.0 + resolution: "@turf/meta@npm:6.5.0" + dependencies: + "@turf/helpers": ^6.5.0 + checksum: 9df6cb5af7af98a477ddcd744fb44e4e890fe8a67afa50bb24cad7d9c15af67362d24f1f8890d706a9c369b18285b0ba42430509add769ad868ac452703bb59b + languageName: node + linkType: hard + +"@turf/meta@npm:7.3.4": + version: 7.3.4 + resolution: "@turf/meta@npm:7.3.4" + dependencies: + "@turf/helpers": 7.3.4 + "@types/geojson": ^7946.0.10 + tslib: ^2.8.1 + checksum: 756bb9e227323fbd9262fbe8323962f0d82852a6452e9e4db1ac5f6947081a450b9389a71b15f109d1d0621cc1b45cc1b68ee4b6c8eaf7e01442ef5cb2dee71b + languageName: node + linkType: hard + +"@turf/nearest-point-on-line@npm:^6.5.0": + version: 6.5.0 + resolution: "@turf/nearest-point-on-line@npm:6.5.0" + dependencies: + "@turf/bearing": ^6.5.0 + "@turf/destination": ^6.5.0 + "@turf/distance": ^6.5.0 + "@turf/helpers": ^6.5.0 + "@turf/invariant": ^6.5.0 + "@turf/line-intersect": ^6.5.0 + "@turf/meta": ^6.5.0 + checksum: 034641131e823bf5f458d88916edc8c593fbee61b6c52562a363d0072dbea14a11e28179671ca108662083ea677ccc6702d039ef36f408c30cf9e70bc50279e5 + languageName: node + linkType: hard + "@tybys/wasm-util@npm:^0.10.0": version: 0.10.1 resolution: "@tybys/wasm-util@npm:0.10.1" @@ -20159,6 +20688,20 @@ __metadata: languageName: node linkType: hard +"@types/geojson@npm:*, @types/geojson@npm:^7946.0.10, @types/geojson@npm:^7946.0.8": + version: 7946.0.16 + resolution: "@types/geojson@npm:7946.0.16" + checksum: 1ff24a288bd5860b766b073ead337d31d73bdc715e5b50a2cee5cb0af57a1ed02cc04ef295f5fa68dc40fe3e4f104dd31282b2b818a5ba3231bc1001ba084e3c + languageName: node + linkType: hard + +"@types/geojson@npm:7946.0.8": + version: 7946.0.8 + resolution: "@types/geojson@npm:7946.0.8" + checksum: add7dc52bf551260e8cad132f70ed868fb28722a1f633bd05846fc79e5e8652f1d2cecd0a309498b1d4bd6850ac45f4535924b43aeee1aced56b014408022ad6 + languageName: node + linkType: hard + "@types/glob@npm:*": version: 8.1.0 resolution: "@types/glob@npm:8.1.0" @@ -20361,6 +20904,33 @@ __metadata: languageName: node linkType: hard +"@types/mapbox-gl@npm:^2.6.0": + version: 2.7.21 + resolution: "@types/mapbox-gl@npm:2.7.21" + dependencies: + "@types/geojson": "*" + checksum: 51bcf2a0481a53a8f8148af9b7f0f9e4d1be2ebdd9390194e4e4a0f8c8375446004c8624e67b4a255384cf0a0ae0c5b9eb99fa865acadca0ac0b0f5853f3f957 + languageName: node + linkType: hard + +"@types/mapbox__point-geometry@npm:*, @types/mapbox__point-geometry@npm:^0.1.2": + version: 0.1.4 + resolution: "@types/mapbox__point-geometry@npm:0.1.4" + checksum: 670191664ea0a6ccb4563500fe815a9aba029ba2f0528d42f9eb560ccb44f6542ba8674e2a3f6d41bd10ad8855b4df4782b5340c980ca182ef9fe6752f2737b8 + languageName: node + linkType: hard + +"@types/mapbox__vector-tile@npm:^1.3.0": + version: 1.3.4 + resolution: "@types/mapbox__vector-tile@npm:1.3.4" + dependencies: + "@types/geojson": "*" + "@types/mapbox__point-geometry": "*" + "@types/pbf": "*" + checksum: 082907ed9cf96b82327dabf3b4c3a14746a825e4a81f0abf46b50e2557f25cbda652725d8af002e5edcc344a83c85e1a4b71a2d39ef4d829c243344a85ac13a6 + languageName: node + linkType: hard + "@types/mime-types@npm:^2.1.1": version: 2.1.4 resolution: "@types/mime-types@npm:2.1.4" @@ -20471,6 +21041,13 @@ __metadata: languageName: node linkType: hard +"@types/pbf@npm:*, @types/pbf@npm:^3.0.2": + version: 3.0.5 + resolution: "@types/pbf@npm:3.0.5" + checksum: c32348c6c81e6c31fe4a1f59983e3a9904727b809fb1e5ddec4fad49abaf93070ec26ee0c04c6516536c181c945b3c7d9e226549eaac3b2e12cb7b57f549a49c + languageName: node + linkType: hard + "@types/pluralize@npm:^0.0.29": version: 0.0.29 resolution: "@types/pluralize@npm:0.0.29" @@ -23111,7 +23688,7 @@ __metadata: languageName: node linkType: hard -"aws-amplify@npm:^6.14.1, aws-amplify@npm:^6.15.7, aws-amplify@npm:^6.15.8": +"aws-amplify@npm:^6.14.1, aws-amplify@npm:^6.15.7, aws-amplify@npm:^6.15.8, aws-amplify@npm:^6.16.0": version: 6.16.3 resolution: "aws-amplify@npm:6.16.3" dependencies: @@ -23319,7 +23896,7 @@ __metadata: languageName: node linkType: hard -"axios@npm:1.13.6, axios@npm:^1.11.0, axios@npm:^1.8.3": +"axios@npm:1.13.6, axios@npm:^1.11.0, axios@npm:^1.8.3, axios@npm:latest": version: 1.13.6 resolution: "axios@npm:1.13.6" dependencies: @@ -24490,10 +25067,10 @@ __metadata: languageName: node linkType: hard -"cdk-from-cfn@npm:^0.271.0": - version: 0.271.0 - resolution: "cdk-from-cfn@npm:0.271.0" - checksum: dc7812dadc7808139138565e26bf321c65d9d07b73bd2cdad0aa70f7d02f9cced25214756b949ed389eac96ef47fdfed37bea4de24bec6331b0f8fcc2d859a7f +"cdk-from-cfn@npm:^0.291.0": + version: 0.291.0 + resolution: "cdk-from-cfn@npm:0.291.0" + checksum: f8014f8aded5d1b2091b5bbc9d825a958bf92c75f0cf11bf7b48c47756672e82c4ff71e043af15e5d7e6db6f09d8e1bbbb48f5fb01e955796a585069b13ffa43 languageName: node linkType: hard @@ -26044,6 +26621,13 @@ __metadata: languageName: node linkType: hard +"csscolorparser@npm:~1.0.3": + version: 1.0.3 + resolution: "csscolorparser@npm:1.0.3" + checksum: 57b30e1dd3e639fb74d63d3ee5a078ae6d0aaba26bc731fdec1a0f50fd77c2531a1fca2bbe07c18e0569255f92064cda0747e0115955fdb8c037332798ca634f + languageName: node + linkType: hard + "cssdb@npm:^7.1.0": version: 7.11.2 resolution: "cssdb@npm:7.11.2" @@ -26265,6 +26849,13 @@ __metadata: languageName: node linkType: hard +"debounce@npm:^1.2.1": + version: 1.2.1 + resolution: "debounce@npm:1.2.1" + checksum: 6c9320aa0973fc42050814621a7a8a78146c1975799b5b3cc1becf1f77ba9a5aa583987884230da0842a03f385def452fad5d60db97c3d1c8b824e38a8edf500 + languageName: node + linkType: hard + "debug@npm:2.6.9, debug@npm:^2.6.0": version: 2.6.9 resolution: "debug@npm:2.6.9" @@ -26944,6 +27535,13 @@ __metadata: languageName: node linkType: hard +"earcut@npm:^2.2.2, earcut@npm:^2.2.3, earcut@npm:^2.2.4": + version: 2.2.4 + resolution: "earcut@npm:2.2.4" + checksum: 01ca51830edd2787819f904ae580087d37351f6048b4565e7add4b3da8a86b7bc19262ab2aa7fdc64129ab03af2d9cec8cccee4d230c82275f97ef285c79aafb + languageName: node + linkType: hard + "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" @@ -29238,7 +29836,7 @@ __metadata: languageName: node linkType: hard -"fuzzy@npm:^0.1.3": +"fuzzy@npm:^0.1.1, fuzzy@npm:^0.1.3": version: 0.1.3 resolution: "fuzzy@npm:0.1.3" checksum: 584fcd57a03431707a6d0c1c4a41f17368cdb23d37dcb176d6cbbeeaecaac51be15dec229b3547acfb7db052cb066fcd86db907d40112ac4a3d3a368f88e7105 @@ -29268,6 +29866,33 @@ __metadata: languageName: node linkType: hard +"geojson-flatten@npm:^1.0.4": + version: 1.1.1 + resolution: "geojson-flatten@npm:1.1.1" + checksum: 7d8eb78f34fad41894c140cb13e32941c56923a07812805e7d12c8dd56f58d64c5689fbf9646bbaa828b461cc1c0718b15816248066902ce7d49d501a5305edd + languageName: node + linkType: hard + +"geojson-rbush@npm:3.x": + version: 3.2.0 + resolution: "geojson-rbush@npm:3.2.0" + dependencies: + "@turf/bbox": "*" + "@turf/helpers": 6.x + "@turf/meta": 6.x + "@types/geojson": 7946.0.8 + rbush: ^3.0.1 + checksum: 6d8b9e512cb076af62983bbe1783760dfdca8f5ce37ee731b55e1dc984ff5a4868cf2d30f9e8fa8ff3d682e3498e256876bff5057fc9b00920287021ff42fe39 + languageName: node + linkType: hard + +"geojson-vt@npm:^3.2.1": + version: 3.2.1 + resolution: "geojson-vt@npm:3.2.1" + checksum: db2fc1a452067ee8436fa86e5a138f6ebd3d64893e0af097bc1cc960ec63d67c0ce77444711e9583036192d6bf9ce754bf9b56a76789684fc0fea4d52321fffc + languageName: node + linkType: hard + "get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" @@ -29371,7 +29996,7 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^6.0.0": +"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": version: 6.0.1 resolution: "get-stream@npm:6.0.1" checksum: 49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 @@ -29518,6 +30143,13 @@ __metadata: languageName: node linkType: hard +"gl-matrix@npm:^3.2.1, gl-matrix@npm:^3.4.3": + version: 3.4.4 + resolution: "gl-matrix@npm:3.4.4" + checksum: 9aa022ffac0d158212ad0cd29939864ad919ac31cd5dc5a5d35e9d66bb62679ddf152ff7b2173ded20131045e40572b87f31b26a920be2a7583a1516b13b5b4b + languageName: node + linkType: hard + "glob-parent@npm:^6.0.2": version: 6.0.2 resolution: "glob-parent@npm:6.0.2" @@ -30110,6 +30742,13 @@ __metadata: languageName: node linkType: hard +"grid-index@npm:^1.1.0": + version: 1.1.0 + resolution: "grid-index@npm:1.1.0" + checksum: 0ba2a622a52badc86642a002abee79b48c207092347e869528253e634573b9b55494db649fbd1779122d797aaa3b59e284023a96a7a5c666c7375f0e320f8f57 + languageName: node + linkType: hard + "growl@npm:^1.10.5": version: 1.10.5 resolution: "growl@npm:1.10.5" @@ -30340,6 +30979,13 @@ __metadata: languageName: node linkType: hard +"hat@npm:0.0.3": + version: 0.0.3 + resolution: "hat@npm:0.0.3" + checksum: 9d502b26b612ed3e66491296873119574e61a4ef99dfc5501f7bf86115fde35d0f76b1167257c8224c88092eda04e40feda805ad5b86c3b90203f4e15fd99f53 + languageName: node + linkType: hard + "he@npm:^1.2.0": version: 1.2.0 resolution: "he@npm:1.2.0" @@ -30748,7 +31394,7 @@ __metadata: languageName: node linkType: hard -"ieee754@npm:^1.1.13, ieee754@npm:^1.1.4, ieee754@npm:^1.2.1": +"ieee754@npm:^1.1.12, ieee754@npm:^1.1.13, ieee754@npm:^1.1.4, ieee754@npm:^1.2.1": version: 1.2.1 resolution: "ieee754@npm:1.2.1" checksum: b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb @@ -33329,6 +33975,13 @@ __metadata: languageName: node linkType: hard +"kdbush@npm:^3.0.0": + version: 3.0.0 + resolution: "kdbush@npm:3.0.0" + checksum: 3fc8795870bd04f60627e7345b26fd0644beb91bc4164912c9d9378b39c674ba01c31db68ecaf6266d51c9ad81bf5b770b7effa51eeee37553d38293a094a686 + languageName: node + linkType: hard + "keyboard-key@npm:^1.1.0": version: 1.1.0 resolution: "keyboard-key@npm:1.1.0" @@ -33780,13 +34433,20 @@ __metadata: languageName: node linkType: hard -"lodash.debounce@npm:^4.0.8": +"lodash.debounce@npm:^4.0.6, lodash.debounce@npm:^4.0.8": version: 4.0.8 resolution: "lodash.debounce@npm:4.0.8" checksum: 762998a63e095412b6099b8290903e0a8ddcb353ac6e2e0f2d7e7d03abd4275fe3c689d88960eb90b0dde4f177554d51a690f22a343932ecbc50a5d111849987 languageName: node linkType: hard +"lodash.isequal@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.isequal@npm:4.5.0" + checksum: dfdb2356db19631a4b445d5f37868a095e2402292d59539a987f134a8778c62a2810c2452d11ae9e6dcac71fc9de40a6fedcb20e2952a15b431ad8b29e50e28f + languageName: node + linkType: hard + "lodash.ismatch@npm:^4.4.0": version: 4.4.0 resolution: "lodash.ismatch@npm:4.4.0" @@ -34155,6 +34815,136 @@ __metadata: languageName: node linkType: hard +"mapbox-gl@npm:1.13.1": + version: 1.13.1 + resolution: "mapbox-gl@npm:1.13.1" + dependencies: + "@mapbox/geojson-rewind": ^0.5.0 + "@mapbox/geojson-types": ^1.0.2 + "@mapbox/jsonlint-lines-primitives": ^2.0.2 + "@mapbox/mapbox-gl-supported": ^1.5.0 + "@mapbox/point-geometry": ^0.1.0 + "@mapbox/tiny-sdf": ^1.1.1 + "@mapbox/unitbezier": ^0.0.0 + "@mapbox/vector-tile": ^1.3.1 + "@mapbox/whoots-js": ^3.1.0 + csscolorparser: ~1.0.3 + earcut: ^2.2.2 + geojson-vt: ^3.2.1 + gl-matrix: ^3.2.1 + grid-index: ^1.1.0 + minimist: ^1.2.5 + murmurhash-js: ^1.0.0 + pbf: ^3.2.1 + potpack: ^1.0.1 + quickselect: ^2.0.0 + rw: ^1.3.3 + supercluster: ^7.1.0 + tinyqueue: ^2.0.3 + vt-pbf: ^3.1.1 + checksum: d507b1ce27fe77ed68250096a60a929ea4149fcab3f7037f60a7b73709391a6f78413aa4e98fd2f5e37388cb1a040b5cc15cbf8b164fdb65d98362ba726523d6 + languageName: node + linkType: hard + +"maplibre-gl-draw-circle@npm:^0.1.1": + version: 0.1.1 + resolution: "maplibre-gl-draw-circle@npm:0.1.1" + dependencies: + "@mapbox/mapbox-gl-draw": 1.3.0 + "@turf/along": ^6.0.1 + "@turf/circle": ^6.0.1 + "@turf/distance": ^6.0.1 + "@turf/helpers": ^6.1.4 + "@turf/length": ^6.0.2 + checksum: 6ed336f93954bf0dd0b41c1cd226eba2450525a66ddfa8f7951a67889a2c1fc466d21d58e9475ab446e3d718254730fcc1c13b616c76b7e34668088935a923ce + languageName: node + linkType: hard + +"maplibre-gl-js-amplify@npm:^4.0.2": + version: 4.0.2 + resolution: "maplibre-gl-js-amplify@npm:4.0.2" + dependencies: + "@mapbox/mapbox-gl-draw": 1.3.0 + "@maplibre/maplibre-gl-geocoder": 1.5.0 + "@turf/along": ^6.5.0 + "@turf/circle": ^6.5.0 + "@turf/distance": ^6.5.0 + "@turf/helpers": ^6.5.0 + "@turf/length": ^6.5.0 + "@turf/line-slice": ^6.5.0 + debounce: ^1.2.1 + maplibre-gl-draw-circle: ^0.1.1 + peerDependencies: + "@aws-amplify/geo": 3.x.x + aws-amplify: 6.x.x + maplibre-gl: 1.x.x || 2.x.x + checksum: 6a03d1457626914c17cf9c3d8bf8de3f437fa0e68b2d659c510db153089105740c8fe24b8ca95e5a711994f2cadb512c290ef86d4e75c0e77adf6d56d761144a + languageName: node + linkType: hard + +"maplibre-gl@npm:2.1.9": + version: 2.1.9 + resolution: "maplibre-gl@npm:2.1.9" + dependencies: + "@mapbox/geojson-rewind": ^0.5.1 + "@mapbox/jsonlint-lines-primitives": ^2.0.2 + "@mapbox/mapbox-gl-supported": ^2.0.1 + "@mapbox/point-geometry": ^0.1.0 + "@mapbox/tiny-sdf": ^2.0.4 + "@mapbox/unitbezier": ^0.0.1 + "@mapbox/vector-tile": ^1.3.1 + "@mapbox/whoots-js": ^3.1.0 + "@types/geojson": ^7946.0.8 + "@types/mapbox__point-geometry": ^0.1.2 + "@types/mapbox__vector-tile": ^1.3.0 + "@types/pbf": ^3.0.2 + csscolorparser: ~1.0.3 + earcut: ^2.2.3 + geojson-vt: ^3.2.1 + gl-matrix: ^3.4.3 + murmurhash-js: ^1.0.0 + pbf: ^3.2.1 + potpack: ^1.0.2 + quickselect: ^2.0.0 + supercluster: ^7.1.4 + tinyqueue: ^2.0.3 + vt-pbf: ^3.1.3 + checksum: 9f4c6c60e7a45a79c28f3125eee1e14a5092efedbb4c555c0fa6d6ac0715372cd9844433cc802ef149fbfe97ebb3aac3fda5bb26b4a1e756aad440dba5ed355f + languageName: node + linkType: hard + +"maplibre-gl@npm:^2.4.0": + version: 2.4.0 + resolution: "maplibre-gl@npm:2.4.0" + dependencies: + "@mapbox/geojson-rewind": ^0.5.2 + "@mapbox/jsonlint-lines-primitives": ^2.0.2 + "@mapbox/mapbox-gl-supported": ^2.0.1 + "@mapbox/point-geometry": ^0.1.0 + "@mapbox/tiny-sdf": ^2.0.5 + "@mapbox/unitbezier": ^0.0.1 + "@mapbox/vector-tile": ^1.3.1 + "@mapbox/whoots-js": ^3.1.0 + "@types/geojson": ^7946.0.10 + "@types/mapbox__point-geometry": ^0.1.2 + "@types/mapbox__vector-tile": ^1.3.0 + "@types/pbf": ^3.0.2 + csscolorparser: ~1.0.3 + earcut: ^2.2.4 + geojson-vt: ^3.2.1 + gl-matrix: ^3.4.3 + global-prefix: ^3.0.0 + murmurhash-js: ^1.0.0 + pbf: ^3.2.1 + potpack: ^1.0.2 + quickselect: ^2.0.0 + supercluster: ^7.1.5 + tinyqueue: ^2.0.3 + vt-pbf: ^3.1.3 + checksum: 98d5860fb222e836b06e9f66635fb9559df0c3abc39180a0ddd5c4f2b21eb68243716b95148bd51f3dce6a3d4fa7aa97546d4e29162991c1317062f1434ba38d + languageName: node + linkType: hard + "markdown-it@npm:^12.2.0": version: 12.3.2 resolution: "markdown-it@npm:12.3.2" @@ -34873,6 +35663,13 @@ __metadata: languageName: node linkType: hard +"murmurhash-js@npm:^1.0.0": + version: 1.0.0 + resolution: "murmurhash-js@npm:1.0.0" + checksum: f8569e16db0ba6f953bf88286e97cf737f1efe97b224e537c9308566ab963a067c7eca5b636fb473d6413c4cc3b79690b78ff7ab0f290e75db91c6fde0df92b4 + languageName: node + linkType: hard + "mute-stream@npm:0.0.7": version: 0.0.7 resolution: "mute-stream@npm:0.0.7" @@ -36374,6 +37171,18 @@ __metadata: languageName: node linkType: hard +"pbf@npm:^3.2.1": + version: 3.3.0 + resolution: "pbf@npm:3.3.0" + dependencies: + ieee754: ^1.1.12 + resolve-protobuf-schema: ^2.1.0 + bin: + pbf: bin/pbf + checksum: 79e5dc59a9391789de84b0a6d713fad0dd1e5ce6eb721536af8c9ec49feae04fdebab9f077b760bba858e615a95ac714a7d248ecb43736e904bb8396885e16d6 + languageName: node + linkType: hard + "pbkdf2@npm:^3.1.2, pbkdf2@npm:^3.1.5": version: 3.1.5 resolution: "pbkdf2@npm:3.1.5" @@ -37499,6 +38308,13 @@ __metadata: languageName: node linkType: hard +"potpack@npm:^1.0.1, potpack@npm:^1.0.2": + version: 1.0.2 + resolution: "potpack@npm:1.0.2" + checksum: 670c23898a4257130858b960c2e654d3327c0f6a7e7091ff5846f213e65af8f9476320b995b8ad561a47a4d1c359c7ef347de57d22e7b02597051abb52bc85c4 + languageName: node + linkType: hard + "prebuild-install@npm:^7.1.1": version: 7.1.3 resolution: "prebuild-install@npm:7.1.3" @@ -37805,6 +38621,13 @@ __metadata: languageName: node linkType: hard +"protocol-buffers-schema@npm:^3.3.1": + version: 3.6.0 + resolution: "protocol-buffers-schema@npm:3.6.0" + checksum: 23a08612e5cc903f917ae3b680216ccaf2d889c61daa68d224237f455182fa96fff16872ac94b1954b5dd26fc7e8ce7e9360c54d54ea26218d107b2f059fca37 + languageName: node + linkType: hard + "protocols@npm:^2.0.0, protocols@npm:^2.0.1": version: 2.0.2 resolution: "protocols@npm:2.0.2" @@ -38033,6 +38856,13 @@ __metadata: languageName: node linkType: hard +"quickselect@npm:^2.0.0": + version: 2.0.0 + resolution: "quickselect@npm:2.0.0" + checksum: 6c8d591bc73beae4c1996b7b7138233a7dbbbdde29b7b6d822a02d08cd220fd27613f47d6e9635989b12e250d42ef9da3448de1ed12ad962974e207ab3c3562c + languageName: node + linkType: hard + "raf@npm:^3.4.1": version: 3.4.1 resolution: "raf@npm:3.4.1" @@ -38080,6 +38910,15 @@ __metadata: languageName: node linkType: hard +"rbush@npm:^3.0.1": + version: 3.0.1 + resolution: "rbush@npm:3.0.1" + dependencies: + quickselect: ^2.0.0 + checksum: 55311586c30cdedaa2220de6f1da45fe1fa806263afbf7b6f4c0078983830c2abc7771187896d68bfc9078cb279079fb4c84971831da4b74384aab2c2c417758 + languageName: node + linkType: hard + "rc@npm:1.2.8, rc@npm:^1.2.7, rc@npm:^1.2.8": version: 1.2.8 resolution: "rc@npm:1.2.8" @@ -38220,6 +39059,18 @@ __metadata: languageName: node linkType: hard +"react-map-gl@npm:7.0.23": + version: 7.0.23 + resolution: "react-map-gl@npm:7.0.23" + dependencies: + "@types/mapbox-gl": ^2.6.0 + peerDependencies: + mapbox-gl: "*" + react: ">=16.3.0" + checksum: 3c4b98278c73426e3aa333dc92e6c9352af9b75de99ef82d14e98b47a47dfc6c4a86649a80246accc5b212ba90b7f3e8344b4ed5714dc98717a9ae3fe8238564 + languageName: node + linkType: hard + "react-native-get-random-values@npm:^1.4.0": version: 1.11.0 resolution: "react-native-get-random-values@npm:1.11.0" @@ -38842,6 +39693,15 @@ __metadata: languageName: node linkType: hard +"resolve-protobuf-schema@npm:^2.1.0": + version: 2.1.0 + resolution: "resolve-protobuf-schema@npm:2.1.0" + dependencies: + protocol-buffers-schema: ^3.3.1 + checksum: 8e656b9072b1c001952f851251413bc79d8c771c3015f607b75e1ca3b8bd7c4396068dd19cdbb3019affa03f6457d2c0fd38d981ffd714215cd2e7c2b67221a7 + languageName: node + linkType: hard + "resolve-url-loader@npm:^5.0.0": version: 5.0.0 resolution: "resolve-url-loader@npm:5.0.0" @@ -39190,6 +40050,20 @@ __metadata: languageName: node linkType: hard +"rw@npm:^1.3.3": + version: 1.3.3 + resolution: "rw@npm:1.3.3" + checksum: b1e1ef37d1e79d9dc7050787866e30b6ddcb2625149276045c262c6b4d53075ddc35f387a856a8e76f0d0df59f4cd58fe24707e40797ebee66e542b840ed6a53 + languageName: node + linkType: hard + +"rw@npm:~0.1.4": + version: 0.1.4 + resolution: "rw@npm:0.1.4" + checksum: 2defba766085374cf49adc725a0b811ee2b9a0d344d323b51ca96a2222ffc8c72faaa2806df60bed396e206d0ee47319632b1ed9049db71de963135f5f3981de + languageName: node + linkType: hard + "rxjs@npm:^6.4.0, rxjs@npm:^6.6.0": version: 6.6.7 resolution: "rxjs@npm:6.6.7" @@ -40713,6 +41587,13 @@ __metadata: languageName: node linkType: hard +"subtag@npm:^0.5.0": + version: 0.5.0 + resolution: "subtag@npm:0.5.0" + checksum: f2827c76458cc1871c12c98d11d519c6027dee796c250fee0c5dc47d8afbab634afe9fe992de51887c5dd7172dd115501dcfc077f098bae81471f241260eb115 + languageName: node + linkType: hard + "sucrase@npm:^3.35.0": version: 3.35.1 resolution: "sucrase@npm:3.35.1" @@ -40731,6 +41612,25 @@ __metadata: languageName: node linkType: hard +"suggestions-list@npm:^0.0.2": + version: 0.0.2 + resolution: "suggestions-list@npm:0.0.2" + dependencies: + fuzzy: ^0.1.1 + xtend: ^4.0.0 + checksum: 76ffa6031c355b1c89b340ee6e24a0deee479357e51f3c4a1d9a7c12a6fd96b6351c465043d9948da52c0eb7888e96cadba737c9aeb2720231eaec9398bf807a + languageName: node + linkType: hard + +"supercluster@npm:^7.1.0, supercluster@npm:^7.1.4, supercluster@npm:^7.1.5": + version: 7.1.5 + resolution: "supercluster@npm:7.1.5" + dependencies: + kdbush: ^3.0.0 + checksum: bbebf45927d0019831731c94b78d1c9a1f3e2da0be9875d7ea75c6f261487e0f15d3f1822a9a49256e3c1672bdfb9138f9a5e44e2de99edb06cd1e758083e12d + languageName: node + linkType: hard + "supports-color@npm:^3.1.0": version: 3.2.3 resolution: "supports-color@npm:3.2.3" @@ -41234,6 +42134,13 @@ __metadata: languageName: node linkType: hard +"tinyqueue@npm:^2.0.3": + version: 2.0.3 + resolution: "tinyqueue@npm:2.0.3" + checksum: d7b590088f015a94a17132fa209c2f2a80c45158259af5474901fdf5932e95ea13ff6f034bcc725a6d5f66d3e5b888b048c310229beb25ad5bebb4f0a635abf2 + languageName: node + linkType: hard + "tinyrainbow@npm:^3.0.3": version: 3.0.3 resolution: "tinyrainbow@npm:3.0.3" @@ -41363,6 +42270,17 @@ __metadata: languageName: node linkType: hard +"traverse@npm:~0.6.6": + version: 0.6.11 + resolution: "traverse@npm:0.6.11" + dependencies: + gopd: ^1.2.0 + typedarray.prototype.slice: ^1.0.5 + which-typed-array: ^1.1.18 + checksum: 2b57662da3061ed2aa9977a6a3e315fc19f2cfdeb691700a88c12f4d460146abdb4d726740f47a9ca5fa84d3c50096b76ee50047d1a71c2afb168852ad264e36 + languageName: node + linkType: hard + "tree-dump@npm:^1.0.3, tree-dump@npm:^1.1.0": version: 1.1.0 resolution: "tree-dump@npm:1.1.0" @@ -41866,6 +42784,22 @@ __metadata: languageName: node linkType: hard +"typedarray.prototype.slice@npm:^1.0.5": + version: 1.0.5 + resolution: "typedarray.prototype.slice@npm:1.0.5" + dependencies: + call-bind: ^1.0.8 + define-properties: ^1.2.1 + es-abstract: ^1.23.9 + es-errors: ^1.3.0 + get-proto: ^1.0.1 + math-intrinsics: ^1.1.0 + typed-array-buffer: ^1.0.3 + typed-array-byte-offset: ^1.0.4 + checksum: 4995828640f8079cfbc9e3b4b8fc2e0eeb109edd1a2596806325ae07306dba1cd947e6ed6f63391aa7d5af0ea4f40fddf1b6eb863f8a59869a9dfc5dcfd8eac2 + languageName: node + linkType: hard + "typedarray@npm:^0.0.6": version: 0.0.6 resolution: "typedarray@npm:0.0.6" @@ -42787,6 +43721,17 @@ __metadata: languageName: node linkType: hard +"vt-pbf@npm:^3.1.1, vt-pbf@npm:^3.1.3": + version: 3.1.3 + resolution: "vt-pbf@npm:3.1.3" + dependencies: + "@mapbox/point-geometry": 0.1.0 + "@mapbox/vector-tile": ^1.3.1 + pbf: ^3.2.1 + checksum: a568801ae25f0ffe65ef697bf520c996c8a4067f73f355c0d5815238de90322c8ca207c61220206141cfe6f5b525de875b7eb26e22979a1b768b96d03b93dca7 + languageName: node + linkType: hard + "wait-port@npm:^0.2.7": version: 0.2.14 resolution: "wait-port@npm:0.2.14" @@ -43047,6 +43992,13 @@ __metadata: languageName: node linkType: hard +"wgs84@npm:0.0.0": + version: 0.0.0 + resolution: "wgs84@npm:0.0.0" + checksum: 4f4094c7149fbb50e89ab415aeb2db565c66746be18702ea82ab75c6e6e2a58b552d0898f4b8d6a16bf5824a14917577e46e04a8b20fbf9f09f06d755d381c0b + languageName: node + linkType: hard + "whatwg-fetch@npm:^2.0.4": version: 2.0.4 resolution: "whatwg-fetch@npm:2.0.4" @@ -43153,7 +44105,7 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.19, which-typed-array@npm:^1.1.2": +"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18, which-typed-array@npm:^1.1.19, which-typed-array@npm:^1.1.2": version: 1.1.20 resolution: "which-typed-array@npm:1.1.20" dependencies: @@ -43723,7 +44675,7 @@ __metadata: languageName: node linkType: hard -"xtend@npm:^4.0.0, xtend@npm:~4.0.1": +"xtend@npm:^4.0.0, xtend@npm:^4.0.1, xtend@npm:^4.0.2, xtend@npm:~4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" checksum: 366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e From 0920d3e99bb0be765acc5ebc3e1992dd9a308f34 Mon Sep 17 00:00:00 2001 From: Eli Polonsky Date: Tue, 24 Mar 2026 16:09:28 -0400 Subject: [PATCH 58/70] chore: bring back discussions from gen2-migration --- amplify-migration-apps/discussions/README.md | 67 ++++- .../amplify/backend.ts | 39 ++- .../amplify/data/resource.ts | 6 +- ...-6NIMXK30VQKX-holding.target.template.json | 4 + ...0a-auth179371D7-6NIMXK30VQKX.template.json | 4 + .../#current-cloud-backend/amplify-meta.json | 255 ++++++++++-------- .../build/cloudformation-template.json | 4 +- .../api/discussions/build/parameters.json | 2 +- .../build/cloudformation-template.json | 4 +- .../build/root-cloudformation-stack.json | 135 +++++++--- ...huseractivity-cloudformation-template.json | 6 +- ...duseractivity-cloudformation-template.json | 6 +- .../build/root-cloudformation-stack.json | 135 +++++++--- .../activity-cloudformation-template.json | 2 +- .../backend-config.json | 11 +- ...huseractivity-cloudformation-template.json | 6 +- .../fetchuseractivity/src/package.json | 4 - ...duseractivity-cloudformation-template.json | 6 +- .../recorduseractivity/src/package.json | 4 - .../activity-cloudformation-template.json | 2 +- .../amplify/backend/amplify-meta.json | 255 ++++++++++-------- .../build/cloudformation-template.json | 4 +- .../api/discussions/build/parameters.json | 2 +- .../build/cloudformation-template.json | 4 +- .../build/root-cloudformation-stack.json | 135 +++++++--- ...huseractivity-cloudformation-template.json | 6 +- ...duseractivity-cloudformation-template.json | 6 +- .../build/root-cloudformation-stack.json | 135 +++++++--- .../activity-cloudformation-template.json | 2 +- .../amplify/backend/backend-config.json | 11 +- ...huseractivity-cloudformation-template.json | 6 +- .../fetchuseractivity/src/package.json | 4 - ...duseractivity-cloudformation-template.json | 6 +- .../recorduseractivity/src/package.json | 4 - .../activity-cloudformation-template.json | 2 +- .../amplify-dependent-resources-ref.d.ts | 16 +- .../amplify/team-provider-info.json | 34 +-- .../_snapshot.pre.generate/package.json | 2 + .../discussions/gen1-test-script.ts | 30 ++- amplify-migration-apps/discussions/index.html | 112 +++++++- .../discussions/migration-config.json | 20 +- .../discussions/package.json | 2 + .../discussions/src/main.js | 114 +++++++- .../discussions/test-utils.ts | 151 ++++++++++- 44 files changed, 1266 insertions(+), 499 deletions(-) diff --git a/amplify-migration-apps/discussions/README.md b/amplify-migration-apps/discussions/README.md index 4f92a3fc61a..dffb23cd7d6 100644 --- a/amplify-migration-apps/discussions/README.md +++ b/amplify-migration-apps/discussions/README.md @@ -2,7 +2,7 @@ ![](./images/app.png) -A discussion application built featuring authentication, GraphQL API, Lambda functions, and DynamoDB storage. +A discussion application built featuring authentication, GraphQL API, Lambda functions, multiple DynamoDB storage tables (activity + bookmarks), and S3. > [!NOTICE] > Since amplify operations add files to your local directory, its better not to operate within this repo. @@ -116,8 +116,9 @@ amplify add api ### Storage -DynamoDB table for storing user activity logs with partition key, sort key, -and global secondary index for querying by activity type. +Two DynamoDB tables: `activity` for storing user activity logs, and `bookmarks` for storing user bookmarks on posts. + +#### Activity Table ```console amplify add storage @@ -169,6 +170,59 @@ https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.Core ✔ Do you want to add a Lambda Trigger for your Table? (y/N) · no ``` +#### Bookmarks Table + +```console +amplify add storage +``` + +```console +? Select from one of the below mentioned services: NoSQL Database + +Welcome to the NoSQL DynamoDB database wizard +This wizard asks you a series of questions to help determine how to set up your NoSQL database table. + +✔ Provide a friendly name · bookmarks +✔ Provide table name · bookmarks + +You can now add columns to the table. + +✔ What would you like to name this column · userId +✔ Choose the data type · string +✔ Would you like to add another column? (Y/n) · yes +✔ What would you like to name this column · postId +✔ Choose the data type · string +✔ Would you like to add another column? (Y/n) · no + +✔ Choose partition key for the table · userId +✔ Do you want to add a sort key to your table? (Y/n) · yes +✔ Choose sort key for the table · postId + +✔ Do you want to add global secondary indexes to your table? (Y/n) · yes +✔ Provide the GSI name · byPost +✔ Choose partition key for the GSI · postId +✔ Do you want to add a sort key to your global secondary index? (Y/n) · no +✔ Do you want to add more global secondary indexes to your table? (Y/n) · no +✔ Do you want to add a Lambda Trigger for your Table? (y/N) · no +``` + +### Storage (S3 Avatars) + +S3 bucket for storing user profile pictures. + +```console +amplify add storage +``` + +```console +? Select from one of the below mentioned services: Content (Images, audio, video, etc.) +✔ Provide a friendly name for your resource that will be used to label this category in the project: · avatars +✔ Provide bucket name: · discus-avatars +✔ Who should have access: · Auth users only +✔ What kind of access do you want for Authenticated users? · create/update, read, delete +✔ Do you want to add a Lambda Trigger for your S3 Bucket? (y/N) · no +``` + ### Function **Node.js Lambda function that retrieves user activity from DynamoDB storage.** @@ -280,6 +334,10 @@ amplify push ├──────────┼─────────────────────────────┼───────────┼───────────────────┤ │ Storage │ activity │ Create │ awscloudformation │ ├──────────┼─────────────────────────────┼───────────┼───────────────────┤ +│ Storage │ bookmarks │ Create │ awscloudformation │ +├──────────┼─────────────────────────────┼───────────┼───────────────────┤ +│ Storage │ avatars │ Create │ awscloudformation │ +├──────────┼─────────────────────────────┼───────────┼───────────────────┤ │ Function │ fetchuseractivity │ Create │ awscloudformation │ ├──────────┼─────────────────────────────┼───────────┼───────────────────┤ │ Function │ recorduseractivity │ Create │ awscloudformation │ @@ -332,7 +390,7 @@ this process for any number of users. > Based on https://github.com/aws-amplify/amplify-cli/blob/gen2-migration/GEN2_MIGRATION_GUIDE.md -First and install the experimental CLI package the provides the new commands: +First install the experimental amplify CLI package that provides the migration commands. ```console npm install --no-save @aws-amplify/cli-internal-gen2-migration-experimental-alpha @@ -419,4 +477,3 @@ git push origin gen2-main ``` Wait for the deployment to finish successfully. - diff --git a/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/backend.ts b/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/backend.ts index a7439aa72ee..b6573ff9559 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/backend.ts +++ b/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/backend.ts @@ -1,26 +1,28 @@ import { auth } from './auth/resource'; import { data } from './data/resource'; +import { storage } from './storage/resource'; import { fetchuseractivity } from './storage/fetchuseractivity/resource'; import { recorduseractivity } from './storage/recorduseractivity/resource'; +import { DynamoEventSource } from 'aws-cdk-lib/aws-lambda-event-sources'; +import { StartingPosition } from 'aws-cdk-lib/aws-lambda'; import { Table, AttributeType, BillingMode, StreamViewType, } from 'aws-cdk-lib/aws-dynamodb'; -import { DynamoEventSource } from 'aws-cdk-lib/aws-lambda-event-sources'; -import { StartingPosition } from 'aws-cdk-lib/aws-lambda'; import { defineBackend } from '@aws-amplify/backend'; import { Duration } from 'aws-cdk-lib'; const backend = defineBackend({ auth, data, + storage, fetchuseractivity, recorduseractivity, }); -const storageStack = backend.createStack('storage'); -const activity = new Table(storageStack, 'activity', { +const storageActivityStack = backend.createStack('storageactivity'); +const activity = new Table(storageActivityStack, 'activity', { partitionKey: { name: 'id', type: AttributeType.STRING }, billingMode: BillingMode.PROVISIONED, readCapacity: 5, @@ -36,6 +38,22 @@ activity.addGlobalSecondaryIndex({ readCapacity: 5, writeCapacity: 5, }); +const storageBookmarksStack = backend.createStack('storagebookmarks'); +const bookmarks = new Table(storageBookmarksStack, 'bookmarks', { + partitionKey: { name: 'userId', type: AttributeType.STRING }, + billingMode: BillingMode.PROVISIONED, + readCapacity: 5, + writeCapacity: 5, + stream: StreamViewType.NEW_IMAGE, + sortKey: { name: 'postId', type: AttributeType.STRING }, +}); +// Add this property to the Table above post refactor: tableName: 'bookmarks-main' +bookmarks.addGlobalSecondaryIndex({ + indexName: 'byPost', + partitionKey: { name: 'postId', type: AttributeType.STRING }, + readCapacity: 5, + writeCapacity: 5, +}); const cfnUserPool = backend.auth.resources.cfnResources.cfnUserPool; cfnUserPool.usernameAttributes = ['phone_number']; cfnUserPool.policies = { @@ -125,3 +143,16 @@ for (const model of ['Topic', 'Post', 'Comment']) { backend.recorduseractivity.resources.lambda.role! ); } +const s3Bucket = backend.storage.resources.cfnResources.cfnBucket; +// Use this bucket name post refactor +// s3Bucket.bucketName = 'discus-avatarsc39a5-main'; +s3Bucket.bucketEncryption = { + serverSideEncryptionConfiguration: [ + { + serverSideEncryptionByDefault: { + sseAlgorithm: 'AES256', + }, + bucketKeyEnabled: false, + }, + ], +}; diff --git a/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/data/resource.ts b/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/data/resource.ts index 2c105859a05..2d3a097ac7d 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/data/resource.ts +++ b/amplify-migration-apps/discussions/_snapshot.post.generate/amplify/data/resource.ts @@ -41,9 +41,9 @@ export const data = defineData({ //The "branchname" variable needs to be the same as your deployment branch if you want to reuse your Gen1 app tables branchName: 'main', modelNameToTableNameMapping: { - Topic: 'Topic-ruiylk7rjnb4ziygno3jh4wrsq-main', - Post: 'Post-ruiylk7rjnb4ziygno3jh4wrsq-main', - Comment: 'Comment-ruiylk7rjnb4ziygno3jh4wrsq-main', + Topic: 'Topic-u3jn2qbupzbyhc3h53673wdvim-main', + Post: 'Post-u3jn2qbupzbyhc3h53673wdvim-main', + Comment: 'Comment-u3jn2qbupzbyhc3h53673wdvim-main', }, }, ], diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-a27e51c30a-auth179371D7-6NIMXK30VQKX.__to__.amplify-discussions-gen2main-branch-a27e51c30a-auth179371D7-6NIMXK30VQKX-holding.target.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-a27e51c30a-auth179371D7-6NIMXK30VQKX.__to__.amplify-discussions-gen2main-branch-a27e51c30a-auth179371D7-6NIMXK30VQKX-holding.target.template.json index 436c49291be..5a533e7e419 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-a27e51c30a-auth179371D7-6NIMXK30VQKX.__to__.amplify-discussions-gen2main-branch-a27e51c30a-auth179371D7-6NIMXK30VQKX-holding.target.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/refactor.__from__.amplify-discussions-gen2main-branch-a27e51c30a-auth179371D7-6NIMXK30VQKX.__to__.amplify-discussions-gen2main-branch-a27e51c30a-auth179371D7-6NIMXK30VQKX-holding.target.template.json @@ -209,6 +209,10 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-ge-amplifyAuthauthenticatedU-fjzgnNdQ7Oe2" } }, + "DependsOn": [ + "amplifyAuthIdentityPool3FDE84CC", + "amplifyAuthUserPoolAppClient2626C6F8" + ], "Metadata": { "aws:cdk:path": "amplify-discussions-gen2main-branch-a27e51c30a/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-gen2main-branch-a27e51c30a-auth179371D7-6NIMXK30VQKX.template.json b/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-gen2main-branch-a27e51c30a-auth179371D7-6NIMXK30VQKX.template.json index 41640dfbadb..60395f860ba 100644 --- a/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-gen2main-branch-a27e51c30a-auth179371D7-6NIMXK30VQKX.template.json +++ b/amplify-migration-apps/discussions/_snapshot.post.refactor/update.amplify-discussions-gen2main-branch-a27e51c30a-auth179371D7-6NIMXK30VQKX.template.json @@ -308,6 +308,10 @@ "authenticated": "arn:aws:iam::123456789012:role/amplify-discussions-ge-amplifyAuthauthenticatedU-fjzgnNdQ7Oe2" } }, + "DependsOn": [ + "amplifyAuthIdentityPool3FDE84CC", + "amplifyAuthUserPoolAppClient2626C6F8" + ], "Metadata": { "aws:cdk:path": "amplify-discussions-gen2main-branch-a27e51c30a/auth/amplifyAuth/IdentityPoolRoleAttachment" } diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/amplify-meta.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/amplify-meta.json index 9de8dab1e35..34b789e4330 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/amplify-meta.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/amplify-meta.json @@ -1,193 +1,228 @@ { "providers": { "awscloudformation": { - "AuthRoleName": "amplify-discussions-main-d5a80-authRole", - "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-unauthRole", - "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-authRole", + "AuthRoleName": "amplify-discussions-main-c39a5-authRole", + "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-discussions-main-c39a5-unauthRole", + "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-discussions-main-c39a5-authRole", "Region": "us-east-1", - "DeploymentBucketName": "amplify-discussions-main-d5a80-deployment", - "UnauthRoleName": "amplify-discussions-main-d5a80-unauthRole", - "StackName": "amplify-discussions-main-d5a80", - "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-discussions-main-d5a80/2bc587e0-1a44-11f1-8b6b-0affd4d11c2d", + "DeploymentBucketName": "amplify-discussions-main-c39a5-deployment", + "UnauthRoleName": "amplify-discussions-main-c39a5-unauthRole", + "StackName": "amplify-discussions-main-c39a5", + "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-discussions-main-c39a5/0e9a6f60-24a2-11f1-8462-0afffd2fb801", "AmplifyAppId": "discussions" } }, - "auth": { - "discussions22367c6822367c68": { - "service": "Cognito", - "providerPlugin": "awscloudformation", - "dependsOn": [], - "customAuth": false, - "frontendAuthConfig": { - "socialProviders": [], - "usernameAttributes": [ - "PHONE_NUMBER" - ], - "signupAttributes": [ - "EMAIL", - "PHONE_NUMBER" - ], - "passwordProtectionSettings": { - "passwordPolicyMinLength": 8, - "passwordPolicyCharacters": [] - }, - "mfaConfiguration": "OFF", - "mfaTypes": [ - "SMS" - ], - "verificationMechanisms": [ - "EMAIL" - ] - }, - "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/auth/discussions22367c6822367c68-cloudformation-template.json", - "logicalId": "authdiscussions22367c6822367c68" - }, - "lastPushTimeStamp": "2026-03-07T17:15:23.263Z", - "output": { - "CreatedSNSRole": "arn:aws:iam::123456789012:role/sns22367c68d5a80-main", - "UserPoolId": "us-east-1_Zs9EZpCYX", - "AppClientIDWeb": "ptm2eqjiee7l3e202lstfjd3r", - "AppClientID": "75sq8s16g37d0as1148og20p3i", - "IdentityPoolId": "us-east-1:d1df5c0c-2dd2-4471-bb0b-59c99bdbfe7f", - "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_Zs9EZpCYX", - "IdentityPoolName": "discussions22367c68_identitypool_22367c68__main", - "UserPoolName": "discussions22367c68_userpool_22367c68" - }, - "lastPushDirHash": "ZvxYrY5jFkJyUy3eyrP7RoSop4Y=" - } - }, "api": { "discussions": { - "service": "AppSync", - "providerPlugin": "awscloudformation", "dependsOn": [], "output": { "authConfig": { + "additionalAuthenticationProviders": [], "defaultAuthentication": { - "authenticationType": "API_KEY", "apiKeyConfig": { "apiKeyExpirationDays": 7 - } - }, - "additionalAuthenticationProviders": [] + }, + "authenticationType": "API_KEY" + } }, - "GraphQLAPIIdOutput": "ruiylk7rjnb4ziygno3jh4wrsq", - "GraphQLAPIEndpointOutput": "https://ouxhkkyjibe47illvcmepix6ru.appsync-api.us-east-1.amazonaws.com/graphql", + "GraphQLAPIIdOutput": "u3jn2qbupzbyhc3h53673wdvim", + "GraphQLAPIEndpointOutput": "https://jsm5ex363jcy5fm2reylyox4te.appsync-api.us-east-1.amazonaws.com/graphql", "GraphQLAPIKeyOutput": "da2-fakeapikey00000000000000" }, + "providerPlugin": "awscloudformation", + "service": "AppSync", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/api/cloudformation-template.json", + "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/api/cloudformation-template.json", "logicalId": "apidiscussions" }, - "lastPushTimeStamp": "2026-03-07T17:15:23.263Z", + "lastPushTimeStamp": "2026-03-20T21:24:14.059Z", "lastPushDirHash": "f67ZKOJM4WJlPWXfx5EsRQOT4UA=" } }, - "storage": { - "activity": { - "service": "DynamoDB", + "auth": { + "discussionsc578c16ec578c16e": { + "customAuth": false, + "dependsOn": [], + "frontendAuthConfig": { + "mfaConfiguration": "OFF", + "mfaTypes": [ + "SMS" + ], + "passwordProtectionSettings": { + "passwordPolicyMinLength": 8, + "passwordPolicyCharacters": [] + }, + "signupAttributes": [ + "EMAIL", + "PHONE_NUMBER" + ], + "socialProviders": [], + "usernameAttributes": [ + "PHONE_NUMBER" + ], + "verificationMechanisms": [ + "EMAIL" + ] + }, "providerPlugin": "awscloudformation", + "service": "Cognito", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/storage/activity-cloudformation-template.json", - "logicalId": "storageactivity" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/auth/discussionsc578c16ec578c16e-cloudformation-template.json", + "logicalId": "authdiscussionsc578c16ec578c16e" }, - "lastPushTimeStamp": "2026-03-07T17:15:23.263Z", + "lastPushTimeStamp": "2026-03-20T21:24:14.059Z", "output": { - "PartitionKeyName": "id", - "SortKeyName": "userId", - "SortKeyType": "S", - "Region": "us-east-1", - "Arn": "arn:aws:dynamodb:us-east-1:123456789012:table/activity-main", - "StreamArn": "arn:aws:dynamodb:us-east-1:123456789012:table/activity-main/stream/2026-03-07T17:11:10.591", - "PartitionKeyType": "S", - "Name": "activity-main" + "CreatedSNSRole": "arn:aws:iam::123456789012:role/snsc578c16ec39a5-main", + "UserPoolId": "us-east-1_vv2HFjwRK", + "AppClientIDWeb": "7nhjrv5jepqc7kacqiknlj0siu", + "AppClientID": "7tbnnc27p4edfrp7m6bqqkh0gq", + "IdentityPoolId": "us-east-1:d588cc58-4459-4b1b-ac91-307079a54464", + "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_vv2HFjwRK", + "IdentityPoolName": "discussionsc578c16e_identitypool_c578c16e__main", + "UserPoolName": "discussionsc578c16e_userpool_c578c16e" }, - "lastPushDirHash": "LKrx9n9rI5MFeuTLmyTA2Bho0zg=" + "lastPushDirHash": "mPKsrH+CL3NCuCtTWB9nkOHB7ls=" } }, "function": { "fetchuseractivity": { "build": true, - "providerPlugin": "awscloudformation", - "service": "Lambda", "dependsOn": [ { - "category": "storage", - "resourceName": "activity", "attributes": [ "Name", "Arn", "StreamArn" - ] + ], + "category": "storage", + "resourceName": "activity" } ], - "lastBuildTimeStamp": "2026-03-07T17:10:44.841Z", + "providerPlugin": "awscloudformation", + "service": "Lambda", + "lastBuildTimeStamp": "2026-03-20T21:19:47.115Z", "lastBuildType": "PROD", - "lastPackageTimeStamp": "2026-03-07T17:10:50.407Z", - "distZipFilename": "fetchuseractivity-6e6d76524e6255314269-build.zip", + "lastPackageTimeStamp": "2026-03-20T21:19:47.147Z", + "distZipFilename": "fetchuseractivity-6e523036545438726f37-build.zip", "s3Bucket": { - "deploymentBucketName": "amplify-discussions-main-d5a80-deployment", - "s3Key": "amplify-builds/fetchuseractivity-6e6d76524e6255314269-build.zip" + "deploymentBucketName": "amplify-discussions-main-c39a5-deployment", + "s3Key": "amplify-builds/fetchuseractivity-6e523036545438726f37-build.zip" }, "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/function/fetchuseractivity-cloudformation-template.json", + "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/function/fetchuseractivity-cloudformation-template.json", "logicalId": "functionfetchuseractivity" }, - "lastPushTimeStamp": "2026-03-07T17:15:23.263Z", + "lastPushTimeStamp": "2026-03-20T21:24:14.059Z", "output": { - "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/discussionsLambdaRole0d8fb131-main", + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/discussionsLambdaRole44bd86bc-main", "Region": "us-east-1", "Arn": "arn:aws:lambda:us-east-1:123456789012:function:fetchuseractivity-main", "Name": "fetchuseractivity-main", - "LambdaExecutionRole": "discussionsLambdaRole0d8fb131-main" + "LambdaExecutionRole": "discussionsLambdaRole44bd86bc-main" }, - "lastPushDirHash": "CCqZ3/vYa1JDk4/MxnxlXZTZKG0=" + "lastPushDirHash": "R64T5GvXPz84ttStgLRDEvqSeOg=" }, "recorduseractivity": { "build": true, - "providerPlugin": "awscloudformation", - "service": "Lambda", "dependsOn": [ { - "category": "api", - "resourceName": "discussions", "attributes": [ "GraphQLAPIIdOutput", "GraphQLAPIEndpointOutput" - ] + ], + "category": "api", + "resourceName": "discussions" }, { - "category": "storage", - "resourceName": "activity", "attributes": [ "Name", "Arn", "StreamArn" - ] + ], + "category": "storage", + "resourceName": "activity" } ], - "lastBuildTimeStamp": "2026-03-07T17:10:52.805Z", + "providerPlugin": "awscloudformation", + "service": "Lambda", + "lastBuildTimeStamp": "2026-03-20T21:19:47.546Z", "lastBuildType": "PROD", - "lastPackageTimeStamp": "2026-03-07T17:10:58.024Z", - "distZipFilename": "recorduseractivity-4969755347686f776962-build.zip", + "lastPackageTimeStamp": "2026-03-20T21:19:47.560Z", + "distZipFilename": "recorduseractivity-433947686f7145754543-build.zip", "s3Bucket": { - "deploymentBucketName": "amplify-discussions-main-d5a80-deployment", - "s3Key": "amplify-builds/recorduseractivity-4969755347686f776962-build.zip" + "deploymentBucketName": "amplify-discussions-main-c39a5-deployment", + "s3Key": "amplify-builds/recorduseractivity-433947686f7145754543-build.zip" }, "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/function/recorduseractivity-cloudformation-template.json", + "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/function/recorduseractivity-cloudformation-template.json", "logicalId": "functionrecorduseractivity" }, - "lastPushTimeStamp": "2026-03-07T17:15:23.263Z", + "lastPushTimeStamp": "2026-03-20T21:24:14.059Z", "output": { - "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/discussionsLambdaRole7674760b-main", + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/discussionsLambdaRole62a425ae-main", "Region": "us-east-1", "Arn": "arn:aws:lambda:us-east-1:123456789012:function:recorduseractivity-main", "Name": "recorduseractivity-main", - "LambdaExecutionRole": "discussionsLambdaRole7674760b-main" + "LambdaExecutionRole": "discussionsLambdaRole62a425ae-main" + }, + "lastPushDirHash": "wpepR6GRBy0XTCEXNmYdMZdmEvM=" + } + }, + "storage": { + "activity": { + "providerPlugin": "awscloudformation", + "service": "DynamoDB", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/activity-cloudformation-template.json", + "logicalId": "storageactivity" + }, + "lastPushTimeStamp": "2026-03-20T21:24:14.059Z", + "output": { + "PartitionKeyName": "id", + "SortKeyName": "userId", + "SortKeyType": "S", + "Region": "us-east-1", + "Arn": "arn:aws:dynamodb:us-east-1:123456789012:table/activity-main", + "StreamArn": "arn:aws:dynamodb:us-east-1:123456789012:table/activity-main/stream/2026-03-20T21:19:57.516", + "PartitionKeyType": "S", + "Name": "activity-main" + }, + "lastPushDirHash": "LKrx9n9rI5MFeuTLmyTA2Bho0zg=" + }, + "avatars": { + "dependsOn": [], + "providerPlugin": "awscloudformation", + "service": "S3", + "lastPushTimeStamp": "2026-03-20T21:24:14.059Z", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/cloudformation-template.json", + "logicalId": "storageavatars" + }, + "output": { + "BucketName": "discus-avatarsc39a5-main", + "Region": "us-east-1" + }, + "lastPushDirHash": "rNwwRZG31h4CJSNavssQfx7X9sQ=" + }, + "bookmarks": { + "providerPlugin": "awscloudformation", + "service": "DynamoDB", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/bookmarks-cloudformation-template.json", + "logicalId": "storagebookmarks" + }, + "lastPushTimeStamp": "2026-03-20T21:24:14.059Z", + "output": { + "PartitionKeyName": "userId", + "SortKeyName": "postId", + "SortKeyType": "S", + "Region": "us-east-1", + "Arn": "arn:aws:dynamodb:us-east-1:123456789012:table/bookmarks-main", + "StreamArn": "arn:aws:dynamodb:us-east-1:123456789012:table/bookmarks-main/stream/2026-03-20T21:19:57.495", + "PartitionKeyType": "S", + "Name": "bookmarks-main" }, - "lastPushDirHash": "oiEx6GaCR5Xqn9AkM8N+qHVANXw=" + "lastPushDirHash": "UcosRNORY7WR8bi+QNNLl+eX+Eo=" } } } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/api/discussions/build/cloudformation-template.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/api/discussions/build/cloudformation-template.json index 545cd8480fd..647ae86b7e0 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/api/discussions/build/cloudformation-template.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/api/discussions/build/cloudformation-template.json @@ -111,7 +111,7 @@ "ApiId" ] }, - "Expires": 1773508259 + "Expires": 1774646388 } }, "GraphQLAPINONEDS95A13CF0": { @@ -1062,5 +1062,5 @@ } } }, - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-AppSync\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-AppSync\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/api/discussions/build/parameters.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/api/discussions/build/parameters.json index 85fe81669da..7219a2a69a5 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/api/discussions/build/parameters.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/api/discussions/build/parameters.json @@ -2,6 +2,6 @@ "AppSyncApiName": "discussions", "DynamoDBBillingMode": "PAY_PER_REQUEST", "DynamoDBEnableServerSideEncryption": false, - "S3DeploymentBucket": "amplify-discussions-main-d5a80-deployment", + "S3DeploymentBucket": "amplify-discussions-main-c39a5-deployment", "S3DeploymentRootKey": "amplify-appsync-files/db92bad357b2590353e82db2f2ec7d0fc9cfd30d" } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/discussions/build/cloudformation-template.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/discussions/build/cloudformation-template.json index 545cd8480fd..647ae86b7e0 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/discussions/build/cloudformation-template.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/api/discussions/build/cloudformation-template.json @@ -111,7 +111,7 @@ "ApiId" ] }, - "Expires": 1773508259 + "Expires": 1774646388 } }, "GraphQLAPINONEDS95A13CF0": { @@ -1062,5 +1062,5 @@ } } }, - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-AppSync\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-AppSync\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json index 3c701beabac..7d427d24e55 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json @@ -199,15 +199,29 @@ } } }, - "authdiscussions22367c6822367c68": { + "apidiscussions": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/auth/discussions22367c6822367c68-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/api/cloudformation-template.json", "Parameters": { - "identityPoolName": "discussions22367c68_identitypool_22367c68", + "AppSyncApiName": "discussions", + "DynamoDBBillingMode": "PAY_PER_REQUEST", + "DynamoDBEnableServerSideEncryption": false, + "S3DeploymentBucket": "amplify-discussions-main-c39a5-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/db92bad357b2590353e82db2f2ec7d0fc9cfd30d", + "env": "main" + } + } + }, + "authdiscussionsc578c16ec578c16e": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/auth/discussionsc578c16ec578c16e-cloudformation-template.json", + "Parameters": { + "identityPoolName": "discussionsc578c16e_identitypool_c578c16e", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "discus22367c68", - "userPoolName": "discussions22367c68_userpool_22367c68", + "resourceNameTruncated": "discusc578c16e", + "userPoolName": "discussionsc578c16e_userpool_c578c16e", "autoVerifiedAttributes": "email", "mfaConfiguration": "OFF", "mfaTypes": "SMS Text Message", @@ -224,10 +238,10 @@ "userpoolClientRefreshTokenValidity": "120", "userpoolClientWriteAttributes": "email", "userpoolClientReadAttributes": "email", - "userpoolClientLambdaRole": "discus22367c68_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "discusc578c16e_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "22367c68", - "resourceName": "discussions22367c6822367c68", + "sharedId": "c578c16e", + "resourceName": "discussionsc578c16ec578c16e", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -258,41 +272,13 @@ } } }, - "apidiscussions": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/api/cloudformation-template.json", - "Parameters": { - "AppSyncApiName": "discussions", - "DynamoDBBillingMode": "PAY_PER_REQUEST", - "DynamoDBEnableServerSideEncryption": false, - "S3DeploymentBucket": "amplify-discussions-main-d5a80-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/db92bad357b2590353e82db2f2ec7d0fc9cfd30d", - "env": "main" - } - } - }, - "storageactivity": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/storage/activity-cloudformation-template.json", - "Parameters": { - "tableName": "activity", - "partitionKeyName": "id", - "partitionKeyType": "S", - "sortKeyName": "userId", - "sortKeyType": "S", - "env": "main" - } - } - }, "functionfetchuseractivity": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/function/fetchuseractivity-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/function/fetchuseractivity-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-discussions-main-d5a80-deployment", - "s3Key": "amplify-builds/fetchuseractivity-6e6d76524e6255314269-build.zip", + "deploymentBucketName": "amplify-discussions-main-c39a5-deployment", + "s3Key": "amplify-builds/fetchuseractivity-6e523036545438726f37-build.zip", "storageactivityName": { "Fn::GetAtt": [ "storageactivity", @@ -318,10 +304,10 @@ "functionrecorduseractivity": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/function/recorduseractivity-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/function/recorduseractivity-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-discussions-main-d5a80-deployment", - "s3Key": "amplify-builds/recorduseractivity-4969755347686f776962-build.zip", + "deploymentBucketName": "amplify-discussions-main-c39a5-deployment", + "s3Key": "amplify-builds/recorduseractivity-433947686f7145754543-build.zip", "apidiscussionsGraphQLAPIIdOutput": { "Fn::GetAtt": [ "apidiscussions", @@ -356,11 +342,72 @@ } } }, + "storageactivity": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/activity-cloudformation-template.json", + "Parameters": { + "tableName": "activity", + "partitionKeyName": "id", + "partitionKeyType": "S", + "sortKeyName": "userId", + "sortKeyType": "S", + "env": "main" + } + } + }, + "storageavatars": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/cloudformation-template.json", + "Parameters": { + "bucketName": "discus-avatars", + "selectedGuestPermissions": "", + "selectedAuthenticatedPermissions": "s3:PutObject,s3:GetObject,s3:ListBucket,s3:DeleteObject", + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "authRoleName": { + "Ref": "AuthRoleName" + }, + "s3PrivatePolicy": "Private_policy_bf41454d", + "s3ProtectedPolicy": "Protected_policy_bf41454d", + "s3PublicPolicy": "Public_policy_bf41454d", + "s3ReadPolicy": "read_policy_bf41454d", + "s3UploadsPolicy": "Uploads_policy_bf41454d", + "authPolicyName": "s3_amplify_bf41454d", + "unauthPolicyName": "s3_amplify_bf41454d", + "AuthenticatedAllowList": "ALLOW", + "GuestAllowList": "DISALLOW", + "s3PermissionsAuthenticatedPrivate": "s3:PutObject,s3:GetObject,s3:DeleteObject", + "s3PermissionsAuthenticatedProtected": "s3:PutObject,s3:GetObject,s3:DeleteObject", + "s3PermissionsAuthenticatedPublic": "s3:PutObject,s3:GetObject,s3:DeleteObject", + "s3PermissionsAuthenticatedUploads": "s3:PutObject", + "s3PermissionsGuestPublic": "DISALLOW", + "s3PermissionsGuestUploads": "DISALLOW", + "env": "main" + } + } + }, + "storagebookmarks": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/bookmarks-cloudformation-template.json", + "Parameters": { + "tableName": "bookmarks", + "partitionKeyName": "userId", + "partitionKeyType": "S", + "sortKeyName": "postId", + "sortKeyType": "S", + "env": "main" + } + } + }, "UpdateRolesWithIDPFunction": { "DependsOn": [ "AuthRole", "UnauthRole", - "authdiscussions22367c6822367c68" + "authdiscussionsc578c16ec578c16e" ], "Type": "AWS::Lambda::Function", "Properties": { @@ -470,7 +517,7 @@ }, "idpId": { "Fn::GetAtt": [ - "authdiscussions22367c6822367c68", + "authdiscussionsc578c16ec578c16e", "Outputs.IdentityPoolId" ] }, diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/fetchuseractivity/fetchuseractivity-cloudformation-template.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/fetchuseractivity/fetchuseractivity-cloudformation-template.json index cff69443a2b..e44e73d93aa 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/fetchuseractivity/fetchuseractivity-cloudformation-template.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/fetchuseractivity/fetchuseractivity-cloudformation-template.json @@ -1,6 +1,6 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "Parameters": { "CloudWatchRule": { "Type": "String", @@ -110,12 +110,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "discussionsLambdaRole0d8fb131", + "discussionsLambdaRole44bd86bc", { "Fn::Join": [ "", [ - "discussionsLambdaRole0d8fb131", + "discussionsLambdaRole44bd86bc", "-", { "Ref": "env" diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/recorduseractivity/recorduseractivity-cloudformation-template.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/recorduseractivity/recorduseractivity-cloudformation-template.json index 1b1d6a91237..34511d0c3c6 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/recorduseractivity/recorduseractivity-cloudformation-template.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/function/recorduseractivity/recorduseractivity-cloudformation-template.json @@ -1,6 +1,6 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "Parameters": { "CloudWatchRule": { "Type": "String", @@ -118,12 +118,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "discussionsLambdaRole7674760b", + "discussionsLambdaRole62a425ae", { "Fn::Join": [ "", [ - "discussionsLambdaRole7674760b", + "discussionsLambdaRole62a425ae", "-", { "Ref": "env" diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/root-cloudformation-stack.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/root-cloudformation-stack.json index 3c701beabac..7d427d24e55 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/root-cloudformation-stack.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/root-cloudformation-stack.json @@ -199,15 +199,29 @@ } } }, - "authdiscussions22367c6822367c68": { + "apidiscussions": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/auth/discussions22367c6822367c68-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/api/cloudformation-template.json", "Parameters": { - "identityPoolName": "discussions22367c68_identitypool_22367c68", + "AppSyncApiName": "discussions", + "DynamoDBBillingMode": "PAY_PER_REQUEST", + "DynamoDBEnableServerSideEncryption": false, + "S3DeploymentBucket": "amplify-discussions-main-c39a5-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/db92bad357b2590353e82db2f2ec7d0fc9cfd30d", + "env": "main" + } + } + }, + "authdiscussionsc578c16ec578c16e": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/auth/discussionsc578c16ec578c16e-cloudformation-template.json", + "Parameters": { + "identityPoolName": "discussionsc578c16e_identitypool_c578c16e", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "discus22367c68", - "userPoolName": "discussions22367c68_userpool_22367c68", + "resourceNameTruncated": "discusc578c16e", + "userPoolName": "discussionsc578c16e_userpool_c578c16e", "autoVerifiedAttributes": "email", "mfaConfiguration": "OFF", "mfaTypes": "SMS Text Message", @@ -224,10 +238,10 @@ "userpoolClientRefreshTokenValidity": "120", "userpoolClientWriteAttributes": "email", "userpoolClientReadAttributes": "email", - "userpoolClientLambdaRole": "discus22367c68_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "discusc578c16e_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "22367c68", - "resourceName": "discussions22367c6822367c68", + "sharedId": "c578c16e", + "resourceName": "discussionsc578c16ec578c16e", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -258,41 +272,13 @@ } } }, - "apidiscussions": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/api/cloudformation-template.json", - "Parameters": { - "AppSyncApiName": "discussions", - "DynamoDBBillingMode": "PAY_PER_REQUEST", - "DynamoDBEnableServerSideEncryption": false, - "S3DeploymentBucket": "amplify-discussions-main-d5a80-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/db92bad357b2590353e82db2f2ec7d0fc9cfd30d", - "env": "main" - } - } - }, - "storageactivity": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/storage/activity-cloudformation-template.json", - "Parameters": { - "tableName": "activity", - "partitionKeyName": "id", - "partitionKeyType": "S", - "sortKeyName": "userId", - "sortKeyType": "S", - "env": "main" - } - } - }, "functionfetchuseractivity": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/function/fetchuseractivity-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/function/fetchuseractivity-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-discussions-main-d5a80-deployment", - "s3Key": "amplify-builds/fetchuseractivity-6e6d76524e6255314269-build.zip", + "deploymentBucketName": "amplify-discussions-main-c39a5-deployment", + "s3Key": "amplify-builds/fetchuseractivity-6e523036545438726f37-build.zip", "storageactivityName": { "Fn::GetAtt": [ "storageactivity", @@ -318,10 +304,10 @@ "functionrecorduseractivity": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/function/recorduseractivity-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/function/recorduseractivity-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-discussions-main-d5a80-deployment", - "s3Key": "amplify-builds/recorduseractivity-4969755347686f776962-build.zip", + "deploymentBucketName": "amplify-discussions-main-c39a5-deployment", + "s3Key": "amplify-builds/recorduseractivity-433947686f7145754543-build.zip", "apidiscussionsGraphQLAPIIdOutput": { "Fn::GetAtt": [ "apidiscussions", @@ -356,11 +342,72 @@ } } }, + "storageactivity": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/activity-cloudformation-template.json", + "Parameters": { + "tableName": "activity", + "partitionKeyName": "id", + "partitionKeyType": "S", + "sortKeyName": "userId", + "sortKeyType": "S", + "env": "main" + } + } + }, + "storageavatars": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/cloudformation-template.json", + "Parameters": { + "bucketName": "discus-avatars", + "selectedGuestPermissions": "", + "selectedAuthenticatedPermissions": "s3:PutObject,s3:GetObject,s3:ListBucket,s3:DeleteObject", + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "authRoleName": { + "Ref": "AuthRoleName" + }, + "s3PrivatePolicy": "Private_policy_bf41454d", + "s3ProtectedPolicy": "Protected_policy_bf41454d", + "s3PublicPolicy": "Public_policy_bf41454d", + "s3ReadPolicy": "read_policy_bf41454d", + "s3UploadsPolicy": "Uploads_policy_bf41454d", + "authPolicyName": "s3_amplify_bf41454d", + "unauthPolicyName": "s3_amplify_bf41454d", + "AuthenticatedAllowList": "ALLOW", + "GuestAllowList": "DISALLOW", + "s3PermissionsAuthenticatedPrivate": "s3:PutObject,s3:GetObject,s3:DeleteObject", + "s3PermissionsAuthenticatedProtected": "s3:PutObject,s3:GetObject,s3:DeleteObject", + "s3PermissionsAuthenticatedPublic": "s3:PutObject,s3:GetObject,s3:DeleteObject", + "s3PermissionsAuthenticatedUploads": "s3:PutObject", + "s3PermissionsGuestPublic": "DISALLOW", + "s3PermissionsGuestUploads": "DISALLOW", + "env": "main" + } + } + }, + "storagebookmarks": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/bookmarks-cloudformation-template.json", + "Parameters": { + "tableName": "bookmarks", + "partitionKeyName": "userId", + "partitionKeyType": "S", + "sortKeyName": "postId", + "sortKeyType": "S", + "env": "main" + } + } + }, "UpdateRolesWithIDPFunction": { "DependsOn": [ "AuthRole", "UnauthRole", - "authdiscussions22367c6822367c68" + "authdiscussionsc578c16ec578c16e" ], "Type": "AWS::Lambda::Function", "Properties": { @@ -470,7 +517,7 @@ }, "idpId": { "Fn::GetAtt": [ - "authdiscussions22367c6822367c68", + "authdiscussionsc578c16ec578c16e", "Outputs.IdentityPoolId" ] }, diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/storage/activity/build/activity-cloudformation-template.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/storage/activity/build/activity-cloudformation-template.json index a2cf77e20fa..17ea25a0a60 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/storage/activity/build/activity-cloudformation-template.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/awscloudformation/build/storage/activity/build/activity-cloudformation-template.json @@ -1,5 +1,5 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"storage-DynamoDB\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"storage-DynamoDB\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "partitionKeyName": { diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/backend-config.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/backend-config.json index d030749556a..49fe6deb7c4 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/backend-config.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/backend-config.json @@ -18,7 +18,7 @@ } }, "auth": { - "discussions22367c6822367c68": { + "discussionsc578c16ec578c16e": { "customAuth": false, "dependsOn": [], "frontendAuthConfig": { @@ -126,6 +126,15 @@ "activity": { "providerPlugin": "awscloudformation", "service": "DynamoDB" + }, + "avatars": { + "dependsOn": [], + "providerPlugin": "awscloudformation", + "service": "S3" + }, + "bookmarks": { + "providerPlugin": "awscloudformation", + "service": "DynamoDB" } } } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fetchuseractivity/fetchuseractivity-cloudformation-template.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fetchuseractivity/fetchuseractivity-cloudformation-template.json index cff69443a2b..e44e73d93aa 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fetchuseractivity/fetchuseractivity-cloudformation-template.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fetchuseractivity/fetchuseractivity-cloudformation-template.json @@ -1,6 +1,6 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "Parameters": { "CloudWatchRule": { "Type": "String", @@ -110,12 +110,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "discussionsLambdaRole0d8fb131", + "discussionsLambdaRole44bd86bc", { "Fn::Join": [ "", [ - "discussionsLambdaRole0d8fb131", + "discussionsLambdaRole44bd86bc", "-", { "Ref": "env" diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fetchuseractivity/src/package.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fetchuseractivity/src/package.json index 9c932a8d90b..4adb03a1ee0 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fetchuseractivity/src/package.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/function/fetchuseractivity/src/package.json @@ -6,9 +6,5 @@ "license": "Apache-2.0", "devDependencies": { "@types/aws-lambda": "^8.10.92" - }, - "dependencies": { - "@aws-sdk/client-dynamodb": "^3.936.0", - "@aws-sdk/lib-dynamodb": "^3.936.0" } } diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/function/recorduseractivity/recorduseractivity-cloudformation-template.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/function/recorduseractivity/recorduseractivity-cloudformation-template.json index 1b1d6a91237..34511d0c3c6 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/function/recorduseractivity/recorduseractivity-cloudformation-template.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/function/recorduseractivity/recorduseractivity-cloudformation-template.json @@ -1,6 +1,6 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "Parameters": { "CloudWatchRule": { "Type": "String", @@ -118,12 +118,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "discussionsLambdaRole7674760b", + "discussionsLambdaRole62a425ae", { "Fn::Join": [ "", [ - "discussionsLambdaRole7674760b", + "discussionsLambdaRole62a425ae", "-", { "Ref": "env" diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/function/recorduseractivity/src/package.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/function/recorduseractivity/src/package.json index 4b0d757e73f..88d7e9d4aca 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/function/recorduseractivity/src/package.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/function/recorduseractivity/src/package.json @@ -6,9 +6,5 @@ "license": "Apache-2.0", "devDependencies": { "@types/aws-lambda": "^8.10.92" - }, - "dependencies": { - "@aws-sdk/client-dynamodb": "^3.936.0", - "@aws-sdk/lib-dynamodb": "^3.936.0" } } diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/storage/activity/build/activity-cloudformation-template.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/storage/activity/build/activity-cloudformation-template.json index a2cf77e20fa..17ea25a0a60 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/storage/activity/build/activity-cloudformation-template.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/#current-cloud-backend/storage/activity/build/activity-cloudformation-template.json @@ -1,5 +1,5 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"storage-DynamoDB\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"storage-DynamoDB\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "partitionKeyName": { diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/amplify-meta.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/amplify-meta.json index 9de8dab1e35..34b789e4330 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/amplify-meta.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/amplify-meta.json @@ -1,193 +1,228 @@ { "providers": { "awscloudformation": { - "AuthRoleName": "amplify-discussions-main-d5a80-authRole", - "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-unauthRole", - "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-authRole", + "AuthRoleName": "amplify-discussions-main-c39a5-authRole", + "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-discussions-main-c39a5-unauthRole", + "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-discussions-main-c39a5-authRole", "Region": "us-east-1", - "DeploymentBucketName": "amplify-discussions-main-d5a80-deployment", - "UnauthRoleName": "amplify-discussions-main-d5a80-unauthRole", - "StackName": "amplify-discussions-main-d5a80", - "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-discussions-main-d5a80/2bc587e0-1a44-11f1-8b6b-0affd4d11c2d", + "DeploymentBucketName": "amplify-discussions-main-c39a5-deployment", + "UnauthRoleName": "amplify-discussions-main-c39a5-unauthRole", + "StackName": "amplify-discussions-main-c39a5", + "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-discussions-main-c39a5/0e9a6f60-24a2-11f1-8462-0afffd2fb801", "AmplifyAppId": "discussions" } }, - "auth": { - "discussions22367c6822367c68": { - "service": "Cognito", - "providerPlugin": "awscloudformation", - "dependsOn": [], - "customAuth": false, - "frontendAuthConfig": { - "socialProviders": [], - "usernameAttributes": [ - "PHONE_NUMBER" - ], - "signupAttributes": [ - "EMAIL", - "PHONE_NUMBER" - ], - "passwordProtectionSettings": { - "passwordPolicyMinLength": 8, - "passwordPolicyCharacters": [] - }, - "mfaConfiguration": "OFF", - "mfaTypes": [ - "SMS" - ], - "verificationMechanisms": [ - "EMAIL" - ] - }, - "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/auth/discussions22367c6822367c68-cloudformation-template.json", - "logicalId": "authdiscussions22367c6822367c68" - }, - "lastPushTimeStamp": "2026-03-07T17:15:23.263Z", - "output": { - "CreatedSNSRole": "arn:aws:iam::123456789012:role/sns22367c68d5a80-main", - "UserPoolId": "us-east-1_Zs9EZpCYX", - "AppClientIDWeb": "ptm2eqjiee7l3e202lstfjd3r", - "AppClientID": "75sq8s16g37d0as1148og20p3i", - "IdentityPoolId": "us-east-1:d1df5c0c-2dd2-4471-bb0b-59c99bdbfe7f", - "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_Zs9EZpCYX", - "IdentityPoolName": "discussions22367c68_identitypool_22367c68__main", - "UserPoolName": "discussions22367c68_userpool_22367c68" - }, - "lastPushDirHash": "ZvxYrY5jFkJyUy3eyrP7RoSop4Y=" - } - }, "api": { "discussions": { - "service": "AppSync", - "providerPlugin": "awscloudformation", "dependsOn": [], "output": { "authConfig": { + "additionalAuthenticationProviders": [], "defaultAuthentication": { - "authenticationType": "API_KEY", "apiKeyConfig": { "apiKeyExpirationDays": 7 - } - }, - "additionalAuthenticationProviders": [] + }, + "authenticationType": "API_KEY" + } }, - "GraphQLAPIIdOutput": "ruiylk7rjnb4ziygno3jh4wrsq", - "GraphQLAPIEndpointOutput": "https://ouxhkkyjibe47illvcmepix6ru.appsync-api.us-east-1.amazonaws.com/graphql", + "GraphQLAPIIdOutput": "u3jn2qbupzbyhc3h53673wdvim", + "GraphQLAPIEndpointOutput": "https://jsm5ex363jcy5fm2reylyox4te.appsync-api.us-east-1.amazonaws.com/graphql", "GraphQLAPIKeyOutput": "da2-fakeapikey00000000000000" }, + "providerPlugin": "awscloudformation", + "service": "AppSync", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/api/cloudformation-template.json", + "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/api/cloudformation-template.json", "logicalId": "apidiscussions" }, - "lastPushTimeStamp": "2026-03-07T17:15:23.263Z", + "lastPushTimeStamp": "2026-03-20T21:24:14.059Z", "lastPushDirHash": "f67ZKOJM4WJlPWXfx5EsRQOT4UA=" } }, - "storage": { - "activity": { - "service": "DynamoDB", + "auth": { + "discussionsc578c16ec578c16e": { + "customAuth": false, + "dependsOn": [], + "frontendAuthConfig": { + "mfaConfiguration": "OFF", + "mfaTypes": [ + "SMS" + ], + "passwordProtectionSettings": { + "passwordPolicyMinLength": 8, + "passwordPolicyCharacters": [] + }, + "signupAttributes": [ + "EMAIL", + "PHONE_NUMBER" + ], + "socialProviders": [], + "usernameAttributes": [ + "PHONE_NUMBER" + ], + "verificationMechanisms": [ + "EMAIL" + ] + }, "providerPlugin": "awscloudformation", + "service": "Cognito", "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/storage/activity-cloudformation-template.json", - "logicalId": "storageactivity" + "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/auth/discussionsc578c16ec578c16e-cloudformation-template.json", + "logicalId": "authdiscussionsc578c16ec578c16e" }, - "lastPushTimeStamp": "2026-03-07T17:15:23.263Z", + "lastPushTimeStamp": "2026-03-20T21:24:14.059Z", "output": { - "PartitionKeyName": "id", - "SortKeyName": "userId", - "SortKeyType": "S", - "Region": "us-east-1", - "Arn": "arn:aws:dynamodb:us-east-1:123456789012:table/activity-main", - "StreamArn": "arn:aws:dynamodb:us-east-1:123456789012:table/activity-main/stream/2026-03-07T17:11:10.591", - "PartitionKeyType": "S", - "Name": "activity-main" + "CreatedSNSRole": "arn:aws:iam::123456789012:role/snsc578c16ec39a5-main", + "UserPoolId": "us-east-1_vv2HFjwRK", + "AppClientIDWeb": "7nhjrv5jepqc7kacqiknlj0siu", + "AppClientID": "7tbnnc27p4edfrp7m6bqqkh0gq", + "IdentityPoolId": "us-east-1:d588cc58-4459-4b1b-ac91-307079a54464", + "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_vv2HFjwRK", + "IdentityPoolName": "discussionsc578c16e_identitypool_c578c16e__main", + "UserPoolName": "discussionsc578c16e_userpool_c578c16e" }, - "lastPushDirHash": "LKrx9n9rI5MFeuTLmyTA2Bho0zg=" + "lastPushDirHash": "mPKsrH+CL3NCuCtTWB9nkOHB7ls=" } }, "function": { "fetchuseractivity": { "build": true, - "providerPlugin": "awscloudformation", - "service": "Lambda", "dependsOn": [ { - "category": "storage", - "resourceName": "activity", "attributes": [ "Name", "Arn", "StreamArn" - ] + ], + "category": "storage", + "resourceName": "activity" } ], - "lastBuildTimeStamp": "2026-03-07T17:10:44.841Z", + "providerPlugin": "awscloudformation", + "service": "Lambda", + "lastBuildTimeStamp": "2026-03-20T21:19:47.115Z", "lastBuildType": "PROD", - "lastPackageTimeStamp": "2026-03-07T17:10:50.407Z", - "distZipFilename": "fetchuseractivity-6e6d76524e6255314269-build.zip", + "lastPackageTimeStamp": "2026-03-20T21:19:47.147Z", + "distZipFilename": "fetchuseractivity-6e523036545438726f37-build.zip", "s3Bucket": { - "deploymentBucketName": "amplify-discussions-main-d5a80-deployment", - "s3Key": "amplify-builds/fetchuseractivity-6e6d76524e6255314269-build.zip" + "deploymentBucketName": "amplify-discussions-main-c39a5-deployment", + "s3Key": "amplify-builds/fetchuseractivity-6e523036545438726f37-build.zip" }, "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/function/fetchuseractivity-cloudformation-template.json", + "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/function/fetchuseractivity-cloudformation-template.json", "logicalId": "functionfetchuseractivity" }, - "lastPushTimeStamp": "2026-03-07T17:15:23.263Z", + "lastPushTimeStamp": "2026-03-20T21:24:14.059Z", "output": { - "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/discussionsLambdaRole0d8fb131-main", + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/discussionsLambdaRole44bd86bc-main", "Region": "us-east-1", "Arn": "arn:aws:lambda:us-east-1:123456789012:function:fetchuseractivity-main", "Name": "fetchuseractivity-main", - "LambdaExecutionRole": "discussionsLambdaRole0d8fb131-main" + "LambdaExecutionRole": "discussionsLambdaRole44bd86bc-main" }, - "lastPushDirHash": "CCqZ3/vYa1JDk4/MxnxlXZTZKG0=" + "lastPushDirHash": "R64T5GvXPz84ttStgLRDEvqSeOg=" }, "recorduseractivity": { "build": true, - "providerPlugin": "awscloudformation", - "service": "Lambda", "dependsOn": [ { - "category": "api", - "resourceName": "discussions", "attributes": [ "GraphQLAPIIdOutput", "GraphQLAPIEndpointOutput" - ] + ], + "category": "api", + "resourceName": "discussions" }, { - "category": "storage", - "resourceName": "activity", "attributes": [ "Name", "Arn", "StreamArn" - ] + ], + "category": "storage", + "resourceName": "activity" } ], - "lastBuildTimeStamp": "2026-03-07T17:10:52.805Z", + "providerPlugin": "awscloudformation", + "service": "Lambda", + "lastBuildTimeStamp": "2026-03-20T21:19:47.546Z", "lastBuildType": "PROD", - "lastPackageTimeStamp": "2026-03-07T17:10:58.024Z", - "distZipFilename": "recorduseractivity-4969755347686f776962-build.zip", + "lastPackageTimeStamp": "2026-03-20T21:19:47.560Z", + "distZipFilename": "recorduseractivity-433947686f7145754543-build.zip", "s3Bucket": { - "deploymentBucketName": "amplify-discussions-main-d5a80-deployment", - "s3Key": "amplify-builds/recorduseractivity-4969755347686f776962-build.zip" + "deploymentBucketName": "amplify-discussions-main-c39a5-deployment", + "s3Key": "amplify-builds/recorduseractivity-433947686f7145754543-build.zip" }, "providerMetadata": { - "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/function/recorduseractivity-cloudformation-template.json", + "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/function/recorduseractivity-cloudformation-template.json", "logicalId": "functionrecorduseractivity" }, - "lastPushTimeStamp": "2026-03-07T17:15:23.263Z", + "lastPushTimeStamp": "2026-03-20T21:24:14.059Z", "output": { - "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/discussionsLambdaRole7674760b-main", + "LambdaExecutionRoleArn": "arn:aws:iam::123456789012:role/discussionsLambdaRole62a425ae-main", "Region": "us-east-1", "Arn": "arn:aws:lambda:us-east-1:123456789012:function:recorduseractivity-main", "Name": "recorduseractivity-main", - "LambdaExecutionRole": "discussionsLambdaRole7674760b-main" + "LambdaExecutionRole": "discussionsLambdaRole62a425ae-main" + }, + "lastPushDirHash": "wpepR6GRBy0XTCEXNmYdMZdmEvM=" + } + }, + "storage": { + "activity": { + "providerPlugin": "awscloudformation", + "service": "DynamoDB", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/activity-cloudformation-template.json", + "logicalId": "storageactivity" + }, + "lastPushTimeStamp": "2026-03-20T21:24:14.059Z", + "output": { + "PartitionKeyName": "id", + "SortKeyName": "userId", + "SortKeyType": "S", + "Region": "us-east-1", + "Arn": "arn:aws:dynamodb:us-east-1:123456789012:table/activity-main", + "StreamArn": "arn:aws:dynamodb:us-east-1:123456789012:table/activity-main/stream/2026-03-20T21:19:57.516", + "PartitionKeyType": "S", + "Name": "activity-main" + }, + "lastPushDirHash": "LKrx9n9rI5MFeuTLmyTA2Bho0zg=" + }, + "avatars": { + "dependsOn": [], + "providerPlugin": "awscloudformation", + "service": "S3", + "lastPushTimeStamp": "2026-03-20T21:24:14.059Z", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/cloudformation-template.json", + "logicalId": "storageavatars" + }, + "output": { + "BucketName": "discus-avatarsc39a5-main", + "Region": "us-east-1" + }, + "lastPushDirHash": "rNwwRZG31h4CJSNavssQfx7X9sQ=" + }, + "bookmarks": { + "providerPlugin": "awscloudformation", + "service": "DynamoDB", + "providerMetadata": { + "s3TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/bookmarks-cloudformation-template.json", + "logicalId": "storagebookmarks" + }, + "lastPushTimeStamp": "2026-03-20T21:24:14.059Z", + "output": { + "PartitionKeyName": "userId", + "SortKeyName": "postId", + "SortKeyType": "S", + "Region": "us-east-1", + "Arn": "arn:aws:dynamodb:us-east-1:123456789012:table/bookmarks-main", + "StreamArn": "arn:aws:dynamodb:us-east-1:123456789012:table/bookmarks-main/stream/2026-03-20T21:19:57.495", + "PartitionKeyType": "S", + "Name": "bookmarks-main" }, - "lastPushDirHash": "oiEx6GaCR5Xqn9AkM8N+qHVANXw=" + "lastPushDirHash": "UcosRNORY7WR8bi+QNNLl+eX+Eo=" } } } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/api/discussions/build/cloudformation-template.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/api/discussions/build/cloudformation-template.json index 545cd8480fd..647ae86b7e0 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/api/discussions/build/cloudformation-template.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/api/discussions/build/cloudformation-template.json @@ -111,7 +111,7 @@ "ApiId" ] }, - "Expires": 1773508259 + "Expires": 1774646388 } }, "GraphQLAPINONEDS95A13CF0": { @@ -1062,5 +1062,5 @@ } } }, - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-AppSync\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-AppSync\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/api/discussions/build/parameters.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/api/discussions/build/parameters.json index 85fe81669da..7219a2a69a5 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/api/discussions/build/parameters.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/api/discussions/build/parameters.json @@ -2,6 +2,6 @@ "AppSyncApiName": "discussions", "DynamoDBBillingMode": "PAY_PER_REQUEST", "DynamoDBEnableServerSideEncryption": false, - "S3DeploymentBucket": "amplify-discussions-main-d5a80-deployment", + "S3DeploymentBucket": "amplify-discussions-main-c39a5-deployment", "S3DeploymentRootKey": "amplify-appsync-files/db92bad357b2590353e82db2f2ec7d0fc9cfd30d" } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/discussions/build/cloudformation-template.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/discussions/build/cloudformation-template.json index 545cd8480fd..647ae86b7e0 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/discussions/build/cloudformation-template.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/api/discussions/build/cloudformation-template.json @@ -111,7 +111,7 @@ "ApiId" ] }, - "Expires": 1773508259 + "Expires": 1774646388 } }, "GraphQLAPINONEDS95A13CF0": { @@ -1062,5 +1062,5 @@ } } }, - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-AppSync\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"api-AppSync\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}" } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json index 3c701beabac..7d427d24e55 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/awscloudformation/build/root-cloudformation-stack.json @@ -199,15 +199,29 @@ } } }, - "authdiscussions22367c6822367c68": { + "apidiscussions": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/auth/discussions22367c6822367c68-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/api/cloudformation-template.json", "Parameters": { - "identityPoolName": "discussions22367c68_identitypool_22367c68", + "AppSyncApiName": "discussions", + "DynamoDBBillingMode": "PAY_PER_REQUEST", + "DynamoDBEnableServerSideEncryption": false, + "S3DeploymentBucket": "amplify-discussions-main-c39a5-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/db92bad357b2590353e82db2f2ec7d0fc9cfd30d", + "env": "main" + } + } + }, + "authdiscussionsc578c16ec578c16e": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/auth/discussionsc578c16ec578c16e-cloudformation-template.json", + "Parameters": { + "identityPoolName": "discussionsc578c16e_identitypool_c578c16e", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "discus22367c68", - "userPoolName": "discussions22367c68_userpool_22367c68", + "resourceNameTruncated": "discusc578c16e", + "userPoolName": "discussionsc578c16e_userpool_c578c16e", "autoVerifiedAttributes": "email", "mfaConfiguration": "OFF", "mfaTypes": "SMS Text Message", @@ -224,10 +238,10 @@ "userpoolClientRefreshTokenValidity": "120", "userpoolClientWriteAttributes": "email", "userpoolClientReadAttributes": "email", - "userpoolClientLambdaRole": "discus22367c68_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "discusc578c16e_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "22367c68", - "resourceName": "discussions22367c6822367c68", + "sharedId": "c578c16e", + "resourceName": "discussionsc578c16ec578c16e", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -258,41 +272,13 @@ } } }, - "apidiscussions": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/api/cloudformation-template.json", - "Parameters": { - "AppSyncApiName": "discussions", - "DynamoDBBillingMode": "PAY_PER_REQUEST", - "DynamoDBEnableServerSideEncryption": false, - "S3DeploymentBucket": "amplify-discussions-main-d5a80-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/db92bad357b2590353e82db2f2ec7d0fc9cfd30d", - "env": "main" - } - } - }, - "storageactivity": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/storage/activity-cloudformation-template.json", - "Parameters": { - "tableName": "activity", - "partitionKeyName": "id", - "partitionKeyType": "S", - "sortKeyName": "userId", - "sortKeyType": "S", - "env": "main" - } - } - }, "functionfetchuseractivity": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/function/fetchuseractivity-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/function/fetchuseractivity-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-discussions-main-d5a80-deployment", - "s3Key": "amplify-builds/fetchuseractivity-6e6d76524e6255314269-build.zip", + "deploymentBucketName": "amplify-discussions-main-c39a5-deployment", + "s3Key": "amplify-builds/fetchuseractivity-6e523036545438726f37-build.zip", "storageactivityName": { "Fn::GetAtt": [ "storageactivity", @@ -318,10 +304,10 @@ "functionrecorduseractivity": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/function/recorduseractivity-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/function/recorduseractivity-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-discussions-main-d5a80-deployment", - "s3Key": "amplify-builds/recorduseractivity-4969755347686f776962-build.zip", + "deploymentBucketName": "amplify-discussions-main-c39a5-deployment", + "s3Key": "amplify-builds/recorduseractivity-433947686f7145754543-build.zip", "apidiscussionsGraphQLAPIIdOutput": { "Fn::GetAtt": [ "apidiscussions", @@ -356,11 +342,72 @@ } } }, + "storageactivity": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/activity-cloudformation-template.json", + "Parameters": { + "tableName": "activity", + "partitionKeyName": "id", + "partitionKeyType": "S", + "sortKeyName": "userId", + "sortKeyType": "S", + "env": "main" + } + } + }, + "storageavatars": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/cloudformation-template.json", + "Parameters": { + "bucketName": "discus-avatars", + "selectedGuestPermissions": "", + "selectedAuthenticatedPermissions": "s3:PutObject,s3:GetObject,s3:ListBucket,s3:DeleteObject", + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "authRoleName": { + "Ref": "AuthRoleName" + }, + "s3PrivatePolicy": "Private_policy_bf41454d", + "s3ProtectedPolicy": "Protected_policy_bf41454d", + "s3PublicPolicy": "Public_policy_bf41454d", + "s3ReadPolicy": "read_policy_bf41454d", + "s3UploadsPolicy": "Uploads_policy_bf41454d", + "authPolicyName": "s3_amplify_bf41454d", + "unauthPolicyName": "s3_amplify_bf41454d", + "AuthenticatedAllowList": "ALLOW", + "GuestAllowList": "DISALLOW", + "s3PermissionsAuthenticatedPrivate": "s3:PutObject,s3:GetObject,s3:DeleteObject", + "s3PermissionsAuthenticatedProtected": "s3:PutObject,s3:GetObject,s3:DeleteObject", + "s3PermissionsAuthenticatedPublic": "s3:PutObject,s3:GetObject,s3:DeleteObject", + "s3PermissionsAuthenticatedUploads": "s3:PutObject", + "s3PermissionsGuestPublic": "DISALLOW", + "s3PermissionsGuestUploads": "DISALLOW", + "env": "main" + } + } + }, + "storagebookmarks": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/bookmarks-cloudformation-template.json", + "Parameters": { + "tableName": "bookmarks", + "partitionKeyName": "userId", + "partitionKeyType": "S", + "sortKeyName": "postId", + "sortKeyType": "S", + "env": "main" + } + } + }, "UpdateRolesWithIDPFunction": { "DependsOn": [ "AuthRole", "UnauthRole", - "authdiscussions22367c6822367c68" + "authdiscussionsc578c16ec578c16e" ], "Type": "AWS::Lambda::Function", "Properties": { @@ -470,7 +517,7 @@ }, "idpId": { "Fn::GetAtt": [ - "authdiscussions22367c6822367c68", + "authdiscussionsc578c16ec578c16e", "Outputs.IdentityPoolId" ] }, diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/fetchuseractivity/fetchuseractivity-cloudformation-template.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/fetchuseractivity/fetchuseractivity-cloudformation-template.json index cff69443a2b..e44e73d93aa 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/fetchuseractivity/fetchuseractivity-cloudformation-template.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/fetchuseractivity/fetchuseractivity-cloudformation-template.json @@ -1,6 +1,6 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "Parameters": { "CloudWatchRule": { "Type": "String", @@ -110,12 +110,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "discussionsLambdaRole0d8fb131", + "discussionsLambdaRole44bd86bc", { "Fn::Join": [ "", [ - "discussionsLambdaRole0d8fb131", + "discussionsLambdaRole44bd86bc", "-", { "Ref": "env" diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/recorduseractivity/recorduseractivity-cloudformation-template.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/recorduseractivity/recorduseractivity-cloudformation-template.json index 1b1d6a91237..34511d0c3c6 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/recorduseractivity/recorduseractivity-cloudformation-template.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/function/recorduseractivity/recorduseractivity-cloudformation-template.json @@ -1,6 +1,6 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "Parameters": { "CloudWatchRule": { "Type": "String", @@ -118,12 +118,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "discussionsLambdaRole7674760b", + "discussionsLambdaRole62a425ae", { "Fn::Join": [ "", [ - "discussionsLambdaRole7674760b", + "discussionsLambdaRole62a425ae", "-", { "Ref": "env" diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/root-cloudformation-stack.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/root-cloudformation-stack.json index 3c701beabac..7d427d24e55 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/root-cloudformation-stack.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/root-cloudformation-stack.json @@ -199,15 +199,29 @@ } } }, - "authdiscussions22367c6822367c68": { + "apidiscussions": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/auth/discussions22367c6822367c68-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/api/cloudformation-template.json", "Parameters": { - "identityPoolName": "discussions22367c68_identitypool_22367c68", + "AppSyncApiName": "discussions", + "DynamoDBBillingMode": "PAY_PER_REQUEST", + "DynamoDBEnableServerSideEncryption": false, + "S3DeploymentBucket": "amplify-discussions-main-c39a5-deployment", + "S3DeploymentRootKey": "amplify-appsync-files/db92bad357b2590353e82db2f2ec7d0fc9cfd30d", + "env": "main" + } + } + }, + "authdiscussionsc578c16ec578c16e": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/auth/discussionsc578c16ec578c16e-cloudformation-template.json", + "Parameters": { + "identityPoolName": "discussionsc578c16e_identitypool_c578c16e", "allowUnauthenticatedIdentities": false, - "resourceNameTruncated": "discus22367c68", - "userPoolName": "discussions22367c68_userpool_22367c68", + "resourceNameTruncated": "discusc578c16e", + "userPoolName": "discussionsc578c16e_userpool_c578c16e", "autoVerifiedAttributes": "email", "mfaConfiguration": "OFF", "mfaTypes": "SMS Text Message", @@ -224,10 +238,10 @@ "userpoolClientRefreshTokenValidity": "120", "userpoolClientWriteAttributes": "email", "userpoolClientReadAttributes": "email", - "userpoolClientLambdaRole": "discus22367c68_userpoolclient_lambda_role", + "userpoolClientLambdaRole": "discusc578c16e_userpoolclient_lambda_role", "userpoolClientSetAttributes": false, - "sharedId": "22367c68", - "resourceName": "discussions22367c6822367c68", + "sharedId": "c578c16e", + "resourceName": "discussionsc578c16ec578c16e", "authSelections": "identityPoolAndUserPool", "useDefault": "manual", "thirdPartyAuth": false, @@ -258,41 +272,13 @@ } } }, - "apidiscussions": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/api/cloudformation-template.json", - "Parameters": { - "AppSyncApiName": "discussions", - "DynamoDBBillingMode": "PAY_PER_REQUEST", - "DynamoDBEnableServerSideEncryption": false, - "S3DeploymentBucket": "amplify-discussions-main-d5a80-deployment", - "S3DeploymentRootKey": "amplify-appsync-files/db92bad357b2590353e82db2f2ec7d0fc9cfd30d", - "env": "main" - } - } - }, - "storageactivity": { - "Type": "AWS::CloudFormation::Stack", - "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/storage/activity-cloudformation-template.json", - "Parameters": { - "tableName": "activity", - "partitionKeyName": "id", - "partitionKeyType": "S", - "sortKeyName": "userId", - "sortKeyType": "S", - "env": "main" - } - } - }, "functionfetchuseractivity": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/function/fetchuseractivity-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/function/fetchuseractivity-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-discussions-main-d5a80-deployment", - "s3Key": "amplify-builds/fetchuseractivity-6e6d76524e6255314269-build.zip", + "deploymentBucketName": "amplify-discussions-main-c39a5-deployment", + "s3Key": "amplify-builds/fetchuseractivity-6e523036545438726f37-build.zip", "storageactivityName": { "Fn::GetAtt": [ "storageactivity", @@ -318,10 +304,10 @@ "functionrecorduseractivity": { "Type": "AWS::CloudFormation::Stack", "Properties": { - "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-d5a80-deployment/amplify-cfn-templates/function/recorduseractivity-cloudformation-template.json", + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/function/recorduseractivity-cloudformation-template.json", "Parameters": { - "deploymentBucketName": "amplify-discussions-main-d5a80-deployment", - "s3Key": "amplify-builds/recorduseractivity-4969755347686f776962-build.zip", + "deploymentBucketName": "amplify-discussions-main-c39a5-deployment", + "s3Key": "amplify-builds/recorduseractivity-433947686f7145754543-build.zip", "apidiscussionsGraphQLAPIIdOutput": { "Fn::GetAtt": [ "apidiscussions", @@ -356,11 +342,72 @@ } } }, + "storageactivity": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/activity-cloudformation-template.json", + "Parameters": { + "tableName": "activity", + "partitionKeyName": "id", + "partitionKeyType": "S", + "sortKeyName": "userId", + "sortKeyType": "S", + "env": "main" + } + } + }, + "storageavatars": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/cloudformation-template.json", + "Parameters": { + "bucketName": "discus-avatars", + "selectedGuestPermissions": "", + "selectedAuthenticatedPermissions": "s3:PutObject,s3:GetObject,s3:ListBucket,s3:DeleteObject", + "unauthRoleName": { + "Ref": "UnauthRoleName" + }, + "authRoleName": { + "Ref": "AuthRoleName" + }, + "s3PrivatePolicy": "Private_policy_bf41454d", + "s3ProtectedPolicy": "Protected_policy_bf41454d", + "s3PublicPolicy": "Public_policy_bf41454d", + "s3ReadPolicy": "read_policy_bf41454d", + "s3UploadsPolicy": "Uploads_policy_bf41454d", + "authPolicyName": "s3_amplify_bf41454d", + "unauthPolicyName": "s3_amplify_bf41454d", + "AuthenticatedAllowList": "ALLOW", + "GuestAllowList": "DISALLOW", + "s3PermissionsAuthenticatedPrivate": "s3:PutObject,s3:GetObject,s3:DeleteObject", + "s3PermissionsAuthenticatedProtected": "s3:PutObject,s3:GetObject,s3:DeleteObject", + "s3PermissionsAuthenticatedPublic": "s3:PutObject,s3:GetObject,s3:DeleteObject", + "s3PermissionsAuthenticatedUploads": "s3:PutObject", + "s3PermissionsGuestPublic": "DISALLOW", + "s3PermissionsGuestUploads": "DISALLOW", + "env": "main" + } + } + }, + "storagebookmarks": { + "Type": "AWS::CloudFormation::Stack", + "Properties": { + "TemplateURL": "https://s3.amazonaws.com/amplify-discussions-main-c39a5-deployment/amplify-cfn-templates/storage/bookmarks-cloudformation-template.json", + "Parameters": { + "tableName": "bookmarks", + "partitionKeyName": "userId", + "partitionKeyType": "S", + "sortKeyName": "postId", + "sortKeyType": "S", + "env": "main" + } + } + }, "UpdateRolesWithIDPFunction": { "DependsOn": [ "AuthRole", "UnauthRole", - "authdiscussions22367c6822367c68" + "authdiscussionsc578c16ec578c16e" ], "Type": "AWS::Lambda::Function", "Properties": { @@ -470,7 +517,7 @@ }, "idpId": { "Fn::GetAtt": [ - "authdiscussions22367c6822367c68", + "authdiscussionsc578c16ec578c16e", "Outputs.IdentityPoolId" ] }, diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/storage/activity/build/activity-cloudformation-template.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/storage/activity/build/activity-cloudformation-template.json index a2cf77e20fa..17ea25a0a60 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/storage/activity/build/activity-cloudformation-template.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/awscloudformation/build/storage/activity/build/activity-cloudformation-template.json @@ -1,5 +1,5 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"storage-DynamoDB\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"storage-DynamoDB\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "partitionKeyName": { diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/backend-config.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/backend-config.json index d030749556a..49fe6deb7c4 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/backend-config.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/backend-config.json @@ -18,7 +18,7 @@ } }, "auth": { - "discussions22367c6822367c68": { + "discussionsc578c16ec578c16e": { "customAuth": false, "dependsOn": [], "frontendAuthConfig": { @@ -126,6 +126,15 @@ "activity": { "providerPlugin": "awscloudformation", "service": "DynamoDB" + }, + "avatars": { + "dependsOn": [], + "providerPlugin": "awscloudformation", + "service": "S3" + }, + "bookmarks": { + "providerPlugin": "awscloudformation", + "service": "DynamoDB" } } } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/function/fetchuseractivity/fetchuseractivity-cloudformation-template.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/function/fetchuseractivity/fetchuseractivity-cloudformation-template.json index cff69443a2b..e44e73d93aa 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/function/fetchuseractivity/fetchuseractivity-cloudformation-template.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/function/fetchuseractivity/fetchuseractivity-cloudformation-template.json @@ -1,6 +1,6 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "Parameters": { "CloudWatchRule": { "Type": "String", @@ -110,12 +110,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "discussionsLambdaRole0d8fb131", + "discussionsLambdaRole44bd86bc", { "Fn::Join": [ "", [ - "discussionsLambdaRole0d8fb131", + "discussionsLambdaRole44bd86bc", "-", { "Ref": "env" diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/function/fetchuseractivity/src/package.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/function/fetchuseractivity/src/package.json index 9c932a8d90b..4adb03a1ee0 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/function/fetchuseractivity/src/package.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/function/fetchuseractivity/src/package.json @@ -6,9 +6,5 @@ "license": "Apache-2.0", "devDependencies": { "@types/aws-lambda": "^8.10.92" - }, - "dependencies": { - "@aws-sdk/client-dynamodb": "^3.936.0", - "@aws-sdk/lib-dynamodb": "^3.936.0" } } diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/function/recorduseractivity/recorduseractivity-cloudformation-template.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/function/recorduseractivity/recorduseractivity-cloudformation-template.json index 1b1d6a91237..34511d0c3c6 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/function/recorduseractivity/recorduseractivity-cloudformation-template.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/function/recorduseractivity/recorduseractivity-cloudformation-template.json @@ -1,6 +1,6 @@ { "AWSTemplateFormatVersion": "2010-09-09", - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"function-Lambda\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "Parameters": { "CloudWatchRule": { "Type": "String", @@ -118,12 +118,12 @@ "RoleName": { "Fn::If": [ "ShouldNotCreateEnvResources", - "discussionsLambdaRole7674760b", + "discussionsLambdaRole62a425ae", { "Fn::Join": [ "", [ - "discussionsLambdaRole7674760b", + "discussionsLambdaRole62a425ae", "-", { "Ref": "env" diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/function/recorduseractivity/src/package.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/function/recorduseractivity/src/package.json index 4b0d757e73f..88d7e9d4aca 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/function/recorduseractivity/src/package.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/function/recorduseractivity/src/package.json @@ -6,9 +6,5 @@ "license": "Apache-2.0", "devDependencies": { "@types/aws-lambda": "^8.10.92" - }, - "dependencies": { - "@aws-sdk/client-dynamodb": "^3.936.0", - "@aws-sdk/lib-dynamodb": "^3.936.0" } } diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/storage/activity/build/activity-cloudformation-template.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/storage/activity/build/activity-cloudformation-template.json index a2cf77e20fa..17ea25a0a60 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/storage/activity/build/activity-cloudformation-template.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/storage/activity/build/activity-cloudformation-template.json @@ -1,5 +1,5 @@ { - "Description": "{\"createdOn\":\"Mac\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"storage-DynamoDB\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", + "Description": "{\"createdOn\":\"Linux\",\"createdBy\":\"Amplify\",\"createdWith\":\"14.2.5\",\"stackType\":\"storage-DynamoDB\",\"metadata\":{\"whyContinueWithGen1\":\"Prefer not to answer\"}}", "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "partitionKeyName": { diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/types/amplify-dependent-resources-ref.d.ts b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/types/amplify-dependent-resources-ref.d.ts index 2be656f7cc6..51ec22deece 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/types/amplify-dependent-resources-ref.d.ts +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/backend/types/amplify-dependent-resources-ref.d.ts @@ -7,7 +7,7 @@ export type AmplifyDependentResourcesAttributes = { } }, "auth": { - "discussions22367c6822367c68": { + "discussionsc578c16ec578c16e": { "AppClientID": "string", "AppClientIDWeb": "string", "CreatedSNSRole": "string", @@ -44,6 +44,20 @@ export type AmplifyDependentResourcesAttributes = { "SortKeyName": "string", "SortKeyType": "string", "StreamArn": "string" + }, + "avatars": { + "BucketName": "string", + "Region": "string" + }, + "bookmarks": { + "Arn": "string", + "Name": "string", + "PartitionKeyName": "string", + "PartitionKeyType": "string", + "Region": "string", + "SortKeyName": "string", + "SortKeyType": "string", + "StreamArn": "string" } } } \ No newline at end of file diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/team-provider-info.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/team-provider-info.json index a44c217ba8e..9908807370a 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/team-provider-info.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/amplify/team-provider-info.json @@ -1,36 +1,40 @@ { "main": { "awscloudformation": { - "AuthRoleName": "amplify-discussions-main-d5a80-authRole", - "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-unauthRole", - "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-discussions-main-d5a80-authRole", + "AuthRoleName": "amplify-discussions-main-c39a5-authRole", + "UnauthRoleArn": "arn:aws:iam::123456789012:role/amplify-discussions-main-c39a5-unauthRole", + "AuthRoleArn": "arn:aws:iam::123456789012:role/amplify-discussions-main-c39a5-authRole", "Region": "us-east-1", - "DeploymentBucketName": "amplify-discussions-main-d5a80-deployment", - "UnauthRoleName": "amplify-discussions-main-d5a80-unauthRole", - "StackName": "amplify-discussions-main-d5a80", - "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-discussions-main-d5a80/2bc587e0-1a44-11f1-8b6b-0affd4d11c2d", + "DeploymentBucketName": "amplify-discussions-main-c39a5-deployment", + "UnauthRoleName": "amplify-discussions-main-c39a5-unauthRole", + "StackName": "amplify-discussions-main-c39a5", + "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/amplify-discussions-main-c39a5/0e9a6f60-24a2-11f1-8462-0afffd2fb801", "AmplifyAppId": "discussions" }, "categories": { "auth": { - "discussions22367c6822367c68": {} + "discussionsc578c16ec578c16e": {} }, "function": { "fetchuseractivity": { - "deploymentBucketName": "amplify-discussions-main-d5a80-deployment", - "s3Key": "amplify-builds/fetchuseractivity-6e6d76524e6255314269-build.zip" + "deploymentBucketName": "amplify-discussions-main-c39a5-deployment", + "s3Key": "amplify-builds/fetchuseractivity-6e523036545438726f37-build.zip" }, "recorduseractivity": { - "deploymentBucketName": "amplify-discussions-main-d5a80-deployment", - "s3Key": "amplify-builds/recorduseractivity-4969755347686f776962-build.zip" - } + "deploymentBucketName": "amplify-discussions-main-c39a5-deployment", + "s3Key": "amplify-builds/recorduseractivity-433947686f7145754543-build.zip" + }, + "activity": {}, + "discussions": {} }, "api": { "discussions": {} }, "storage": { - "activity": {} + "activity": {}, + "avatars": {}, + "bookmarks": {} } } } -} \ No newline at end of file +} diff --git a/amplify-migration-apps/discussions/_snapshot.pre.generate/package.json b/amplify-migration-apps/discussions/_snapshot.pre.generate/package.json index 1f4874f0128..a43104ec77a 100644 --- a/amplify-migration-apps/discussions/_snapshot.pre.generate/package.json +++ b/amplify-migration-apps/discussions/_snapshot.pre.generate/package.json @@ -20,6 +20,8 @@ "vite": "^7.2.2" }, "dependencies": { + "@aws-sdk/client-dynamodb": "^3.936.0", + "@aws-sdk/lib-dynamodb": "^3.936.0", "aws-amplify": "^6.15.8" } } diff --git a/amplify-migration-apps/discussions/gen1-test-script.ts b/amplify-migration-apps/discussions/gen1-test-script.ts index 9d4c973c019..322b36d468e 100644 --- a/amplify-migration-apps/discussions/gen1-test-script.ts +++ b/amplify-migration-apps/discussions/gen1-test-script.ts @@ -7,7 +7,9 @@ * 3. Post CRUD Operations * 4. Comment CRUD Operations * 5. User Activity Tracking - * 6. Cleanup (Delete Test Data) + * 6. S3 Storage (Avatars) + * 7. Bookmarks DDB + * 8. Cleanup (Delete Test Data) * * Credentials are provisioned automatically via Cognito AdminCreateUser + AdminSetUserPassword. */ @@ -40,7 +42,9 @@ async function runAllTests(): Promise { console.log(' 3. Post CRUD Operations'); console.log(' 4. Comment CRUD Operations'); console.log(' 5. User Activity Tracking'); - console.log(' 6. Cleanup (Delete Test Data)'); + console.log(' 6. S3 Storage (Avatars)'); + console.log(' 7. Bookmarks DDB'); + console.log(' 8. Cleanup (Delete Test Data)'); // Provision user via admin APIs, then sign in here so tokens stay in this module's Amplify scope const { signinValue, testUser } = await provisionTestUser(amplifyconfig); @@ -57,8 +61,16 @@ async function runAllTests(): Promise { const runner = new TestRunner(); const testFunctions = createTestFunctions(); - const { runQueryTests, runTopicMutationTests, runPostMutationTests, runCommentMutationTests, runActivityTests, runCleanupTests } = - createTestOrchestrator(testFunctions, runner); + const { + runQueryTests, + runTopicMutationTests, + runPostMutationTests, + runCommentMutationTests, + runActivityTests, + runStorageTests, + runBookmarksTests, + runCleanupTests, + } = createTestOrchestrator(testFunctions, runner); // Get current user ID for activity tests const currentUser = await getCurrentUser(); @@ -84,7 +96,15 @@ async function runAllTests(): Promise { // Part 5: Activity tests await runActivityTests(currentUser.userId); - // Part 6: Cleanup + // Part 6: S3 Storage (Avatars) + await runStorageTests(); + + // Part 7: Bookmarks DDB (requires a post to bookmark) + if (postId) { + await runBookmarksTests(currentUser.userId, postId); + } + + // Part 8: Cleanup await runCleanupTests(topicId, postId, commentId); // Sign out diff --git a/amplify-migration-apps/discussions/index.html b/amplify-migration-apps/discussions/index.html index 558a994e5b4..e0d813dd9e0 100644 --- a/amplify-migration-apps/discussions/index.html +++ b/amplify-migration-apps/discussions/index.html @@ -489,6 +489,89 @@ /* Utilities */ .hidden { display: none; } + /* Profile Page */ + .profile-section { + display: flex; + align-items: center; + gap: 30px; + padding: 40px; + background: #f7fafc; + border-radius: 16px; + margin-bottom: 30px; + } + .profile-avatar-container { + display: flex; + flex-direction: column; + align-items: center; + gap: 15px; + } + .profile-avatar { + width: 120px; + height: 120px; + font-size: 40px; + border-radius: 50%; + object-fit: cover; + } + .avatar-upload-btn { + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + color: white; + padding: 10px 20px; + border-radius: 25px; + cursor: pointer; + font-size: 14px; + font-weight: 600; + transition: all 0.3s; + } + .avatar-upload-btn:hover { + transform: translateY(-2px); + box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4); + } + .profile-info { + flex: 1; + } + .profile-name { + font-size: 24px; + font-weight: 700; + color: #2d3748; + margin-bottom: 5px; + } + .profile-meta { + color: #718096; + font-size: 16px; + } + .upload-status { + padding: 15px; + border-radius: 12px; + text-align: center; + font-weight: 600; + } + .upload-status.success { + background: #c6f6d5; + color: #276749; + } + .upload-status.error { + background: #fed7d7; + color: #c53030; + } + .upload-status.loading { + background: #e9d8fd; + color: #553c9a; + } + .clickable-avatar { + cursor: pointer; + transition: transform 0.2s, box-shadow 0.2s; + } + .clickable-avatar:hover { + transform: scale(1.1); + box-shadow: 0 4px 12px rgba(0,0,0,0.3); + } + .avatar-img { + width: 100%; + height: 100%; + border-radius: 50%; + object-fit: cover; + } + /* Page Header */ .page-header { margin-bottom: 25px; @@ -565,7 +648,7 @@

    Confirm Your Account

    -
    U
    +
    U
    @@ -624,6 +707,33 @@

    + + +

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%0A%cv>LFJ-Dh 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

>Vu2jiI$A=6m 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