@arcforgelabs/flow 2026.10.53 → 2026.11.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.
Files changed (38) hide show
  1. package/README.md +1 -0
  2. package/SECURITY.md +7 -4
  3. package/npm-shrinkwrap.json +442 -4
  4. package/package.json +8 -3
  5. package/server/agents/auth-worker.js +7 -0
  6. package/server/agents/auth.js +50 -0
  7. package/server/agents/gate.js +138 -0
  8. package/server/agents/grants.js +51 -0
  9. package/server/agents/reads.js +47 -0
  10. package/server/agents/server.js +74 -0
  11. package/server/agents/settings.js +24 -0
  12. package/server/app.js +9 -0
  13. package/server/core/ledger.js +90 -16
  14. package/server/core/line-mapping.js +2 -2
  15. package/server/core/read-before-act.js +2 -2
  16. package/server/core/reconcile.js +15 -1
  17. package/server/core/sending.js +20 -2
  18. package/server/db/migrations/0025_powerful_leopardon.sql +1 -0
  19. package/server/db/migrations/0026_bitter_sersi.sql +38 -0
  20. package/server/db/migrations/meta/0025_snapshot.json +4709 -0
  21. package/server/db/migrations/meta/0026_snapshot.json +4926 -0
  22. package/server/db/migrations/meta/_journal.json +14 -0
  23. package/server/db/schema.js +38 -1
  24. package/server/index.js +9 -1
  25. package/server/integrations/port.js +1 -0
  26. package/server/integrations/seazona/history/backfill.js +3 -1
  27. package/server/integrations/seazona/history/index.js +4 -7
  28. package/server/integrations/seazona/index.js +5 -1
  29. package/server/integrations/seazona/lanes.js +44 -27
  30. package/server/integrations/seazona/ledger.js +17 -6
  31. package/server/integrations/seazona/reconcile.js +12 -0
  32. package/server/rate-limit.js +2 -1
  33. package/server/ui/app.js +74 -62
  34. package/server/ui/flow.css +36 -5
  35. package/server/ui/invoicing.js +34 -7
  36. package/server/ui/mobile.js +17 -0
  37. package/server/ui/routes.js +1 -1
  38. package/server/ui/sync-status.js +67 -0
package/README.md CHANGED
@@ -54,6 +54,7 @@ run a lab.
54
54
  | `docs/AI_BOTS.md` | The AI bots: ClawSweeper reviews and the Docs Agent, their ClawRouter budget and cost, and setup |
55
55
  | `docs/LOW_RISK_MERGE.md` | The low-risk merge lane: which pull requests merge themselves when green, with ClawSweeper's risk labels |
56
56
  | `docs/RELEASING.md` | Versions and channels, the release workflows, how to cut and roll back a release, and the one-time setup |
57
+ | `docs/AGENT_ACCESS.md` | The off-by-default native MCP read tools, grants, host gates and stock OpenClaw setup |
57
58
  | `docs/SELF_HOSTING.md` | Running a Flow release with Docker, Node or Replit, the update notice, and Clerk sign-in |
58
59
  | `docs/REPLIT.md` | A Replit workspace of this repository that follows a release channel (`FLOW_DEPLOY_REF`) |
59
60
  | `docs/INTEGRATIONS.md` | How an integration adapter is built, turned on and off, and owns its tables |
package/SECURITY.md CHANGED
@@ -25,9 +25,12 @@ paste a credential, in full or in part.
25
25
  role gets no access, and an installation is invitation only by default.
26
26
  Owner-only actions need a verified owner sign-in (`docs/SELF_HOSTING.md`,
27
27
  "Sign-in (Clerk)").
28
- - **Machine access.** The Flow API uses signed connector keys, never Clerk
29
- sessions. Keys are read only from request headers and are checked against
30
- the holder's current access on every use.
28
+ - **Machine access.** The native `/mcp` door is off by default. It accepts
29
+ Clerk OAuth access tokens for its exact resource, never browser sessions.
30
+ Each request also needs a current active Flow person and their explicit
31
+ person/client/organisation read grant. The first slice exposes four bounded read tools
32
+ (`docs/AGENT_ACCESS.md`). The reserved `/api/flow/v1` stub still refuses all
33
+ requests. It does not implement connector keys.
31
34
  - **Integrations.** Seazona, Xero and every later adapter reach the core only
32
35
  through the integration port. Their credentials are stored per
33
36
  organisation, encrypted, and are write-only in Settings.
@@ -53,7 +56,7 @@ paste a credential, in full or in part.
53
56
  - No account has a built-in or fallback password, in any environment.
54
57
  - Sign-in, API and integration routes are rate limited per client
55
58
  (`server/rate-limit.js`): the sign-in page and its config 30 requests a
56
- minute, `/api` 120, and the Clerk proxy 300. A client over the limit gets
59
+ minute, `/api` and `/mcp` 120, and the Clerk proxy 300. A client over the limit gets
57
60
  `429` with `Retry-After`.
58
61
  - Session cookies are `Secure`, `HttpOnly` and `SameSite`.
59
62
  - Flow stores no clinical notes or scans, and keeps a patient reference only
@@ -1,15 +1,17 @@
1
1
  {
2
2
  "name": "@arcforgelabs/flow",
3
- "version": "2026.10.53",
3
+ "version": "2026.11.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@arcforgelabs/flow",
9
- "version": "2026.10.53",
9
+ "version": "2026.11.1",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@clerk/backend": "3.25.0",
13
+ "@clerk/express": "2.1.6",
14
+ "@clerk/mcp-tools": "0.9.0",
13
15
  "@fontsource-variable/atkinson-hyperlegible-next": "5.3.0",
14
16
  "@fontsource-variable/dm-sans": "5.3.0",
15
17
  "@fontsource-variable/geist": "5.3.0",
@@ -21,13 +23,15 @@
21
23
  "@fontsource-variable/playfair-display": "5.3.0",
22
24
  "@fontsource-variable/plus-jakarta-sans": "5.3.0",
23
25
  "@fontsource-variable/space-grotesk": "5.3.0",
26
+ "@modelcontextprotocol/sdk": "1.32.1",
24
27
  "@sentry/node": "11.8.0",
25
28
  "drizzle-orm": "0.45.4",
26
29
  "express": "5.3.0",
27
30
  "express-rate-limit": "8.7.1",
28
31
  "lucide-static": "1.59.0",
29
32
  "pdfkit": "0.20.2",
30
- "pg": "8.23.1"
33
+ "pg": "8.23.1",
34
+ "zod": "4.6.7"
31
35
  },
32
36
  "bin": {
33
37
  "flow-server": "server/flow-server.js"
@@ -36,7 +40,8 @@
36
40
  "@axe-core/playwright": "4.13.0",
37
41
  "@playwright/test": "1.56.1",
38
42
  "drizzle-kit": "0.31.11",
39
- "esbuild": "0.25.12"
43
+ "esbuild": "0.25.12",
44
+ "light-my-request": "6.8.0"
40
45
  },
41
46
  "engines": {
42
47
  "node": ">=24"
@@ -69,6 +74,73 @@
69
74
  "node": ">=20.9.0"
70
75
  }
71
76
  },
77
+ "node_modules/@clerk/express": {
78
+ "version": "2.1.6",
79
+ "resolved": "https://registry.npmjs.org/@clerk/express/-/express-2.1.6.tgz",
80
+ "integrity": "sha512-612cGi+JDj8nYhtwZXbFZclAN7Bz3ax4DTuHgYtsz+CVJ0gEBJsSMOZPsLZNUjXL/xvFcPBauZHGPz28G7aj2A==",
81
+ "license": "MIT",
82
+ "dependencies": {
83
+ "@clerk/backend": "^3.2.14",
84
+ "@clerk/shared": "^4.8.3",
85
+ "tslib": "2.8.1"
86
+ },
87
+ "engines": {
88
+ "node": ">=20.9.0"
89
+ },
90
+ "peerDependencies": {
91
+ "express": "^4.17.0 || ^5.0.0"
92
+ }
93
+ },
94
+ "node_modules/@clerk/mcp-tools": {
95
+ "version": "0.9.0",
96
+ "resolved": "https://registry.npmjs.org/@clerk/mcp-tools/-/mcp-tools-0.9.0.tgz",
97
+ "integrity": "sha512-JyX2ny3y6Lve8A66rLEr2jM2P//ONkyBznVMpT5UyzJ21kgqPJ+FjCQEQGXku+Vq2zi1Hihv5pU4Wvn+G2+KHQ==",
98
+ "license": "MIT",
99
+ "dependencies": {
100
+ "@modelcontextprotocol/sdk": "^1.29.0"
101
+ },
102
+ "peerDependencies": {
103
+ "@clerk/express": "^2.1.5",
104
+ "@clerk/hono": "^0.1.0",
105
+ "@clerk/nextjs": "^7.2.3",
106
+ "better-sqlite3": "^8.7.0",
107
+ "express": "^5.0.0",
108
+ "hono": "^4.0.0",
109
+ "next": "^15.2.8 || ^15.3.8 || ^15.4.10 || ^15.5.9 || ^15.6.0-0 || ^16.0.10 || ^16.1.0-0",
110
+ "pg": "^8.11.0",
111
+ "redis": "^4.0.0",
112
+ "zod": "^3.25 || ^4.0"
113
+ },
114
+ "peerDependenciesMeta": {
115
+ "@clerk/express": {
116
+ "optional": true
117
+ },
118
+ "@clerk/hono": {
119
+ "optional": true
120
+ },
121
+ "@clerk/nextjs": {
122
+ "optional": true
123
+ },
124
+ "better-sqlite3": {
125
+ "optional": true
126
+ },
127
+ "express": {
128
+ "optional": true
129
+ },
130
+ "hono": {
131
+ "optional": true
132
+ },
133
+ "next": {
134
+ "optional": true
135
+ },
136
+ "pg": {
137
+ "optional": true
138
+ },
139
+ "redis": {
140
+ "optional": true
141
+ }
142
+ }
143
+ },
72
144
  "node_modules/@clerk/shared": {
73
145
  "version": "4.40.0",
74
146
  "resolved": "https://registry.npmjs.org/@clerk/shared/-/shared-4.40.0.tgz",
@@ -569,6 +641,23 @@
569
641
  "node": ">=18"
570
642
  }
571
643
  },
644
+ "node_modules/@fastify/deepmerge": {
645
+ "version": "3.2.4",
646
+ "resolved": "https://registry.npmjs.org/@fastify/deepmerge/-/deepmerge-3.2.4.tgz",
647
+ "integrity": "sha512-kc8GQq5gX9RRhw0rov3DMrN8wS8yRlxJRdDzsYwwdBV/wazuVgc/1K7CKL90tlvu3RlHan6Y0R0aE3nJtBz2eQ==",
648
+ "dev": true,
649
+ "funding": [
650
+ {
651
+ "type": "github",
652
+ "url": "https://github.com/sponsors/fastify"
653
+ },
654
+ {
655
+ "type": "opencollective",
656
+ "url": "https://opencollective.com/fastify"
657
+ }
658
+ ],
659
+ "license": "MIT"
660
+ },
572
661
  "node_modules/@fontsource-variable/atkinson-hyperlegible-next": {
573
662
  "version": "5.3.0",
574
663
  "resolved": "https://registry.npmjs.org/@fontsource-variable/atkinson-hyperlegible-next/-/atkinson-hyperlegible-next-5.3.0.tgz",
@@ -668,12 +757,73 @@
668
757
  "url": "https://github.com/sponsors/ayuhito"
669
758
  }
670
759
  },
760
+ "node_modules/@hono/node-server": {
761
+ "version": "2.1.6",
762
+ "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.6.tgz",
763
+ "integrity": "sha512-p/KH9MnfNcsm3sR6x4lNgm5j+QN4Et8srKredl9DZfXiyZ1UQ3aQ2YVpFLbqktYN5JI+DB+VZFKM2PqE5hLKjQ==",
764
+ "license": "MIT",
765
+ "engines": {
766
+ "node": ">=20"
767
+ },
768
+ "peerDependencies": {
769
+ "hono": "^4 || ^5.0.0-0"
770
+ }
771
+ },
671
772
  "node_modules/@jridgewell/sourcemap-codec": {
672
773
  "version": "1.6.0",
673
774
  "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz",
674
775
  "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==",
675
776
  "license": "MIT"
676
777
  },
778
+ "node_modules/@modelcontextprotocol/sdk": {
779
+ "version": "1.32.1",
780
+ "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.32.1.tgz",
781
+ "integrity": "sha512-2DdE+SJDtzLEEWzY1ZjY7Q+VcPhcV1KisD3zI4u0XZyktsjHum1mwbMI+JaulUBi2OZk+KJAi2uPXzxichPkdw==",
782
+ "license": "MIT",
783
+ "dependencies": {
784
+ "@hono/node-server": "^1.19.9 || ^2.0.5",
785
+ "ajv": "^8.17.1",
786
+ "ajv-formats": "^3.0.1",
787
+ "content-type": "^1.0.5",
788
+ "cors": "^2.8.5",
789
+ "cross-spawn": "^7.0.5",
790
+ "eventsource": "^3.0.2",
791
+ "eventsource-parser": "^3.0.0",
792
+ "express": "^5.2.1",
793
+ "express-rate-limit": "^8.2.1",
794
+ "hono": "^4.11.4",
795
+ "jose": "^6.1.3",
796
+ "json-schema-typed": "^8.0.2",
797
+ "pkce-challenge": "^5.0.0",
798
+ "raw-body": "^3.0.0",
799
+ "zod": "^3.25 || ^4.0",
800
+ "zod-to-json-schema": "^3.25.1"
801
+ },
802
+ "engines": {
803
+ "node": ">=18"
804
+ },
805
+ "peerDependencies": {
806
+ "@cfworker/json-schema": "^4.1.1",
807
+ "zod": "^3.25 || ^4.0"
808
+ },
809
+ "peerDependenciesMeta": {
810
+ "@cfworker/json-schema": {
811
+ "optional": true
812
+ },
813
+ "zod": {
814
+ "optional": false
815
+ }
816
+ }
817
+ },
818
+ "node_modules/@modelcontextprotocol/sdk/node_modules/content-type": {
819
+ "version": "1.0.5",
820
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
821
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
822
+ "license": "MIT",
823
+ "engines": {
824
+ "node": ">= 0.6"
825
+ }
826
+ },
677
827
  "node_modules/@noble/ciphers": {
678
828
  "version": "1.3.0",
679
829
  "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz",
@@ -1214,6 +1364,39 @@
1214
1364
  "node": ">= 0.6"
1215
1365
  }
1216
1366
  },
1367
+ "node_modules/ajv": {
1368
+ "version": "8.20.0",
1369
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
1370
+ "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
1371
+ "license": "MIT",
1372
+ "dependencies": {
1373
+ "fast-deep-equal": "^3.1.3",
1374
+ "fast-uri": "^3.0.1",
1375
+ "json-schema-traverse": "^1.0.0",
1376
+ "require-from-string": "^2.0.2"
1377
+ },
1378
+ "funding": {
1379
+ "type": "github",
1380
+ "url": "https://github.com/sponsors/epoberezkin"
1381
+ }
1382
+ },
1383
+ "node_modules/ajv-formats": {
1384
+ "version": "3.0.1",
1385
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
1386
+ "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
1387
+ "license": "MIT",
1388
+ "dependencies": {
1389
+ "ajv": "^8.0.0"
1390
+ },
1391
+ "peerDependencies": {
1392
+ "ajv": "^8.0.0"
1393
+ },
1394
+ "peerDependenciesMeta": {
1395
+ "ajv": {
1396
+ "optional": true
1397
+ }
1398
+ }
1399
+ },
1217
1400
  "node_modules/axe-core": {
1218
1401
  "version": "4.13.0",
1219
1402
  "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.13.0.tgz",
@@ -1396,6 +1579,37 @@
1396
1579
  "node": ">=6.6.0"
1397
1580
  }
1398
1581
  },
1582
+ "node_modules/cors": {
1583
+ "version": "2.8.6",
1584
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz",
1585
+ "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==",
1586
+ "license": "MIT",
1587
+ "dependencies": {
1588
+ "object-assign": "^4",
1589
+ "vary": "^1"
1590
+ },
1591
+ "engines": {
1592
+ "node": ">= 0.10"
1593
+ },
1594
+ "funding": {
1595
+ "type": "opencollective",
1596
+ "url": "https://opencollective.com/express"
1597
+ }
1598
+ },
1599
+ "node_modules/cross-spawn": {
1600
+ "version": "7.0.6",
1601
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
1602
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
1603
+ "license": "MIT",
1604
+ "dependencies": {
1605
+ "path-key": "^3.1.0",
1606
+ "shebang-command": "^2.0.0",
1607
+ "which": "^2.0.1"
1608
+ },
1609
+ "engines": {
1610
+ "node": ">= 8"
1611
+ }
1612
+ },
1399
1613
  "node_modules/debug": {
1400
1614
  "version": "4.4.3",
1401
1615
  "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
@@ -1710,6 +1924,27 @@
1710
1924
  "node": ">= 0.6"
1711
1925
  }
1712
1926
  },
1927
+ "node_modules/eventsource": {
1928
+ "version": "3.0.7",
1929
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz",
1930
+ "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==",
1931
+ "license": "MIT",
1932
+ "dependencies": {
1933
+ "eventsource-parser": "^3.0.1"
1934
+ },
1935
+ "engines": {
1936
+ "node": ">=18.0.0"
1937
+ }
1938
+ },
1939
+ "node_modules/eventsource-parser": {
1940
+ "version": "3.1.1",
1941
+ "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.1.tgz",
1942
+ "integrity": "sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ==",
1943
+ "license": "MIT",
1944
+ "engines": {
1945
+ "node": ">=18.0.0"
1946
+ }
1947
+ },
1713
1948
  "node_modules/express": {
1714
1949
  "version": "5.3.0",
1715
1950
  "resolved": "https://registry.npmjs.org/express/-/express-5.3.0.tgz",
@@ -1784,6 +2019,22 @@
1784
2019
  "integrity": "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==",
1785
2020
  "license": "Unlicense"
1786
2021
  },
2022
+ "node_modules/fast-uri": {
2023
+ "version": "3.1.9",
2024
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.9.tgz",
2025
+ "integrity": "sha512-hS/0Wt3Ya043oKXs0sIxrMpKQITXhMLIrVAKKXi4gozGC9v7YRWVnXIZzjNPTO02M9BdxLCWqK1yRXgNziVyJQ==",
2026
+ "funding": [
2027
+ {
2028
+ "type": "github",
2029
+ "url": "https://github.com/sponsors/fastify"
2030
+ },
2031
+ {
2032
+ "type": "opencollective",
2033
+ "url": "https://opencollective.com/fastify"
2034
+ }
2035
+ ],
2036
+ "license": "BSD-3-Clause"
2037
+ },
1787
2038
  "node_modules/fflate": {
1788
2039
  "version": "0.8.3",
1789
2040
  "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz",
@@ -1988,6 +2239,15 @@
1988
2239
  "node": ">= 0.4"
1989
2240
  }
1990
2241
  },
2242
+ "node_modules/hono": {
2243
+ "version": "4.13.16",
2244
+ "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.16.tgz",
2245
+ "integrity": "sha512-AOLOEhvrV+iH92xXCnFr/5+3KjPKcI3xP63XJtX5spAnkznPdHijlIsUTpi7/9EhWqrTCekw5c5zh1K+YsVw7A==",
2246
+ "license": "MIT",
2247
+ "engines": {
2248
+ "node": ">=16.9.0"
2249
+ }
2250
+ },
1991
2251
  "node_modules/http-errors": {
1992
2252
  "version": "2.0.1",
1993
2253
  "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
@@ -2054,12 +2314,76 @@
2054
2314
  "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
2055
2315
  "license": "MIT"
2056
2316
  },
2317
+ "node_modules/isexe": {
2318
+ "version": "2.0.0",
2319
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
2320
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
2321
+ "license": "ISC"
2322
+ },
2323
+ "node_modules/jose": {
2324
+ "version": "6.2.15",
2325
+ "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.15.tgz",
2326
+ "integrity": "sha512-qdF6ewcZARtef63fJ9AKKZPgxw+t7USH6HLXYcD4CrdmSvDp79rpJSPFEKc90QBeGS63u1KQtN2MZQHC0yDIzA==",
2327
+ "license": "MIT",
2328
+ "funding": {
2329
+ "url": "https://github.com/sponsors/panva"
2330
+ }
2331
+ },
2057
2332
  "node_modules/js-cookie": {
2058
2333
  "version": "3.0.8",
2059
2334
  "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.8.tgz",
2060
2335
  "integrity": "sha512-yeJd4aNAdYZQjaon2bpD/Gb0B/omw7HQOsynXXcOiWVCacbBcPlgn8S/d1X6blFSaHao7ozqtW7NZW19xpCtIw==",
2061
2336
  "license": "MIT"
2062
2337
  },
2338
+ "node_modules/json-schema-traverse": {
2339
+ "version": "1.0.0",
2340
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
2341
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
2342
+ "license": "MIT"
2343
+ },
2344
+ "node_modules/json-schema-typed": {
2345
+ "version": "8.0.2",
2346
+ "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz",
2347
+ "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==",
2348
+ "license": "BSD-2-Clause"
2349
+ },
2350
+ "node_modules/light-my-request": {
2351
+ "version": "6.8.0",
2352
+ "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-6.8.0.tgz",
2353
+ "integrity": "sha512-5Q8PjoSEdtGIB8fikZsTem5vgRo4F2mR6vUKTDW/H1g6MtAt8e3duQbg/QxL5yzg6BZhor2KOUm3hhWMWLTZwg==",
2354
+ "dev": true,
2355
+ "funding": [
2356
+ {
2357
+ "type": "github",
2358
+ "url": "https://github.com/sponsors/fastify"
2359
+ },
2360
+ {
2361
+ "type": "opencollective",
2362
+ "url": "https://opencollective.com/fastify"
2363
+ }
2364
+ ],
2365
+ "license": "BSD-3-Clause",
2366
+ "dependencies": {
2367
+ "@fastify/deepmerge": "^3.1.0",
2368
+ "cookie": "^2.0.0",
2369
+ "process-warning": "^5.0.0",
2370
+ "set-cookie-parser": "^3.0.1"
2371
+ }
2372
+ },
2373
+ "node_modules/light-my-request/node_modules/cookie": {
2374
+ "version": "2.0.2",
2375
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-2.0.2.tgz",
2376
+ "integrity": "sha512-SL0cVuEdETEp7pN0FuZb01toc3vnODEfVUCooxG1SJN0yIirh7JMb9X9bvfCFf0vzzbT68RdbKDHYTiWy7a7iw==",
2377
+ "dev": true,
2378
+ "license": "MIT",
2379
+ "engines": {
2380
+ "node": ">=22"
2381
+ },
2382
+ "funding": {
2383
+ "type": "opencollective",
2384
+ "url": "https://opencollective.com/express"
2385
+ }
2386
+ },
2063
2387
  "node_modules/linebreak": {
2064
2388
  "version": "1.1.0",
2065
2389
  "resolved": "https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz",
@@ -2208,6 +2532,15 @@
2208
2532
  "url": "https://opencollective.com/express"
2209
2533
  }
2210
2534
  },
2535
+ "node_modules/object-assign": {
2536
+ "version": "4.1.1",
2537
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
2538
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
2539
+ "license": "MIT",
2540
+ "engines": {
2541
+ "node": ">=0.10.0"
2542
+ }
2543
+ },
2211
2544
  "node_modules/object-inspect": {
2212
2545
  "version": "1.13.4",
2213
2546
  "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
@@ -2292,6 +2625,15 @@
2292
2625
  "node": ">= 0.8"
2293
2626
  }
2294
2627
  },
2628
+ "node_modules/path-key": {
2629
+ "version": "3.1.1",
2630
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2631
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2632
+ "license": "MIT",
2633
+ "engines": {
2634
+ "node": ">=8"
2635
+ }
2636
+ },
2295
2637
  "node_modules/path-scurry": {
2296
2638
  "version": "2.0.2",
2297
2639
  "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz",
@@ -2421,6 +2763,15 @@
2421
2763
  "split2": "^4.1.0"
2422
2764
  }
2423
2765
  },
2766
+ "node_modules/pkce-challenge": {
2767
+ "version": "5.0.1",
2768
+ "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz",
2769
+ "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==",
2770
+ "license": "MIT",
2771
+ "engines": {
2772
+ "node": ">=16.20.0"
2773
+ }
2774
+ },
2424
2775
  "node_modules/playwright": {
2425
2776
  "version": "1.56.1",
2426
2777
  "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz",
@@ -2529,6 +2880,23 @@
2529
2880
  "node": ">=0.10.0"
2530
2881
  }
2531
2882
  },
2883
+ "node_modules/process-warning": {
2884
+ "version": "5.1.1",
2885
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.1.1.tgz",
2886
+ "integrity": "sha512-oCkNVj4OKnKEcocVBcDfiIugN1/cE6rgfT3nCtzeqZPA8+rIxMaQ0xXzIkGP8Gj2qUaP1UR7uhJ1VD8lUCpzCg==",
2887
+ "dev": true,
2888
+ "funding": [
2889
+ {
2890
+ "type": "github",
2891
+ "url": "https://github.com/sponsors/fastify"
2892
+ },
2893
+ {
2894
+ "type": "opencollective",
2895
+ "url": "https://opencollective.com/fastify"
2896
+ }
2897
+ ],
2898
+ "license": "MIT"
2899
+ },
2532
2900
  "node_modules/proxy-addr": {
2533
2901
  "version": "2.0.8",
2534
2902
  "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz",
@@ -2590,6 +2958,15 @@
2590
2958
  "node": ">= 0.10"
2591
2959
  }
2592
2960
  },
2961
+ "node_modules/require-from-string": {
2962
+ "version": "2.0.2",
2963
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
2964
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
2965
+ "license": "MIT",
2966
+ "engines": {
2967
+ "node": ">=0.10.0"
2968
+ }
2969
+ },
2593
2970
  "node_modules/resolve-pkg-maps": {
2594
2971
  "version": "1.0.0",
2595
2972
  "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
@@ -2685,12 +3062,40 @@
2685
3062
  "url": "https://opencollective.com/express"
2686
3063
  }
2687
3064
  },
3065
+ "node_modules/set-cookie-parser": {
3066
+ "version": "3.2.2",
3067
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.2.2.tgz",
3068
+ "integrity": "sha512-df017qMeYuXo4emL09nlyMpi2i2MtEIKS/6jtXH3vmjFgIRsOi852/5RmhJ4EkvN3ZF8jXadM/EkTPXgc8yPIw==",
3069
+ "dev": true,
3070
+ "license": "MIT"
3071
+ },
2688
3072
  "node_modules/setprototypeof": {
2689
3073
  "version": "1.2.0",
2690
3074
  "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
2691
3075
  "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
2692
3076
  "license": "ISC"
2693
3077
  },
3078
+ "node_modules/shebang-command": {
3079
+ "version": "2.0.0",
3080
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
3081
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
3082
+ "license": "MIT",
3083
+ "dependencies": {
3084
+ "shebang-regex": "^3.0.0"
3085
+ },
3086
+ "engines": {
3087
+ "node": ">=8"
3088
+ }
3089
+ },
3090
+ "node_modules/shebang-regex": {
3091
+ "version": "3.0.0",
3092
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
3093
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
3094
+ "license": "MIT",
3095
+ "engines": {
3096
+ "node": ">=8"
3097
+ }
3098
+ },
2694
3099
  "node_modules/side-channel": {
2695
3100
  "version": "1.1.1",
2696
3101
  "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz",
@@ -3407,6 +3812,21 @@
3407
3812
  "node": ">= 0.8"
3408
3813
  }
3409
3814
  },
3815
+ "node_modules/which": {
3816
+ "version": "2.0.2",
3817
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
3818
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
3819
+ "license": "ISC",
3820
+ "dependencies": {
3821
+ "isexe": "^2.0.0"
3822
+ },
3823
+ "bin": {
3824
+ "node-which": "bin/node-which"
3825
+ },
3826
+ "engines": {
3827
+ "node": ">= 8"
3828
+ }
3829
+ },
3410
3830
  "node_modules/wrappy": {
3411
3831
  "version": "1.0.2",
3412
3832
  "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -3421,6 +3841,24 @@
3421
3841
  "engines": {
3422
3842
  "node": ">=0.4"
3423
3843
  }
3844
+ },
3845
+ "node_modules/zod": {
3846
+ "version": "4.6.7",
3847
+ "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.7.tgz",
3848
+ "integrity": "sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg==",
3849
+ "license": "MIT",
3850
+ "funding": {
3851
+ "url": "https://github.com/sponsors/colinhacks"
3852
+ }
3853
+ },
3854
+ "node_modules/zod-to-json-schema": {
3855
+ "version": "3.25.2",
3856
+ "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz",
3857
+ "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==",
3858
+ "license": "ISC",
3859
+ "peerDependencies": {
3860
+ "zod": "^3.25.28 || ^4"
3861
+ }
3424
3862
  }
3425
3863
  }
3426
3864
  }