@multiplatform.one/frappe 6.6.0 → 6.7.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 (127) hide show
  1. package/dist/cjs/auth.native.js.map +1 -1
  2. package/dist/cjs/call.native.js.map +1 -1
  3. package/dist/cjs/collection.native.js.map +1 -1
  4. package/dist/cjs/common/types.native.js.map +1 -1
  5. package/dist/cjs/core/http.native.js.map +1 -1
  6. package/dist/cjs/core/types.native.js.map +1 -1
  7. package/dist/cjs/core/wire.native.js.map +1 -1
  8. package/dist/cjs/db.native.js.map +1 -1
  9. package/dist/cjs/devtools/FrappeDevtoolsPanel.native.js.map +1 -1
  10. package/dist/cjs/devtools/index.native.js.map +1 -1
  11. package/dist/cjs/devtools/plugin.native.js.map +1 -1
  12. package/dist/cjs/devtools/theme.native.js.map +1 -1
  13. package/dist/cjs/doctype.native.js.map +1 -1
  14. package/dist/cjs/file.native.js.map +1 -1
  15. package/dist/cjs/fixtureDb.native.js.map +1 -1
  16. package/dist/cjs/fixtures.native.js.map +1 -1
  17. package/dist/cjs/frappeApp.native.js.map +1 -1
  18. package/dist/cjs/frappeReact.native.js +1 -1
  19. package/dist/cjs/frappeReact.native.js.map +1 -1
  20. package/dist/cjs/index.cjs +1 -0
  21. package/dist/cjs/index.native.js +3 -2
  22. package/dist/cjs/index.native.js.map +1 -1
  23. package/dist/cjs/optimistic.native.js.map +1 -1
  24. package/dist/cjs/pacer.native.js.map +1 -1
  25. package/dist/cjs/plugin/index.native.js.map +1 -1
  26. package/dist/cjs/realtime.cjs +222 -11
  27. package/dist/cjs/realtime.native.js +352 -14
  28. package/dist/cjs/realtime.native.js.map +1 -1
  29. package/dist/cjs/sync/backfill.native.js.map +1 -1
  30. package/dist/cjs/sync/filters.native.js.map +1 -1
  31. package/dist/cjs/sync/index.native.js.map +1 -1
  32. package/dist/cjs/sync/merge.native.js.map +1 -1
  33. package/dist/cjs/sync/mutationEngine.native.js.map +1 -1
  34. package/dist/cjs/sync/mutationJournal.native.js.map +1 -1
  35. package/dist/cjs/sync/normalizedCache.native.js.map +1 -1
  36. package/dist/cjs/sync/persistence.native.js.map +1 -1
  37. package/dist/cjs/sync/realtime.native.js.map +1 -1
  38. package/dist/cjs/sync/rehydration.native.js.map +1 -1
  39. package/dist/cjs/sync/storage.native.js.map +1 -1
  40. package/dist/cjs/sync/subscriptionManager.native.js.map +1 -1
  41. package/dist/cjs/sync/types.native.js.map +1 -1
  42. package/dist/cjs/sync/virtualPageManager.native.js.map +1 -1
  43. package/dist/cjs/useLiveQuery.native.js.map +1 -1
  44. package/dist/cjs/util.native.js.map +1 -1
  45. package/dist/esm/auth.native.js.map +1 -1
  46. package/dist/esm/call.native.js.map +1 -1
  47. package/dist/esm/collection.native.js +1 -1
  48. package/dist/esm/collection.native.js.map +1 -1
  49. package/dist/esm/common/types.native.js.map +1 -1
  50. package/dist/esm/core/http.native.js +2 -2
  51. package/dist/esm/core/http.native.js.map +1 -1
  52. package/dist/esm/core/types.native.js.map +1 -1
  53. package/dist/esm/core/wire.native.js.map +1 -1
  54. package/dist/esm/db.native.js +1 -1
  55. package/dist/esm/db.native.js.map +1 -1
  56. package/dist/esm/devtools/FrappeDevtoolsPanel.native.js +2 -2
  57. package/dist/esm/devtools/FrappeDevtoolsPanel.native.js.map +1 -1
  58. package/dist/esm/devtools/index.native.js +2 -2
  59. package/dist/esm/devtools/index.native.js.map +1 -1
  60. package/dist/esm/devtools/plugin.native.js +1 -1
  61. package/dist/esm/devtools/plugin.native.js.map +1 -1
  62. package/dist/esm/devtools/theme.native.js.map +1 -1
  63. package/dist/esm/doctype.native.js +1 -1
  64. package/dist/esm/doctype.native.js.map +1 -1
  65. package/dist/esm/file.native.js.map +1 -1
  66. package/dist/esm/fixtureDb.native.js +1 -1
  67. package/dist/esm/fixtureDb.native.js.map +1 -1
  68. package/dist/esm/fixtures.native.js.map +1 -1
  69. package/dist/esm/frappeApp.native.js +7 -7
  70. package/dist/esm/frappeApp.native.js.map +1 -1
  71. package/dist/esm/frappeReact.native.js +7 -7
  72. package/dist/esm/frappeReact.native.js.map +1 -1
  73. package/dist/esm/index.mjs +2 -2
  74. package/dist/esm/index.mjs.map +1 -1
  75. package/dist/esm/index.native.js +22 -22
  76. package/dist/esm/index.native.js.map +1 -1
  77. package/dist/esm/optimistic.native.js.map +1 -1
  78. package/dist/esm/pacer.native.js +4 -4
  79. package/dist/esm/pacer.native.js.map +1 -1
  80. package/dist/esm/plugin/index.native.js.map +1 -1
  81. package/dist/esm/realtime.mjs +222 -11
  82. package/dist/esm/realtime.mjs.map +1 -1
  83. package/dist/esm/realtime.native.js +353 -15
  84. package/dist/esm/realtime.native.js.map +1 -1
  85. package/dist/esm/sync/backfill.native.js +1 -1
  86. package/dist/esm/sync/backfill.native.js.map +1 -1
  87. package/dist/esm/sync/filters.native.js.map +1 -1
  88. package/dist/esm/sync/index.native.js +8 -8
  89. package/dist/esm/sync/index.native.js.map +1 -1
  90. package/dist/esm/sync/merge.native.js.map +1 -1
  91. package/dist/esm/sync/mutationEngine.native.js +4 -4
  92. package/dist/esm/sync/mutationEngine.native.js.map +1 -1
  93. package/dist/esm/sync/mutationJournal.native.js +1 -1
  94. package/dist/esm/sync/mutationJournal.native.js.map +1 -1
  95. package/dist/esm/sync/normalizedCache.native.js.map +1 -1
  96. package/dist/esm/sync/persistence.native.js +2 -2
  97. package/dist/esm/sync/persistence.native.js.map +1 -1
  98. package/dist/esm/sync/realtime.native.js +1 -1
  99. package/dist/esm/sync/realtime.native.js.map +1 -1
  100. package/dist/esm/sync/rehydration.native.js +1 -1
  101. package/dist/esm/sync/rehydration.native.js.map +1 -1
  102. package/dist/esm/sync/storage.native.js.map +1 -1
  103. package/dist/esm/sync/subscriptionManager.native.js +4 -4
  104. package/dist/esm/sync/subscriptionManager.native.js.map +1 -1
  105. package/dist/esm/sync/types.native.js.map +1 -1
  106. package/dist/esm/sync/virtualPageManager.native.js +1 -1
  107. package/dist/esm/sync/virtualPageManager.native.js.map +1 -1
  108. package/dist/esm/useLiveQuery.native.js.map +1 -1
  109. package/dist/esm/util.native.js.map +1 -1
  110. package/dist/jsx/index.js +2 -2
  111. package/dist/jsx/index.js.map +1 -1
  112. package/dist/jsx/index.mjs +2 -2
  113. package/dist/jsx/index.mjs.map +1 -1
  114. package/dist/jsx/index.native.js +1 -0
  115. package/dist/jsx/index.native.js.map +1 -1
  116. package/dist/jsx/realtime.mjs +222 -11
  117. package/dist/jsx/realtime.mjs.map +1 -1
  118. package/dist/jsx/realtime.native.js +352 -14
  119. package/dist/jsx/realtime.native.js.map +1 -1
  120. package/package.json +7 -7
  121. package/src/index.ts +13 -1
  122. package/src/realtime.ts +406 -14
  123. package/src/realtimeSse.spec.ts +547 -0
  124. package/types/index.d.ts +2 -1
  125. package/types/index.d.ts.map +1 -1
  126. package/types/realtime.d.ts +166 -1
  127. package/types/realtime.d.ts.map +1 -1
@@ -6,6 +6,90 @@ export declare enum RealtimePlatform {
6
6
  Web = "web",
7
7
  ReactNative = "react-native"
8
8
  }
9
+ export type RealtimeTransport = "socketio" | "sse";
10
+ /** One SSE frame as received off the wire (before any mapping). */
11
+ export interface SSEFrame {
12
+ /** SSE event type — the `event:` classification line, or `"message"` for unnamed frames. */
13
+ type: string;
14
+ /** Raw `data:` payload (SSE data is always a string). */
15
+ data: string;
16
+ /** The stream's last `id:` line as of this frame (empty when the server sent none). */
17
+ lastEventId: string;
18
+ }
19
+ /** One handler-map delivery produced by `RealtimeSSEConfig.mapFrame`. */
20
+ export interface SSEMappedEvent {
21
+ event: string;
22
+ payload: unknown;
23
+ }
24
+ /** Minimal structural slice of a WHATWG `MessageEvent` the SSE transport reads. */
25
+ export interface SSEMessageEventLike {
26
+ type?: string;
27
+ data?: unknown;
28
+ lastEventId?: string;
29
+ }
30
+ /**
31
+ * Minimal structural slice of the WHATWG EventSource interface used by the
32
+ * SSE transport. The global browser/Node implementation satisfies it, and so
33
+ * do the common polyfills (`eventsource` on npm, `react-native-sse`).
34
+ */
35
+ export interface SSEEventSourceLike {
36
+ addEventListener(type: string, listener: (event: SSEMessageEventLike) => void): void;
37
+ removeEventListener(type: string, listener: (event: SSEMessageEventLike) => void): void;
38
+ close(): void;
39
+ }
40
+ export type SSEEventSourceConstructor = new (url: string, init?: {
41
+ withCredentials?: boolean;
42
+ }) => SSEEventSourceLike;
43
+ export interface RealtimeSSEConfig {
44
+ /** Absolute stream URL. Wins over `path` when both are set. */
45
+ url?: string;
46
+ /**
47
+ * Stream path resolved against `baseURL` (e.g.
48
+ * `"/api/method/shc.events.stream"` for the SHC daemon). One of `url` or
49
+ * `path` is REQUIRED: SSE endpoints are server-specific — a real Frappe
50
+ * bench has none at all — so a framework default would only ever 404, and
51
+ * `connect()` throws a descriptive error instead of guessing.
52
+ */
53
+ path?: string;
54
+ /**
55
+ * Browser EventSource credential mode: send cookies on the stream request.
56
+ * This is the primary browser auth path — EventSource cannot set request
57
+ * headers, so header-based token auth is impossible there (see
58
+ * `queryParams` for the token alternative).
59
+ */
60
+ withCredentials?: boolean;
61
+ /**
62
+ * Injectable EventSource constructor for runtimes without a global one
63
+ * (React Native, Node < 22, GJS) — e.g. the `eventsource` npm package or
64
+ * `react-native-sse`. When omitted the global `EventSource` is used, and
65
+ * `connect()` throws an error naming this option when neither exists.
66
+ */
67
+ EventSource?: SSEEventSourceConstructor;
68
+ /**
69
+ * Named SSE event types (`event:` classification lines) to listen for, in
70
+ * addition to unnamed `"message"` frames and handler-registered names.
71
+ * EventSource only dispatches a NAMED event when a listener for that exact
72
+ * type is attached, so `mapFrame`-driven apps — whose handler names differ
73
+ * from the wire's frame types — must list the server's classifications
74
+ * here (e.g. `["docker", "audit", "error", "event"]` for the SHC daemon).
75
+ */
76
+ events?: string[];
77
+ /**
78
+ * Translate one SSE frame into zero or more handler deliveries. Return
79
+ * `null`/`undefined` to drop the frame. When omitted, the default mapping
80
+ * delivers under the frame's `event:` type name with `JSON.parse(data)` as
81
+ * the payload (falling back to the raw string when the data isn't JSON).
82
+ */
83
+ mapFrame?: (frame: SSEFrame) => SSEMappedEvent[] | null | undefined;
84
+ /**
85
+ * Extra query parameters appended to the stream URL — the token-auth path
86
+ * for SSE (headers are off-limits in browsers, see `withCredentials`).
87
+ * Values may be getters; they are re-resolved every time the EventSource
88
+ * is (re)created, so a rotated token is picked up by `updateAuth()`'s
89
+ * reconnect.
90
+ */
91
+ queryParams?: Record<string, string | (() => string | Promise<string>)>;
92
+ }
9
93
  export interface RealtimeConfig {
10
94
  auth?: AuthConfig;
11
95
  baseURL: string;
@@ -37,14 +121,49 @@ export interface RealtimeConfig {
37
121
  siteName?: string;
38
122
  platform?: RealtimePlatform;
39
123
  socketOptions?: Partial<ManagerOptions & SocketOptions>;
124
+ /**
125
+ * Wire transport for realtime events.
126
+ *
127
+ * - `"socketio"` (default): Frappe's real realtime server — Socket.IO with
128
+ * doc/doctype rooms and two-way subscribe emits. Omitting `transport`
129
+ * keeps this exact behavior.
130
+ * - `"sse"`: a one-way `text/event-stream` endpoint consumed via
131
+ * EventSource. Built for Frappe-wire-compatible servers that serve
132
+ * realtime as SSE instead of Socket.IO (e.g. the SHC daemon's
133
+ * `GET /api/method/shc.events.stream`). Requires `sse.url` or `sse.path`.
134
+ * Room subscriptions become client-side bookkeeping (nothing can be
135
+ * emitted upstream) and `sse.mapFrame` decides how server frames fan out
136
+ * to handler events. Missed-event resume via the `Last-Event-ID` header
137
+ * is native EventSource behavior and is not reimplemented here.
138
+ */
139
+ transport?: RealtimeTransport;
140
+ /** SSE transport options — only read when `transport` is `"sse"`. */
141
+ sse?: RealtimeSSEConfig;
40
142
  }
143
+ export type DocRoom = {
144
+ doctype: string;
145
+ name: string;
146
+ };
147
+ export type ListRoom = {
148
+ doctype: string;
149
+ filters?: Record<string, unknown>;
150
+ };
41
151
  export declare class RealtimeModule {
42
152
  private socket;
153
+ /** Live EventSource when the `"sse"` transport is active. */
154
+ private eventSource;
43
155
  private handlerMap;
44
156
  /** Tracks events with socket listeners attached to prevent duplicates. */
45
157
  private attachedSocketEvents;
46
158
  /** Stored socket event handler references for proper cleanup. */
47
159
  private socketEventHandlers;
160
+ /** Tracks SSE event types with listeners attached to prevent duplicates. */
161
+ private attachedSseEvents;
162
+ /** Stored SSE listener references for proper cleanup. */
163
+ private sseListeners;
164
+ /** One-shot debug notices for SSE's one-way limitations. */
165
+ private sseRoomNoticeLogged;
166
+ private sseEmitNoticeLogged;
48
167
  /** Active doc rooms — re-emitted on every (re)connect. */
49
168
  private docRooms;
50
169
  /** Active list rooms — re-emitted on every (re)connect. */
@@ -70,10 +189,46 @@ export declare class RealtimeModule {
70
189
  */
71
190
  private refreshSocketAuth;
72
191
  private resolveHealthyWaiters;
192
+ private isSSE;
73
193
  private waitUntilHealthy;
74
194
  private ensureConnected;
75
195
  private resubscribeRooms;
76
- private connect;
196
+ /**
197
+ * Open the realtime transport now. Room-driven auto-connect
198
+ * (subscribeDoc/subscribeList) remains the primary lifecycle in both
199
+ * transports — this is public for SSE consumers that use no doc/list room
200
+ * bookkeeping: a one-way stream has nothing to emit on join, so nothing
201
+ * else would ever open it. Idempotent while a transport exists or a
202
+ * connect is in flight.
203
+ */
204
+ connect(): Promise<void>;
205
+ /**
206
+ * SSE branch of connect(): construct an EventSource against the configured
207
+ * stream URL. EventSource connects at construction, auto-reconnects on
208
+ * failure, and resumes missed frames itself by sending the stream's last
209
+ * `id:` as the `Last-Event-ID` request header — none of that is
210
+ * reimplemented here.
211
+ */
212
+ private connectSSE;
213
+ private buildSSEURL;
214
+ private initSSEHandlers;
215
+ private attachSSEListener;
216
+ private detachSSEListener;
217
+ private isCoreSSEType;
218
+ /**
219
+ * Single entry point for everything the EventSource dispatches. Dataless
220
+ * events are transport lifecycle (`open`/`error` as plain Events); anything
221
+ * carrying `data` is a server frame — including frames the server
222
+ * classified `event: error`, which arrive as MessageEvents WITH data and
223
+ * must not be mistaken for connection errors.
224
+ */
225
+ private handleSSEEvent;
226
+ /**
227
+ * Logged once: SSE is one-way, so doc/list room membership can't be sent
228
+ * upstream — rooms are recorded client-side (see getDocRooms/getListRooms)
229
+ * for mapFrame-driven filtering and for a future two-way transport.
230
+ */
231
+ private logSSERoomNoticeOnce;
77
232
  /**
78
233
  * Tear down the socket without clearing app handlers or room subscriptions.
79
234
  * Used by auth refresh so listeners/rooms survive credential rotation.
@@ -117,5 +272,15 @@ export declare class RealtimeModule {
117
272
  updateAuth(auth: AuthConfig): Promise<void>;
118
273
  emit(event: string, data: unknown): void;
119
274
  getSocket(): Socket<import("@socket.io/component-emitter").DefaultEventsMap, import("@socket.io/component-emitter").DefaultEventsMap> | undefined;
275
+ /** Live EventSource when the SSE transport is connected (undefined otherwise). */
276
+ getEventSource(): SSEEventSourceLike | undefined;
277
+ /**
278
+ * Doc rooms recorded by subscribeDoc. Under SSE these are client-side
279
+ * bookkeeping only (nothing is emitted upstream) — mapFrame-driven apps
280
+ * consult them to filter or route frames.
281
+ */
282
+ getDocRooms(): DocRoom[];
283
+ /** List rooms recorded by subscribeList — same client-side semantics as getDocRooms. */
284
+ getListRooms(): ListRoom[];
120
285
  }
121
286
  //# sourceMappingURL=realtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAEjD,oBAAY,gBAAgB;IAC1B,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,WAAW,iBAAiB;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC;CACzD;AASD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,UAAU,CAAmC;IACrD,0EAA0E;IAC1E,OAAO,CAAC,oBAAoB,CAAqB;IACjD,iEAAiE;IACjE,OAAO,CAAC,mBAAmB,CAAiD;IAC5E,0DAA0D;IAC1D,OAAO,CAAC,QAAQ,CAA8B;IAC9C,2DAA2D;IAC3D,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,MAAM,CAAiB;IAC/B,oEAAoE;IACpE,OAAO,CAAC,mBAAmB,CAAC,CAAgB;gBAEhC,MAAM,EAAE,cAAc;IAOlC,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,YAAY;YA0BN,cAAc;IA2D5B;;;;;;;;OAQG;IACH,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,gBAAgB;YAeV,eAAe;IAQ7B,OAAO,CAAC,gBAAgB;YAYV,OAAO;IA0CrB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,YAAY;IAwCpB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,cAAc;IAQhB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBxD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAUpC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAShE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAQnD;;;;;;OAMG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtF,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQtC;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IASxB,SAAS;IAIT,UAAU,IAAI,IAAI;IAOZ,UAAU,CAAC,IAAI,EAAE,UAAU;IAejC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;IAMjC,SAAS;CAGV"}
1
+ {"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"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"}