@multiplatform.one/frappe 6.6.0 → 7.0.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 (224) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/auth.native.js.map +1 -1
  3. package/dist/cjs/call.native.js.map +1 -1
  4. package/dist/cjs/collection.native.js.map +1 -1
  5. package/dist/cjs/common/types.native.js.map +1 -1
  6. package/dist/cjs/core/http.cjs +45 -1
  7. package/dist/cjs/core/http.native.js +72 -1
  8. package/dist/cjs/core/http.native.js.map +1 -1
  9. package/dist/cjs/core/types.native.js.map +1 -1
  10. package/dist/cjs/core/wire.native.js.map +1 -1
  11. package/dist/cjs/db.native.js.map +1 -1
  12. package/dist/cjs/devtools/FrappeDevtoolsPanel.native.js.map +1 -1
  13. package/dist/cjs/devtools/index.native.js.map +1 -1
  14. package/dist/cjs/devtools/plugin.native.js.map +1 -1
  15. package/dist/cjs/devtools/theme.native.js.map +1 -1
  16. package/dist/cjs/doctype.cjs +15 -2
  17. package/dist/cjs/doctype.native.js +22 -5
  18. package/dist/cjs/doctype.native.js.map +1 -1
  19. package/dist/cjs/file.native.js.map +1 -1
  20. package/dist/cjs/fixtureDb.native.js.map +1 -1
  21. package/dist/cjs/fixtures.native.js.map +1 -1
  22. package/dist/cjs/frappeApp.native.js.map +1 -1
  23. package/dist/cjs/frappeReact.cjs +55 -1
  24. package/dist/cjs/frappeReact.native.js +67 -2
  25. package/dist/cjs/frappeReact.native.js.map +1 -1
  26. package/dist/cjs/index.cjs +8 -0
  27. package/dist/cjs/index.native.js +10 -2
  28. package/dist/cjs/index.native.js.map +1 -1
  29. package/dist/cjs/optimistic.cjs +32 -2
  30. package/dist/cjs/optimistic.native.js +34 -1
  31. package/dist/cjs/optimistic.native.js.map +1 -1
  32. package/dist/cjs/pacer.native.js.map +1 -1
  33. package/dist/cjs/plugin/index.native.js.map +1 -1
  34. package/dist/cjs/realtime.cjs +234 -11
  35. package/dist/cjs/realtime.native.js +368 -18
  36. package/dist/cjs/realtime.native.js.map +1 -1
  37. package/dist/cjs/sync/backfill.native.js.map +1 -1
  38. package/dist/cjs/sync/filters.native.js.map +1 -1
  39. package/dist/cjs/sync/index.cjs +45 -1
  40. package/dist/cjs/sync/index.native.js +71 -1
  41. package/dist/cjs/sync/index.native.js.map +1 -1
  42. package/dist/cjs/sync/merge.native.js.map +1 -1
  43. package/dist/cjs/sync/mutationEngine.cjs +51 -15
  44. package/dist/cjs/sync/mutationEngine.native.js +69 -16
  45. package/dist/cjs/sync/mutationEngine.native.js.map +1 -1
  46. package/dist/cjs/sync/mutationJournal.cjs +8 -0
  47. package/dist/cjs/sync/mutationJournal.native.js +10 -0
  48. package/dist/cjs/sync/mutationJournal.native.js.map +1 -1
  49. package/dist/cjs/sync/normalizedCache.native.js.map +1 -1
  50. package/dist/cjs/sync/persistence.native.js.map +1 -1
  51. package/dist/cjs/sync/realtime.native.js.map +1 -1
  52. package/dist/cjs/sync/rehydration.native.js.map +1 -1
  53. package/dist/cjs/sync/storage.native.js.map +1 -1
  54. package/dist/cjs/sync/subscriptionManager.native.js.map +1 -1
  55. package/dist/cjs/sync/types.native.js.map +1 -1
  56. package/dist/cjs/sync/virtualPageManager.native.js.map +1 -1
  57. package/dist/cjs/useLiveQuery.native.js.map +1 -1
  58. package/dist/cjs/util.native.js.map +1 -1
  59. package/dist/esm/auth.native.js.map +1 -1
  60. package/dist/esm/call.native.js.map +1 -1
  61. package/dist/esm/collection.native.js +1 -1
  62. package/dist/esm/collection.native.js.map +1 -1
  63. package/dist/esm/common/types.native.js.map +1 -1
  64. package/dist/esm/core/http.mjs +45 -2
  65. package/dist/esm/core/http.mjs.map +1 -1
  66. package/dist/esm/core/http.native.js +74 -4
  67. package/dist/esm/core/http.native.js.map +1 -1
  68. package/dist/esm/core/types.native.js.map +1 -1
  69. package/dist/esm/core/wire.native.js.map +1 -1
  70. package/dist/esm/db.native.js +1 -1
  71. package/dist/esm/db.native.js.map +1 -1
  72. package/dist/esm/devtools/FrappeDevtoolsPanel.native.js +2 -2
  73. package/dist/esm/devtools/FrappeDevtoolsPanel.native.js.map +1 -1
  74. package/dist/esm/devtools/index.native.js +2 -2
  75. package/dist/esm/devtools/index.native.js.map +1 -1
  76. package/dist/esm/devtools/plugin.native.js +1 -1
  77. package/dist/esm/devtools/plugin.native.js.map +1 -1
  78. package/dist/esm/devtools/theme.native.js.map +1 -1
  79. package/dist/esm/doctype.mjs +15 -2
  80. package/dist/esm/doctype.mjs.map +1 -1
  81. package/dist/esm/doctype.native.js +23 -6
  82. package/dist/esm/doctype.native.js.map +1 -1
  83. package/dist/esm/file.native.js.map +1 -1
  84. package/dist/esm/fixtureDb.native.js +1 -1
  85. package/dist/esm/fixtureDb.native.js.map +1 -1
  86. package/dist/esm/fixtures.native.js.map +1 -1
  87. package/dist/esm/frappeApp.native.js +7 -7
  88. package/dist/esm/frappeApp.native.js.map +1 -1
  89. package/dist/esm/frappeReact.mjs +55 -3
  90. package/dist/esm/frappeReact.mjs.map +1 -1
  91. package/dist/esm/frappeReact.native.js +73 -10
  92. package/dist/esm/frappeReact.native.js.map +1 -1
  93. package/dist/esm/index.mjs +5 -5
  94. package/dist/esm/index.mjs.map +1 -1
  95. package/dist/esm/index.native.js +22 -22
  96. package/dist/esm/index.native.js.map +1 -1
  97. package/dist/esm/optimistic.mjs +27 -1
  98. package/dist/esm/optimistic.mjs.map +1 -1
  99. package/dist/esm/optimistic.native.js +30 -1
  100. package/dist/esm/optimistic.native.js.map +1 -1
  101. package/dist/esm/pacer.mjs.map +1 -1
  102. package/dist/esm/pacer.native.js +4 -4
  103. package/dist/esm/pacer.native.js.map +1 -1
  104. package/dist/esm/plugin/index.native.js.map +1 -1
  105. package/dist/esm/realtime.mjs +234 -11
  106. package/dist/esm/realtime.mjs.map +1 -1
  107. package/dist/esm/realtime.native.js +369 -19
  108. package/dist/esm/realtime.native.js.map +1 -1
  109. package/dist/esm/sync/backfill.native.js +1 -1
  110. package/dist/esm/sync/backfill.native.js.map +1 -1
  111. package/dist/esm/sync/filters.native.js.map +1 -1
  112. package/dist/esm/sync/index.mjs +45 -1
  113. package/dist/esm/sync/index.mjs.map +1 -1
  114. package/dist/esm/sync/index.native.js +79 -9
  115. package/dist/esm/sync/index.native.js.map +1 -1
  116. package/dist/esm/sync/merge.native.js.map +1 -1
  117. package/dist/esm/sync/mutationEngine.mjs +51 -15
  118. package/dist/esm/sync/mutationEngine.mjs.map +1 -1
  119. package/dist/esm/sync/mutationEngine.native.js +73 -20
  120. package/dist/esm/sync/mutationEngine.native.js.map +1 -1
  121. package/dist/esm/sync/mutationJournal.mjs +8 -0
  122. package/dist/esm/sync/mutationJournal.mjs.map +1 -1
  123. package/dist/esm/sync/mutationJournal.native.js +11 -1
  124. package/dist/esm/sync/mutationJournal.native.js.map +1 -1
  125. package/dist/esm/sync/normalizedCache.native.js.map +1 -1
  126. package/dist/esm/sync/persistence.native.js +2 -2
  127. package/dist/esm/sync/persistence.native.js.map +1 -1
  128. package/dist/esm/sync/realtime.native.js +1 -1
  129. package/dist/esm/sync/realtime.native.js.map +1 -1
  130. package/dist/esm/sync/rehydration.native.js +1 -1
  131. package/dist/esm/sync/rehydration.native.js.map +1 -1
  132. package/dist/esm/sync/storage.native.js.map +1 -1
  133. package/dist/esm/sync/subscriptionManager.native.js +4 -4
  134. package/dist/esm/sync/subscriptionManager.native.js.map +1 -1
  135. package/dist/esm/sync/types.mjs.map +1 -1
  136. package/dist/esm/sync/types.native.js.map +1 -1
  137. package/dist/esm/sync/virtualPageManager.native.js +1 -1
  138. package/dist/esm/sync/virtualPageManager.native.js.map +1 -1
  139. package/dist/esm/useLiveQuery.native.js.map +1 -1
  140. package/dist/esm/util.native.js.map +1 -1
  141. package/dist/jsx/core/http.mjs +45 -2
  142. package/dist/jsx/core/http.mjs.map +1 -1
  143. package/dist/jsx/core/http.native.js +72 -1
  144. package/dist/jsx/core/http.native.js.map +1 -1
  145. package/dist/jsx/doctype.mjs +15 -2
  146. package/dist/jsx/doctype.mjs.map +1 -1
  147. package/dist/jsx/doctype.native.js +22 -5
  148. package/dist/jsx/doctype.native.js.map +1 -1
  149. package/dist/jsx/frappeReact.mjs +55 -3
  150. package/dist/jsx/frappeReact.mjs.map +1 -1
  151. package/dist/jsx/frappeReact.native.js +66 -1
  152. package/dist/jsx/frappeReact.native.js.map +1 -1
  153. package/dist/jsx/index.js +5 -5
  154. package/dist/jsx/index.js.map +1 -1
  155. package/dist/jsx/index.mjs +5 -5
  156. package/dist/jsx/index.mjs.map +1 -1
  157. package/dist/jsx/index.native.js +8 -0
  158. package/dist/jsx/index.native.js.map +1 -1
  159. package/dist/jsx/optimistic.mjs +27 -1
  160. package/dist/jsx/optimistic.mjs.map +1 -1
  161. package/dist/jsx/optimistic.native.js +34 -1
  162. package/dist/jsx/optimistic.native.js.map +1 -1
  163. package/dist/jsx/pacer.mjs.map +1 -1
  164. package/dist/jsx/pacer.native.js.map +1 -1
  165. package/dist/jsx/realtime.mjs +234 -11
  166. package/dist/jsx/realtime.mjs.map +1 -1
  167. package/dist/jsx/realtime.native.js +368 -18
  168. package/dist/jsx/realtime.native.js.map +1 -1
  169. package/dist/jsx/sync/index.mjs +45 -1
  170. package/dist/jsx/sync/index.mjs.map +1 -1
  171. package/dist/jsx/sync/index.native.js +71 -1
  172. package/dist/jsx/sync/index.native.js.map +1 -1
  173. package/dist/jsx/sync/mutationEngine.mjs +51 -15
  174. package/dist/jsx/sync/mutationEngine.mjs.map +1 -1
  175. package/dist/jsx/sync/mutationEngine.native.js +69 -16
  176. package/dist/jsx/sync/mutationEngine.native.js.map +1 -1
  177. package/dist/jsx/sync/mutationJournal.mjs +8 -0
  178. package/dist/jsx/sync/mutationJournal.mjs.map +1 -1
  179. package/dist/jsx/sync/mutationJournal.native.js +10 -0
  180. package/dist/jsx/sync/mutationJournal.native.js.map +1 -1
  181. package/dist/jsx/sync/types.mjs.map +1 -1
  182. package/dist/jsx/sync/types.native.js.map +1 -1
  183. package/package.json +8 -8
  184. package/src/core/http.spec.ts +81 -0
  185. package/src/core/http.ts +80 -3
  186. package/src/doctype.spec.ts +82 -3
  187. package/src/doctype.ts +51 -7
  188. package/src/frappeReact.ts +126 -4
  189. package/src/index.ts +28 -3
  190. package/src/optimistic.spec.ts +113 -2
  191. package/src/optimistic.ts +95 -0
  192. package/src/pacer.ts +8 -0
  193. package/src/realtime.spec.ts +62 -0
  194. package/src/realtime.ts +440 -14
  195. package/src/realtimeSse.spec.ts +547 -0
  196. package/src/sync/index.ts +44 -1
  197. package/src/sync/mutationEngine.spec.ts +7 -2
  198. package/src/sync/mutationEngine.ts +83 -27
  199. package/src/sync/mutationJournal.ts +9 -0
  200. package/src/sync/mutations.spec.ts +1 -1
  201. package/src/sync/syncModule.spec.ts +255 -1
  202. package/src/sync/types.ts +20 -0
  203. package/types/core/http.d.ts +11 -0
  204. package/types/core/http.d.ts.map +1 -1
  205. package/types/doctype.d.ts +7 -0
  206. package/types/doctype.d.ts.map +1 -1
  207. package/types/frappeReact.d.ts +50 -2
  208. package/types/frappeReact.d.ts.map +1 -1
  209. package/types/index.d.ts +8 -6
  210. package/types/index.d.ts.map +1 -1
  211. package/types/optimistic.d.ts +38 -0
  212. package/types/optimistic.d.ts.map +1 -1
  213. package/types/pacer.d.ts +8 -0
  214. package/types/pacer.d.ts.map +1 -1
  215. package/types/realtime.d.ts +183 -1
  216. package/types/realtime.d.ts.map +1 -1
  217. package/types/sync/index.d.ts +16 -1
  218. package/types/sync/index.d.ts.map +1 -1
  219. package/types/sync/mutationEngine.d.ts +7 -0
  220. package/types/sync/mutationEngine.d.ts.map +1 -1
  221. package/types/sync/mutationJournal.d.ts +6 -0
  222. package/types/sync/mutationJournal.d.ts.map +1 -1
  223. package/types/sync/types.d.ts +20 -0
  224. package/types/sync/types.d.ts.map +1 -1
@@ -78,9 +78,14 @@ var RealtimeModule = /* @__PURE__ */function () {
78
78
  function RealtimeModule2(config) {
79
79
  _class_call_check(this, RealtimeModule2);
80
80
  _define_property(this, "socket", void 0);
81
+ _define_property(this, "eventSource", void 0);
81
82
  _define_property(this, "handlerMap", /* @__PURE__ */new Map());
82
83
  _define_property(this, "attachedSocketEvents", /* @__PURE__ */new Set());
83
84
  _define_property(this, "socketEventHandlers", /* @__PURE__ */new Map());
85
+ _define_property(this, "attachedSseEvents", /* @__PURE__ */new Set());
86
+ _define_property(this, "sseListeners", /* @__PURE__ */new Map());
87
+ _define_property(this, "sseRoomNoticeLogged", false);
88
+ _define_property(this, "sseEmitNoticeLogged", false);
84
89
  _define_property(this, "docRooms", /* @__PURE__ */new Map());
85
90
  _define_property(this, "listRooms", /* @__PURE__ */new Map());
86
91
  _define_property(this, "socketHealthy", false);
@@ -108,19 +113,31 @@ var RealtimeModule = /* @__PURE__ */function () {
108
113
  key: "getSocketURL",
109
114
  value: function getSocketURL() {
110
115
  var base = this.config.baseURL.replace(/\/$/, "");
116
+ if (this.config.socketBaseURL) {
117
+ var socketBase = this.config.socketBaseURL.replace(/\/$/, "");
118
+ var siteName = this.config.siteName;
119
+ if (!siteName) {
120
+ try {
121
+ siteName = new URL(base).hostname;
122
+ } catch (unused) {
123
+ siteName = base.replace(/^https?:\/\//, "").split(/[/:]/)[0];
124
+ }
125
+ }
126
+ return `${socketBase}/${siteName}`;
127
+ }
111
128
  try {
112
129
  var url = new URL(base);
113
130
  var port = this.config.socketPort ? String(this.config.socketPort) : url.port;
114
131
  var host = port ? `${url.hostname}:${port}` : url.hostname;
115
- var siteName = this.config.siteName || url.hostname;
116
- return `${url.protocol}//${host}/${siteName}`;
132
+ var siteName1 = this.config.siteName || url.hostname;
133
+ return `${url.protocol}//${host}/${siteName1}`;
117
134
  } catch (unused) {
118
135
  var result = base;
119
136
  if (this.config.socketPort) {
120
137
  result = result.replace(/(:\d+)/, `:${this.config.socketPort}`);
121
138
  }
122
- var siteName1 = this.config.siteName || result.replace(/^https?:\/\//, "").split(/[/:]/)[0];
123
- return `${result}/${siteName1}`;
139
+ var siteName2 = this.config.siteName || result.replace(/^https?:\/\//, "").split(/[/:]/)[0];
140
+ return `${result}/${siteName2}`;
124
141
  }
125
142
  }
126
143
  }, {
@@ -226,13 +243,17 @@ var RealtimeModule = /* @__PURE__ */function () {
226
243
  }
227
244
  this.healthyWaiters.clear();
228
245
  }
246
+ }, {
247
+ key: "isSSE",
248
+ value: function isSSE() {
249
+ return this.config.transport === "sse";
250
+ }
229
251
  }, {
230
252
  key: "waitUntilHealthy",
231
253
  value: function waitUntilHealthy() {
232
254
  var _this = this;
233
255
  var timeoutMs = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 2e4;
234
- var _this_socket;
235
- if (this.socketHealthy && ((_this_socket = this.socket) === null || _this_socket === void 0 ? void 0 : _this_socket.connected)) return Promise.resolve(true);
256
+ if (this.isHealthy()) return Promise.resolve(true);
236
257
  return new Promise(function (resolve) {
237
258
  var timer = setTimeout(function () {
238
259
  _this.healthyWaiters.delete(onReady);
@@ -248,9 +269,8 @@ var RealtimeModule = /* @__PURE__ */function () {
248
269
  }, {
249
270
  key: "ensureConnected",
250
271
  value: async function ensureConnected() {
251
- var _this_socket;
252
- if (this.socketHealthy && ((_this_socket = this.socket) === null || _this_socket === void 0 ? void 0 : _this_socket.connected)) return;
253
- if (!this.socket && !this.isConnecting) {
272
+ if (this.isHealthy()) return;
273
+ if (!this.socket && !this.eventSource && !this.isConnecting) {
254
274
  await this.connect();
255
275
  }
256
276
  await this.waitUntilHealthy();
@@ -306,7 +326,17 @@ var RealtimeModule = /* @__PURE__ */function () {
306
326
  }
307
327
  }, {
308
328
  key: "connect",
309
- value: async function connect() {
329
+ value: (
330
+ /**
331
+ * Open the realtime transport now. Room-driven auto-connect
332
+ * (subscribeDoc/subscribeList) remains the primary lifecycle in both
333
+ * transports — this is public for SSE consumers that use no doc/list room
334
+ * bookkeeping: a one-way stream has nothing to emit on join, so nothing
335
+ * else would ever open it. Idempotent while a transport exists or a
336
+ * connect is in flight.
337
+ */
338
+ async function connect() {
339
+ if (this.isSSE()) return this.connectSSE();
310
340
  if (this.socket || this.isConnecting) return;
311
341
  this.isConnecting = true;
312
342
  try {
@@ -334,7 +364,259 @@ var RealtimeModule = /* @__PURE__ */function () {
334
364
  this.resolveHealthyWaiters(false);
335
365
  throw err;
336
366
  }
367
+ })
368
+ }, {
369
+ key: "connectSSE",
370
+ value: (
371
+ /**
372
+ * SSE branch of connect(): construct an EventSource against the configured
373
+ * stream URL. EventSource connects at construction, auto-reconnects on
374
+ * failure, and resumes missed frames itself by sending the stream's last
375
+ * `id:` as the `Last-Event-ID` request header — none of that is
376
+ * reimplemented here.
377
+ */
378
+ async function connectSSE() {
379
+ if (this.eventSource || this.isConnecting) return;
380
+ this.isConnecting = true;
381
+ try {
382
+ var _ref;
383
+ var sse = this.config.sse;
384
+ var EventSourceCtor = (_ref = sse === null || sse === void 0 ? void 0 : sse.EventSource) !== null && _ref !== void 0 ? _ref : globalThis.EventSource;
385
+ if (!EventSourceCtor) {
386
+ throw new Error('[RealtimeModule] transport "sse" needs an EventSource implementation, and this runtime has no global EventSource (React Native and Node < 22 ship none). Pass a constructor via config.sse.EventSource \u2014 e.g. the "eventsource" npm package on Node or "react-native-sse" on React Native.');
387
+ }
388
+ var url = await this.buildSSEURL();
389
+ this.eventSource = new EventSourceCtor(url, {
390
+ withCredentials: sse === null || sse === void 0 ? void 0 : sse.withCredentials
391
+ });
392
+ this.initSSEHandlers();
393
+ } catch (err) {
394
+ this.isConnecting = false;
395
+ this.resolveHealthyWaiters(false);
396
+ throw err;
397
+ }
398
+ })
399
+ }, {
400
+ key: "buildSSEURL",
401
+ value: async function buildSSEURL() {
402
+ var _ref;
403
+ var _this_config_sse;
404
+ var sse = this.config.sse;
405
+ var url;
406
+ if (sse === null || sse === void 0 ? void 0 : sse.url) {
407
+ url = sse.url;
408
+ } else if (sse === null || sse === void 0 ? void 0 : sse.path) {
409
+ var base = this.config.baseURL.replace(/\/$/, "");
410
+ url = `${base}${sse.path.startsWith("/") ? "" : "/"}${sse.path}`;
411
+ } else {
412
+ throw new Error('[RealtimeModule] transport "sse" requires config.sse.url or config.sse.path. There is no default stream path: SSE endpoints are server-specific (the SHC daemon serves "/api/method/shc.events.stream"; a real Frappe bench has no SSE endpoint at all), so a framework default would only ever 404.');
413
+ }
414
+ var params = Object.entries((_ref = (_this_config_sse = this.config.sse) === null || _this_config_sse === void 0 ? void 0 : _this_config_sse.queryParams) !== null && _ref !== void 0 ? _ref : {});
415
+ if (params.length === 0) return url;
416
+ var parts = [];
417
+ var _iteratorNormalCompletion = true,
418
+ _didIteratorError = false,
419
+ _iteratorError = void 0;
420
+ try {
421
+ for (var _iterator = params[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
422
+ var [key, value] = _step.value;
423
+ var resolved = typeof value === "function" ? await value() : value;
424
+ parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(resolved)}`);
425
+ }
426
+ } catch (err) {
427
+ _didIteratorError = true;
428
+ _iteratorError = err;
429
+ } finally {
430
+ try {
431
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
432
+ _iterator.return();
433
+ }
434
+ } finally {
435
+ if (_didIteratorError) {
436
+ throw _iteratorError;
437
+ }
438
+ }
439
+ }
440
+ return `${url}${url.includes("?") ? "&" : "?"}${parts.join("&")}`;
337
441
  }
442
+ }, {
443
+ key: "initSSEHandlers",
444
+ value: function initSSEHandlers() {
445
+ var _ref;
446
+ var _this_config_sse;
447
+ this.attachedSseEvents.clear();
448
+ this.sseListeners.clear();
449
+ this.attachSSEListener("open");
450
+ this.attachSSEListener("error");
451
+ this.attachSSEListener("message");
452
+ var _iteratorNormalCompletion = true,
453
+ _didIteratorError = false,
454
+ _iteratorError = void 0;
455
+ try {
456
+ for (var _iterator = ((_ref = (_this_config_sse = this.config.sse) === null || _this_config_sse === void 0 ? void 0 : _this_config_sse.events) !== null && _ref !== void 0 ? _ref : [])[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
457
+ var type = _step.value;
458
+ this.attachSSEListener(type);
459
+ }
460
+ } catch (err) {
461
+ _didIteratorError = true;
462
+ _iteratorError = err;
463
+ } finally {
464
+ try {
465
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
466
+ _iterator.return();
467
+ }
468
+ } finally {
469
+ if (_didIteratorError) {
470
+ throw _iteratorError;
471
+ }
472
+ }
473
+ }
474
+ var _iteratorNormalCompletion1 = true,
475
+ _didIteratorError1 = false,
476
+ _iteratorError1 = void 0;
477
+ try {
478
+ for (var _iterator1 = this.handlerMap.keys()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
479
+ var event = _step1.value;
480
+ this.attachSSEListener(event);
481
+ }
482
+ } catch (err) {
483
+ _didIteratorError1 = true;
484
+ _iteratorError1 = err;
485
+ } finally {
486
+ try {
487
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
488
+ _iterator1.return();
489
+ }
490
+ } finally {
491
+ if (_didIteratorError1) {
492
+ throw _iteratorError1;
493
+ }
494
+ }
495
+ }
496
+ }
497
+ }, {
498
+ key: "attachSSEListener",
499
+ value: function attachSSEListener(type) {
500
+ var _this = this;
501
+ if (!this.eventSource || this.attachedSseEvents.has(type)) return;
502
+ var listener = function listener2(event) {
503
+ _this.handleSSEEvent(type, event);
504
+ };
505
+ this.sseListeners.set(type, listener);
506
+ this.attachedSseEvents.add(type);
507
+ this.eventSource.addEventListener(type, listener);
508
+ }
509
+ }, {
510
+ key: "detachSSEListener",
511
+ value: function detachSSEListener(type) {
512
+ if (this.isCoreSSEType(type)) return;
513
+ if (!this.eventSource || !this.attachedSseEvents.has(type)) return;
514
+ var listener = this.sseListeners.get(type);
515
+ if (listener) {
516
+ this.eventSource.removeEventListener(type, listener);
517
+ this.sseListeners.delete(type);
518
+ }
519
+ this.attachedSseEvents.delete(type);
520
+ }
521
+ }, {
522
+ key: "isCoreSSEType",
523
+ value: function isCoreSSEType(type) {
524
+ var _ref;
525
+ var _this_config_sse;
526
+ return type === "open" || type === "error" || type === "message" || ((_ref = (_this_config_sse = this.config.sse) === null || _this_config_sse === void 0 ? void 0 : _this_config_sse.events) !== null && _ref !== void 0 ? _ref : []).includes(type);
527
+ }
528
+ }, {
529
+ key: "handleSSEEvent",
530
+ value: (
531
+ /**
532
+ * Single entry point for everything the EventSource dispatches. Dataless
533
+ * events are transport lifecycle (`open`/`error` as plain Events); anything
534
+ * carrying `data` is a server frame — including frames the server
535
+ * classified `event: error`, which arrive as MessageEvents WITH data and
536
+ * must not be mistaken for connection errors.
537
+ */
538
+ function handleSSEEvent(type, event) {
539
+ var _event_lastEventId;
540
+ var _this_config_sse;
541
+ if ((event === null || event === void 0 ? void 0 : event.data) === void 0) {
542
+ if (type === "open") {
543
+ this.isConnecting = false;
544
+ this.socketHealthy = true;
545
+ this.emitToHandlers("connected", {
546
+ transport: "sse"
547
+ });
548
+ this.resolveHealthyWaiters(true);
549
+ } else if (type === "error") {
550
+ this.isConnecting = false;
551
+ this.socketHealthy = false;
552
+ this.emitToHandlers("disconnect", {
553
+ reason: "sse-error"
554
+ });
555
+ this.resolveHealthyWaiters(false);
556
+ }
557
+ return;
558
+ }
559
+ var frame = {
560
+ type,
561
+ data: String(event.data),
562
+ lastEventId: (_event_lastEventId = event.lastEventId) !== null && _event_lastEventId !== void 0 ? _event_lastEventId : ""
563
+ };
564
+ var mapFrame = (_this_config_sse = this.config.sse) === null || _this_config_sse === void 0 ? void 0 : _this_config_sse.mapFrame;
565
+ if (mapFrame) {
566
+ var mapped;
567
+ try {
568
+ mapped = mapFrame(frame);
569
+ } catch (err) {
570
+ console.warn("[RealtimeModule] sse.mapFrame threw; frame dropped:", err);
571
+ return;
572
+ }
573
+ if (!mapped) return;
574
+ var _iteratorNormalCompletion = true,
575
+ _didIteratorError = false,
576
+ _iteratorError = void 0;
577
+ try {
578
+ for (var _iterator = mapped[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
579
+ var {
580
+ event: mappedEvent,
581
+ payload
582
+ } = _step.value;
583
+ this.emitToHandlers(mappedEvent, payload);
584
+ }
585
+ } catch (err) {
586
+ _didIteratorError = true;
587
+ _iteratorError = err;
588
+ } finally {
589
+ try {
590
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
591
+ _iterator.return();
592
+ }
593
+ } finally {
594
+ if (_didIteratorError) {
595
+ throw _iteratorError;
596
+ }
597
+ }
598
+ }
599
+ return;
600
+ }
601
+ var payload1 = frame.data;
602
+ try {
603
+ payload1 = JSON.parse(frame.data);
604
+ } catch (unused) {}
605
+ this.emitToHandlers(frame.type, payload1);
606
+ })
607
+ }, {
608
+ key: "logSSERoomNoticeOnce",
609
+ value: (
610
+ /**
611
+ * Logged once: SSE is one-way, so doc/list room membership can't be sent
612
+ * upstream — rooms are recorded client-side (see getDocRooms/getListRooms)
613
+ * for mapFrame-driven filtering and for a future two-way transport.
614
+ */
615
+ function logSSERoomNoticeOnce() {
616
+ if (this.sseRoomNoticeLogged) return;
617
+ this.sseRoomNoticeLogged = true;
618
+ console.debug("[RealtimeModule] SSE transport is one-way: doc/list room subscriptions are recorded client-side only (getDocRooms()/getListRooms()) and nothing is sent to the server \u2014 filter server-side via sse.queryParams or route frames with sse.mapFrame.");
619
+ })
338
620
  }, {
339
621
  key: "softDisconnect",
340
622
  value: (
@@ -350,8 +632,36 @@ var RealtimeModule = /* @__PURE__ */function () {
350
632
  this.socket.disconnect();
351
633
  this.socket = void 0;
352
634
  }
635
+ if (this.eventSource) {
636
+ var _iteratorNormalCompletion = true,
637
+ _didIteratorError = false,
638
+ _iteratorError = void 0;
639
+ try {
640
+ for (var _iterator = this.sseListeners[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
641
+ var [type, listener] = _step.value;
642
+ this.eventSource.removeEventListener(type, listener);
643
+ }
644
+ } catch (err) {
645
+ _didIteratorError = true;
646
+ _iteratorError = err;
647
+ } finally {
648
+ try {
649
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
650
+ _iterator.return();
651
+ }
652
+ } finally {
653
+ if (_didIteratorError) {
654
+ throw _iteratorError;
655
+ }
656
+ }
657
+ }
658
+ this.eventSource.close();
659
+ this.eventSource = void 0;
660
+ }
353
661
  this.attachedSocketEvents.clear();
354
662
  this.socketEventHandlers.clear();
663
+ this.attachedSseEvents.clear();
664
+ this.sseListeners.clear();
355
665
  this.socketHealthy = false;
356
666
  this.isConnecting = false;
357
667
  this.resolveHealthyWaiters(false);
@@ -482,7 +792,11 @@ var RealtimeModule = /* @__PURE__ */function () {
482
792
  this.handlerMap.set(event, handlerSet);
483
793
  }
484
794
  handlerSet.add(handler);
485
- this.attachSocketListener(event);
795
+ if (this.isSSE()) {
796
+ this.attachSSEListener(event);
797
+ } else {
798
+ this.attachSocketListener(event);
799
+ }
486
800
  }
487
801
  }, {
488
802
  key: "off",
@@ -492,7 +806,11 @@ var RealtimeModule = /* @__PURE__ */function () {
492
806
  handlerSet.delete(handler);
493
807
  if (handlerSet.size === 0) {
494
808
  this.handlerMap.delete(event);
495
- this.detachSocketListener(event);
809
+ if (this.isSSE()) {
810
+ this.detachSSEListener(event);
811
+ } else {
812
+ this.detachSocketListener(event);
813
+ }
496
814
  }
497
815
  }
498
816
  }, {
@@ -502,8 +820,9 @@ var RealtimeModule = /* @__PURE__ */function () {
502
820
  doctype,
503
821
  name
504
822
  });
823
+ if (this.isSSE()) this.logSSERoomNoticeOnce();
505
824
  await this.ensureConnected();
506
- if (this.socket && this.socketHealthy) {
825
+ if (!this.isSSE() && this.socket && this.socketHealthy) {
507
826
  this.socket.emit("doc_subscribe", doctype, name);
508
827
  }
509
828
  }
@@ -511,7 +830,7 @@ var RealtimeModule = /* @__PURE__ */function () {
511
830
  key: "unsubscribeDoc",
512
831
  value: function unsubscribeDoc(doctype, name) {
513
832
  this.docRooms.delete(docRoomKey(doctype, name));
514
- if (this.socket && this.socketHealthy) {
833
+ if (!this.isSSE() && this.socket && this.socketHealthy) {
515
834
  this.socket.emit("doc_unsubscribe", doctype, name);
516
835
  }
517
836
  this.teardownWhenIdle();
@@ -531,8 +850,9 @@ var RealtimeModule = /* @__PURE__ */function () {
531
850
  doctype,
532
851
  filters
533
852
  });
853
+ if (this.isSSE()) this.logSSERoomNoticeOnce();
534
854
  await this.ensureConnected();
535
- if (this.socket && this.socketHealthy) {
855
+ if (!this.isSSE() && this.socket && this.socketHealthy) {
536
856
  this.socket.emit("doctype_subscribe", doctype);
537
857
  }
538
858
  })
@@ -540,7 +860,7 @@ var RealtimeModule = /* @__PURE__ */function () {
540
860
  key: "unsubscribeList",
541
861
  value: function unsubscribeList(doctype) {
542
862
  this.listRooms.delete(doctype);
543
- if (this.socket && this.socketHealthy) {
863
+ if (!this.isSSE() && this.socket && this.socketHealthy) {
544
864
  this.socket.emit("doctype_unsubscribe", doctype);
545
865
  }
546
866
  this.teardownWhenIdle();
@@ -559,7 +879,7 @@ var RealtimeModule = /* @__PURE__ */function () {
559
879
  */
560
880
  function teardownWhenIdle() {
561
881
  if (this.docRooms.size > 0 || this.listRooms.size > 0) return;
562
- if (!this.socket && !this.isConnecting) return;
882
+ if (!this.socket && !this.eventSource && !this.isConnecting) return;
563
883
  this.emitToHandlers("disconnect", {
564
884
  reason: "idle-teardown"
565
885
  });
@@ -569,6 +889,7 @@ var RealtimeModule = /* @__PURE__ */function () {
569
889
  key: "isHealthy",
570
890
  value: function isHealthy() {
571
891
  var _this_socket;
892
+ if (this.isSSE()) return this.socketHealthy && this.eventSource !== void 0;
572
893
  return this.socketHealthy && ((_this_socket = this.socket) === null || _this_socket === void 0 ? void 0 : _this_socket.connected) === true;
573
894
  }
574
895
  }, {
@@ -583,7 +904,7 @@ var RealtimeModule = /* @__PURE__ */function () {
583
904
  key: "updateAuth",
584
905
  value: async function updateAuth(auth) {
585
906
  this.config.auth = auth;
586
- var shouldReconnect = this.docRooms.size > 0 || this.listRooms.size > 0;
907
+ var shouldReconnect = this.docRooms.size > 0 || this.listRooms.size > 0 || this.isSSE() && this.eventSource !== void 0;
587
908
  this.softDisconnect();
588
909
  if (shouldReconnect) {
589
910
  await this.connect();
@@ -592,6 +913,13 @@ var RealtimeModule = /* @__PURE__ */function () {
592
913
  }, {
593
914
  key: "emit",
594
915
  value: function emit(event, data) {
916
+ if (this.isSSE()) {
917
+ if (!this.sseEmitNoticeLogged) {
918
+ this.sseEmitNoticeLogged = true;
919
+ console.debug("[RealtimeModule] emit() is a no-op under the SSE transport \u2014 SSE is one-way (server \u2192 client). Use HTTP calls for client \u2192 server communication.");
920
+ }
921
+ return;
922
+ }
595
923
  if (this.socket && this.socketHealthy) {
596
924
  this.socket.emit(event, data);
597
925
  }
@@ -601,6 +929,28 @@ var RealtimeModule = /* @__PURE__ */function () {
601
929
  value: function getSocket() {
602
930
  return this.socket;
603
931
  }
932
+ }, {
933
+ /** Live EventSource when the SSE transport is connected (undefined otherwise). */
934
+ key: "getEventSource",
935
+ value: function getEventSource() {
936
+ return this.eventSource;
937
+ }
938
+ }, {
939
+ /**
940
+ * Doc rooms recorded by subscribeDoc. Under SSE these are client-side
941
+ * bookkeeping only (nothing is emitted upstream) — mapFrame-driven apps
942
+ * consult them to filter or route frames.
943
+ */
944
+ key: "getDocRooms",
945
+ value: function getDocRooms() {
946
+ return [...this.docRooms.values()];
947
+ }
948
+ }, {
949
+ /** List rooms recorded by subscribeList — same client-side semantics as getDocRooms. */
950
+ key: "getListRooms",
951
+ value: function getListRooms() {
952
+ return [...this.listRooms.values()];
953
+ }
604
954
  }]);
605
955
  return RealtimeModule2;
606
956
  }();
@@ -1 +1 @@
1
- {"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","RealtimePlatform","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","realtime_exports","RealtimeModule","module","exports","import_platform","require","import_socket","import_util","_class_call_check","instance","Constructor","TypeError","_defineProperties","props","i","length","descriptor","configurable","writable","_create_class","protoProps","staticProps","_define_property","obj","RealtimePlatform2","docRoomKey","doctype","RealtimeModule2","config","Map","Set","platform","detectPlatform","_navigator_userAgent","isGjs","isNative","navigator","product","userAgent","includes","isBrowser","getSocketURL","base","baseURL","replace","url","URL","port","socketPort","String","host","hostname","siteName","protocol","unused","result","siteName1","split","getAuthOptions","_this_config_auth","_this_config_auth1","authOptions","extraHeaders","Origin","origin","auth","sessionId","Cookie","useToken","token","authType","type","Authorization","transportOptions","websocket","polling","refreshSocketAuth","_this","socket","Promise","resolve","authRefreshInflight","manager","io","opts","assign","resolveHealthyWaiters","ok","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","healthyWaiters","Symbol","iterator","_step","next","done","err","return","clear","waitUntilHealthy","timeoutMs","arguments","_this_socket","socketHealthy","connected","timer","setTimeout","delete","onReady","onReady2","clearTimeout","add","ensureConnected","isConnecting","connect","resubscribeRooms","docRooms","values","room","emit","_iteratorNormalCompletion1","_didIteratorError1","_iteratorError1","_iterator1","listRooms","_step1","room1","socketURL","transports","autoConnect","path","randomizationFactor","reconnection","reconnectionAttempts","Number","POSITIVE_INFINITY","reconnectionDelay","reconnectionDelayMax","timeout","withCredentials","socketOptions","initHandlers","softDisconnect","removeAllListeners"],"sources":["../../src/realtime.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","RealtimePlatform","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","realtime_exports","RealtimeModule","module","exports","import_platform","require","import_socket","import_util","_class_call_check","instance","Constructor","TypeError","_defineProperties","props","i","length","descriptor","configurable","writable","_create_class","protoProps","staticProps","_define_property","obj","RealtimePlatform2","docRoomKey","doctype","RealtimeModule2","config","Map","Set","platform","detectPlatform","_navigator_userAgent","isGjs","isNative","navigator","product","userAgent","includes","isBrowser","getSocketURL","base","baseURL","replace","socketBaseURL","socketBase","siteName","URL","hostname","unused","split","url","port","socketPort","String","host","siteName1","protocol","result","siteName2","getAuthOptions","_this_config_auth","_this_config_auth1","authOptions","extraHeaders","Origin","origin","auth","sessionId","Cookie","useToken","token","authType","type","Authorization","transportOptions","websocket","polling","refreshSocketAuth","_this","socket","Promise","resolve","authRefreshInflight","manager","io","opts","assign","resolveHealthyWaiters","ok","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","healthyWaiters","Symbol","iterator","_step","next","done","err","return","clear","isSSE","transport","waitUntilHealthy","timeoutMs","arguments","isHealthy","timer","setTimeout","delete","onReady","onReady2","clearTimeout","add","ensureConnected","eventSource","isConnecting","connect","resubscribeRooms","socketHealthy","docRooms","values","room","emit","_iteratorNormalCompletion1","_didIteratorError1","_iteratorError1","_iterator1","listRooms","_step1","room1","connectSSE","socketURL","transports","autoConnect","path","randomizationFactor","reconnection","reconnectionAttempts","Number","POSITIVE_INFINITY","reconnectionDelay","reconnectionDelayMax","timeout","withCredentials","socketOptions","initHandlers","_ref","sse","EventSourceCtor","EventSource","globalThis","Error","buildSSEURL","initSSEHandlers","_this_config_sse","startsWith","params","entries","queryParams","parts","resolved","push","encodeURIComponent","join","attachedSseEvents","sseListeners","attachSSEListener","events","handlerMap","keys","event","has","listener","listener2","handleSSEEvent","set","addEventListener","detachSSEListener","isCoreSSEType","removeEventListener","_event_lastEventId","data","emitToHandlers","reason","frame","lastEventId","mapFrame","mapped","console","warn"],"sources":["../../src/realtime.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -46,7 +46,14 @@ class SyncModule {
46
46
  });
47
47
  this.subscriptionManager = new SubscriptionManager(this.db, this.normalizedCache, this.options);
48
48
  this.rehydrationManager = new RehydrationManager(this.db, this.normalizedCache, this.subscriptionManager, this.mutationJournal, () => this.emit());
49
- this.mutationEngine = new MutationEngine(this.db, this.realtime, this.normalizedCache, this.mutationJournal, this.subscriptionManager, this.rehydrationManager, this.options);
49
+ this.mutationEngine = new MutationEngine(this.db, this.realtime, this.normalizedCache, this.mutationJournal, this.subscriptionManager, this.rehydrationManager, {
50
+ ...this.options,
51
+ // Bridge engine-internal optimistic applies to store listeners so
52
+ // pending state paints BEFORE the server round trip. Without this,
53
+ // subscribeStore consumers only re-read after the ack (mutate()'s
54
+ // trailing emit) and the in-memory optimism was invisible to them.
55
+ onStoreChange: () => this.emit()
56
+ });
50
57
  const realtimeOptions = {
51
58
  ...this.options,
52
59
  onResetCache: () => this.resetCache(),
@@ -136,6 +143,43 @@ class SyncModule {
136
143
  await this.mutationEngine.replayPending();
137
144
  this.emit();
138
145
  }
146
+ /**
147
+ * Public read of the mutation ledger: journal entries still awaiting the
148
+ * server (`Status.Pending`) or rejected by it (`Status.Failed`), ordered
149
+ * by submission sequence. Confirmed entries are dropped from the journal
150
+ * and never appear here. Read inside a `subscribeStore` callback for a
151
+ * reactive pending/error surface (see `useFrappePendingMutations`).
152
+ */
153
+ getMutationEntries(doctype) {
154
+ const entries = [];
155
+ for (const {
156
+ id,
157
+ entry
158
+ } of this.mutationJournal.listPending()) {
159
+ if (doctype && entry.doctype !== doctype) continue;
160
+ entries.push({
161
+ id,
162
+ operation: entry.operation,
163
+ doctype: entry.doctype,
164
+ docname: entry.docname,
165
+ status: entry.status,
166
+ createdAt: entry.createdAt ?? 0,
167
+ retryCount: entry.retryCount ?? 0,
168
+ error: entry.error ? entry.error.message ?? String(entry.error) : void 0
169
+ });
170
+ }
171
+ return entries;
172
+ }
173
+ /**
174
+ * Drops a failed (or still-pending) ledger entry without retrying it —
175
+ * the "dismiss" half of the rejected-write contract. The optimistic
176
+ * rollback already ran when the mutation failed; this only clears the
177
+ * error affordance.
178
+ */
179
+ dismissMutation(id) {
180
+ this.mutationJournal.remove(id);
181
+ this.emit();
182
+ }
139
183
  /** Reads a single document from the local cache. */
140
184
  getDocFromCache(doctype, name) {
141
185
  return this.normalizedCache.get({