@almadar/std 17.0.3 → 17.1.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 (313) hide show
  1. package/behaviors/lolo/auth/atoms/std-dev-personas.lolo +27 -2
  2. package/behaviors/lolo/cli/atoms/std-orb-goldens.lolo +6 -3
  3. package/behaviors/lolo/cli/atoms/std-orb-lint-mem-handles.lolo +54 -34
  4. package/behaviors/lolo/cli/atoms/std-orb-lint-os-grants.lolo +4 -4
  5. package/behaviors/lolo/cli/atoms/std-orb-mcp.lolo +16 -21
  6. package/behaviors/lolo/cli/atoms/std-orb-serve.lolo +24 -4
  7. package/behaviors/lolo/codec/atoms/std-lolo-kotlin.lolo +26 -3
  8. package/behaviors/lolo/codec/atoms/std-lolo-python.lolo +15 -2
  9. package/behaviors/lolo/codec/atoms/std-lolo-rust.lolo +27 -2
  10. package/behaviors/lolo/codec/atoms/std-lolo-source.lolo +251 -60
  11. package/behaviors/lolo/codec/atoms/std-lolo-swift.lolo +24 -1
  12. package/behaviors/lolo/codec/atoms/std-lolo-typescript.lolo +24 -3
  13. package/behaviors/lolo/connect/atoms/std-meta-ads.lolo +4 -4
  14. package/behaviors/lolo/connect/atoms/std-stdio-lines.lolo +7 -4
  15. package/behaviors/lolo/connect/atoms/std-youtube.lolo +9 -9
  16. package/behaviors/lolo/dev/atoms/std-guest-session.lolo +122 -10
  17. package/behaviors/lolo/dev/atoms/std-mock-seed-marks.lolo +66 -0
  18. package/behaviors/lolo/dev/organisms/std-behavior-playground.lolo +5 -2
  19. package/behaviors/lolo/dev/organisms/std-launchpad.lolo +4 -3
  20. package/behaviors/lolo/gpu/atoms/std-gpu-compute.lolo +329 -0
  21. package/behaviors/lolo/net/atoms/std-http-client.lolo +4 -4
  22. package/behaviors/lolo/net/atoms/std-http-fetch.lolo +6 -6
  23. package/behaviors/lolo/net/atoms/std-npm-lookup.lolo +1 -1
  24. package/behaviors/lolo/net/atoms/std-npm-registry.lolo +2 -2
  25. package/behaviors/lolo/spec/auth/dev-personas.replay.goldens.json +263 -2
  26. package/behaviors/lolo/spec/cli/lint-all.lolo +1 -0
  27. package/behaviors/lolo/spec/cli/lint-item-action-event.replay.goldens.json +9 -9
  28. package/behaviors/lolo/spec/cli/lint-mem-handles.replay.goldens.json +3021 -1
  29. package/behaviors/lolo/spec/cli/lint-os-grants.replay.goldens.json +284 -12
  30. package/behaviors/lolo/spec/cli/mcp-server.replay.goldens.json +51 -55
  31. package/behaviors/lolo/spec/cli/orb-compile.replay.goldens.json +10 -4
  32. package/behaviors/lolo/spec/codec/lolo-kotlin.replay.goldens.json +7496 -7497
  33. package/behaviors/lolo/spec/codec/lolo-python.replay.goldens.json +341 -3
  34. package/behaviors/lolo/spec/codec/lolo-rust.replay.goldens.json +18931 -6142
  35. package/behaviors/lolo/spec/codec/lolo-source.fixtures/compose-pair.lolo +44 -0
  36. package/behaviors/lolo/spec/codec/lolo-source.fixtures/config-read.lolo +2 -1
  37. package/behaviors/lolo/spec/codec/lolo-source.fixtures/divide-default.lolo +2 -1
  38. package/behaviors/lolo/spec/codec/lolo-source.fixtures/divide-plain.lolo +2 -1
  39. package/behaviors/lolo/spec/codec/lolo-source.fixtures/get-past-end.lolo +2 -1
  40. package/behaviors/lolo/spec/codec/lolo-source.fixtures/list-call.lolo +2 -1
  41. package/behaviors/lolo/spec/codec/lolo-source.fixtures/list-plain.lolo +2 -1
  42. package/behaviors/lolo/spec/codec/lolo-source.fixtures/minus-binary.lolo +2 -1
  43. package/behaviors/lolo/spec/codec/lolo-source.fixtures/minus-unary.lolo +2 -1
  44. package/behaviors/lolo/spec/codec/lolo-source.fixtures/nested-let.lolo +2 -1
  45. package/behaviors/lolo/spec/codec/lolo-source.fixtures/no-machine.lolo +2 -1
  46. package/behaviors/lolo/spec/codec/lolo-source.fixtures/no-template.lolo +2 -1
  47. package/behaviors/lolo/spec/codec/lolo-source.fixtures/nth-past-end.lolo +2 -1
  48. package/behaviors/lolo/spec/codec/lolo-source.fixtures/nth-raw.lolo +2 -1
  49. package/behaviors/lolo/spec/codec/lolo-source.fixtures/ports-call.lolo +2 -1
  50. package/behaviors/lolo/spec/codec/lolo-source.fixtures/range-one.lolo +2 -1
  51. package/behaviors/lolo/spec/codec/lolo-source.fixtures/range-two.lolo +2 -1
  52. package/behaviors/lolo/spec/codec/lolo-source.fixtures/router-trio.lolo +88 -0
  53. package/behaviors/lolo/spec/codec/lolo-source.fixtures/store-pair.lolo +62 -0
  54. package/behaviors/lolo/spec/codec/lolo-source.fixtures/string-literal.lolo +2 -1
  55. package/behaviors/lolo/spec/codec/lolo-source.gen/knobs.py +27 -1
  56. package/behaviors/lolo/spec/codec/lolo-source.gen/src_assemble.in +54 -2
  57. package/behaviors/lolo/spec/codec/lolo-source.gen/src_finish.in +1 -1
  58. package/behaviors/lolo/spec/codec/lolo-source.gen/src_fold.in +24 -4
  59. package/behaviors/lolo/spec/codec/lolo-source.gen/src_head.in +8 -3
  60. package/behaviors/lolo/spec/codec/lolo-source.gen/src_prepare.in +6 -2
  61. package/behaviors/lolo/spec/codec/lolo-source.gen/src_trait.in +12 -2
  62. package/behaviors/lolo/spec/codec/lolo-source.parity/agent-step.lolo +2 -1
  63. package/behaviors/lolo/spec/codec/lolo-source.parity/agent-step.server.lolo +1 -0
  64. package/behaviors/lolo/spec/codec/lolo-source.parity/chunk.lolo +2 -1
  65. package/behaviors/lolo/spec/codec/lolo-source.parity/chunk.server.lolo +1 -0
  66. package/behaviors/lolo/spec/codec/lolo-source.parity/compose-pair.events.json +36 -0
  67. package/behaviors/lolo/spec/codec/lolo-source.parity/compose-pair.replay.goldens.json +91 -0
  68. package/behaviors/lolo/spec/codec/lolo-source.parity/cosine.lolo +2 -1
  69. package/behaviors/lolo/spec/codec/lolo-source.parity/cosine.server.lolo +1 -0
  70. package/behaviors/lolo/spec/codec/lolo-source.parity/drivers/kotlin/compose-pair.kt +31 -0
  71. package/behaviors/lolo/spec/codec/lolo-source.parity/drivers/kotlin/router-trio.kt +31 -0
  72. package/behaviors/lolo/spec/codec/lolo-source.parity/drivers/kotlin/store-pair.kt +31 -0
  73. package/behaviors/lolo/spec/codec/lolo-source.parity/drivers/python/compose-pair.py +18 -0
  74. package/behaviors/lolo/spec/codec/lolo-source.parity/drivers/python/router-trio.py +18 -0
  75. package/behaviors/lolo/spec/codec/lolo-source.parity/drivers/python/store-pair.py +17 -0
  76. package/behaviors/lolo/spec/codec/lolo-source.parity/drivers/rust/compose-pair.rs +37 -0
  77. package/behaviors/lolo/spec/codec/lolo-source.parity/drivers/rust/router-trio.rs +37 -0
  78. package/behaviors/lolo/spec/codec/lolo-source.parity/drivers/rust/store-pair.rs +36 -0
  79. package/behaviors/lolo/spec/codec/lolo-source.parity/drivers/swift/compose-pair.swift +24 -0
  80. package/behaviors/lolo/spec/codec/lolo-source.parity/drivers/swift/router-trio.swift +24 -0
  81. package/behaviors/lolo/spec/codec/lolo-source.parity/drivers/swift/store-pair.swift +23 -0
  82. package/behaviors/lolo/spec/codec/lolo-source.parity/drivers/typescript/compose-pair.mts +24 -0
  83. package/behaviors/lolo/spec/codec/lolo-source.parity/drivers/typescript/router-trio.mts +24 -0
  84. package/behaviors/lolo/spec/codec/lolo-source.parity/drivers/typescript/store-pair.mts +22 -0
  85. package/behaviors/lolo/spec/codec/lolo-source.parity/recall-at-k.lolo +2 -1
  86. package/behaviors/lolo/spec/codec/lolo-source.parity/recall-at-k.server.lolo +1 -0
  87. package/behaviors/lolo/spec/codec/lolo-source.parity/router-trio.events.json +18 -0
  88. package/behaviors/lolo/spec/codec/lolo-source.parity/router-trio.replay.goldens.json +87 -0
  89. package/behaviors/lolo/spec/codec/lolo-source.parity/store-pair.events.json +58 -0
  90. package/behaviors/lolo/spec/codec/lolo-source.parity/store-pair.replay.goldens.json +238 -0
  91. package/behaviors/lolo/spec/codec/lolo-swift.replay.goldens.json +15599 -2204
  92. package/behaviors/lolo/spec/codec/lolo-typescript.replay.goldens.json +28930 -28929
  93. package/behaviors/lolo/spec/connect/bearer-api.replay.goldens.json +1 -1
  94. package/behaviors/lolo/spec/connect/esign.replay.goldens.json +3 -3
  95. package/behaviors/lolo/spec/connect/github.replay.goldens.json +13 -13
  96. package/behaviors/lolo/spec/connect/google-calendar.replay.goldens.json +2 -2
  97. package/behaviors/lolo/spec/connect/image.replay.goldens.json +1 -1
  98. package/behaviors/lolo/spec/connect/meta-ads.replay.goldens.json +2 -2
  99. package/behaviors/lolo/spec/connect/stdio-lines.replay.goldens.json +90 -0
  100. package/behaviors/lolo/spec/connect/twilio.replay.goldens.json +2 -2
  101. package/behaviors/lolo/spec/connect/youtube.replay.goldens.json +1 -1
  102. package/behaviors/lolo/spec/dev/guest-session.replay.goldens.json +824 -0
  103. package/behaviors/lolo/spec/dev/mock-seed-marks.replay.goldens.json +365 -0
  104. package/behaviors/lolo/spec/dev/verify-walk.replay.goldens.json +2 -1
  105. package/behaviors/lolo/spec/gpu/gpu-compute.replay.goldens.json +784 -0
  106. package/behaviors/lolo/spec/mem/mem-buffer.replay.goldens.json +97 -1
  107. package/behaviors/lolo/spec/ml/vector-write.goldens.json +1 -1
  108. package/behaviors/lolo/spec/ml/vector-write.replay.goldens.json +2 -2
  109. package/behaviors/lolo/spec/net/http-client-call-host.replay.goldens.json +3 -3
  110. package/behaviors/lolo/spec/net/http-client-env-host.replay.goldens.json +3 -3
  111. package/behaviors/lolo/spec/net/http-client.replay.goldens.json +56 -56
  112. package/behaviors/lolo/spec/net/http-fetch.replay.goldens.json +2 -2
  113. package/behaviors/lolo/spec/net/npm-lookup.replay.goldens.json +1 -1
  114. package/behaviors/lolo/spec/net/npm-registry.replay.goldens.json +2 -2
  115. package/behaviors/lolo/spec/net/server-declared-traits.replay.goldens.json +6 -3
  116. package/behaviors/lolo/spec/net/server-external-inputs.replay.goldens.json +16 -8
  117. package/behaviors/lolo/spec/net/server-retargeted-leg.replay.goldens.json +4 -2
  118. package/behaviors/lolo/spec/net/server-untargeted-discovery.replay.goldens.json +50 -45
  119. package/behaviors/lolo/spec/ops/llm-spend-board.replay.goldens.json +112 -16
  120. package/behaviors/lolo/spec/store/firestore-twin.replay.goldens.json +1 -1
  121. package/behaviors/lolo/spec/store/row-store-postgres.gen/record_real_sql.py +1 -1
  122. package/behaviors/lolo/spec/ui/game/fx-particles.replay.goldens.json +37 -0
  123. package/behaviors/lolo/ui/avl/atoms/std-avl-cosmic-zoom.lolo +2 -2
  124. package/behaviors/lolo/ui/game/atoms/std-fx-particles.lolo +10 -1
  125. package/behaviors/lolo/ui/game/atoms/ui-draw-fx-layer.lolo +4 -4
  126. package/behaviors/lolo/ui/game/organisms/std-arcade-board-3d.lolo +9 -9
  127. package/behaviors/lolo/ui/game/organisms/std-crew-board-2d.lolo +4 -4
  128. package/behaviors/lolo/ui/game/organisms/std-dungeon-board-2d.lolo +5 -5
  129. package/behaviors/lolo/ui/game/organisms/std-market-board-3d.lolo +9 -9
  130. package/behaviors/lolo/ui/game/organisms/std-objective-board-3d.lolo +9 -9
  131. package/behaviors/lolo/ui/game/organisms/std-platformer-board-2d.lolo +5 -5
  132. package/behaviors/lolo/ui/game/organisms/std-platformer-puzzle.lolo +4 -4
  133. package/behaviors/lolo/ui/game/organisms/std-survival-board-3d.lolo +9 -9
  134. package/behaviors/lolo/ui/game/organisms/std-tactics-board-2d.lolo +5 -5
  135. package/behaviors/lolo/ui/game/organisms/std-tactics-board-3d.lolo +9 -9
  136. package/behaviors/registry/auth/atoms/std-dev-personas.orb +1 -1
  137. package/behaviors/registry/cli/atoms/std-orb-goldens.orb +1 -1
  138. package/behaviors/registry/cli/atoms/std-orb-lint-mem-handles.orb +1 -1
  139. package/behaviors/registry/cli/atoms/std-orb-lint-os-grants.orb +1 -1
  140. package/behaviors/registry/cli/atoms/std-orb-mcp.orb +1 -1
  141. package/behaviors/registry/cli/atoms/std-orb-serve.orb +1 -1
  142. package/behaviors/registry/codec/atoms/std-lolo-kotlin.orb +1 -1
  143. package/behaviors/registry/codec/atoms/std-lolo-python.orb +1 -1
  144. package/behaviors/registry/codec/atoms/std-lolo-rust.orb +1 -1
  145. package/behaviors/registry/codec/atoms/std-lolo-source.orb +1 -1
  146. package/behaviors/registry/codec/atoms/std-lolo-swift.orb +1 -1
  147. package/behaviors/registry/codec/atoms/std-lolo-typescript.orb +1 -1
  148. package/behaviors/registry/connect/atoms/std-meta-ads.orb +1 -1
  149. package/behaviors/registry/connect/atoms/std-stdio-lines.orb +1 -1
  150. package/behaviors/registry/connect/atoms/std-youtube.orb +1 -1
  151. package/behaviors/registry/dev/atoms/std-guest-session.orb +1 -1
  152. package/behaviors/registry/dev/atoms/std-mock-seed-marks.orb +1 -0
  153. package/behaviors/registry/dev/organisms/std-behavior-playground.orb +37 -0
  154. package/behaviors/registry/dev/organisms/std-launchpad.orb +25 -0
  155. package/behaviors/registry/gpu/atoms/std-gpu-compute.orb +1 -0
  156. package/behaviors/registry/net/atoms/std-http-client.orb +1 -1
  157. package/behaviors/registry/net/atoms/std-http-fetch.orb +1 -1
  158. package/behaviors/registry/net/atoms/std-npm-lookup.orb +1 -1
  159. package/behaviors/registry/net/atoms/std-npm-registry.orb +1 -1
  160. package/behaviors/registry/spec/cli/lint-all.orb +1 -1
  161. package/behaviors/registry/spec/codec/lolo-source.fixtures/compose-pair.orb +1 -0
  162. package/behaviors/registry/spec/codec/lolo-source.fixtures/config-read.orb +1 -1
  163. package/behaviors/registry/spec/codec/lolo-source.fixtures/divide-default.orb +1 -1
  164. package/behaviors/registry/spec/codec/lolo-source.fixtures/divide-plain.orb +1 -1
  165. package/behaviors/registry/spec/codec/lolo-source.fixtures/get-past-end.orb +1 -1
  166. package/behaviors/registry/spec/codec/lolo-source.fixtures/list-call.orb +1 -1
  167. package/behaviors/registry/spec/codec/lolo-source.fixtures/list-plain.orb +1 -1
  168. package/behaviors/registry/spec/codec/lolo-source.fixtures/minus-binary.orb +1 -1
  169. package/behaviors/registry/spec/codec/lolo-source.fixtures/minus-unary.orb +1 -1
  170. package/behaviors/registry/spec/codec/lolo-source.fixtures/nested-let.orb +1 -1
  171. package/behaviors/registry/spec/codec/lolo-source.fixtures/no-machine.orb +1 -1
  172. package/behaviors/registry/spec/codec/lolo-source.fixtures/no-template.orb +1 -1
  173. package/behaviors/registry/spec/codec/lolo-source.fixtures/nth-past-end.orb +1 -1
  174. package/behaviors/registry/spec/codec/lolo-source.fixtures/nth-raw.orb +1 -1
  175. package/behaviors/registry/spec/codec/lolo-source.fixtures/ports-call.orb +1 -1
  176. package/behaviors/registry/spec/codec/lolo-source.fixtures/range-one.orb +1 -1
  177. package/behaviors/registry/spec/codec/lolo-source.fixtures/range-two.orb +1 -1
  178. package/behaviors/registry/spec/codec/lolo-source.fixtures/router-trio.orb +1 -0
  179. package/behaviors/registry/spec/codec/lolo-source.fixtures/store-pair.orb +1 -0
  180. package/behaviors/registry/spec/codec/lolo-source.fixtures/string-literal.orb +1 -1
  181. package/behaviors/registry/spec/codec/lolo-source.parity/agent-step.orb +1 -1
  182. package/behaviors/registry/spec/codec/lolo-source.parity/agent-step.server.orb +1 -1
  183. package/behaviors/registry/spec/codec/lolo-source.parity/chunk.orb +1 -1
  184. package/behaviors/registry/spec/codec/lolo-source.parity/chunk.server.orb +1 -1
  185. package/behaviors/registry/spec/codec/lolo-source.parity/cosine.orb +1 -1
  186. package/behaviors/registry/spec/codec/lolo-source.parity/cosine.server.orb +1 -1
  187. package/behaviors/registry/spec/codec/lolo-source.parity/recall-at-k.orb +1 -1
  188. package/behaviors/registry/spec/codec/lolo-source.parity/recall-at-k.server.orb +1 -1
  189. package/behaviors/registry/ui/avl/atoms/std-avl-cosmic-zoom.orb +1 -1
  190. package/behaviors/registry/ui/game/atoms/std-fx-particles.orb +1 -1
  191. package/behaviors/registry/ui/game/atoms/ui-draw-fx-layer.orb +1 -1
  192. package/behaviors/registry/ui/game/organisms/std-arcade-board-3d.orb +20 -13
  193. package/behaviors/registry/ui/game/organisms/std-crew-board-2d.orb +9 -5
  194. package/behaviors/registry/ui/game/organisms/std-dungeon-board-2d.orb +17 -7
  195. package/behaviors/registry/ui/game/organisms/std-market-board-3d.orb +19 -15
  196. package/behaviors/registry/ui/game/organisms/std-objective-board-3d.orb +15 -12
  197. package/behaviors/registry/ui/game/organisms/std-platformer-board-2d.orb +17 -7
  198. package/behaviors/registry/ui/game/organisms/std-platformer-puzzle.orb +4 -0
  199. package/behaviors/registry/ui/game/organisms/std-survival-board-3d.orb +15 -12
  200. package/behaviors/registry/ui/game/organisms/std-tactics-board-2d.orb +13 -6
  201. package/behaviors/registry/ui/game/organisms/std-tactics-board-3d.orb +14 -12
  202. package/canonical-operators.json +1426 -103
  203. package/dist/{chunk-EK22WRB6.js → chunk-2UGHBVU2.js} +2 -2
  204. package/dist/{chunk-GDMH5T4J.js → chunk-3DK7GI2C.js} +2 -2
  205. package/dist/chunk-3MDASC5C.js +26 -0
  206. package/dist/{chunk-K5ZI27PB.js → chunk-3PHO4RRF.js} +1 -1
  207. package/dist/{chunk-7IEMMYM6.js → chunk-4MJCLAZW.js} +1 -1
  208. package/dist/{chunk-W4IEV4BY.js → chunk-55JPIL7A.js} +2 -2
  209. package/dist/{chunk-RUGBZTV3.js → chunk-66BLZLFI.js} +1 -1
  210. package/dist/{chunk-YWFISV7L.js → chunk-66RAJFOD.js} +1 -1
  211. package/dist/{chunk-JWOWWGNZ.js → chunk-6ED4SUC6.js} +1 -1
  212. package/dist/{chunk-LL7P6EII.js → chunk-6KFCHNE2.js} +2 -2
  213. package/dist/{chunk-GFBL2TW6.js → chunk-A4QB3Y6L.js} +1 -1
  214. package/dist/chunk-BVWMLS32.js +123 -0
  215. package/dist/{chunk-5KQCGSNC.js → chunk-CRKVDCY7.js} +1 -1
  216. package/dist/{chunk-WHQDLLC3.js → chunk-EKWEY4OJ.js} +1 -1
  217. package/dist/{chunk-Y3BRVNYK.js → chunk-EU22GCGV.js} +2 -2
  218. package/dist/{chunk-XQPYTDZ4.js → chunk-FB6PKNRS.js} +1 -1
  219. package/dist/{chunk-UX3MDFX6.js → chunk-FSVOJQLP.js} +1 -1
  220. package/dist/{chunk-LDBD2FBQ.js → chunk-GAKLBWBR.js} +1 -1
  221. package/dist/{chunk-C3IEMPRZ.js → chunk-GO3FKBV2.js} +2 -2
  222. package/dist/{chunk-LZSPEHSM.js → chunk-GPDTJHYY.js} +1 -1
  223. package/dist/{chunk-W5ABMOXU.js → chunk-JQBWLH5V.js} +1 -1
  224. package/dist/{chunk-63X6RNY6.js → chunk-KKW3JHTC.js} +1 -1
  225. package/dist/{chunk-5PLJE42Q.js → chunk-LF2EZVAM.js} +1 -1
  226. package/dist/{chunk-RXWBYWQB.js → chunk-LGCKOZP3.js} +2 -2
  227. package/dist/{chunk-JJEADYP7.js → chunk-LMZ6XJFB.js} +2 -2
  228. package/dist/{chunk-CWYSQZJU.js → chunk-M2YQNSAZ.js} +2 -2
  229. package/dist/{chunk-GNCKJV3P.js → chunk-MKWHYBIS.js} +1 -1
  230. package/dist/{chunk-ZB2CLGEG.js → chunk-MXBGYTYF.js} +1 -1
  231. package/dist/{chunk-UN76TRSK.js → chunk-NH6MXHZR.js} +41 -41
  232. package/dist/{chunk-II2VW7T6.js → chunk-ODBIX4DB.js} +1 -1
  233. package/dist/{chunk-3F3CNWOG.js → chunk-OYDQR6DT.js} +2 -2
  234. package/dist/{chunk-FVL6BT6L.js → chunk-PD6POR44.js} +1 -1
  235. package/dist/{chunk-U6USXZ5M.js → chunk-PHFT3QNS.js} +2 -2
  236. package/dist/{chunk-RJYKIZMS.js → chunk-PQZ6PVKG.js} +2 -2
  237. package/dist/{chunk-TQPQXCSZ.js → chunk-Q6NHXIOZ.js} +2 -2
  238. package/dist/{chunk-KYGWVCTM.js → chunk-QMDVYTB7.js} +1 -1
  239. package/dist/{chunk-XKTATY45.js → chunk-RW2KMSG5.js} +4 -4
  240. package/dist/{chunk-UHNSPTFT.js → chunk-SA2ZS24W.js} +1 -1
  241. package/dist/{chunk-6YPUQK36.js → chunk-SFWP4UMK.js} +2 -2
  242. package/dist/{chunk-ZZYLFHBU.js → chunk-TLNEQA4D.js} +1 -1
  243. package/dist/{chunk-RGTBRWWA.js → chunk-TOODE5AD.js} +2 -2
  244. package/dist/{chunk-QGWAHOFR.js → chunk-U57GY7SM.js} +2 -2
  245. package/dist/{chunk-FDJZKB7J.js → chunk-UIDQQJSX.js} +1 -1
  246. package/dist/{chunk-LLH3WXM3.js → chunk-UVFP2B7I.js} +1 -1
  247. package/dist/{chunk-4OF7727E.js → chunk-VEGZPCTZ.js} +2 -2
  248. package/dist/{chunk-73YUPNIT.js → chunk-VXN4V7LC.js} +1 -1
  249. package/dist/{chunk-4D3W6AAE.js → chunk-YHQVZWPG.js} +1 -1
  250. package/dist/{chunk-XXYBHYLM.js → chunk-YQO3TO66.js} +2 -2
  251. package/dist/{chunk-YZAYFR5A.js → chunk-ZSJ3GEOJ.js} +1 -1
  252. package/dist/index.d.ts +3 -3
  253. package/dist/index.js +50 -50
  254. package/dist/modules/anim.js +2 -2
  255. package/dist/modules/array.js +2 -2
  256. package/dist/modules/auth.js +3 -3
  257. package/dist/modules/behavior.js +2 -2
  258. package/dist/modules/bit.js +2 -2
  259. package/dist/modules/browser.js +2 -2
  260. package/dist/modules/bytes.js +2 -2
  261. package/dist/modules/codec.js +3 -3
  262. package/dist/modules/composition.js +2 -2
  263. package/dist/modules/core.js +2 -2
  264. package/dist/modules/csv.js +2 -2
  265. package/dist/modules/ffi.js +3 -3
  266. package/dist/modules/format.js +2 -2
  267. package/dist/modules/geo.js +2 -2
  268. package/dist/modules/gpu.d.ts +12 -0
  269. package/dist/modules/gpu.js +3 -0
  270. package/dist/modules/grid.js +2 -2
  271. package/dist/modules/i18n.js +2 -2
  272. package/dist/modules/index.d.ts +1 -2
  273. package/dist/modules/index.js +45 -46
  274. package/dist/modules/json.js +2 -2
  275. package/dist/modules/kernel.js +3 -3
  276. package/dist/modules/kv.js +3 -3
  277. package/dist/modules/llm.js +2 -2
  278. package/dist/modules/math.js +2 -2
  279. package/dist/modules/mem.js +3 -3
  280. package/dist/modules/object.js +2 -2
  281. package/dist/modules/os-common.d.ts +1 -1
  282. package/dist/modules/os-common.js +2 -2
  283. package/dist/modules/os-desktop.js +3 -3
  284. package/dist/modules/os-dev.js +3 -3
  285. package/dist/modules/os-dir.js +3 -3
  286. package/dist/modules/os-env-stdio.js +3 -3
  287. package/dist/modules/os-fs.js +3 -3
  288. package/dist/modules/os-net.js +3 -3
  289. package/dist/modules/os-path.js +3 -3
  290. package/dist/modules/os-process.js +3 -3
  291. package/dist/modules/os-sys.js +3 -3
  292. package/dist/modules/os-time-users.js +3 -3
  293. package/dist/modules/os.js +13 -13
  294. package/dist/modules/path.js +2 -2
  295. package/dist/modules/prob.js +2 -2
  296. package/dist/modules/program.js +2 -2
  297. package/dist/modules/session.js +2 -2
  298. package/dist/modules/str.js +2 -2
  299. package/dist/modules/time.js +2 -2
  300. package/dist/modules/validate.js +2 -2
  301. package/dist/modules/vector.js +2 -2
  302. package/dist/modules/workspace.js +2 -2
  303. package/dist/modules/xml.js +2 -2
  304. package/dist/modules/yaml.js +2 -2
  305. package/dist/registry.d.ts +2 -2
  306. package/dist/registry.js +49 -49
  307. package/dist/{types-BA4LkhNJ.d.ts → types-CgiGhK6t.d.ts} +17 -3
  308. package/package.json +5 -5
  309. package/dist/chunk-F5TP25JA.js +0 -26
  310. package/dist/chunk-NE4WSTN7.js +0 -26
  311. package/dist/modules/trace.d.ts +0 -15
  312. package/dist/modules/trace.js +0 -2
  313. /package/dist/{chunk-SHSBTDDX.js → chunk-QUQ33UXH.js} +0 -0
@@ -1 +1 @@
1
- {"typeContractVersion":1,"types":{"EmulatorError":[{"nullable":false,"name":"message","type":"string"}],"EmulatorReply":[{"nullable":false,"name":"error","type":"object","properties":[{"nullable":false,"name":"message","type":"string"}],"projectedFrom":{"type":"EmulatorError"}}],"HttpHeader":[{"nullable":false,"name":"name","type":"string","required":true},{"nullable":false,"name":"value","type":"string","required":true}],"PersonaSignInBody":[{"nullable":false,"name":"id","type":"string"}]},"name":"std-dev-personas","version":"1.0.0","description":"std-dev-personas — sign in as a development persona against the local Firebase Auth emulator. Compose it with linkedEntity set to the app's identity entity: its rows are the personas. POST /api/hooks/personas answers 200 { success, personas, source } (every row with a non-empty id; source identity-entity, or none when there are no rows). POST /api/hooks/persona-sign-in with { id } makes that row an emulator user (uid = id, display name = name, every other non-null field but email a custom claim) and answers 200 { success, customToken, authEmulatorHost, projectId }, the token unsigned (alg none), which only the emulator accepts. A composed client may also ask by event (PERSONAS_REQUESTED, PERSONA_SIGN_IN_REQUESTED { id }) and read the same answers (PERSONAS_ANSWERED, PERSONA_SIGN_IN_ANSWERED); the sign-in token it carries is the emulator's unsigned alg-none token, accepted only by the local emulator, and this dev-only path is the one exception to tokens-never-in-payloads. Both answer 404 unless FIREBASE_AUTH_EMULATOR_HOST is 127.0.0.1:9099, so a deployment lists and signs in nobody; a body without an id is 400, an unknown id 404, a field named like a reserved token claim or an emulator refusal 500. The emulator calls go through the composed std-http-client trait PersonaHttp (127.0.0.1:9099 over plain TCP, net grant); its authorization header is the declared credential FIREBASE_AUTH_EMULATOR_OWNER (Bearer prefix), filled by the host at the send, so no token is written in the program.","orbitals":[{"name":"DevPersonasOrbital","id":"orb_GRG6R6W6MS3ACHNV87R51792MV","uses":[{"from":"almadar-std/dev-personas","as":"Spec"},{"from":"std/behaviors/std-http-client","as":"Http"}],"entity":{"name":"DevPersona","id":"ent_DR5Y6561630K1S4Y5EJPZQEHNF","collection":"dev_personas","persistence":"persistent","fields":[{"nullable":false,"name":"id","type":"string","required":true},{"nullable":false,"name":"name","type":"string","description":"Shown on the persona switcher and set as the emulator user's display name."},{"nullable":false,"name":"email","type":"email","description":"Kept off the token claims."},{"nullable":false,"name":"role","type":"string","description":"What a guard on the viewer's role reads; travels as a custom claim so the persona is the same viewer after sign-in."}]},"traits":[{"ref":"Http.traits.HttpClient","id":"trt_7AKNK5M1DK0PSP17CKAQGC8XHC","name":"PersonaHttp","config":{"host":{"type":"unknown","default":"127.0.0.1","wired":true},"port":{"type":"unknown","default":9099,"wired":true},"tls":{"type":"unknown","default":false,"wired":true},"serverName":{"type":"unknown","default":"127.0.0.1","wired":true},"credential":{"type":"unknown","default":"FIREBASE_AUTH_EMULATOR_OWNER","wired":true},"credentialHeader":{"type":"unknown","default":"authorization","wired":true},"credentialPrefix":{"type":"unknown","default":"Bearer ","wired":true}},"listens":[{"event":"DP_POST","triggers":"HTTP_SEND","source":{"kind":"trait","trait":"DevPersonas"}}]},{"name":"DevPersonas","id":"trt_3VX5AA4EA5752MHZ306BR66YKD","entityRebindable":true,"entityContract":{"requires":[],"provides":[]},"effectRow":[{"kind":"emit","resource":"ANSWER_TOKEN_MINT"},{"kind":"emit","resource":"ANSWER_TOKEN_MINTED"},{"kind":"emit","resource":"DP_POST"},{"kind":"emit","resource":"PERSONAS_ANSWERED"},{"kind":"emit","resource":"PERSONAS_CALLED"},{"kind":"emit","resource":"PERSONAS_FAILED"},{"kind":"emit","resource":"PERSONA_SIGN_IN_ANSWERED"},{"kind":"emit","resource":"PERSONA_SIGN_IN_REFUSED"},{"kind":"emit","resource":"SIGN_IN_CALLED"},{"kind":"emit","resource":"SIGN_IN_CREATED"},{"kind":"emit","resource":"SIGN_IN_UPDATED"},{"kind":"emit","resource":"TOKEN_MINT"},{"kind":"emit","resource":"TOKEN_MINTED"},{"kind":"fetch","resource":"DevPersona"},{"kind":"identity/sign-in"},{"kind":"os/getenv"}],"linkedEntity":"DevPersona","linkedEntityId":"ent_DR5Y6561630K1S4Y5EJPZQEHNF","entityRefIds":{"DevPersona":"ent_DR5Y6561630K1S4Y5EJPZQEHNF"},"emits":[{"event":"PERSONAS_CALLED","eventId":"evt_6XFGWHY03V01XS7DHX7BSGS7PW","description":"Internal: a list by request, handed to the same arms the personas hook runs.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"rawBody","type":"string"}]},{"event":"SIGN_IN_CALLED","eventId":"evt_3HJ9F9GBK25SH8T1B9WF8V0CHF","description":"Internal: a sign-in by id, handed to the same arms the persona-sign-in hook runs.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"rawBody","type":"string"}]},{"event":"PERSONAS_ANSWERED","eventId":"evt_Q65S5BYSK7CSKPMX1MHPY9K1XM","description":"The answer of the personas hook, an HTTP-shaped answer (status, JSON text body) a composed client trait may read.","tier":"essential","scope":"external","payloadSchema":[{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"body","type":"string","required":true}]},{"event":"PERSONA_SIGN_IN_ANSWERED","eventId":"evt_7DMZH037CGKP80W9HZQAJCE7PE","description":"The answer of the persona-sign-in hook, an HTTP-shaped answer (status, JSON text body) a composed client trait may read.","tier":"essential","scope":"external","payloadSchema":[{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"body","type":"string","required":true}]},{"event":"PERSONAS_HOST","eventId":"evt_04N2KK43YM1ZACMT20MQWYKAYH","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST on a list.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"}]},{"event":"PERSONAS_ROWS","eventId":"evt_SQKK5ARQ88BM483WVGTH7ESD53","description":"Internal: the identity rows.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"data","type":"[object]","required":true,"properties":[{"nullable":false,"name":"id","type":"string","required":true},{"nullable":false,"name":"name","type":"string"},{"nullable":false,"name":"email","type":"email"},{"nullable":false,"name":"role","type":"string"}],"entity":"DevPersona","items":{"nullable":false,"name":"","type":"DevPersona","projectedFrom":{"type":"DevPersona"}}},{"nullable":false,"name":"totalCount","type":"number","required":true}]},{"event":"PERSONAS_FAILED","eventId":"evt_RCVE2YHEDAQ6N3HC5V51TNF7TW","description":"Internal: reading the environment or the rows failed.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"}]},{"event":"SIGN_IN_HOST","eventId":"evt_F20VPTVA99N4MJ3R6PWDKDNNH5","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST on a sign-in, keyed by the persona id.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"},{"nullable":false,"name":"key","type":"string","required":true}]},{"event":"DP_POST","eventId":"evt_S7BSVG0RAVC5DQC06WCB940DGJ","description":"Internal: one call to the Auth emulator, for the HTTP client.","tier":"internal","scope":"external","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"method","type":"string","required":true},{"nullable":false,"name":"target","type":"string","required":true},{"nullable":false,"name":"headers","type":"[object]","required":true,"properties":[{"nullable":false,"name":"name","type":"string","required":true},{"nullable":false,"name":"value","type":"string","required":true}],"items":{"nullable":false,"name":"","type":"HttpHeader","projectedFrom":{"type":"HttpHeader"}}},{"nullable":false,"name":"body","type":"bytes","required":true},{"nullable":false,"name":"stream","type":"string","required":true}]},{"event":"SIGN_IN_ROW","eventId":"evt_5WSMQRHG29R14S27Q43SK10QWR","description":"Internal: the persona row to sign in as.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"data","type":"object","required":true,"properties":[{"nullable":false,"name":"id","type":"string","required":true},{"nullable":false,"name":"name","type":"string"},{"nullable":false,"name":"email","type":"email"},{"nullable":false,"name":"role","type":"string"}],"entity":"DevPersona","projectedFrom":{"type":"DevPersona"}}]},{"event":"SIGN_IN_CLAIMS","eventId":"evt_HDR0V0XZCFZP7TTP5ZCR9EQ4NP","description":"Internal: the persona row read again for its claims.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"data","type":"object","required":true,"properties":[{"nullable":false,"name":"id","type":"string","required":true},{"nullable":false,"name":"name","type":"string"},{"nullable":false,"name":"email","type":"email"},{"nullable":false,"name":"role","type":"string"}],"entity":"DevPersona","projectedFrom":{"type":"DevPersona"}}]},{"event":"SIGN_IN_CREATED","eventId":"evt_5AWT64JZ4WFJEAGF2AC2HVGQX0","description":"Internal: the Auth emulator's answer to creating the user.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"body","type":"string","required":true},{"nullable":false,"name":"key","type":"string","required":true}]},{"event":"SIGN_IN_UPDATED","eventId":"evt_7V78MVH02DG16R2QP1T0ERBVHF","description":"Internal: the Auth emulator's answer to setting the display name and claims.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"body","type":"string","required":true},{"nullable":false,"name":"key","type":"string","required":true}]},{"event":"SIGN_IN_ROW_MISSED","eventId":"evt_60AB67VMB2T5HECHKTMVW3B2BN","description":"Internal: the persona row could not be read; code not-found when no row has that id.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string","required":true},{"nullable":false,"name":"code","type":"string"}]},{"event":"AUTO_HOST","eventId":"evt_YVY950S3MPHTBBHY70D9FG6645","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST at a session's start (autoSignIn).","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"},{"nullable":false,"name":"key","type":"string"}]},{"event":"AUTO_FAILED","eventId":"evt_HZS98MEDEP6QB6SF54GYSS8VPJ","description":"Internal: the environment could not be read at a session's start; the session stays as it is.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"kind","type":"string"}]},{"event":"ACT_AS_HOST","eventId":"evt_PH2X3AKWB8Y5MERFS8A5KAAEYM","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST on a PERSONA_ACT_AS, keyed by the persona id.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"},{"nullable":false,"name":"key","type":"string"}]},{"event":"ACT_AS_FAILED","eventId":"evt_BY26Z0PSM1CT0ZCGG79ZD5B57A","description":"Internal: the environment could not be read for a PERSONA_ACT_AS; the sign-in is refused.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"kind","type":"string"}]},{"event":"TOKEN_HOST","eventId":"evt_BS8FDH73YHHZ8GVWZXWT6K8XSM","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST on a TOKEN_SIGN_IN_REQUESTED, keyed by the token.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"},{"nullable":false,"name":"key","type":"string"}]},{"event":"TOKEN_HOST_FAILED","eventId":"evt_WSYKMFRGR48C26RA6VWMN8A5VP","description":"Internal: the environment could not be read for a TOKEN_SIGN_IN_REQUESTED; the sign-in is refused.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"kind","type":"string"}]},{"event":"TOKEN_MINT","eventId":"evt_RKAK0BZ312HGHCJ69JQBHNTW09","description":"Internal: build the emulator's unsigned custom token for the persona key; it is emitted only from the arms that read the emulator host first, and the token signs the session in.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"purpose","type":"string","required":true}]},{"event":"ANSWER_TOKEN_MINT","eventId":"evt_RNAGCA69EF4Q7PATZ2QW2D1P21","description":"Internal: build the emulator's unsigned custom token for the persona key a sign-in update answered; the answer carries it back to the caller and never signs a session in.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true}]},{"event":"ANSWER_TOKEN_MINTED","eventId":"evt_TKKW0P6N1DAGPREX18DRD8TQJ4","description":"Internal: the unsigned custom token a sign-in update answered, on its way back to the caller.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"token","type":"string","required":true}]},{"event":"TOKEN_MINTED","eventId":"evt_E8YWAQ356MJKA8PBF47E104XJ6","description":"Internal: the unsigned custom token of one persona, emitted only by the env-guarded TOKEN_MINT.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"purpose","type":"string","required":true},{"nullable":false,"name":"token","type":"string","required":true}]},{"event":"PERSONA_SIGNED_IN","eventId":"evt_0W4055DNDBTPNZBYT2J0M6BAMQ","description":"The session is signed in as the persona: jws/verify accepted its emulator token and identity/sign-in bound the subject.","synonyms":"persona signed in","tier":"primary","scope":"external","payloadSchema":[{"nullable":false,"name":"subject","type":"string"}]},{"event":"PERSONA_SIGN_IN_REFUSED","eventId":"evt_5MQ3BW1RAWW5EDA6F2D4A74WXE","description":"The sign-in was refused: no-emulator when FIREBASE_AUTH_EMULATOR_HOST does not name the Auth emulator (or cannot be read), unsealed when jws/verify refused the emulator token, no-identity when the persona has no identity row (store).","synonyms":"persona sign-in refused","tier":"primary","scope":"external","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"kind","type":"string"}]},{"event":"SIGN_IN_FAILED","eventId":"evt_ZA0MHY3ZRCZW6FNQ574G52CXQA","description":"Internal: the environment, the row or the Auth emulator could not be reached.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"}]}],"listens":[{"event":"HTTP_REPLIED","triggers":"PERSONA_REPLIED","triggersId":"evt_HJWD6VK2WAHE56PX981ZQAWJ9W","source":{"kind":"trait","trait":"PersonaHttp","traitId":"trt_7AKNK5M1DK0PSP17CKAQGC8XHC"}},{"event":"HTTP_FAILED","triggers":"SIGN_IN_FAILED","triggersId":"evt_ZA0MHY3ZRCZW6FNQ574G52CXQA","source":{"kind":"trait","trait":"PersonaHttp","traitId":"trt_7AKNK5M1DK0PSP17CKAQGC8XHC"}}],"stateMachine":{"states":[{"name":"ready","isInitial":true}],"events":[{"key":"INIT","id":"evt_8EQ2CZPZABFN5Z804NX421Y02X","name":"Initialize"},{"key":"AUTO_HOST","id":"evt_YVY950S3MPHTBBHY70D9FG6645","name":"Auto Host","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST at a session's start (autoSignIn).","tier":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"},{"nullable":false,"name":"key","type":"string"}]},{"key":"AUTO_FAILED","id":"evt_HZS98MEDEP6QB6SF54GYSS8VPJ","name":"Auto Failed","description":"Internal: the environment could not be read at a session's start; the session stays as it is.","tier":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"kind","type":"string"}]},{"key":"TOKEN_MINT","id":"evt_RKAK0BZ312HGHCJ69JQBHNTW09","name":"Token Mint","description":"Internal: build the emulator's unsigned custom token for the persona key; it is emitted only from the arms that read the emulator host first, and the token signs the session in.","tier":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"purpose","type":"string","required":true}]},{"key":"ANSWER_TOKEN_MINT","id":"evt_RNAGCA69EF4Q7PATZ2QW2D1P21","name":"Answer Token Mint","description":"Internal: build the emulator's unsigned custom token for the persona key a sign-in update answered; the answer carries it back to the caller and never signs a session in.","tier":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true}]},{"key":"ANSWER_TOKEN_MINTED","id":"evt_TKKW0P6N1DAGPREX18DRD8TQJ4","name":"Answer Token Minted","description":"Internal: the unsigned custom token a sign-in update answered, on its way back to the caller.","tier":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"token","type":"string","required":true}]},{"key":"TOKEN_MINTED","id":"evt_E8YWAQ356MJKA8PBF47E104XJ6","name":"Token Minted","description":"Internal: the unsigned custom token of one persona, emitted only by the env-guarded TOKEN_MINT.","tier":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"purpose","type":"string","required":true},{"nullable":false,"name":"token","type":"string","required":true}]},{"key":"PERSONA_ACT_AS","id":"evt_SSK568SJHZS8ZY7NFA87563ZXF","name":"Persona Act As","description":"Sign the dispatching session in as the persona with this id (the seeder dispatches it into each per-owner session): its unsigned emulator token goes through jws/verify (allowUnsigned, the emulator issuer) and identity/sign-in in that session; answers PERSONA_SIGNED_IN { subject } or PERSONA_SIGN_IN_REFUSED { error, kind }.","synonyms":"act as persona, seed as persona","payloadSchema":[{"nullable":false,"name":"persona","type":"string","required":true}],"input":true,"listened":true},{"key":"ACT_AS_HOST","id":"evt_PH2X3AKWB8Y5MERFS8A5KAAEYM","name":"Act As Host","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST on a PERSONA_ACT_AS, keyed by the persona id.","tier":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"},{"nullable":false,"name":"key","type":"string"}]},{"key":"ACT_AS_FAILED","id":"evt_BY26Z0PSM1CT0ZCGG79ZD5B57A","name":"Act As Failed","description":"Internal: the environment could not be read for a PERSONA_ACT_AS; the sign-in is refused.","tier":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"kind","type":"string"}]},{"key":"TOKEN_SIGN_IN_REQUESTED","id":"evt_MMYZYMD6TQKDBK4XV273G307MS","name":"Token Sign In Requested","description":"Sign the session in with an emulator custom token a persona sign-in answered: jws/verify (allowUnsigned, the emulator issuer) then identity/sign-in; answers PERSONA_SIGNED_IN or PERSONA_SIGN_IN_REFUSED.","synonyms":"sign in with persona token","payloadSchema":[{"nullable":false,"name":"token","type":"string","required":true}],"listened":true},{"key":"TOKEN_HOST","id":"evt_BS8FDH73YHHZ8GVWZXWT6K8XSM","name":"Token Host","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST on a TOKEN_SIGN_IN_REQUESTED, keyed by the token.","tier":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"},{"nullable":false,"name":"key","type":"string"}]},{"key":"TOKEN_HOST_FAILED","id":"evt_WSYKMFRGR48C26RA6VWMN8A5VP","name":"Token Host Failed","description":"Internal: the environment could not be read for a TOKEN_SIGN_IN_REQUESTED; the sign-in is refused.","tier":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"kind","type":"string"}]},{"key":"PERSONA_SIGNED_IN","id":"evt_0W4055DNDBTPNZBYT2J0M6BAMQ","name":"Persona Signed In","description":"The session is signed in as the persona: jws/verify accepted its emulator token and identity/sign-in bound the subject.","synonyms":"persona signed in","tier":"primary","payloadSchema":[{"nullable":false,"name":"subject","type":"string"}]},{"key":"PERSONA_SIGN_IN_REFUSED","id":"evt_5MQ3BW1RAWW5EDA6F2D4A74WXE","name":"Persona Sign In Refused","description":"The sign-in was refused: no-emulator when FIREBASE_AUTH_EMULATOR_HOST does not name the Auth emulator (or cannot be read), unsealed when jws/verify refused the emulator token, no-identity when the persona has no identity row (store).","synonyms":"persona sign-in refused","tier":"primary","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"kind","type":"string"}]},{"key":"PERSONAS_REQUESTED","id":"evt_5RB7R6KH3GRHRDA6T1V3RB6KTB","name":"Personas Requested","description":"A client asks for the persona list; answered by PERSONAS_ANSWERED, as the hook is.","listened":true},{"key":"PERSONAS_CALLED","id":"evt_6XFGWHY03V01XS7DHX7BSGS7PW","name":"Personas Called","description":"Internal: a list by request, handed to the same arms the personas hook runs.","tier":"internal","payloadSchema":[{"nullable":false,"name":"headers","type":"Map<string,string>","items":{"nullable":false,"name":"","type":"string"}},{"nullable":false,"name":"rawBody","type":"string"}],"listened":true,"inbound":{"name":"personas","answers":"PERSONAS_ANSWERED"}},{"key":"PERSONAS_HOST","id":"evt_04N2KK43YM1ZACMT20MQWYKAYH","name":"Personas Host","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST on a list.","tier":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"}]},{"key":"PERSONAS_ROWS","id":"evt_SQKK5ARQ88BM483WVGTH7ESD53","name":"Personas Rows","description":"Internal: the identity rows.","tier":"internal","payloadSchema":[{"nullable":false,"name":"data","type":"[object]","required":true,"properties":[{"nullable":false,"name":"id","type":"string","required":true},{"nullable":false,"name":"name","type":"string"},{"nullable":false,"name":"email","type":"email"},{"nullable":false,"name":"role","type":"string"}],"entity":"DevPersona","items":{"nullable":false,"name":"","type":"DevPersona","projectedFrom":{"type":"DevPersona"}}},{"nullable":false,"name":"totalCount","type":"number","required":true}]},{"key":"PERSONAS_FAILED","id":"evt_RCVE2YHEDAQ6N3HC5V51TNF7TW","name":"Personas Failed","description":"Internal: reading the environment or the rows failed.","tier":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"}]},{"key":"PERSONA_SIGN_IN_REQUESTED","id":"evt_YH34PRTWERE7CAEW365GNN86VB","name":"Persona Sign In Requested","description":"A client asks to sign in as the persona with this id; answered by PERSONA_SIGN_IN_ANSWERED, as the hook is.","payloadSchema":[{"nullable":false,"name":"id","type":"string","required":true}],"listened":true},{"key":"SIGN_IN_CALLED","id":"evt_3HJ9F9GBK25SH8T1B9WF8V0CHF","name":"Sign In Called","description":"Internal: a sign-in by id, handed to the same arms the persona-sign-in hook runs.","tier":"internal","payloadSchema":[{"nullable":false,"name":"headers","type":"Map<string,string>","items":{"nullable":false,"name":"","type":"string"}},{"nullable":false,"name":"rawBody","type":"string"}],"listened":true,"inbound":{"name":"persona-sign-in","answers":"PERSONA_SIGN_IN_ANSWERED"}},{"key":"SIGN_IN_HOST","id":"evt_F20VPTVA99N4MJ3R6PWDKDNNH5","name":"Sign In Host","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST on a sign-in, keyed by the persona id.","tier":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"},{"nullable":false,"name":"key","type":"string","required":true}]},{"key":"SIGN_IN_ROW","id":"evt_5WSMQRHG29R14S27Q43SK10QWR","name":"Sign In Row","description":"Internal: the persona row to sign in as.","tier":"internal","payloadSchema":[{"nullable":false,"name":"data","type":"object","required":true,"properties":[{"nullable":false,"name":"id","type":"string","required":true},{"nullable":false,"name":"name","type":"string"},{"nullable":false,"name":"email","type":"email"},{"nullable":false,"name":"role","type":"string"}],"entity":"DevPersona","projectedFrom":{"type":"DevPersona"}}]},{"key":"PERSONA_REPLIED","id":"evt_HJWD6VK2WAHE56PX981ZQAWJ9W","name":"Persona Replied","description":"Internal: the HTTP client's reply from the Auth emulator, before its body is read as text.","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"headers","type":"Map<string,string>","items":{"nullable":false,"name":"","type":"string"}},{"nullable":false,"name":"body","type":"bytes","required":true}],"listened":true},{"key":"SIGN_IN_CREATED","id":"evt_5AWT64JZ4WFJEAGF2AC2HVGQX0","name":"Sign In Created","description":"Internal: the Auth emulator's answer to creating the user.","tier":"internal","payloadSchema":[{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"body","type":"string","required":true},{"nullable":false,"name":"key","type":"string","required":true}]},{"key":"SIGN_IN_CLAIMS","id":"evt_HDR0V0XZCFZP7TTP5ZCR9EQ4NP","name":"Sign In Claims","description":"Internal: the persona row read again for its claims.","tier":"internal","payloadSchema":[{"nullable":false,"name":"data","type":"object","required":true,"properties":[{"nullable":false,"name":"id","type":"string","required":true},{"nullable":false,"name":"name","type":"string"},{"nullable":false,"name":"email","type":"email"},{"nullable":false,"name":"role","type":"string"}],"entity":"DevPersona","projectedFrom":{"type":"DevPersona"}}]},{"key":"SIGN_IN_UPDATED","id":"evt_7V78MVH02DG16R2QP1T0ERBVHF","name":"Sign In Updated","description":"Internal: the Auth emulator's answer to setting the display name and claims.","tier":"internal","payloadSchema":[{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"body","type":"string","required":true},{"nullable":false,"name":"key","type":"string","required":true}]},{"key":"SIGN_IN_ROW_MISSED","id":"evt_60AB67VMB2T5HECHKTMVW3B2BN","name":"Sign In Row Missed","description":"Internal: the persona row could not be read; code not-found when no row has that id.","tier":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string","required":true},{"nullable":false,"name":"code","type":"string"}]},{"key":"SIGN_IN_FAILED","id":"evt_ZA0MHY3ZRCZW6FNQ574G52CXQA","name":"Sign In Failed","description":"Internal: the environment, the row or the Auth emulator could not be reached.","tier":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"}]},{"key":"PERSONAS_ANSWERED","id":"evt_Q65S5BYSK7CSKPMX1MHPY9K1XM","name":"Personas Answered","description":"The answer of the personas hook, an HTTP-shaped answer (status, JSON text body) a composed client trait may read.","tier":"essential","payloadSchema":[{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"body","type":"string","required":true}]},{"key":"PERSONA_SIGN_IN_ANSWERED","id":"evt_7DMZH037CGKP80W9HZQAJCE7PE","name":"Persona Sign In Answered","description":"The answer of the persona-sign-in hook, an HTTP-shaped answer (status, JSON text body) a composed client trait may read.","tier":"essential","payloadSchema":[{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"body","type":"string","required":true}]},{"key":"DP_POST","id":"evt_S7BSVG0RAVC5DQC06WCB940DGJ","name":"Dp Post","description":"Internal: one call to the Auth emulator, for the HTTP client.","tier":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"method","type":"string","required":true},{"nullable":false,"name":"target","type":"string","required":true},{"nullable":false,"name":"headers","type":"[object]","required":true,"properties":[{"nullable":false,"name":"name","type":"string","required":true},{"nullable":false,"name":"value","type":"string","required":true}],"items":{"nullable":false,"name":"","type":"HttpHeader","projectedFrom":{"type":"HttpHeader"}}},{"nullable":false,"name":"body","type":"bytes","required":true},{"nullable":false,"name":"stream","type":"string","required":true}]}],"transitions":[{"from":"ready","to":"ready","event":"INIT","eventId":"evt_8EQ2CZPZABFN5Z804NX421Y02X","guard":["=","@config.autoSignIn",""]},{"from":"ready","to":"ready","event":"INIT","eventId":"evt_8EQ2CZPZABFN5Z804NX421Y02X","guard":["!=","@config.autoSignIn",""],"effects":[["os/getenv","FIREBASE_AUTH_EMULATOR_HOST",{"key":"auto","emit":{"success":"AUTO_HOST","failure":"AUTO_FAILED"}}]]},{"from":"ready","to":"ready","event":"AUTO_HOST","eventId":"evt_YVY950S3MPHTBBHY70D9FG6645","guard":["=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["emit","TOKEN_MINT",{"key":"@config.autoSignIn","purpose":"sign-in"}]]},{"from":"ready","to":"ready","event":"AUTO_HOST","eventId":"evt_YVY950S3MPHTBBHY70D9FG6645","guard":["!=",["default","@payload.value",""],"@config.authEmulatorHost"]},{"from":"ready","to":"ready","event":"AUTO_FAILED","eventId":"evt_HZS98MEDEP6QB6SF54GYSS8VPJ"},{"from":"ready","to":"ready","event":"TOKEN_MINT","eventId":"evt_RKAK0BZ312HGHCJ69JQBHNTW09","effects":[["emit","TOKEN_MINTED",{"key":"@payload.key","purpose":"@payload.purpose","token":["str/concat",["str/replace-pattern",["str/replace-pattern",["str/replace-pattern",["base64/encode",["json/stringify",{"alg":"none","typ":"JWT"}]],"\\+","-"],"/","_"],"=+$",""],".",["str/replace-pattern",["str/replace-pattern",["str/replace-pattern",["base64/encode",["json/stringify",{"aud":["if",["!=","@config.emulatorAudience",""],"@config.emulatorAudience","@config.projectId"],"iat":["time/diff","@now","@config.epoch","s"],"exp":["+",["time/diff","@now","@config.epoch","s"],3600],"iss":["if",["!=","@config.emulatorIssuer",""],"@config.emulatorIssuer",["str/concat","https://securetoken.google.com/","@config.projectId"]],"sub":"@payload.key","uid":"@payload.key"}]],"\\+","-"],"/","_"],"=+$",""],"."]}]]},{"from":"ready","to":"ready","event":"ANSWER_TOKEN_MINT","eventId":"evt_RNAGCA69EF4Q7PATZ2QW2D1P21","effects":[["emit","ANSWER_TOKEN_MINTED",{"key":"@payload.key","token":["str/concat",["str/replace-pattern",["str/replace-pattern",["str/replace-pattern",["base64/encode",["json/stringify",{"alg":"none","typ":"JWT"}]],"\\+","-"],"/","_"],"=+$",""],".",["str/replace-pattern",["str/replace-pattern",["str/replace-pattern",["base64/encode",["json/stringify",{"aud":["if",["!=","@config.emulatorAudience",""],"@config.emulatorAudience","@config.projectId"],"iat":["time/diff","@now","@config.epoch","s"],"exp":["+",["time/diff","@now","@config.epoch","s"],3600],"iss":["if",["!=","@config.emulatorIssuer",""],"@config.emulatorIssuer",["str/concat","https://securetoken.google.com/","@config.projectId"]],"sub":"@payload.key","uid":"@payload.key"}]],"\\+","-"],"/","_"],"=+$",""],"."]}]]},{"from":"ready","to":"ready","event":"ANSWER_TOKEN_MINTED","eventId":"evt_TKKW0P6N1DAGPREX18DRD8TQJ4","effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":200,"body":["json/stringify",{"success":true,"customToken":"@payload.token","authEmulatorHost":"@config.authEmulatorHost","projectId":"@config.projectId"}]}]]},{"from":"ready","to":"ready","event":"TOKEN_MINTED","eventId":"evt_E8YWAQ356MJKA8PBF47E104XJ6","guard":["=","@payload.purpose","sign-in"],"effects":[["identity/sign-in",["jws/verify","@payload.token",[],{"issuer":["if",["!=","@config.emulatorIssuer",""],"@config.emulatorIssuer",["str/concat","https://securetoken.google.com/","@config.projectId"]],"audience":["if",["!=","@config.emulatorAudience",""],"@config.emulatorAudience","@config.projectId"],"allowUnsigned":true}],{"emit":{"success":"PERSONA_SIGNED_IN","failure":"PERSONA_SIGN_IN_REFUSED"}}]]},{"from":"ready","to":"ready","event":"PERSONA_ACT_AS","eventId":"evt_SSK568SJHZS8ZY7NFA87563ZXF","effects":[["os/getenv","FIREBASE_AUTH_EMULATOR_HOST",{"key":"@payload.persona","emit":{"success":"ACT_AS_HOST","failure":"ACT_AS_FAILED"}}]]},{"from":"ready","to":"ready","event":"ACT_AS_HOST","eventId":"evt_PH2X3AKWB8Y5MERFS8A5KAAEYM","guard":["=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["emit","TOKEN_MINT",{"key":"@payload.key","purpose":"sign-in"}]]},{"from":"ready","to":"ready","event":"ACT_AS_HOST","eventId":"evt_PH2X3AKWB8Y5MERFS8A5KAAEYM","guard":["!=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["emit","PERSONA_SIGN_IN_REFUSED",{"error":"persona sign-in refused: the Auth emulator is not configured","kind":"no-emulator"}]]},{"from":"ready","to":"ready","event":"ACT_AS_FAILED","eventId":"evt_BY26Z0PSM1CT0ZCGG79ZD5B57A","effects":[["emit","PERSONA_SIGN_IN_REFUSED",{"error":["str/concat","persona sign-in refused: the environment could not be read: ",["default","@payload.error",""]],"kind":"no-emulator"}]]},{"from":"ready","to":"ready","event":"TOKEN_SIGN_IN_REQUESTED","eventId":"evt_MMYZYMD6TQKDBK4XV273G307MS","effects":[["os/getenv","FIREBASE_AUTH_EMULATOR_HOST",{"key":"@payload.token","emit":{"success":"TOKEN_HOST","failure":"TOKEN_HOST_FAILED"}}]]},{"from":"ready","to":"ready","event":"TOKEN_HOST","eventId":"evt_BS8FDH73YHHZ8GVWZXWT6K8XSM","guard":["=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["identity/sign-in",["jws/verify","@payload.key",[],{"issuer":["if",["!=","@config.emulatorIssuer",""],"@config.emulatorIssuer",["str/concat","https://securetoken.google.com/","@config.projectId"]],"audience":["if",["!=","@config.emulatorAudience",""],"@config.emulatorAudience","@config.projectId"],"allowUnsigned":true}],{"emit":{"success":"PERSONA_SIGNED_IN","failure":"PERSONA_SIGN_IN_REFUSED"}}]]},{"from":"ready","to":"ready","event":"TOKEN_HOST","eventId":"evt_BS8FDH73YHHZ8GVWZXWT6K8XSM","guard":["!=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["emit","PERSONA_SIGN_IN_REFUSED",{"error":"persona sign-in refused: the Auth emulator is not configured","kind":"no-emulator"}]]},{"from":"ready","to":"ready","event":"TOKEN_HOST_FAILED","eventId":"evt_WSYKMFRGR48C26RA6VWMN8A5VP","effects":[["emit","PERSONA_SIGN_IN_REFUSED",{"error":["str/concat","persona sign-in refused: the environment could not be read: ",["default","@payload.error",""]],"kind":"no-emulator"}]]},{"from":"ready","to":"ready","event":"PERSONA_SIGNED_IN","eventId":"evt_0W4055DNDBTPNZBYT2J0M6BAMQ"},{"from":"ready","to":"ready","event":"PERSONA_SIGN_IN_REFUSED","eventId":"evt_5MQ3BW1RAWW5EDA6F2D4A74WXE"},{"from":"ready","to":"ready","event":"PERSONAS_REQUESTED","eventId":"evt_5RB7R6KH3GRHRDA6T1V3RB6KTB","effects":[["emit","PERSONAS_CALLED",{"rawBody":""}]]},{"from":"ready","to":"ready","event":"PERSONAS_CALLED","eventId":"evt_6XFGWHY03V01XS7DHX7BSGS7PW","effects":[["os/getenv","FIREBASE_AUTH_EMULATOR_HOST",{"key":"list","emit":{"success":"PERSONAS_HOST","failure":"PERSONAS_FAILED"}}]]},{"from":"ready","to":"ready","event":"PERSONAS_HOST","eventId":"evt_04N2KK43YM1ZACMT20MQWYKAYH","guard":["!=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["emit","PERSONAS_ANSWERED",{"status":404,"body":["json/stringify",{"success":false,"error":"no dev personas: the Auth emulator is not configured"}]}]]},{"from":"ready","to":"ready","event":"PERSONAS_HOST","eventId":"evt_04N2KK43YM1ZACMT20MQWYKAYH","guard":["=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["fetch","DevPersona",{"limit":"@config.maxRows","emit":{"success":"PERSONAS_ROWS","failure":"PERSONAS_FAILED"}}]]},{"from":"ready","to":"ready","event":"PERSONAS_ROWS","eventId":"evt_SQKK5ARQ88BM483WVGTH7ESD53","guard":[">","@payload.totalCount",["array/len","@payload.data"]],"effects":[["emit","PERSONAS_FAILED",{"error":["str/concat","DevPersona has ","@payload.totalCount"," rows, over the maxRows cap of ","@config.maxRows"]}]]},{"from":"ready","to":"ready","event":"PERSONAS_ROWS","eventId":"evt_SQKK5ARQ88BM483WVGTH7ESD53","effects":[["let",[["rows",["array/filter","@payload.data",["fn","r",["!=",["default","@r.id",""],""]]]]],["emit","PERSONAS_ANSWERED",{"status":200,"body":["json/stringify",{"success":true,"personas":"@rows","source":["if",[">",["array/len","@rows"],0],"identity-entity","none"]}]}]]]},{"from":"ready","to":"ready","event":"PERSONAS_FAILED","eventId":"evt_RCVE2YHEDAQ6N3HC5V51TNF7TW","effects":[["emit","PERSONAS_ANSWERED",{"status":500,"body":["json/stringify",{"success":false,"error":["default","@payload.error",""]}]}]]},{"from":"ready","to":"ready","event":"PERSONA_SIGN_IN_REQUESTED","eventId":"evt_YH34PRTWERE7CAEW365GNN86VB","effects":[["emit","SIGN_IN_CALLED",{"rawBody":["json/stringify",{"id":"@payload.id"}]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_CALLED","eventId":"evt_3HJ9F9GBK25SH8T1B9WF8V0CHF","guard":["=",["default",["object/get",["default",["json/parse",["default","@payload.rawBody","{}"],"PersonaSignInBody"],{}],"id"],""],""],"effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":400,"body":["json/stringify",{"success":false,"error":"expected { id }"}]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_CALLED","eventId":"evt_3HJ9F9GBK25SH8T1B9WF8V0CHF","guard":["!=",["default",["object/get",["default",["json/parse",["default","@payload.rawBody","{}"],"PersonaSignInBody"],{}],"id"],""],""],"effects":[["os/getenv","FIREBASE_AUTH_EMULATOR_HOST",{"key":["object/get",["default",["json/parse",["default","@payload.rawBody","{}"],"PersonaSignInBody"],{}],"id"],"emit":{"success":"SIGN_IN_HOST","failure":"SIGN_IN_FAILED"}}]]},{"from":"ready","to":"ready","event":"SIGN_IN_HOST","eventId":"evt_F20VPTVA99N4MJ3R6PWDKDNNH5","guard":["!=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":404,"body":["json/stringify",{"success":false,"error":"no dev personas: the Auth emulator is not configured"}]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_HOST","eventId":"evt_F20VPTVA99N4MJ3R6PWDKDNNH5","guard":["=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["fetch","DevPersona",{"id":"@payload.key","emit":{"success":"SIGN_IN_ROW","failure":"SIGN_IN_ROW_MISSED"}}]]},{"from":"ready","to":"ready","event":"SIGN_IN_ROW","eventId":"evt_5WSMQRHG29R14S27Q43SK10QWR","guard":[">",["array/len",["array/filter",["object/keys","@payload.data"],["fn","k",["array/includes","@config.reservedClaims","@k"]]]],0],"effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":500,"body":["json/stringify",{"success":false,"error":["str/concat","persona ","@payload.data.id"," has fields named like reserved token claims: ",["str/join",["array/filter",["object/keys","@payload.data"],["fn","k",["array/includes","@config.reservedClaims","@k"]]],", "]]}]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_ROW","eventId":"evt_5WSMQRHG29R14S27Q43SK10QWR","guard":["=",["array/len",["array/filter",["object/keys","@payload.data"],["fn","k",["array/includes","@config.reservedClaims","@k"]]]],0],"effects":[["emit","DP_POST",{"key":["str/concat","create:","@payload.data.id"],"method":"POST","target":["str/concat","/identitytoolkit.googleapis.com/v1/projects/","@config.projectId","/accounts"],"headers":[{"name":"Content-Type","value":"application/json"}],"body":["bytes/from-string",["json/stringify",["if",["!=",["default","@payload.data.name",""],""],{"localId":"@payload.data.id","displayName":"@payload.data.name"},{"localId":"@payload.data.id"}]]],"stream":"none"}]]},{"from":"ready","to":"ready","event":"PERSONA_REPLIED","eventId":"evt_HJWD6VK2WAHE56PX981ZQAWJ9W","guard":["str/startsWith","@payload.key","create:"],"effects":[["emit","SIGN_IN_CREATED",{"key":["str/slice","@payload.key",7],"status":"@payload.status","body":["default",["bytes/to-string","@payload.body"],""]}]]},{"from":"ready","to":"ready","event":"PERSONA_REPLIED","eventId":"evt_HJWD6VK2WAHE56PX981ZQAWJ9W","guard":["str/startsWith","@payload.key","update:"],"effects":[["emit","SIGN_IN_UPDATED",{"key":["str/slice","@payload.key",7],"status":"@payload.status","body":["default",["bytes/to-string","@payload.body"],""]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_CREATED","eventId":"evt_5AWT64JZ4WFJEAGF2AC2HVGQX0","guard":["and",["or",["<","@payload.status",200],[">=","@payload.status",300]],["not",["and",["!=",["json/parse","@payload.body","EmulatorReply"],null],["str/startsWith",["object/get",["json/parse","@payload.body","EmulatorReply"],"error.message",""],"DUPLICATE_LOCAL_ID"]]]],"effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":500,"body":["json/stringify",{"success":false,"error":["str/concat","the Auth emulator refused to create ","@payload.key",": ",["str/concat","@payload.status"]," ","@payload.body"]}]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_CREATED","eventId":"evt_5AWT64JZ4WFJEAGF2AC2HVGQX0","guard":["or",["and",[">=","@payload.status",200],["<","@payload.status",300]],["and",["!=",["json/parse","@payload.body","EmulatorReply"],null],["str/startsWith",["object/get",["json/parse","@payload.body","EmulatorReply"],"error.message",""],"DUPLICATE_LOCAL_ID"]]],"effects":[["fetch","DevPersona",{"id":"@payload.key","emit":{"success":"SIGN_IN_CLAIMS","failure":"SIGN_IN_ROW_MISSED"}}]]},{"from":"ready","to":"ready","event":"SIGN_IN_CLAIMS","eventId":"evt_HDR0V0XZCFZP7TTP5ZCR9EQ4NP","effects":[["emit","DP_POST",{"key":["str/concat","update:","@payload.data.id"],"method":"POST","target":["str/concat","/identitytoolkit.googleapis.com/v1/projects/","@config.projectId","/accounts:update"],"headers":[{"name":"Content-Type","value":"application/json"}],"body":["bytes/from-string",["json/stringify",["object/merge",["if",["!=",["default","@payload.data.name",""],""],{"localId":"@payload.data.id","displayName":"@payload.data.name"},{"localId":"@payload.data.id"}],{"customAttributes":["json/stringify",["object/omit","@payload.data",["id","email","name"]]]}]]],"stream":"none"}]]},{"from":"ready","to":"ready","event":"SIGN_IN_UPDATED","eventId":"evt_7V78MVH02DG16R2QP1T0ERBVHF","guard":["or",["<","@payload.status",200],[">=","@payload.status",300]],"effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":500,"body":["json/stringify",{"success":false,"error":["str/concat","the Auth emulator refused to update ","@payload.key",": ",["str/concat","@payload.status"]," ","@payload.body"]}]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_UPDATED","eventId":"evt_7V78MVH02DG16R2QP1T0ERBVHF","guard":["and",[">=","@payload.status",200],["<","@payload.status",300]],"effects":[["emit","ANSWER_TOKEN_MINT",{"key":"@payload.key"}]]},{"from":"ready","to":"ready","event":"SIGN_IN_ROW_MISSED","eventId":"evt_60AB67VMB2T5HECHKTMVW3B2BN","guard":["=","@payload.code","not-found"],"effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":404,"body":["json/stringify",{"success":false,"error":"no persona with that id"}]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_ROW_MISSED","eventId":"evt_60AB67VMB2T5HECHKTMVW3B2BN","guard":["!=","@payload.code","not-found"],"effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":500,"body":["json/stringify",{"success":false,"error":"@payload.error"}]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_FAILED","eventId":"evt_ZA0MHY3ZRCZW6FNQ574G52CXQA","effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":500,"body":["json/stringify",{"success":false,"error":["default","@payload.error",""]}]}]]}]},"config":{"maxRows":{"nullable":false,"type":"number","default":200,"label":"Personas listed","description":"Most persona rows the personas hook may read. The hook answers the whole list for the switcher, so a partial list would hide personas; an identity entity with more rows is refused with a 500 instead of listing part of it.","synonyms":"persona limit, list cap","tier":"policy"},"authEmulatorHost":{"nullable":false,"type":"string","default":"127.0.0.1:9099","label":"Auth emulator host","description":"The host:port FIREBASE_AUTH_EMULATOR_HOST must name for the hooks to answer; anything else, or unset, answers 404.","synonyms":"auth emulator, emulator host","tier":"infra"},"projectId":{"nullable":false,"type":"string","default":"demo-almadar","label":"Project","description":"The demo project the Auth emulator runs under, the same one std-firebase-emulators starts.","synonyms":"firebase project","tier":"infra"},"epoch":{"nullable":false,"type":"instant","default":"1970-01-01T00:00:00.000Z","label":"Epoch","description":"The instant token times (iat, exp) count seconds from.","tier":"infra"},"autoSignIn":{"nullable":false,"type":"string","default":"","label":"Auto sign-in persona","description":"A persona id; empty signs nobody in. A new session of an app running against the Auth emulator (FIREBASE_AUTH_EMULATOR_HOST equal to authEmulatorHost) signs in as this persona at its start: the persona's unsigned emulator token goes through jws/verify (allowUnsigned, the emulator issuer knob) and identity/sign-in, the same path as the persona picker. Never signs in anywhere else.","synonyms":"default persona, dev user, emulator user","tier":"policy"},"emulatorIssuer":{"nullable":false,"type":"string","default":"","label":"Emulator issuer","description":"The iss of the emulator custom tokens this atom mints and verifies; empty uses https://securetoken.google.com/<projectId>, the issuer of the emulator's ID tokens, so the same tokens verify in std-bearer-verify when its issuer is that. jws/verify accepts an unsigned token only when its iss equals the call's issuer.","tier":"infra"},"emulatorAudience":{"nullable":false,"type":"string","default":"","label":"Emulator audience","description":"The aud of the emulator custom tokens; empty uses the projectId.","tier":"infra"},"reservedClaims":{"nullable":false,"type":"[string]","default":["acr","amr","at_hash","aud","auth_time","azp","cnf","c_hash","exp","firebase","iat","iss","jti","nbf","nonce","sub"],"label":"Reserved claims","description":"Token claim names Firebase reserves; a persona field named like one refuses the sign-in.","synonyms":"reserved token claims","tier":"infra","items":{"nullable":false,"type":"string"}}},"sourceDeclaration":{"traitId":"trt_3VX5AA4EA5752MHZ306BR66YKD","fingerprint":"224c43584aaa82a2ae55a9eaf07583d29e300e26d1eb7cf2949222b726fd6025"}}],"pages":[{"name":"DevPersonasOrbitalStart","id":"pag_VJFER1AAJF597TC66Q79KJMYGZ","path":"","protocol":"boot","traits":[{"ref":"DevPersonas","refId":"trt_3VX5AA4EA5752MHZ306BR66YKD"},{"ref":"PersonaHttp","refId":"trt_7AKNK5M1DK0PSP17CKAQGC8XHC"}]}],"types":{"EmulatorError":[{"nullable":false,"name":"message","type":"string"}],"EmulatorReply":[{"nullable":false,"name":"error","type":"object","properties":[{"nullable":false,"name":"message","type":"string"}],"projectedFrom":{"type":"EmulatorError"}}],"HttpHeader":[{"nullable":false,"name":"name","type":"string","required":true},{"nullable":false,"name":"value","type":"string","required":true}],"PersonaSignInBody":[{"nullable":false,"name":"id","type":"string"}]}}],"inbound":["personas","persona-sign-in"],"osGrants":{"fs":[],"exec":[],"net":[],"env":["FIREBASE_AUTH_EMULATOR_HOST"],"stdio":[],"sys":[],"desktop":[]},"schemaVersion":1,"ledger":{"schemaVersion":1,"entries":{"ent_DR5Y6561630K1S4Y5EJPZQEHNF":{"id":"ent_DR5Y6561630K1S4Y5EJPZQEHNF","kind":"entity","bakedName":"DevPersona","curName":"DevPersona","renames":[],"owner":"workspace"},"evt_04N2KK43YM1ZACMT20MQWYKAYH":{"id":"evt_04N2KK43YM1ZACMT20MQWYKAYH","kind":"event","bakedName":"PERSONAS_HOST","curName":"PERSONAS_HOST","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_0W4055DNDBTPNZBYT2J0M6BAMQ":{"id":"evt_0W4055DNDBTPNZBYT2J0M6BAMQ","kind":"event","bakedName":"PERSONA_SIGNED_IN","curName":"PERSONA_SIGNED_IN","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_3HJ9F9GBK25SH8T1B9WF8V0CHF":{"id":"evt_3HJ9F9GBK25SH8T1B9WF8V0CHF","kind":"event","bakedName":"SIGN_IN_CALLED","curName":"SIGN_IN_CALLED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_5AWT64JZ4WFJEAGF2AC2HVGQX0":{"id":"evt_5AWT64JZ4WFJEAGF2AC2HVGQX0","kind":"event","bakedName":"SIGN_IN_CREATED","curName":"SIGN_IN_CREATED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_5MQ3BW1RAWW5EDA6F2D4A74WXE":{"id":"evt_5MQ3BW1RAWW5EDA6F2D4A74WXE","kind":"event","bakedName":"PERSONA_SIGN_IN_REFUSED","curName":"PERSONA_SIGN_IN_REFUSED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_5RB7R6KH3GRHRDA6T1V3RB6KTB":{"id":"evt_5RB7R6KH3GRHRDA6T1V3RB6KTB","kind":"event","bakedName":"PERSONAS_REQUESTED","curName":"PERSONAS_REQUESTED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_5WSMQRHG29R14S27Q43SK10QWR":{"id":"evt_5WSMQRHG29R14S27Q43SK10QWR","kind":"event","bakedName":"SIGN_IN_ROW","curName":"SIGN_IN_ROW","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_60AB67VMB2T5HECHKTMVW3B2BN":{"id":"evt_60AB67VMB2T5HECHKTMVW3B2BN","kind":"event","bakedName":"SIGN_IN_ROW_MISSED","curName":"SIGN_IN_ROW_MISSED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_6XFGWHY03V01XS7DHX7BSGS7PW":{"id":"evt_6XFGWHY03V01XS7DHX7BSGS7PW","kind":"event","bakedName":"PERSONAS_CALLED","curName":"PERSONAS_CALLED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_7DMZH037CGKP80W9HZQAJCE7PE":{"id":"evt_7DMZH037CGKP80W9HZQAJCE7PE","kind":"event","bakedName":"PERSONA_SIGN_IN_ANSWERED","curName":"PERSONA_SIGN_IN_ANSWERED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_7V78MVH02DG16R2QP1T0ERBVHF":{"id":"evt_7V78MVH02DG16R2QP1T0ERBVHF","kind":"event","bakedName":"SIGN_IN_UPDATED","curName":"SIGN_IN_UPDATED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_8EQ2CZPZABFN5Z804NX421Y02X":{"id":"evt_8EQ2CZPZABFN5Z804NX421Y02X","kind":"event","bakedName":"INIT","curName":"INIT","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_BS8FDH73YHHZ8GVWZXWT6K8XSM":{"id":"evt_BS8FDH73YHHZ8GVWZXWT6K8XSM","kind":"event","bakedName":"TOKEN_HOST","curName":"TOKEN_HOST","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_BY26Z0PSM1CT0ZCGG79ZD5B57A":{"id":"evt_BY26Z0PSM1CT0ZCGG79ZD5B57A","kind":"event","bakedName":"ACT_AS_FAILED","curName":"ACT_AS_FAILED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_E8YWAQ356MJKA8PBF47E104XJ6":{"id":"evt_E8YWAQ356MJKA8PBF47E104XJ6","kind":"event","bakedName":"TOKEN_MINTED","curName":"TOKEN_MINTED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_F20VPTVA99N4MJ3R6PWDKDNNH5":{"id":"evt_F20VPTVA99N4MJ3R6PWDKDNNH5","kind":"event","bakedName":"SIGN_IN_HOST","curName":"SIGN_IN_HOST","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_HDR0V0XZCFZP7TTP5ZCR9EQ4NP":{"id":"evt_HDR0V0XZCFZP7TTP5ZCR9EQ4NP","kind":"event","bakedName":"SIGN_IN_CLAIMS","curName":"SIGN_IN_CLAIMS","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_HJWD6VK2WAHE56PX981ZQAWJ9W":{"id":"evt_HJWD6VK2WAHE56PX981ZQAWJ9W","kind":"event","bakedName":"PERSONA_REPLIED","curName":"PERSONA_REPLIED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_HZS98MEDEP6QB6SF54GYSS8VPJ":{"id":"evt_HZS98MEDEP6QB6SF54GYSS8VPJ","kind":"event","bakedName":"AUTO_FAILED","curName":"AUTO_FAILED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_MMYZYMD6TQKDBK4XV273G307MS":{"id":"evt_MMYZYMD6TQKDBK4XV273G307MS","kind":"event","bakedName":"TOKEN_SIGN_IN_REQUESTED","curName":"TOKEN_SIGN_IN_REQUESTED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_PH2X3AKWB8Y5MERFS8A5KAAEYM":{"id":"evt_PH2X3AKWB8Y5MERFS8A5KAAEYM","kind":"event","bakedName":"ACT_AS_HOST","curName":"ACT_AS_HOST","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_Q65S5BYSK7CSKPMX1MHPY9K1XM":{"id":"evt_Q65S5BYSK7CSKPMX1MHPY9K1XM","kind":"event","bakedName":"PERSONAS_ANSWERED","curName":"PERSONAS_ANSWERED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_RCVE2YHEDAQ6N3HC5V51TNF7TW":{"id":"evt_RCVE2YHEDAQ6N3HC5V51TNF7TW","kind":"event","bakedName":"PERSONAS_FAILED","curName":"PERSONAS_FAILED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_RKAK0BZ312HGHCJ69JQBHNTW09":{"id":"evt_RKAK0BZ312HGHCJ69JQBHNTW09","kind":"event","bakedName":"TOKEN_MINT","curName":"TOKEN_MINT","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_RNAGCA69EF4Q7PATZ2QW2D1P21":{"id":"evt_RNAGCA69EF4Q7PATZ2QW2D1P21","kind":"event","bakedName":"ANSWER_TOKEN_MINT","curName":"ANSWER_TOKEN_MINT","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_S7BSVG0RAVC5DQC06WCB940DGJ":{"id":"evt_S7BSVG0RAVC5DQC06WCB940DGJ","kind":"event","bakedName":"DP_POST","curName":"DP_POST","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_SQKK5ARQ88BM483WVGTH7ESD53":{"id":"evt_SQKK5ARQ88BM483WVGTH7ESD53","kind":"event","bakedName":"PERSONAS_ROWS","curName":"PERSONAS_ROWS","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_SSK568SJHZS8ZY7NFA87563ZXF":{"id":"evt_SSK568SJHZS8ZY7NFA87563ZXF","kind":"event","bakedName":"PERSONA_ACT_AS","curName":"PERSONA_ACT_AS","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_TKKW0P6N1DAGPREX18DRD8TQJ4":{"id":"evt_TKKW0P6N1DAGPREX18DRD8TQJ4","kind":"event","bakedName":"ANSWER_TOKEN_MINTED","curName":"ANSWER_TOKEN_MINTED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_WSYKMFRGR48C26RA6VWMN8A5VP":{"id":"evt_WSYKMFRGR48C26RA6VWMN8A5VP","kind":"event","bakedName":"TOKEN_HOST_FAILED","curName":"TOKEN_HOST_FAILED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_YH34PRTWERE7CAEW365GNN86VB":{"id":"evt_YH34PRTWERE7CAEW365GNN86VB","kind":"event","bakedName":"PERSONA_SIGN_IN_REQUESTED","curName":"PERSONA_SIGN_IN_REQUESTED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_YVY950S3MPHTBBHY70D9FG6645":{"id":"evt_YVY950S3MPHTBBHY70D9FG6645","kind":"event","bakedName":"AUTO_HOST","curName":"AUTO_HOST","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_ZA0MHY3ZRCZW6FNQ574G52CXQA":{"id":"evt_ZA0MHY3ZRCZW6FNQ574G52CXQA","kind":"event","bakedName":"SIGN_IN_FAILED","curName":"SIGN_IN_FAILED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"orb_GRG6R6W6MS3ACHNV87R51792MV":{"id":"orb_GRG6R6W6MS3ACHNV87R51792MV","kind":"orbital","bakedName":"DevPersonasOrbital","curName":"DevPersonasOrbital","renames":[],"owner":"workspace"},"pag_VJFER1AAJF597TC66Q79KJMYGZ":{"id":"pag_VJFER1AAJF597TC66Q79KJMYGZ","kind":"page","bakedName":"DevPersonasOrbitalStart","curName":"DevPersonasOrbitalStart","renames":[],"owner":"workspace"},"trt_3VX5AA4EA5752MHZ306BR66YKD":{"id":"trt_3VX5AA4EA5752MHZ306BR66YKD","kind":"trait","bakedName":"DevPersonas","curName":"DevPersonas","renames":[],"owner":"workspace"},"trt_7AKNK5M1DK0PSP17CKAQGC8XHC":{"id":"trt_7AKNK5M1DK0PSP17CKAQGC8XHC","kind":"trait","bakedName":"PersonaHttp","curName":"PersonaHttp","renames":[],"owner":"workspace"}}}}
1
+ {"typeContractVersion":1,"types":{"EmulatorError":[{"nullable":false,"name":"message","type":"string"}],"EmulatorReply":[{"nullable":false,"name":"error","type":"object","properties":[{"nullable":false,"name":"message","type":"string"}],"projectedFrom":{"type":"EmulatorError"}}],"HttpHeader":[{"nullable":false,"name":"name","type":"string","required":true},{"nullable":false,"name":"value","type":"string","required":true}],"PersonaSignInBody":[{"nullable":false,"name":"id","type":"string"}]},"name":"std-dev-personas","version":"1.0.0","description":"std-dev-personas — sign in as a development persona against the local Firebase Auth emulator. Compose it with linkedEntity set to the app's identity entity: its rows are the personas. POST /api/hooks/personas answers 200 { success, personas, source } (every row with a non-empty id; source identity-entity, or none when there are no rows). POST /api/hooks/persona-sign-in with { id } makes that row an emulator user (uid = id, display name = name, every other non-null field but email a custom claim) and answers 200 { success, customToken, authEmulatorHost, projectId }, the token unsigned (alg none), which only the emulator accepts. A composed client may also ask by event (PERSONAS_REQUESTED, PERSONA_SIGN_IN_REQUESTED { id }) and read the same answers (PERSONAS_ANSWERED, PERSONA_SIGN_IN_ANSWERED); the sign-in token it carries is the emulator's unsigned alg-none token, accepted only by the local emulator, and this dev-only path is the one exception to tokens-never-in-payloads. Both answer 404 unless FIREBASE_AUTH_EMULATOR_HOST is 127.0.0.1:9099, so a deployment lists and signs in nobody; a body without an id is 400, an unknown id 404, a field named like a reserved token claim or an emulator refusal 500. The emulator calls go through the composed std-http-client trait PersonaHttp (127.0.0.1:9099 over plain TCP, net grant); its authorization header is the declared credential FIREBASE_AUTH_EMULATOR_OWNER (Bearer prefix), filled by the host at the send, so no token is written in the program.","orbitals":[{"name":"DevPersonasOrbital","id":"orb_GRG6R6W6MS3ACHNV87R51792MV","uses":[{"from":"almadar-std/dev-personas","as":"Spec"},{"from":"std/behaviors/std-http-client","as":"Http"}],"entity":{"name":"DevPersona","id":"ent_DR5Y6561630K1S4Y5EJPZQEHNF","collection":"dev_personas","persistence":"persistent","fields":[{"nullable":false,"name":"id","type":"string","required":true},{"nullable":false,"name":"name","type":"string","description":"Shown on the persona switcher and set as the emulator user's display name."},{"nullable":false,"name":"email","type":"email","description":"Kept off the token claims."},{"nullable":false,"name":"role","type":"string","description":"What a guard on the viewer's role reads; travels as a custom claim so the persona is the same viewer after sign-in."}]},"traits":[{"ref":"Http.traits.HttpClient","id":"trt_7AKNK5M1DK0PSP17CKAQGC8XHC","name":"PersonaHttp","config":{"host":{"type":"unknown","default":"127.0.0.1","wired":true},"port":{"type":"unknown","default":9099,"wired":true},"tls":{"type":"unknown","default":false,"wired":true},"serverName":{"type":"unknown","default":"127.0.0.1","wired":true},"credential":{"type":"unknown","default":"FIREBASE_AUTH_EMULATOR_OWNER","wired":true},"credentialHeader":{"type":"unknown","default":"authorization","wired":true},"credentialPrefix":{"type":"unknown","default":"Bearer ","wired":true}},"listens":[{"event":"DP_POST","triggers":"HTTP_SEND","source":{"kind":"trait","trait":"DevPersonas"}}]},{"name":"DevPersonas","id":"trt_3VX5AA4EA5752MHZ306BR66YKD","entityRebindable":true,"entityContract":{"requires":[],"provides":[]},"effectRow":[{"kind":"emit","resource":"ANSWER_TOKEN_MINT"},{"kind":"emit","resource":"ANSWER_TOKEN_MINTED"},{"kind":"emit","resource":"AUTO_RESOLVED"},{"kind":"emit","resource":"DP_POST"},{"kind":"emit","resource":"PERSONAS_ANSWERED"},{"kind":"emit","resource":"PERSONAS_CALLED"},{"kind":"emit","resource":"PERSONAS_FAILED"},{"kind":"emit","resource":"PERSONA_SIGN_IN_ANSWERED"},{"kind":"emit","resource":"PERSONA_SIGN_IN_REFUSED"},{"kind":"emit","resource":"SIGN_IN_CALLED"},{"kind":"emit","resource":"SIGN_IN_CREATED"},{"kind":"emit","resource":"SIGN_IN_UPDATED"},{"kind":"emit","resource":"TOKEN_MINT"},{"kind":"emit","resource":"TOKEN_MINTED"},{"kind":"fetch","resource":"DevPersona"},{"kind":"identity/sign-in"},{"kind":"os/getenv"}],"linkedEntity":"DevPersona","linkedEntityId":"ent_DR5Y6561630K1S4Y5EJPZQEHNF","entityRefIds":{"DevPersona":"ent_DR5Y6561630K1S4Y5EJPZQEHNF"},"emits":[{"event":"PERSONAS_CALLED","eventId":"evt_6XFGWHY03V01XS7DHX7BSGS7PW","description":"Internal: a list by request, handed to the same arms the personas hook runs.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"rawBody","type":"string"}]},{"event":"SIGN_IN_CALLED","eventId":"evt_3HJ9F9GBK25SH8T1B9WF8V0CHF","description":"Internal: a sign-in by id, handed to the same arms the persona-sign-in hook runs.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"rawBody","type":"string"}]},{"event":"PERSONAS_ANSWERED","eventId":"evt_Q65S5BYSK7CSKPMX1MHPY9K1XM","description":"The answer of the personas hook, an HTTP-shaped answer (status, JSON text body) a composed client trait may read.","tier":"essential","scope":"external","payloadSchema":[{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"body","type":"string","required":true}]},{"event":"PERSONA_SIGN_IN_ANSWERED","eventId":"evt_7DMZH037CGKP80W9HZQAJCE7PE","description":"The answer of the persona-sign-in hook, an HTTP-shaped answer (status, JSON text body) a composed client trait may read.","tier":"essential","scope":"external","payloadSchema":[{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"body","type":"string","required":true}]},{"event":"PERSONAS_HOST","eventId":"evt_04N2KK43YM1ZACMT20MQWYKAYH","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST on a list.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"}]},{"event":"PERSONAS_ROWS","eventId":"evt_SQKK5ARQ88BM483WVGTH7ESD53","description":"Internal: the identity rows.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"data","type":"[object]","required":true,"properties":[{"nullable":false,"name":"id","type":"string","required":true},{"nullable":false,"name":"name","type":"string"},{"nullable":false,"name":"email","type":"email"},{"nullable":false,"name":"role","type":"string"}],"entity":"DevPersona","items":{"nullable":false,"name":"","type":"DevPersona","projectedFrom":{"type":"DevPersona"}}},{"nullable":false,"name":"totalCount","type":"number","required":true}]},{"event":"PERSONAS_FAILED","eventId":"evt_RCVE2YHEDAQ6N3HC5V51TNF7TW","description":"Internal: reading the environment or the rows failed.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"}]},{"event":"SIGN_IN_HOST","eventId":"evt_F20VPTVA99N4MJ3R6PWDKDNNH5","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST on a sign-in, keyed by the persona id.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"},{"nullable":false,"name":"key","type":"string","required":true}]},{"event":"DP_POST","eventId":"evt_S7BSVG0RAVC5DQC06WCB940DGJ","description":"Internal: one call to the Auth emulator, for the HTTP client.","tier":"internal","scope":"external","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"method","type":"string","required":true},{"nullable":false,"name":"target","type":"string","required":true},{"nullable":false,"name":"headers","type":"[object]","required":true,"properties":[{"nullable":false,"name":"name","type":"string","required":true},{"nullable":false,"name":"value","type":"string","required":true}],"items":{"nullable":false,"name":"","type":"HttpHeader","projectedFrom":{"type":"HttpHeader"}}},{"nullable":false,"name":"body","type":"bytes","required":true},{"nullable":false,"name":"stream","type":"string","required":true}]},{"event":"SIGN_IN_ROW","eventId":"evt_5WSMQRHG29R14S27Q43SK10QWR","description":"Internal: the persona row to sign in as.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"data","type":"object","required":true,"properties":[{"nullable":false,"name":"id","type":"string","required":true},{"nullable":false,"name":"name","type":"string"},{"nullable":false,"name":"email","type":"email"},{"nullable":false,"name":"role","type":"string"}],"entity":"DevPersona","projectedFrom":{"type":"DevPersona"}}]},{"event":"SIGN_IN_CLAIMS","eventId":"evt_HDR0V0XZCFZP7TTP5ZCR9EQ4NP","description":"Internal: the persona row read again for its claims.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"data","type":"object","required":true,"properties":[{"nullable":false,"name":"id","type":"string","required":true},{"nullable":false,"name":"name","type":"string"},{"nullable":false,"name":"email","type":"email"},{"nullable":false,"name":"role","type":"string"}],"entity":"DevPersona","projectedFrom":{"type":"DevPersona"}}]},{"event":"SIGN_IN_CREATED","eventId":"evt_5AWT64JZ4WFJEAGF2AC2HVGQX0","description":"Internal: the Auth emulator's answer to creating the user.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"body","type":"string","required":true},{"nullable":false,"name":"key","type":"string","required":true}]},{"event":"SIGN_IN_UPDATED","eventId":"evt_7V78MVH02DG16R2QP1T0ERBVHF","description":"Internal: the Auth emulator's answer to setting the display name and claims.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"body","type":"string","required":true},{"nullable":false,"name":"key","type":"string","required":true}]},{"event":"SIGN_IN_ROW_MISSED","eventId":"evt_60AB67VMB2T5HECHKTMVW3B2BN","description":"Internal: the persona row could not be read; code not-found when no row has that id.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string","required":true},{"nullable":false,"name":"code","type":"string"}]},{"event":"AUTO_HOST","eventId":"evt_YVY950S3MPHTBBHY70D9FG6645","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST at a session's start (autoSignIn).","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"},{"nullable":false,"name":"key","type":"string"}]},{"event":"AUTO_FAILED","eventId":"evt_HZS98MEDEP6QB6SF54GYSS8VPJ","description":"Internal: the environment could not be read at a session's start; the session stays as it is.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"kind","type":"string"}]},{"event":"AUTO_ROWS","eventId":"evt_GWRDN10QH9BRMT107A6VT4CZS3","description":"Internal: the identity rows read to resolve autoSignIn at a session's start.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"data","type":"[object]","required":true,"properties":[{"nullable":false,"name":"id","type":"string","required":true},{"nullable":false,"name":"name","type":"string"},{"nullable":false,"name":"email","type":"email"},{"nullable":false,"name":"role","type":"string"}],"entity":"DevPersona","items":{"nullable":false,"name":"","type":"DevPersona","projectedFrom":{"type":"DevPersona"}}},{"nullable":false,"name":"totalCount","type":"number","required":true}]},{"event":"AUTO_ROWS_FAILED","eventId":"evt_0NPKJWZZMBZT5G2WWBACTP58ZF","description":"Internal: the identity rows could not be read to resolve autoSignIn.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"code","type":"string"}]},{"event":"AUTO_RESOLVED","eventId":"evt_DP3C37548KJ49ZENEWTRJ6J082","description":"Internal: the id of the identity row autoSignIn resolved to (an id match, else the first row of that role), or empty when none matched.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"id","type":"string","required":true}]},{"event":"ACT_AS_HOST","eventId":"evt_PH2X3AKWB8Y5MERFS8A5KAAEYM","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST on a PERSONA_ACT_AS, keyed by the persona id.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"},{"nullable":false,"name":"key","type":"string"}]},{"event":"ACT_AS_FAILED","eventId":"evt_BY26Z0PSM1CT0ZCGG79ZD5B57A","description":"Internal: the environment could not be read for a PERSONA_ACT_AS; the sign-in is refused.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"kind","type":"string"}]},{"event":"TOKEN_HOST","eventId":"evt_BS8FDH73YHHZ8GVWZXWT6K8XSM","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST on a TOKEN_SIGN_IN_REQUESTED, keyed by the token.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"},{"nullable":false,"name":"key","type":"string"}]},{"event":"TOKEN_HOST_FAILED","eventId":"evt_WSYKMFRGR48C26RA6VWMN8A5VP","description":"Internal: the environment could not be read for a TOKEN_SIGN_IN_REQUESTED; the sign-in is refused.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"kind","type":"string"}]},{"event":"TOKEN_MINT","eventId":"evt_RKAK0BZ312HGHCJ69JQBHNTW09","description":"Internal: build the emulator's unsigned custom token for the persona key; it is emitted only from the arms that read the emulator host first, and the token signs the session in.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"purpose","type":"string","required":true}]},{"event":"ANSWER_TOKEN_MINT","eventId":"evt_RNAGCA69EF4Q7PATZ2QW2D1P21","description":"Internal: build the emulator's unsigned custom token for the persona key a sign-in update answered; the answer carries it back to the caller and never signs a session in.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true}]},{"event":"ANSWER_TOKEN_MINTED","eventId":"evt_TKKW0P6N1DAGPREX18DRD8TQJ4","description":"Internal: the unsigned custom token a sign-in update answered, on its way back to the caller.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"token","type":"string","required":true}]},{"event":"TOKEN_MINTED","eventId":"evt_E8YWAQ356MJKA8PBF47E104XJ6","description":"Internal: the unsigned custom token of one persona, emitted only by the env-guarded TOKEN_MINT.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"purpose","type":"string","required":true},{"nullable":false,"name":"token","type":"string","required":true}]},{"event":"PERSONA_SIGNED_IN","eventId":"evt_0W4055DNDBTPNZBYT2J0M6BAMQ","description":"The session is signed in as the persona: jws/verify accepted its emulator token and identity/sign-in bound the subject.","synonyms":"persona signed in","tier":"primary","scope":"external","payloadSchema":[{"nullable":false,"name":"subject","type":"string"}]},{"event":"PERSONA_SIGN_IN_REFUSED","eventId":"evt_5MQ3BW1RAWW5EDA6F2D4A74WXE","description":"The sign-in was refused: no-emulator when FIREBASE_AUTH_EMULATOR_HOST does not name the Auth emulator (or cannot be read), unsealed when jws/verify refused the emulator token, no-identity when the persona has no identity row (store).","synonyms":"persona sign-in refused","tier":"primary","scope":"external","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"kind","type":"string"}]},{"event":"SIGN_IN_FAILED","eventId":"evt_ZA0MHY3ZRCZW6FNQ574G52CXQA","description":"Internal: the environment, the row or the Auth emulator could not be reached.","tier":"internal","scope":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"}]}],"listens":[{"event":"HTTP_REPLIED","triggers":"PERSONA_REPLIED","triggersId":"evt_HJWD6VK2WAHE56PX981ZQAWJ9W","source":{"kind":"trait","trait":"PersonaHttp","traitId":"trt_7AKNK5M1DK0PSP17CKAQGC8XHC"}},{"event":"HTTP_FAILED","triggers":"SIGN_IN_FAILED","triggersId":"evt_ZA0MHY3ZRCZW6FNQ574G52CXQA","source":{"kind":"trait","trait":"PersonaHttp","traitId":"trt_7AKNK5M1DK0PSP17CKAQGC8XHC"}}],"stateMachine":{"states":[{"name":"ready","isInitial":true}],"events":[{"key":"INIT","id":"evt_8EQ2CZPZABFN5Z804NX421Y02X","name":"Initialize"},{"key":"AUTO_HOST","id":"evt_YVY950S3MPHTBBHY70D9FG6645","name":"Auto Host","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST at a session's start (autoSignIn).","tier":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"},{"nullable":false,"name":"key","type":"string"}]},{"key":"AUTO_FAILED","id":"evt_HZS98MEDEP6QB6SF54GYSS8VPJ","name":"Auto Failed","description":"Internal: the environment could not be read at a session's start; the session stays as it is.","tier":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"kind","type":"string"}]},{"key":"AUTO_ROWS","id":"evt_GWRDN10QH9BRMT107A6VT4CZS3","name":"Auto Rows","description":"Internal: the identity rows read to resolve autoSignIn at a session's start.","tier":"internal","payloadSchema":[{"nullable":false,"name":"data","type":"[object]","required":true,"properties":[{"nullable":false,"name":"id","type":"string","required":true},{"nullable":false,"name":"name","type":"string"},{"nullable":false,"name":"email","type":"email"},{"nullable":false,"name":"role","type":"string"}],"entity":"DevPersona","items":{"nullable":false,"name":"","type":"DevPersona","projectedFrom":{"type":"DevPersona"}}},{"nullable":false,"name":"totalCount","type":"number","required":true}]},{"key":"AUTO_RESOLVED","id":"evt_DP3C37548KJ49ZENEWTRJ6J082","name":"Auto Resolved","description":"Internal: the id of the identity row autoSignIn resolved to (an id match, else the first row of that role), or empty when none matched.","tier":"internal","payloadSchema":[{"nullable":false,"name":"id","type":"string","required":true}]},{"key":"AUTO_ROWS_FAILED","id":"evt_0NPKJWZZMBZT5G2WWBACTP58ZF","name":"Auto Rows Failed","description":"Internal: the identity rows could not be read to resolve autoSignIn.","tier":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"code","type":"string"}]},{"key":"TOKEN_MINT","id":"evt_RKAK0BZ312HGHCJ69JQBHNTW09","name":"Token Mint","description":"Internal: build the emulator's unsigned custom token for the persona key; it is emitted only from the arms that read the emulator host first, and the token signs the session in.","tier":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"purpose","type":"string","required":true}]},{"key":"ANSWER_TOKEN_MINT","id":"evt_RNAGCA69EF4Q7PATZ2QW2D1P21","name":"Answer Token Mint","description":"Internal: build the emulator's unsigned custom token for the persona key a sign-in update answered; the answer carries it back to the caller and never signs a session in.","tier":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true}]},{"key":"ANSWER_TOKEN_MINTED","id":"evt_TKKW0P6N1DAGPREX18DRD8TQJ4","name":"Answer Token Minted","description":"Internal: the unsigned custom token a sign-in update answered, on its way back to the caller.","tier":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"token","type":"string","required":true}]},{"key":"TOKEN_MINTED","id":"evt_E8YWAQ356MJKA8PBF47E104XJ6","name":"Token Minted","description":"Internal: the unsigned custom token of one persona, emitted only by the env-guarded TOKEN_MINT.","tier":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"purpose","type":"string","required":true},{"nullable":false,"name":"token","type":"string","required":true}]},{"key":"PERSONA_ACT_AS","id":"evt_SSK568SJHZS8ZY7NFA87563ZXF","name":"Persona Act As","description":"Sign the dispatching session in as the persona with this id (the seeder dispatches it into each per-owner session): its unsigned emulator token goes through jws/verify (allowUnsigned, the emulator issuer) and identity/sign-in in that session; answers PERSONA_SIGNED_IN { subject } or PERSONA_SIGN_IN_REFUSED { error, kind }.","synonyms":"act as persona, seed as persona","payloadSchema":[{"nullable":false,"name":"persona","type":"string","required":true}],"input":true,"listened":true},{"key":"ACT_AS_HOST","id":"evt_PH2X3AKWB8Y5MERFS8A5KAAEYM","name":"Act As Host","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST on a PERSONA_ACT_AS, keyed by the persona id.","tier":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"},{"nullable":false,"name":"key","type":"string"}]},{"key":"ACT_AS_FAILED","id":"evt_BY26Z0PSM1CT0ZCGG79ZD5B57A","name":"Act As Failed","description":"Internal: the environment could not be read for a PERSONA_ACT_AS; the sign-in is refused.","tier":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"kind","type":"string"}]},{"key":"TOKEN_SIGN_IN_REQUESTED","id":"evt_MMYZYMD6TQKDBK4XV273G307MS","name":"Token Sign In Requested","description":"Sign the session in with an emulator custom token a persona sign-in answered: jws/verify (allowUnsigned, the emulator issuer) then identity/sign-in; answers PERSONA_SIGNED_IN or PERSONA_SIGN_IN_REFUSED.","synonyms":"sign in with persona token","payloadSchema":[{"nullable":false,"name":"token","type":"string","required":true}],"listened":true},{"key":"TOKEN_HOST","id":"evt_BS8FDH73YHHZ8GVWZXWT6K8XSM","name":"Token Host","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST on a TOKEN_SIGN_IN_REQUESTED, keyed by the token.","tier":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"},{"nullable":false,"name":"key","type":"string"}]},{"key":"TOKEN_HOST_FAILED","id":"evt_WSYKMFRGR48C26RA6VWMN8A5VP","name":"Token Host Failed","description":"Internal: the environment could not be read for a TOKEN_SIGN_IN_REQUESTED; the sign-in is refused.","tier":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"kind","type":"string"}]},{"key":"PERSONA_SIGNED_IN","id":"evt_0W4055DNDBTPNZBYT2J0M6BAMQ","name":"Persona Signed In","description":"The session is signed in as the persona: jws/verify accepted its emulator token and identity/sign-in bound the subject.","synonyms":"persona signed in","tier":"primary","payloadSchema":[{"nullable":false,"name":"subject","type":"string"}]},{"key":"PERSONA_SIGN_IN_REFUSED","id":"evt_5MQ3BW1RAWW5EDA6F2D4A74WXE","name":"Persona Sign In Refused","description":"The sign-in was refused: no-emulator when FIREBASE_AUTH_EMULATOR_HOST does not name the Auth emulator (or cannot be read), unsealed when jws/verify refused the emulator token, no-identity when the persona has no identity row (store).","synonyms":"persona sign-in refused","tier":"primary","payloadSchema":[{"nullable":false,"name":"error","type":"string"},{"nullable":false,"name":"kind","type":"string"}]},{"key":"PERSONAS_REQUESTED","id":"evt_5RB7R6KH3GRHRDA6T1V3RB6KTB","name":"Personas Requested","description":"A client asks for the persona list; answered by PERSONAS_ANSWERED, as the hook is.","listened":true},{"key":"PERSONAS_CALLED","id":"evt_6XFGWHY03V01XS7DHX7BSGS7PW","name":"Personas Called","description":"Internal: a list by request, handed to the same arms the personas hook runs.","tier":"internal","payloadSchema":[{"nullable":false,"name":"headers","type":"Map<string,string>","items":{"nullable":false,"name":"","type":"string"}},{"nullable":false,"name":"rawBody","type":"string"}],"listened":true,"inbound":{"name":"personas","answers":"PERSONAS_ANSWERED"}},{"key":"PERSONAS_HOST","id":"evt_04N2KK43YM1ZACMT20MQWYKAYH","name":"Personas Host","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST on a list.","tier":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"}]},{"key":"PERSONAS_ROWS","id":"evt_SQKK5ARQ88BM483WVGTH7ESD53","name":"Personas Rows","description":"Internal: the identity rows.","tier":"internal","payloadSchema":[{"nullable":false,"name":"data","type":"[object]","required":true,"properties":[{"nullable":false,"name":"id","type":"string","required":true},{"nullable":false,"name":"name","type":"string"},{"nullable":false,"name":"email","type":"email"},{"nullable":false,"name":"role","type":"string"}],"entity":"DevPersona","items":{"nullable":false,"name":"","type":"DevPersona","projectedFrom":{"type":"DevPersona"}}},{"nullable":false,"name":"totalCount","type":"number","required":true}]},{"key":"PERSONAS_FAILED","id":"evt_RCVE2YHEDAQ6N3HC5V51TNF7TW","name":"Personas Failed","description":"Internal: reading the environment or the rows failed.","tier":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"}]},{"key":"PERSONA_SIGN_IN_REQUESTED","id":"evt_YH34PRTWERE7CAEW365GNN86VB","name":"Persona Sign In Requested","description":"A client asks to sign in as the persona with this id; answered by PERSONA_SIGN_IN_ANSWERED, as the hook is.","payloadSchema":[{"nullable":false,"name":"id","type":"string","required":true}],"listened":true},{"key":"SIGN_IN_CALLED","id":"evt_3HJ9F9GBK25SH8T1B9WF8V0CHF","name":"Sign In Called","description":"Internal: a sign-in by id, handed to the same arms the persona-sign-in hook runs.","tier":"internal","payloadSchema":[{"nullable":false,"name":"headers","type":"Map<string,string>","items":{"nullable":false,"name":"","type":"string"}},{"nullable":false,"name":"rawBody","type":"string"}],"listened":true,"inbound":{"name":"persona-sign-in","answers":"PERSONA_SIGN_IN_ANSWERED"}},{"key":"SIGN_IN_HOST","id":"evt_F20VPTVA99N4MJ3R6PWDKDNNH5","name":"Sign In Host","description":"Internal: the os/getenv answer for FIREBASE_AUTH_EMULATOR_HOST on a sign-in, keyed by the persona id.","tier":"internal","payloadSchema":[{"nullable":false,"name":"value","type":"string"},{"nullable":false,"name":"key","type":"string","required":true}]},{"key":"SIGN_IN_ROW","id":"evt_5WSMQRHG29R14S27Q43SK10QWR","name":"Sign In Row","description":"Internal: the persona row to sign in as.","tier":"internal","payloadSchema":[{"nullable":false,"name":"data","type":"object","required":true,"properties":[{"nullable":false,"name":"id","type":"string","required":true},{"nullable":false,"name":"name","type":"string"},{"nullable":false,"name":"email","type":"email"},{"nullable":false,"name":"role","type":"string"}],"entity":"DevPersona","projectedFrom":{"type":"DevPersona"}}]},{"key":"PERSONA_REPLIED","id":"evt_HJWD6VK2WAHE56PX981ZQAWJ9W","name":"Persona Replied","description":"Internal: the HTTP client's reply from the Auth emulator, before its body is read as text.","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"headers","type":"Map<string,string>","items":{"nullable":false,"name":"","type":"string"}},{"nullable":false,"name":"body","type":"bytes","required":true}],"listened":true},{"key":"SIGN_IN_CREATED","id":"evt_5AWT64JZ4WFJEAGF2AC2HVGQX0","name":"Sign In Created","description":"Internal: the Auth emulator's answer to creating the user.","tier":"internal","payloadSchema":[{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"body","type":"string","required":true},{"nullable":false,"name":"key","type":"string","required":true}]},{"key":"SIGN_IN_CLAIMS","id":"evt_HDR0V0XZCFZP7TTP5ZCR9EQ4NP","name":"Sign In Claims","description":"Internal: the persona row read again for its claims.","tier":"internal","payloadSchema":[{"nullable":false,"name":"data","type":"object","required":true,"properties":[{"nullable":false,"name":"id","type":"string","required":true},{"nullable":false,"name":"name","type":"string"},{"nullable":false,"name":"email","type":"email"},{"nullable":false,"name":"role","type":"string"}],"entity":"DevPersona","projectedFrom":{"type":"DevPersona"}}]},{"key":"SIGN_IN_UPDATED","id":"evt_7V78MVH02DG16R2QP1T0ERBVHF","name":"Sign In Updated","description":"Internal: the Auth emulator's answer to setting the display name and claims.","tier":"internal","payloadSchema":[{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"body","type":"string","required":true},{"nullable":false,"name":"key","type":"string","required":true}]},{"key":"SIGN_IN_ROW_MISSED","id":"evt_60AB67VMB2T5HECHKTMVW3B2BN","name":"Sign In Row Missed","description":"Internal: the persona row could not be read; code not-found when no row has that id.","tier":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string","required":true},{"nullable":false,"name":"code","type":"string"}]},{"key":"SIGN_IN_FAILED","id":"evt_ZA0MHY3ZRCZW6FNQ574G52CXQA","name":"Sign In Failed","description":"Internal: the environment, the row or the Auth emulator could not be reached.","tier":"internal","payloadSchema":[{"nullable":false,"name":"error","type":"string"}]},{"key":"PERSONAS_ANSWERED","id":"evt_Q65S5BYSK7CSKPMX1MHPY9K1XM","name":"Personas Answered","description":"The answer of the personas hook, an HTTP-shaped answer (status, JSON text body) a composed client trait may read.","tier":"essential","payloadSchema":[{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"body","type":"string","required":true}]},{"key":"PERSONA_SIGN_IN_ANSWERED","id":"evt_7DMZH037CGKP80W9HZQAJCE7PE","name":"Persona Sign In Answered","description":"The answer of the persona-sign-in hook, an HTTP-shaped answer (status, JSON text body) a composed client trait may read.","tier":"essential","payloadSchema":[{"nullable":false,"name":"status","type":"number","required":true},{"nullable":false,"name":"body","type":"string","required":true}]},{"key":"DP_POST","id":"evt_S7BSVG0RAVC5DQC06WCB940DGJ","name":"Dp Post","description":"Internal: one call to the Auth emulator, for the HTTP client.","tier":"internal","payloadSchema":[{"nullable":false,"name":"key","type":"string","required":true},{"nullable":false,"name":"method","type":"string","required":true},{"nullable":false,"name":"target","type":"string","required":true},{"nullable":false,"name":"headers","type":"[object]","required":true,"properties":[{"nullable":false,"name":"name","type":"string","required":true},{"nullable":false,"name":"value","type":"string","required":true}],"items":{"nullable":false,"name":"","type":"HttpHeader","projectedFrom":{"type":"HttpHeader"}}},{"nullable":false,"name":"body","type":"bytes","required":true},{"nullable":false,"name":"stream","type":"string","required":true}]}],"transitions":[{"from":"ready","to":"ready","event":"INIT","eventId":"evt_8EQ2CZPZABFN5Z804NX421Y02X","guard":["=","@config.autoSignIn",""]},{"from":"ready","to":"ready","event":"INIT","eventId":"evt_8EQ2CZPZABFN5Z804NX421Y02X","guard":["!=","@config.autoSignIn",""],"effects":[["os/getenv","FIREBASE_AUTH_EMULATOR_HOST",{"key":"auto","emit":{"success":"AUTO_HOST","failure":"AUTO_FAILED"}}]]},{"from":"ready","to":"ready","event":"AUTO_HOST","eventId":"evt_YVY950S3MPHTBBHY70D9FG6645","guard":["=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["fetch","DevPersona",{"limit":"@config.maxRows","emit":{"success":"AUTO_ROWS","failure":"AUTO_ROWS_FAILED"}}]]},{"from":"ready","to":"ready","event":"AUTO_HOST","eventId":"evt_YVY950S3MPHTBBHY70D9FG6645","guard":["!=",["default","@payload.value",""],"@config.authEmulatorHost"]},{"from":"ready","to":"ready","event":"AUTO_FAILED","eventId":"evt_HZS98MEDEP6QB6SF54GYSS8VPJ"},{"from":"ready","to":"ready","event":"AUTO_ROWS","eventId":"evt_GWRDN10QH9BRMT107A6VT4CZS3","effects":[["emit","AUTO_RESOLVED",{"id":["let",[["byId",["array/find","@payload.data",["fn","r",["=",["default","@r.id",""],"@config.autoSignIn"]]]],["byRole",["array/find","@payload.data",["fn","r",["=",["default","@r.role",""],"@config.autoSignIn"]]]]],["default",["object/get",["default","@byId",["default","@byRole",{}]],"id"],""]]}]]},{"from":"ready","to":"ready","event":"AUTO_RESOLVED","eventId":"evt_DP3C37548KJ49ZENEWTRJ6J082","guard":["!=","@payload.id",""],"effects":[["emit","TOKEN_MINT",{"key":"@payload.id","purpose":"sign-in"}]]},{"from":"ready","to":"ready","event":"AUTO_RESOLVED","eventId":"evt_DP3C37548KJ49ZENEWTRJ6J082","guard":["=","@payload.id",""],"effects":[["emit","PERSONA_SIGN_IN_REFUSED",{"error":["str/concat","persona sign-in refused: no identity row has the id or the role ","@config.autoSignIn"],"kind":"no-persona"}]]},{"from":"ready","to":"ready","event":"AUTO_ROWS_FAILED","eventId":"evt_0NPKJWZZMBZT5G2WWBACTP58ZF","effects":[["emit","PERSONA_SIGN_IN_REFUSED",{"error":["str/concat","persona sign-in refused: the identity rows could not be read to resolve ","@config.autoSignIn",": ",["default","@payload.error",""]],"kind":"no-persona"}]]},{"from":"ready","to":"ready","event":"TOKEN_MINT","eventId":"evt_RKAK0BZ312HGHCJ69JQBHNTW09","effects":[["emit","TOKEN_MINTED",{"key":"@payload.key","purpose":"@payload.purpose","token":["str/concat",["str/replace-pattern",["str/replace-pattern",["str/replace-pattern",["base64/encode",["json/stringify",{"alg":"none","typ":"JWT"}]],"\\+","-"],"/","_"],"=+$",""],".",["str/replace-pattern",["str/replace-pattern",["str/replace-pattern",["base64/encode",["json/stringify",{"aud":["if",["!=","@config.emulatorAudience",""],"@config.emulatorAudience","@config.projectId"],"iat":["time/diff","@now","@config.epoch","s"],"exp":["+",["time/diff","@now","@config.epoch","s"],3600],"iss":["if",["!=","@config.emulatorIssuer",""],"@config.emulatorIssuer",["str/concat","https://securetoken.google.com/","@config.projectId"]],"sub":"@payload.key","uid":"@payload.key"}]],"\\+","-"],"/","_"],"=+$",""],"."]}]]},{"from":"ready","to":"ready","event":"ANSWER_TOKEN_MINT","eventId":"evt_RNAGCA69EF4Q7PATZ2QW2D1P21","effects":[["emit","ANSWER_TOKEN_MINTED",{"key":"@payload.key","token":["str/concat",["str/replace-pattern",["str/replace-pattern",["str/replace-pattern",["base64/encode",["json/stringify",{"alg":"none","typ":"JWT"}]],"\\+","-"],"/","_"],"=+$",""],".",["str/replace-pattern",["str/replace-pattern",["str/replace-pattern",["base64/encode",["json/stringify",{"aud":["if",["!=","@config.emulatorAudience",""],"@config.emulatorAudience","@config.projectId"],"iat":["time/diff","@now","@config.epoch","s"],"exp":["+",["time/diff","@now","@config.epoch","s"],3600],"iss":["if",["!=","@config.emulatorIssuer",""],"@config.emulatorIssuer",["str/concat","https://securetoken.google.com/","@config.projectId"]],"sub":"@payload.key","uid":"@payload.key"}]],"\\+","-"],"/","_"],"=+$",""],"."]}]]},{"from":"ready","to":"ready","event":"ANSWER_TOKEN_MINTED","eventId":"evt_TKKW0P6N1DAGPREX18DRD8TQJ4","effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":200,"body":["json/stringify",{"success":true,"customToken":"@payload.token","authEmulatorHost":"@config.authEmulatorHost","projectId":"@config.projectId"}]}]]},{"from":"ready","to":"ready","event":"TOKEN_MINTED","eventId":"evt_E8YWAQ356MJKA8PBF47E104XJ6","guard":["=","@payload.purpose","sign-in"],"effects":[["identity/sign-in",["jws/verify","@payload.token",[],{"issuer":["if",["!=","@config.emulatorIssuer",""],"@config.emulatorIssuer",["str/concat","https://securetoken.google.com/","@config.projectId"]],"audience":["if",["!=","@config.emulatorAudience",""],"@config.emulatorAudience","@config.projectId"],"allowUnsigned":true}],{"emit":{"success":"PERSONA_SIGNED_IN","failure":"PERSONA_SIGN_IN_REFUSED"}}]]},{"from":"ready","to":"ready","event":"PERSONA_ACT_AS","eventId":"evt_SSK568SJHZS8ZY7NFA87563ZXF","effects":[["os/getenv","FIREBASE_AUTH_EMULATOR_HOST",{"key":"@payload.persona","emit":{"success":"ACT_AS_HOST","failure":"ACT_AS_FAILED"}}]]},{"from":"ready","to":"ready","event":"ACT_AS_HOST","eventId":"evt_PH2X3AKWB8Y5MERFS8A5KAAEYM","guard":["=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["emit","TOKEN_MINT",{"key":"@payload.key","purpose":"sign-in"}]]},{"from":"ready","to":"ready","event":"ACT_AS_HOST","eventId":"evt_PH2X3AKWB8Y5MERFS8A5KAAEYM","guard":["!=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["emit","PERSONA_SIGN_IN_REFUSED",{"error":"persona sign-in refused: the Auth emulator is not configured","kind":"no-emulator"}]]},{"from":"ready","to":"ready","event":"ACT_AS_FAILED","eventId":"evt_BY26Z0PSM1CT0ZCGG79ZD5B57A","effects":[["emit","PERSONA_SIGN_IN_REFUSED",{"error":["str/concat","persona sign-in refused: the environment could not be read: ",["default","@payload.error",""]],"kind":"no-emulator"}]]},{"from":"ready","to":"ready","event":"TOKEN_SIGN_IN_REQUESTED","eventId":"evt_MMYZYMD6TQKDBK4XV273G307MS","effects":[["os/getenv","FIREBASE_AUTH_EMULATOR_HOST",{"key":"@payload.token","emit":{"success":"TOKEN_HOST","failure":"TOKEN_HOST_FAILED"}}]]},{"from":"ready","to":"ready","event":"TOKEN_HOST","eventId":"evt_BS8FDH73YHHZ8GVWZXWT6K8XSM","guard":["=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["identity/sign-in",["jws/verify","@payload.key",[],{"issuer":["if",["!=","@config.emulatorIssuer",""],"@config.emulatorIssuer",["str/concat","https://securetoken.google.com/","@config.projectId"]],"audience":["if",["!=","@config.emulatorAudience",""],"@config.emulatorAudience","@config.projectId"],"allowUnsigned":true}],{"emit":{"success":"PERSONA_SIGNED_IN","failure":"PERSONA_SIGN_IN_REFUSED"}}]]},{"from":"ready","to":"ready","event":"TOKEN_HOST","eventId":"evt_BS8FDH73YHHZ8GVWZXWT6K8XSM","guard":["!=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["emit","PERSONA_SIGN_IN_REFUSED",{"error":"persona sign-in refused: the Auth emulator is not configured","kind":"no-emulator"}]]},{"from":"ready","to":"ready","event":"TOKEN_HOST_FAILED","eventId":"evt_WSYKMFRGR48C26RA6VWMN8A5VP","effects":[["emit","PERSONA_SIGN_IN_REFUSED",{"error":["str/concat","persona sign-in refused: the environment could not be read: ",["default","@payload.error",""]],"kind":"no-emulator"}]]},{"from":"ready","to":"ready","event":"PERSONA_SIGNED_IN","eventId":"evt_0W4055DNDBTPNZBYT2J0M6BAMQ"},{"from":"ready","to":"ready","event":"PERSONA_SIGN_IN_REFUSED","eventId":"evt_5MQ3BW1RAWW5EDA6F2D4A74WXE"},{"from":"ready","to":"ready","event":"PERSONAS_REQUESTED","eventId":"evt_5RB7R6KH3GRHRDA6T1V3RB6KTB","effects":[["emit","PERSONAS_CALLED",{"rawBody":""}]]},{"from":"ready","to":"ready","event":"PERSONAS_CALLED","eventId":"evt_6XFGWHY03V01XS7DHX7BSGS7PW","effects":[["os/getenv","FIREBASE_AUTH_EMULATOR_HOST",{"key":"list","emit":{"success":"PERSONAS_HOST","failure":"PERSONAS_FAILED"}}]]},{"from":"ready","to":"ready","event":"PERSONAS_HOST","eventId":"evt_04N2KK43YM1ZACMT20MQWYKAYH","guard":["!=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["emit","PERSONAS_ANSWERED",{"status":404,"body":["json/stringify",{"success":false,"error":"no dev personas: the Auth emulator is not configured"}]}]]},{"from":"ready","to":"ready","event":"PERSONAS_HOST","eventId":"evt_04N2KK43YM1ZACMT20MQWYKAYH","guard":["=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["fetch","DevPersona",{"limit":"@config.maxRows","emit":{"success":"PERSONAS_ROWS","failure":"PERSONAS_FAILED"}}]]},{"from":"ready","to":"ready","event":"PERSONAS_ROWS","eventId":"evt_SQKK5ARQ88BM483WVGTH7ESD53","guard":[">","@payload.totalCount",["array/len","@payload.data"]],"effects":[["emit","PERSONAS_FAILED",{"error":["str/concat","DevPersona has ","@payload.totalCount"," rows, over the maxRows cap of ","@config.maxRows"]}]]},{"from":"ready","to":"ready","event":"PERSONAS_ROWS","eventId":"evt_SQKK5ARQ88BM483WVGTH7ESD53","effects":[["let",[["rows",["array/filter","@payload.data",["fn","r",["!=",["default","@r.id",""],""]]]]],["emit","PERSONAS_ANSWERED",{"status":200,"body":["json/stringify",{"success":true,"personas":"@rows","source":["if",[">",["array/len","@rows"],0],"identity-entity","none"]}]}]]]},{"from":"ready","to":"ready","event":"PERSONAS_FAILED","eventId":"evt_RCVE2YHEDAQ6N3HC5V51TNF7TW","effects":[["emit","PERSONAS_ANSWERED",{"status":500,"body":["json/stringify",{"success":false,"error":["default","@payload.error",""]}]}]]},{"from":"ready","to":"ready","event":"PERSONA_SIGN_IN_REQUESTED","eventId":"evt_YH34PRTWERE7CAEW365GNN86VB","effects":[["emit","SIGN_IN_CALLED",{"rawBody":["json/stringify",{"id":"@payload.id"}]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_CALLED","eventId":"evt_3HJ9F9GBK25SH8T1B9WF8V0CHF","guard":["=",["default",["object/get",["default",["json/parse",["default","@payload.rawBody","{}"],"PersonaSignInBody"],{}],"id"],""],""],"effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":400,"body":["json/stringify",{"success":false,"error":"expected { id }"}]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_CALLED","eventId":"evt_3HJ9F9GBK25SH8T1B9WF8V0CHF","guard":["!=",["default",["object/get",["default",["json/parse",["default","@payload.rawBody","{}"],"PersonaSignInBody"],{}],"id"],""],""],"effects":[["os/getenv","FIREBASE_AUTH_EMULATOR_HOST",{"key":["object/get",["default",["json/parse",["default","@payload.rawBody","{}"],"PersonaSignInBody"],{}],"id"],"emit":{"success":"SIGN_IN_HOST","failure":"SIGN_IN_FAILED"}}]]},{"from":"ready","to":"ready","event":"SIGN_IN_HOST","eventId":"evt_F20VPTVA99N4MJ3R6PWDKDNNH5","guard":["!=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":404,"body":["json/stringify",{"success":false,"error":"no dev personas: the Auth emulator is not configured"}]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_HOST","eventId":"evt_F20VPTVA99N4MJ3R6PWDKDNNH5","guard":["=",["default","@payload.value",""],"@config.authEmulatorHost"],"effects":[["fetch","DevPersona",{"id":"@payload.key","emit":{"success":"SIGN_IN_ROW","failure":"SIGN_IN_ROW_MISSED"}}]]},{"from":"ready","to":"ready","event":"SIGN_IN_ROW","eventId":"evt_5WSMQRHG29R14S27Q43SK10QWR","guard":[">",["array/len",["array/filter",["object/keys","@payload.data"],["fn","k",["array/includes","@config.reservedClaims","@k"]]]],0],"effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":500,"body":["json/stringify",{"success":false,"error":["str/concat","persona ","@payload.data.id"," has fields named like reserved token claims: ",["str/join",["array/filter",["object/keys","@payload.data"],["fn","k",["array/includes","@config.reservedClaims","@k"]]],", "]]}]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_ROW","eventId":"evt_5WSMQRHG29R14S27Q43SK10QWR","guard":["=",["array/len",["array/filter",["object/keys","@payload.data"],["fn","k",["array/includes","@config.reservedClaims","@k"]]]],0],"effects":[["emit","DP_POST",{"key":["str/concat","create:","@payload.data.id"],"method":"POST","target":["str/concat","/identitytoolkit.googleapis.com/v1/projects/","@config.projectId","/accounts"],"headers":[{"name":"Content-Type","value":"application/json"}],"body":["bytes/from-string",["json/stringify",["if",["!=",["default","@payload.data.name",""],""],{"localId":"@payload.data.id","displayName":"@payload.data.name"},{"localId":"@payload.data.id"}]]],"stream":"none"}]]},{"from":"ready","to":"ready","event":"PERSONA_REPLIED","eventId":"evt_HJWD6VK2WAHE56PX981ZQAWJ9W","guard":["str/startsWith","@payload.key","create:"],"effects":[["emit","SIGN_IN_CREATED",{"key":["str/slice","@payload.key",7],"status":"@payload.status","body":["default",["bytes/to-string","@payload.body"],""]}]]},{"from":"ready","to":"ready","event":"PERSONA_REPLIED","eventId":"evt_HJWD6VK2WAHE56PX981ZQAWJ9W","guard":["str/startsWith","@payload.key","update:"],"effects":[["emit","SIGN_IN_UPDATED",{"key":["str/slice","@payload.key",7],"status":"@payload.status","body":["default",["bytes/to-string","@payload.body"],""]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_CREATED","eventId":"evt_5AWT64JZ4WFJEAGF2AC2HVGQX0","guard":["and",["or",["<","@payload.status",200],[">=","@payload.status",300]],["not",["and",["!=",["json/parse","@payload.body","EmulatorReply"],null],["str/startsWith",["object/get",["json/parse","@payload.body","EmulatorReply"],"error.message",""],"DUPLICATE_LOCAL_ID"]]]],"effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":500,"body":["json/stringify",{"success":false,"error":["str/concat","the Auth emulator refused to create ","@payload.key",": ",["str/concat","@payload.status"]," ","@payload.body"]}]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_CREATED","eventId":"evt_5AWT64JZ4WFJEAGF2AC2HVGQX0","guard":["or",["and",[">=","@payload.status",200],["<","@payload.status",300]],["and",["!=",["json/parse","@payload.body","EmulatorReply"],null],["str/startsWith",["object/get",["json/parse","@payload.body","EmulatorReply"],"error.message",""],"DUPLICATE_LOCAL_ID"]]],"effects":[["fetch","DevPersona",{"id":"@payload.key","emit":{"success":"SIGN_IN_CLAIMS","failure":"SIGN_IN_ROW_MISSED"}}]]},{"from":"ready","to":"ready","event":"SIGN_IN_CLAIMS","eventId":"evt_HDR0V0XZCFZP7TTP5ZCR9EQ4NP","effects":[["emit","DP_POST",{"key":["str/concat","update:","@payload.data.id"],"method":"POST","target":["str/concat","/identitytoolkit.googleapis.com/v1/projects/","@config.projectId","/accounts:update"],"headers":[{"name":"Content-Type","value":"application/json"}],"body":["bytes/from-string",["json/stringify",["object/merge",["if",["!=",["default","@payload.data.name",""],""],{"localId":"@payload.data.id","displayName":"@payload.data.name"},{"localId":"@payload.data.id"}],{"customAttributes":["json/stringify",["object/omit","@payload.data",["id","email","name"]]]}]]],"stream":"none"}]]},{"from":"ready","to":"ready","event":"SIGN_IN_UPDATED","eventId":"evt_7V78MVH02DG16R2QP1T0ERBVHF","guard":["or",["<","@payload.status",200],[">=","@payload.status",300]],"effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":500,"body":["json/stringify",{"success":false,"error":["str/concat","the Auth emulator refused to update ","@payload.key",": ",["str/concat","@payload.status"]," ","@payload.body"]}]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_UPDATED","eventId":"evt_7V78MVH02DG16R2QP1T0ERBVHF","guard":["and",[">=","@payload.status",200],["<","@payload.status",300]],"effects":[["emit","ANSWER_TOKEN_MINT",{"key":"@payload.key"}]]},{"from":"ready","to":"ready","event":"SIGN_IN_ROW_MISSED","eventId":"evt_60AB67VMB2T5HECHKTMVW3B2BN","guard":["=","@payload.code","not-found"],"effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":404,"body":["json/stringify",{"success":false,"error":"no persona with that id"}]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_ROW_MISSED","eventId":"evt_60AB67VMB2T5HECHKTMVW3B2BN","guard":["!=","@payload.code","not-found"],"effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":500,"body":["json/stringify",{"success":false,"error":"@payload.error"}]}]]},{"from":"ready","to":"ready","event":"SIGN_IN_FAILED","eventId":"evt_ZA0MHY3ZRCZW6FNQ574G52CXQA","effects":[["emit","PERSONA_SIGN_IN_ANSWERED",{"status":500,"body":["json/stringify",{"success":false,"error":["default","@payload.error",""]}]}]]}]},"config":{"maxRows":{"nullable":false,"type":"number","default":200,"label":"Personas listed","description":"Most persona rows the personas hook may read. The hook answers the whole list for the switcher, so a partial list would hide personas; an identity entity with more rows is refused with a 500 instead of listing part of it.","synonyms":"persona limit, list cap","tier":"policy"},"authEmulatorHost":{"nullable":false,"type":"string","default":"127.0.0.1:9099","label":"Auth emulator host","description":"The host:port FIREBASE_AUTH_EMULATOR_HOST must name for the hooks to answer; anything else, or unset, answers 404.","synonyms":"auth emulator, emulator host","tier":"infra"},"projectId":{"nullable":false,"type":"string","default":"demo-almadar","label":"Project","description":"The demo project the Auth emulator runs under, the same one std-firebase-emulators starts.","synonyms":"firebase project","tier":"infra"},"epoch":{"nullable":false,"type":"instant","default":"1970-01-01T00:00:00.000Z","label":"Epoch","description":"The instant token times (iat, exp) count seconds from.","tier":"infra"},"autoSignIn":{"nullable":false,"type":"string","default":"","label":"Auto sign-in persona","description":"The ALMADAR_PERSONA spec of the persona to sign in as: an identity row id, else the first row whose role is this value; empty signs nobody in. A new session of an app running against the Auth emulator (FIREBASE_AUTH_EMULATOR_HOST equal to authEmulatorHost) reads the identity rows at its start, resolves the spec and signs in as that row: its unsigned emulator token goes through jws/verify (allowUnsigned, the emulator issuer knob) and identity/sign-in, the same path as the persona picker. A spec no row matches answers PERSONA_SIGN_IN_REFUSED naming it and leaves the session signed out. Never signs in anywhere else.","synonyms":"default persona, dev user, emulator user","tier":"policy"},"emulatorIssuer":{"nullable":false,"type":"string","default":"","label":"Emulator issuer","description":"The iss of the emulator custom tokens this atom mints and verifies; empty uses https://securetoken.google.com/<projectId>, the issuer of the emulator's ID tokens, so the same tokens verify in std-bearer-verify when its issuer is that. jws/verify accepts an unsigned token only when its iss equals the call's issuer.","tier":"infra"},"emulatorAudience":{"nullable":false,"type":"string","default":"","label":"Emulator audience","description":"The aud of the emulator custom tokens; empty uses the projectId.","tier":"infra"},"reservedClaims":{"nullable":false,"type":"[string]","default":["acr","amr","at_hash","aud","auth_time","azp","cnf","c_hash","exp","firebase","iat","iss","jti","nbf","nonce","sub"],"label":"Reserved claims","description":"Token claim names Firebase reserves; a persona field named like one refuses the sign-in.","synonyms":"reserved token claims","tier":"infra","items":{"nullable":false,"type":"string"}}},"sourceDeclaration":{"traitId":"trt_3VX5AA4EA5752MHZ306BR66YKD","fingerprint":"193c77cb4e0286f3ad525b7cc99b768f7cd7917f07b39bcd6ba381fd42eac9fd"}}],"pages":[{"name":"DevPersonasOrbitalStart","id":"pag_VJFER1AAJF597TC66Q79KJMYGZ","path":"","protocol":"boot","traits":[{"ref":"DevPersonas","refId":"trt_3VX5AA4EA5752MHZ306BR66YKD"},{"ref":"PersonaHttp","refId":"trt_7AKNK5M1DK0PSP17CKAQGC8XHC"}]}],"types":{"EmulatorError":[{"nullable":false,"name":"message","type":"string"}],"EmulatorReply":[{"nullable":false,"name":"error","type":"object","properties":[{"nullable":false,"name":"message","type":"string"}],"projectedFrom":{"type":"EmulatorError"}}],"HttpHeader":[{"nullable":false,"name":"name","type":"string","required":true},{"nullable":false,"name":"value","type":"string","required":true}],"PersonaSignInBody":[{"nullable":false,"name":"id","type":"string"}]}}],"inbound":["personas","persona-sign-in"],"osGrants":{"fs":[],"exec":[],"net":[],"env":["FIREBASE_AUTH_EMULATOR_HOST"],"stdio":[],"sys":[],"desktop":[]},"schemaVersion":1,"ledger":{"schemaVersion":1,"entries":{"ent_DR5Y6561630K1S4Y5EJPZQEHNF":{"id":"ent_DR5Y6561630K1S4Y5EJPZQEHNF","kind":"entity","bakedName":"DevPersona","curName":"DevPersona","renames":[],"owner":"workspace"},"evt_04N2KK43YM1ZACMT20MQWYKAYH":{"id":"evt_04N2KK43YM1ZACMT20MQWYKAYH","kind":"event","bakedName":"PERSONAS_HOST","curName":"PERSONAS_HOST","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_0NPKJWZZMBZT5G2WWBACTP58ZF":{"id":"evt_0NPKJWZZMBZT5G2WWBACTP58ZF","kind":"event","bakedName":"AUTO_ROWS_FAILED","curName":"AUTO_ROWS_FAILED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_0W4055DNDBTPNZBYT2J0M6BAMQ":{"id":"evt_0W4055DNDBTPNZBYT2J0M6BAMQ","kind":"event","bakedName":"PERSONA_SIGNED_IN","curName":"PERSONA_SIGNED_IN","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_3HJ9F9GBK25SH8T1B9WF8V0CHF":{"id":"evt_3HJ9F9GBK25SH8T1B9WF8V0CHF","kind":"event","bakedName":"SIGN_IN_CALLED","curName":"SIGN_IN_CALLED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_5AWT64JZ4WFJEAGF2AC2HVGQX0":{"id":"evt_5AWT64JZ4WFJEAGF2AC2HVGQX0","kind":"event","bakedName":"SIGN_IN_CREATED","curName":"SIGN_IN_CREATED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_5MQ3BW1RAWW5EDA6F2D4A74WXE":{"id":"evt_5MQ3BW1RAWW5EDA6F2D4A74WXE","kind":"event","bakedName":"PERSONA_SIGN_IN_REFUSED","curName":"PERSONA_SIGN_IN_REFUSED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_5RB7R6KH3GRHRDA6T1V3RB6KTB":{"id":"evt_5RB7R6KH3GRHRDA6T1V3RB6KTB","kind":"event","bakedName":"PERSONAS_REQUESTED","curName":"PERSONAS_REQUESTED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_5WSMQRHG29R14S27Q43SK10QWR":{"id":"evt_5WSMQRHG29R14S27Q43SK10QWR","kind":"event","bakedName":"SIGN_IN_ROW","curName":"SIGN_IN_ROW","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_60AB67VMB2T5HECHKTMVW3B2BN":{"id":"evt_60AB67VMB2T5HECHKTMVW3B2BN","kind":"event","bakedName":"SIGN_IN_ROW_MISSED","curName":"SIGN_IN_ROW_MISSED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_6XFGWHY03V01XS7DHX7BSGS7PW":{"id":"evt_6XFGWHY03V01XS7DHX7BSGS7PW","kind":"event","bakedName":"PERSONAS_CALLED","curName":"PERSONAS_CALLED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_7DMZH037CGKP80W9HZQAJCE7PE":{"id":"evt_7DMZH037CGKP80W9HZQAJCE7PE","kind":"event","bakedName":"PERSONA_SIGN_IN_ANSWERED","curName":"PERSONA_SIGN_IN_ANSWERED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_7V78MVH02DG16R2QP1T0ERBVHF":{"id":"evt_7V78MVH02DG16R2QP1T0ERBVHF","kind":"event","bakedName":"SIGN_IN_UPDATED","curName":"SIGN_IN_UPDATED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_8EQ2CZPZABFN5Z804NX421Y02X":{"id":"evt_8EQ2CZPZABFN5Z804NX421Y02X","kind":"event","bakedName":"INIT","curName":"INIT","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_BS8FDH73YHHZ8GVWZXWT6K8XSM":{"id":"evt_BS8FDH73YHHZ8GVWZXWT6K8XSM","kind":"event","bakedName":"TOKEN_HOST","curName":"TOKEN_HOST","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_BY26Z0PSM1CT0ZCGG79ZD5B57A":{"id":"evt_BY26Z0PSM1CT0ZCGG79ZD5B57A","kind":"event","bakedName":"ACT_AS_FAILED","curName":"ACT_AS_FAILED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_DP3C37548KJ49ZENEWTRJ6J082":{"id":"evt_DP3C37548KJ49ZENEWTRJ6J082","kind":"event","bakedName":"AUTO_RESOLVED","curName":"AUTO_RESOLVED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_E8YWAQ356MJKA8PBF47E104XJ6":{"id":"evt_E8YWAQ356MJKA8PBF47E104XJ6","kind":"event","bakedName":"TOKEN_MINTED","curName":"TOKEN_MINTED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_F20VPTVA99N4MJ3R6PWDKDNNH5":{"id":"evt_F20VPTVA99N4MJ3R6PWDKDNNH5","kind":"event","bakedName":"SIGN_IN_HOST","curName":"SIGN_IN_HOST","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_GWRDN10QH9BRMT107A6VT4CZS3":{"id":"evt_GWRDN10QH9BRMT107A6VT4CZS3","kind":"event","bakedName":"AUTO_ROWS","curName":"AUTO_ROWS","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_HDR0V0XZCFZP7TTP5ZCR9EQ4NP":{"id":"evt_HDR0V0XZCFZP7TTP5ZCR9EQ4NP","kind":"event","bakedName":"SIGN_IN_CLAIMS","curName":"SIGN_IN_CLAIMS","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_HJWD6VK2WAHE56PX981ZQAWJ9W":{"id":"evt_HJWD6VK2WAHE56PX981ZQAWJ9W","kind":"event","bakedName":"PERSONA_REPLIED","curName":"PERSONA_REPLIED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_HZS98MEDEP6QB6SF54GYSS8VPJ":{"id":"evt_HZS98MEDEP6QB6SF54GYSS8VPJ","kind":"event","bakedName":"AUTO_FAILED","curName":"AUTO_FAILED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_MMYZYMD6TQKDBK4XV273G307MS":{"id":"evt_MMYZYMD6TQKDBK4XV273G307MS","kind":"event","bakedName":"TOKEN_SIGN_IN_REQUESTED","curName":"TOKEN_SIGN_IN_REQUESTED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_PH2X3AKWB8Y5MERFS8A5KAAEYM":{"id":"evt_PH2X3AKWB8Y5MERFS8A5KAAEYM","kind":"event","bakedName":"ACT_AS_HOST","curName":"ACT_AS_HOST","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_Q65S5BYSK7CSKPMX1MHPY9K1XM":{"id":"evt_Q65S5BYSK7CSKPMX1MHPY9K1XM","kind":"event","bakedName":"PERSONAS_ANSWERED","curName":"PERSONAS_ANSWERED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_RCVE2YHEDAQ6N3HC5V51TNF7TW":{"id":"evt_RCVE2YHEDAQ6N3HC5V51TNF7TW","kind":"event","bakedName":"PERSONAS_FAILED","curName":"PERSONAS_FAILED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_RKAK0BZ312HGHCJ69JQBHNTW09":{"id":"evt_RKAK0BZ312HGHCJ69JQBHNTW09","kind":"event","bakedName":"TOKEN_MINT","curName":"TOKEN_MINT","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_RNAGCA69EF4Q7PATZ2QW2D1P21":{"id":"evt_RNAGCA69EF4Q7PATZ2QW2D1P21","kind":"event","bakedName":"ANSWER_TOKEN_MINT","curName":"ANSWER_TOKEN_MINT","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_S7BSVG0RAVC5DQC06WCB940DGJ":{"id":"evt_S7BSVG0RAVC5DQC06WCB940DGJ","kind":"event","bakedName":"DP_POST","curName":"DP_POST","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_SQKK5ARQ88BM483WVGTH7ESD53":{"id":"evt_SQKK5ARQ88BM483WVGTH7ESD53","kind":"event","bakedName":"PERSONAS_ROWS","curName":"PERSONAS_ROWS","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_SSK568SJHZS8ZY7NFA87563ZXF":{"id":"evt_SSK568SJHZS8ZY7NFA87563ZXF","kind":"event","bakedName":"PERSONA_ACT_AS","curName":"PERSONA_ACT_AS","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_TKKW0P6N1DAGPREX18DRD8TQJ4":{"id":"evt_TKKW0P6N1DAGPREX18DRD8TQJ4","kind":"event","bakedName":"ANSWER_TOKEN_MINTED","curName":"ANSWER_TOKEN_MINTED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_WSYKMFRGR48C26RA6VWMN8A5VP":{"id":"evt_WSYKMFRGR48C26RA6VWMN8A5VP","kind":"event","bakedName":"TOKEN_HOST_FAILED","curName":"TOKEN_HOST_FAILED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_YH34PRTWERE7CAEW365GNN86VB":{"id":"evt_YH34PRTWERE7CAEW365GNN86VB","kind":"event","bakedName":"PERSONA_SIGN_IN_REQUESTED","curName":"PERSONA_SIGN_IN_REQUESTED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_YVY950S3MPHTBBHY70D9FG6645":{"id":"evt_YVY950S3MPHTBBHY70D9FG6645","kind":"event","bakedName":"AUTO_HOST","curName":"AUTO_HOST","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"evt_ZA0MHY3ZRCZW6FNQ574G52CXQA":{"id":"evt_ZA0MHY3ZRCZW6FNQ574G52CXQA","kind":"event","bakedName":"SIGN_IN_FAILED","curName":"SIGN_IN_FAILED","renames":[],"owner":"workspace","parent":"trt_3VX5AA4EA5752MHZ306BR66YKD"},"orb_GRG6R6W6MS3ACHNV87R51792MV":{"id":"orb_GRG6R6W6MS3ACHNV87R51792MV","kind":"orbital","bakedName":"DevPersonasOrbital","curName":"DevPersonasOrbital","renames":[],"owner":"workspace"},"pag_VJFER1AAJF597TC66Q79KJMYGZ":{"id":"pag_VJFER1AAJF597TC66Q79KJMYGZ","kind":"page","bakedName":"DevPersonasOrbitalStart","curName":"DevPersonasOrbitalStart","renames":[],"owner":"workspace"},"trt_3VX5AA4EA5752MHZ306BR66YKD":{"id":"trt_3VX5AA4EA5752MHZ306BR66YKD","kind":"trait","bakedName":"DevPersonas","curName":"DevPersonas","renames":[],"owner":"workspace"},"trt_7AKNK5M1DK0PSP17CKAQGC8XHC":{"id":"trt_7AKNK5M1DK0PSP17CKAQGC8XHC","kind":"trait","bakedName":"PersonaHttp","curName":"PersonaHttp","renames":[],"owner":"workspace"}}}}