@fuzdev/fuz_app 0.147.0 → 0.149.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 (303) hide show
  1. package/dist/actions/CLAUDE.md +8 -6
  2. package/dist/actions/action_codegen.d.ts +15 -1
  3. package/dist/actions/action_codegen.d.ts.map +1 -1
  4. package/dist/actions/action_codegen.js +23 -2
  5. package/dist/actions/action_event.d.ts.map +1 -1
  6. package/dist/actions/action_event.js +14 -1
  7. package/dist/actions/perform_action.d.ts +17 -1
  8. package/dist/actions/perform_action.d.ts.map +1 -1
  9. package/dist/actions/perform_action.js +23 -3
  10. package/dist/auth/CLAUDE.md +3 -2
  11. package/dist/auth/account_action_specs.d.ts +12 -0
  12. package/dist/auth/account_action_specs.d.ts.map +1 -1
  13. package/dist/auth/account_action_specs.js +16 -2
  14. package/dist/auth/account_actions.d.ts.map +1 -1
  15. package/dist/auth/account_actions.js +7 -4
  16. package/dist/auth/admin_action_specs.d.ts.map +1 -1
  17. package/dist/auth/admin_action_specs.js +29 -8
  18. package/dist/auth/audit_emitter.d.ts +14 -0
  19. package/dist/auth/audit_emitter.d.ts.map +1 -1
  20. package/dist/auth/audit_emitter.js +5 -1
  21. package/dist/auth/cell_action_specs.d.ts +3 -1
  22. package/dist/auth/cell_action_specs.d.ts.map +1 -1
  23. package/dist/auth/cell_action_specs.js +5 -5
  24. package/dist/auth/cell_actions.d.ts.map +1 -1
  25. package/dist/auth/cell_actions.js +2 -3
  26. package/dist/auth/cell_data_schema.d.ts +1 -1
  27. package/dist/auth/cell_data_schema.js +1 -1
  28. package/dist/auth/cell_field_action_specs.d.ts +4 -3
  29. package/dist/auth/cell_field_action_specs.d.ts.map +1 -1
  30. package/dist/auth/cell_field_action_specs.js +5 -6
  31. package/dist/auth/cell_field_actions.d.ts.map +1 -1
  32. package/dist/auth/cell_field_actions.js +8 -1
  33. package/dist/auth/cell_item_action_specs.d.ts +4 -2
  34. package/dist/auth/cell_item_action_specs.d.ts.map +1 -1
  35. package/dist/auth/cell_item_action_specs.js +5 -5
  36. package/dist/auth/cell_item_actions.d.ts.map +1 -1
  37. package/dist/auth/cell_item_actions.js +8 -1
  38. package/dist/auth/role_grant_offer_action_specs.d.ts +2 -0
  39. package/dist/auth/role_grant_offer_action_specs.d.ts.map +1 -1
  40. package/dist/auth/role_grant_offer_action_specs.js +8 -4
  41. package/dist/http/CLAUDE.md +14 -2
  42. package/dist/http/error_schemas.d.ts +8 -0
  43. package/dist/http/error_schemas.d.ts.map +1 -1
  44. package/dist/http/error_schemas.js +12 -0
  45. package/dist/http/jsonrpc_errors.d.ts +40 -15
  46. package/dist/http/jsonrpc_errors.d.ts.map +1 -1
  47. package/dist/http/jsonrpc_errors.js +90 -35
  48. package/dist/primitive_schemas.d.ts +1 -1
  49. package/dist/primitive_schemas.d.ts.map +1 -1
  50. package/dist/primitive_schemas.js +2 -1
  51. package/dist/schema_meta.d.ts +80 -0
  52. package/dist/schema_meta.d.ts.map +1 -1
  53. package/dist/schema_meta.js +71 -1
  54. package/dist/testing/CLAUDE.md +853 -146
  55. package/dist/testing/admin_integration.d.ts.map +1 -1
  56. package/dist/testing/admin_integration.js +73 -5
  57. package/dist/testing/adversarial_input.d.ts +0 -47
  58. package/dist/testing/adversarial_input.d.ts.map +1 -1
  59. package/dist/testing/adversarial_input.js +4 -340
  60. package/dist/testing/adversarial_input_cases.d.ts +124 -0
  61. package/dist/testing/adversarial_input_cases.d.ts.map +1 -0
  62. package/dist/testing/adversarial_input_cases.js +393 -0
  63. package/dist/testing/audit_completeness.d.ts.map +1 -1
  64. package/dist/testing/audit_completeness.js +24 -20
  65. package/dist/testing/audit_drift_guard.d.ts +30 -3
  66. package/dist/testing/audit_drift_guard.d.ts.map +1 -1
  67. package/dist/testing/audit_drift_guard.js +55 -3
  68. package/dist/testing/cross_backend/account_lifecycle.d.ts.map +1 -1
  69. package/dist/testing/cross_backend/account_lifecycle.js +29 -12
  70. package/dist/testing/cross_backend/actor_lookup.d.ts.map +1 -1
  71. package/dist/testing/cross_backend/actor_lookup.js +7 -25
  72. package/dist/testing/cross_backend/app_settings.d.ts.map +1 -1
  73. package/dist/testing/cross_backend/app_settings.js +4 -6
  74. package/dist/testing/cross_backend/audit_cross_helpers.d.ts +57 -0
  75. package/dist/testing/cross_backend/audit_cross_helpers.d.ts.map +1 -0
  76. package/dist/testing/cross_backend/audit_cross_helpers.js +89 -0
  77. package/dist/testing/cross_backend/backend_config.d.ts +2 -1
  78. package/dist/testing/cross_backend/backend_config.d.ts.map +1 -1
  79. package/dist/testing/cross_backend/body_size.d.ts +6 -0
  80. package/dist/testing/cross_backend/body_size.d.ts.map +1 -1
  81. package/dist/testing/cross_backend/body_size.js +26 -44
  82. package/dist/testing/cross_backend/body_size_smuggling.d.ts +5 -0
  83. package/dist/testing/cross_backend/body_size_smuggling.d.ts.map +1 -1
  84. package/dist/testing/cross_backend/body_size_smuggling.js +7 -14
  85. package/dist/testing/cross_backend/build_test_backend_paths.d.ts +3 -1
  86. package/dist/testing/cross_backend/build_test_backend_paths.d.ts.map +1 -1
  87. package/dist/testing/cross_backend/capabilities.d.ts +78 -59
  88. package/dist/testing/cross_backend/capabilities.d.ts.map +1 -1
  89. package/dist/testing/cross_backend/capabilities.js +25 -24
  90. package/dist/testing/cross_backend/cargo_binary.d.ts +70 -0
  91. package/dist/testing/cross_backend/cargo_binary.d.ts.map +1 -0
  92. package/dist/testing/cross_backend/cargo_binary.js +148 -0
  93. package/dist/testing/cross_backend/cell_crud.d.ts.map +1 -1
  94. package/dist/testing/cross_backend/cell_crud.js +174 -3
  95. package/dist/testing/cross_backend/cell_gated_create.d.ts +0 -60
  96. package/dist/testing/cross_backend/cell_gated_create.d.ts.map +1 -1
  97. package/dist/testing/cross_backend/cell_gated_create.js +9 -487
  98. package/dist/testing/cross_backend/cell_grant_role.d.ts +14 -2
  99. package/dist/testing/cross_backend/cell_grant_role.d.ts.map +1 -1
  100. package/dist/testing/cross_backend/cell_grant_role.js +22 -12
  101. package/dist/testing/cross_backend/cell_moderate.d.ts +66 -0
  102. package/dist/testing/cross_backend/cell_moderate.d.ts.map +1 -0
  103. package/dist/testing/cross_backend/cell_moderate.js +511 -0
  104. package/dist/testing/cross_backend/cell_ref_admission.d.ts.map +1 -1
  105. package/dist/testing/cross_backend/cell_ref_admission.js +1 -1
  106. package/dist/testing/cross_backend/cell_relations.d.ts.map +1 -1
  107. package/dist/testing/cross_backend/cell_relations.js +40 -19
  108. package/dist/testing/cross_backend/conformance_case.d.ts +43 -4
  109. package/dist/testing/cross_backend/conformance_case.d.ts.map +1 -1
  110. package/dist/testing/cross_backend/conformance_case.js +29 -1
  111. package/dist/testing/cross_backend/conformance_rpc_auth.d.ts +93 -0
  112. package/dist/testing/cross_backend/conformance_rpc_auth.d.ts.map +1 -0
  113. package/dist/testing/cross_backend/conformance_rpc_auth.js +125 -0
  114. package/dist/testing/cross_backend/conformance_table.d.ts +144 -4
  115. package/dist/testing/cross_backend/conformance_table.d.ts.map +1 -1
  116. package/dist/testing/cross_backend/conformance_table.js +297 -65
  117. package/dist/testing/cross_backend/cookie_attributes.d.ts.map +1 -1
  118. package/dist/testing/cross_backend/cookie_attributes.js +3 -2
  119. package/dist/testing/cross_backend/create_cross_backend_global_setup.d.ts +38 -5
  120. package/dist/testing/cross_backend/create_cross_backend_global_setup.d.ts.map +1 -1
  121. package/dist/testing/cross_backend/create_cross_backend_global_setup.js +24 -3
  122. package/dist/testing/cross_backend/create_dual_spawn_global_setup.d.ts +5 -5
  123. package/dist/testing/cross_backend/create_dual_spawn_global_setup.d.ts.map +1 -1
  124. package/dist/testing/cross_backend/credential_deadline.d.ts +10 -6
  125. package/dist/testing/cross_backend/credential_deadline.d.ts.map +1 -1
  126. package/dist/testing/cross_backend/credential_deadline.js +32 -31
  127. package/dist/testing/cross_backend/credential_header_robustness.d.ts.map +1 -1
  128. package/dist/testing/cross_backend/credential_header_robustness.js +4 -6
  129. package/dist/testing/cross_backend/{cell_cross_helpers.d.ts → cross_rpc.d.ts} +14 -2
  130. package/dist/testing/cross_backend/cross_rpc.d.ts.map +1 -0
  131. package/dist/testing/cross_backend/{cell_cross_helpers.js → cross_rpc.js} +31 -7
  132. package/dist/testing/cross_backend/default_backend_configs.d.ts +58 -61
  133. package/dist/testing/cross_backend/default_backend_configs.d.ts.map +1 -1
  134. package/dist/testing/cross_backend/default_backend_configs.js +97 -91
  135. package/dist/testing/cross_backend/default_spine_surface.d.ts.map +1 -1
  136. package/dist/testing/cross_backend/default_spine_surface.js +2 -2
  137. package/dist/testing/cross_backend/differential.d.ts +126 -0
  138. package/dist/testing/cross_backend/differential.d.ts.map +1 -0
  139. package/dist/testing/cross_backend/differential.js +201 -0
  140. package/dist/testing/cross_backend/differential_normalize.d.ts +150 -0
  141. package/dist/testing/cross_backend/differential_normalize.d.ts.map +1 -0
  142. package/dist/testing/cross_backend/differential_normalize.js +153 -0
  143. package/dist/testing/cross_backend/fact_serving.d.ts.map +1 -1
  144. package/dist/testing/cross_backend/fact_serving.js +27 -17
  145. package/dist/testing/cross_backend/full_spine_mount.d.ts +15 -0
  146. package/dist/testing/cross_backend/full_spine_mount.d.ts.map +1 -1
  147. package/dist/testing/cross_backend/full_spine_mount.js +55 -1
  148. package/dist/testing/cross_backend/identity_parity.d.ts.map +1 -1
  149. package/dist/testing/cross_backend/identity_parity.js +6 -5
  150. package/dist/testing/cross_backend/in_process_setup.d.ts +12 -2
  151. package/dist/testing/cross_backend/in_process_setup.d.ts.map +1 -1
  152. package/dist/testing/cross_backend/in_process_setup.js +10 -7
  153. package/dist/testing/cross_backend/login_security.d.ts.map +1 -1
  154. package/dist/testing/cross_backend/login_security.js +13 -18
  155. package/dist/testing/cross_backend/origin.js +1 -1
  156. package/dist/testing/cross_backend/origin_conformance.js +1 -1
  157. package/dist/testing/cross_backend/origin_scope.d.ts +6 -0
  158. package/dist/testing/cross_backend/origin_scope.d.ts.map +1 -1
  159. package/dist/testing/cross_backend/origin_scope.js +13 -12
  160. package/dist/testing/cross_backend/peer_ping_ws.d.ts +2 -5
  161. package/dist/testing/cross_backend/peer_ping_ws.d.ts.map +1 -1
  162. package/dist/testing/cross_backend/peer_ping_ws.js +14 -24
  163. package/dist/testing/cross_backend/postgres_database.d.ts +85 -0
  164. package/dist/testing/cross_backend/postgres_database.d.ts.map +1 -0
  165. package/dist/testing/cross_backend/postgres_database.js +140 -0
  166. package/dist/testing/cross_backend/provided_context.d.ts +28 -0
  167. package/dist/testing/cross_backend/provided_context.d.ts.map +1 -0
  168. package/dist/testing/cross_backend/provided_context.js +35 -0
  169. package/dist/testing/cross_backend/query_shape.d.ts.map +1 -1
  170. package/dist/testing/cross_backend/query_shape.js +10 -12
  171. package/dist/testing/cross_backend/ready.js +2 -2
  172. package/dist/testing/cross_backend/revocation_drivers.d.ts +4 -3
  173. package/dist/testing/cross_backend/revocation_drivers.d.ts.map +1 -1
  174. package/dist/testing/cross_backend/revocation_drivers.js +1 -1
  175. package/dist/testing/cross_backend/role_grant_cross_helpers.d.ts +3 -2
  176. package/dist/testing/cross_backend/role_grant_cross_helpers.d.ts.map +1 -1
  177. package/dist/testing/cross_backend/role_grant_offer_lifecycle.d.ts +13 -0
  178. package/dist/testing/cross_backend/role_grant_offer_lifecycle.d.ts.map +1 -0
  179. package/dist/testing/cross_backend/role_grant_offer_lifecycle.js +203 -0
  180. package/dist/testing/cross_backend/role_grant_offer_notification_ws.d.ts +2 -5
  181. package/dist/testing/cross_backend/role_grant_offer_notification_ws.d.ts.map +1 -1
  182. package/dist/testing/cross_backend/role_grant_offer_notification_ws.js +203 -111
  183. package/dist/testing/cross_backend/role_grant_participation.d.ts +13 -0
  184. package/dist/testing/cross_backend/role_grant_participation.d.ts.map +1 -1
  185. package/dist/testing/cross_backend/role_grant_participation.js +32 -21
  186. package/dist/testing/cross_backend/role_grant_role_grammar.d.ts.map +1 -1
  187. package/dist/testing/cross_backend/role_grant_role_grammar.js +6 -9
  188. package/dist/testing/cross_backend/rpc_adversarial.d.ts +47 -0
  189. package/dist/testing/cross_backend/rpc_adversarial.d.ts.map +1 -0
  190. package/dist/testing/cross_backend/rpc_adversarial.js +302 -0
  191. package/dist/testing/cross_backend/rpc_success_fixtures.d.ts +24 -0
  192. package/dist/testing/cross_backend/rpc_success_fixtures.d.ts.map +1 -0
  193. package/dist/testing/cross_backend/rpc_success_fixtures.js +124 -0
  194. package/dist/testing/cross_backend/rust_spine_consumer_surface.d.ts +101 -0
  195. package/dist/testing/cross_backend/rust_spine_consumer_surface.d.ts.map +1 -0
  196. package/dist/testing/cross_backend/rust_spine_consumer_surface.js +113 -0
  197. package/dist/testing/cross_backend/rust_spine_stub_backend_config.d.ts +10 -0
  198. package/dist/testing/cross_backend/rust_spine_stub_backend_config.d.ts.map +1 -1
  199. package/dist/testing/cross_backend/rust_spine_stub_backend_config.js +33 -21
  200. package/dist/testing/cross_backend/session_cap.d.ts +9 -8
  201. package/dist/testing/cross_backend/session_cap.d.ts.map +1 -1
  202. package/dist/testing/cross_backend/session_cap.js +9 -4
  203. package/dist/testing/cross_backend/session_cookie_codec.js +1 -1
  204. package/dist/testing/cross_backend/setup.d.ts +58 -56
  205. package/dist/testing/cross_backend/setup.d.ts.map +1 -1
  206. package/dist/testing/cross_backend/setup.js +29 -29
  207. package/dist/testing/cross_backend/simple_request.d.ts.map +1 -1
  208. package/dist/testing/cross_backend/simple_request.js +4 -4
  209. package/dist/testing/cross_backend/spawn_backend.d.ts +59 -10
  210. package/dist/testing/cross_backend/spawn_backend.d.ts.map +1 -1
  211. package/dist/testing/cross_backend/spawn_backend.js +219 -60
  212. package/dist/testing/cross_backend/spine_suites.d.ts +311 -0
  213. package/dist/testing/cross_backend/spine_suites.d.ts.map +1 -0
  214. package/dist/testing/cross_backend/spine_suites.js +897 -0
  215. package/dist/testing/cross_backend/spine_surface_constants.d.ts +44 -0
  216. package/dist/testing/cross_backend/spine_surface_constants.d.ts.map +1 -1
  217. package/dist/testing/cross_backend/spine_surface_constants.js +53 -0
  218. package/dist/testing/cross_backend/sse_round_trip.d.ts.map +1 -1
  219. package/dist/testing/cross_backend/sse_round_trip.js +3 -4
  220. package/dist/testing/cross_backend/standard.d.ts +18 -1
  221. package/dist/testing/cross_backend/standard.d.ts.map +1 -1
  222. package/dist/testing/cross_backend/standard.js +2 -0
  223. package/dist/testing/cross_backend/test_cell_gated_create_authorize.d.ts +24 -0
  224. package/dist/testing/cross_backend/test_cell_gated_create_authorize.d.ts.map +1 -1
  225. package/dist/testing/cross_backend/test_cell_gated_create_authorize.js +15 -0
  226. package/dist/testing/cross_backend/testing_backdoor.d.ts +29 -12
  227. package/dist/testing/cross_backend/testing_backdoor.d.ts.map +1 -1
  228. package/dist/testing/cross_backend/testing_backdoor.js +143 -51
  229. package/dist/testing/cross_backend/testing_reset_actions.d.ts +30 -14
  230. package/dist/testing/cross_backend/testing_reset_actions.d.ts.map +1 -1
  231. package/dist/testing/cross_backend/testing_reset_actions.js +58 -37
  232. package/dist/testing/cross_backend/testing_server_bun.js +1 -1
  233. package/dist/testing/cross_backend/token_lifetime.js +1 -1
  234. package/dist/testing/cross_backend/token_scope_surface.d.ts.map +1 -1
  235. package/dist/testing/cross_backend/token_scope_surface.js +9 -13
  236. package/dist/testing/cross_backend/transport_composition.d.ts +26 -2
  237. package/dist/testing/cross_backend/transport_composition.d.ts.map +1 -1
  238. package/dist/testing/cross_backend/transport_composition.js +81 -51
  239. package/dist/testing/cross_backend/ts_spine_backend_config.d.ts +8 -0
  240. package/dist/testing/cross_backend/ts_spine_backend_config.d.ts.map +1 -1
  241. package/dist/testing/cross_backend/ts_spine_backend_config.js +23 -13
  242. package/dist/testing/cross_backend/ws_action_rate_limit.d.ts +2 -5
  243. package/dist/testing/cross_backend/ws_action_rate_limit.d.ts.map +1 -1
  244. package/dist/testing/cross_backend/ws_action_rate_limit.js +8 -14
  245. package/dist/testing/cross_backend/ws_connection_cap.d.ts +4 -9
  246. package/dist/testing/cross_backend/ws_connection_cap.d.ts.map +1 -1
  247. package/dist/testing/cross_backend/ws_connection_cap.js +11 -12
  248. package/dist/testing/cross_backend/ws_endpoint.d.ts +52 -0
  249. package/dist/testing/cross_backend/ws_endpoint.d.ts.map +1 -0
  250. package/dist/testing/cross_backend/ws_endpoint.js +54 -0
  251. package/dist/testing/cross_backend/ws_inbound_dispatch.d.ts +2 -5
  252. package/dist/testing/cross_backend/ws_inbound_dispatch.d.ts.map +1 -1
  253. package/dist/testing/cross_backend/ws_inbound_dispatch.js +9 -15
  254. package/dist/testing/cross_backend/ws_outbound_overflow.d.ts +2 -7
  255. package/dist/testing/cross_backend/ws_outbound_overflow.d.ts.map +1 -1
  256. package/dist/testing/cross_backend/ws_outbound_overflow.js +5 -9
  257. package/dist/testing/cross_backend/ws_role_gated.d.ts +4 -5
  258. package/dist/testing/cross_backend/ws_role_gated.d.ts.map +1 -1
  259. package/dist/testing/cross_backend/ws_role_gated.js +12 -21
  260. package/dist/testing/cross_backend/ws_round_trip.d.ts +12 -9
  261. package/dist/testing/cross_backend/ws_round_trip.d.ts.map +1 -1
  262. package/dist/testing/cross_backend/ws_round_trip.js +29 -34
  263. package/dist/testing/db_entities.d.ts +16 -3
  264. package/dist/testing/db_entities.d.ts.map +1 -1
  265. package/dist/testing/db_entities.js +28 -5
  266. package/dist/testing/integration_helpers.d.ts +61 -2
  267. package/dist/testing/integration_helpers.d.ts.map +1 -1
  268. package/dist/testing/integration_helpers.js +75 -18
  269. package/dist/testing/round_trip.d.ts +17 -0
  270. package/dist/testing/round_trip.d.ts.map +1 -1
  271. package/dist/testing/round_trip.js +67 -24
  272. package/dist/testing/rpc_attack_surface.d.ts +10 -0
  273. package/dist/testing/rpc_attack_surface.d.ts.map +1 -1
  274. package/dist/testing/rpc_attack_surface.js +27 -140
  275. package/dist/testing/rpc_envelope_cases.d.ts +114 -0
  276. package/dist/testing/rpc_envelope_cases.d.ts.map +1 -0
  277. package/dist/testing/rpc_envelope_cases.js +243 -0
  278. package/dist/testing/rpc_helpers.d.ts +31 -0
  279. package/dist/testing/rpc_helpers.d.ts.map +1 -1
  280. package/dist/testing/rpc_helpers.js +35 -14
  281. package/dist/testing/rpc_round_trip.d.ts +62 -6
  282. package/dist/testing/rpc_round_trip.d.ts.map +1 -1
  283. package/dist/testing/rpc_round_trip.js +151 -39
  284. package/dist/testing/schema_generators.d.ts +99 -2
  285. package/dist/testing/schema_generators.d.ts.map +1 -1
  286. package/dist/testing/schema_generators.js +261 -73
  287. package/dist/testing/standard.d.ts +26 -0
  288. package/dist/testing/standard.d.ts.map +1 -1
  289. package/dist/testing/standard.js +4 -1
  290. package/dist/testing/stubs.d.ts +4 -3
  291. package/dist/testing/stubs.d.ts.map +1 -1
  292. package/dist/testing/stubs.js +6 -4
  293. package/dist/testing/transports/raw_http.d.ts +21 -0
  294. package/dist/testing/transports/raw_http.d.ts.map +1 -1
  295. package/dist/testing/transports/raw_http.js +30 -0
  296. package/dist/zod.d.ts +9 -0
  297. package/dist/zod.d.ts.map +1 -1
  298. package/dist/zod.js +20 -0
  299. package/package.json +6 -4
  300. package/dist/testing/cross_backend/actor_search.d.ts +0 -6
  301. package/dist/testing/cross_backend/actor_search.d.ts.map +0 -1
  302. package/dist/testing/cross_backend/actor_search.js +0 -90
  303. package/dist/testing/cross_backend/cell_cross_helpers.d.ts.map +0 -1
@@ -0,0 +1,113 @@
1
+ import '../assert_dev_env.js';
2
+ import { is_protocol_action_method } from '../../actions/action_codegen.js';
3
+ import { account_status_route_shape, create_account_route_shapes } from '../../auth/account_route_schema.js';
4
+ import { create_signup_route_shape } from '../../auth/signup_route_schema.js';
5
+ import { create_standard_rpc_actions } from '../../auth/standard_rpc_actions.js';
6
+ import { create_health_route_spec } from '../../http/common_routes.js';
7
+ import { prefix_route_specs } from '../../http/route_spec.js';
8
+ import { create_test_app_surface_spec, stub_handler, stub_mw } from '../stubs.js';
9
+ import { SPINE_ACCOUNT_PATH_PREFIX, SPINE_RPC_PATH } from './spine_surface_constants.js';
10
+ /**
11
+ * The routes `fuz_auth::account_router` mounts, relative to `/api/account`. An
12
+ * allowlist rather than every account route shape: `/verify` is a TS-only
13
+ * route the Rust router doesn't serve, so declaring it would have the suites
14
+ * probe a 404. A shape fuz_app renames or drops fails the surface build; one
15
+ * it adds stays off the surface until the Rust router mounts it and this list
16
+ * names it.
17
+ */
18
+ export const ACCOUNT_ROUTER_PATHS = ['/status', '/login', '/logout', '/password'];
19
+ /** Surface generation never invokes handlers — see the module doc. */
20
+ const noop_action_handler = (async () => undefined);
21
+ const to_route_spec = (shape) => ({
22
+ ...shape,
23
+ handler: stub_handler
24
+ });
25
+ /**
26
+ * The RPC endpoints a Rust spine consumer mounts: the standard admin /
27
+ * role-grant-offer / account actions, the extra families, then the domain
28
+ * specs — what `describe_spine_cross_suites` takes as `rpc_endpoints`.
29
+ *
30
+ * @param options - the consumer's action specs, extras and roles
31
+ * @returns the endpoints, as a factory of the stub context
32
+ * @throws Error when an `exclude_methods` entry names no domain spec
33
+ */
34
+ export const create_rust_spine_consumer_rpc_endpoints = (options) => {
35
+ const { domain_action_specs, extra_rpc_actions, roles, exclude_methods = [], rpc_path = SPINE_RPC_PATH } = options;
36
+ const excluded = new Set(exclude_methods);
37
+ for (const method of excluded) {
38
+ if (!domain_action_specs.some((spec) => spec.method === method)) {
39
+ throw new Error(`create_rust_spine_consumer_rpc_endpoints: exclude_methods names '${method}', ` +
40
+ 'which is not among the domain action specs');
41
+ }
42
+ }
43
+ const domain_actions = domain_action_specs
44
+ .filter((spec) => spec.kind === 'request_response')
45
+ .filter((spec) => !is_protocol_action_method(spec.method) && !excluded.has(spec.method))
46
+ .map((spec) => ({ spec, handler: noop_action_handler }));
47
+ return (ctx) => [
48
+ {
49
+ path: rpc_path,
50
+ actions: [
51
+ ...create_standard_rpc_actions(ctx.deps, roles ? { roles } : {}),
52
+ ...(extra_rpc_actions?.(ctx) ?? []),
53
+ ...domain_actions
54
+ ]
55
+ }
56
+ ];
57
+ };
58
+ /**
59
+ * The spine routes a Rust spine consumer serves, outside the RPC endpoint:
60
+ * `/health`, the `ACCOUNT_ROUTER_PATHS` under `/api/account`, and signup
61
+ * beside them (bootstrap is added by `create_test_app_surface_spec`).
62
+ */
63
+ const create_spine_consumer_route_specs = (ctx) => {
64
+ const shapes = [
65
+ account_status_route_shape,
66
+ ...create_account_route_shapes({
67
+ login_account_rate_limited: ctx.login_account_rate_limiter !== null
68
+ })
69
+ ];
70
+ const account_router_shapes = ACCOUNT_ROUTER_PATHS.map((path) => {
71
+ const shape = shapes.find((candidate) => candidate.path === path);
72
+ if (!shape)
73
+ throw new Error(`fuz_app's account route shapes have no '${path}'`);
74
+ return shape;
75
+ });
76
+ return [
77
+ create_health_route_spec(),
78
+ ...prefix_route_specs(SPINE_ACCOUNT_PATH_PREFIX, [
79
+ ...account_router_shapes,
80
+ create_signup_route_shape({
81
+ signup_account_rate_limited: ctx.signup_account_rate_limiter !== null
82
+ })
83
+ ].map(to_route_spec))
84
+ ];
85
+ };
86
+ /**
87
+ * Build the declared surface of a Rust spine consumer for its cross suites,
88
+ * on `create_test_app_surface_spec`: the spine routes (health, the account
89
+ * router's paths, signup, and bootstrap as a `surface_only` shape), the RPC
90
+ * endpoint from `create_rust_spine_consumer_rpc_endpoints`, the daemon-token
91
+ * layer every consumer test binary wires, and — with `host_gate` — the
92
+ * `host_validation` layer at the head of the middleware list.
93
+ *
94
+ * @param options - the consumer's session config, action specs, extras and roles
95
+ * @returns the surface spec, for `describe_spine_cross_suites`'s `surface_source`
96
+ * @throws Error when an account route shape the Rust router mounts is missing,
97
+ * or an `exclude_methods` entry names no domain spec
98
+ */
99
+ export const create_rust_spine_consumer_surface_spec = (options) => create_test_app_surface_spec({
100
+ session_options: options.session_options,
101
+ create_route_specs: create_spine_consumer_route_specs,
102
+ rpc_endpoints: create_rust_spine_consumer_rpc_endpoints(options),
103
+ // the binaries mount `bootstrap_router`; `surface_only` declares its shape
104
+ bootstrap: { mode: 'surface_only' },
105
+ // consumer test binaries wire a daemon-token state (production ones don't)
106
+ daemon_token: true,
107
+ transform_middleware: options.host_gate
108
+ ? (specs) => [
109
+ { name: 'host_validation', path: '*', handler: stub_mw },
110
+ ...specs
111
+ ]
112
+ : undefined
113
+ });
@@ -18,6 +18,8 @@ export declare const RUST_SPINE_STUB_DATABASE_URL_ENV = "FUZ_TESTING_RUST_SPINE_
18
18
  export declare const RUST_SPINE_STUB_EXPECTED_SCHEMA_PATH_ENV = "FUZ_RUST_SPINE_STUB_EXPECTED_SCHEMA_PATH";
19
19
  /** Default listening port — slots beside zzz's 1175/1176; matches the binary's `DEFAULT_PORT`. */
20
20
  export declare const RUST_SPINE_STUB_DEFAULT_PORT = 1177;
21
+ /** The preset's default backend name — its spawn label and temp directory. */
22
+ export declare const RUST_SPINE_STUB_DEFAULT_NAME = "spine_stub";
21
23
  /** Default Postgres database — real PG (PGlite isn't reachable from `tokio-postgres`). */
22
24
  export declare const RUST_SPINE_STUB_DEFAULT_DATABASE_URL = "postgres://localhost/fuz_app_test_rust_spine_stub";
23
25
  export interface SpineStubBackendConfigOptions {
@@ -28,6 +30,14 @@ export interface SpineStubBackendConfigOptions {
28
30
  * then `RUST_SPINE_STUB_DEFAULT_DATABASE_URL`.
29
31
  */
30
32
  readonly database_url?: string;
33
+ /**
34
+ * Backend name — labels the spawn in errors and logs, and names its
35
+ * directory under `os.tmpdir()` (`build_test_backend_paths`), which holds
36
+ * the bootstrap token, the daemon token and the fact store. Default
37
+ * `RUST_SPINE_STUB_DEFAULT_NAME`. Give each stub spawned alongside another its own name, so
38
+ * those files don't collide.
39
+ */
40
+ readonly name?: string;
31
41
  /**
32
42
  * Prebuilt binary path. Overrides the `FUZ_TESTING_RUST_SPINE_STUB_BIN` env
33
43
  * var. When neither is set the preset throws.
@@ -1 +1 @@
1
- {"version":3,"file":"rust_spine_stub_backend_config.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/rust_spine_stub_backend_config.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AA0C9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAYzD,uGAAuG;AACvG,eAAO,MAAM,uBAAuB,oCAAoC,CAAC;AAEzE;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,6CAA6C,CAAC;AAE3F;;;;;GAKG;AACH,eAAO,MAAM,wCAAwC,6CAA6C,CAAC;AAuBnG,kGAAkG;AAClG,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAEjD,0FAA0F;AAC1F,eAAO,MAAM,oCAAoC,sDACG,CAAC;AAErD,MAAM,WAAW,6BAA6B;IAC7C,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAC3C;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAC5C;;;;;OAKG;IACH,QAAQ,CAAC,8BAA8B,CAAC,EAAE,MAAM,CAAC;CACjD;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,8BAA8B,GAC1C,UAAS,6BAAkC,KACzC,aAmDF,CAAC"}
1
+ {"version":3,"file":"rust_spine_stub_backend_config.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/rust_spine_stub_backend_config.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAwC9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAczD,uGAAuG;AACvG,eAAO,MAAM,uBAAuB,oCAAoC,CAAC;AAEzE;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,6CAA6C,CAAC;AAE3F;;;;;GAKG;AACH,eAAO,MAAM,wCAAwC,6CAA6C,CAAC;AAoCnG,kGAAkG;AAClG,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAEjD,8EAA8E;AAC9E,eAAO,MAAM,4BAA4B,eAAe,CAAC;AAEzD,0FAA0F;AAC1F,eAAO,MAAM,oCAAoC,sDACG,CAAC;AAErD,MAAM,WAAW,6BAA6B;IAC7C,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAC3C;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAC5C;;;;;OAKG;IACH,QAAQ,CAAC,8BAA8B,CAAC,EAAE,MAAM,CAAC;CACjD;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,8BAA8B,GAC1C,UAAS,6BAAkC,KACzC,aAmDF,CAAC"}
@@ -13,17 +13,15 @@ import '../assert_dev_env.js';
13
13
  * path in. `FUZ_TESTING_RUST_SPINE_STUB_BIN` (or the `binary_path` option) must
14
14
  * point at a prebuilt binary; the preset throws a clear error when neither
15
15
  * is set rather than guessing. Build once with
16
- * `cargo build -p testing_spine_stub --release` and point the env var at
17
- * the resulting `target/release/testing_spine_stub`; operators / CI cache
18
- * the binary across runs for fast spawns.
16
+ * `cargo build -p testing_spine_stub --profile cross-test` (the workspace's
17
+ * non-LTO test profile; `--release` works too, slower to rebuild) and point
18
+ * the env var at the resulting `target/cross-test/testing_spine_stub`;
19
+ * operators / CI cache the binary across runs for fast spawns.
19
20
  *
20
21
  * **Operator setup** — the target Postgres database must exist before the
21
- * harness runs (the harness never issues `CREATE DATABASE`, to avoid
22
- * forcing a `CREATEDB` grant on the test role):
23
- *
24
- * ```bash
25
- * createdb fuz_app_test_rust_spine_stub 2>/dev/null || true
26
- * ```
22
+ * stub boots. The harness creates it only when a setup asks
23
+ * (`ensure_database_for_url`, or `create_cross_backend_global_setup`'s
24
+ * `ensure_databases`), so a test role needs no `CREATEDB` grant otherwise.
27
25
  *
28
26
  * `FUZ_TESTING_RUST_SPINE_STUB_DATABASE_URL` points the stub at another
29
27
  * server (e.g. a scratch cluster on a spare port).
@@ -38,7 +36,7 @@ import '../assert_dev_env.js';
38
36
  */
39
37
  import { fileURLToPath } from 'node:url';
40
38
  import { build_test_backend_paths } from './build_test_backend_paths.js';
41
- import { LOGIN_RATE_LIMIT_ENABLED_ENV, SPINE_EXPECTED_SCHEMA_URL } from './spine_surface_constants.js';
39
+ import { LOGIN_RATE_LIMIT_ENABLED_ENV, SPINE_EXPECTED_SCHEMA_URL, TESTING_BACKDOOR_METHODS } from './spine_surface_constants.js';
42
40
  import { action_rate_limit_env, make_default_rust_backend_config, rust_default_capabilities } from './default_backend_configs.js';
43
41
  /** Env var naming the prebuilt `testing_spine_stub` binary. Required when `binary_path` is omitted. */
44
42
  export const RUST_SPINE_STUB_BIN_ENV = 'FUZ_TESTING_RUST_SPINE_STUB_BIN';
@@ -58,26 +56,41 @@ export const RUST_SPINE_STUB_DATABASE_URL_ENV = 'FUZ_TESTING_RUST_SPINE_STUB_DAT
58
56
  export const RUST_SPINE_STUB_EXPECTED_SCHEMA_PATH_ENV = 'FUZ_RUST_SPINE_STUB_EXPECTED_SCHEMA_PATH';
59
57
  /**
60
58
  * Capabilities for the Rust `testing_spine_stub` — `rust_default_capabilities`
61
- * plus `sse` (the stub serves `GET /api/admin/audit/stream` over the spine
59
+ * with every `MountFlag` stated, all `true`: `ws` (it mounts `/api/ws`), `peer_request` (its registry carries
60
+ * `peer/ping` on both transports), `cell_crud` + `cell_relations` (it mounts the
61
+ * full cell surface over the `fuz_cell` namespace), `fact_serving` (the
62
+ * cell-gated serve route, the `fuz_facts` namespace and `_testing_put_fact`),
63
+ * `fact_serving_admin_hash` (the admin bare-hash route), `sse` (the stub serves `GET /api/admin/audit/stream` over the spine
62
64
  * `fuz_realtime::SseRegistry` + audit listener), `ready` (it live-mounts
63
65
  * `/ready` over the env-supplied fixture path), `ws_account_actions` (it
64
66
  * serves one action registry on `/api/rpc` and `/api/ws`), `cell_gated_create`
65
67
  * (it mounts the `TestCellGatedCreateAuthorize` policy on its cell layer), and
66
68
  * `ws_role_gated` (it mounts the role-gated WS endpoint at
67
- * `SPINE_ROLE_GATED_WS_PATH`, sharing its connection registry). Named
69
+ * `SPINE_ROLE_GATED_WS_PATH`, sharing its connection registry), and every
70
+ * `TESTING_BACKDOOR_METHODS` entry as `testing_backdoors` (it mounts them all,
71
+ * on one registry for both transports). Named
68
72
  * (not inline) so every spine preset is greppable, mirroring
69
73
  * `ts_spine_capabilities`.
70
74
  */
71
75
  const rust_spine_stub_capabilities = Object.freeze({
72
76
  ...rust_default_capabilities,
77
+ ws: true,
78
+ peer_request: true,
73
79
  sse: true,
80
+ cell_crud: true,
81
+ cell_relations: true,
82
+ fact_serving: true,
83
+ fact_serving_admin_hash: true,
74
84
  ready: true,
75
85
  ws_account_actions: true,
76
86
  cell_gated_create: true,
77
- ws_role_gated: true
87
+ ws_role_gated: true,
88
+ testing_backdoors: TESTING_BACKDOOR_METHODS
78
89
  });
79
90
  /** Default listening port — slots beside zzz's 1175/1176; matches the binary's `DEFAULT_PORT`. */
80
91
  export const RUST_SPINE_STUB_DEFAULT_PORT = 1177;
92
+ /** The preset's default backend name — its spawn label and temp directory. */
93
+ export const RUST_SPINE_STUB_DEFAULT_NAME = 'spine_stub';
81
94
  /** Default Postgres database — real PG (PGlite isn't reachable from `tokio-postgres`). */
82
95
  export const RUST_SPINE_STUB_DEFAULT_DATABASE_URL = 'postgres://localhost/fuz_app_test_rust_spine_stub';
83
96
  /**
@@ -93,13 +106,12 @@ export const RUST_SPINE_STUB_DEFAULT_DATABASE_URL = 'postgres://localhost/fuz_ap
93
106
  */
94
107
  export const rust_spine_stub_backend_config = (options = {}) => {
95
108
  const { port = RUST_SPINE_STUB_DEFAULT_PORT, database_url = process.env[RUST_SPINE_STUB_DATABASE_URL_ENV] ||
96
- RUST_SPINE_STUB_DEFAULT_DATABASE_URL, binary_path = process.env[RUST_SPINE_STUB_BIN_ENV], enable_login_rate_limit, trusted_proxies } = options;
109
+ RUST_SPINE_STUB_DEFAULT_DATABASE_URL, binary_path = process.env[RUST_SPINE_STUB_BIN_ENV], enable_login_rate_limit, trusted_proxies, name = RUST_SPINE_STUB_DEFAULT_NAME } = options;
97
110
  if (!binary_path) {
98
111
  throw new Error(`rust_spine_stub_backend_config: no binary path — set ${RUST_SPINE_STUB_BIN_ENV} to a prebuilt ` +
99
- '`testing_spine_stub` binary (build it with `cargo build -p testing_spine_stub --release`) ' +
112
+ '`testing_spine_stub` binary (build it with `cargo build -p testing_spine_stub --profile cross-test`) ' +
100
113
  'or pass `binary_path`.');
101
114
  }
102
- const name = 'spine_stub';
103
115
  const paths = build_test_backend_paths(name);
104
116
  return make_default_rust_backend_config({
105
117
  name,
@@ -113,12 +125,12 @@ export const rust_spine_stub_backend_config = (options = {}) => {
113
125
  port_env_var: 'FUZ_RUST_SPINE_STUB_PORT',
114
126
  rust_log: 'info,testing_spine_stub=info',
115
127
  paths,
128
+ // The binary writes its daemon-token JSON to
129
+ // `{FUZ_RUST_SPINE_STUB_DIR}/run/daemon_token`; the builder anchors the
130
+ // dir to `paths.root`, which makes that `paths.daemon_token_path`, the
131
+ // file `spawn_backend` reads after the health probe.
132
+ daemon_token_dir_env: 'FUZ_RUST_SPINE_STUB_DIR',
116
133
  extra_env: {
117
- // The binary writes its daemon-token JSON to
118
- // `{FUZ_RUST_SPINE_STUB_DIR}/run/daemon_token`; anchoring the dir to
119
- // `paths.root` makes that equal `paths.daemon_token_path`, which
120
- // `spawn_backend` reads after the health probe.
121
- FUZ_RUST_SPINE_STUB_DIR: paths.root,
122
134
  // Absolute path to the committed spine `expected_schema.json` — the
123
135
  // stub's `/ready` gate introspects the live DB against it. The SAME
124
136
  // file the TS spine reads, so the two backends share one cross-impl
@@ -1,5 +1,6 @@
1
1
  import '../assert_dev_env.js';
2
2
  import type { SetupTest } from './setup.js';
3
+ import type { WsEndpointTarget } from './ws_endpoint.js';
3
4
  /** Options for the session-cap parity suite. */
4
5
  export interface SessionCapCrossTestOptions {
5
6
  /** Per-test fixture producer (cross-process only — see the module doc). */
@@ -19,14 +20,14 @@ export interface SessionCapCrossTestOptions {
19
20
  * session's socket is closed. Pass it when the backend has a WS transport
20
21
  * (`capabilities.ws`); omitted, that case is skipped.
21
22
  */
22
- readonly ws?: {
23
- /** Base URL the backend is reachable at (e.g. `http://localhost:1178`). */
24
- readonly base_url: string;
25
- /** WebSocket endpoint path on the backend (e.g. `/api/ws`). */
26
- readonly ws_path: string;
27
- /** Origin for the upgrade. Defaults to `base_url`. */
28
- readonly origin?: string;
29
- };
23
+ readonly ws?: WsEndpointTarget;
24
+ /**
25
+ * The roles the account whose socket the `ws` case watches is created with, for a
26
+ * backend whose WS upgrade requires a role (an admin-gated `/api/ws`
27
+ * refuses a roleless account's upgrade). Each must be admin-grantable — the
28
+ * fixture offers it. Default none.
29
+ */
30
+ readonly ws_account_roles?: ReadonlyArray<string>;
30
31
  }
31
32
  export declare const describe_session_cap_cross_tests: (options: SessionCapCrossTestOptions) => void;
32
33
  //# sourceMappingURL=session_cap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session_cap.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/session_cap.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AA0D9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,gDAAgD;AAChD,MAAM,WAAW,0BAA0B;IAC1C,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,qEAAqE;IACrE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE;QACb,2EAA2E;QAC3E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,+DAA+D;QAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,sDAAsD;QACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACF;AAED,eAAO,MAAM,gCAAgC,GAAI,SAAS,0BAA0B,KAAG,IA4FtF,CAAC"}
1
+ {"version":3,"file":"session_cap.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/session_cap.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AA0D9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,gDAAgD;AAChD,MAAM,WAAW,0BAA0B;IAC1C,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,qEAAqE;IACrE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAClD;AAED,eAAO,MAAM,gCAAgC,GAAI,SAAS,0BAA0B,KAAG,IAgGtF,CAAC"}
@@ -52,11 +52,12 @@ import { DEFAULT_MAX_SESSIONS } from '../../auth/account_route_schema.js';
52
52
  import { DEFAULT_TEST_PASSWORD } from '../test_credentials.js';
53
53
  import { create_ws_transport } from '../transports/ws_transport.js';
54
54
  import { test_if } from './capabilities.js';
55
+ import { SPINE_ACCOUNT_LOGIN_PATH, SPINE_ACCOUNT_STATUS_PATH } from './spine_surface_constants.js';
55
56
  export const describe_session_cap_cross_tests = (options) => {
56
- const { setup_test, ws } = options;
57
+ const { setup_test, ws, ws_account_roles = [] } = options;
57
58
  const max_sessions = options.max_sessions ?? DEFAULT_MAX_SESSIONS;
58
- const login_path = options.login_path ?? '/api/account/login';
59
- const status_path = options.status_path ?? '/api/account/status';
59
+ const login_path = options.login_path ?? SPINE_ACCOUNT_LOGIN_PATH;
60
+ const status_path = options.status_path ?? SPINE_ACCOUNT_STATUS_PATH;
60
61
  // Fresh-keeper-per-test wipes the DB between tests, so a literal username
61
62
  // never collides (see `setup.ts`).
62
63
  const username = 'session_cap_user';
@@ -100,7 +101,11 @@ export const describe_session_cap_cross_tests = (options) => {
100
101
  // held before it (`create_account` seeds one on some cradles).
101
102
  test_if(ws !== undefined, 'a session the cap evicts has its open socket closed', async () => {
102
103
  const fixture = await setup_test();
103
- await fixture.create_account({ username, password_value: DEFAULT_TEST_PASSWORD });
104
+ await fixture.create_account({
105
+ username,
106
+ password_value: DEFAULT_TEST_PASSWORD,
107
+ roles: [...ws_account_roles]
108
+ });
104
109
  const victim = await login(fixture, 'the login whose socket is watched');
105
110
  const client = await create_ws_transport({
106
111
  base_url: ws.base_url,
@@ -28,7 +28,7 @@ import '../assert_dev_env.js';
28
28
  import { describe, test, assert } from 'vitest';
29
29
  import { create_keyring } from '../../auth/keyring.js';
30
30
  import { ERROR_AUTHENTICATION_REQUIRED } from '../../http/error_schemas.js';
31
- import { cross_rpc_call, error_reason } from './cell_cross_helpers.js';
31
+ import { cross_rpc_call, error_reason } from './cross_rpc.js';
32
32
  import { SPINE_RPC_PATH } from './spine_surface_constants.js';
33
33
  /** The base64 alphabet, in index order. */
34
34
  const BASE64_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
@@ -26,14 +26,6 @@ export interface CreateTestAccountOptions {
26
26
  */
27
27
  readonly email?: string;
28
28
  }
29
- /**
30
- * Shape returned by `TestFixture.create_account`. Aliased to the
31
- * existing `TestAccount` interface from `testing/app_server.ts` — same shape,
32
- * stable name on the cross-backend testing surface so call sites read
33
- * `fixture.create_account(...)` returning `TestAccountFixture` without
34
- * crossing module boundaries.
35
- */
36
- export type TestAccountFixture = TestAccount;
37
29
  /**
38
30
  * Spec for a bootstrap-time secondary account seeded alongside the
39
31
  * keeper by `_testing_reset` (cross-process) or `create_test_app`
@@ -52,32 +44,21 @@ export interface ExtraAccountSpec {
52
44
  readonly password_value?: string;
53
45
  readonly roles: ReadonlyArray<string>;
54
46
  }
55
- /** Bootstrap-time-seeded secondary account exposed on the fixture. */
56
- export interface ExtraAccountFixture {
57
- readonly account: {
58
- readonly id: Uuid;
59
- readonly username: string;
60
- };
61
- readonly actor: {
62
- readonly id: Uuid;
63
- };
64
- readonly api_token: string;
65
- readonly session_cookie: string;
66
- readonly create_session_headers: (extra?: Record<string, string>) => Record<string, string>;
67
- readonly create_bearer_headers: (extra?: Record<string, string>) => Record<string, string>;
68
- }
69
47
  /**
70
- * Build an `ExtraAccountFixture` from a seeded `{account, actor,
71
- * api_token, session_cookie}` bundle and the session cookie name.
48
+ * Build a `TestAccount` from a seeded `{account, actor, api_token,
49
+ * session_cookie}` bundle and the session cookie name — the header builders
50
+ * close over its credentials.
51
+ *
52
+ * Every fixture path that hands out a secondary account builds it here: the
53
+ * bootstrap-time `extra_accounts` (in-process via
54
+ * `create_test_account_with_credentials`, cross-process from the
55
+ * `_testing_reset` output) and the cross-process `fixture.create_account`.
72
56
  *
73
- * Same shape produced by either path that seeds bootstrap-time
74
- * secondaries: in-process via `create_test_account_with_credentials`
75
- * against the live backend's DB, or cross-process via the
76
- * `_testing_reset` RPC's `extra_accounts` output. Both call this
77
- * helper so the fixture-side header builders + field plumbing stays
78
- * in one place.
57
+ * @param seeded - the account's identity and credentials
58
+ * @param cookie_name - the backend's session cookie name
59
+ * @returns the account with its header builders
79
60
  */
80
- export declare const build_extra_account_fixture: (seeded: {
61
+ export declare const to_test_account: (seeded: {
81
62
  account: {
82
63
  id: Uuid;
83
64
  username: string;
@@ -87,10 +68,18 @@ export declare const build_extra_account_fixture: (seeded: {
87
68
  };
88
69
  api_token: string;
89
70
  session_cookie: string;
90
- }, cookie_name: string) => ExtraAccountFixture;
71
+ }, cookie_name: string) => TestAccount;
91
72
  /**
92
- * Fields shared by every `TestFixture` regardless of transport. The
93
- * discriminated union below adds in-process-only fields conditionally.
73
+ * The per-test bundle returned by `SetupTest`. Every Tier 1 suite body
74
+ * reads exclusively from this shape — no `test_app.backend.*` reads remain
75
+ * in the suite bodies.
76
+ *
77
+ * Transport-agnostic: in-process and cross-process producers return the
78
+ * same shape. Behaviors that once needed raw backend access (keyring for
79
+ * forging cookies) are reached through wire-shaped seams instead —
80
+ * `mint_expired_session()` mints over the `_testing_mint_session` channel
81
+ * cross-process and directly in-process, so suite bodies never branch on
82
+ * the transport.
94
83
  *
95
84
  * **Keeper ≠ admin.** `fixture.account` / `fixture.actor` refer to the
96
85
  * **fresh keeper** seeded per test. The keeper account holds
@@ -102,7 +91,7 @@ export declare const build_extra_account_fixture: (seeded: {
102
91
  * via `extra_accounts: [{username, roles: [ROLE_KEEPER]}]` and read it
103
92
  * from `fixture.extra_accounts[username]`.
104
93
  */
105
- export interface TestFixtureBase {
94
+ export interface TestFixture {
106
95
  /**
107
96
  * Transport for this test's HTTP requests. Typed as `FetchTransport`
108
97
  * so cross-process tests can call `transport.cookies()` for WS upgrade
@@ -159,14 +148,14 @@ export interface TestFixtureBase {
159
148
  * cross-process: goes through the consumer-supplied DB-admin
160
149
  * channel.
161
150
  */
162
- readonly create_account: (options?: CreateTestAccountOptions) => Promise<TestAccountFixture>;
151
+ readonly create_account: (options?: CreateTestAccountOptions) => Promise<TestAccount>;
163
152
  /**
164
153
  * Bootstrap-time-seeded secondaries, keyed by their declared
165
154
  * `username`. Populated from the `extra_accounts` option passed to
166
155
  * `default_in_process_setup` / `default_cross_process_setup`. Empty
167
156
  * for suites that don't declare any.
168
157
  */
169
- readonly extra_accounts: Readonly<Record<string, ExtraAccountFixture>>;
158
+ readonly extra_accounts: Readonly<Record<string, TestAccount>>;
170
159
  /**
171
160
  * Additional actors seeded on the **keeper** account (beyond its single
172
161
  * bootstrap `actor`), in declaration order. Populated from the
@@ -192,23 +181,18 @@ export interface TestFixtureBase {
192
181
  * RPC over the keeper's daemon-token channel (the driver has no keyring).
193
182
  */
194
183
  readonly mint_expired_session: () => Promise<string>;
184
+ /**
185
+ * Whether the suites' audit reads refuse metadata keys an event type
186
+ * doesn't declare — the setup's `reject_unknown_audit_metadata_keys`.
187
+ * `list_audit_events` and the admin suite's readers pass it to
188
+ * `assert_audit_event_metadata`.
189
+ */
190
+ readonly reject_unknown_audit_metadata_keys?: boolean;
195
191
  }
196
192
  /**
197
- * The per-test bundle returned by `SetupTest`. Every Tier 1 suite body
198
- * reads exclusively from this shape — no `test_app.backend.*` reads remain
199
- * in the suite bodies.
200
- *
201
- * Transport-agnostic: in-process and cross-process producers return the
202
- * same shape. Behaviors that once needed raw backend access (keyring for
203
- * forging cookies) are reached through wire-shaped seams instead —
204
- * `mint_expired_session()` mints over the `_testing_mint_session` channel
205
- * cross-process and directly in-process, so suite bodies never branch on
206
- * the transport.
207
- */
208
- export type TestFixture = TestFixtureBase;
209
- /**
210
- * Per-test fixture-producing function. Invoked once inside every
211
- * `test()` body. The implementation captures factory inputs (in-process)
193
+ * Fixture-producing function. Invoked once inside every `test()` body by
194
+ * default; a suite whose cases share no state past the reset may call it once
195
+ * in `beforeAll` instead. The implementation captures factory inputs (in-process)
212
196
  * or a long-running backend handle (cross-process) and creates
213
197
  * a fresh per-test bundle on each call.
214
198
  */
@@ -244,8 +228,8 @@ export interface CapabilityGatedCrossSuiteOptions extends CrossSuiteOptions {
244
228
  /**
245
229
  * `CrossSuiteOptions` plus the RPC endpoint path the suite dispatches
246
230
  * against — the shape every JSON-RPC-driven imperative suite takes (cell
247
- * verbs, origin, body-size, actor lookup/search, account lifecycle, app
248
- * settings, testing backdoor). Suites alias this under a self-documenting
231
+ * verbs, origin, body-size, actor lookup, account lifecycle, app
232
+ * settings). Suites alias this under a self-documenting
249
233
  * per-suite name (e.g. `OriginCrossTestOptions = RpcPathCrossSuiteOptions`).
250
234
  */
251
235
  export interface RpcPathCrossSuiteOptions extends CrossSuiteOptions {
@@ -257,7 +241,7 @@ export interface RpcPathCrossSuiteOptions extends CrossSuiteOptions {
257
241
  * of `RpcPathCrossSuiteOptions` and `CapabilityGatedCrossSuiteOptions`, and
258
242
  * the most common option shape among the imperative cross suites (every
259
243
  * `cell_*` suite, `query_shape`, `token_scope_surface`, `fact_serving`,
260
- * `account_lifecycle`).
244
+ * `account_lifecycle`, `testing_backdoor`).
261
245
  */
262
246
  export interface RpcPathCapabilityGatedCrossSuiteOptions extends RpcPathCrossSuiteOptions, CapabilityGatedCrossSuiteOptions {
263
247
  }
@@ -396,9 +380,27 @@ export interface CrossProcessSetupOptions {
396
380
  * single bootstrap actor — exposed on `fixture.extra_actors`. Declare
397
381
  * to put the keeper into a multi-actor state so the `actor_required` /
398
382
  * explicit-`acting` branches are reachable cross-process. See
399
- * `TestFixtureBase.extra_actors`.
383
+ * `TestFixture.extra_actors`.
400
384
  */
401
385
  readonly extra_actors?: ReadonlyArray<string>;
386
+ /**
387
+ * Hold every audit row the fixture's readers parse to a closed world:
388
+ * metadata keys its event type doesn't declare are refused, not just
389
+ * mistyped or missing ones (`assert_audit_event_metadata`'s
390
+ * `reject_unknown_keys`). Off by default, since the builtin schemas are
391
+ * open for consumer-added fields; a backend's own spine suite turns it on
392
+ * so neither spine can add an undeclared key. Exposed on
393
+ * `fixture.reject_unknown_audit_metadata_keys`.
394
+ */
395
+ readonly reject_unknown_audit_metadata_keys?: boolean;
396
+ /**
397
+ * REST signup route `fixture.create_account` mints through. Default
398
+ * `SPINE_ACCOUNT_SIGNUP_PATH`; set it for a backend mounting the account
399
+ * routes under another prefix.
400
+ */
401
+ readonly signup_path?: string;
402
+ /** REST login route `fixture.create_account` logs in through. Default `SPINE_ACCOUNT_LOGIN_PATH`. */
403
+ readonly login_path?: string;
402
404
  }
403
405
  /**
404
406
  * Capture a backend's schema snapshot over the `_testing_schema_snapshot`
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/setup.ts"],"names":[],"mappings":"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"}