@pyric/cli 0.1.0-alpha.20 → 0.1.0-alpha.21

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 (491) hide show
  1. package/README.md +64 -89
  2. package/dist/assurance/.generated/conformance-verdicts.d.ts +68 -1
  3. package/dist/assurance/.generated/conformance-verdicts.d.ts.map +1 -1
  4. package/dist/assurance/.generated/conformance-verdicts.js +68 -1
  5. package/dist/assurance/.generated/conformance-verdicts.js.map +1 -1
  6. package/dist/bridge/client/dispatch.d.ts +25 -19
  7. package/dist/bridge/client/dispatch.d.ts.map +1 -1
  8. package/dist/bridge/client/dispatch.js +41 -48
  9. package/dist/bridge/client/dispatch.js.map +1 -1
  10. package/dist/bridge/client/tool-family-factories.d.ts +26 -0
  11. package/dist/bridge/client/tool-family-factories.d.ts.map +1 -0
  12. package/dist/bridge/client/tool-family-factories.js +10 -0
  13. package/dist/bridge/client/tool-family-factories.js.map +1 -0
  14. package/dist/bridge/server/mcp-contract.d.ts +7 -6
  15. package/dist/bridge/server/mcp-contract.d.ts.map +1 -1
  16. package/dist/bridge/server/mcp-contract.js +9 -48
  17. package/dist/bridge/server/mcp-contract.js.map +1 -1
  18. package/dist/bridge/server/peer.d.ts +11 -1
  19. package/dist/bridge/server/peer.d.ts.map +1 -1
  20. package/dist/bridge/server/peer.js +22 -1
  21. package/dist/bridge/server/peer.js.map +1 -1
  22. package/dist/bridge/server/tool-family-factories.d.ts +30 -0
  23. package/dist/bridge/server/tool-family-factories.d.ts.map +1 -0
  24. package/dist/bridge/server/tool-family-factories.js +22 -0
  25. package/dist/bridge/server/tool-family-factories.js.map +1 -0
  26. package/dist/bridge/server/tool-metadata.d.ts +17 -18
  27. package/dist/bridge/server/tool-metadata.d.ts.map +1 -1
  28. package/dist/bridge/server/tool-metadata.js +24 -59
  29. package/dist/bridge/server/tool-metadata.js.map +1 -1
  30. package/dist/bridge/tool-families.d.ts +48 -0
  31. package/dist/bridge/tool-families.d.ts.map +1 -0
  32. package/dist/bridge/tool-families.generated.d.ts +32 -0
  33. package/dist/bridge/tool-families.generated.d.ts.map +1 -0
  34. package/dist/bridge/tool-families.generated.js +15 -0
  35. package/dist/bridge/tool-families.generated.js.map +1 -0
  36. package/dist/bridge/tool-families.js +51 -0
  37. package/dist/bridge/tool-families.js.map +1 -0
  38. package/dist/bridge/tool-family-records/conformance.d.ts +7 -0
  39. package/dist/bridge/tool-family-records/conformance.d.ts.map +1 -0
  40. package/dist/bridge/tool-family-records/conformance.js +6 -0
  41. package/dist/bridge/tool-family-records/conformance.js.map +1 -0
  42. package/dist/bridge/tool-family-records/firestore-data.d.ts +7 -0
  43. package/dist/bridge/tool-family-records/firestore-data.d.ts.map +1 -0
  44. package/dist/bridge/tool-family-records/firestore-data.js +15 -0
  45. package/dist/bridge/tool-family-records/firestore-data.js.map +1 -0
  46. package/dist/bridge/tool-family-records/firestore-inspect.d.ts +7 -0
  47. package/dist/bridge/tool-family-records/firestore-inspect.d.ts.map +1 -0
  48. package/dist/bridge/tool-family-records/firestore-inspect.js +6 -0
  49. package/dist/bridge/tool-family-records/firestore-inspect.js.map +1 -0
  50. package/dist/bridge/tool-family-records/firestore-rules.d.ts +7 -0
  51. package/dist/bridge/tool-family-records/firestore-rules.d.ts.map +1 -0
  52. package/dist/bridge/tool-family-records/firestore-rules.js +15 -0
  53. package/dist/bridge/tool-family-records/firestore-rules.js.map +1 -0
  54. package/dist/bridge/tool-family-records/firestore-simulator.d.ts +7 -0
  55. package/dist/bridge/tool-family-records/firestore-simulator.d.ts.map +1 -0
  56. package/dist/bridge/tool-family-records/firestore-simulator.js +16 -0
  57. package/dist/bridge/tool-family-records/firestore-simulator.js.map +1 -0
  58. package/dist/bridge/tool-family-records/rtdb-inspection.d.ts +7 -0
  59. package/dist/bridge/tool-family-records/rtdb-inspection.d.ts.map +1 -0
  60. package/dist/bridge/tool-family-records/rtdb-inspection.js +6 -0
  61. package/dist/bridge/tool-family-records/rtdb-inspection.js.map +1 -0
  62. package/dist/bundler/externals.d.ts +37 -0
  63. package/dist/bundler/externals.d.ts.map +1 -0
  64. package/dist/bundler/externals.js +52 -0
  65. package/dist/bundler/externals.js.map +1 -0
  66. package/dist/bundler/index.d.ts +17 -0
  67. package/dist/bundler/index.d.ts.map +1 -0
  68. package/dist/bundler/index.js +17 -0
  69. package/dist/bundler/index.js.map +1 -0
  70. package/dist/cli/inlined-sdk-scanner.d.ts +6 -0
  71. package/dist/cli/inlined-sdk-scanner.d.ts.map +1 -0
  72. package/dist/cli/inlined-sdk-scanner.js +82 -0
  73. package/dist/cli/inlined-sdk-scanner.js.map +1 -0
  74. package/dist/cli/sandbox-interlock.d.ts +97 -0
  75. package/dist/cli/sandbox-interlock.d.ts.map +1 -0
  76. package/dist/cli/sandbox-interlock.js +112 -0
  77. package/dist/cli/sandbox-interlock.js.map +1 -0
  78. package/dist/cli/sandbox-runner.d.ts +20 -12
  79. package/dist/cli/sandbox-runner.d.ts.map +1 -1
  80. package/dist/cli/sandbox-runner.js +24 -21
  81. package/dist/cli/sandbox-runner.js.map +1 -1
  82. package/dist/cli/serve.d.ts +6 -10
  83. package/dist/cli/serve.d.ts.map +1 -1
  84. package/dist/cli/serve.js +57 -77
  85. package/dist/cli/serve.js.map +1 -1
  86. package/dist/cli/unsupported-runtime.d.ts +27 -0
  87. package/dist/cli/unsupported-runtime.d.ts.map +1 -0
  88. package/dist/cli/unsupported-runtime.js +63 -0
  89. package/dist/cli/unsupported-runtime.js.map +1 -0
  90. package/dist/conformance/.generated/can-i-use-browser.d.ts +1 -1
  91. package/dist/conformance/.generated/can-i-use-browser.d.ts.map +1 -1
  92. package/dist/conformance/.generated/can-i-use-browser.js +1 -1
  93. package/dist/conformance/.generated/can-i-use-browser.js.map +1 -1
  94. package/dist/conformance/.generated/can-i-use.d.ts +1 -1
  95. package/dist/conformance/.generated/can-i-use.d.ts.map +1 -1
  96. package/dist/conformance/.generated/can-i-use.js +1 -1
  97. package/dist/conformance/.generated/can-i-use.js.map +1 -1
  98. package/dist/conformance/.generated/conformance-docs.d.ts.map +1 -1
  99. package/dist/conformance/.generated/conformance-docs.js +1 -1
  100. package/dist/conformance/.generated/conformance-docs.js.map +1 -1
  101. package/dist/functions-rtdb/child.d.ts +37 -0
  102. package/dist/functions-rtdb/child.d.ts.map +1 -1
  103. package/dist/functions-rtdb/child.js +90 -21
  104. package/dist/functions-rtdb/child.js.map +1 -1
  105. package/dist/functions-rtdb/development-runtime.d.ts +3 -0
  106. package/dist/functions-rtdb/development-runtime.d.ts.map +1 -1
  107. package/dist/functions-rtdb/development-runtime.js +1 -0
  108. package/dist/functions-rtdb/development-runtime.js.map +1 -1
  109. package/dist/google-endpoints.d.ts +67 -0
  110. package/dist/google-endpoints.d.ts.map +1 -0
  111. package/dist/google-endpoints.js +119 -0
  112. package/dist/google-endpoints.js.map +1 -0
  113. package/dist/next/runtime-env.d.ts.map +1 -1
  114. package/dist/next/runtime-env.js +5 -0
  115. package/dist/next/runtime-env.js.map +1 -1
  116. package/dist/next/with-pyric.d.ts +1 -1
  117. package/dist/next/with-pyric.js +1 -1
  118. package/dist/register/beacon.d.ts +69 -0
  119. package/dist/register/beacon.d.ts.map +1 -0
  120. package/dist/register/beacon.js +199 -0
  121. package/dist/register/beacon.js.map +1 -0
  122. package/dist/register/index.d.ts.map +1 -1
  123. package/dist/register/index.js +65 -6
  124. package/dist/register/index.js.map +1 -1
  125. package/dist/register/net-guard.d.ts +110 -0
  126. package/dist/register/net-guard.d.ts.map +1 -0
  127. package/dist/register/net-guard.js +462 -0
  128. package/dist/register/net-guard.js.map +1 -0
  129. package/dist/serve/ai-diagnostics-relay.d.ts +63 -0
  130. package/dist/serve/ai-diagnostics-relay.d.ts.map +1 -0
  131. package/dist/serve/ai-diagnostics-relay.js +125 -0
  132. package/dist/serve/ai-diagnostics-relay.js.map +1 -0
  133. package/dist/serve/ai-proxy.d.ts +92 -0
  134. package/dist/serve/ai-proxy.d.ts.map +1 -0
  135. package/dist/serve/ai-proxy.js +269 -0
  136. package/dist/serve/ai-proxy.js.map +1 -0
  137. package/dist/serve/ai-status.d.ts +44 -0
  138. package/dist/serve/ai-status.d.ts.map +1 -0
  139. package/dist/serve/ai-status.js +77 -0
  140. package/dist/serve/ai-status.js.map +1 -0
  141. package/dist/serve/ai-terminal-blocks.d.ts +97 -0
  142. package/dist/serve/ai-terminal-blocks.d.ts.map +1 -0
  143. package/dist/serve/ai-terminal-blocks.js +128 -0
  144. package/dist/serve/ai-terminal-blocks.js.map +1 -0
  145. package/dist/serve/ai-terminal-text.d.ts +36 -0
  146. package/dist/serve/ai-terminal-text.d.ts.map +1 -0
  147. package/dist/serve/ai-terminal-text.js +48 -0
  148. package/dist/serve/ai-terminal-text.js.map +1 -0
  149. package/dist/serve/beacon-route.d.ts +53 -0
  150. package/dist/serve/beacon-route.d.ts.map +1 -0
  151. package/dist/serve/beacon-route.js +101 -0
  152. package/dist/serve/beacon-route.js.map +1 -0
  153. package/dist/serve/entries/active-auth-registry.d.ts +16 -0
  154. package/dist/serve/entries/active-auth-registry.d.ts.map +1 -0
  155. package/dist/serve/entries/active-auth-registry.js +48 -0
  156. package/dist/serve/entries/active-auth-registry.js.map +1 -0
  157. package/dist/serve/entries/active-auth.d.ts +18 -0
  158. package/dist/serve/entries/active-auth.d.ts.map +1 -0
  159. package/dist/serve/entries/active-auth.js +84 -0
  160. package/dist/serve/entries/active-auth.js.map +1 -0
  161. package/dist/serve/entries/auth-helper-core.d.ts +1 -0
  162. package/dist/serve/entries/auth-helper-core.d.ts.map +1 -1
  163. package/dist/serve/entries/auth-helper-core.js +4 -0
  164. package/dist/serve/entries/auth-helper-core.js.map +1 -1
  165. package/dist/serve/entries/auth-helper-dom.d.ts.map +1 -1
  166. package/dist/serve/entries/auth-helper-dom.js +28 -2
  167. package/dist/serve/entries/auth-helper-dom.js.map +1 -1
  168. package/dist/serve/entries/auth.d.ts.map +1 -1
  169. package/dist/serve/entries/auth.js +8 -0
  170. package/dist/serve/entries/auth.js.map +1 -1
  171. package/dist/serve/entries/bridge-url.d.ts +1 -1
  172. package/dist/serve/entries/bridge-url.js +1 -1
  173. package/dist/serve/entries/init.d.ts.map +1 -1
  174. package/dist/serve/entries/init.js +70 -4
  175. package/dist/serve/entries/init.js.map +1 -1
  176. package/dist/serve/entries/runtime.d.ts.map +1 -1
  177. package/dist/serve/entries/runtime.js +9 -0
  178. package/dist/serve/entries/runtime.js.map +1 -1
  179. package/dist/serve/namespace.d.ts +14 -5
  180. package/dist/serve/namespace.d.ts.map +1 -1
  181. package/dist/serve/namespace.js +57 -124
  182. package/dist/serve/namespace.js.map +1 -1
  183. package/dist/serve/runtime/chip-config.d.ts.map +1 -1
  184. package/dist/serve/runtime/chip-config.js +16 -2
  185. package/dist/serve/runtime/chip-config.js.map +1 -1
  186. package/dist/serve/runtime/chip-dialog.d.ts +18 -0
  187. package/dist/serve/runtime/chip-dialog.d.ts.map +1 -0
  188. package/dist/serve/runtime/chip-dialog.js +315 -0
  189. package/dist/serve/runtime/chip-dialog.js.map +1 -0
  190. package/dist/serve/runtime/chip-install.d.ts +2 -0
  191. package/dist/serve/runtime/chip-install.d.ts.map +1 -1
  192. package/dist/serve/runtime/chip-install.js +9 -4
  193. package/dist/serve/runtime/chip-install.js.map +1 -1
  194. package/dist/serve/runtime/chip-user-search.d.ts +16 -0
  195. package/dist/serve/runtime/chip-user-search.d.ts.map +1 -0
  196. package/dist/serve/runtime/chip-user-search.js +354 -0
  197. package/dist/serve/runtime/chip-user-search.js.map +1 -0
  198. package/dist/serve/runtime/chip.d.ts +10 -0
  199. package/dist/serve/runtime/chip.d.ts.map +1 -1
  200. package/dist/serve/runtime/chip.js +118 -15
  201. package/dist/serve/runtime/chip.js.map +1 -1
  202. package/dist/serve/runtime/identity.d.ts +17 -0
  203. package/dist/serve/runtime/identity.d.ts.map +1 -0
  204. package/dist/serve/runtime/identity.js +10 -0
  205. package/dist/serve/runtime/identity.js.map +1 -0
  206. package/dist/serve/sandbox-session.d.ts +7 -0
  207. package/dist/serve/sandbox-session.d.ts.map +1 -1
  208. package/dist/serve/sandbox-session.js +2 -0
  209. package/dist/serve/sandbox-session.js.map +1 -1
  210. package/dist/serve/site-ui/_astro/{RulesCodeEditor.XtDmHOlN.js → RulesCodeEditor.DsTAsKIa.js} +1 -1
  211. package/dist/serve/site-ui/_astro/app.BOr2kwae.js +115 -0
  212. package/dist/serve/site-ui/_astro/app.DhAcImFD.js +1 -0
  213. package/dist/serve/site-ui/_astro/{chess-showcase.B72XYeoh.js → chess-showcase.Bn_pP6UJ.js} +2 -2
  214. package/dist/serve/site-ui/_astro/{example-runtime.C25_lx6Z.js → example-runtime.CXopTGv7.js} +1 -1
  215. package/dist/serve/site-ui/_astro/sandbox-controls.rOuZTOUG.js +510 -0
  216. package/dist/serve/site-ui/_astro/{seed.Co0yUJY5.js → seed.03a08f9t.js} +2 -2
  217. package/dist/serve/site-ui/_astro/writes.BsPBG3dp.js +653 -0
  218. package/dist/serve/site-ui/auth/index.html +1 -1
  219. package/dist/serve/site-ui/docs/_rhythm/index.html +1 -1
  220. package/dist/serve/site-ui/docs/agent/set-up-your-agent/index.html +1 -1
  221. package/dist/serve/site-ui/docs/agent/watch-and-review/index.html +1 -1
  222. package/dist/serve/site-ui/docs/agent/work-with-an-agent/index.html +1 -1
  223. package/dist/serve/site-ui/docs/ai-compat/index.html +1 -1
  224. package/dist/serve/site-ui/docs/api-reference/index.html +8 -1
  225. package/dist/serve/site-ui/docs/api-reference.md +7 -0
  226. package/dist/serve/site-ui/docs/app-compat/index.html +1 -1
  227. package/dist/serve/site-ui/docs/auth-compat/index.html +3 -3
  228. package/dist/serve/site-ui/docs/auth-compat.md +2 -2
  229. package/dist/serve/site-ui/docs/build/ai-logic/index.html +6 -1
  230. package/dist/serve/site-ui/docs/build/ai-logic.md +6 -0
  231. package/dist/serve/site-ui/docs/build/authentication/index.html +1 -1
  232. package/dist/serve/site-ui/docs/build/cloud-firestore/index.html +1 -1
  233. package/dist/serve/site-ui/docs/build/cloud-messaging/index.html +1 -1
  234. package/dist/serve/site-ui/docs/build/cloud-storage/index.html +1 -1
  235. package/dist/serve/site-ui/docs/build/realtime-database/index.html +1 -1
  236. package/dist/serve/site-ui/docs/conformance-scores/index.html +6 -2
  237. package/dist/serve/site-ui/docs/conformance-scores.md +5 -1
  238. package/dist/serve/site-ui/docs/create-pyric-reference-api/index.html +1 -1
  239. package/dist/serve/site-ui/docs/database-compat/index.html +44 -44
  240. package/dist/serve/site-ui/docs/database-compat.md +43 -43
  241. package/dist/serve/site-ui/docs/examples/chess/index.html +1 -1
  242. package/dist/serve/site-ui/docs/examples/index.html +1 -1
  243. package/dist/serve/site-ui/docs/firestore-compat/index.html +4 -4
  244. package/dist/serve/site-ui/docs/firestore-compat.md +3 -3
  245. package/dist/serve/site-ui/docs/firestore-flutter-compat/index.html +319 -0
  246. package/dist/serve/site-ui/docs/firestore-flutter-compat.md +344 -0
  247. package/dist/serve/site-ui/docs/functions-rtdb-compat/index.html +1 -1
  248. package/dist/serve/site-ui/docs/get-started/backend-bundlers/index.html +105 -0
  249. package/dist/serve/site-ui/docs/get-started/backend-bundlers.md +165 -0
  250. package/dist/serve/site-ui/docs/get-started/how-the-swap-works/index.html +1 -1
  251. package/dist/serve/site-ui/docs/get-started/nextjs/index.html +1 -1
  252. package/dist/serve/site-ui/docs/get-started/start-building/index.html +1 -1
  253. package/dist/serve/site-ui/docs/get-started/vite/index.html +1 -1
  254. package/dist/serve/site-ui/docs/index.json +2967 -1482
  255. package/dist/serve/site-ui/docs/messaging-compat/index.html +1 -1
  256. package/dist/serve/site-ui/docs/observe/resolve-runtime-status/index.html +1 -1
  257. package/dist/serve/site-ui/docs/observe/see-whats-happening/index.html +1 -1
  258. package/dist/serve/site-ui/docs/observe/shape-your-data/index.html +1 -1
  259. package/dist/serve/site-ui/docs/overview/index.html +1 -1
  260. package/dist/serve/site-ui/docs/pyric-admin-app-reference-api/index.html +1 -1
  261. package/dist/serve/site-ui/docs/pyric-admin-auth-reference-api/index.html +1 -1
  262. package/dist/serve/site-ui/docs/pyric-admin-database-reference-api/index.html +1 -1
  263. package/dist/serve/site-ui/docs/pyric-admin-firestore-reference-api/index.html +1 -1
  264. package/dist/serve/site-ui/docs/pyric-admin-messaging-reference-api/index.html +1 -1
  265. package/dist/serve/site-ui/docs/pyric-admin-reference-api/index.html +1 -1
  266. package/dist/serve/site-ui/docs/pyric-admin-storage-reference-api/index.html +1 -1
  267. package/dist/serve/site-ui/docs/pyric-ai-reference-api/index.html +1 -1
  268. package/dist/serve/site-ui/docs/pyric-ai-scripting-reference-api/index.html +1 -1
  269. package/dist/serve/site-ui/docs/pyric-analytics-reference-api/index.html +124 -0
  270. package/dist/serve/site-ui/docs/pyric-analytics-reference-api.md +287 -0
  271. package/dist/serve/site-ui/docs/pyric-app-check-reference-api/index.html +87 -0
  272. package/dist/serve/site-ui/docs/pyric-app-check-reference-api.md +199 -0
  273. package/dist/serve/site-ui/docs/pyric-app-reference-api/index.html +1 -1
  274. package/dist/serve/site-ui/docs/pyric-auth-reference-api/index.html +6 -2
  275. package/dist/serve/site-ui/docs/pyric-auth-reference-api.md +2 -1
  276. package/dist/serve/site-ui/docs/pyric-cli-assurance-browser-reference-api/index.html +1 -1
  277. package/dist/serve/site-ui/docs/pyric-cli-assurance-reference-api/index.html +1 -1
  278. package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api/index.html +2 -2
  279. package/dist/serve/site-ui/docs/pyric-cli-bridge-client-reference-api.md +1 -1
  280. package/dist/serve/site-ui/docs/pyric-cli-bridge-reference-api/index.html +1 -1
  281. package/dist/serve/site-ui/docs/pyric-cli-bundler-reference-api/index.html +56 -0
  282. package/dist/serve/site-ui/docs/pyric-cli-bundler-reference-api.md +72 -0
  283. package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api/index.html +2 -1
  284. package/dist/serve/site-ui/docs/pyric-cli-conformance-browser-reference-api.md +1 -0
  285. package/dist/serve/site-ui/docs/pyric-cli-conformance-docs-reference-api/index.html +1 -1
  286. package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api/index.html +2 -1
  287. package/dist/serve/site-ui/docs/pyric-cli-conformance-reference-api.md +1 -0
  288. package/dist/serve/site-ui/docs/pyric-cli-credentials-node-reference-api/index.html +1 -1
  289. package/dist/serve/site-ui/docs/pyric-cli-discover-reference-api/index.html +1 -1
  290. package/dist/serve/site-ui/docs/pyric-cli-next-reference-api/index.html +2 -2
  291. package/dist/serve/site-ui/docs/pyric-cli-next-reference-api.md +1 -1
  292. package/dist/serve/site-ui/docs/pyric-cli-register-app-bridge-reference-api/index.html +1 -1
  293. package/dist/serve/site-ui/docs/pyric-cli-register-reference-api/index.html +1 -1
  294. package/dist/serve/site-ui/docs/pyric-cli-remote-reference-api/index.html +34 -9
  295. package/dist/serve/site-ui/docs/pyric-cli-remote-reference-api.md +16 -8
  296. package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api/index.html +133 -93
  297. package/dist/serve/site-ui/docs/pyric-cli-serve-worker-reference-api.md +61 -1
  298. package/dist/serve/site-ui/docs/pyric-cli-verify-reference-api/index.html +2 -2
  299. package/dist/serve/site-ui/docs/pyric-cli-verify-reference-api.md +1 -1
  300. package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api/index.html +2 -2
  301. package/dist/serve/site-ui/docs/pyric-cli-vite-reference-api.md +2 -2
  302. package/dist/serve/site-ui/docs/pyric-database-reference-api/index.html +2 -2
  303. package/dist/serve/site-ui/docs/pyric-database-reference-api.md +1 -1
  304. package/dist/serve/site-ui/docs/pyric-firestore-lite-reference-api/index.html +559 -0
  305. package/dist/serve/site-ui/docs/pyric-firestore-lite-reference-api.md +1240 -0
  306. package/dist/serve/site-ui/docs/pyric-firestore-reference-api/index.html +40 -11
  307. package/dist/serve/site-ui/docs/pyric-firestore-reference-api.md +18 -8
  308. package/dist/serve/site-ui/docs/pyric-functions-reference-api/index.html +67 -0
  309. package/dist/serve/site-ui/docs/pyric-functions-reference-api.md +149 -0
  310. package/dist/serve/site-ui/docs/pyric-messaging-reference-api/index.html +1 -1
  311. package/dist/serve/site-ui/docs/pyric-messaging-sw-reference-api/index.html +1 -1
  312. package/dist/serve/site-ui/docs/pyric-performance-reference-api/index.html +35 -0
  313. package/dist/serve/site-ui/docs/pyric-performance-reference-api.md +69 -0
  314. package/dist/serve/site-ui/docs/pyric-remote-config-reference-api/index.html +132 -0
  315. package/dist/serve/site-ui/docs/pyric-remote-config-reference-api.md +307 -0
  316. package/dist/serve/site-ui/docs/pyric-rules-reference-api/index.html +1 -1
  317. package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api/index.html +52 -17
  318. package/dist/serve/site-ui/docs/pyric-sandbox-database-reference-api.md +48 -9
  319. package/dist/serve/site-ui/docs/pyric-sandbox-firestore-reference-api/index.html +1 -1
  320. package/dist/serve/site-ui/docs/pyric-sandbox-reference-api/index.html +239 -49
  321. package/dist/serve/site-ui/docs/pyric-sandbox-reference-api.md +148 -31
  322. package/dist/serve/site-ui/docs/pyric-storage-reference-api/index.html +22 -4
  323. package/dist/serve/site-ui/docs/pyric-storage-reference-api.md +24 -2
  324. package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api/index.html +26 -96
  325. package/dist/serve/site-ui/docs/pyric-ui-agents-reference-api.md +20 -51
  326. package/dist/serve/site-ui/docs/pyric-ui-auth-hooks-reference-api/index.html +1 -1
  327. package/dist/serve/site-ui/docs/pyric-ui-auth-reference-api/index.html +2 -2
  328. package/dist/serve/site-ui/docs/pyric-ui-auth-reference-api.md +1 -1
  329. package/dist/serve/site-ui/docs/pyric-ui-events-hooks-reference-api/index.html +1 -1
  330. package/dist/serve/site-ui/docs/pyric-ui-events-reference-api/index.html +1 -1
  331. package/dist/serve/site-ui/docs/pyric-ui-firestore-hooks-reference-api/index.html +1 -1
  332. package/dist/serve/site-ui/docs/pyric-ui-firestore-reference-api/index.html +2 -2
  333. package/dist/serve/site-ui/docs/pyric-ui-firestore-reference-api.md +1 -1
  334. package/dist/serve/site-ui/docs/pyric-ui-primitives-reference-api/index.html +124 -26
  335. package/dist/serve/site-ui/docs/pyric-ui-primitives-reference-api.md +58 -5
  336. package/dist/serve/site-ui/docs/pyric-ui-rtdb-reference-api/index.html +1 -1
  337. package/dist/serve/site-ui/docs/pyric-ui-rules-hooks-reference-api/index.html +1 -1
  338. package/dist/serve/site-ui/docs/pyric-ui-rules-reference-api/index.html +1 -1
  339. package/dist/serve/site-ui/docs/pyric-ui-storage-hooks-reference-api/index.html +1 -1
  340. package/dist/serve/site-ui/docs/pyric-ui-storage-reference-api/index.html +4 -5
  341. package/dist/serve/site-ui/docs/pyric-ui-storage-reference-api.md +3 -4
  342. package/dist/serve/site-ui/docs/pyric-ui-traffic-hooks-reference-api/index.html +1 -1
  343. package/dist/serve/site-ui/docs/pyric-ui-traffic-reference-api/index.html +1 -1
  344. package/dist/serve/site-ui/docs/reference/cli/index.html +6 -3
  345. package/dist/serve/site-ui/docs/reference/cli.md +8 -2
  346. package/dist/serve/site-ui/docs/rules-compat/index.html +10 -2
  347. package/dist/serve/site-ui/docs/rules-compat.md +9 -1
  348. package/dist/serve/site-ui/docs/secure/audit-your-rules/index.html +1 -1
  349. package/dist/serve/site-ui/docs/secure/firestore-rules-limits/index.html +1 -1
  350. package/dist/serve/site-ui/docs/secure/read-a-denial/index.html +1 -1
  351. package/dist/serve/site-ui/docs/secure/rtdb-rules-in-typescript/index.html +1 -1
  352. package/dist/serve/site-ui/docs/secure/rules-standard-library/index.html +1 -1
  353. package/dist/serve/site-ui/docs/secure/secure-it-with-rules/index.html +1 -1
  354. package/dist/serve/site-ui/docs/secure/simulate-and-lint/index.html +1 -1
  355. package/dist/serve/site-ui/docs/secure/write-a-rules-test-suite/index.html +1 -1
  356. package/dist/serve/site-ui/docs/ship/ship-to-production/index.html +1 -1
  357. package/dist/serve/site-ui/docs/ship/test-in-node/index.html +1 -1
  358. package/dist/serve/site-ui/docs/storage-compat/index.html +13 -13
  359. package/dist/serve/site-ui/docs/storage-compat.md +12 -12
  360. package/dist/serve/site-ui/docs/trust/how-we-know-it-matches-firebase/index.html +1 -1
  361. package/dist/serve/site-ui/docs/trust/rules-standard-library/index.html +1 -1
  362. package/dist/serve/site-ui/docs/trust/versioning-and-compatibility/index.html +1 -1
  363. package/dist/serve/site-ui/docs/tutorial/index.html +1 -1
  364. package/dist/serve/site-ui/examples/chess/index.html +1 -1
  365. package/dist/serve/site-ui/firestore/index.html +1 -1
  366. package/dist/serve/site-ui/llms.txt +9 -0
  367. package/dist/serve/site-ui/rtdb/index.html +1 -1
  368. package/dist/serve/site-ui/settings/index.html +1 -1
  369. package/dist/serve/site-ui/storage/index.html +1 -1
  370. package/dist/serve/site-ui/studio/index.html +1 -1
  371. package/dist/serve/site-ui/traffic/index.html +1 -1
  372. package/dist/serve/studio/disk-workspace.d.ts.map +1 -1
  373. package/dist/serve/studio/disk-workspace.js +64 -2
  374. package/dist/serve/studio/disk-workspace.js.map +1 -1
  375. package/dist/serve/vite-plugin.d.ts +7 -7
  376. package/dist/serve/vite-plugin.js +1 -1
  377. package/dist/serve/vite-plugin.js.map +1 -1
  378. package/dist/serve/vite-sandbox-generation.d.ts.map +1 -1
  379. package/dist/serve/vite-sandbox-generation.js +12 -0
  380. package/dist/serve/vite-sandbox-generation.js.map +1 -1
  381. package/dist/serve/worker/client/auth.js +1 -2
  382. package/dist/serve/worker/client/auth.js.map +1 -1
  383. package/dist/serve/worker/client/core.d.ts +21 -1
  384. package/dist/serve/worker/client/core.d.ts.map +1 -1
  385. package/dist/serve/worker/client/core.js +79 -3
  386. package/dist/serve/worker/client/core.js.map +1 -1
  387. package/dist/serve/worker/client.d.ts +1 -1
  388. package/dist/serve/worker/client.d.ts.map +1 -1
  389. package/dist/serve/worker/client.js +1 -1
  390. package/dist/serve/worker/client.js.map +1 -1
  391. package/dist/serve/worker/context-resolver.d.ts +30 -0
  392. package/dist/serve/worker/context-resolver.d.ts.map +1 -0
  393. package/dist/serve/worker/context-resolver.js +44 -0
  394. package/dist/serve/worker/context-resolver.js.map +1 -0
  395. package/dist/serve/worker/entry.js +23 -19
  396. package/dist/serve/worker/entry.js.map +1 -1
  397. package/dist/serve/worker/host/core.d.ts +1 -0
  398. package/dist/serve/worker/host/core.d.ts.map +1 -1
  399. package/dist/serve/worker/host/core.js +12 -6
  400. package/dist/serve/worker/host/core.js.map +1 -1
  401. package/dist/serve/worker/host/storage.js +2 -2
  402. package/dist/serve/worker/host-auth.js +1 -2
  403. package/dist/serve/worker/host-auth.js.map +1 -1
  404. package/dist/serve/worker/index.d.ts +1 -1
  405. package/dist/serve/worker/index.d.ts.map +1 -1
  406. package/dist/serve/worker/index.js +2 -2
  407. package/dist/serve/worker/index.js.map +1 -1
  408. package/dist/serve/worker/port-lifecycle.d.ts +18 -0
  409. package/dist/serve/worker/port-lifecycle.d.ts.map +1 -0
  410. package/dist/serve/worker/port-lifecycle.js +28 -0
  411. package/dist/serve/worker/port-lifecycle.js.map +1 -0
  412. package/dist/serve/worker/serve-init.d.ts.map +1 -1
  413. package/dist/serve/worker/serve-init.js +8 -2
  414. package/dist/serve/worker/serve-init.js.map +1 -1
  415. package/dist/verify/fixture.d.ts +1 -1
  416. package/package.json +16 -5
  417. package/src/assurance/.generated/conformance-verdicts.ts +68 -1
  418. package/src/bridge/client/dispatch.ts +52 -56
  419. package/src/bridge/client/tool-family-factories.ts +34 -0
  420. package/src/bridge/server/mcp-contract.ts +15 -59
  421. package/src/bridge/server/peer.ts +24 -1
  422. package/src/bridge/server/tool-family-factories.ts +40 -0
  423. package/src/bridge/server/tool-metadata.ts +29 -61
  424. package/src/bridge/tool-families.generated.ts +17 -0
  425. package/src/bridge/tool-families.ts +87 -0
  426. package/src/bridge/tool-family-records/conformance.ts +6 -0
  427. package/src/bridge/tool-family-records/firestore-data.ts +15 -0
  428. package/src/bridge/tool-family-records/firestore-inspect.ts +6 -0
  429. package/src/bridge/tool-family-records/firestore-rules.ts +15 -0
  430. package/src/bridge/tool-family-records/firestore-simulator.ts +16 -0
  431. package/src/bridge/tool-family-records/rtdb-inspection.ts +6 -0
  432. package/src/bundler/externals.ts +55 -0
  433. package/src/bundler/index.ts +21 -0
  434. package/src/cli/cli.test.ts +0 -44
  435. package/src/cli/inlined-sdk-scanner.ts +77 -0
  436. package/src/cli/sandbox-interlock.ts +167 -0
  437. package/src/cli/sandbox-runner.ts +37 -26
  438. package/src/cli/serve.ts +68 -69
  439. package/src/cli/unsupported-runtime.ts +68 -0
  440. package/src/conformance/.generated/can-i-use-browser.ts +2 -2
  441. package/src/conformance/.generated/can-i-use.ts +2 -2
  442. package/src/conformance/.generated/conformance-docs.ts +1 -1
  443. package/src/functions-rtdb/child.ts +115 -21
  444. package/src/functions-rtdb/development-runtime.ts +4 -0
  445. package/src/google-endpoints.ts +155 -0
  446. package/src/next/runtime-env.ts +5 -0
  447. package/src/next/with-pyric.ts +1 -1
  448. package/src/register/beacon.ts +232 -0
  449. package/src/register/index.ts +68 -6
  450. package/src/register/net-guard.ts +567 -0
  451. package/src/serve/ai-diagnostics-relay.ts +243 -0
  452. package/src/serve/ai-proxy.ts +327 -0
  453. package/src/serve/ai-status.ts +109 -0
  454. package/src/serve/ai-terminal-blocks.ts +210 -0
  455. package/src/serve/ai-terminal-text.ts +52 -0
  456. package/src/serve/beacon-route.ts +141 -0
  457. package/src/serve/entries/active-auth-registry.ts +56 -0
  458. package/src/serve/entries/active-auth.ts +100 -0
  459. package/src/serve/entries/auth-helper-core.ts +5 -0
  460. package/src/serve/entries/auth-helper-dom.ts +26 -2
  461. package/src/serve/entries/auth.ts +8 -0
  462. package/src/serve/entries/bridge-url.ts +1 -1
  463. package/src/serve/entries/init.ts +78 -3
  464. package/src/serve/entries/runtime.ts +10 -0
  465. package/src/serve/namespace.ts +73 -140
  466. package/src/serve/runtime/chip-config.ts +16 -2
  467. package/src/serve/runtime/chip-dialog.ts +366 -0
  468. package/src/serve/runtime/chip-install.ts +10 -4
  469. package/src/serve/runtime/chip-user-search.ts +391 -0
  470. package/src/serve/runtime/chip.ts +140 -15
  471. package/src/serve/runtime/identity.ts +26 -0
  472. package/src/serve/sandbox-session.ts +9 -0
  473. package/src/serve/studio/disk-workspace.ts +76 -2
  474. package/src/serve/vite-plugin.ts +8 -8
  475. package/src/serve/vite-sandbox-generation.ts +15 -0
  476. package/src/serve/worker/client/auth.ts +1 -1
  477. package/src/serve/worker/client/core.ts +80 -3
  478. package/src/serve/worker/client.ts +1 -1
  479. package/src/serve/worker/context-resolver.ts +60 -0
  480. package/src/serve/worker/entry.ts +22 -18
  481. package/src/serve/worker/host/core.ts +9 -7
  482. package/src/serve/worker/host/storage.ts +2 -2
  483. package/src/serve/worker/host-auth.ts +1 -1
  484. package/src/serve/worker/index.ts +4 -1
  485. package/src/serve/worker/port-lifecycle.ts +45 -0
  486. package/src/serve/worker/serve-init.ts +9 -2
  487. package/src/verify/fixture.ts +1 -1
  488. package/dist/serve/site-ui/_astro/app.B52xr-DK.js +0 -1
  489. package/dist/serve/site-ui/_astro/app.DWBraPUw.js +0 -12
  490. package/dist/serve/site-ui/_astro/sandbox-controls.DEpnKg-O.js +0 -1169
  491. package/dist/serve/site-ui/_astro/writes.rpjrFzmu.js +0 -102
@@ -0,0 +1,128 @@
1
+ import { redactUrl } from 'pyric/ai/internal';
2
+ import { sanitizeForTerminal } from './ai-terminal-text.js';
3
+ /** A non-empty string field, sanitized, or `null` when the wire omitted it. */
4
+ function readText(value) {
5
+ if (typeof value !== 'string' || value === '')
6
+ return null;
7
+ return sanitizeForTerminal(redactUrl(value));
8
+ }
9
+ /** A raw (unsanitized) string field, for throttle keys that never print. */
10
+ function readRawText(value, fallback) {
11
+ if (typeof value !== 'string' || value === '')
12
+ return fallback;
13
+ return value;
14
+ }
15
+ /**
16
+ * The `model: <id> (engine: <name>)` line shared by the rejection and block
17
+ * formatters, which report the same fact in the same place. Degrades to an
18
+ * engine-only line, and to nothing at all when the event carried neither.
19
+ */
20
+ function formatModelLine(model, engine) {
21
+ const flatModel = readText(model);
22
+ const flatEngine = readText(engine);
23
+ if (flatModel === null && flatEngine === null)
24
+ return null;
25
+ if (flatModel === null)
26
+ return ` engine: ${flatEngine}`;
27
+ if (flatEngine === null)
28
+ return ` model: ${flatModel}`;
29
+ return ` model: ${flatModel} (engine: ${flatEngine})`;
30
+ }
31
+ /**
32
+ * Format a relayed AI broker rejection into the compact terminal block, the
33
+ * same ` [pyric] ...` idiom the denial relay and the ai-proxy warning print.
34
+ * Three lines at most: the reason production itself gives, then the model
35
+ * (with the resolved engine, since a rejection reads very differently for
36
+ * `scripted` than for a real upstream), then the wire status. Exported for
37
+ * unit tests.
38
+ */
39
+ export function formatAiRejectionBlock(payload) {
40
+ const message = readText(payload.message) ?? 'request rejected';
41
+ const lines = [` ⚠ [pyric] ai request rejected: ${message}`];
42
+ const modelLine = formatModelLine(payload.model, payload.engine);
43
+ if (modelLine !== null)
44
+ lines.push(modelLine);
45
+ const status = readText(payload.status);
46
+ const code = typeof payload.code === 'number' ? payload.code : null;
47
+ if (status !== null || code !== null) {
48
+ const label = status ?? 'ERROR';
49
+ let suffix = '';
50
+ if (code !== null)
51
+ suffix = ` (${code})`;
52
+ lines.push(` ${label}${suffix}`);
53
+ }
54
+ return lines.join('\n');
55
+ }
56
+ /**
57
+ * Format a relayed AI filter block, in the same three lines as
58
+ * {@link formatAiRejectionBlock}: the wire's own reason, the model + resolved
59
+ * engine, then WHY there is no content. That third line matters more here
60
+ * than for a rejection: a block throws nothing, so the only symptom a
61
+ * developer sees is an empty answer, and production's `finishMessage` (when
62
+ * it sent one) is the whole explanation. Exported for unit tests.
63
+ */
64
+ export function formatAiBlockedBlock(payload) {
65
+ const finishReason = readText(payload.finishReason);
66
+ const blockReason = readText(payload.blockReason);
67
+ const reason = finishReason ?? blockReason ?? 'unknown';
68
+ const lines = [` ⚠ [pyric] ai response blocked: ${reason}`];
69
+ const modelLine = formatModelLine(payload.model, payload.engine);
70
+ if (modelLine !== null)
71
+ lines.push(modelLine);
72
+ const finishMessage = readText(payload.finishMessage);
73
+ if (finishMessage !== null) {
74
+ lines.push(` ${finishMessage}`);
75
+ }
76
+ else if (finishReason === null && blockReason !== null) {
77
+ lines.push(' the prompt was blocked before generation; no candidates were returned');
78
+ }
79
+ else {
80
+ lines.push(' no content was returned; text() and functionCalls() throw for this finish reason');
81
+ }
82
+ return lines.join('\n');
83
+ }
84
+ /**
85
+ * Format a relayed AI model substitution into ONE terminal line, a single
86
+ * line on purpose: there is no error, no status, and no missing content to
87
+ * explain. The whole fact IS the arrow, and the parenthetical says which
88
+ * engine did it and why (`engine modelMap`, `experimental alias`, ...).
89
+ * Exported for unit tests.
90
+ */
91
+ export function formatAiModelSubstitutionBlock(payload) {
92
+ const requested = readText(payload.requestedModel) ?? 'unknown';
93
+ const effective = readText(payload.effectiveModel) ?? 'unknown';
94
+ const engine = readText(payload.engine);
95
+ const reason = readText(payload.reason);
96
+ const attribution = [engine, reason].filter((part) => part !== null);
97
+ let suffix = '';
98
+ if (attribution.length > 0)
99
+ suffix = ` (${attribution.join(', ')})`;
100
+ return ` ⚠ [pyric] ai model substituted: ${requested} → ${effective}${suffix}`;
101
+ }
102
+ const AI_TERMINAL_BLOCKS = {
103
+ 'ai-rejection': {
104
+ format: formatAiRejectionBlock,
105
+ throttleTarget: (payload) => `ai-rejection ${readRawText(payload.model, '')}`,
106
+ throttleReason: (payload) => readRawText(payload.message, 'request rejected'),
107
+ },
108
+ 'ai-blocked': {
109
+ format: formatAiBlockedBlock,
110
+ throttleTarget: (payload) => `ai-blocked ${readRawText(payload.model, '')}`,
111
+ throttleReason: (payload) => readRawText(payload.finishReason, readRawText(payload.blockReason, 'unknown')),
112
+ },
113
+ 'ai-model-substituted': {
114
+ format: formatAiModelSubstitutionBlock,
115
+ throttleTarget: (payload) => `ai-model ${readRawText(payload.requestedModel, '')}`,
116
+ throttleReason: (payload) => readRawText(payload.effectiveModel, 'unknown'),
117
+ },
118
+ };
119
+ /** The record for a relayed body's `kind`, or `null` when the body is a rules
120
+ * denial (or anything else this route does not recognize). */
121
+ export function aiTerminalBlockFor(kind) {
122
+ if (typeof kind !== 'string')
123
+ return null;
124
+ if (!Object.hasOwn(AI_TERMINAL_BLOCKS, kind))
125
+ return null;
126
+ return AI_TERMINAL_BLOCKS[kind];
127
+ }
128
+ //# sourceMappingURL=ai-terminal-blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-terminal-blocks.js","sourceRoot":"","sources":["../../src/serve/ai-terminal-blocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Terminal-safe rendering of remote-authored text.
3
+ *
4
+ * Every AI diagnostic the dev server prints quotes a string somebody else
5
+ * wrote: a broker rejection reason, a model server's finish message, a
6
+ * `Retry-After` header, a model id out of a project config. The terminal is
7
+ * not a sandbox, so that text is flattened onto one line, stripped of control
8
+ * and bidi characters (the same treatment `activity-warning.ts` gives incident
9
+ * text), and cut to a fixed length. Without the cut, one field of a remote
10
+ * payload can push the rest of a diagnostic block off the screen.
11
+ *
12
+ * Leaf module: it imports nothing, so the browser-side diagnostics relay can
13
+ * share it without pulling the dev server's formatting code into a served
14
+ * bundle. Credential masking is a separate concern and comes from
15
+ * `pyric/ai/internal`, which publishes the broker's own `redactUrl`.
16
+ */
17
+ /**
18
+ * Longest remote-authored string echoed into one terminal field, and the
19
+ * longest one the browser-side relay puts on the wire. Broker rejection
20
+ * reasons run to a few hundred characters at most, so anything past this is
21
+ * an upstream dumping a payload into a message field.
22
+ */
23
+ export declare const AI_TERMINAL_TEXT_MAX = 512;
24
+ /** Cut text to {@link AI_TERMINAL_TEXT_MAX}, marking the cut. */
25
+ export declare function capTerminalText(text: string): string;
26
+ /**
27
+ * Flatten an upstream-authored string into ONE terminal-safe line.
28
+ *
29
+ * Broker rejection reasons are production's own messages, and several are
30
+ * multi-line (`ai-error-empty-contents` is a bulleted list): pasted verbatim
31
+ * they shred the indented block into fragments. Control and bidi characters
32
+ * get dropped for the same reason `activity-warning.ts` drops them: the text
33
+ * can originate from a remote model server, and the terminal is not a sandbox.
34
+ */
35
+ export declare function sanitizeForTerminal(text: string): string;
36
+ //# sourceMappingURL=ai-terminal-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-terminal-text.d.ts","sourceRoot":"","sources":["../../src/serve/ai-terminal-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAKxC,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGpD;AAOD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxD"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Terminal-safe rendering of remote-authored text.
3
+ *
4
+ * Every AI diagnostic the dev server prints quotes a string somebody else
5
+ * wrote: a broker rejection reason, a model server's finish message, a
6
+ * `Retry-After` header, a model id out of a project config. The terminal is
7
+ * not a sandbox, so that text is flattened onto one line, stripped of control
8
+ * and bidi characters (the same treatment `activity-warning.ts` gives incident
9
+ * text), and cut to a fixed length. Without the cut, one field of a remote
10
+ * payload can push the rest of a diagnostic block off the screen.
11
+ *
12
+ * Leaf module: it imports nothing, so the browser-side diagnostics relay can
13
+ * share it without pulling the dev server's formatting code into a served
14
+ * bundle. Credential masking is a separate concern and comes from
15
+ * `pyric/ai/internal`, which publishes the broker's own `redactUrl`.
16
+ */
17
+ /**
18
+ * Longest remote-authored string echoed into one terminal field, and the
19
+ * longest one the browser-side relay puts on the wire. Broker rejection
20
+ * reasons run to a few hundred characters at most, so anything past this is
21
+ * an upstream dumping a payload into a message field.
22
+ */
23
+ export const AI_TERMINAL_TEXT_MAX = 512;
24
+ /** Appended when text is cut, so a truncated line never reads as complete. */
25
+ const TRUNCATION_MARKER = '\u2026';
26
+ /** Cut text to {@link AI_TERMINAL_TEXT_MAX}, marking the cut. */
27
+ export function capTerminalText(text) {
28
+ if (text.length <= AI_TERMINAL_TEXT_MAX)
29
+ return text;
30
+ return `${text.slice(0, AI_TERMINAL_TEXT_MAX)}${TRUNCATION_MARKER}`;
31
+ }
32
+ /** Control, bidi-override, and line-separator characters. A remote string
33
+ * carrying these can forge a terminal line or reverse the text around it. */
34
+ const TERMINAL_UNSAFE_CHARS = /[\u0000-\u001f\u007f-\u009f\u061c\u200e\u200f\u2028-\u202e\u2066-\u2069\ufeff]/g;
35
+ /**
36
+ * Flatten an upstream-authored string into ONE terminal-safe line.
37
+ *
38
+ * Broker rejection reasons are production's own messages, and several are
39
+ * multi-line (`ai-error-empty-contents` is a bulleted list): pasted verbatim
40
+ * they shred the indented block into fragments. Control and bidi characters
41
+ * get dropped for the same reason `activity-warning.ts` drops them: the text
42
+ * can originate from a remote model server, and the terminal is not a sandbox.
43
+ */
44
+ export function sanitizeForTerminal(text) {
45
+ const flattened = text.replace(TERMINAL_UNSAFE_CHARS, ' ').replace(/\s+/g, ' ').trim();
46
+ return capTerminalText(flattened);
47
+ }
48
+ //# sourceMappingURL=ai-terminal-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-terminal-text.js","sourceRoot":"","sources":["../../src/serve/ai-terminal-text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,8EAA8E;AAC9E,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAEnC,iEAAiE;AACjE,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,IAAI,CAAC,MAAM,IAAI,oBAAoB;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC,GAAG,iBAAiB,EAAE,CAAC;AACtE,CAAC;AAED;8EAC8E;AAC9E,MAAM,qBAAqB,GACzB,iFAAiF,CAAC;AAEpF;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACvF,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * `POST /__pyric/beacon`, the host half of the interception handshake.
3
+ *
4
+ * `@pyric/cli/register` posts here once per activated child, after its module
5
+ * hooks and net-guard are installed. Receiving it is the only positive proof
6
+ * the dev server has that `NODE_OPTIONS=--import @pyric/cli/register` actually
7
+ * reached that process; everything else about the launch is an assumption. See
8
+ * `register/beacon.ts` for why the child reports on two channels.
9
+ *
10
+ * Who may post, and why it is locked down
11
+ * ---------------------------------------
12
+ * The dev server is reachable from any page the developer happens to have
13
+ * open, so an unauthenticated route here would let a web page disarm the
14
+ * watchdog (post a beacon the launcher counts) and would let any page grow the
15
+ * server's memory with an unbounded body. Four checks close that, in order:
16
+ *
17
+ * 1. `content-type: application/json`. A cross-origin page cannot send that
18
+ * header on a POST without a CORS preflight, and this server answers no
19
+ * `OPTIONS` on this path, so the browser never sends the real request.
20
+ * 2. No `Origin` header and no `Sec-Fetch-Mode: cors`. A browser attaches one
21
+ * or both to every cross-site request it makes; a Node child attaches
22
+ * neither.
23
+ * 3. A per-launch secret in `x-pyric-beacon-token`, which the launcher put in
24
+ * the child's environment as `PYRIC_BEACON_TOKEN`. A page cannot read it.
25
+ * 4. A 4 KB body cap. A report is under 200 bytes.
26
+ *
27
+ * Everything that passes those checks is still best-effort: a malformed body
28
+ * gets 204 and is dropped, because the consequence of an absent beacon is a
29
+ * warning on the parent side and must never be a failure on the child's.
30
+ */
31
+ import type { IncomingMessage, ServerResponse } from 'node:http';
32
+ import { type BeaconReport } from '../register/beacon.js';
33
+ /** Largest beacon body accepted. A report is well under 200 bytes. */
34
+ export declare const BEACON_BODY_LIMIT_BYTES = 4096;
35
+ export interface BeaconRouteOptions {
36
+ /** The per-launch secret the child must present. */
37
+ readonly token: string;
38
+ /** Receives each accepted report. Absent means the route still 204s. */
39
+ readonly onBeacon?: (report: BeaconReport) => void;
40
+ }
41
+ /**
42
+ * Read a beacon body defensively. It is JSON off a socket, and the only fields
43
+ * that matter are the ones the parent reports. `null` for anything that does
44
+ * not carry a plausible report.
45
+ */
46
+ export declare function parseBeaconReport(value: unknown): BeaconReport | null;
47
+ /** The one terminal line confirming a child is interlocked. A beacon that
48
+ * reports `hooks: false` is the interesting case: the child is running the
49
+ * register module, and it is telling us the rewrite did not install. */
50
+ export declare function formatBeaconReceipt(report: BeaconReport): string;
51
+ /** Handle `POST /__pyric/beacon`. */
52
+ export declare function handleBeacon(opts: BeaconRouteOptions, req: IncomingMessage, res: ServerResponse): Promise<void>;
53
+ //# sourceMappingURL=beacon-route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beacon-route.d.ts","sourceRoot":"","sources":["../../src/serve/beacon-route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAIjE,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE/E,sEAAsE;AACtE,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;CACpD;AAyBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAarE;AAED;;yEAEyE;AACzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAShE;AAED,qCAAqC;AACrC,wBAAsB,YAAY,CAChC,IAAI,EAAE,kBAAkB,EACxB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,IAAI,CAAC,CAgCf"}
@@ -0,0 +1,101 @@
1
+ import { timingSafeEqual } from 'node:crypto';
2
+ import { BODY_TOO_LARGE_CODE, collectBody } from '../bridge/server/peer.js';
3
+ import { getHeader } from './server.js';
4
+ import { BEACON_TOKEN_HEADER } from '../register/beacon.js';
5
+ /** Largest beacon body accepted. A report is well under 200 bytes. */
6
+ export const BEACON_BODY_LIMIT_BYTES = 4_096;
7
+ /** Constant-time string comparison over the token bytes. */
8
+ function tokenMatches(presented, expected) {
9
+ if (presented === undefined)
10
+ return false;
11
+ const a = Buffer.from(presented, 'utf8');
12
+ const b = Buffer.from(expected, 'utf8');
13
+ if (a.length !== b.length)
14
+ return false;
15
+ return timingSafeEqual(a, b);
16
+ }
17
+ /** Whether the request carries the browser markings of a cross-site fetch. */
18
+ function isBrowserOriginated(req) {
19
+ if (getHeader(req, 'origin') !== undefined)
20
+ return true;
21
+ return getHeader(req, 'sec-fetch-mode') === 'cors';
22
+ }
23
+ /** Whether the body is declared as JSON, the header a page cannot set without
24
+ * a preflight this server never answers. */
25
+ function declaresJsonBody(req) {
26
+ const contentType = getHeader(req, 'content-type');
27
+ if (contentType === undefined)
28
+ return false;
29
+ return contentType.split(';')[0].trim().toLowerCase() === 'application/json';
30
+ }
31
+ /**
32
+ * Read a beacon body defensively. It is JSON off a socket, and the only fields
33
+ * that matter are the ones the parent reports. `null` for anything that does
34
+ * not carry a plausible report.
35
+ */
36
+ export function parseBeaconReport(value) {
37
+ if (typeof value !== 'object' || value === null)
38
+ return null;
39
+ const raw = value;
40
+ if (typeof raw.pid !== 'number' || !Number.isFinite(raw.pid))
41
+ return null;
42
+ const guard = raw.guard;
43
+ if (guard !== 'warn' && guard !== 'block' && guard !== 'off')
44
+ return null;
45
+ if (typeof raw.hooks !== 'boolean')
46
+ return null;
47
+ return {
48
+ pid: raw.pid,
49
+ guard,
50
+ hooks: raw.hooks,
51
+ sandbox: typeof raw.sandbox === 'string' ? raw.sandbox : '',
52
+ };
53
+ }
54
+ /** The one terminal line confirming a child is interlocked. A beacon that
55
+ * reports `hooks: false` is the interesting case: the child is running the
56
+ * register module, and it is telling us the rewrite did not install. */
57
+ export function formatBeaconReceipt(report) {
58
+ if (!report.hooks) {
59
+ return (` ⚠ interlock pid=${report.pid}: register loaded but module hooks did NOT install. ` +
60
+ `That process's firebase-admin/firebase imports are NOT routed to the sandbox ` +
61
+ `(Node >= 22.15 is required for full coverage). Net-guard mode ${report.guard}.`);
62
+ }
63
+ return ` ⓘ interlock pid=${report.pid}: sandbox interception confirmed live (guard=${report.guard})`;
64
+ }
65
+ /** Handle `POST /__pyric/beacon`. */
66
+ export async function handleBeacon(opts, req, res) {
67
+ if (req.method !== 'POST') {
68
+ res.writeHead(405, { allow: 'POST' }).end('method not allowed');
69
+ return;
70
+ }
71
+ if (!declaresJsonBody(req)) {
72
+ res.writeHead(415, { 'content-type': 'text/plain' }).end('Unsupported Media Type');
73
+ return;
74
+ }
75
+ if (isBrowserOriginated(req)) {
76
+ res.writeHead(403, { 'content-type': 'text/plain' }).end('Forbidden: browser origin');
77
+ return;
78
+ }
79
+ if (!tokenMatches(getHeader(req, BEACON_TOKEN_HEADER), opts.token)) {
80
+ res.writeHead(401, { 'content-type': 'text/plain' }).end('Unauthorized: invalid beacon token');
81
+ return;
82
+ }
83
+ let body;
84
+ try {
85
+ body = await collectBody(req, BEACON_BODY_LIMIT_BYTES);
86
+ }
87
+ catch (err) {
88
+ if (err.code === BODY_TOO_LARGE_CODE) {
89
+ res.writeHead(413, { 'content-type': 'text/plain' }).end('Payload Too Large');
90
+ return;
91
+ }
92
+ // Malformed JSON: drop it. Proof-of-life is a side channel.
93
+ res.writeHead(204).end();
94
+ return;
95
+ }
96
+ const report = parseBeaconReport(body);
97
+ if (report !== null)
98
+ opts.onBeacon?.(report);
99
+ res.writeHead(204).end();
100
+ }
101
+ //# sourceMappingURL=beacon-route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beacon-route.js","sourceRoot":"","sources":["../../src/serve/beacon-route.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ type AuthUser<Auth extends {
2
+ currentUser: unknown;
3
+ }> = Auth['currentUser'];
4
+ export interface ActiveAuthRegistry<Auth extends {
5
+ currentUser: unknown;
6
+ }> {
7
+ register(auth: Auth): () => void;
8
+ subscribe(listener: (user: AuthUser<Auth>) => void): () => void;
9
+ auths(): IterableIterator<Auth>;
10
+ }
11
+ /** Coordinates unique Auth handles while allowing more than one lifecycle owner. */
12
+ export declare function createActiveAuthRegistry<Auth extends {
13
+ currentUser: unknown;
14
+ }>(observe: (auth: Auth, listener: (user: AuthUser<Auth>) => void) => () => void): ActiveAuthRegistry<Auth>;
15
+ export {};
16
+ //# sourceMappingURL=active-auth-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-auth-registry.d.ts","sourceRoot":"","sources":["../../../src/serve/entries/active-auth-registry.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,CAAC,IAAI,SAAS;IAAE,WAAW,EAAE,OAAO,CAAA;CAAE,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;AAE3E,MAAM,WAAW,kBAAkB,CAAC,IAAI,SAAS;IAAE,WAAW,EAAE,OAAO,CAAA;CAAE;IACvE,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,IAAI,CAAC;IACjC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAChE,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;CACjC;AAED,oFAAoF;AACpF,wBAAgB,wBAAwB,CAAC,IAAI,SAAS;IAAE,WAAW,EAAE,OAAO,CAAA;CAAE,EAC5E,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,MAAM,IAAI,GAC5E,kBAAkB,CAAC,IAAI,CAAC,CA4C1B"}
@@ -0,0 +1,48 @@
1
+ /** Coordinates unique Auth handles while allowing more than one lifecycle owner. */
2
+ export function createActiveAuthRegistry(observe) {
3
+ const registrations = new Map();
4
+ const listeners = new Set();
5
+ const register = (auth) => {
6
+ const existing = registrations.get(auth);
7
+ if (existing) {
8
+ existing.owners += 1;
9
+ }
10
+ else {
11
+ const unsubscribe = observe(auth, (user) => {
12
+ for (const listener of listeners)
13
+ listener(user);
14
+ });
15
+ registrations.set(auth, { owners: 1, unsubscribe });
16
+ }
17
+ let released = false;
18
+ return () => {
19
+ if (released)
20
+ return;
21
+ released = true;
22
+ const registration = registrations.get(auth);
23
+ if (!registration)
24
+ return;
25
+ registration.owners -= 1;
26
+ if (registration.owners > 0)
27
+ return;
28
+ registrations.delete(auth);
29
+ registration.unsubscribe();
30
+ };
31
+ };
32
+ const subscribe = (listener) => {
33
+ listeners.add(listener);
34
+ for (const auth of registrations.keys()) {
35
+ if (auth.currentUser) {
36
+ listener(auth.currentUser);
37
+ break;
38
+ }
39
+ }
40
+ return () => listeners.delete(listener);
41
+ };
42
+ return {
43
+ register,
44
+ subscribe,
45
+ auths: () => registrations.keys(),
46
+ };
47
+ }
48
+ //# sourceMappingURL=active-auth-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-auth-registry.js","sourceRoot":"","sources":["../../../src/serve/entries/active-auth-registry.ts"],"names":[],"mappings":"AAQA,oFAAoF;AACpF,MAAM,UAAU,wBAAwB,CACtC,OAA6E;IAE7E,MAAM,aAAa,GAAG,IAAI,GAAG,EAAqD,CAAC;IACnF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkC,CAAC;IAE5D,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAgB,EAAE;QAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzC,KAAK,MAAM,QAAQ,IAAI,SAAS;oBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YACH,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,OAAO,GAAG,EAAE;YACV,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,YAAY;gBAAE,OAAO;YAC1B,YAAY,CAAC,MAAM,IAAI,CAAC,CAAC;YACzB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO;YACpC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B,YAAY,CAAC,WAAW,EAAE,CAAC;QAC7B,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,QAAwC,EAAgB,EAAE;QAC3E,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC3B,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,SAAS;QACT,KAAK,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE;KAClC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type RuntimeIdentity } from '../runtime/identity.js';
2
+ type ActiveAuth = {
3
+ currentUser: RuntimeIdentity | null;
4
+ };
5
+ export declare function registerActiveAuth(auth: ActiveAuth): () => void;
6
+ export declare function subscribeToActiveAuth(listener: (user: RuntimeIdentity | null) => void): () => void;
7
+ export declare function getActiveAuthUser(): RuntimeIdentity | null;
8
+ export declare function switchAllAuthUsers(uid: string): Promise<void>;
9
+ export declare function signOutAllAuths(): Promise<void>;
10
+ export declare function commitCredentialToAllAuths(identity: {
11
+ uid: string;
12
+ email?: string | null;
13
+ displayName?: string | null;
14
+ customClaims?: Record<string, unknown>;
15
+ providerId?: string;
16
+ }): Promise<void>;
17
+ export {};
18
+ //# sourceMappingURL=active-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-auth.d.ts","sourceRoot":"","sources":["../../../src/serve/entries/active-auth.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAMhC,KAAK,UAAU,GAAG;IAAE,WAAW,EAAE,eAAe,GAAG,IAAI,CAAA;CAAE,CAAC;AAO1D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,IAAI,CAE/D;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,GAC/C,MAAM,IAAI,CAEZ;AAED,wBAAgB,iBAAiB,IAAI,eAAe,GAAG,IAAI,CAO1D;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAcnE;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAUrD;AAED,wBAAsB,0BAA0B,CAAC,QAAQ,EAAE;IACzD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BhB"}
@@ -0,0 +1,84 @@
1
+ import * as ipAuth from 'pyric/auth';
2
+ import * as wcRaw from '../worker/client.js';
3
+ import { acceptProviderCredential, restorePortSession } from '../worker/client.js';
4
+ import { projectRuntimeIdentity, } from '../runtime/identity.js';
5
+ import { createActiveAuthRegistry } from './active-auth-registry.js';
6
+ import { useWorker } from './worker-runtime.js';
7
+ const wc = wcRaw;
8
+ const selectedAuth = useWorker ? wc : ipAuth;
9
+ const observeActiveAuth = selectedAuth.onAuthStateChanged;
10
+ const activeAuthRegistry = createActiveAuthRegistry(observeActiveAuth);
11
+ export function registerActiveAuth(auth) {
12
+ return activeAuthRegistry.register(auth);
13
+ }
14
+ export function subscribeToActiveAuth(listener) {
15
+ return activeAuthRegistry.subscribe(listener);
16
+ }
17
+ export function getActiveAuthUser() {
18
+ for (const auth of activeAuthRegistry.auths()) {
19
+ if (auth.currentUser) {
20
+ return projectRuntimeIdentity(auth.currentUser);
21
+ }
22
+ }
23
+ return null;
24
+ }
25
+ export async function switchAllAuthUsers(uid) {
26
+ const promises = [];
27
+ for (const auth of activeAuthRegistry.auths()) {
28
+ if (useWorker) {
29
+ promises.push(restorePortSession(auth, uid));
30
+ }
31
+ else {
32
+ try {
33
+ ipAuth.sandbox.restoreSession(auth, uid);
34
+ }
35
+ catch {
36
+ // A stale handle or unavailable identity must not block other handles.
37
+ }
38
+ }
39
+ }
40
+ await Promise.all(promises);
41
+ }
42
+ export async function signOutAllAuths() {
43
+ const promises = [];
44
+ for (const auth of activeAuthRegistry.auths()) {
45
+ if (useWorker) {
46
+ promises.push(wc.signOut(auth));
47
+ }
48
+ else {
49
+ promises.push(ipAuth.signOut(auth));
50
+ }
51
+ }
52
+ await Promise.all(promises);
53
+ }
54
+ export async function commitCredentialToAllAuths(identity) {
55
+ const promises = [];
56
+ for (const auth of activeAuthRegistry.auths()) {
57
+ if (useWorker) {
58
+ promises.push(acceptProviderCredential(auth, {
59
+ uid: identity.uid,
60
+ email: identity.email ?? null,
61
+ displayName: identity.displayName ?? null,
62
+ customClaims: identity.customClaims ?? {},
63
+ providerId: identity.providerId ?? 'password',
64
+ }));
65
+ }
66
+ else {
67
+ try {
68
+ ipAuth.sandbox.seedUsers(auth, [{
69
+ uid: identity.uid,
70
+ email: identity.email ?? '',
71
+ password: 'synthetic-password',
72
+ displayName: identity.displayName ?? undefined,
73
+ customClaims: identity.customClaims ?? {},
74
+ providerId: identity.providerId ?? 'password',
75
+ }]);
76
+ }
77
+ catch {
78
+ // A stale handle or duplicate seed must not block other handles.
79
+ }
80
+ }
81
+ }
82
+ await Promise.all(promises);
83
+ }
84
+ //# sourceMappingURL=active-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-auth.js","sourceRoot":"","sources":["../../../src/serve/entries/active-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,YAAY,CAAC;AACrC,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EACL,sBAAsB,GAEvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,EAAE,GAAG,KAAiC,CAAC;AAC7C,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAE7C,MAAM,iBAAiB,GAAG,YAAY,CAAC,kBAGxB,CAAC;AAChB,MAAM,kBAAkB,GAAG,wBAAwB,CAAa,iBAAiB,CAAC,CAAC;AAEnF,MAAM,UAAU,kBAAkB,CAAC,IAAgB;IACjD,OAAO,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAAgD;IAEhD,OAAO,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,KAAK,MAAM,IAAI,IAAI,kBAAkB,CAAC,KAAK,EAAE,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAClD,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,kBAAkB,CAAC,KAAK,EAAE,EAAE,CAAC;QAC9C,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAa,EAAE,GAAG,CAAC,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,IAAa,EAAE,GAAG,CAAC,CAAC;YACpD,CAAC;YAAC,MAAM,CAAC;gBACP,uEAAuE;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,kBAAkB,CAAC,KAAK,EAAE,EAAE,CAAC;QAC9C,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAa,CAAC,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAa,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,QAMhD;IACC,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,kBAAkB,CAAC,KAAK,EAAE,EAAE,CAAC;QAC9C,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAa,EAAE;gBACpD,GAAG,EAAE,QAAQ,CAAC,GAAG;gBACjB,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,IAAI;gBAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,IAAI;gBACzC,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,EAAE;gBACzC,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,UAAU;aAC9C,CAAC,CAAC,CAAC;QACN,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAa,EAAE,CAAC;wBACvC,GAAG,EAAE,QAAQ,CAAC,GAAG;wBACjB,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,EAAE;wBAC3B,QAAQ,EAAE,oBAAoB;wBAC9B,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,SAAS;wBAC9C,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,EAAE;wBACzC,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,UAAU;qBAC9C,CAAC,CAAC,CAAC;YACN,CAAC;YAAC,MAAM,CAAC;gBACP,iEAAiE;YACnE,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC"}
@@ -56,6 +56,7 @@ export declare class ServeAuthHelper {
56
56
  private readonly mint;
57
57
  constructor(directory: HelperIdentityDirectory, mint?: HelperCredentialMint);
58
58
  resolver(): AuthFlowResolver;
59
+ promptCreateUser(providerId?: string): Promise<UserCredential>;
59
60
  subscribe(fn: () => void): () => void;
60
61
  snapshot(): HelperSnapshot;
61
62
  private emit;
@@ -1 +1 @@
1
- {"version":3,"file":"auth-helper-core.d.ts","sourceRoot":"","sources":["../../../src/serve/entries/auth-helper-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAEhB,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,IAAI,cAAc,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACrD;2EACuE;IACvE,GAAG,CAAC,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,OAAO,EACH;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,KAC3D,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;CACvC;AAQD,qBAAa,eAAe;IAQxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAP5B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;gBAGzB,SAAS,EAAE,uBAAuB,EACnD,IAAI,CAAC,EAAE,oBAAoB;IAM7B,QAAQ,IAAI,gBAAgB;IAW5B,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAKrC,QAAQ,IAAI,cAAc;IAQ1B,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,iBAAiB;IAwBzB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAavB,GAAG,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAQhC,MAAM,IAAI,IAAI;IAWd,OAAO,CAAC,IAAI;YAOE,WAAW;IA0BzB,OAAO,CAAC,mBAAmB;CAM5B;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGzB"}
1
+ {"version":3,"file":"auth-helper-core.d.ts","sourceRoot":"","sources":["../../../src/serve/entries/auth-helper-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAEhB,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,IAAI,cAAc,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACrD;2EACuE;IACvE,GAAG,CAAC,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,OAAO,EACH;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,KAC3D,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;CACvC;AAQD,qBAAa,eAAe;IAQxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAP5B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;gBAGzB,SAAS,EAAE,uBAAuB,EACnD,IAAI,CAAC,EAAE,oBAAoB;IAM7B,QAAQ,IAAI,gBAAgB;IAW5B,gBAAgB,CAAC,UAAU,SAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAKlE,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAKrC,QAAQ,IAAI,cAAc;IAQ1B,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,iBAAiB;IAwBzB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAavB,GAAG,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAQhC,MAAM,IAAI,IAAI;IAWd,OAAO,CAAC,IAAI;YAOE,WAAW;IA0BzB,OAAO,CAAC,mBAAmB;CAM5B;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGzB"}
@@ -20,6 +20,10 @@ export class ServeAuthHelper {
20
20
  });
21
21
  return { openPopup: open, openRedirect: open };
22
22
  }
23
+ promptCreateUser(providerId = 'password') {
24
+ const open = this.resolver().openPopup;
25
+ return open({ providerId, authType: 'signIn' });
26
+ }
23
27
  subscribe(fn) {
24
28
  this.listeners.add(fn);
25
29
  return () => this.listeners.delete(fn);