@molecule/api-jwt 1.0.4 → 1.0.6
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/README.md +30 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/provider.d.ts +21 -0
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +21 -0
- package/dist/provider.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@ AUTO-GENERATED — DO NOT EDIT THIS FILE.
|
|
|
3
3
|
Generated by `mlcl sync-docs` from the package's src/index.ts JSDoc + mlcl/registry.json.
|
|
4
4
|
Edits here are overwritten on the next commit (molecule's pre-commit hook regenerates).
|
|
5
5
|
To change this document, edit the module-level JSDoc in src/index.ts.
|
|
6
|
-
Generated: 2026-10-
|
|
6
|
+
Generated: 2026-10-16T15:47:24.688Z
|
|
7
7
|
-->
|
|
8
8
|
|
|
9
9
|
# @molecule/api-jwt
|
|
@@ -237,6 +237,27 @@ function hasProvider(): boolean
|
|
|
237
237
|
Signs a payload into a JWT string using the bonded provider. Uses the
|
|
238
238
|
configured algorithm, expiry, and private key as defaults.
|
|
239
239
|
|
|
240
|
+
This is the LOW-LEVEL signer: it signs whatever payload it is given, and a
|
|
241
|
+
token it mints is not by itself a session. For a session, use
|
|
242
|
+
`authorization.set()` from `@molecule/api-resource-user` — the app's global
|
|
243
|
+
`verifyMiddleware` accepts a JWT only when its payload also carries a
|
|
244
|
+
`deviceId` naming an active row in `devices` (see the module `@remarks`).
|
|
245
|
+
|
|
246
|
+
**There is ONE JWT provider per app, and this signs with it.** The scaffold
|
|
247
|
+
bonds `@molecule/api-jwt-jsonwebtoken` once (the app's `api/src/bonds/`), keyed
|
|
248
|
+
by `JWT_PRIVATE_KEY`/`JWT_PUBLIC_KEY` (auto-generated on first boot when unset)
|
|
249
|
+
with algorithm `JWT_ALGORITHM` (default `RS256`). There is no `JWT_SECRET` and
|
|
250
|
+
no second verifier to match: `setProvider()` in your own file REPLACES the
|
|
251
|
+
provider for the whole process, so every token this app and its packages mint
|
|
252
|
+
and verify changes with it.
|
|
253
|
+
|
|
254
|
+
To return a session token in a response BODY — an API whose clients send
|
|
255
|
+
`Authorization: Token <jwt>` — do not sign a second token with another key or
|
|
256
|
+
algorithm. `authorization.set(req, res, { userId, deviceId })` from
|
|
257
|
+
`@molecule/api-resource-user` RETURNS the signed token; mount
|
|
258
|
+
`verifyMiddleware({ allowCookieSession: false })` in front of the routes that
|
|
259
|
+
sign users in so no session cookie is written alongside it.
|
|
260
|
+
|
|
240
261
|
```typescript
|
|
241
262
|
function sign(
|
|
242
263
|
object: JSONObject,
|
|
@@ -379,6 +400,14 @@ anything security-relevant; `decode()` is only for reading a token you do NOT tr
|
|
|
379
400
|
and populates `res.locals.session`, so a handler calls `getUserId(res)` — do NOT call
|
|
380
401
|
`verify()`/`sign()` by hand for the session (see the `auth` skill). Use these directly
|
|
381
402
|
only for a CUSTOM token, e.g. a signed email/reset link.
|
|
403
|
+
- **{@link sign} is the low-level signer; a token it mints is NOT a session.**
|
|
404
|
+
`verifyMiddleware` (`@molecule/api-resource-user`) accepts a JWT only when its payload
|
|
405
|
+
also carries a `deviceId` naming an ACTIVE row in the app's `devices` table, so a
|
|
406
|
+
payload without one is treated as no session: `sign({ userId })` answers 401 on every
|
|
407
|
+
route although the token itself verifies. Mint a session with `authorization.set()`
|
|
408
|
+
from `@molecule/api-resource-user`, which signs and writes the session cookies — call
|
|
409
|
+
`get('device').createOrUpdate(userId, deviceName)` first and pass `{ userId, deviceId }`
|
|
410
|
+
to `set()`, as that package's own log-in handler does.
|
|
382
411
|
- **Re-signing decoded claims (refresh flows): strip `exp`/`iat` first.** `sign()`
|
|
383
412
|
always sets `expiresIn` (default {@link JWT_EXPIRES_TIME}), and the underlying library
|
|
384
413
|
throws (`Bad "options.expiresIn" option the payload already has an "exp" property`)
|
package/dist/index.d.ts
CHANGED
|
@@ -21,6 +21,14 @@
|
|
|
21
21
|
* and populates `res.locals.session`, so a handler calls `getUserId(res)` — do NOT call
|
|
22
22
|
* `verify()`/`sign()` by hand for the session (see the `auth` skill). Use these directly
|
|
23
23
|
* only for a CUSTOM token, e.g. a signed email/reset link.
|
|
24
|
+
* - **{@link sign} is the low-level signer; a token it mints is NOT a session.**
|
|
25
|
+
* `verifyMiddleware` (`@molecule/api-resource-user`) accepts a JWT only when its payload
|
|
26
|
+
* also carries a `deviceId` naming an ACTIVE row in the app's `devices` table, so a
|
|
27
|
+
* payload without one is treated as no session: `sign({ userId })` answers 401 on every
|
|
28
|
+
* route although the token itself verifies. Mint a session with `authorization.set()`
|
|
29
|
+
* from `@molecule/api-resource-user`, which signs and writes the session cookies — call
|
|
30
|
+
* `get('device').createOrUpdate(userId, deviceName)` first and pass `{ userId, deviceId }`
|
|
31
|
+
* to `set()`, as that package's own log-in handler does.
|
|
24
32
|
* - **Re-signing decoded claims (refresh flows): strip `exp`/`iat` first.** `sign()`
|
|
25
33
|
* always sets `expiresIn` (default {@link JWT_EXPIRES_TIME}), and the underlying library
|
|
26
34
|
* throws (`Bad "options.expiresIn" option the payload already has an "exp" property`)
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AAEH,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -21,6 +21,14 @@
|
|
|
21
21
|
* and populates `res.locals.session`, so a handler calls `getUserId(res)` — do NOT call
|
|
22
22
|
* `verify()`/`sign()` by hand for the session (see the `auth` skill). Use these directly
|
|
23
23
|
* only for a CUSTOM token, e.g. a signed email/reset link.
|
|
24
|
+
* - **{@link sign} is the low-level signer; a token it mints is NOT a session.**
|
|
25
|
+
* `verifyMiddleware` (`@molecule/api-resource-user`) accepts a JWT only when its payload
|
|
26
|
+
* also carries a `deviceId` naming an ACTIVE row in the app's `devices` table, so a
|
|
27
|
+
* payload without one is treated as no session: `sign({ userId })` answers 401 on every
|
|
28
|
+
* route although the token itself verifies. Mint a session with `authorization.set()`
|
|
29
|
+
* from `@molecule/api-resource-user`, which signs and writes the session cookies — call
|
|
30
|
+
* `get('device').createOrUpdate(userId, deviceName)` first and pass `{ userId, deviceId }`
|
|
31
|
+
* to `set()`, as that package's own log-in handler does.
|
|
24
32
|
* - **Re-signing decoded claims (refresh flows): strip `exp`/`iat` first.** `sign()`
|
|
25
33
|
* always sets `expiresIn` (default {@link JWT_EXPIRES_TIME}), and the underlying library
|
|
26
34
|
* throws (`Bad "options.expiresIn" option the payload already has an "exp" property`)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AAEH,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA"}
|
package/dist/provider.d.ts
CHANGED
|
@@ -50,6 +50,27 @@ export declare const hasProvider: () => boolean;
|
|
|
50
50
|
* Signs a payload into a JWT string using the bonded provider. Uses the
|
|
51
51
|
* configured algorithm, expiry, and private key as defaults.
|
|
52
52
|
*
|
|
53
|
+
* This is the LOW-LEVEL signer: it signs whatever payload it is given, and a
|
|
54
|
+
* token it mints is not by itself a session. For a session, use
|
|
55
|
+
* `authorization.set()` from `@molecule/api-resource-user` — the app's global
|
|
56
|
+
* `verifyMiddleware` accepts a JWT only when its payload also carries a
|
|
57
|
+
* `deviceId` naming an active row in `devices` (see the module `@remarks`).
|
|
58
|
+
*
|
|
59
|
+
* **There is ONE JWT provider per app, and this signs with it.** The scaffold
|
|
60
|
+
* bonds `@molecule/api-jwt-jsonwebtoken` once (the app's `api/src/bonds/`), keyed
|
|
61
|
+
* by `JWT_PRIVATE_KEY`/`JWT_PUBLIC_KEY` (auto-generated on first boot when unset)
|
|
62
|
+
* with algorithm `JWT_ALGORITHM` (default `RS256`). There is no `JWT_SECRET` and
|
|
63
|
+
* no second verifier to match: `setProvider()` in your own file REPLACES the
|
|
64
|
+
* provider for the whole process, so every token this app and its packages mint
|
|
65
|
+
* and verify changes with it.
|
|
66
|
+
*
|
|
67
|
+
* To return a session token in a response BODY — an API whose clients send
|
|
68
|
+
* `Authorization: Token <jwt>` — do not sign a second token with another key or
|
|
69
|
+
* algorithm. `authorization.set(req, res, { userId, deviceId })` from
|
|
70
|
+
* `@molecule/api-resource-user` RETURNS the signed token; mount
|
|
71
|
+
* `verifyMiddleware({ allowCookieSession: false })` in front of the routes that
|
|
72
|
+
* sign users in so no session cookie is written alongside it.
|
|
73
|
+
*
|
|
53
74
|
* @param object - The JSON payload to sign.
|
|
54
75
|
* @param options - Signing options; `algorithm` defaults to `JWT_ALGORITHM`, `expiresIn` defaults to `JWT_EXPIRES_TIME`.
|
|
55
76
|
* @param options.algorithm - The signing algorithm (e.g. `RS256`, `HS256`).
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,cAAc,EACd,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAkDnB;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,cAAwB,CAAA;AAElD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAA2D,CAAA;AAExF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,QAAkD,CAAA;AAE/E;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,UAAU,WAAW,KAAG,IAEnD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,QAAO,WAE9B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,QAAO,OAE9B,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,cAAc,EACd,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAkDnB;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,cAAwB,CAAA;AAElD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAA2D,CAAA;AAExF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,QAAkD,CAAA;AAE/E;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,UAAU,WAAW,KAAG,IAEnD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,QAAO,WAE9B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,QAAO,OAE9B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,IAAI,GACf,QAAQ,UAAU,EAClB,oCAAsE,cAAmB,EACzF,aAAY,MAAM,GAAG,MAAwB,KAC5C,MAAmF,CAAA;AAEtF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,MAAM,GACjB,OAAO,MAAM,EACb,0BAA2C,gBAAqB,EAChE,YAAW,MAAM,GAAG,MAAuB,KAC1C,MAAM,GAAG,UAA6E,CAAA;AAEzF;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,GAAI,OAAO,MAAM,EAAE,UAAU,gBAAgB,KAAG,MAAM,GAAG,UAAU,GAAG,IACnD,CAAA"}
|
package/dist/provider.js
CHANGED
|
@@ -99,6 +99,27 @@ export const hasProvider = () => {
|
|
|
99
99
|
* Signs a payload into a JWT string using the bonded provider. Uses the
|
|
100
100
|
* configured algorithm, expiry, and private key as defaults.
|
|
101
101
|
*
|
|
102
|
+
* This is the LOW-LEVEL signer: it signs whatever payload it is given, and a
|
|
103
|
+
* token it mints is not by itself a session. For a session, use
|
|
104
|
+
* `authorization.set()` from `@molecule/api-resource-user` — the app's global
|
|
105
|
+
* `verifyMiddleware` accepts a JWT only when its payload also carries a
|
|
106
|
+
* `deviceId` naming an active row in `devices` (see the module `@remarks`).
|
|
107
|
+
*
|
|
108
|
+
* **There is ONE JWT provider per app, and this signs with it.** The scaffold
|
|
109
|
+
* bonds `@molecule/api-jwt-jsonwebtoken` once (the app's `api/src/bonds/`), keyed
|
|
110
|
+
* by `JWT_PRIVATE_KEY`/`JWT_PUBLIC_KEY` (auto-generated on first boot when unset)
|
|
111
|
+
* with algorithm `JWT_ALGORITHM` (default `RS256`). There is no `JWT_SECRET` and
|
|
112
|
+
* no second verifier to match: `setProvider()` in your own file REPLACES the
|
|
113
|
+
* provider for the whole process, so every token this app and its packages mint
|
|
114
|
+
* and verify changes with it.
|
|
115
|
+
*
|
|
116
|
+
* To return a session token in a response BODY — an API whose clients send
|
|
117
|
+
* `Authorization: Token <jwt>` — do not sign a second token with another key or
|
|
118
|
+
* algorithm. `authorization.set(req, res, { userId, deviceId })` from
|
|
119
|
+
* `@molecule/api-resource-user` RETURNS the signed token; mount
|
|
120
|
+
* `verifyMiddleware({ allowCookieSession: false })` in front of the routes that
|
|
121
|
+
* sign users in so no session cookie is written alongside it.
|
|
122
|
+
*
|
|
102
123
|
* @param object - The JSON payload to sign.
|
|
103
124
|
* @param options - Signing options; `algorithm` defaults to `JWT_ALGORITHM`, `expiresIn` defaults to `JWT_EXPIRES_TIME`.
|
|
104
125
|
* @param options.algorithm - The signing algorithm (e.g. `RS256`, `HS256`).
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAElG,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAW3D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;AAE1B,MAAM,SAAS,GAAG,KAAK,CAAA;AACvB,UAAU,CAAC,SAAS,CAAC,CAAA;AAErB,8DAA8D;AAC9D,MAAM,oBAAoB,GAA4B;IACpD,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;CACR,CAAA;AAED;;;;;;;;;;;GAWG;AACH,MAAM,mBAAmB,GAAG,GAAiB,EAAE;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAA;IACrC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,IAAK,oBAA0C,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9D,OAAO,GAAmB,CAAA;IAC5B,CAAC;IACD,MAAM,CAAC,IAAI,CACT,4BAA4B,GAAG,6CAA6C;QAC1E,4CAA4C,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACjF,CAAA;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAA;AAElD;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA,CAAC,SAAS;AAElG;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAA,CAAC,SAAS;AAEzF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAqB,EAAQ,EAAE;IACzD,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;AAC3B,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAgB,EAAE;IAC3C,OAAO,WAAW,CAAc,SAAS,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAY,EAAE;IACvC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAA;AAC5B,CAAC,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|