@molecule/api-jwt 1.0.5 → 1.0.7
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 +31 -8
- package/dist/index.d.ts +8 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/dist/provider.d.ts +19 -0
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +19 -0
- package/dist/provider.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,21 +3,21 @@ 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-16T23:41:58.848Z
|
|
7
7
|
-->
|
|
8
8
|
|
|
9
9
|
# @molecule/api-jwt
|
|
10
10
|
|
|
11
|
-
> **Auto-generated, AI-first package reference** for the [molecule.dev](https://molecule.dev) ecosystem.
|
|
12
|
-
> It is written to be read by coding agents as much as by people, and is generated from this
|
|
13
|
-
> package's source — edit `src/index.ts` JSDoc, not this file.
|
|
14
|
-
|
|
15
11
|
JWT interface for molecule.dev.
|
|
16
12
|
|
|
17
13
|
Provides an abstract JWT interface that can be backed by any JWT library.
|
|
18
14
|
Use `setProvider` to provide a concrete implementation
|
|
19
15
|
such as `@molecule/api-jwt-jsonwebtoken`.
|
|
20
16
|
|
|
17
|
+
> **Auto-generated, AI-first package reference** for the [molecule.dev](https://molecule.dev) ecosystem.
|
|
18
|
+
> It is written to be read by coding agents as much as by people, and is generated from this
|
|
19
|
+
> package's source — edit `src/index.ts` JSDoc, not this file.
|
|
20
|
+
|
|
21
21
|
## Quick Start
|
|
22
22
|
|
|
23
23
|
```ts
|
|
@@ -242,6 +242,24 @@ token it mints is not by itself a session. For a session, use
|
|
|
242
242
|
`authorization.set()` from `@molecule/api-resource-user` — the app's global
|
|
243
243
|
`verifyMiddleware` accepts a JWT only when its payload also carries a
|
|
244
244
|
`deviceId` naming an active row in `devices` (see the module `@remarks`).
|
|
245
|
+
The sequence is device → session, and the device call RESOLVES TO THE ID:
|
|
246
|
+
`const deviceId = await get<DeviceService>('device')?.createOrUpdate(userId, deviceName)`
|
|
247
|
+
(`DeviceService` is exported by `@molecule/api-resource-device`), then
|
|
248
|
+
`authorization.set(req, res, { userId, deviceId })`.
|
|
249
|
+
|
|
250
|
+
**There is ONE JWT provider per app, and this signs with it.** The scaffold
|
|
251
|
+
bonds `@molecule/api-jwt-jsonwebtoken` once (the app's `api/src/bonds/`), keyed
|
|
252
|
+
by `JWT_PRIVATE_KEY`/`JWT_PUBLIC_KEY` (auto-generated on first boot when unset)
|
|
253
|
+
with algorithm `JWT_ALGORITHM` (default `RS256`). There is no `JWT_SECRET` and
|
|
254
|
+
no second verifier to match: `setProvider()` in your own file REPLACES the
|
|
255
|
+
provider for the whole process, so every token this app and its packages mint
|
|
256
|
+
and verify changes with it.
|
|
257
|
+
|
|
258
|
+
To return a session token in a response BODY — an API whose clients send
|
|
259
|
+
`Authorization: Token <jwt>` — do not sign a second token with another key or
|
|
260
|
+
algorithm. `authorization.set(req, res, { userId, deviceId })` from
|
|
261
|
+
|
|
262
|
+
_(description truncated — read the full text in `node_modules/@molecule/api-jwt/dist/provider.d.ts`.)_
|
|
245
263
|
|
|
246
264
|
```typescript
|
|
247
265
|
function sign(
|
|
@@ -390,9 +408,14 @@ anything security-relevant; `decode()` is only for reading a token you do NOT tr
|
|
|
390
408
|
also carries a `deviceId` naming an ACTIVE row in the app's `devices` table, so a
|
|
391
409
|
payload without one is treated as no session: `sign({ userId })` answers 401 on every
|
|
392
410
|
route although the token itself verifies. Mint a session with `authorization.set()`
|
|
393
|
-
from `@molecule/api-resource-user`, which signs and writes the session cookies —
|
|
394
|
-
|
|
395
|
-
|
|
411
|
+
from `@molecule/api-resource-user`, which signs and writes the session cookies — the
|
|
412
|
+
sequence is device → session, and the device call RESOLVES TO THE ID:
|
|
413
|
+
`const deviceId = await get<DeviceService>('device')?.createOrUpdate(userId, deviceName)`
|
|
414
|
+
(the `DeviceService` type comes from `@molecule/api-resource-device`; do not hand-type a
|
|
415
|
+
`get<{ createOrUpdate(): … }>('device')` generic — a wrong one compiles and yields
|
|
416
|
+
`undefined`), then `authorization.set(req, res, { userId, deviceId })`, as that package's
|
|
417
|
+
own log-in handler does. `authorization.set()` throws when the device id is missing
|
|
418
|
+
rather than mint a token every route answers 401.
|
|
396
419
|
- **Re-signing decoded claims (refresh flows): strip `exp`/`iat` first.** `sign()`
|
|
397
420
|
always sets `expiresIn` (default {@link JWT_EXPIRES_TIME}), and the underlying library
|
|
398
421
|
throws (`Bad "options.expiresIn" option the payload already has an "exp" property`)
|
package/dist/index.d.ts
CHANGED
|
@@ -26,9 +26,14 @@
|
|
|
26
26
|
* also carries a `deviceId` naming an ACTIVE row in the app's `devices` table, so a
|
|
27
27
|
* payload without one is treated as no session: `sign({ userId })` answers 401 on every
|
|
28
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 —
|
|
30
|
-
*
|
|
31
|
-
*
|
|
29
|
+
* from `@molecule/api-resource-user`, which signs and writes the session cookies — the
|
|
30
|
+
* sequence is device → session, and the device call RESOLVES TO THE ID:
|
|
31
|
+
* `const deviceId = await get<DeviceService>('device')?.createOrUpdate(userId, deviceName)`
|
|
32
|
+
* (the `DeviceService` type comes from `@molecule/api-resource-device`; do not hand-type a
|
|
33
|
+
* `get<{ createOrUpdate(): … }>('device')` generic — a wrong one compiles and yields
|
|
34
|
+
* `undefined`), then `authorization.set(req, res, { userId, deviceId })`, as that package's
|
|
35
|
+
* own log-in handler does. `authorization.set()` throws when the device id is missing
|
|
36
|
+
* rather than mint a token every route answers 401.
|
|
32
37
|
* - **Re-signing decoded claims (refresh flows): strip `exp`/`iat` first.** `sign()`
|
|
33
38
|
* always sets `expiresIn` (default {@link JWT_EXPIRES_TIME}), and the underlying library
|
|
34
39
|
* 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AAEH,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -26,9 +26,14 @@
|
|
|
26
26
|
* also carries a `deviceId` naming an ACTIVE row in the app's `devices` table, so a
|
|
27
27
|
* payload without one is treated as no session: `sign({ userId })` answers 401 on every
|
|
28
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 —
|
|
30
|
-
*
|
|
31
|
-
*
|
|
29
|
+
* from `@molecule/api-resource-user`, which signs and writes the session cookies — the
|
|
30
|
+
* sequence is device → session, and the device call RESOLVES TO THE ID:
|
|
31
|
+
* `const deviceId = await get<DeviceService>('device')?.createOrUpdate(userId, deviceName)`
|
|
32
|
+
* (the `DeviceService` type comes from `@molecule/api-resource-device`; do not hand-type a
|
|
33
|
+
* `get<{ createOrUpdate(): … }>('device')` generic — a wrong one compiles and yields
|
|
34
|
+
* `undefined`), then `authorization.set(req, res, { userId, deviceId })`, as that package's
|
|
35
|
+
* own log-in handler does. `authorization.set()` throws when the device id is missing
|
|
36
|
+
* rather than mint a token every route answers 401.
|
|
32
37
|
* - **Re-signing decoded claims (refresh flows): strip `exp`/`iat` first.** `sign()`
|
|
33
38
|
* always sets `expiresIn` (default {@link JWT_EXPIRES_TIME}), and the underlying library
|
|
34
39
|
* 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AAEH,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA"}
|
package/dist/provider.d.ts
CHANGED
|
@@ -55,6 +55,25 @@ export declare const hasProvider: () => boolean;
|
|
|
55
55
|
* `authorization.set()` from `@molecule/api-resource-user` — the app's global
|
|
56
56
|
* `verifyMiddleware` accepts a JWT only when its payload also carries a
|
|
57
57
|
* `deviceId` naming an active row in `devices` (see the module `@remarks`).
|
|
58
|
+
* The sequence is device → session, and the device call RESOLVES TO THE ID:
|
|
59
|
+
* `const deviceId = await get<DeviceService>('device')?.createOrUpdate(userId, deviceName)`
|
|
60
|
+
* (`DeviceService` is exported by `@molecule/api-resource-device`), then
|
|
61
|
+
* `authorization.set(req, res, { userId, deviceId })`.
|
|
62
|
+
*
|
|
63
|
+
* **There is ONE JWT provider per app, and this signs with it.** The scaffold
|
|
64
|
+
* bonds `@molecule/api-jwt-jsonwebtoken` once (the app's `api/src/bonds/`), keyed
|
|
65
|
+
* by `JWT_PRIVATE_KEY`/`JWT_PUBLIC_KEY` (auto-generated on first boot when unset)
|
|
66
|
+
* with algorithm `JWT_ALGORITHM` (default `RS256`). There is no `JWT_SECRET` and
|
|
67
|
+
* no second verifier to match: `setProvider()` in your own file REPLACES the
|
|
68
|
+
* provider for the whole process, so every token this app and its packages mint
|
|
69
|
+
* and verify changes with it.
|
|
70
|
+
*
|
|
71
|
+
* To return a session token in a response BODY — an API whose clients send
|
|
72
|
+
* `Authorization: Token <jwt>` — do not sign a second token with another key or
|
|
73
|
+
* algorithm. `authorization.set(req, res, { userId, deviceId })` from
|
|
74
|
+
* `@molecule/api-resource-user` RETURNS the signed token; mount
|
|
75
|
+
* `verifyMiddleware({ allowCookieSession: false })` in front of the routes that
|
|
76
|
+
* sign users in so no session cookie is written alongside it.
|
|
58
77
|
*
|
|
59
78
|
* @param object - The JSON payload to sign.
|
|
60
79
|
* @param options - Signing options; `algorithm` defaults to `JWT_ALGORITHM`, `expiresIn` defaults to `JWT_EXPIRES_TIME`.
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;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
|
@@ -104,6 +104,25 @@ export const hasProvider = () => {
|
|
|
104
104
|
* `authorization.set()` from `@molecule/api-resource-user` — the app's global
|
|
105
105
|
* `verifyMiddleware` accepts a JWT only when its payload also carries a
|
|
106
106
|
* `deviceId` naming an active row in `devices` (see the module `@remarks`).
|
|
107
|
+
* The sequence is device → session, and the device call RESOLVES TO THE ID:
|
|
108
|
+
* `const deviceId = await get<DeviceService>('device')?.createOrUpdate(userId, deviceName)`
|
|
109
|
+
* (`DeviceService` is exported by `@molecule/api-resource-device`), then
|
|
110
|
+
* `authorization.set(req, res, { userId, deviceId })`.
|
|
111
|
+
*
|
|
112
|
+
* **There is ONE JWT provider per app, and this signs with it.** The scaffold
|
|
113
|
+
* bonds `@molecule/api-jwt-jsonwebtoken` once (the app's `api/src/bonds/`), keyed
|
|
114
|
+
* by `JWT_PRIVATE_KEY`/`JWT_PUBLIC_KEY` (auto-generated on first boot when unset)
|
|
115
|
+
* with algorithm `JWT_ALGORITHM` (default `RS256`). There is no `JWT_SECRET` and
|
|
116
|
+
* no second verifier to match: `setProvider()` in your own file REPLACES the
|
|
117
|
+
* provider for the whole process, so every token this app and its packages mint
|
|
118
|
+
* and verify changes with it.
|
|
119
|
+
*
|
|
120
|
+
* To return a session token in a response BODY — an API whose clients send
|
|
121
|
+
* `Authorization: Token <jwt>` — do not sign a second token with another key or
|
|
122
|
+
* algorithm. `authorization.set(req, res, { userId, deviceId })` from
|
|
123
|
+
* `@molecule/api-resource-user` RETURNS the signed token; mount
|
|
124
|
+
* `verifyMiddleware({ allowCookieSession: false })` in front of the routes that
|
|
125
|
+
* sign users in so no session cookie is written alongside it.
|
|
107
126
|
*
|
|
108
127
|
* @param object - The JSON payload to sign.
|
|
109
128
|
* @param options - Signing options; `algorithm` defaults to `JWT_ALGORITHM`, `expiresIn` defaults to `JWT_EXPIRES_TIME`.
|
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":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,MAAkB,EAClB,EAAE,SAAS,GAAG,aAAa,EAAE,SAAS,GAAG,gBAAgB,EAAE,GAAG,IAAI,KAAqB,EAAE,EACzF,aAA8B,eAAe,EACrC,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,UAAU,CAAC,CAAA;AAEtF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,KAAa,EACb,EAAE,UAAU,GAAG,CAAC,aAAa,CAAC,EAAE,GAAG,IAAI,KAAuB,EAAE,EAChE,YAA6B,cAAc,EACtB,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,EAAE,SAAS,CAAC,CAAA;AAEzF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,OAA0B,EAA8B,EAAE,CAC9F,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA"}
|