@jaypie/mcp 0.8.56 → 0.8.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,7 +9,7 @@ import { gt } from 'semver';
9
9
  /**
10
10
  * Docs Suite - Documentation services (skill, version, release_notes)
11
11
  */
12
- const BUILD_VERSION_STRING = "@jaypie/mcp@0.8.56#4233ad47"
12
+ const BUILD_VERSION_STRING = "@jaypie/mcp@0.8.57#b4f7b221"
13
13
  ;
14
14
  const __filename$1 = fileURLToPath(import.meta.url);
15
15
  const __dirname$1 = path.dirname(__filename$1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jaypie/mcp",
3
- "version": "0.8.56",
3
+ "version": "0.8.57",
4
4
  "description": "Jaypie MCP",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,19 @@
1
+ ---
2
+ version: 1.2.54
3
+ date: 2026-05-10
4
+ summary: JaypieMigration grants control-plane DynamoDB perms scoped to passed tables (issue #339)
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - `JaypieMigration` now grants control-plane DynamoDB actions (`DescribeContinuousBackups`, `DescribeTable`, `DescribeTimeToLive`, `UpdateContinuousBackups`, `UpdateTable`, `UpdateTimeToLive`) on the ARNs of any tables passed via `tables`, scoped to the table ARN and its indexes (`/index/*`). Data-plane access is unchanged.
10
+
11
+ ## Motivation
12
+
13
+ The migration Lambda was previously granted only data-plane access via `grantReadWriteData`. Migrations whose entire purpose is to evolve table shape (add a GSI, change TTL, toggle streams, update backups) `AccessDenied` on the first control-plane call. Combined with `lambdaHandler`'s default soft-fail, the deploy reported `CREATE_COMPLETE` while later migrations silently never ran.
14
+
15
+ Pair this with the new `migrationHandler` in `@jaypie/lambda` (1.2.6) for end-to-end loud-fail behavior.
16
+
17
+ ## Migration
18
+
19
+ No action required. Existing migrations using only data-plane ops keep working; migrations that previously failed with `AccessDeniedException` on `dynamodb:DescribeTable` or `dynamodb:UpdateTable` should now succeed.
@@ -0,0 +1,13 @@
1
+ ---
2
+ version: 1.2.46
3
+ date: 2026-05-10
4
+ summary: Re-export migrationHandler from @jaypie/lambda (issue #339)
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Re-exports `migrationHandler` from `@jaypie/lambda` 1.2.6.
10
+
11
+ ## Motivation
12
+
13
+ Migration Lambdas should fail loudly so a failed migration fails the deploy. Use `migrationHandler` instead of `lambdaHandler` in migration entrypoints — see the migrations skill for usage.
@@ -0,0 +1,27 @@
1
+ ---
2
+ version: 1.2.6
3
+ date: 2026-05-10
4
+ summary: Add migrationHandler that defaults throw: true so failed migrations fail the deploy (issue #339)
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - New `migrationHandler` export. Wraps `lambdaHandler` with `throw: true` defaulted so a thrown error propagates out of the Lambda, causing the CFN custom resource (and the deploy) to fail loudly instead of swallowing the error and reporting `CREATE_COMPLETE`.
10
+ - Re-exported by `jaypie` and mocked by `@jaypie/testkit/mock`.
11
+ - Pass `{ throw: false }` to opt back into the soft-fail behavior.
12
+
13
+ ## Motivation
14
+
15
+ `JaypieMigration` runs its Lambda via a CFN custom resource provider. With `lambdaHandler`'s default `throw: false`, a thrown migration error was caught, logged as `fatal`, and returned as a successful response — CFN saw a 200-shaped response and marked the resource `CREATE_COMPLETE`. The deploy turned green while later migrations silently never ran.
16
+
17
+ ## Migration
18
+
19
+ Update migration entry points from `lambdaHandler` to `migrationHandler`:
20
+
21
+ ```typescript
22
+ import { migrationHandler } from "jaypie";
23
+
24
+ export const handler = migrationHandler(async (event) => {
25
+ // migration logic
26
+ });
27
+ ```
@@ -0,0 +1,9 @@
1
+ ---
2
+ version: 0.8.57
3
+ date: 2026-05-10
4
+ summary: Migrations skill recommends migrationHandler and documents control-plane perms (issue #339)
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - `skill("migrations")` now recommends `migrationHandler` for the Lambda entrypoint and documents the control-plane DynamoDB permissions added by `JaypieMigration` 1.2.54.
@@ -0,0 +1,9 @@
1
+ ---
2
+ version: 1.2.37
3
+ date: 2026-05-10
4
+ summary: Mock migrationHandler from @jaypie/lambda (issue #339)
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Adds `migrationHandler` mock that mirrors the real handler — defaults `throw: true` so thrown errors surface in tests.
@@ -44,16 +44,18 @@ new JaypieMigration(this, "SeedData", {
44
44
  - **Role**: Tagged as `CDK.ROLE.PROCESSING`
45
45
  - **Execution**: Runs on every deploy via CloudFormation custom resource (uses a deploy nonce to force re-invocation even when only Lambda code changes)
46
46
  - **Dependencies**: Use `dependencies` to ensure tables and other resources exist before the migration executes
47
+ - **Permissions**: Tables passed via `tables` get data-plane (`grantReadWriteData`) plus control-plane access (`DescribeTable`, `UpdateTable`, `UpdateTimeToLive`, `UpdateContinuousBackups`) scoped to the table ARN and its indexes — migrations that add GSIs, toggle TTL, or change backups work without extra IAM
47
48
 
48
49
  ## Migration Lambda Handler
49
50
 
50
- The migration Lambda receives a CloudFormation custom resource event. Return a result to signal success; throw to signal failure and roll back the stack.
51
+ The migration Lambda receives a CloudFormation custom resource event. Use `migrationHandler` so a thrown error fails the CFN custom resource (and the deploy) — `lambdaHandler`'s default `throw: false` returns a success-shaped response on error and CFN reports `CREATE_COMPLETE` even when the migration failed.
51
52
 
52
53
  ```typescript
53
54
  // src/migrations/seed/index.ts
54
55
  import { initClient, seedEntities, APEX } from "@jaypie/dynamodb";
56
+ import { migrationHandler } from "jaypie";
55
57
 
56
- export const handler = async (event: any) => {
58
+ export const handler = migrationHandler(async (event) => {
57
59
  await initClient();
58
60
 
59
61
  await seedEntities([
@@ -62,9 +64,11 @@ export const handler = async (event: any) => {
62
64
  ]);
63
65
 
64
66
  return { status: "complete" };
65
- };
67
+ });
66
68
  ```
67
69
 
70
+ `migrationHandler` is `lambdaHandler` with `throw: true` defaulted. Pass `{ throw: false }` to opt back into soft-fail behavior.
71
+
68
72
  ## Building Migration Code
69
73
 
70
74
  Bundle migrations separately using esbuild, then reference the output directory: