@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.
- package/dist/suites/docs/index.js +1 -1
- package/package.json +1 -1
- package/release-notes/jaypie/1.2.42.md +11 -0
- package/release-notes/kit/1.2.8.md +13 -0
- package/release-notes/mcp/0.8.44.md +11 -0
- package/release-notes/mcp/0.8.45.md +12 -0
- package/release-notes/testkit/1.2.36.md +9 -0
- package/skills/apikey.md +46 -4
- package/skills/cicd-actions.md +5 -5
- package/skills/cicd-deploy.md +9 -9
- package/skills/cicd.md +23 -8
|
@@ -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.
|
|
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
|
@@ -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
|
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
|
|
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
|
|
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 —
|
|
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
|
-
|
|
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
|
|
package/skills/cicd-actions.md
CHANGED
|
@@ -176,13 +176,13 @@ runs:
|
|
|
176
176
|
using: 'composite'
|
|
177
177
|
steps:
|
|
178
178
|
- name: Setup Node.js
|
|
179
|
-
uses: actions/setup-node@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
305
|
+
- uses: actions/checkout@v6
|
|
306
306
|
|
|
307
307
|
- uses: ./.github/actions/setup-environment
|
|
308
308
|
with:
|
package/skills/cicd-deploy.md
CHANGED
|
@@ -30,7 +30,7 @@ jobs:
|
|
|
30
30
|
lint:
|
|
31
31
|
runs-on: ubuntu-latest
|
|
32
32
|
steps:
|
|
33
|
-
- uses: actions/checkout@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
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@
|
|
38
|
-
- uses: actions/setup-node@
|
|
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@
|
|
48
|
-
- uses: actions/setup-node@
|
|
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@
|
|
61
|
-
- uses: actions/setup-node@
|
|
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@
|
|
91
|
-
- uses: actions/setup-node@
|
|
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'
|