@jaypie/mcp 0.8.43 → 0.8.45

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.43#947cd2b1"
12
+ const BUILD_VERSION_STRING = "@jaypie/mcp@0.8.45#115144e4"
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.43",
3
+ "version": "0.8.45",
4
4
  "description": "Jaypie MCP",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,11 @@
1
+ ---
2
+ version: 1.2.42
3
+ date: 2026-04-19
4
+ summary: Re-export jaypieApiKeyId and HTTP.HEADER.API_KEY via @jaypie/kit
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Bumped `@jaypie/kit` to `^1.2.8`, exposing:
10
+ - `jaypieApiKeyId(key, { namespace, salt? })` — derives a deterministic UUIDv5 from a hashed API key
11
+ - `HTTP.HEADER.API_KEY` (`"X-Api-Key"`)
@@ -0,0 +1,13 @@
1
+ ---
2
+ version: 1.2.8
3
+ date: 2026-04-19
4
+ summary: Add jaypieApiKeyId helper and X-Api-Key HTTP header constant
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Added `jaypieApiKeyId(key, { namespace, salt? })` — derives a deterministic UUIDv5 from the hashed key, suitable for use as a user-facing DynamoDB id
10
+ - Same key + namespace always produces the same id; preserves direct `get-item` lookup (no GSI)
11
+ - Namespace is required (consumer-scoped) to avoid cross-application collisions
12
+ - `salt` passes through to `hashJaypieKey` (defaults to `process.env.PROJECT_SALT`)
13
+ - Added `HTTP.HEADER.API_KEY` (`"X-Api-Key"`) to the HTTP header constants
@@ -0,0 +1,11 @@
1
+ ---
2
+ version: 0.8.44
3
+ date: 2026-04-19
4
+ summary: Pin cicd skill GitHub Actions to Node 24-native majors
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Documents the Node 24-native action majors (`actions/checkout@v6`, `actions/setup-node@v6`, `actions/cache@v5`, `actions/upload-artifact@v7`, `actions/download-artifact@v8`, `aws-actions/configure-aws-credentials@v6`) at the top of `skills/cicd.md`.
10
+ - Updates example workflows in `skills/cicd.md`, `skills/cicd-actions.md`, and `skills/cicd-deploy.md` so scaffolds land on Node 24-native actions on the first pass, avoiding the Node 20 deprecation warning and `FORCE_JAVASCRIPT_ACTIONS_TO_NODE24` opt-in.
11
+ - Updates `workspaces/documentation/docs/guides/cicd.md` to match.
@@ -0,0 +1,12 @@
1
+ ---
2
+ version: 0.8.45
3
+ date: 2026-04-19
4
+ summary: Document jaypieApiKeyId helper and UUIDv5 DynamoDB id pattern in the apikey skill
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Updated `skill("apikey")`:
10
+ - Added a "Derive UUID Id" section documenting `jaypieApiKeyId(key, { namespace, salt? })`
11
+ - Reworked the "DynamoDB Storage Pattern" section to recommend UUIDv5-from-hash as the primary pattern when the id is user-facing, with the raw hex hash pattern documented as the alternative for hidden presentation
12
+ - Contrasted both approaches with the `xid = hash` + GSI pattern
@@ -0,0 +1,9 @@
1
+ ---
2
+ version: 1.2.36
3
+ date: 2026-04-19
4
+ summary: Add jaypieApiKeyId mock
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - Added `jaypieApiKeyId` mock — returns the fixed UUID `"00000000-0000-5000-8000-000000000000"`
package/skills/apikey.md CHANGED
@@ -5,7 +5,7 @@ related: dynamodb, secrets, style, tests
5
5
 
6
6
  # API Keys
7
7
 
8
- Jaypie provides three functions for working with API keys: `generateJaypieKey`, `validateJaypieKey`, and `hashJaypieKey`. Available from `jaypie` or `@jaypie/kit`.
8
+ Jaypie provides four functions for working with API keys: `generateJaypieKey`, `validateJaypieKey`, `hashJaypieKey`, and `jaypieApiKeyId`. Available from `jaypie` or `@jaypie/kit`.
9
9
 
10
10
  ## Generate
11
11
 
@@ -144,6 +144,29 @@ Returns a 64-character hex string. Deterministic — same key and salt always pr
144
144
  2. `process.env.PROJECT_SALT` environment variable
145
145
  3. No salt — plain SHA-256 (logs a warning)
146
146
 
147
+ ## Derive UUID Id
148
+
149
+ > **Version note:** `jaypieApiKeyId` requires `jaypie >= 1.2.22` / `@jaypie/kit >= 1.2.8`.
150
+
151
+ `jaypieApiKeyId(key, { namespace, salt? })` derives a deterministic UUIDv5 from the hashed key. Use this when the id must be surfaced in UIs, API responses, or resource URLs — a 64-char hex hash is not ergonomic, but a UUID is:
152
+
153
+ ```typescript
154
+ import { jaypieApiKeyId } from "jaypie";
155
+
156
+ const APIKEY_NAMESPACE = "b85e1a7a-5c7e-4e7b-9b8e-7c3a9d2f4e5b";
157
+
158
+ const id = jaypieApiKeyId(key, { namespace: APIKEY_NAMESPACE });
159
+ // "c4e1b0d2-..."
160
+ ```
161
+
162
+ Properties:
163
+
164
+ - **Deterministic** — same key + namespace always produces the same id; auth stays `getEntity({ id })`, still no GSI required
165
+ - **One-way** — derives from the hash, so the plaintext key cannot be recovered
166
+ - **Presentable** — a standard UUID, safe to expose externally
167
+
168
+ Pick a stable namespace UUID per application (a random UUIDv4 is fine) so ids cannot collide across unrelated services.
169
+
147
170
  ## Typical Workflow
148
171
 
149
172
  1. **Generate** a key and return it to the user (only time plaintext is visible)
@@ -216,14 +239,33 @@ See `~secrets` for the full secrets management pattern.
216
239
 
217
240
  ## DynamoDB Storage Pattern
218
241
 
219
- Store hashed API keys in DynamoDB for direct lookup without a GSI:
242
+ Store API keys in DynamoDB keyed on a deterministic id derived from the plaintext. Both patterns preserve direct `get-item` lookup (no GSI).
243
+
244
+ ### Preferred: UUIDv5 from hash (id safe to expose)
245
+
246
+ ```typescript
247
+ const APIKEY_NAMESPACE = "b85e1a7a-5c7e-4e7b-9b8e-7c3a9d2f4e5b";
248
+
249
+ // model = "apikey", id = uuidv5(hash, namespace) — standard UUID, safe to surface
250
+ { model: "apikey", id: jaypieApiKeyId(key, { namespace: APIKEY_NAMESPACE }), ownerId: "user_123", createdAt: "..." }
251
+ ```
252
+
253
+ Use this when the id will appear in API responses, UI, or resource URLs. Auth stays a single `getEntity({ model: "apikey", id: jaypieApiKeyId(presented, { namespace }) })`.
254
+
255
+ ### Alternative: Raw hash id (hidden presentation)
220
256
 
221
257
  ```typescript
222
- // model = "apikey", id = hash — enables direct get-item lookup
258
+ // model = "apikey", id = hash — a 64-char hex string, functional but not ergonomic
223
259
  { model: "apikey", id: hashJaypieKey(key), ownerId: "user_123", createdAt: "..." }
224
260
  ```
225
261
 
226
- This uses the `JaypieDynamoDb` default key convention (`model`/`id`). See `skill("dynamodb")` for table setup and query patterns.
262
+ Use when presentation does not matter internal-only tables, throwaway tooling, or when you are already storing a separate public identifier.
263
+
264
+ Both patterns use the `JaypieDynamoDb` default key convention (`model`/`id`). See `skill("dynamodb")` for table setup and query patterns.
265
+
266
+ ### Why not `xid = hash` with a GSI?
267
+
268
+ Another common pattern is `{ id: randomUUID(), xid: hashJaypieKey(key) }` with a GSI on `xid`. It works, but every auth lookup becomes a `query` against a GSI instead of a `get-item`, and you pay the per-deploy cost of an extra index. The UUIDv5 derivation sidesteps both by keeping the id deterministic.
227
269
 
228
270
  ## See Also
229
271
 
@@ -176,13 +176,13 @@ runs:
176
176
  using: 'composite'
177
177
  steps:
178
178
  - name: Setup Node.js
179
- uses: actions/setup-node@v4
179
+ uses: actions/setup-node@v6
180
180
  with:
181
181
  node-version: ${{ inputs.node-version }}
182
182
  cache: 'npm'
183
183
 
184
184
  - name: Cache node_modules
185
- uses: actions/cache@v4
185
+ uses: actions/cache@v5
186
186
  with:
187
187
  path: |
188
188
  node_modules
@@ -194,7 +194,7 @@ runs:
194
194
 
195
195
  - name: Cache build outputs
196
196
  if: inputs.cache-builds == 'true'
197
- uses: actions/cache@v4
197
+ uses: actions/cache@v5
198
198
  with:
199
199
  path: |
200
200
  packages/*/dist
@@ -282,7 +282,7 @@ runs:
282
282
  ${{ inputs.extra-args }}
283
283
 
284
284
  - name: Upload CDK outputs
285
- uses: actions/upload-artifact@v4
285
+ uses: actions/upload-artifact@v7
286
286
  with:
287
287
  name: cdk-outputs
288
288
  path: ${{ inputs.working-directory }}/cdk-outputs.json
@@ -302,7 +302,7 @@ jobs:
302
302
  id-token: write
303
303
  contents: read
304
304
  steps:
305
- - uses: actions/checkout@v4
305
+ - uses: actions/checkout@v6
306
306
 
307
307
  - uses: ./.github/actions/setup-environment
308
308
  with:
@@ -30,7 +30,7 @@ jobs:
30
30
  lint:
31
31
  runs-on: ubuntu-latest
32
32
  steps:
33
- - uses: actions/checkout@v4
33
+ - uses: actions/checkout@v6
34
34
  - uses: ./.github/actions/setup-node-and-cache
35
35
  - uses: ./.github/actions/npm-install-build
36
36
  with:
@@ -40,7 +40,7 @@ jobs:
40
40
  typecheck:
41
41
  runs-on: ubuntu-latest
42
42
  steps:
43
- - uses: actions/checkout@v4
43
+ - uses: actions/checkout@v6
44
44
  - uses: ./.github/actions/setup-node-and-cache
45
45
  - uses: ./.github/actions/npm-install-build
46
46
  with:
@@ -53,7 +53,7 @@ jobs:
53
53
  matrix:
54
54
  node-version: [22, 24, 25]
55
55
  steps:
56
- - uses: actions/checkout@v4
56
+ - uses: actions/checkout@v6
57
57
  - uses: ./.github/actions/setup-node-and-cache
58
58
  with:
59
59
  node-version: ${{ matrix.node-version }}
@@ -68,7 +68,7 @@ jobs:
68
68
  id-token: write
69
69
  contents: read
70
70
  steps:
71
- - uses: actions/checkout@v4
71
+ - uses: actions/checkout@v6
72
72
 
73
73
  - uses: ./.github/actions/setup-environment
74
74
  with:
@@ -112,7 +112,7 @@ jobs:
112
112
  lint:
113
113
  runs-on: ubuntu-latest
114
114
  steps:
115
- - uses: actions/checkout@v4
115
+ - uses: actions/checkout@v6
116
116
  - uses: ./.github/actions/setup-node-and-cache
117
117
  - uses: ./.github/actions/npm-install-build
118
118
  with:
@@ -122,7 +122,7 @@ jobs:
122
122
  typecheck:
123
123
  runs-on: ubuntu-latest
124
124
  steps:
125
- - uses: actions/checkout@v4
125
+ - uses: actions/checkout@v6
126
126
  - uses: ./.github/actions/setup-node-and-cache
127
127
  - uses: ./.github/actions/npm-install-build
128
128
  with:
@@ -135,7 +135,7 @@ jobs:
135
135
  matrix:
136
136
  node-version: [22, 24, 25]
137
137
  steps:
138
- - uses: actions/checkout@v4
138
+ - uses: actions/checkout@v6
139
139
  - uses: ./.github/actions/setup-node-and-cache
140
140
  with:
141
141
  node-version: ${{ matrix.node-version }}
@@ -150,7 +150,7 @@ jobs:
150
150
  id-token: write
151
151
  contents: read
152
152
  steps:
153
- - uses: actions/checkout@v4
153
+ - uses: actions/checkout@v6
154
154
 
155
155
  - uses: ./.github/actions/setup-environment
156
156
  with:
@@ -200,7 +200,7 @@ jobs:
200
200
  permissions:
201
201
  contents: write
202
202
  steps:
203
- - uses: actions/checkout@v4
203
+ - uses: actions/checkout@v6
204
204
  with:
205
205
  token: ${{ secrets.GITHUB_TOKEN }}
206
206
 
package/skills/cicd.md CHANGED
@@ -15,6 +15,21 @@ Jaypie projects use GitHub Actions for continuous integration and deployment.
15
15
  | `cicd-deploy` | CDK deployment workflows (sandbox, production) |
16
16
  | `cicd-environments` | GitHub Environments configuration |
17
17
 
18
+ ## Action Versions
19
+
20
+ GitHub Actions deprecated Node 20 runners on 2025-09-19. Pin third-party actions to majors that natively run on Node 24 to avoid deprecation warnings and the `FORCE_JAVASCRIPT_ACTIONS_TO_NODE24` opt-in.
21
+
22
+ | Action | Tag |
23
+ |---|---|
24
+ | `actions/checkout` | `v6` |
25
+ | `actions/setup-node` | `v6` |
26
+ | `actions/cache` | `v5` |
27
+ | `actions/upload-artifact` | `v7` |
28
+ | `actions/download-artifact` | `v8` |
29
+ | `aws-actions/configure-aws-credentials` | `v6` |
30
+
31
+ Refresh this list against the [Node 20 deprecation changelog](https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/) when bumping action versions.
32
+
18
33
  ## Standard Workflows
19
34
 
20
35
  ### npm-check.yml
@@ -34,8 +49,8 @@ jobs:
34
49
  lint:
35
50
  runs-on: ubuntu-latest
36
51
  steps:
37
- - uses: actions/checkout@v4
38
- - uses: actions/setup-node@v4
52
+ - uses: actions/checkout@v6
53
+ - uses: actions/setup-node@v6
39
54
  with:
40
55
  node-version: 24
41
56
  - run: npm ci
@@ -44,8 +59,8 @@ jobs:
44
59
  typecheck:
45
60
  runs-on: ubuntu-latest
46
61
  steps:
47
- - uses: actions/checkout@v4
48
- - uses: actions/setup-node@v4
62
+ - uses: actions/checkout@v6
63
+ - uses: actions/setup-node@v6
49
64
  with:
50
65
  node-version: 24
51
66
  - run: npm ci
@@ -57,8 +72,8 @@ jobs:
57
72
  matrix:
58
73
  node-version: [22, 24, 25]
59
74
  steps:
60
- - uses: actions/checkout@v4
61
- - uses: actions/setup-node@v4
75
+ - uses: actions/checkout@v6
76
+ - uses: actions/setup-node@v6
62
77
  with:
63
78
  node-version: ${{ matrix.node-version }}
64
79
  - run: npm ci
@@ -87,8 +102,8 @@ jobs:
87
102
  contents: read
88
103
  id-token: write
89
104
  steps:
90
- - uses: actions/checkout@v4
91
- - uses: actions/setup-node@v4
105
+ - uses: actions/checkout@v6
106
+ - uses: actions/setup-node@v6
92
107
  with:
93
108
  node-version: 24
94
109
  registry-url: 'https://registry.npmjs.org'