@fuzdev/fuz_app 0.134.0 → 0.135.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 (83) hide show
  1. package/dist/actions/CLAUDE.md +91 -9
  2. package/dist/actions/register_action_ws.d.ts +23 -3
  3. package/dist/actions/register_action_ws.d.ts.map +1 -1
  4. package/dist/actions/register_action_ws.js +57 -37
  5. package/dist/actions/transports.d.ts +23 -0
  6. package/dist/actions/transports.d.ts.map +1 -1
  7. package/dist/actions/transports.js +23 -0
  8. package/dist/actions/transports_ws_backend.d.ts +132 -9
  9. package/dist/actions/transports_ws_backend.d.ts.map +1 -1
  10. package/dist/actions/transports_ws_backend.js +236 -33
  11. package/dist/actions/ws_endpoint_spec.d.ts +9 -0
  12. package/dist/actions/ws_endpoint_spec.d.ts.map +1 -1
  13. package/dist/actions/ws_outbound_writer.d.ts +206 -0
  14. package/dist/actions/ws_outbound_writer.d.ts.map +1 -0
  15. package/dist/actions/ws_outbound_writer.js +431 -0
  16. package/dist/auth/CLAUDE.md +2 -2
  17. package/dist/auth/audit_log_routes.d.ts.map +1 -1
  18. package/dist/auth/audit_log_routes.js +3 -1
  19. package/dist/auth/cell_actions.js +1 -1
  20. package/dist/auth/role_schema.d.ts +14 -3
  21. package/dist/auth/role_schema.d.ts.map +1 -1
  22. package/dist/auth/role_schema.js +14 -2
  23. package/dist/db/migrate.d.ts +1 -1
  24. package/dist/db/migrate.js +2 -2
  25. package/dist/http/CLAUDE.md +2 -1
  26. package/dist/http/body_limit.d.ts +61 -0
  27. package/dist/http/body_limit.d.ts.map +1 -0
  28. package/dist/http/body_limit.js +87 -0
  29. package/dist/http/db_routes.js +2 -2
  30. package/dist/http/error_schemas.d.ts +2 -0
  31. package/dist/http/error_schemas.d.ts.map +1 -1
  32. package/dist/http/error_schemas.js +2 -0
  33. package/dist/realtime/outbound_budget.d.ts +91 -0
  34. package/dist/realtime/outbound_budget.d.ts.map +1 -0
  35. package/dist/realtime/outbound_budget.js +108 -0
  36. package/dist/realtime/sse.d.ts +36 -3
  37. package/dist/realtime/sse.d.ts.map +1 -1
  38. package/dist/realtime/sse.js +58 -6
  39. package/dist/realtime/sse_constants.d.ts +12 -0
  40. package/dist/realtime/sse_constants.d.ts.map +1 -1
  41. package/dist/realtime/sse_constants.js +12 -0
  42. package/dist/server/app_server.d.ts.map +1 -1
  43. package/dist/server/app_server.js +3 -6
  44. package/dist/testing/CLAUDE.md +70 -10
  45. package/dist/testing/admin_integration.js +1 -1
  46. package/dist/testing/audit_completeness.d.ts +1 -1
  47. package/dist/testing/audit_completeness.js +1 -1
  48. package/dist/testing/audit_drift_guard.d.ts +1 -1
  49. package/dist/testing/audit_drift_guard.js +1 -1
  50. package/dist/testing/cross_backend/body_size_smuggling.d.ts +9 -9
  51. package/dist/testing/cross_backend/body_size_smuggling.d.ts.map +1 -1
  52. package/dist/testing/cross_backend/body_size_smuggling.js +110 -60
  53. package/dist/testing/cross_backend/capabilities.d.ts +18 -15
  54. package/dist/testing/cross_backend/capabilities.d.ts.map +1 -1
  55. package/dist/testing/cross_backend/capabilities.js +1 -0
  56. package/dist/testing/cross_backend/default_backend_configs.js +5 -5
  57. package/dist/testing/cross_backend/role_grant_role_grammar.d.ts +6 -0
  58. package/dist/testing/cross_backend/role_grant_role_grammar.d.ts.map +1 -0
  59. package/dist/testing/cross_backend/role_grant_role_grammar.js +117 -0
  60. package/dist/testing/cross_backend/rust_spine_stub_backend_config.d.ts +2 -3
  61. package/dist/testing/cross_backend/rust_spine_stub_backend_config.d.ts.map +1 -1
  62. package/dist/testing/cross_backend/rust_spine_stub_backend_config.js +2 -3
  63. package/dist/testing/cross_backend/testing_backdoor.d.ts.map +1 -1
  64. package/dist/testing/cross_backend/testing_backdoor.js +8 -4
  65. package/dist/testing/cross_backend/testing_reset_actions.d.ts +82 -2
  66. package/dist/testing/cross_backend/testing_reset_actions.d.ts.map +1 -1
  67. package/dist/testing/cross_backend/testing_reset_actions.js +101 -2
  68. package/dist/testing/cross_backend/ts_spine_backend_config.d.ts.map +1 -1
  69. package/dist/testing/cross_backend/ts_spine_backend_config.js +9 -7
  70. package/dist/testing/cross_backend/ws_outbound_overflow.d.ts +29 -0
  71. package/dist/testing/cross_backend/ws_outbound_overflow.d.ts.map +1 -0
  72. package/dist/testing/cross_backend/ws_outbound_overflow.js +211 -0
  73. package/dist/testing/integration.js +1 -1
  74. package/dist/testing/schema_introspect.d.ts +10 -2
  75. package/dist/testing/schema_introspect.d.ts.map +1 -1
  76. package/dist/testing/schema_introspect.js +15 -7
  77. package/dist/testing/transports/ws_transport.d.ts +4 -2
  78. package/dist/testing/transports/ws_transport.d.ts.map +1 -1
  79. package/dist/testing/transports/ws_transport.js +2 -1
  80. package/dist/testing/ws_round_trip.d.ts +32 -2
  81. package/dist/testing/ws_round_trip.d.ts.map +1 -1
  82. package/dist/testing/ws_round_trip.js +26 -4
  83. package/package.json +1 -1
@@ -11,24 +11,46 @@ import { ACCOUNT_ID_KEY, AUTH_API_TOKEN_ID_KEY, CREDENTIAL_TYPE_KEY, TEST_CONTEX
11
11
  import { create_jsonrpc_request } from '../http/jsonrpc_helpers.js';
12
12
  import { create_test_account, create_test_actor, create_test_role_grant } from './entities.js';
13
13
  import { WS_CLIENT_DEFAULT_TIMEOUT_MS, deliver_inbound, is_response_for } from './transports/ws_client.js';
14
+ const fake_ws_text_encoder = new TextEncoder();
14
15
  /**
15
16
  * Build a real `WSContext` backed by in-memory `send`/`close` capture.
16
17
  * Parsing of outgoing frames is left to the caller — `sends` holds the
17
18
  * raw strings as the dispatcher wrote them.
19
+ *
20
+ * `readyState` reads `1` (open) until the socket is closed (`2`) or
21
+ * terminated (`3`).
18
22
  */
19
- export const create_fake_ws = () => {
23
+ export const create_fake_ws = (options) => {
20
24
  const sends = [];
21
25
  const closes = [];
26
+ const socket = {
27
+ bufferedAmount: 0,
28
+ stalled: options?.stalled ?? false,
29
+ terminated: false,
30
+ terminate: () => {
31
+ socket.terminated = true;
32
+ socket.bufferedAmount = 0;
33
+ }
34
+ };
22
35
  const init = {
23
36
  send: (data) => {
24
- sends.push(typeof data === 'string' ? data : '<binary>');
37
+ const text = typeof data === 'string' ? data : '<binary>';
38
+ sends.push(text);
39
+ if (socket.stalled)
40
+ socket.bufferedAmount += fake_ws_text_encoder.encode(text).byteLength;
25
41
  },
26
42
  close: (code, reason) => {
27
43
  closes.push({ code, reason });
44
+ // a close frame is a few bytes behind whatever is still unwritten
45
+ if (socket.stalled)
46
+ socket.bufferedAmount += 2;
28
47
  },
29
- readyState: 1
48
+ raw: socket,
49
+ get readyState() {
50
+ return socket.terminated ? 3 : closes.length > 0 ? 2 : 1;
51
+ }
30
52
  };
31
- return { ws: new WSContext(init), sends, closes };
53
+ return { ws: new WSContext(init), sends, closes, socket };
32
54
  };
33
55
  /**
34
56
  * Build a fake Hono `Context` exposing the auth keys the dispatcher
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fuzdev/fuz_app",
3
- "version": "0.134.0",
3
+ "version": "0.135.0",
4
4
  "description": "fullstack app library",
5
5
  "glyph": "🗝",
6
6
  "logo": "logo.svg",