@portel/photon 1.4.1 → 1.6.0

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 (395) hide show
  1. package/README.md +326 -1177
  2. package/dist/auto-ui/beam.d.ts +14 -0
  3. package/dist/auto-ui/beam.d.ts.map +1 -0
  4. package/dist/auto-ui/beam.js +3057 -0
  5. package/dist/auto-ui/beam.js.map +1 -0
  6. package/dist/auto-ui/bridge/index.d.ts +37 -0
  7. package/dist/auto-ui/bridge/index.d.ts.map +1 -0
  8. package/dist/auto-ui/bridge/index.js +555 -0
  9. package/dist/auto-ui/bridge/index.js.map +1 -0
  10. package/dist/auto-ui/bridge/openai-shim.d.ts +20 -0
  11. package/dist/auto-ui/bridge/openai-shim.d.ts.map +1 -0
  12. package/dist/auto-ui/bridge/openai-shim.js +231 -0
  13. package/dist/auto-ui/bridge/openai-shim.js.map +1 -0
  14. package/dist/auto-ui/bridge/photon-app.d.ts +162 -0
  15. package/dist/auto-ui/bridge/photon-app.d.ts.map +1 -0
  16. package/dist/auto-ui/bridge/photon-app.js +460 -0
  17. package/dist/auto-ui/bridge/photon-app.js.map +1 -0
  18. package/dist/auto-ui/bridge/types.d.ts +128 -0
  19. package/dist/auto-ui/bridge/types.d.ts.map +1 -0
  20. package/dist/auto-ui/bridge/types.js +7 -0
  21. package/dist/auto-ui/bridge/types.js.map +1 -0
  22. package/dist/auto-ui/components/card.d.ts +13 -0
  23. package/dist/auto-ui/components/card.d.ts.map +1 -0
  24. package/dist/auto-ui/components/card.js +64 -0
  25. package/dist/auto-ui/components/card.js.map +1 -0
  26. package/dist/auto-ui/components/form.d.ts +15 -0
  27. package/dist/auto-ui/components/form.d.ts.map +1 -0
  28. package/dist/auto-ui/components/form.js +72 -0
  29. package/dist/auto-ui/components/form.js.map +1 -0
  30. package/dist/auto-ui/components/list.d.ts +13 -0
  31. package/dist/auto-ui/components/list.d.ts.map +1 -0
  32. package/dist/auto-ui/components/list.js +58 -0
  33. package/dist/auto-ui/components/list.js.map +1 -0
  34. package/dist/auto-ui/components/progress.d.ts +18 -0
  35. package/dist/auto-ui/components/progress.d.ts.map +1 -0
  36. package/dist/auto-ui/components/progress.js +125 -0
  37. package/dist/auto-ui/components/progress.js.map +1 -0
  38. package/dist/auto-ui/components/table.d.ts +13 -0
  39. package/dist/auto-ui/components/table.d.ts.map +1 -0
  40. package/dist/auto-ui/components/table.js +82 -0
  41. package/dist/auto-ui/components/table.js.map +1 -0
  42. package/dist/auto-ui/components/tree.d.ts +13 -0
  43. package/dist/auto-ui/components/tree.d.ts.map +1 -0
  44. package/dist/auto-ui/components/tree.js +61 -0
  45. package/dist/auto-ui/components/tree.js.map +1 -0
  46. package/dist/auto-ui/daemon-tools.d.ts +45 -0
  47. package/dist/auto-ui/daemon-tools.d.ts.map +1 -0
  48. package/dist/auto-ui/daemon-tools.js +580 -0
  49. package/dist/auto-ui/daemon-tools.js.map +1 -0
  50. package/dist/auto-ui/design-system/index.d.ts +21 -0
  51. package/dist/auto-ui/design-system/index.d.ts.map +1 -0
  52. package/dist/auto-ui/design-system/index.js +27 -0
  53. package/dist/auto-ui/design-system/index.js.map +1 -0
  54. package/dist/auto-ui/design-system/tokens.d.ts +9 -0
  55. package/dist/auto-ui/design-system/tokens.d.ts.map +1 -0
  56. package/dist/auto-ui/design-system/tokens.js +27 -0
  57. package/dist/auto-ui/design-system/tokens.js.map +1 -0
  58. package/dist/auto-ui/design-system/transaction-ui.d.ts +70 -0
  59. package/dist/auto-ui/design-system/transaction-ui.d.ts.map +1 -0
  60. package/dist/auto-ui/design-system/transaction-ui.js +982 -0
  61. package/dist/auto-ui/design-system/transaction-ui.js.map +1 -0
  62. package/dist/auto-ui/frontend/index.html +84 -0
  63. package/dist/auto-ui/index.d.ts +23 -0
  64. package/dist/auto-ui/index.d.ts.map +1 -0
  65. package/dist/auto-ui/index.js +28 -0
  66. package/dist/auto-ui/index.js.map +1 -0
  67. package/dist/auto-ui/openapi-generator.d.ts +71 -0
  68. package/dist/auto-ui/openapi-generator.d.ts.map +1 -0
  69. package/dist/auto-ui/openapi-generator.js +223 -0
  70. package/dist/auto-ui/openapi-generator.js.map +1 -0
  71. package/dist/auto-ui/photon-bridge.d.ts +159 -0
  72. package/dist/auto-ui/photon-bridge.d.ts.map +1 -0
  73. package/dist/auto-ui/photon-bridge.js +262 -0
  74. package/dist/auto-ui/photon-bridge.js.map +1 -0
  75. package/dist/auto-ui/photon-host.d.ts +113 -0
  76. package/dist/auto-ui/photon-host.d.ts.map +1 -0
  77. package/dist/auto-ui/photon-host.js +284 -0
  78. package/dist/auto-ui/photon-host.js.map +1 -0
  79. package/dist/auto-ui/platform-compat.d.ts +71 -0
  80. package/dist/auto-ui/platform-compat.d.ts.map +1 -0
  81. package/dist/auto-ui/platform-compat.js +628 -0
  82. package/dist/auto-ui/platform-compat.js.map +1 -0
  83. package/dist/auto-ui/playground-html.d.ts +15 -0
  84. package/dist/auto-ui/playground-html.d.ts.map +1 -0
  85. package/dist/auto-ui/playground-html.js +1113 -0
  86. package/dist/auto-ui/playground-html.js.map +1 -0
  87. package/dist/auto-ui/playground-server.d.ts +7 -0
  88. package/dist/auto-ui/playground-server.d.ts.map +1 -0
  89. package/dist/auto-ui/playground-server.js +840 -0
  90. package/dist/auto-ui/playground-server.js.map +1 -0
  91. package/dist/auto-ui/registry.d.ts +13 -0
  92. package/dist/auto-ui/registry.d.ts.map +1 -0
  93. package/dist/auto-ui/registry.js +62 -0
  94. package/dist/auto-ui/registry.js.map +1 -0
  95. package/dist/auto-ui/renderer.d.ts +14 -0
  96. package/dist/auto-ui/renderer.d.ts.map +1 -0
  97. package/dist/auto-ui/renderer.js +88 -0
  98. package/dist/auto-ui/renderer.js.map +1 -0
  99. package/dist/auto-ui/rendering/components.d.ts +29 -0
  100. package/dist/auto-ui/rendering/components.d.ts.map +1 -0
  101. package/dist/auto-ui/rendering/components.js +773 -0
  102. package/dist/auto-ui/rendering/components.js.map +1 -0
  103. package/dist/auto-ui/rendering/field-analyzer.d.ts +48 -0
  104. package/dist/auto-ui/rendering/field-analyzer.d.ts.map +1 -0
  105. package/dist/auto-ui/rendering/field-analyzer.js +270 -0
  106. package/dist/auto-ui/rendering/field-analyzer.js.map +1 -0
  107. package/dist/auto-ui/rendering/field-renderers.d.ts +64 -0
  108. package/dist/auto-ui/rendering/field-renderers.d.ts.map +1 -0
  109. package/dist/auto-ui/rendering/field-renderers.js +317 -0
  110. package/dist/auto-ui/rendering/field-renderers.js.map +1 -0
  111. package/dist/auto-ui/rendering/index.d.ts +28 -0
  112. package/dist/auto-ui/rendering/index.d.ts.map +1 -0
  113. package/dist/auto-ui/rendering/index.js +60 -0
  114. package/dist/auto-ui/rendering/index.js.map +1 -0
  115. package/dist/auto-ui/rendering/layout-selector.d.ts +48 -0
  116. package/dist/auto-ui/rendering/layout-selector.d.ts.map +1 -0
  117. package/dist/auto-ui/rendering/layout-selector.js +352 -0
  118. package/dist/auto-ui/rendering/layout-selector.js.map +1 -0
  119. package/dist/auto-ui/rendering/template-engine.d.ts +41 -0
  120. package/dist/auto-ui/rendering/template-engine.d.ts.map +1 -0
  121. package/dist/auto-ui/rendering/template-engine.js +238 -0
  122. package/dist/auto-ui/rendering/template-engine.js.map +1 -0
  123. package/dist/auto-ui/streamable-http-transport.d.ts +103 -0
  124. package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -0
  125. package/dist/auto-ui/streamable-http-transport.js +1875 -0
  126. package/dist/auto-ui/streamable-http-transport.js.map +1 -0
  127. package/dist/auto-ui/types.d.ts +384 -0
  128. package/dist/auto-ui/types.d.ts.map +1 -0
  129. package/dist/auto-ui/types.js +92 -0
  130. package/dist/auto-ui/types.js.map +1 -0
  131. package/dist/beam.bundle.js +63137 -0
  132. package/dist/beam.bundle.js.map +7 -0
  133. package/dist/claude-code-plugin.d.ts.map +1 -1
  134. package/dist/claude-code-plugin.js +30 -30
  135. package/dist/claude-code-plugin.js.map +1 -1
  136. package/dist/cli/commands/info.d.ts +11 -0
  137. package/dist/cli/commands/info.d.ts.map +1 -0
  138. package/dist/cli/commands/info.js +313 -0
  139. package/dist/cli/commands/info.js.map +1 -0
  140. package/dist/cli/commands/marketplace.d.ts +11 -0
  141. package/dist/cli/commands/marketplace.d.ts.map +1 -0
  142. package/dist/cli/commands/marketplace.js +198 -0
  143. package/dist/cli/commands/marketplace.js.map +1 -0
  144. package/dist/cli/commands/package-app.d.ts +9 -0
  145. package/dist/cli/commands/package-app.d.ts.map +1 -0
  146. package/dist/cli/commands/package-app.js +191 -0
  147. package/dist/cli/commands/package-app.js.map +1 -0
  148. package/dist/cli/commands/package.d.ts +11 -0
  149. package/dist/cli/commands/package.d.ts.map +1 -0
  150. package/dist/cli/commands/package.js +573 -0
  151. package/dist/cli/commands/package.js.map +1 -0
  152. package/dist/cli-alias.d.ts.map +1 -1
  153. package/dist/cli-alias.js +30 -28
  154. package/dist/cli-alias.js.map +1 -1
  155. package/dist/cli-formatter.d.ts +8 -24
  156. package/dist/cli-formatter.d.ts.map +1 -1
  157. package/dist/cli-formatter.js +8 -325
  158. package/dist/cli-formatter.js.map +1 -1
  159. package/dist/cli.d.ts +15 -1
  160. package/dist/cli.d.ts.map +1 -1
  161. package/dist/cli.js +1166 -1131
  162. package/dist/cli.js.map +1 -1
  163. package/dist/daemon/client.d.ts +84 -3
  164. package/dist/daemon/client.d.ts.map +1 -1
  165. package/dist/daemon/client.js +561 -11
  166. package/dist/daemon/client.js.map +1 -1
  167. package/dist/daemon/manager.d.ts +51 -12
  168. package/dist/daemon/manager.d.ts.map +1 -1
  169. package/dist/daemon/manager.js +122 -61
  170. package/dist/daemon/manager.js.map +1 -1
  171. package/dist/daemon/protocol.d.ts +62 -6
  172. package/dist/daemon/protocol.d.ts.map +1 -1
  173. package/dist/daemon/protocol.js +76 -1
  174. package/dist/daemon/protocol.js.map +1 -1
  175. package/dist/daemon/server.d.ts +6 -6
  176. package/dist/daemon/server.js +743 -133
  177. package/dist/daemon/server.js.map +1 -1
  178. package/dist/daemon/session-manager.d.ts +8 -1
  179. package/dist/daemon/session-manager.d.ts.map +1 -1
  180. package/dist/daemon/session-manager.js +32 -9
  181. package/dist/daemon/session-manager.js.map +1 -1
  182. package/dist/deploy/cloudflare.d.ts +12 -0
  183. package/dist/deploy/cloudflare.d.ts.map +1 -0
  184. package/dist/deploy/cloudflare.js +216 -0
  185. package/dist/deploy/cloudflare.js.map +1 -0
  186. package/dist/index.d.ts +1 -0
  187. package/dist/index.d.ts.map +1 -1
  188. package/dist/index.js +3 -0
  189. package/dist/index.js.map +1 -1
  190. package/dist/loader.d.ts +191 -21
  191. package/dist/loader.d.ts.map +1 -1
  192. package/dist/loader.js +1186 -319
  193. package/dist/loader.js.map +1 -1
  194. package/dist/markdown-utils.d.ts +8 -0
  195. package/dist/markdown-utils.d.ts.map +1 -0
  196. package/dist/markdown-utils.js +63 -0
  197. package/dist/markdown-utils.js.map +1 -0
  198. package/dist/marketplace-manager.d.ts +10 -0
  199. package/dist/marketplace-manager.d.ts.map +1 -1
  200. package/dist/marketplace-manager.js +112 -28
  201. package/dist/marketplace-manager.js.map +1 -1
  202. package/dist/mcp-client.d.ts +9 -0
  203. package/dist/mcp-client.d.ts.map +1 -0
  204. package/dist/mcp-client.js +11 -0
  205. package/dist/mcp-client.js.map +1 -0
  206. package/dist/mcp-elicitation.d.ts +32 -0
  207. package/dist/mcp-elicitation.d.ts.map +1 -0
  208. package/dist/mcp-elicitation.js +26 -0
  209. package/dist/mcp-elicitation.js.map +1 -0
  210. package/dist/path-resolver.d.ts +9 -12
  211. package/dist/path-resolver.d.ts.map +1 -1
  212. package/dist/path-resolver.js +13 -43
  213. package/dist/path-resolver.js.map +1 -1
  214. package/dist/photon-cli-runner.d.ts.map +1 -1
  215. package/dist/photon-cli-runner.js +204 -77
  216. package/dist/photon-cli-runner.js.map +1 -1
  217. package/dist/photon-doc-extractor.d.ts +89 -0
  218. package/dist/photon-doc-extractor.d.ts.map +1 -1
  219. package/dist/photon-doc-extractor.js +560 -32
  220. package/dist/photon-doc-extractor.js.map +1 -1
  221. package/dist/photons/maker.photon.d.ts +182 -0
  222. package/dist/photons/maker.photon.d.ts.map +1 -0
  223. package/dist/photons/maker.photon.js +504 -0
  224. package/dist/photons/maker.photon.js.map +1 -0
  225. package/dist/photons/maker.photon.ts +626 -0
  226. package/dist/photons/marketplace.photon.d.ts +110 -0
  227. package/dist/photons/marketplace.photon.d.ts.map +1 -0
  228. package/dist/photons/marketplace.photon.js +260 -0
  229. package/dist/photons/marketplace.photon.js.map +1 -0
  230. package/dist/photons/marketplace.photon.ts +378 -0
  231. package/dist/photons/tunnel.photon.d.ts +80 -0
  232. package/dist/photons/tunnel.photon.d.ts.map +1 -0
  233. package/dist/photons/tunnel.photon.js +269 -0
  234. package/dist/photons/tunnel.photon.js.map +1 -0
  235. package/dist/photons/tunnel.photon.ts +345 -0
  236. package/dist/security-scanner.d.ts.map +1 -1
  237. package/dist/security-scanner.js +18 -15
  238. package/dist/security-scanner.js.map +1 -1
  239. package/dist/serv/auth/jwt.d.ts +89 -0
  240. package/dist/serv/auth/jwt.d.ts.map +1 -0
  241. package/dist/serv/auth/jwt.js +239 -0
  242. package/dist/serv/auth/jwt.js.map +1 -0
  243. package/dist/serv/auth/oauth.d.ts +117 -0
  244. package/dist/serv/auth/oauth.d.ts.map +1 -0
  245. package/dist/serv/auth/oauth.js +395 -0
  246. package/dist/serv/auth/oauth.js.map +1 -0
  247. package/dist/serv/auth/well-known.d.ts +60 -0
  248. package/dist/serv/auth/well-known.d.ts.map +1 -0
  249. package/dist/serv/auth/well-known.js +154 -0
  250. package/dist/serv/auth/well-known.js.map +1 -0
  251. package/dist/serv/db/d1-client.d.ts +65 -0
  252. package/dist/serv/db/d1-client.d.ts.map +1 -0
  253. package/dist/serv/db/d1-client.js +137 -0
  254. package/dist/serv/db/d1-client.js.map +1 -0
  255. package/dist/serv/db/d1-stores.d.ts +62 -0
  256. package/dist/serv/db/d1-stores.d.ts.map +1 -0
  257. package/dist/serv/db/d1-stores.js +307 -0
  258. package/dist/serv/db/d1-stores.js.map +1 -0
  259. package/dist/serv/index.d.ts +114 -0
  260. package/dist/serv/index.d.ts.map +1 -0
  261. package/dist/serv/index.js +172 -0
  262. package/dist/serv/index.js.map +1 -0
  263. package/dist/serv/local.d.ts +118 -0
  264. package/dist/serv/local.d.ts.map +1 -0
  265. package/dist/serv/local.js +392 -0
  266. package/dist/serv/local.js.map +1 -0
  267. package/dist/serv/middleware/auth.d.ts +66 -0
  268. package/dist/serv/middleware/auth.d.ts.map +1 -0
  269. package/dist/serv/middleware/auth.js +178 -0
  270. package/dist/serv/middleware/auth.js.map +1 -0
  271. package/dist/serv/middleware/tenant.d.ts +94 -0
  272. package/dist/serv/middleware/tenant.d.ts.map +1 -0
  273. package/dist/serv/middleware/tenant.js +152 -0
  274. package/dist/serv/middleware/tenant.js.map +1 -0
  275. package/dist/serv/runtime/executor.d.ts +76 -0
  276. package/dist/serv/runtime/executor.d.ts.map +1 -0
  277. package/dist/serv/runtime/executor.js +105 -0
  278. package/dist/serv/runtime/executor.js.map +1 -0
  279. package/dist/serv/runtime/index.d.ts +8 -0
  280. package/dist/serv/runtime/index.d.ts.map +1 -0
  281. package/dist/serv/runtime/index.js +10 -0
  282. package/dist/serv/runtime/index.js.map +1 -0
  283. package/dist/serv/runtime/oauth-context.d.ts +121 -0
  284. package/dist/serv/runtime/oauth-context.d.ts.map +1 -0
  285. package/dist/serv/runtime/oauth-context.js +153 -0
  286. package/dist/serv/runtime/oauth-context.js.map +1 -0
  287. package/dist/serv/session/kv-store.d.ts +54 -0
  288. package/dist/serv/session/kv-store.d.ts.map +1 -0
  289. package/dist/serv/session/kv-store.js +149 -0
  290. package/dist/serv/session/kv-store.js.map +1 -0
  291. package/dist/serv/session/store.d.ts +113 -0
  292. package/dist/serv/session/store.d.ts.map +1 -0
  293. package/dist/serv/session/store.js +284 -0
  294. package/dist/serv/session/store.js.map +1 -0
  295. package/dist/serv/types/index.d.ts +147 -0
  296. package/dist/serv/types/index.d.ts.map +1 -0
  297. package/dist/serv/types/index.js +8 -0
  298. package/dist/serv/types/index.js.map +1 -0
  299. package/dist/serv/vault/token-vault.d.ts +102 -0
  300. package/dist/serv/vault/token-vault.d.ts.map +1 -0
  301. package/dist/serv/vault/token-vault.js +177 -0
  302. package/dist/serv/vault/token-vault.js.map +1 -0
  303. package/dist/server.d.ts +184 -0
  304. package/dist/server.d.ts.map +1 -1
  305. package/dist/server.js +1995 -86
  306. package/dist/server.js.map +1 -1
  307. package/dist/shared/cli-sections.d.ts +6 -0
  308. package/dist/shared/cli-sections.d.ts.map +1 -0
  309. package/dist/shared/cli-sections.js +16 -0
  310. package/dist/shared/cli-sections.js.map +1 -0
  311. package/dist/shared/cli-utils.d.ts +81 -0
  312. package/dist/shared/cli-utils.d.ts.map +1 -0
  313. package/dist/shared/cli-utils.js +174 -0
  314. package/dist/shared/cli-utils.js.map +1 -0
  315. package/dist/shared/config-docs.d.ts +6 -0
  316. package/dist/shared/config-docs.d.ts.map +1 -0
  317. package/dist/shared/config-docs.js +6 -0
  318. package/dist/shared/config-docs.js.map +1 -0
  319. package/dist/shared/error-handler.d.ts +128 -0
  320. package/dist/shared/error-handler.d.ts.map +1 -0
  321. package/dist/shared/error-handler.js +342 -0
  322. package/dist/shared/error-handler.js.map +1 -0
  323. package/dist/shared/logger.d.ts +42 -0
  324. package/dist/shared/logger.d.ts.map +1 -0
  325. package/dist/shared/logger.js +123 -0
  326. package/dist/shared/logger.js.map +1 -0
  327. package/dist/shared/performance.d.ts +65 -0
  328. package/dist/shared/performance.d.ts.map +1 -0
  329. package/dist/shared/performance.js +136 -0
  330. package/dist/shared/performance.js.map +1 -0
  331. package/dist/shared/task-runner.d.ts +2 -0
  332. package/dist/shared/task-runner.d.ts.map +1 -0
  333. package/dist/shared/task-runner.js +16 -0
  334. package/dist/shared/task-runner.js.map +1 -0
  335. package/dist/shared/validation.d.ts +6 -0
  336. package/dist/shared/validation.d.ts.map +1 -0
  337. package/dist/shared/validation.js +6 -0
  338. package/dist/shared/validation.js.map +1 -0
  339. package/dist/shared-utils.d.ts +63 -0
  340. package/dist/shared-utils.d.ts.map +1 -0
  341. package/dist/shared-utils.js +123 -0
  342. package/dist/shared-utils.js.map +1 -0
  343. package/dist/template-manager.d.ts +23 -2
  344. package/dist/template-manager.d.ts.map +1 -1
  345. package/dist/template-manager.js +176 -87
  346. package/dist/template-manager.js.map +1 -1
  347. package/dist/test-client.d.ts.map +1 -1
  348. package/dist/test-client.js +10 -8
  349. package/dist/test-client.js.map +1 -1
  350. package/dist/test-runner.d.ts +52 -0
  351. package/dist/test-runner.d.ts.map +1 -0
  352. package/dist/test-runner.js +785 -0
  353. package/dist/test-runner.js.map +1 -0
  354. package/dist/testing.d.ts +103 -0
  355. package/dist/testing.d.ts.map +1 -0
  356. package/dist/testing.js +163 -0
  357. package/dist/testing.js.map +1 -0
  358. package/dist/version-checker.d.ts.map +1 -1
  359. package/dist/version-checker.js +2 -2
  360. package/dist/version-checker.js.map +1 -1
  361. package/dist/version.d.ts +10 -0
  362. package/dist/version.d.ts.map +1 -0
  363. package/dist/version.js +21 -0
  364. package/dist/version.js.map +1 -0
  365. package/dist/watcher.d.ts +6 -3
  366. package/dist/watcher.d.ts.map +1 -1
  367. package/dist/watcher.js +49 -10
  368. package/dist/watcher.js.map +1 -1
  369. package/package.json +57 -7
  370. package/templates/cloudflare/worker.ts.template +381 -0
  371. package/templates/cloudflare/wrangler.toml.template +9 -0
  372. package/dist/base.d.ts +0 -58
  373. package/dist/base.d.ts.map +0 -1
  374. package/dist/base.js +0 -92
  375. package/dist/base.js.map +0 -1
  376. package/dist/dependency-manager.d.ts +0 -49
  377. package/dist/dependency-manager.d.ts.map +0 -1
  378. package/dist/dependency-manager.js +0 -165
  379. package/dist/dependency-manager.js.map +0 -1
  380. package/dist/registry-manager.d.ts +0 -76
  381. package/dist/registry-manager.d.ts.map +0 -1
  382. package/dist/registry-manager.js +0 -220
  383. package/dist/registry-manager.js.map +0 -1
  384. package/dist/schema-extractor.d.ts +0 -110
  385. package/dist/schema-extractor.d.ts.map +0 -1
  386. package/dist/schema-extractor.js +0 -727
  387. package/dist/schema-extractor.js.map +0 -1
  388. package/dist/test-marketplace-sources.d.ts +0 -5
  389. package/dist/test-marketplace-sources.d.ts.map +0 -1
  390. package/dist/test-marketplace-sources.js +0 -53
  391. package/dist/test-marketplace-sources.js.map +0 -1
  392. package/dist/types.d.ts +0 -109
  393. package/dist/types.d.ts.map +0 -1
  394. package/dist/types.js +0 -12
  395. package/dist/types.js.map +0 -1
@@ -0,0 +1,153 @@
1
+ /**
2
+ * OAuth Runtime Context for SERV
3
+ *
4
+ * Provides OAuth token access within photon execution context.
5
+ * Enables photons to request OAuth tokens via yield-based elicitation.
6
+ */
7
+ // ============================================================================
8
+ // MCP Elicitation Error (per MCP spec)
9
+ // ============================================================================
10
+ /**
11
+ * MCP Elicitation Error
12
+ *
13
+ * When a photon needs user authorization, this error is returned
14
+ * following the MCP elicitation protocol.
15
+ */
16
+ export class OAuthElicitationRequired extends Error {
17
+ code = 'OAUTH_ELICITATION_REQUIRED';
18
+ elicitationUrl;
19
+ elicitationId;
20
+ provider;
21
+ scopes;
22
+ constructor(options) {
23
+ super(options.message || `OAuth authorization required for ${options.provider}`);
24
+ this.name = 'OAuthElicitationRequired';
25
+ this.elicitationUrl = options.elicitationUrl;
26
+ this.elicitationId = options.elicitationId;
27
+ this.provider = options.provider;
28
+ this.scopes = options.scopes;
29
+ }
30
+ /**
31
+ * Convert to MCP error response format
32
+ */
33
+ toMCPError() {
34
+ return {
35
+ error: {
36
+ code: this.code,
37
+ message: this.message,
38
+ data: {
39
+ elicitation: {
40
+ type: 'oauth',
41
+ url: this.elicitationUrl,
42
+ id: this.elicitationId,
43
+ provider: this.provider,
44
+ scopes: this.scopes,
45
+ },
46
+ },
47
+ },
48
+ };
49
+ }
50
+ }
51
+ /**
52
+ * OAuth context for photon execution
53
+ *
54
+ * Provides a way for photons to request OAuth tokens during execution.
55
+ * Integrates with SERV's OAuth flow handler to manage grants and elicitations.
56
+ */
57
+ export class OAuthContext {
58
+ session;
59
+ photonId;
60
+ tenantId;
61
+ oauthFlow;
62
+ tokenVault;
63
+ constructor(config) {
64
+ this.session = config.session;
65
+ this.photonId = config.photonId;
66
+ this.tenantId = config.tenantId;
67
+ this.oauthFlow = config.oauthFlow;
68
+ this.tokenVault = config.tokenVault;
69
+ }
70
+ /**
71
+ * Request an OAuth token
72
+ *
73
+ * @param provider - OAuth provider ID
74
+ * @param scopes - Required scopes
75
+ * @returns Token if available, or throws OAuthElicitationRequired
76
+ */
77
+ async requestToken(provider, scopes) {
78
+ // Check for existing grant
79
+ const grantCheck = await this.oauthFlow.checkGrant(this.tenantId, this.photonId, provider, scopes, this.session.userId);
80
+ if (grantCheck.valid && grantCheck.token) {
81
+ return grantCheck.token;
82
+ }
83
+ // Need to start elicitation
84
+ const elicitation = await this.oauthFlow.startElicitation(this.session, this.photonId, provider, scopes);
85
+ throw new OAuthElicitationRequired({
86
+ elicitationUrl: elicitation.url,
87
+ elicitationId: elicitation.elicitationId,
88
+ provider,
89
+ scopes,
90
+ });
91
+ }
92
+ /**
93
+ * Handle an OAuth ask yield
94
+ *
95
+ * @param ask - The OAuth ask yield from the photon
96
+ * @returns OAuth response
97
+ */
98
+ async handleOAuthAsk(ask) {
99
+ try {
100
+ const token = await this.requestToken(ask.provider, ask.scopes);
101
+ return { success: true, token };
102
+ }
103
+ catch (error) {
104
+ if (error instanceof OAuthElicitationRequired) {
105
+ return {
106
+ success: false,
107
+ elicitationUrl: error.elicitationUrl,
108
+ elicitationId: error.elicitationId,
109
+ };
110
+ }
111
+ return {
112
+ success: false,
113
+ error: error instanceof Error ? error.message : String(error),
114
+ };
115
+ }
116
+ }
117
+ }
118
+ /**
119
+ * Create an input provider that handles OAuth asks
120
+ *
121
+ * Wraps the standard input provider to add OAuth token handling.
122
+ * When an 'oauth' ask is received, it checks for existing grants
123
+ * or initiates an elicitation flow.
124
+ */
125
+ export function createOAuthInputProvider(oauthContext, fallbackProvider) {
126
+ return async (ask) => {
127
+ // Handle OAuth asks
128
+ if ('ask' in ask && ask.ask === 'oauth') {
129
+ const oauthAsk = ask;
130
+ const response = await oauthContext.handleOAuthAsk(oauthAsk);
131
+ if (response.success && response.token) {
132
+ return response.token;
133
+ }
134
+ // Elicitation required - throw error
135
+ if (response.elicitationUrl && response.elicitationId) {
136
+ throw new OAuthElicitationRequired({
137
+ elicitationUrl: response.elicitationUrl,
138
+ elicitationId: response.elicitationId,
139
+ provider: oauthAsk.provider,
140
+ scopes: oauthAsk.scopes,
141
+ message: oauthAsk.message,
142
+ });
143
+ }
144
+ throw new Error(response.error || 'OAuth token request failed');
145
+ }
146
+ // Delegate to fallback provider for other ask types
147
+ if (fallbackProvider) {
148
+ return fallbackProvider(ask);
149
+ }
150
+ throw new Error(`Unhandled ask type: ${ask.ask}`);
151
+ };
152
+ }
153
+ //# sourceMappingURL=oauth-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-context.js","sourceRoot":"","sources":["../../../src/serv/runtime/oauth-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Cloudflare KV Session Store
3
+ *
4
+ * Uses Cloudflare KV for fast, globally distributed session storage
5
+ */
6
+ import type { Session, SessionCreateOptions } from '../types/index.js';
7
+ import type { SessionStore, SessionConfig } from './store.js';
8
+ /**
9
+ * Cloudflare KV Namespace interface
10
+ * Compatible with @cloudflare/workers-types KVNamespace
11
+ */
12
+ export interface KVNamespace {
13
+ get(key: string, options?: {
14
+ type?: 'text' | 'json' | 'arrayBuffer' | 'stream';
15
+ }): Promise<string | null>;
16
+ get(key: string, options: {
17
+ type: 'json';
18
+ }): Promise<unknown | null>;
19
+ put(key: string, value: string, options?: {
20
+ expirationTtl?: number;
21
+ metadata?: unknown;
22
+ }): Promise<void>;
23
+ delete(key: string): Promise<void>;
24
+ list(options?: {
25
+ prefix?: string;
26
+ limit?: number;
27
+ cursor?: string;
28
+ }): Promise<{
29
+ keys: Array<{
30
+ name: string;
31
+ expiration?: number;
32
+ metadata?: unknown;
33
+ }>;
34
+ list_complete: boolean;
35
+ cursor?: string;
36
+ }>;
37
+ }
38
+ export declare class KVSessionStore implements SessionStore {
39
+ private kv;
40
+ private config;
41
+ private keyPrefix;
42
+ constructor(kv: KVNamespace, config?: Partial<SessionConfig>, keyPrefix?: string);
43
+ private sessionKey;
44
+ private userSessionsKey;
45
+ create(options: SessionCreateOptions): Promise<Session>;
46
+ get(sessionId: string): Promise<Session | null>;
47
+ getByUser(tenantId: string, userId: string): Promise<Session[]>;
48
+ touch(sessionId: string): Promise<void>;
49
+ destroy(sessionId: string): Promise<void>;
50
+ destroyByUser(tenantId: string, userId: string): Promise<number>;
51
+ cleanup(): Promise<number>;
52
+ close(): Promise<void>;
53
+ }
54
+ //# sourceMappingURL=kv-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kv-store.d.ts","sourceRoot":"","sources":["../../../src/serv/session/kv-store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAM9D;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,CACD,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAA;KAAE,GAC9D,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACrE,GAAG,CACD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GACvD,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAC5E,IAAI,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QACvE,aAAa,EAAE,OAAO,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAgBD,qBAAa,cAAe,YAAW,YAAY;IACjD,OAAO,CAAC,EAAE,CAAc;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAS;gBAEd,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,SAAS,SAAa;IAMpF,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,eAAe;IAIjB,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAmCvD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAkB/C,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IA0B/D,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBvC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBzC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYhE,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAK1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Cloudflare KV Session Store
3
+ *
4
+ * Uses Cloudflare KV for fast, globally distributed session storage
5
+ */
6
+ import { randomUUID } from 'crypto';
7
+ // ============================================================================
8
+ // Configuration
9
+ // ============================================================================
10
+ const DEFAULT_CONFIG = {
11
+ defaultTtlSeconds: 15 * 60, // 15 minutes
12
+ maxTtlSeconds: 24 * 60 * 60, // 24 hours
13
+ cleanupIntervalMs: 5 * 60 * 1000, // Not used - KV handles TTL
14
+ };
15
+ // ============================================================================
16
+ // KV Session Store
17
+ // ============================================================================
18
+ export class KVSessionStore {
19
+ kv;
20
+ config;
21
+ keyPrefix;
22
+ constructor(kv, config, keyPrefix = 'session:') {
23
+ this.kv = kv;
24
+ this.config = { ...DEFAULT_CONFIG, ...config };
25
+ this.keyPrefix = keyPrefix;
26
+ }
27
+ sessionKey(id) {
28
+ return `${this.keyPrefix}${id}`;
29
+ }
30
+ userSessionsKey(tenantId, userId) {
31
+ return `${this.keyPrefix}user:${tenantId}:${userId}`;
32
+ }
33
+ async create(options) {
34
+ const now = new Date();
35
+ const ttl = Math.min(options.ttlSeconds ?? this.config.defaultTtlSeconds, this.config.maxTtlSeconds);
36
+ const session = {
37
+ id: randomUUID(),
38
+ tenantId: options.tenantId,
39
+ userId: options.userId,
40
+ clientId: options.clientId,
41
+ clientFingerprint: options.clientFingerprint,
42
+ createdAt: now,
43
+ expiresAt: new Date(now.getTime() + ttl * 1000),
44
+ lastActivityAt: now,
45
+ };
46
+ // Store session with TTL
47
+ await this.kv.put(this.sessionKey(session.id), JSON.stringify(session), { expirationTtl: ttl });
48
+ // Track user sessions (if user is provided)
49
+ if (options.userId) {
50
+ const userKey = this.userSessionsKey(options.tenantId, options.userId);
51
+ const existing = (await this.kv.get(userKey, { type: 'json' }));
52
+ const sessionIds = existing ?? [];
53
+ sessionIds.push(session.id);
54
+ await this.kv.put(userKey, JSON.stringify(sessionIds), {
55
+ expirationTtl: this.config.maxTtlSeconds,
56
+ });
57
+ }
58
+ return session;
59
+ }
60
+ async get(sessionId) {
61
+ const data = await this.kv.get(this.sessionKey(sessionId));
62
+ if (!data)
63
+ return null;
64
+ const session = JSON.parse(data);
65
+ session.createdAt = new Date(session.createdAt);
66
+ session.expiresAt = new Date(session.expiresAt);
67
+ session.lastActivityAt = new Date(session.lastActivityAt);
68
+ // KV TTL should handle expiry, but double-check
69
+ if (session.expiresAt.getTime() < Date.now()) {
70
+ await this.destroy(sessionId);
71
+ return null;
72
+ }
73
+ return session;
74
+ }
75
+ async getByUser(tenantId, userId) {
76
+ const userKey = this.userSessionsKey(tenantId, userId);
77
+ const sessionIds = (await this.kv.get(userKey, { type: 'json' }));
78
+ if (!sessionIds)
79
+ return [];
80
+ const sessions = [];
81
+ const validIds = [];
82
+ for (const id of sessionIds) {
83
+ const session = await this.get(id);
84
+ if (session) {
85
+ sessions.push(session);
86
+ validIds.push(id);
87
+ }
88
+ }
89
+ // Clean up stale references if needed
90
+ if (validIds.length !== sessionIds.length) {
91
+ await this.kv.put(userKey, JSON.stringify(validIds), {
92
+ expirationTtl: this.config.maxTtlSeconds,
93
+ });
94
+ }
95
+ return sessions;
96
+ }
97
+ async touch(sessionId) {
98
+ const session = await this.get(sessionId);
99
+ if (!session)
100
+ return;
101
+ const now = new Date();
102
+ const ttl = this.config.defaultTtlSeconds;
103
+ const maxExpiry = new Date(session.createdAt.getTime() + this.config.maxTtlSeconds * 1000);
104
+ const newExpiry = new Date(Math.min(now.getTime() + ttl * 1000, maxExpiry.getTime()));
105
+ const remainingTtl = Math.floor((newExpiry.getTime() - now.getTime()) / 1000);
106
+ session.lastActivityAt = now;
107
+ session.expiresAt = newExpiry;
108
+ await this.kv.put(this.sessionKey(sessionId), JSON.stringify(session), {
109
+ expirationTtl: remainingTtl,
110
+ });
111
+ }
112
+ async destroy(sessionId) {
113
+ const session = await this.get(sessionId);
114
+ if (session?.userId) {
115
+ const userKey = this.userSessionsKey(session.tenantId, session.userId);
116
+ const sessionIds = (await this.kv.get(userKey, { type: 'json' }));
117
+ if (sessionIds) {
118
+ const filtered = sessionIds.filter((id) => id !== sessionId);
119
+ if (filtered.length > 0) {
120
+ await this.kv.put(userKey, JSON.stringify(filtered), {
121
+ expirationTtl: this.config.maxTtlSeconds,
122
+ });
123
+ }
124
+ else {
125
+ await this.kv.delete(userKey);
126
+ }
127
+ }
128
+ }
129
+ await this.kv.delete(this.sessionKey(sessionId));
130
+ }
131
+ async destroyByUser(tenantId, userId) {
132
+ const userKey = this.userSessionsKey(tenantId, userId);
133
+ const sessionIds = (await this.kv.get(userKey, { type: 'json' }));
134
+ if (!sessionIds)
135
+ return 0;
136
+ const count = sessionIds.length;
137
+ await Promise.all(sessionIds.map((id) => this.kv.delete(this.sessionKey(id))));
138
+ await this.kv.delete(userKey);
139
+ return count;
140
+ }
141
+ async cleanup() {
142
+ // KV handles TTL-based cleanup automatically
143
+ return 0;
144
+ }
145
+ async close() {
146
+ // No-op for KV
147
+ }
148
+ }
149
+ //# sourceMappingURL=kv-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kv-store.js","sourceRoot":"","sources":["../../../src/serv/session/kv-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Session Store Interface and Implementations
3
+ *
4
+ * Provides session management for SERV with support for
5
+ * in-memory (development) and Redis (production) backends
6
+ */
7
+ import type { Session, SessionCreateOptions } from '../types/index.js';
8
+ export interface SessionStore {
9
+ /**
10
+ * Create a new session
11
+ */
12
+ create(options: SessionCreateOptions): Promise<Session>;
13
+ /**
14
+ * Get session by ID
15
+ */
16
+ get(sessionId: string): Promise<Session | null>;
17
+ /**
18
+ * Get sessions by user ID within a tenant
19
+ */
20
+ getByUser(tenantId: string, userId: string): Promise<Session[]>;
21
+ /**
22
+ * Update last activity time (sliding expiration)
23
+ */
24
+ touch(sessionId: string): Promise<void>;
25
+ /**
26
+ * Invalidate a session
27
+ */
28
+ destroy(sessionId: string): Promise<void>;
29
+ /**
30
+ * Invalidate all sessions for a user in a tenant
31
+ */
32
+ destroyByUser(tenantId: string, userId: string): Promise<number>;
33
+ /**
34
+ * Clean up expired sessions
35
+ */
36
+ cleanup(): Promise<number>;
37
+ /**
38
+ * Close the store connection
39
+ */
40
+ close(): Promise<void>;
41
+ }
42
+ export interface SessionConfig {
43
+ /** Default session TTL in seconds (default: 15 minutes) */
44
+ defaultTtlSeconds: number;
45
+ /** Maximum session TTL in seconds (default: 24 hours) */
46
+ maxTtlSeconds: number;
47
+ /** Cleanup interval in milliseconds (default: 5 minutes) */
48
+ cleanupIntervalMs: number;
49
+ }
50
+ export declare class MemorySessionStore implements SessionStore {
51
+ private sessions;
52
+ private userSessions;
53
+ private cleanupTimer?;
54
+ private config;
55
+ constructor(config?: Partial<SessionConfig>);
56
+ create(options: SessionCreateOptions): Promise<Session>;
57
+ get(sessionId: string): Promise<Session | null>;
58
+ getByUser(tenantId: string, userId: string): Promise<Session[]>;
59
+ touch(sessionId: string): Promise<void>;
60
+ destroy(sessionId: string): Promise<void>;
61
+ destroyByUser(tenantId: string, userId: string): Promise<number>;
62
+ cleanup(): Promise<number>;
63
+ close(): Promise<void>;
64
+ private startCleanup;
65
+ }
66
+ export interface RedisSessionStoreOptions {
67
+ /** Redis client instance or connection URL */
68
+ redis: RedisClient | string;
69
+ /** Key prefix for session storage */
70
+ keyPrefix?: string;
71
+ /** Session configuration */
72
+ config?: Partial<SessionConfig>;
73
+ }
74
+ export interface RedisClient {
75
+ get(key: string): Promise<string | null>;
76
+ set(key: string, value: string, options?: {
77
+ EX?: number;
78
+ }): Promise<unknown>;
79
+ del(key: string | string[]): Promise<number>;
80
+ keys(pattern: string): Promise<string[]>;
81
+ sadd(key: string, ...members: string[]): Promise<number>;
82
+ srem(key: string, ...members: string[]): Promise<number>;
83
+ smembers(key: string): Promise<string[]>;
84
+ expire(key: string, seconds: number): Promise<number>;
85
+ quit(): Promise<unknown>;
86
+ }
87
+ export declare class RedisSessionStore implements SessionStore {
88
+ private redis;
89
+ private keyPrefix;
90
+ private config;
91
+ private cleanupTimer?;
92
+ constructor(options: RedisSessionStoreOptions);
93
+ private sessionKey;
94
+ private userSessionsKey;
95
+ create(options: SessionCreateOptions): Promise<Session>;
96
+ get(sessionId: string): Promise<Session | null>;
97
+ getByUser(tenantId: string, userId: string): Promise<Session[]>;
98
+ touch(sessionId: string): Promise<void>;
99
+ destroy(sessionId: string): Promise<void>;
100
+ destroyByUser(tenantId: string, userId: string): Promise<number>;
101
+ cleanup(): Promise<number>;
102
+ close(): Promise<void>;
103
+ private startCleanup;
104
+ }
105
+ export type SessionStoreType = 'memory' | 'redis' | 'kv';
106
+ export interface CreateSessionStoreOptions {
107
+ type: SessionStoreType;
108
+ redis?: RedisClient;
109
+ kv?: unknown;
110
+ config?: Partial<SessionConfig>;
111
+ }
112
+ export declare function createSessionStore(options: CreateSessionStoreOptions): SessionStore;
113
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/serv/session/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAMvE,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAExD;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAEhD;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAEhE;;OAEG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC;;OAEG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEjE;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3B;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAMD,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yDAAyD;IACzD,aAAa,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAYD,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,GAAE,OAAO,CAAC,aAAa,CAAM;IAKzC,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAgCvD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAa/C,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAa/D,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAavC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASzC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAahE,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAc1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,OAAO,CAAC,YAAY;CAKrB;AAMD,MAAM,WAAW,wBAAwB;IACvC,8CAA8C;IAC9C,KAAK,EAAE,WAAW,GAAG,MAAM,CAAC;IAC5B,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CACjC;AAGD,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7E,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B;AAED,qBAAa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,YAAY,CAAC,CAAiB;gBAE1B,OAAO,EAAE,wBAAwB;IAU7C,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,eAAe;IAIjB,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IA8BvD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAkB/C,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAiB/D,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBvC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASzC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAahE,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAM1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,OAAO,CAAC,YAAY;CAoBrB;AAMD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC;AAEzD,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CACjC;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,YAAY,CAkBnF"}