katanakit-js 3.0.0 → 3.0.1

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 CHANGED
@@ -9,7 +9,7 @@ npm install katanakit-js
9
9
  # or
10
10
  bun add katanakit-js
11
11
  # or
12
- yarn add katanakit-js
12
+ pnpm add katanakit-js
13
13
  ```
14
14
 
15
15
  ### CDN (ESM)
@@ -366,10 +366,10 @@ DATABASE_URL=
366
366
 
367
367
  | Script | Starts |
368
368
  |--------|--------|
369
- | `yarn assistant:dev` | REST assistant. Uses Prisma when `DATABASE_URL` is set. |
370
- | `yarn telegram:dev` | Telegram long polling. Requires `TELEGRAM_BOT_TOKEN`. |
371
- | `yarn whatsapp:dev` | WhatsApp webhook. Requires `WHATSAPP_*`. |
372
- | `yarn assistant:demo` | Demo in `examples/assistant/`. Set `KITT_CHANNEL=rest\|telegram\|whatsapp`. |
369
+ | `pnpm assistant:dev` | REST assistant. Uses Prisma when `DATABASE_URL` is set. |
370
+ | `pnpm telegram:dev` | Telegram long polling. Requires `TELEGRAM_BOT_TOKEN`. |
371
+ | `pnpm whatsapp:dev` | WhatsApp webhook. Requires `WHATSAPP_*`. |
372
+ | `pnpm assistant:demo` | Demo in `examples/assistant/`. Set `KITT_CHANNEL=rest\|telegram\|whatsapp`. |
373
373
 
374
374
  ### REST
375
375
 
@@ -429,7 +429,7 @@ await useStartTelegramPolling();
429
429
  2. Send `/newbot` — choose a name and a username.
430
430
  3. Copy the token.
431
431
  4. Set `TELEGRAM_BOT_TOKEN`.
432
- 5. Run `yarn telegram:dev` (long polling, no public URL).
432
+ 5. Run `pnpm telegram:dev` (long polling, no public URL).
433
433
  6. Optional webhook: expose HTTPS and call `useHandleTelegramUpdate(update)` on inbound updates.
434
434
 
435
435
  ### WhatsApp (Meta Cloud API)
@@ -452,7 +452,7 @@ useStartWhatsApp();
452
452
  2. Add the WhatsApp product.
453
453
  3. Copy the temporary or permanent token, the Phone number ID, and the **App Secret**.
454
454
  4. Set `WHATSAPP_TOKEN`, `WHATSAPP_PHONE_NUMBER_ID`, `WHATSAPP_VERIFY_TOKEN`, and `WHATSAPP_APP_SECRET`.
455
- 5. Run `yarn whatsapp:dev`.
455
+ 5. Run `pnpm whatsapp:dev`.
456
456
  6. Expose public HTTPS (Cloudflare Tunnel or ngrok) to `GET`/`POST` `/whatsapp/webhook`.
457
457
  7. In Meta, set the webhook URL and verify token; subscribe to `messages`.
458
458
 
@@ -487,7 +487,7 @@ owns the database, run `prisma contract emit` then `prisma db init` in that app.
487
487
  `readFile` on `knowledge-base.md` and `saveNote` to `notes.jsonl`.
488
488
 
489
489
  ```bash
490
- yarn assistant:demo
490
+ pnpm assistant:demo
491
491
  # KITT_CHANNEL=rest|telegram|whatsapp
492
492
  ```
493
493
 
@@ -1 +1 @@
1
- {"version":3,"file":"access.guard.d.ts","sourceRoot":"","sources":["../../../src/adapters/express/access.guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,OAAO,EAAE,cAAc,EAAY,MAAM,SAAS,CAAC;AAG/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE5E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CACnC,UAAU,EAAE,gBAAgB,EAC5B,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,aAAa,GAAG,IAAI,GACxD,cAAc,CAwBhB"}
1
+ {"version":3,"file":"access.guard.d.ts","sourceRoot":"","sources":["../../../src/adapters/express/access.guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,OAAO,EAAE,cAAc,EAAY,MAAM,SAAS,CAAC;AAG/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE5E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CACnC,UAAU,EAAE,gBAAgB,EAC5B,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,aAAa,GAAG,IAAI,GACxD,cAAc,CAgChB"}
@@ -26,7 +26,15 @@ export function useRequireCapability(capability, resolveSubject) {
26
26
  });
27
27
  return;
28
28
  }
29
- if (!useCan(subject, capability)) {
29
+ let allowed;
30
+ try {
31
+ allowed = useCan(subject, capability);
32
+ }
33
+ catch {
34
+ // Malformed subject or unknown role: fail closed at the HTTP boundary.
35
+ allowed = false;
36
+ }
37
+ if (!allowed) {
30
38
  response.status(403).json({
31
39
  ok: false,
32
40
  data: null,
@@ -1 +1 @@
1
- {"version":3,"file":"access.guard.js","sourceRoot":"","sources":["../../../src/adapters/express/access.guard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAG/D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,oBAAoB,CACnC,UAA4B,EAC5B,cAA0D;IAE1D,OAAO,CAAC,OAAgB,EAAE,QAAkB,EAAE,IAAkB,EAAQ,EAAE;QACzE,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACzB,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,GAAG,EAAE;aAC1D,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC;YAClC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACzB,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,EAAE,OAAO,EAAE,uBAAuB,UAAU,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;aACpE,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QAED,IAAI,EAAE,CAAC;IACR,CAAC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"access.guard.js","sourceRoot":"","sources":["../../../src/adapters/express/access.guard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAG/D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,oBAAoB,CACnC,UAA4B,EAC5B,cAA0D;IAE1D,OAAO,CAAC,OAAgB,EAAE,QAAkB,EAAE,IAAkB,EAAQ,EAAE;QACzE,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACzB,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,GAAG,EAAE;aAC1D,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QAED,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACJ,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACR,uEAAuE;YACvE,OAAO,GAAG,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACzB,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,EAAE,OAAO,EAAE,uBAAuB,UAAU,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;aACpE,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QAED,IAAI,EAAE,CAAC;IACR,CAAC,CAAC;AACH,CAAC"}
@@ -1,3 +1,4 @@
1
- declare const router: import("express-serve-static-core").Router;
1
+ import { Router } from "express";
2
+ declare const router: Router;
2
3
  export default router;
3
4
  //# sourceMappingURL=router.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/adapters/express/router.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAexB,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/adapters/express/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,MAAM,EAAE,MAAM,SAAS,CAAC;AAE9D,QAAA,MAAM,MAAM,EAAE,MAAiB,CAAC;AAehC,eAAe,MAAM,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/adapters/express/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,MAAM,EAAE,MAAM,SAAS,CAAC;AAE9D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;AAExB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,QAAiB,EAAE,QAAkB,EAAE,EAAE;IACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,OAAgB,EAAE,QAAkB,EAAE,EAAE;IAC3D,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAiB,EAAE,QAAkB,EAAE,EAAE;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/adapters/express/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,MAAM,EAAE,MAAM,SAAS,CAAC;AAE9D,MAAM,MAAM,GAAW,MAAM,EAAE,CAAC;AAEhC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,QAAiB,EAAE,QAAkB,EAAE,EAAE;IACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,OAAgB,EAAE,QAAkB,EAAE,EAAE;IAC3D,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAiB,EAAE,QAAkB,EAAE,EAAE;IAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -11,12 +11,13 @@ import type { AccessCapability, AccessRole, AccessRoleDefinition, AccessSubject
11
11
  export declare function useCapabilitiesFor(role: AccessRole): AccessCapability[];
12
12
  /**
13
13
  * Registers (or replaces) a role definition. Use it to extend a built-in
14
- * role's capabilities, e.g. grant `content:create` to `member`.
14
+ * role's capabilities, e.g. grant `content:create` to `member`. The definition
15
+ * is copied, so mutating the caller's object afterwards has no effect.
15
16
  */
16
17
  export declare function useRegisterRole(definition: AccessRoleDefinition): void;
17
18
  /** Restores the built-in role registry (mainly for tests). */
18
19
  export declare function useResetRoles(): void;
19
- /** Lists every registered role definition. */
20
+ /** Lists every registered role definition. Returns copies, not live state. */
20
21
  export declare function useRoles(): AccessRoleDefinition[];
21
22
  /** Exact role membership — no hierarchy involved. */
22
23
  export declare function useHasRole(subject: AccessSubject, role: AccessRole): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"access.service.d.ts","sourceRoot":"","sources":["../../../src/core/services/access.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,gBAAgB,EAChB,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,MAAM,sBAAsB,CAAC;AAuD9B;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,gBAAgB,EAAE,CAYvE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAEtE;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,8CAA8C;AAC9C,wBAAgB,QAAQ,IAAI,oBAAoB,EAAE,CAEjD;AAED,qDAAqD;AACrD,wBAAgB,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAE5E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAEpF"}
1
+ {"version":3,"file":"access.service.d.ts","sourceRoot":"","sources":["../../../src/core/services/access.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,gBAAgB,EAChB,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,MAAM,sBAAsB,CAAC;AA8D9B;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,gBAAgB,EAAE,CAYvE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAEtE;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,8EAA8E;AAC9E,wBAAgB,QAAQ,IAAI,oBAAoB,EAAE,CAEjD;AAED,qDAAqD;AACrD,wBAAgB,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAE5E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAEpF"}
@@ -35,7 +35,11 @@ const DEFAULT_ROLES = [
35
35
  },
36
36
  { slug: "member", label: "Member", capabilities: ["conversations:use"] },
37
37
  { slug: "guest", label: "Guest", capabilities: [] },
38
- ];
38
+ ].map((role) => Object.freeze(useCopy(role)));
39
+ /** Copies a definition so callers never hold (or mutate) live registry state. */
40
+ function useCopy(definition) {
41
+ return { ...definition, capabilities: [...definition.capabilities] };
42
+ }
39
43
  /** Active registry, keyed by role slug. Starts as the default set. */
40
44
  const registry = new Map(DEFAULT_ROLES.map((role) => [role.slug, role]));
41
45
  function useDefinitionFor(role) {
@@ -68,10 +72,11 @@ export function useCapabilitiesFor(role) {
68
72
  }
69
73
  /**
70
74
  * Registers (or replaces) a role definition. Use it to extend a built-in
71
- * role's capabilities, e.g. grant `content:create` to `member`.
75
+ * role's capabilities, e.g. grant `content:create` to `member`. The definition
76
+ * is copied, so mutating the caller's object afterwards has no effect.
72
77
  */
73
78
  export function useRegisterRole(definition) {
74
- registry.set(definition.slug, definition);
79
+ registry.set(definition.slug, Object.freeze(useCopy(definition)));
75
80
  }
76
81
  /** Restores the built-in role registry (mainly for tests). */
77
82
  export function useResetRoles() {
@@ -80,9 +85,9 @@ export function useResetRoles() {
80
85
  registry.set(role.slug, role);
81
86
  }
82
87
  }
83
- /** Lists every registered role definition. */
88
+ /** Lists every registered role definition. Returns copies, not live state. */
84
89
  export function useRoles() {
85
- return [...registry.values()].sort((a, b) => ROLE_RANK[a.slug] - ROLE_RANK[b.slug]);
90
+ return [...registry.values()].sort((a, b) => ROLE_RANK[a.slug] - ROLE_RANK[b.slug]).map(useCopy);
86
91
  }
87
92
  /** Exact role membership — no hierarchy involved. */
88
93
  export function useHasRole(subject, role) {
@@ -1 +1 @@
1
- {"version":3,"file":"access.service.js","sourceRoot":"","sources":["../../../src/core/services/access.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"access.service.js","sourceRoot":"","sources":["../../../src/core/services/access.service.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,MAAM,SAAS,GAA+B;IAC7C,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;CACR,CAAC;AAEF;;;GAGG;AACH,MAAM,aAAa,GAClB;IACC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,EAAE;IACjF,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,gBAAgB,CAAC,EAAE;IACnE;QACC,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,YAAY,EAAE;YACb,iBAAiB;YACjB,kBAAkB;YAClB,oBAAoB;YACpB,wBAAwB;SACxB;KACD;IACD;QACC,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,YAAY,EAAE,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,oBAAoB,CAAC;KAC1E;IACD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,mBAAmB,CAAC,EAAE;IACxE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE;CAEpD,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE9C,iFAAiF;AACjF,SAAS,OAAO,CAAC,UAAgC;IAChD,OAAO,EAAE,GAAG,UAAU,EAAE,YAAY,EAAE,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,sEAAsE;AACtE,MAAM,QAAQ,GAAG,IAAI,GAAG,CACvB,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAC9C,CAAC;AAEF,SAAS,gBAAgB,CAAC,IAAgB;IACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAgB;IAClD,MAAM,IAAI,GAAG,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEjD,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5C,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YACxC,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;gBAClD,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC9B,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,UAAgC;IAC/D,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QAClC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;AACF,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,QAAQ;IACvB,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAClG,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,UAAU,CAAC,OAAsB,EAAE,IAAgB;IAClE,OAAO,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,MAAM,CAAC,OAAsB,EAAE,UAA4B;IAC1E,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AACpF,CAAC"}
@@ -64,5 +64,4 @@ import type { Contract } from "./schema.d.js";
64
64
  * ```
65
65
  */
66
66
  export declare function usePrismaClient(datasourceUrl?: string): ReturnType<typeof postgres<Contract>>;
67
- export declare const prisma: import("@prisma/orm-postgres/runtime").PostgresClient<Contract>;
68
67
  //# sourceMappingURL=use-prisma.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-prisma.d.ts","sourceRoot":"","sources":["../../src/prisma/use-prisma.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,QAAQ,MAAM,8BAA8B,CAAC;AAEpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAM9C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAe7F;AAED,eAAO,MAAM,MAAM,iEAAoB,CAAC"}
1
+ {"version":3,"file":"use-prisma.d.ts","sourceRoot":"","sources":["../../src/prisma/use-prisma.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,QAAQ,MAAM,8BAA8B,CAAC;AAEpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAM9C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAe7F"}
@@ -78,5 +78,4 @@ export function usePrismaClient(datasourceUrl) {
78
78
  }
79
79
  return client;
80
80
  }
81
- export const prisma = usePrismaClient();
82
81
  //# sourceMappingURL=use-prisma.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-prisma.js","sourceRoot":"","sources":["../../src/prisma/use-prisma.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,QAAQ,MAAM,8BAA8B,CAAC;AAGpD,OAAO,YAAY,MAAM,eAAe,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE/D,uCAAuC;AACvC,IAAI,MAAM,GAAiD,IAAI,CAAC;AAEhE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,eAAe,CAAC,aAAsB;IACrD,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QACtD,IAAI,CAAC,GAAG,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACd,wFAAwF,CACxF,CAAC;QACH,CAAC;QACD,MAAM,GAAG,QAAQ,CAAW;YAC3B,YAAY;YACZ,GAAG;SACH,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"use-prisma.js","sourceRoot":"","sources":["../../src/prisma/use-prisma.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,QAAQ,MAAM,8BAA8B,CAAC;AAGpD,OAAO,YAAY,MAAM,eAAe,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE/D,uCAAuC;AACvC,IAAI,MAAM,GAAiD,IAAI,CAAC;AAEhE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,eAAe,CAAC,aAAsB;IACrD,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QACtD,IAAI,CAAC,GAAG,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACd,wFAAwF,CACxF,CAAC;QACH,CAAC;QACD,MAAM,GAAG,QAAQ,CAAW;YAC3B,YAAY;YACZ,GAAG;SACH,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,11 +1,8 @@
1
1
  {
2
2
  "name": "katanakit-js",
3
- "version": "3.0.0",
3
+ "version": "3.0.1",
4
4
  "description": "KatanaKit — a sharp, framework-agnostic TypeScript service toolkit organized with hexagonal architecture.",
5
5
  "type": "module",
6
- "workspaces": [
7
- "docs"
8
- ],
9
6
  "main": "./dist/index.js",
10
7
  "module": "./dist/index.js",
11
8
  "types": "./dist/index.d.ts",
@@ -77,20 +74,21 @@
77
74
  "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
78
75
  "check": "eslint ./src && tsc6 --noEmit && vitest run",
79
76
  "fix": "eslint --fix ./src && tsc6 --noEmit && vitest run",
80
- "build": "yarn clean && yarn run check && tsc6 -p tsconfig.json",
81
- "bump:patch": "yarn version patch --all && git commit -am \"chore: release v$(node -p \"require('./package.json').version\")\" && git tag \"v$(node -p \"require('./package.json').version\")\"",
82
- "bump:minor": "yarn version minor --all && git commit -am \"chore: release v$(node -p \"require('./package.json').version\")\" && git tag \"v$(node -p \"require('./package.json').version\")\"",
83
- "bump:major": "yarn version major --all && git commit -am \"chore: release v$(node -p \"require('./package.json').version\")\" && git tag \"v$(node -p \"require('./package.json').version\")\"",
84
- "release": "yarn build && yarn bump:patch && npm publish --access public && git push && git push --tags && node scripts/generate-release-notes.mjs \"v$(node -p \"require('./package.json').version\")\" | gh release create \"v$(node -p \"require('./package.json').version\")\" --notes-file -",
85
- "release:minor": "yarn build && yarn bump:minor && npm publish --access public && git push && git push --tags && node scripts/generate-release-notes.mjs \"v$(node -p \"require('./package.json').version\")\" | gh release create \"v$(node -p \"require('./package.json').version\")\" --notes-file -",
86
- "release:major": "yarn build && yarn bump:major && npm publish --access public && git push && git push --tags && node scripts/generate-release-notes.mjs \"v$(node -p \"require('./package.json').version\")\" | gh release create \"v$(node -p \"require('./package.json').version\")\" --notes-file -",
77
+ "build": "pnpm clean && pnpm run check && tsc6 -p tsconfig.json",
78
+ "version:bump": "node scripts/bump-version.mjs",
79
+ "bump:patch": "node scripts/bump-version.mjs patch",
80
+ "bump:minor": "node scripts/bump-version.mjs minor",
81
+ "bump:major": "node scripts/bump-version.mjs major",
82
+ "release": "pnpm build && pnpm bump:patch && npm publish --access public && git push && git push --tags && node scripts/generate-release-notes.mjs \"v$(node -p \"require('./package.json').version\")\" | gh release create \"v$(node -p \"require('./package.json').version\")\" --notes-file -",
83
+ "release:minor": "pnpm build && pnpm bump:minor && npm publish --access public && git push && git push --tags && node scripts/generate-release-notes.mjs \"v$(node -p \"require('./package.json').version\")\" | gh release create \"v$(node -p \"require('./package.json').version\")\" --notes-file -",
84
+ "release:major": "pnpm build && pnpm bump:major && npm publish --access public && git push && git push --tags && node scripts/generate-release-notes.mjs \"v$(node -p \"require('./package.json').version\")\" | gh release create \"v$(node -p \"require('./package.json').version\")\" --notes-file -",
87
85
  "notes": "node scripts/generate-release-notes.mjs",
88
- "version:sync": "node -e \"const v=require('child_process').execSync('git tag --sort=-v:refname').toString().split('\\n')[0].replace('v',''); ['package.json','docs/package.json'].forEach(f=>{const p=require('./'+f); p.version=v; require('fs').writeFileSync(f,JSON.stringify(p,null,2)+'\\n')}); console.log('Synced to v'+v)\"",
89
- "docs:dev": "yarn workspace katanakit-docs run dev",
86
+ "version:sync": "node scripts/bump-version.mjs --sync",
87
+ "docs:dev": "pnpm --filter katanakit-docs dev",
90
88
  "docs:sync": "node scripts/sync-docs-releases.mjs --limit=8",
91
89
  "docs:check": "node scripts/sync-docs-releases.mjs --limit=8 --check",
92
- "docs:build": "yarn docs:sync && yarn workspace katanakit-docs run build",
93
- "docs:serve": "yarn workspace katanakit-docs run serve",
90
+ "docs:build": "pnpm docs:sync && pnpm --filter katanakit-docs build",
91
+ "docs:serve": "pnpm --filter katanakit-docs serve",
94
92
  "prepare": "husky"
95
93
  },
96
94
  "repository": {
@@ -121,7 +119,8 @@
121
119
  "jsdelivr": "./dist/index.js",
122
120
  "dependencies": {
123
121
  "@js-temporal/polyfill": "0.5.1",
124
- "@prisma/orm-postgres": "8.0.0-rc.8"
122
+ "@prisma/orm-postgres": "8.0.0-rc.8",
123
+ "express-rate-limit": "8.7.0"
125
124
  },
126
125
  "peerDependencies": {
127
126
  "cors": ">=2.8.0",
@@ -147,7 +146,6 @@
147
146
  "@eslint/js": "^10.0.1",
148
147
  "@types/cors": "2.8.19",
149
148
  "@types/express": "5.0.6",
150
- "@types/express-rate-limit": "6.0.2",
151
149
  "@types/node": "26.5.0",
152
150
  "cors": "2.8.6",
153
151
  "dotenv": "17.4.2",
@@ -168,14 +166,10 @@
168
166
  "vitest": "5.0.0",
169
167
  "vue": "3.5.42"
170
168
  },
171
- "resolutions": {
172
- "pathe": "2.0.3",
173
- "jsbi": "4.3.2"
174
- },
175
169
  "lint-staged": {
176
170
  "src/**/*.{ts,mts,cts}": [
177
171
  "eslint --fix"
178
172
  ]
179
173
  },
180
- "packageManager": "yarn@4.18.0"
174
+ "packageManager": "pnpm@12.4.1"
181
175
  }