@multiplatform.one/frappe 6.1.0 → 6.4.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 (792) hide show
  1. package/README.md +38 -12
  2. package/dist/cjs/auth.cjs +1 -1
  3. package/dist/cjs/auth.native.js.map +1 -1
  4. package/dist/cjs/call.cjs +1 -1
  5. package/dist/cjs/call.native.js.map +1 -1
  6. package/dist/cjs/collection.cjs +18 -4
  7. package/dist/cjs/collection.native.js +18 -4
  8. package/dist/cjs/collection.native.js.map +1 -1
  9. package/dist/cjs/core/http.cjs +92 -9
  10. package/dist/cjs/core/http.native.js +96 -7
  11. package/dist/cjs/core/http.native.js.map +1 -1
  12. package/dist/cjs/db.cjs +7 -7
  13. package/dist/cjs/db.native.js +4 -4
  14. package/dist/cjs/db.native.js.map +1 -1
  15. package/dist/cjs/doctype.cjs +97 -39
  16. package/dist/cjs/doctype.native.js +116 -46
  17. package/dist/cjs/doctype.native.js.map +1 -1
  18. package/dist/cjs/file.cjs +1 -1
  19. package/dist/cjs/file.native.js.map +1 -1
  20. package/dist/cjs/fixtureDb.cjs +3 -2
  21. package/dist/cjs/fixtureDb.native.js +2 -1
  22. package/dist/cjs/fixtureDb.native.js.map +1 -1
  23. package/dist/cjs/frappeApp.cjs +15 -14
  24. package/dist/cjs/frappeApp.native.js +16 -14
  25. package/dist/cjs/frappeApp.native.js.map +1 -1
  26. package/dist/cjs/frappeReact.cjs +198 -18
  27. package/dist/cjs/frappeReact.native.js +241 -18
  28. package/dist/cjs/frappeReact.native.js.map +1 -1
  29. package/dist/cjs/index.cjs +9 -4
  30. package/dist/cjs/index.native.js +9 -4
  31. package/dist/cjs/index.native.js.map +1 -1
  32. package/dist/cjs/pacer.cjs +2 -2
  33. package/dist/cjs/pacer.native.js +2 -2
  34. package/dist/cjs/pacer.native.js.map +1 -1
  35. package/dist/cjs/realtime.cjs +186 -46
  36. package/dist/cjs/realtime.native.js +268 -48
  37. package/dist/cjs/realtime.native.js.map +1 -1
  38. package/dist/cjs/sync/backfill.cjs +32 -27
  39. package/dist/cjs/sync/backfill.native.js +49 -43
  40. package/dist/cjs/sync/backfill.native.js.map +1 -1
  41. package/dist/cjs/sync/index.cjs +90 -24
  42. package/dist/cjs/sync/index.native.js +112 -10
  43. package/dist/cjs/sync/index.native.js.map +1 -1
  44. package/dist/cjs/sync/merge.cjs +0 -3
  45. package/dist/cjs/sync/merge.native.js +0 -3
  46. package/dist/cjs/sync/merge.native.js.map +1 -1
  47. package/dist/cjs/sync/mutationEngine.cjs +25 -19
  48. package/dist/cjs/sync/mutationEngine.native.js +16 -13
  49. package/dist/cjs/sync/mutationEngine.native.js.map +1 -1
  50. package/dist/cjs/sync/mutationJournal.cjs +9 -4
  51. package/dist/cjs/sync/mutationJournal.native.js +7 -4
  52. package/dist/cjs/sync/mutationJournal.native.js.map +1 -1
  53. package/dist/cjs/sync/normalizedCache.cjs +7 -3
  54. package/dist/cjs/sync/normalizedCache.native.js +7 -2
  55. package/dist/cjs/sync/normalizedCache.native.js.map +1 -1
  56. package/dist/cjs/sync/persistence.cjs +63 -31
  57. package/dist/cjs/sync/persistence.native.js +120 -63
  58. package/dist/cjs/sync/persistence.native.js.map +1 -1
  59. package/dist/cjs/sync/realtime.cjs +124 -13
  60. package/dist/cjs/sync/realtime.native.js +163 -20
  61. package/dist/cjs/sync/realtime.native.js.map +1 -1
  62. package/dist/cjs/sync/rehydration.cjs +16 -10
  63. package/dist/cjs/sync/rehydration.native.js +16 -14
  64. package/dist/cjs/sync/rehydration.native.js.map +1 -1
  65. package/dist/cjs/sync/storage.cjs +3 -3
  66. package/dist/cjs/sync/storage.native.js +1 -1
  67. package/dist/cjs/sync/storage.native.js.map +1 -1
  68. package/dist/cjs/sync/subscriptionManager.cjs +255 -65
  69. package/dist/cjs/sync/subscriptionManager.native.js +330 -93
  70. package/dist/cjs/sync/subscriptionManager.native.js.map +1 -1
  71. package/dist/cjs/sync/types.cjs +2 -0
  72. package/dist/cjs/sync/types.native.js +2 -0
  73. package/dist/cjs/sync/types.native.js.map +1 -1
  74. package/dist/cjs/sync/virtualPageManager.cjs +9 -9
  75. package/dist/cjs/sync/virtualPageManager.native.js +5 -9
  76. package/dist/cjs/sync/virtualPageManager.native.js.map +1 -1
  77. package/dist/cjs/useLiveQuery.cjs +52 -0
  78. package/dist/cjs/useLiveQuery.native.js +59 -0
  79. package/dist/cjs/useLiveQuery.native.js.map +1 -0
  80. package/dist/cjs/util.cjs +11 -2
  81. package/dist/cjs/util.native.js +16 -2
  82. package/dist/cjs/util.native.js.map +1 -1
  83. package/dist/esm/auth.mjs +1 -1
  84. package/dist/esm/auth.mjs.map +1 -1
  85. package/dist/esm/auth.native.js.map +1 -1
  86. package/dist/esm/call.mjs +1 -1
  87. package/dist/esm/call.mjs.map +1 -1
  88. package/dist/esm/call.native.js.map +1 -1
  89. package/dist/esm/collection.mjs +18 -4
  90. package/dist/esm/collection.mjs.map +1 -1
  91. package/dist/esm/collection.native.js +18 -4
  92. package/dist/esm/collection.native.js.map +1 -1
  93. package/dist/esm/core/http.mjs +93 -10
  94. package/dist/esm/core/http.mjs.map +1 -1
  95. package/dist/esm/core/http.native.js +97 -8
  96. package/dist/esm/core/http.native.js.map +1 -1
  97. package/dist/esm/db.mjs +7 -7
  98. package/dist/esm/db.mjs.map +1 -1
  99. package/dist/esm/db.native.js +4 -4
  100. package/dist/esm/db.native.js.map +1 -1
  101. package/dist/esm/doctype.mjs +96 -39
  102. package/dist/esm/doctype.mjs.map +1 -1
  103. package/dist/esm/doctype.native.js +115 -46
  104. package/dist/esm/doctype.native.js.map +1 -1
  105. package/dist/esm/file.mjs +1 -1
  106. package/dist/esm/file.mjs.map +1 -1
  107. package/dist/esm/file.native.js.map +1 -1
  108. package/dist/esm/fixtureDb.mjs +3 -2
  109. package/dist/esm/fixtureDb.mjs.map +1 -1
  110. package/dist/esm/fixtureDb.native.js +2 -1
  111. package/dist/esm/fixtureDb.native.js.map +1 -1
  112. package/dist/esm/frappeApp.mjs +15 -14
  113. package/dist/esm/frappeApp.mjs.map +1 -1
  114. package/dist/esm/frappeApp.native.js +16 -14
  115. package/dist/esm/frappeApp.native.js.map +1 -1
  116. package/dist/esm/frappeReact.mjs +197 -19
  117. package/dist/esm/frappeReact.mjs.map +1 -1
  118. package/dist/esm/frappeReact.native.js +240 -19
  119. package/dist/esm/frappeReact.native.js.map +1 -1
  120. package/dist/esm/index.mjs +5 -4
  121. package/dist/esm/index.mjs.map +1 -1
  122. package/dist/esm/index.native.js +5 -4
  123. package/dist/esm/index.native.js.map +1 -1
  124. package/dist/esm/pacer.mjs +1 -1
  125. package/dist/esm/pacer.native.js +1 -1
  126. package/dist/esm/realtime.mjs +187 -47
  127. package/dist/esm/realtime.mjs.map +1 -1
  128. package/dist/esm/realtime.native.js +269 -49
  129. package/dist/esm/realtime.native.js.map +1 -1
  130. package/dist/esm/sync/backfill.mjs +32 -27
  131. package/dist/esm/sync/backfill.mjs.map +1 -1
  132. package/dist/esm/sync/backfill.native.js +49 -43
  133. package/dist/esm/sync/backfill.native.js.map +1 -1
  134. package/dist/esm/sync/index.mjs +90 -24
  135. package/dist/esm/sync/index.mjs.map +1 -1
  136. package/dist/esm/sync/index.native.js +112 -10
  137. package/dist/esm/sync/index.native.js.map +1 -1
  138. package/dist/esm/sync/merge.mjs +1 -1
  139. package/dist/esm/sync/merge.mjs.map +1 -1
  140. package/dist/esm/sync/merge.native.js +1 -1
  141. package/dist/esm/sync/merge.native.js.map +1 -1
  142. package/dist/esm/sync/mutationEngine.mjs +25 -19
  143. package/dist/esm/sync/mutationEngine.mjs.map +1 -1
  144. package/dist/esm/sync/mutationEngine.native.js +16 -13
  145. package/dist/esm/sync/mutationEngine.native.js.map +1 -1
  146. package/dist/esm/sync/mutationJournal.mjs +9 -4
  147. package/dist/esm/sync/mutationJournal.mjs.map +1 -1
  148. package/dist/esm/sync/mutationJournal.native.js +7 -4
  149. package/dist/esm/sync/mutationJournal.native.js.map +1 -1
  150. package/dist/esm/sync/normalizedCache.mjs +7 -3
  151. package/dist/esm/sync/normalizedCache.mjs.map +1 -1
  152. package/dist/esm/sync/normalizedCache.native.js +7 -2
  153. package/dist/esm/sync/normalizedCache.native.js.map +1 -1
  154. package/dist/esm/sync/persistence.mjs +64 -32
  155. package/dist/esm/sync/persistence.mjs.map +1 -1
  156. package/dist/esm/sync/persistence.native.js +121 -64
  157. package/dist/esm/sync/persistence.native.js.map +1 -1
  158. package/dist/esm/sync/realtime.mjs +124 -13
  159. package/dist/esm/sync/realtime.mjs.map +1 -1
  160. package/dist/esm/sync/realtime.native.js +163 -20
  161. package/dist/esm/sync/realtime.native.js.map +1 -1
  162. package/dist/esm/sync/rehydration.mjs +16 -10
  163. package/dist/esm/sync/rehydration.mjs.map +1 -1
  164. package/dist/esm/sync/rehydration.native.js +16 -14
  165. package/dist/esm/sync/rehydration.native.js.map +1 -1
  166. package/dist/esm/sync/storage.mjs +3 -3
  167. package/dist/esm/sync/storage.mjs.map +1 -1
  168. package/dist/esm/sync/storage.native.js +1 -1
  169. package/dist/esm/sync/storage.native.js.map +1 -1
  170. package/dist/esm/sync/subscriptionManager.mjs +255 -65
  171. package/dist/esm/sync/subscriptionManager.mjs.map +1 -1
  172. package/dist/esm/sync/subscriptionManager.native.js +330 -93
  173. package/dist/esm/sync/subscriptionManager.native.js.map +1 -1
  174. package/dist/esm/sync/types.mjs +2 -0
  175. package/dist/esm/sync/types.mjs.map +1 -1
  176. package/dist/esm/sync/types.native.js +2 -0
  177. package/dist/esm/sync/types.native.js.map +1 -1
  178. package/dist/esm/sync/virtualPageManager.mjs +9 -9
  179. package/dist/esm/sync/virtualPageManager.mjs.map +1 -1
  180. package/dist/esm/sync/virtualPageManager.native.js +5 -9
  181. package/dist/esm/sync/virtualPageManager.native.js.map +1 -1
  182. package/dist/esm/useLiveQuery.mjs +26 -0
  183. package/dist/esm/useLiveQuery.mjs.map +1 -0
  184. package/dist/esm/useLiveQuery.native.js +30 -0
  185. package/dist/esm/useLiveQuery.native.js.map +1 -0
  186. package/dist/esm/util.mjs +10 -2
  187. package/dist/esm/util.mjs.map +1 -1
  188. package/dist/esm/util.native.js +15 -2
  189. package/dist/esm/util.native.js.map +1 -1
  190. package/dist/jsx/auth.mjs +1 -1
  191. package/dist/jsx/auth.mjs.map +1 -1
  192. package/dist/jsx/auth.native.js.map +1 -1
  193. package/dist/jsx/call.mjs +1 -1
  194. package/dist/jsx/call.mjs.map +1 -1
  195. package/dist/jsx/call.native.js.map +1 -1
  196. package/dist/jsx/collection.mjs +18 -4
  197. package/dist/jsx/collection.mjs.map +1 -1
  198. package/dist/jsx/collection.native.js +18 -4
  199. package/dist/jsx/collection.native.js.map +1 -1
  200. package/dist/jsx/core/http.mjs +93 -10
  201. package/dist/jsx/core/http.mjs.map +1 -1
  202. package/dist/jsx/core/http.native.js +96 -7
  203. package/dist/jsx/core/http.native.js.map +1 -1
  204. package/dist/jsx/db.mjs +7 -7
  205. package/dist/jsx/db.mjs.map +1 -1
  206. package/dist/jsx/db.native.js +4 -4
  207. package/dist/jsx/db.native.js.map +1 -1
  208. package/dist/jsx/doctype.mjs +96 -39
  209. package/dist/jsx/doctype.mjs.map +1 -1
  210. package/dist/jsx/doctype.native.js +116 -46
  211. package/dist/jsx/doctype.native.js.map +1 -1
  212. package/dist/jsx/file.mjs +1 -1
  213. package/dist/jsx/file.mjs.map +1 -1
  214. package/dist/jsx/file.native.js.map +1 -1
  215. package/dist/jsx/fixtureDb.mjs +3 -2
  216. package/dist/jsx/fixtureDb.mjs.map +1 -1
  217. package/dist/jsx/fixtureDb.native.js +2 -1
  218. package/dist/jsx/fixtureDb.native.js.map +1 -1
  219. package/dist/jsx/frappeApp.mjs +15 -14
  220. package/dist/jsx/frappeApp.mjs.map +1 -1
  221. package/dist/jsx/frappeApp.native.js +16 -14
  222. package/dist/jsx/frappeApp.native.js.map +1 -1
  223. package/dist/jsx/frappeReact.mjs +197 -19
  224. package/dist/jsx/frappeReact.mjs.map +1 -1
  225. package/dist/jsx/frappeReact.native.js +241 -18
  226. package/dist/jsx/frappeReact.native.js.map +1 -1
  227. package/dist/jsx/index.js +5 -4
  228. package/dist/jsx/index.js.map +1 -1
  229. package/dist/jsx/index.mjs +5 -4
  230. package/dist/jsx/index.mjs.map +1 -1
  231. package/dist/jsx/index.native.js +9 -4
  232. package/dist/jsx/index.native.js.map +1 -1
  233. package/dist/jsx/pacer.mjs +1 -1
  234. package/dist/jsx/pacer.native.js +2 -2
  235. package/dist/jsx/pacer.native.js.map +1 -1
  236. package/dist/jsx/realtime.mjs +187 -47
  237. package/dist/jsx/realtime.mjs.map +1 -1
  238. package/dist/jsx/realtime.native.js +268 -48
  239. package/dist/jsx/realtime.native.js.map +1 -1
  240. package/dist/jsx/sync/backfill.mjs +32 -27
  241. package/dist/jsx/sync/backfill.mjs.map +1 -1
  242. package/dist/jsx/sync/backfill.native.js +49 -43
  243. package/dist/jsx/sync/backfill.native.js.map +1 -1
  244. package/dist/jsx/sync/index.mjs +90 -24
  245. package/dist/jsx/sync/index.mjs.map +1 -1
  246. package/dist/jsx/sync/index.native.js +112 -10
  247. package/dist/jsx/sync/index.native.js.map +1 -1
  248. package/dist/jsx/sync/merge.mjs +1 -1
  249. package/dist/jsx/sync/merge.mjs.map +1 -1
  250. package/dist/jsx/sync/merge.native.js +0 -3
  251. package/dist/jsx/sync/merge.native.js.map +1 -1
  252. package/dist/jsx/sync/mutationEngine.mjs +25 -19
  253. package/dist/jsx/sync/mutationEngine.mjs.map +1 -1
  254. package/dist/jsx/sync/mutationEngine.native.js +16 -13
  255. package/dist/jsx/sync/mutationEngine.native.js.map +1 -1
  256. package/dist/jsx/sync/mutationJournal.mjs +9 -4
  257. package/dist/jsx/sync/mutationJournal.mjs.map +1 -1
  258. package/dist/jsx/sync/mutationJournal.native.js +7 -4
  259. package/dist/jsx/sync/mutationJournal.native.js.map +1 -1
  260. package/dist/jsx/sync/normalizedCache.mjs +7 -3
  261. package/dist/jsx/sync/normalizedCache.mjs.map +1 -1
  262. package/dist/jsx/sync/normalizedCache.native.js +7 -2
  263. package/dist/jsx/sync/normalizedCache.native.js.map +1 -1
  264. package/dist/jsx/sync/persistence.mjs +64 -32
  265. package/dist/jsx/sync/persistence.mjs.map +1 -1
  266. package/dist/jsx/sync/persistence.native.js +120 -63
  267. package/dist/jsx/sync/persistence.native.js.map +1 -1
  268. package/dist/jsx/sync/realtime.mjs +124 -13
  269. package/dist/jsx/sync/realtime.mjs.map +1 -1
  270. package/dist/jsx/sync/realtime.native.js +163 -20
  271. package/dist/jsx/sync/realtime.native.js.map +1 -1
  272. package/dist/jsx/sync/rehydration.mjs +16 -10
  273. package/dist/jsx/sync/rehydration.mjs.map +1 -1
  274. package/dist/jsx/sync/rehydration.native.js +16 -14
  275. package/dist/jsx/sync/rehydration.native.js.map +1 -1
  276. package/dist/jsx/sync/storage.mjs +3 -3
  277. package/dist/jsx/sync/storage.mjs.map +1 -1
  278. package/dist/jsx/sync/storage.native.js +1 -1
  279. package/dist/jsx/sync/storage.native.js.map +1 -1
  280. package/dist/jsx/sync/subscriptionManager.mjs +255 -65
  281. package/dist/jsx/sync/subscriptionManager.mjs.map +1 -1
  282. package/dist/jsx/sync/subscriptionManager.native.js +330 -93
  283. package/dist/jsx/sync/subscriptionManager.native.js.map +1 -1
  284. package/dist/jsx/sync/types.mjs +2 -0
  285. package/dist/jsx/sync/types.mjs.map +1 -1
  286. package/dist/jsx/sync/types.native.js +2 -0
  287. package/dist/jsx/sync/types.native.js.map +1 -1
  288. package/dist/jsx/sync/virtualPageManager.mjs +9 -9
  289. package/dist/jsx/sync/virtualPageManager.mjs.map +1 -1
  290. package/dist/jsx/sync/virtualPageManager.native.js +5 -9
  291. package/dist/jsx/sync/virtualPageManager.native.js.map +1 -1
  292. package/dist/jsx/useLiveQuery.mjs +26 -0
  293. package/dist/jsx/useLiveQuery.mjs.map +1 -0
  294. package/dist/jsx/useLiveQuery.native.js +59 -0
  295. package/dist/jsx/useLiveQuery.native.js.map +1 -0
  296. package/dist/jsx/util.mjs +10 -2
  297. package/dist/jsx/util.mjs.map +1 -1
  298. package/dist/jsx/util.native.js +16 -2
  299. package/dist/jsx/util.native.js.map +1 -1
  300. package/package.json +20 -17
  301. package/src/auth.ts +5 -1
  302. package/src/call.ts +5 -1
  303. package/src/collection.spec.ts +55 -0
  304. package/src/collection.ts +33 -4
  305. package/src/core/http.spec.ts +66 -0
  306. package/src/core/http.ts +115 -9
  307. package/src/core/httpNative.spec.ts +234 -0
  308. package/src/core/types.ts +2 -0
  309. package/src/db.spec.ts +91 -51
  310. package/src/db.ts +27 -8
  311. package/src/doctype.spec.ts +247 -39
  312. package/src/doctype.ts +203 -53
  313. package/src/file.ts +5 -1
  314. package/src/fixtureDb.ts +13 -2
  315. package/src/frappeApp.ts +18 -19
  316. package/src/frappeReact.spec.ts +565 -1
  317. package/src/frappeReact.ts +445 -37
  318. package/src/frappeReactLiveQueryGc.spec.ts +320 -0
  319. package/src/frappeReactNative.spec.ts +65 -0
  320. package/src/index.ts +10 -9
  321. package/src/pacer.ts +1 -1
  322. package/src/realtime.spec.ts +464 -20
  323. package/src/realtime.ts +284 -46
  324. package/src/sync/backfill.spec.ts +43 -0
  325. package/src/sync/backfill.ts +59 -39
  326. package/src/sync/debug.spec.ts +36 -0
  327. package/src/sync/filterValidation.spec.ts +197 -0
  328. package/src/sync/index.ts +98 -7
  329. package/src/sync/merge.ts +3 -3
  330. package/src/sync/mutationEngine.spec.ts +36 -4
  331. package/src/sync/mutationEngine.ts +30 -11
  332. package/src/sync/mutationJournal.ts +18 -4
  333. package/src/sync/normalizedCache.spec.ts +102 -0
  334. package/src/sync/normalizedCache.ts +19 -3
  335. package/src/sync/offlineRestore.spec.ts +423 -0
  336. package/src/sync/persistence.spec.ts +39 -7
  337. package/src/sync/persistence.ts +90 -18
  338. package/src/sync/persistenceGjs.spec.ts +143 -0
  339. package/src/sync/persistenceNative.spec.ts +139 -0
  340. package/src/sync/realtime.spec.ts +18 -1
  341. package/src/sync/realtime.ts +161 -13
  342. package/src/sync/rehydration.ts +23 -5
  343. package/src/sync/storage.ts +5 -4
  344. package/src/sync/subscriptionManager.spec.ts +94 -0
  345. package/src/sync/subscriptionManager.ts +304 -82
  346. package/src/sync/syncModule.spec.ts +137 -0
  347. package/src/sync/types.ts +39 -0
  348. package/src/sync/virtualPageManager.ts +8 -4
  349. package/src/useLiveQuery.ts +58 -0
  350. package/src/util.spec.ts +35 -4
  351. package/src/util.ts +34 -7
  352. package/types/auth.d.ts +13 -0
  353. package/types/auth.d.ts.map +1 -0
  354. package/types/call.d.ts +10 -0
  355. package/types/call.d.ts.map +1 -0
  356. package/types/collection.d.ts +127 -0
  357. package/types/collection.d.ts.map +1 -0
  358. package/types/common/types.d.ts +35 -0
  359. package/types/common/types.d.ts.map +1 -0
  360. package/types/core/http.d.ts +86 -0
  361. package/types/core/http.d.ts.map +1 -0
  362. package/types/core/types.d.ts +74 -0
  363. package/types/core/types.d.ts.map +1 -0
  364. package/types/core/wire.d.ts +405 -0
  365. package/types/core/wire.d.ts.map +1 -0
  366. package/types/db.d.ts +244 -0
  367. package/types/db.d.ts.map +1 -0
  368. package/types/devtools/FrappeDevtoolsPanel.d.ts +7 -0
  369. package/types/devtools/FrappeDevtoolsPanel.d.ts.map +1 -0
  370. package/types/devtools/index.d.ts +4 -0
  371. package/types/devtools/index.d.ts.map +1 -0
  372. package/types/devtools/plugin.d.ts +9 -0
  373. package/types/devtools/plugin.d.ts.map +1 -0
  374. package/types/devtools/theme.d.ts +15 -0
  375. package/types/devtools/theme.d.ts.map +1 -0
  376. package/types/doctype.d.ts +256 -0
  377. package/types/doctype.d.ts.map +1 -0
  378. package/types/file.d.ts +15 -0
  379. package/types/file.d.ts.map +1 -0
  380. package/types/fixtureDb.d.ts +76 -0
  381. package/types/fixtureDb.d.ts.map +1 -0
  382. package/types/fixtures.d.ts +55 -0
  383. package/types/fixtures.d.ts.map +1 -0
  384. package/types/frappeApp.d.ts +45 -0
  385. package/types/frappeApp.d.ts.map +1 -0
  386. package/types/frappeReact.d.ts +270 -0
  387. package/types/frappeReact.d.ts.map +1 -0
  388. package/types/index.d.ts +44 -0
  389. package/types/index.d.ts.map +1 -0
  390. package/types/optimistic.d.ts +38 -0
  391. package/types/optimistic.d.ts.map +1 -0
  392. package/types/pacer.d.ts +193 -0
  393. package/types/pacer.d.ts.map +1 -0
  394. package/types/plugin/index.d.ts +11 -0
  395. package/types/plugin/index.d.ts.map +1 -0
  396. package/types/realtime.d.ts +121 -0
  397. package/types/realtime.d.ts.map +1 -0
  398. package/types/sync/backfill.d.ts +60 -0
  399. package/types/sync/backfill.d.ts.map +1 -0
  400. package/types/sync/filters.d.ts +101 -0
  401. package/types/sync/filters.d.ts.map +1 -0
  402. package/types/sync/index.d.ts +181 -0
  403. package/types/sync/index.d.ts.map +1 -0
  404. package/types/sync/merge.d.ts +59 -0
  405. package/types/sync/merge.d.ts.map +1 -0
  406. package/types/sync/mutationEngine.d.ts +117 -0
  407. package/types/sync/mutationEngine.d.ts.map +1 -0
  408. package/types/sync/mutationJournal.d.ts +60 -0
  409. package/types/sync/mutationJournal.d.ts.map +1 -0
  410. package/types/sync/normalizedCache.d.ts +59 -0
  411. package/types/sync/normalizedCache.d.ts.map +1 -0
  412. package/types/sync/persistence.d.ts +185 -0
  413. package/types/sync/persistence.d.ts.map +1 -0
  414. package/types/sync/realtime.d.ts +121 -0
  415. package/types/sync/realtime.d.ts.map +1 -0
  416. package/types/sync/rehydration.d.ts +109 -0
  417. package/types/sync/rehydration.d.ts.map +1 -0
  418. package/types/sync/storage.d.ts +65 -0
  419. package/types/sync/storage.d.ts.map +1 -0
  420. package/types/sync/subscriptionManager.d.ts +161 -0
  421. package/types/sync/subscriptionManager.d.ts.map +1 -0
  422. package/types/sync/types.d.ts +435 -0
  423. package/types/sync/types.d.ts.map +1 -0
  424. package/types/sync/virtualPageManager.d.ts +190 -0
  425. package/types/sync/virtualPageManager.d.ts.map +1 -0
  426. package/types/useLiveQuery.d.ts +16 -0
  427. package/types/useLiveQuery.d.ts.map +1 -0
  428. package/types/util.d.ts +24 -0
  429. package/types/util.d.ts.map +1 -0
  430. package/dist/cjs/auth.spec.cjs +0 -322
  431. package/dist/cjs/auth.spec.native.js +0 -329
  432. package/dist/cjs/auth.spec.native.js.map +0 -1
  433. package/dist/cjs/call.spec.cjs +0 -427
  434. package/dist/cjs/call.spec.native.js +0 -430
  435. package/dist/cjs/call.spec.native.js.map +0 -1
  436. package/dist/cjs/collection.spec.cjs +0 -186
  437. package/dist/cjs/collection.spec.native.js +0 -216
  438. package/dist/cjs/collection.spec.native.js.map +0 -1
  439. package/dist/cjs/common/types.spec.cjs +0 -266
  440. package/dist/cjs/common/types.spec.native.js +0 -271
  441. package/dist/cjs/common/types.spec.native.js.map +0 -1
  442. package/dist/cjs/core/http.spec.cjs +0 -1259
  443. package/dist/cjs/core/http.spec.native.js +0 -1401
  444. package/dist/cjs/core/http.spec.native.js.map +0 -1
  445. package/dist/cjs/core/wire.spec.cjs +0 -478
  446. package/dist/cjs/core/wire.spec.native.js +0 -482
  447. package/dist/cjs/core/wire.spec.native.js.map +0 -1
  448. package/dist/cjs/db.spec.cjs +0 -862
  449. package/dist/cjs/db.spec.native.js +0 -865
  450. package/dist/cjs/db.spec.native.js.map +0 -1
  451. package/dist/cjs/doctype.spec.cjs +0 -460
  452. package/dist/cjs/doctype.spec.native.js +0 -538
  453. package/dist/cjs/doctype.spec.native.js.map +0 -1
  454. package/dist/cjs/file.spec.cjs +0 -315
  455. package/dist/cjs/file.spec.native.js +0 -342
  456. package/dist/cjs/file.spec.native.js.map +0 -1
  457. package/dist/cjs/frappeApp.spec.cjs +0 -306
  458. package/dist/cjs/frappeApp.spec.native.js +0 -308
  459. package/dist/cjs/frappeApp.spec.native.js.map +0 -1
  460. package/dist/cjs/frappeReact.spec.cjs +0 -531
  461. package/dist/cjs/frappeReact.spec.native.js +0 -670
  462. package/dist/cjs/frappeReact.spec.native.js.map +0 -1
  463. package/dist/cjs/optimistic.spec.cjs +0 -11
  464. package/dist/cjs/optimistic.spec.native.js +0 -19
  465. package/dist/cjs/optimistic.spec.native.js.map +0 -1
  466. package/dist/cjs/pacer.spec.cjs +0 -470
  467. package/dist/cjs/pacer.spec.native.js +0 -537
  468. package/dist/cjs/pacer.spec.native.js.map +0 -1
  469. package/dist/cjs/realtime.spec.cjs +0 -326
  470. package/dist/cjs/realtime.spec.native.js +0 -392
  471. package/dist/cjs/realtime.spec.native.js.map +0 -1
  472. package/dist/cjs/sync/backfill.spec.cjs +0 -586
  473. package/dist/cjs/sync/backfill.spec.native.js +0 -712
  474. package/dist/cjs/sync/backfill.spec.native.js.map +0 -1
  475. package/dist/cjs/sync/debug.spec.cjs +0 -125
  476. package/dist/cjs/sync/debug.spec.native.js +0 -133
  477. package/dist/cjs/sync/debug.spec.native.js.map +0 -1
  478. package/dist/cjs/sync/filters.spec.cjs +0 -168
  479. package/dist/cjs/sync/filters.spec.native.js +0 -173
  480. package/dist/cjs/sync/filters.spec.native.js.map +0 -1
  481. package/dist/cjs/sync/merge.spec.cjs +0 -908
  482. package/dist/cjs/sync/merge.spec.native.js +0 -937
  483. package/dist/cjs/sync/merge.spec.native.js.map +0 -1
  484. package/dist/cjs/sync/multiOrderBy.spec.cjs +0 -165
  485. package/dist/cjs/sync/multiOrderBy.spec.native.js +0 -229
  486. package/dist/cjs/sync/multiOrderBy.spec.native.js.map +0 -1
  487. package/dist/cjs/sync/mutationEngine.spec.cjs +0 -1158
  488. package/dist/cjs/sync/mutationEngine.spec.native.js +0 -1173
  489. package/dist/cjs/sync/mutationEngine.spec.native.js.map +0 -1
  490. package/dist/cjs/sync/mutationJournal.spec.cjs +0 -330
  491. package/dist/cjs/sync/mutationJournal.spec.native.js +0 -333
  492. package/dist/cjs/sync/mutationJournal.spec.native.js.map +0 -1
  493. package/dist/cjs/sync/mutations.spec.cjs +0 -327
  494. package/dist/cjs/sync/mutations.spec.native.js +0 -330
  495. package/dist/cjs/sync/mutations.spec.native.js.map +0 -1
  496. package/dist/cjs/sync/normalizedCache.spec.cjs +0 -302
  497. package/dist/cjs/sync/normalizedCache.spec.native.js +0 -311
  498. package/dist/cjs/sync/normalizedCache.spec.native.js.map +0 -1
  499. package/dist/cjs/sync/persistence.spec.cjs +0 -562
  500. package/dist/cjs/sync/persistence.spec.native.js +0 -572
  501. package/dist/cjs/sync/persistence.spec.native.js.map +0 -1
  502. package/dist/cjs/sync/realtime.spec.cjs +0 -499
  503. package/dist/cjs/sync/realtime.spec.native.js +0 -512
  504. package/dist/cjs/sync/realtime.spec.native.js.map +0 -1
  505. package/dist/cjs/sync/rehydration.spec.cjs +0 -731
  506. package/dist/cjs/sync/rehydration.spec.native.js +0 -736
  507. package/dist/cjs/sync/rehydration.spec.native.js.map +0 -1
  508. package/dist/cjs/sync/storage.spec.cjs +0 -446
  509. package/dist/cjs/sync/storage.spec.native.js +0 -470
  510. package/dist/cjs/sync/storage.spec.native.js.map +0 -1
  511. package/dist/cjs/sync/subscriptionManager.spec.cjs +0 -1102
  512. package/dist/cjs/sync/subscriptionManager.spec.native.js +0 -1136
  513. package/dist/cjs/sync/subscriptionManager.spec.native.js.map +0 -1
  514. package/dist/cjs/sync/subscriptions.spec.cjs +0 -937
  515. package/dist/cjs/sync/subscriptions.spec.native.js +0 -969
  516. package/dist/cjs/sync/subscriptions.spec.native.js.map +0 -1
  517. package/dist/cjs/sync/syncModule.spec.cjs +0 -206
  518. package/dist/cjs/sync/syncModule.spec.native.js +0 -222
  519. package/dist/cjs/sync/syncModule.spec.native.js.map +0 -1
  520. package/dist/cjs/sync/types.spec.cjs +0 -246
  521. package/dist/cjs/sync/types.spec.native.js +0 -256
  522. package/dist/cjs/sync/types.spec.native.js.map +0 -1
  523. package/dist/cjs/sync/virtualPageManager.spec.cjs +0 -801
  524. package/dist/cjs/sync/virtualPageManager.spec.native.js +0 -873
  525. package/dist/cjs/sync/virtualPageManager.spec.native.js.map +0 -1
  526. package/dist/cjs/util.spec.cjs +0 -43
  527. package/dist/cjs/util.spec.native.js +0 -48
  528. package/dist/cjs/util.spec.native.js.map +0 -1
  529. package/dist/esm/auth.spec.mjs +0 -323
  530. package/dist/esm/auth.spec.mjs.map +0 -1
  531. package/dist/esm/auth.spec.native.js +0 -327
  532. package/dist/esm/auth.spec.native.js.map +0 -1
  533. package/dist/esm/call.spec.mjs +0 -428
  534. package/dist/esm/call.spec.mjs.map +0 -1
  535. package/dist/esm/call.spec.native.js +0 -428
  536. package/dist/esm/call.spec.native.js.map +0 -1
  537. package/dist/esm/collection.spec.mjs +0 -187
  538. package/dist/esm/collection.spec.mjs.map +0 -1
  539. package/dist/esm/collection.spec.native.js +0 -214
  540. package/dist/esm/collection.spec.native.js.map +0 -1
  541. package/dist/esm/common/types.spec.mjs +0 -267
  542. package/dist/esm/common/types.spec.mjs.map +0 -1
  543. package/dist/esm/common/types.spec.native.js +0 -269
  544. package/dist/esm/common/types.spec.native.js.map +0 -1
  545. package/dist/esm/core/http.spec.mjs +0 -1260
  546. package/dist/esm/core/http.spec.mjs.map +0 -1
  547. package/dist/esm/core/http.spec.native.js +0 -1399
  548. package/dist/esm/core/http.spec.native.js.map +0 -1
  549. package/dist/esm/core/wire.spec.mjs +0 -479
  550. package/dist/esm/core/wire.spec.mjs.map +0 -1
  551. package/dist/esm/core/wire.spec.native.js +0 -480
  552. package/dist/esm/core/wire.spec.native.js.map +0 -1
  553. package/dist/esm/db.spec.mjs +0 -863
  554. package/dist/esm/db.spec.mjs.map +0 -1
  555. package/dist/esm/db.spec.native.js +0 -863
  556. package/dist/esm/db.spec.native.js.map +0 -1
  557. package/dist/esm/doctype.spec.mjs +0 -461
  558. package/dist/esm/doctype.spec.mjs.map +0 -1
  559. package/dist/esm/doctype.spec.native.js +0 -536
  560. package/dist/esm/doctype.spec.native.js.map +0 -1
  561. package/dist/esm/file.spec.mjs +0 -316
  562. package/dist/esm/file.spec.mjs.map +0 -1
  563. package/dist/esm/file.spec.native.js +0 -340
  564. package/dist/esm/file.spec.native.js.map +0 -1
  565. package/dist/esm/frappeApp.spec.mjs +0 -307
  566. package/dist/esm/frappeApp.spec.mjs.map +0 -1
  567. package/dist/esm/frappeApp.spec.native.js +0 -306
  568. package/dist/esm/frappeApp.spec.native.js.map +0 -1
  569. package/dist/esm/frappeReact.spec.mjs +0 -532
  570. package/dist/esm/frappeReact.spec.mjs.map +0 -1
  571. package/dist/esm/frappeReact.spec.native.js +0 -668
  572. package/dist/esm/frappeReact.spec.native.js.map +0 -1
  573. package/dist/esm/optimistic.spec.mjs +0 -12
  574. package/dist/esm/optimistic.spec.mjs.map +0 -1
  575. package/dist/esm/optimistic.spec.native.js +0 -17
  576. package/dist/esm/optimistic.spec.native.js.map +0 -1
  577. package/dist/esm/pacer.spec.mjs +0 -447
  578. package/dist/esm/pacer.spec.mjs.map +0 -1
  579. package/dist/esm/pacer.spec.native.js +0 -511
  580. package/dist/esm/pacer.spec.native.js.map +0 -1
  581. package/dist/esm/realtime.spec.mjs +0 -327
  582. package/dist/esm/realtime.spec.mjs.map +0 -1
  583. package/dist/esm/realtime.spec.native.js +0 -390
  584. package/dist/esm/realtime.spec.native.js.map +0 -1
  585. package/dist/esm/sync/backfill.spec.mjs +0 -563
  586. package/dist/esm/sync/backfill.spec.mjs.map +0 -1
  587. package/dist/esm/sync/backfill.spec.native.js +0 -686
  588. package/dist/esm/sync/backfill.spec.native.js.map +0 -1
  589. package/dist/esm/sync/debug.spec.mjs +0 -102
  590. package/dist/esm/sync/debug.spec.mjs.map +0 -1
  591. package/dist/esm/sync/debug.spec.native.js +0 -107
  592. package/dist/esm/sync/debug.spec.native.js.map +0 -1
  593. package/dist/esm/sync/filters.spec.mjs +0 -169
  594. package/dist/esm/sync/filters.spec.mjs.map +0 -1
  595. package/dist/esm/sync/filters.spec.native.js +0 -171
  596. package/dist/esm/sync/filters.spec.native.js.map +0 -1
  597. package/dist/esm/sync/merge.spec.mjs +0 -909
  598. package/dist/esm/sync/merge.spec.mjs.map +0 -1
  599. package/dist/esm/sync/merge.spec.native.js +0 -935
  600. package/dist/esm/sync/merge.spec.native.js.map +0 -1
  601. package/dist/esm/sync/multiOrderBy.spec.mjs +0 -166
  602. package/dist/esm/sync/multiOrderBy.spec.mjs.map +0 -1
  603. package/dist/esm/sync/multiOrderBy.spec.native.js +0 -227
  604. package/dist/esm/sync/multiOrderBy.spec.native.js.map +0 -1
  605. package/dist/esm/sync/mutationEngine.spec.mjs +0 -1159
  606. package/dist/esm/sync/mutationEngine.spec.mjs.map +0 -1
  607. package/dist/esm/sync/mutationEngine.spec.native.js +0 -1171
  608. package/dist/esm/sync/mutationEngine.spec.native.js.map +0 -1
  609. package/dist/esm/sync/mutationJournal.spec.mjs +0 -331
  610. package/dist/esm/sync/mutationJournal.spec.mjs.map +0 -1
  611. package/dist/esm/sync/mutationJournal.spec.native.js +0 -331
  612. package/dist/esm/sync/mutationJournal.spec.native.js.map +0 -1
  613. package/dist/esm/sync/mutations.spec.mjs +0 -328
  614. package/dist/esm/sync/mutations.spec.mjs.map +0 -1
  615. package/dist/esm/sync/mutations.spec.native.js +0 -328
  616. package/dist/esm/sync/mutations.spec.native.js.map +0 -1
  617. package/dist/esm/sync/normalizedCache.spec.mjs +0 -303
  618. package/dist/esm/sync/normalizedCache.spec.mjs.map +0 -1
  619. package/dist/esm/sync/normalizedCache.spec.native.js +0 -309
  620. package/dist/esm/sync/normalizedCache.spec.native.js.map +0 -1
  621. package/dist/esm/sync/persistence.spec.mjs +0 -563
  622. package/dist/esm/sync/persistence.spec.mjs.map +0 -1
  623. package/dist/esm/sync/persistence.spec.native.js +0 -570
  624. package/dist/esm/sync/persistence.spec.native.js.map +0 -1
  625. package/dist/esm/sync/realtime.spec.mjs +0 -500
  626. package/dist/esm/sync/realtime.spec.mjs.map +0 -1
  627. package/dist/esm/sync/realtime.spec.native.js +0 -510
  628. package/dist/esm/sync/realtime.spec.native.js.map +0 -1
  629. package/dist/esm/sync/rehydration.spec.mjs +0 -732
  630. package/dist/esm/sync/rehydration.spec.mjs.map +0 -1
  631. package/dist/esm/sync/rehydration.spec.native.js +0 -734
  632. package/dist/esm/sync/rehydration.spec.native.js.map +0 -1
  633. package/dist/esm/sync/storage.spec.mjs +0 -423
  634. package/dist/esm/sync/storage.spec.mjs.map +0 -1
  635. package/dist/esm/sync/storage.spec.native.js +0 -444
  636. package/dist/esm/sync/storage.spec.native.js.map +0 -1
  637. package/dist/esm/sync/subscriptionManager.spec.mjs +0 -1079
  638. package/dist/esm/sync/subscriptionManager.spec.mjs.map +0 -1
  639. package/dist/esm/sync/subscriptionManager.spec.native.js +0 -1110
  640. package/dist/esm/sync/subscriptionManager.spec.native.js.map +0 -1
  641. package/dist/esm/sync/subscriptions.spec.mjs +0 -914
  642. package/dist/esm/sync/subscriptions.spec.mjs.map +0 -1
  643. package/dist/esm/sync/subscriptions.spec.native.js +0 -943
  644. package/dist/esm/sync/subscriptions.spec.native.js.map +0 -1
  645. package/dist/esm/sync/syncModule.spec.mjs +0 -207
  646. package/dist/esm/sync/syncModule.spec.mjs.map +0 -1
  647. package/dist/esm/sync/syncModule.spec.native.js +0 -220
  648. package/dist/esm/sync/syncModule.spec.native.js.map +0 -1
  649. package/dist/esm/sync/types.spec.mjs +0 -247
  650. package/dist/esm/sync/types.spec.mjs.map +0 -1
  651. package/dist/esm/sync/types.spec.native.js +0 -254
  652. package/dist/esm/sync/types.spec.native.js.map +0 -1
  653. package/dist/esm/sync/virtualPageManager.spec.mjs +0 -802
  654. package/dist/esm/sync/virtualPageManager.spec.mjs.map +0 -1
  655. package/dist/esm/sync/virtualPageManager.spec.native.js +0 -871
  656. package/dist/esm/sync/virtualPageManager.spec.native.js.map +0 -1
  657. package/dist/esm/util.spec.mjs +0 -20
  658. package/dist/esm/util.spec.mjs.map +0 -1
  659. package/dist/esm/util.spec.native.js +0 -22
  660. package/dist/esm/util.spec.native.js.map +0 -1
  661. package/dist/jsx/auth.spec.mjs +0 -323
  662. package/dist/jsx/auth.spec.mjs.map +0 -1
  663. package/dist/jsx/auth.spec.native.js +0 -329
  664. package/dist/jsx/auth.spec.native.js.map +0 -1
  665. package/dist/jsx/call.spec.mjs +0 -428
  666. package/dist/jsx/call.spec.mjs.map +0 -1
  667. package/dist/jsx/call.spec.native.js +0 -430
  668. package/dist/jsx/call.spec.native.js.map +0 -1
  669. package/dist/jsx/collection.spec.mjs +0 -187
  670. package/dist/jsx/collection.spec.mjs.map +0 -1
  671. package/dist/jsx/collection.spec.native.js +0 -216
  672. package/dist/jsx/collection.spec.native.js.map +0 -1
  673. package/dist/jsx/common/types.spec.mjs +0 -267
  674. package/dist/jsx/common/types.spec.mjs.map +0 -1
  675. package/dist/jsx/common/types.spec.native.js +0 -271
  676. package/dist/jsx/common/types.spec.native.js.map +0 -1
  677. package/dist/jsx/core/http.spec.mjs +0 -1260
  678. package/dist/jsx/core/http.spec.mjs.map +0 -1
  679. package/dist/jsx/core/http.spec.native.js +0 -1401
  680. package/dist/jsx/core/http.spec.native.js.map +0 -1
  681. package/dist/jsx/core/wire.spec.mjs +0 -479
  682. package/dist/jsx/core/wire.spec.mjs.map +0 -1
  683. package/dist/jsx/core/wire.spec.native.js +0 -482
  684. package/dist/jsx/core/wire.spec.native.js.map +0 -1
  685. package/dist/jsx/db.spec.mjs +0 -863
  686. package/dist/jsx/db.spec.mjs.map +0 -1
  687. package/dist/jsx/db.spec.native.js +0 -865
  688. package/dist/jsx/db.spec.native.js.map +0 -1
  689. package/dist/jsx/doctype.spec.mjs +0 -461
  690. package/dist/jsx/doctype.spec.mjs.map +0 -1
  691. package/dist/jsx/doctype.spec.native.js +0 -538
  692. package/dist/jsx/doctype.spec.native.js.map +0 -1
  693. package/dist/jsx/file.spec.mjs +0 -316
  694. package/dist/jsx/file.spec.mjs.map +0 -1
  695. package/dist/jsx/file.spec.native.js +0 -342
  696. package/dist/jsx/file.spec.native.js.map +0 -1
  697. package/dist/jsx/frappeApp.spec.mjs +0 -307
  698. package/dist/jsx/frappeApp.spec.mjs.map +0 -1
  699. package/dist/jsx/frappeApp.spec.native.js +0 -308
  700. package/dist/jsx/frappeApp.spec.native.js.map +0 -1
  701. package/dist/jsx/frappeReact.spec.mjs +0 -532
  702. package/dist/jsx/frappeReact.spec.mjs.map +0 -1
  703. package/dist/jsx/frappeReact.spec.native.js +0 -670
  704. package/dist/jsx/frappeReact.spec.native.js.map +0 -1
  705. package/dist/jsx/optimistic.spec.mjs +0 -12
  706. package/dist/jsx/optimistic.spec.mjs.map +0 -1
  707. package/dist/jsx/optimistic.spec.native.js +0 -19
  708. package/dist/jsx/optimistic.spec.native.js.map +0 -1
  709. package/dist/jsx/pacer.spec.mjs +0 -447
  710. package/dist/jsx/pacer.spec.mjs.map +0 -1
  711. package/dist/jsx/pacer.spec.native.js +0 -537
  712. package/dist/jsx/pacer.spec.native.js.map +0 -1
  713. package/dist/jsx/realtime.spec.mjs +0 -327
  714. package/dist/jsx/realtime.spec.mjs.map +0 -1
  715. package/dist/jsx/realtime.spec.native.js +0 -392
  716. package/dist/jsx/realtime.spec.native.js.map +0 -1
  717. package/dist/jsx/sync/backfill.spec.mjs +0 -563
  718. package/dist/jsx/sync/backfill.spec.mjs.map +0 -1
  719. package/dist/jsx/sync/backfill.spec.native.js +0 -712
  720. package/dist/jsx/sync/backfill.spec.native.js.map +0 -1
  721. package/dist/jsx/sync/debug.spec.mjs +0 -102
  722. package/dist/jsx/sync/debug.spec.mjs.map +0 -1
  723. package/dist/jsx/sync/debug.spec.native.js +0 -133
  724. package/dist/jsx/sync/debug.spec.native.js.map +0 -1
  725. package/dist/jsx/sync/filters.spec.mjs +0 -169
  726. package/dist/jsx/sync/filters.spec.mjs.map +0 -1
  727. package/dist/jsx/sync/filters.spec.native.js +0 -173
  728. package/dist/jsx/sync/filters.spec.native.js.map +0 -1
  729. package/dist/jsx/sync/merge.spec.mjs +0 -909
  730. package/dist/jsx/sync/merge.spec.mjs.map +0 -1
  731. package/dist/jsx/sync/merge.spec.native.js +0 -937
  732. package/dist/jsx/sync/merge.spec.native.js.map +0 -1
  733. package/dist/jsx/sync/multiOrderBy.spec.mjs +0 -166
  734. package/dist/jsx/sync/multiOrderBy.spec.mjs.map +0 -1
  735. package/dist/jsx/sync/multiOrderBy.spec.native.js +0 -229
  736. package/dist/jsx/sync/multiOrderBy.spec.native.js.map +0 -1
  737. package/dist/jsx/sync/mutationEngine.spec.mjs +0 -1159
  738. package/dist/jsx/sync/mutationEngine.spec.mjs.map +0 -1
  739. package/dist/jsx/sync/mutationEngine.spec.native.js +0 -1173
  740. package/dist/jsx/sync/mutationEngine.spec.native.js.map +0 -1
  741. package/dist/jsx/sync/mutationJournal.spec.mjs +0 -331
  742. package/dist/jsx/sync/mutationJournal.spec.mjs.map +0 -1
  743. package/dist/jsx/sync/mutationJournal.spec.native.js +0 -333
  744. package/dist/jsx/sync/mutationJournal.spec.native.js.map +0 -1
  745. package/dist/jsx/sync/mutations.spec.mjs +0 -328
  746. package/dist/jsx/sync/mutations.spec.mjs.map +0 -1
  747. package/dist/jsx/sync/mutations.spec.native.js +0 -330
  748. package/dist/jsx/sync/mutations.spec.native.js.map +0 -1
  749. package/dist/jsx/sync/normalizedCache.spec.mjs +0 -303
  750. package/dist/jsx/sync/normalizedCache.spec.mjs.map +0 -1
  751. package/dist/jsx/sync/normalizedCache.spec.native.js +0 -311
  752. package/dist/jsx/sync/normalizedCache.spec.native.js.map +0 -1
  753. package/dist/jsx/sync/persistence.spec.mjs +0 -563
  754. package/dist/jsx/sync/persistence.spec.mjs.map +0 -1
  755. package/dist/jsx/sync/persistence.spec.native.js +0 -572
  756. package/dist/jsx/sync/persistence.spec.native.js.map +0 -1
  757. package/dist/jsx/sync/realtime.spec.mjs +0 -500
  758. package/dist/jsx/sync/realtime.spec.mjs.map +0 -1
  759. package/dist/jsx/sync/realtime.spec.native.js +0 -512
  760. package/dist/jsx/sync/realtime.spec.native.js.map +0 -1
  761. package/dist/jsx/sync/rehydration.spec.mjs +0 -732
  762. package/dist/jsx/sync/rehydration.spec.mjs.map +0 -1
  763. package/dist/jsx/sync/rehydration.spec.native.js +0 -736
  764. package/dist/jsx/sync/rehydration.spec.native.js.map +0 -1
  765. package/dist/jsx/sync/storage.spec.mjs +0 -423
  766. package/dist/jsx/sync/storage.spec.mjs.map +0 -1
  767. package/dist/jsx/sync/storage.spec.native.js +0 -470
  768. package/dist/jsx/sync/storage.spec.native.js.map +0 -1
  769. package/dist/jsx/sync/subscriptionManager.spec.mjs +0 -1079
  770. package/dist/jsx/sync/subscriptionManager.spec.mjs.map +0 -1
  771. package/dist/jsx/sync/subscriptionManager.spec.native.js +0 -1136
  772. package/dist/jsx/sync/subscriptionManager.spec.native.js.map +0 -1
  773. package/dist/jsx/sync/subscriptions.spec.mjs +0 -914
  774. package/dist/jsx/sync/subscriptions.spec.mjs.map +0 -1
  775. package/dist/jsx/sync/subscriptions.spec.native.js +0 -969
  776. package/dist/jsx/sync/subscriptions.spec.native.js.map +0 -1
  777. package/dist/jsx/sync/syncModule.spec.mjs +0 -207
  778. package/dist/jsx/sync/syncModule.spec.mjs.map +0 -1
  779. package/dist/jsx/sync/syncModule.spec.native.js +0 -222
  780. package/dist/jsx/sync/syncModule.spec.native.js.map +0 -1
  781. package/dist/jsx/sync/types.spec.mjs +0 -247
  782. package/dist/jsx/sync/types.spec.mjs.map +0 -1
  783. package/dist/jsx/sync/types.spec.native.js +0 -256
  784. package/dist/jsx/sync/types.spec.native.js.map +0 -1
  785. package/dist/jsx/sync/virtualPageManager.spec.mjs +0 -802
  786. package/dist/jsx/sync/virtualPageManager.spec.mjs.map +0 -1
  787. package/dist/jsx/sync/virtualPageManager.spec.native.js +0 -873
  788. package/dist/jsx/sync/virtualPageManager.spec.native.js.map +0 -1
  789. package/dist/jsx/util.spec.mjs +0 -20
  790. package/dist/jsx/util.spec.mjs.map +0 -1
  791. package/dist/jsx/util.spec.native.js +0 -48
  792. package/dist/jsx/util.spec.native.js.map +0 -1
package/README.md CHANGED
@@ -8,12 +8,16 @@ Real-time sync for Frappe with **TanStack DB integration**, **virtual pagination
8
8
 
9
9
  Comprehensive technical reference containing architecture, implementation details, server specification, and production deployment.
10
10
 
11
+ ### Live protocol spec (of record)
12
+
13
+ The wire protocol — change stream ordering, compound cursors, tombstones, idempotency, and Keycloak auth — is specified in `agent-os/specs/2026-08-12-frappe-live-protocol/spec.md` in the [multiplatform.one repo](https://gitlab.com/bitspur/frappe/multiplatform.one). Where this README and the spec disagree, the spec wins.
14
+
11
15
  ## Core Features
12
16
 
13
17
  ### Virtual Pagination
14
18
 
15
19
  - Progressive cache with page islands for efficient large datasets
16
- - Cursor-based pagination via `frappe_live` extension
20
+ - Cursor-based pagination via the Frappe Live extension app (`live`)
17
21
  - Opt-in via `progressive: true` on subscription queries
18
22
  - Automatic consistency across pages
19
23
 
@@ -21,7 +25,7 @@ Comprehensive technical reference containing architecture, implementation detail
21
25
 
22
26
  - **Version checking** with 409/412 errors (OCC via `If-Match` header)
23
27
  - **Three-way merge** conflict resolution with field-level strategies
24
- - **Idempotency** via `Idempotency-Key` headers for safe retries
28
+ - **Idempotency** via `Idempotency-Key` headers the server dedupes replayed create/delete requests (24h retention)
25
29
  - **CRDT-like field merging** (sum, max, min, union-set, custom)
26
30
 
27
31
  ### Offline Support
@@ -53,15 +57,33 @@ Comprehensive technical reference containing architecture, implementation detail
53
57
  npm install @multiplatform.one/frappe
54
58
  ```
55
59
 
60
+ ## Authentication
61
+
62
+ `auth.token` accepts a string **or an async getter** — pass a getter so rotated tokens are resolved lazily per request (e.g. a Keycloak access token from `@multiplatform.one/keycloak`'s `getKeycloakBearerToken()`):
63
+
64
+ ```typescript
65
+ import { AuthType, FrappeApp } from "@multiplatform.one/frappe";
66
+
67
+ const app = new FrappeApp("https://your-instance.frappe.cloud", {
68
+ useToken: true,
69
+ type: AuthType.Bearer,
70
+ token: async () => (await getToken()) ?? "", // empty = guest, no bare header
71
+ });
72
+ ```
73
+
74
+ The same `Authorization` header authenticates the realtime socket. Browsers cannot set headers on a WebSocket handshake, so on web the client handshakes over Socket.IO polling (the XHR carries the header) and upgrades to websocket afterwards; Node/native attach it to the websocket directly. On `disconnect`, `connect_error`, and every reconnect attempt the token getter is re-resolved into the live socket manager, so subscriptions and rooms survive token expiry mid-session (`updateAuth()` covers explicit rotation). With Keycloak, the bench validates the JWT via the `frappe_keycloak` app — REST and socket connections take the same validation path.
75
+
56
76
  ## React Hooks
57
77
 
58
78
  ### When to Use What
59
79
 
60
- | Hook | Use Case | Updates |
61
- | ----------------------- | -------------------------------------------------------------- | ------------ |
62
- | `useFrappeCollection` | Creates a TanStack DB collection backed by a Frappe doctype | Auto-updates |
63
- | `useLiveQuery` | Reactive TanStack DB query with `.where()`, `.orderBy()`, etc. | Auto-updates |
64
- | `useFrappeInfiniteList` | Infinite scroll with full sync (realtime, offline, CDC) | Auto-updates |
80
+ | Hook | Use Case | Updates |
81
+ | ----------------------- | ---------------------------------------------------------------------------- | --------------------- |
82
+ | `useFrappeCollection` | Creates a TanStack DB collection backed by a Frappe doctype | Auto-updates |
83
+ | `useLiveQuery` | Reactive TanStack DB query with `.where()`, `.orderBy()`, etc. | Auto-updates |
84
+ | `useFrappeInfiniteList` | Infinite scroll with full sync (realtime, offline, CDC) | Auto-updates |
85
+ | `useLinkSearch` | Debounced backend link search (`frappe.desk.search.search_link`) for pickers | Per query (debounced) |
86
+ | `useLinkTitle` | Resolve a link value's display title (`get_link_title`, session-cached) | On value change |
65
87
 
66
88
  ### useFrappeCollection + useLiveQuery
67
89
 
@@ -204,14 +226,17 @@ const sync = new SyncModule(db, realtime, {
204
226
 
205
227
  ## Server Requirements
206
228
 
207
- The SDK works with standard Frappe REST API for reads and uses the `frappe_live` extension app for enhanced write operations. The extension provides:
229
+ The SDK works with standard Frappe REST API for reads and uses the Frappe Live extension app (`live`, endpoints `live.live.api.*`) for enhanced write operations. The extension provides:
208
230
 
209
- - **Idempotent create/delete** via `Idempotency-Key` header
210
- - **OCC update** via `If-Match` header (409/412 on version mismatch)
231
+ - **Idempotent create/delete** the server records each successful `create_doc`/`delete_doc` outcome against its `Idempotency-Key` (scoped per user and per endpoint, 24h TTL) and a retry with the same key returns the recorded outcome instead of re-executing. The SDK sends its `client_mutation_id` as this header on every mutation.
232
+ - **OCC update** via `If-Match` header (409/412 on version mismatch) — update retries are guarded by version checking, not idempotency dedup
211
233
  - **Cursor-based pagination** via `get_list_with_cursor`
212
234
  - **Batch mutations** via `batch_mutations`
213
- - **CDC endpoints** via `list_since` and `backfill`
214
- - **Tombstone tracking** via `Deleted Document` doctype
235
+ - **CDC endpoints** via `list_since` and `backfill` — one merged change stream of rows + deletions, ordered by an opaque compound `"timestamp|name"` checkpoint that never advances past an undelivered change
236
+ - **Tombstone feed** names-only deletions sourced from frappe core's `Deleted Document` rows (30-day retention; older cursors full-refresh) plus a `doc_deleted` realtime event after the deleting transaction commits
237
+ - **Permission-checked reads** — the change feed goes through frappe's permission engine; unauthorized doctypes raise instead of leaking rows
238
+
239
+ For Keycloak bearer auth, the bench additionally needs the `frappe_keycloak` app (JWT validation + role mapping on REST and socket connections).
215
240
 
216
241
  ## Production Configuration
217
242
 
@@ -219,6 +244,7 @@ The SDK works with standard Frappe REST API for reads and uses the `frappe_live`
219
244
  const sync = new SyncModule(db, realtime, {
220
245
  persistKey: "my-app", // Enable IndexedDB persistence
221
246
  cdcInterval: 30000, // Periodic CDC every 30s (safety net)
247
+ backfillMaxPages: 20, // Max CDC pages drained per backfill (bounds both drain paths)
222
248
  maxCacheSize: 5000, // LRU eviction threshold
223
249
  mutationTTL: 24 * 60 * 60 * 1000, // 24hr mutation journal TTL
224
250
  enableBatching: false, // Opt-in mutation batching
package/dist/cjs/auth.cjs CHANGED
@@ -26,10 +26,10 @@ __export(auth_exports, {
26
26
  });
27
27
  module.exports = __toCommonJS(auth_exports);
28
28
  class AuthModule {
29
+ http;
29
30
  constructor(http) {
30
31
  this.http = http;
31
32
  }
32
- http;
33
33
  async loginWithUsernamePassword(input) {
34
34
  return this.http.post("/api/method/login", {
35
35
  usr: input.username,
@@ -1 +1 @@
1
- {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","auth_exports","__export","AuthModule","module","exports","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj"],"sources":["../../src/auth.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,YAAA;AAAAC,QAAA,CAAAD,YAAA;EAAAE,UAAA,EAAAA,CAAA,KAAAA;AAAA;AAEOC,MAAM,CAAAC,OAAA,GAAWT,YAAA,CAAAK,YAAA;AAAA,SACtBK,iBAA+CA,CAAAC,QAAA,EAAAC,WAAA;EAAlB,MAAAD,QAAA,YAAAC,WAAA;IAAmB,UAAAC,SAAA;EAAnB;AAAA;AAG3B,SAAAC,iBAAsBA,CAAAC,MAAA,EAAAC,KAAA;EAAqB,KACzC,IAAKC,CAAA,MAAMA,CAAA,GAAAD,KAAA,CAAAE,MAAA,EAAAD,CAAA;IAAA,IACXE,UAAW,GAAAH,KAAA,CAAAC,CAAA;IACbE,UAAC,CAAAC,UAAA,GAAAD,UAAA,CAAAC,UAAA;IACHD,UAAA,CAAAE,YAAA;IAEA,IAAM,WAAAF,UAAmC,EAAAA,UAAA,CAAAG,QAAA;IACvCC,MAAA,CAAAC,cACc,CAAAT,MAA8B,EAAAI,UAAA,CAAAM,GAAA,EAAAN,UAAA;EAG9C;AAAA;AAGE,SAAAO,aAAiBA,CAAAd,WAAK,EAAAe,UAAoB,EAAAC,WAAA;EAC5C,IAAAD,UAAA,EAAAb,iBAAA,CAAAF,WAAA,CAAAiB,SAAA,EAAAF,UAAA;EAEA,IAAAC,WAAM,EAAAd,iBAA8B,CAAAF,WAAA,EAAAgB,WAAA;EAClC,OAAAhB,WAAY;AAAsE;AAC1E,SACPkB,iBAAAC,GAAA,EAAAN,GAAA,EAAArB,KAAA;EACH,IAAAqB,GAAA,IAAAM,GAAA;IACFR,MAAA,CAAAC,cAAA,CAAAO,GAAA,EAAAN,GAAA","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","auth_exports","__export","AuthModule","module","exports","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj"],"sources":["../../src/auth.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,YAAA;AAAAC,QAAA,CAAAD,YAAA;EAAAE,UAAA,EAAAA,CAAA,KAAAA;AAAA;AAEOC,MAAM,CAAAC,OAAA,GAAWT,YAAA,CAAAK,YAAA;AAAA,SACLK,kBAAAC,QAAA,EAAAC,WAAA;EAEjB,MAAAD,QAAY,YAAkBC,WAAA;IAC5B,MAAK,IAAAC,SAAO;EACd;AAAA;AAGE,SAAAC,iBAAsBA,CAAAC,MAAA,EAAAC,KAAA;EAAqB,KACzC,IAAKC,CAAA,MAAMA,CAAA,GAAAD,KAAA,CAAAE,MAAA,EAAAD,CAAA;IAAA,IACXE,UAAW,GAAAH,KAAA,CAAAC,CAAA;IACbE,UAAC,CAAAC,UAAA,GAAAD,UAAA,CAAAC,UAAA;IACHD,UAAA,CAAAE,YAAA;IAEA,IAAM,WAAAF,UAAmC,EAAAA,UAAA,CAAAG,QAAA;IACvCC,MAAA,CAAAC,cACc,CAAAT,MAA8B,EAAAI,UAAA,CAAAM,GAAA,EAAAN,UAAA;EAG9C;AAAA;AAGE,SAAAO,aAAiBA,CAAAd,WAAK,EAAAe,UAAoB,EAAAC,WAAA;EAC5C,IAAAD,UAAA,EAAAb,iBAAA,CAAAF,WAAA,CAAAiB,SAAA,EAAAF,UAAA;EAEA,IAAAC,WAAM,EAAAd,iBAA8B,CAAAF,WAAA,EAAAgB,WAAA;EAClC,OAAAhB,WAAY;AAAsE;AAC1E,SACPkB,iBAAAC,GAAA,EAAAN,GAAA,EAAArB,KAAA;EACH,IAAAqB,GAAA,IAAAM,GAAA;IACFR,MAAA,CAAAC,cAAA,CAAAO,GAAA,EAAAN,GAAA","ignoreList":[]}
package/dist/cjs/call.cjs CHANGED
@@ -26,10 +26,10 @@ __export(call_exports, {
26
26
  });
27
27
  module.exports = __toCommonJS(call_exports);
28
28
  class CallModule {
29
+ http;
29
30
  constructor(http) {
30
31
  this.http = http;
31
32
  }
32
- http;
33
33
  get(method, params) {
34
34
  return this.http.get(`/api/method/${method}`, params);
35
35
  }
@@ -1 +1 @@
1
- {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","call_exports","__export","CallModule","module","exports","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype"],"sources":["../../src/call.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,YAAA;AAAAC,QAAA,CAAAD,YAAA;EAAAE,UAAA,EAAAA,CAAA,KAAAA;AAAA;AAEOC,MAAM,CAAAC,OAAA,GAAWT,YAAA,CAAAK,YAAA;AAAA,SACtBK,iBAA+CA,CAAAC,QAAA,EAAAC,WAAA;EAAlB,MAAAD,QAAA,YAAAC,WAAA;IAAmB,UAAAC,SAAA;EAAnB;AAAA;AAG3B,SAAAC,iBAAwBA,CAAAC,MAAA,EAAAC,KAAe;EACzC,SAAAC,CAAA,MAAAA,CAAA,GAAAD,KAAA,CAAAE,MAAA,EAAAD,CAAA;IAEA,IAAQE,UAAgB,GAAYH,KAAA,CAAAC,CAAA;IAClCE,UAAO,CAAAC,UAAU,GAAQD,UAAA,CAAAC,UAAqB,IAAI,KAAI;IACxDD,UAAA,CAAAE,YAAA;IAEA,IAAO,OAAgB,IAAAF,UAAY,EAAAA,UAAA,CAAAG,QAAA;IACjCC,MAAA,CAAOC,cAAiB,CAAAT,MAAA,EAAAI,UAAe,CAAAM,GAAM,EAAIN,UAAI;EACvD;AAAA;AAGE,SAAAO,aAAiBA,CAAAd,WAAU,EAAAe,UAAe,EAAAC,WAAc;EAC1D,IAAAD,UAAA,EAAAb,iBAAA,CAAAF,WAAA,CAAAiB,SAAA,EAAAF,UAAA;EACF,IAAAC,WAAA,EAAAd,iBAAA,CAAAF,WAAA,EAAAgB,WAAA","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","call_exports","__export","CallModule","module","exports","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype"],"sources":["../../src/call.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,GAAAC,GAAA,IAAAC,WAAA,CAAAC,SAAA;EAAAC,KAAA;AAAA,IAAAH,GAAA;AAAA,IAAAI,YAAA;AAAAC,QAAA,CAAAD,YAAA;EAAAE,UAAA,EAAAA,CAAA,KAAAA;AAAA;AAEOC,MAAM,CAAAC,OAAA,GAAWT,YAAA,CAAAK,YAAA;AAAA,SACLK,kBAAAC,QAAA,EAAAC,WAAA;EAEjB,MAAAD,QAAY,YAAkBC,WAAA;IAC5B,MAAK,IAAAC,SAAO;EACd;AAAA;AAGE,SAAAC,iBAAwBA,CAAAC,MAAA,EAAAC,KAAe;EACzC,SAAAC,CAAA,MAAAA,CAAA,GAAAD,KAAA,CAAAE,MAAA,EAAAD,CAAA;IAEA,IAAQE,UAAgB,GAAYH,KAAA,CAAAC,CAAA;IAClCE,UAAO,CAAAC,UAAU,GAAQD,UAAA,CAAAC,UAAqB,IAAI,KAAI;IACxDD,UAAA,CAAAE,YAAA;IAEA,IAAO,OAAgB,IAAAF,UAAY,EAAAA,UAAA,CAAAG,QAAA;IACjCC,MAAA,CAAOC,cAAiB,CAAAT,MAAA,EAAAI,UAAe,CAAAM,GAAM,EAAIN,UAAI;EACvD;AAAA;AAGE,SAAAO,aAAiBA,CAAAd,WAAU,EAAAe,UAAe,EAAAC,WAAc;EAC1D,IAAAD,UAAA,EAAAb,iBAAA,CAAAF,WAAA,CAAAiB,SAAA,EAAAF,UAAA;EACF,IAAAC,WAAA,EAAAd,iBAAA,CAAAF,WAAA,EAAAgB,WAAA","ignoreList":[]}
@@ -36,7 +36,8 @@ function frappeCollectionOptions(doctype, config) {
36
36
  fields,
37
37
  filters,
38
38
  orderBy,
39
- limit
39
+ limit,
40
+ onSyncError
40
41
  } = config;
41
42
  const syncFn = params => {
42
43
  const {
@@ -48,6 +49,7 @@ function frappeCollectionOptions(doctype, config) {
48
49
  let subscriptionId;
49
50
  let storeUnsubscribe;
50
51
  let lastKnownNames = /* @__PURE__ */new Set();
52
+ let cancelled = false;
51
53
  async function initSync() {
52
54
  try {
53
55
  const query = {
@@ -58,6 +60,10 @@ function frappeCollectionOptions(doctype, config) {
58
60
  limit
59
61
  };
60
62
  const result = await syncModule.subscribe(query);
63
+ if (cancelled) {
64
+ syncModule.unsubscribe(result.subscriptionId);
65
+ return;
66
+ }
61
67
  subscriptionId = result.subscriptionId;
62
68
  const initialDocs = syncModule.getDocsForSubscription(subscriptionId);
63
69
  if (initialDocs.length > 0) {
@@ -104,13 +110,16 @@ function frappeCollectionOptions(doctype, config) {
104
110
  lastKnownNames = currentNames;
105
111
  });
106
112
  } catch (error) {
113
+ if (cancelled) return;
107
114
  console.error(`[frappe-collection] Initial sync failed for ${doctype}:`, error);
115
+ onSyncError?.(error);
108
116
  } finally {
109
- markReady();
117
+ if (!cancelled) markReady();
110
118
  }
111
119
  }
112
120
  initSync();
113
121
  return () => {
122
+ cancelled = true;
114
123
  if (storeUnsubscribe) {
115
124
  storeUnsubscribe();
116
125
  storeUnsubscribe = void 0;
@@ -195,6 +204,7 @@ function fixtureCollectionOptions(doctype, config) {
195
204
  commit,
196
205
  markReady
197
206
  } = params;
207
+ let cancelled = false;
198
208
  async function initSync() {
199
209
  try {
200
210
  const orderByForFixture = orderBy && !Array.isArray(orderBy) ? {
@@ -211,6 +221,7 @@ function fixtureCollectionOptions(doctype, config) {
211
221
  limitStart,
212
222
  limit
213
223
  });
224
+ if (cancelled) return;
214
225
  if (docs.length > 0) {
215
226
  begin();
216
227
  for (const doc of docs) {
@@ -226,13 +237,16 @@ function fixtureCollectionOptions(doctype, config) {
226
237
  commit();
227
238
  }
228
239
  } catch (error) {
240
+ if (cancelled) return;
229
241
  console.error(`[frappe-collection] Fixture sync failed for ${doctype}:`, error);
230
242
  } finally {
231
- markReady();
243
+ if (!cancelled) markReady();
232
244
  }
233
245
  }
234
246
  initSync();
235
- return () => {};
247
+ return () => {
248
+ cancelled = true;
249
+ };
236
250
  };
237
251
  return {
238
252
  id: config.id ?? doctype,
@@ -39,7 +39,8 @@ function frappeCollectionOptions(doctype, config) {
39
39
  fields,
40
40
  filters,
41
41
  orderBy,
42
- limit
42
+ limit,
43
+ onSyncError
43
44
  } = config;
44
45
  var syncFn = function syncFn2(params) {
45
46
  var {
@@ -51,6 +52,7 @@ function frappeCollectionOptions(doctype, config) {
51
52
  var subscriptionId;
52
53
  var storeUnsubscribe;
53
54
  var lastKnownNames = /* @__PURE__ */new Set();
55
+ var cancelled = false;
54
56
  async function initSync() {
55
57
  try {
56
58
  var query = {
@@ -61,6 +63,10 @@ function frappeCollectionOptions(doctype, config) {
61
63
  limit
62
64
  };
63
65
  var result = await syncModule.subscribe(query);
66
+ if (cancelled) {
67
+ syncModule.unsubscribe(result.subscriptionId);
68
+ return;
69
+ }
64
70
  subscriptionId = result.subscriptionId;
65
71
  var initialDocs = syncModule.getDocsForSubscription(subscriptionId);
66
72
  if (initialDocs.length > 0) {
@@ -166,13 +172,16 @@ function frappeCollectionOptions(doctype, config) {
166
172
  lastKnownNames = currentNames;
167
173
  });
168
174
  } catch (error) {
175
+ if (cancelled) return;
169
176
  console.error(`[frappe-collection] Initial sync failed for ${doctype}:`, error);
177
+ onSyncError === null || onSyncError === void 0 ? void 0 : onSyncError(error);
170
178
  } finally {
171
- markReady();
179
+ if (!cancelled) markReady();
172
180
  }
173
181
  }
174
182
  initSync();
175
183
  return function () {
184
+ cancelled = true;
176
185
  if (storeUnsubscribe) {
177
186
  storeUnsubscribe();
178
187
  storeUnsubscribe = void 0;
@@ -326,6 +335,7 @@ function fixtureCollectionOptions(doctype, config) {
326
335
  commit,
327
336
  markReady
328
337
  } = params;
338
+ var cancelled = false;
329
339
  async function initSync() {
330
340
  try {
331
341
  var orderByForFixture = orderBy && !Array.isArray(orderBy) ? {
@@ -344,6 +354,7 @@ function fixtureCollectionOptions(doctype, config) {
344
354
  limitStart,
345
355
  limit
346
356
  });
357
+ if (cancelled) return;
347
358
  if (docs.length > 0) {
348
359
  begin();
349
360
  var _iteratorNormalCompletion = true,
@@ -378,13 +389,16 @@ function fixtureCollectionOptions(doctype, config) {
378
389
  commit();
379
390
  }
380
391
  } catch (error) {
392
+ if (cancelled) return;
381
393
  console.error(`[frappe-collection] Fixture sync failed for ${doctype}:`, error);
382
394
  } finally {
383
- markReady();
395
+ if (!cancelled) markReady();
384
396
  }
385
397
  }
386
398
  initSync();
387
- return function () {};
399
+ return function () {
400
+ cancelled = true;
401
+ };
388
402
  };
389
403
  return {
390
404
  id: (_config_id = config.id) !== null && _config_id !== void 0 ? _config_id : doctype,
@@ -1 +1 @@
1
- {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","collection_exports","__export","createFixtureCollection","createFrappeCollection","fixtureCollectionOptions","frappeCollectionOptions","module","exports","import_db","require","import_types","doctype","config","_config_id","sync","syncModule","fields","filters","orderBy","limit","syncFn","syncFn2","params","begin","write","commit","markReady","subscriptionId","storeUnsubscribe","lastKnownNames","Set","initSync","query","result","subscribe","initialDocs","getDocsForSubscription","length","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","doc","type","add","name","err","return","subscribeStore","currentDocs","currentNames","map","d","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","doc2","has","_iteratorNormalCompletion1","_didIteratorError1","_iteratorError1","_iterator1","_step1","error","console","unsubscribe","id","getKey","onInsert","param","transaction","mutations","mutation","_ref","_crypto_randomUUID","_crypto","modified","mutate","mutationId","crypto","randomUUID","call","Math","random","toString","substring","operation","Operation","Create"],"sources":["../../src/collection.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","collection_exports","__export","createFixtureCollection","createFrappeCollection","fixtureCollectionOptions","frappeCollectionOptions","module","exports","import_db","require","import_types","doctype","config","_config_id","sync","syncModule","fields","filters","orderBy","limit","onSyncError","syncFn","syncFn2","params","begin","write","commit","markReady","subscriptionId","storeUnsubscribe","lastKnownNames","Set","cancelled","initSync","query","result","subscribe","unsubscribe","initialDocs","getDocsForSubscription","length","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","doc","type","add","name","err","return","subscribeStore","currentDocs","currentNames","map","d","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_iterator2","_step2","doc2","has","_iteratorNormalCompletion1","_didIteratorError1","_iteratorError1","_iterator1","_step1","error","console","id","getKey","onInsert","param","transaction","mutations","mutation","_ref","_crypto_randomUUID","_crypto","modified","mutate","mutationId","crypto","randomUUID","call","Math","random","toString","substring","operation","Operation","Create"],"sources":["../../src/collection.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -42,7 +42,22 @@ const defaultRetryConfig = {
42
42
  retryOnNetworkError: true,
43
43
  retryStatusCodes: [408, 429, 500, 502, 503, 504]
44
44
  };
45
+ function isAbortError(err, signal) {
46
+ if (signal?.aborted) return true;
47
+ return err instanceof Error && err.name === "AbortError";
48
+ }
45
49
  class HttpClient {
50
+ retryConfig;
51
+ // Language preference for Accept-Language header (used in SSR / React Native)
52
+ _language;
53
+ /** Server-bootstrapped CSRF token for React Native cookie auth (see ensureNativeCsrfToken). */
54
+ csrfToken;
55
+ /** True once a native CSRF bootstrap attempt completed (even if it yielded no token). */
56
+ csrfBootstrapDone = false;
57
+ /** In-flight CSRF bootstrap, deduped across concurrent mutating requests. */
58
+ csrfBootstrap;
59
+ baseURL;
60
+ auth;
46
61
  constructor(baseURL, auth, retryConfig) {
47
62
  this.baseURL = baseURL;
48
63
  this.auth = auth;
@@ -51,11 +66,6 @@ class HttpClient {
51
66
  ...retryConfig
52
67
  };
53
68
  }
54
- baseURL;
55
- auth;
56
- retryConfig;
57
- // Language preference for Accept-Language header (used in SSR / React Native)
58
- _language;
59
69
  /** Set language preference for Accept-Language header on all requests. */
60
70
  setLanguage(lang) {
61
71
  this._language = lang;
@@ -76,6 +86,71 @@ class HttpClient {
76
86
  value: lang
77
87
  });
78
88
  }
89
+ /**
90
+ * React Native cookie-auth CSRF bootstrap.
91
+ *
92
+ * RN's fetch sends the OS cookie jar (so cookie-auth sessions work), but
93
+ * JS cannot READ those cookies — the platform `getCookie` shim is an
94
+ * in-memory map that never sees the `sid`/CSRF cookies — so mutating
95
+ * requests would 400 once the session has a CSRF token. Fetch the token
96
+ * from the server instead and cache it per client:
97
+ *
98
+ * 1. `GET /api/method/frappe.sessions.get_csrf_token` — whitelisted on
99
+ * newer frappe versions; cheap JSON round-trip.
100
+ * 2. Fallback: `GET /app` and parse the `frappe.csrf_token = "…"` boot
101
+ * script — works on every frappe (this repo's bench does NOT
102
+ * whitelist the RPC above) and also generates the token server-side
103
+ * when the session lacks one.
104
+ *
105
+ * Resolves undefined when neither source works (e.g. website-only session
106
+ * without desk access); requests then proceed without the header, which
107
+ * frappe accepts for sessions that have no CSRF token yet. The cache is
108
+ * dropped on auth change and on a 400 from a mutating request so a
109
+ * rotated session re-bootstraps.
110
+ */
111
+ async ensureNativeCsrfToken() {
112
+ if (this.csrfBootstrapDone) return this.csrfToken;
113
+ if (!this.csrfBootstrap) {
114
+ this.csrfBootstrap = this.fetchNativeCsrfToken().then(token => {
115
+ this.csrfToken = token;
116
+ this.csrfBootstrapDone = true;
117
+ }).finally(() => {
118
+ this.csrfBootstrap = void 0;
119
+ });
120
+ }
121
+ await this.csrfBootstrap;
122
+ return this.csrfToken;
123
+ }
124
+ async fetchNativeCsrfToken() {
125
+ try {
126
+ const rpcUrl = new URL("/api/method/frappe.sessions.get_csrf_token", this.baseURL).toString();
127
+ const res = await fetch(rpcUrl, {
128
+ method: "GET",
129
+ credentials: "include"
130
+ });
131
+ if (res.ok) {
132
+ const payload = await res.json();
133
+ if (typeof payload?.message === "string" && payload.message) return payload.message;
134
+ }
135
+ } catch {}
136
+ try {
137
+ const appUrl = new URL("/app", this.baseURL).toString();
138
+ const res = await fetch(appUrl, {
139
+ method: "GET",
140
+ credentials: "include"
141
+ });
142
+ if (res.ok) {
143
+ const html = await res.text();
144
+ const match = html.match(/frappe\.csrf_token\s*=\s*"([^"]+)"/);
145
+ if (match?.[1]) return match[1];
146
+ }
147
+ } catch {}
148
+ return void 0;
149
+ }
150
+ invalidateNativeCsrfToken() {
151
+ this.csrfToken = void 0;
152
+ this.csrfBootstrapDone = false;
153
+ }
79
154
  async getAuthHeaders() {
80
155
  if (!this.auth?.useToken) return {};
81
156
  const raw = typeof this.auth.token === "function" ? await this.auth.token() : this.auth?.token;
@@ -165,7 +240,8 @@ class HttpClient {
165
240
  headers.set("Accept-Language", lang);
166
241
  }
167
242
  if (!this.auth?.useToken && (0, import_util.isBrowser)() && method !== import_types.HttpMethod.Get) {
168
- const csrf = (0, import_platform.getCookie)("frappe-csrf-token") || (0, import_platform.getCookie)("csrf_token") || globalThis.frappe?.csrf_token;
243
+ let csrf = (0, import_platform.getCookie)("frappe-csrf-token") || (0, import_platform.getCookie)("csrf_token") || globalThis.frappe?.csrf_token;
244
+ if (!csrf && import_platform.isNative) csrf = await this.ensureNativeCsrfToken();
169
245
  if (csrf) headers.set("X-Frappe-CSRF-Token", csrf);
170
246
  }
171
247
  const makeRequest = () => {
@@ -173,7 +249,8 @@ class HttpClient {
173
249
  method,
174
250
  headers,
175
251
  credentials: this.auth?.useToken ? "omit" : "include",
176
- body
252
+ body,
253
+ signal: request?.signal
177
254
  });
178
255
  };
179
256
  let lastError;
@@ -186,6 +263,9 @@ class HttpClient {
186
263
  const payload2 = contentType3?.includes("application/json") ? await res.json() : await res.text();
187
264
  const message = payload2 && (payload2.message || payload2.exc || payload2._server_messages) || res.statusText;
188
265
  const err = new import_types.FrappeError(message, res.status, payload2);
266
+ if (import_platform.isNative && res.status === 400 && !this.auth?.useToken && method !== import_types.HttpMethod.Get) {
267
+ this.invalidateNativeCsrfToken();
268
+ }
189
269
  if (this.shouldRetryError(err, attempt)) {
190
270
  lastError = err;
191
271
  attempt++;
@@ -205,6 +285,7 @@ class HttpClient {
205
285
  _res: res
206
286
  };
207
287
  } catch (err) {
288
+ if (isAbortError(err, request?.signal)) throw err;
208
289
  if (this.shouldRetryError(err, attempt)) {
209
290
  lastError = err;
210
291
  attempt++;
@@ -218,10 +299,11 @@ class HttpClient {
218
299
  }
219
300
  throw lastError;
220
301
  }
221
- get(path, params, headers) {
302
+ get(path, params, headers, signal) {
222
303
  const qs = params ? `?${new URLSearchParams(normalizeParams(params)).toString()}` : "";
223
304
  return this.request(import_types.HttpMethod.Get, `${path}${qs}`, {
224
- headers
305
+ headers,
306
+ signal
225
307
  });
226
308
  }
227
309
  post(path, body, headers) {
@@ -253,6 +335,7 @@ class HttpClient {
253
335
  }
254
336
  updateAuth(auth) {
255
337
  this.auth = auth;
338
+ this.invalidateNativeCsrfToken();
256
339
  }
257
340
  }
258
341
  function normalizeParams(params) {