document-drive 4.1.0-dev.7 → 4.1.0-dev.70

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 (489) hide show
  1. package/dist/index.d.ts +17 -30
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +17 -19
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/cache/index.d.ts +5 -0
  6. package/dist/src/cache/index.d.ts.map +1 -0
  7. package/dist/src/cache/index.js +5 -0
  8. package/dist/src/cache/index.js.map +1 -0
  9. package/dist/src/cache/lru.d.ts +2 -13
  10. package/dist/src/cache/lru.d.ts.map +1 -1
  11. package/dist/src/cache/lru.js +1 -2
  12. package/dist/src/cache/lru.js.map +1 -1
  13. package/dist/src/cache/memory.d.ts +3 -14
  14. package/dist/src/cache/memory.d.ts.map +1 -1
  15. package/dist/src/cache/memory.js +2 -3
  16. package/dist/src/cache/memory.js.map +1 -1
  17. package/dist/src/cache/redis.d.ts +3 -5
  18. package/dist/src/cache/redis.d.ts.map +1 -1
  19. package/dist/src/cache/redis.js +2 -4
  20. package/dist/src/cache/redis.js.map +1 -1
  21. package/dist/src/cache/types.d.ts +23 -2
  22. package/dist/src/cache/types.d.ts.map +1 -1
  23. package/dist/src/cache/util.d.ts +1 -1
  24. package/dist/src/cache/util.d.ts.map +1 -1
  25. package/dist/src/drive-document-model/constants.d.ts +2 -1
  26. package/dist/src/drive-document-model/constants.d.ts.map +1 -1
  27. package/dist/src/drive-document-model/constants.js +2 -2
  28. package/dist/src/drive-document-model/constants.js.map +1 -1
  29. package/dist/src/drive-document-model/gen/document-model.d.ts +2 -2
  30. package/dist/src/drive-document-model/gen/document-model.d.ts.map +1 -1
  31. package/dist/src/drive-document-model/gen/document-model.js +1 -1
  32. package/dist/src/drive-document-model/gen/document-model.js.map +1 -1
  33. package/dist/src/drive-document-model/gen/drive/actions.d.ts +12 -2
  34. package/dist/src/drive-document-model/gen/drive/actions.d.ts.map +1 -1
  35. package/dist/src/drive-document-model/gen/drive/creators.d.ts +2 -2
  36. package/dist/src/drive-document-model/gen/drive/creators.d.ts.map +1 -1
  37. package/dist/src/drive-document-model/gen/drive/creators.js +10 -10
  38. package/dist/src/drive-document-model/gen/drive/creators.js.map +1 -1
  39. package/dist/src/drive-document-model/gen/drive/index.d.ts +2 -0
  40. package/dist/src/drive-document-model/gen/drive/index.d.ts.map +1 -0
  41. package/dist/src/drive-document-model/gen/drive/index.js +2 -0
  42. package/dist/src/drive-document-model/gen/drive/index.js.map +1 -0
  43. package/dist/src/drive-document-model/gen/drive/types.d.ts +2 -0
  44. package/dist/src/drive-document-model/gen/drive/types.d.ts.map +1 -0
  45. package/dist/src/drive-document-model/gen/drive/types.js +2 -0
  46. package/dist/src/drive-document-model/gen/drive/types.js.map +1 -0
  47. package/dist/src/drive-document-model/gen/index.d.ts +7 -4
  48. package/dist/src/drive-document-model/gen/index.d.ts.map +1 -1
  49. package/dist/src/drive-document-model/gen/index.js +7 -4
  50. package/dist/src/drive-document-model/gen/index.js.map +1 -1
  51. package/dist/src/drive-document-model/gen/node/actions.d.ts +11 -2
  52. package/dist/src/drive-document-model/gen/node/actions.d.ts.map +1 -1
  53. package/dist/src/drive-document-model/gen/node/creators.d.ts +1 -2
  54. package/dist/src/drive-document-model/gen/node/creators.d.ts.map +1 -1
  55. package/dist/src/drive-document-model/gen/node/creators.js +9 -9
  56. package/dist/src/drive-document-model/gen/node/creators.js.map +1 -1
  57. package/dist/src/drive-document-model/gen/node/index.d.ts +2 -0
  58. package/dist/src/drive-document-model/gen/node/index.d.ts.map +1 -0
  59. package/dist/src/drive-document-model/gen/node/index.js +2 -0
  60. package/dist/src/drive-document-model/gen/node/index.js.map +1 -0
  61. package/dist/src/drive-document-model/gen/node/types.d.ts +2 -0
  62. package/dist/src/drive-document-model/gen/node/types.d.ts.map +1 -0
  63. package/dist/src/drive-document-model/gen/node/types.js +2 -0
  64. package/dist/src/drive-document-model/gen/node/types.js.map +1 -0
  65. package/dist/src/drive-document-model/gen/ph-factories.d.ts +12 -0
  66. package/dist/src/drive-document-model/gen/ph-factories.d.ts.map +1 -0
  67. package/dist/src/drive-document-model/gen/ph-factories.js +46 -0
  68. package/dist/src/drive-document-model/gen/ph-factories.js.map +1 -0
  69. package/dist/src/drive-document-model/gen/reducer.d.ts +3 -3
  70. package/dist/src/drive-document-model/gen/reducer.d.ts.map +1 -1
  71. package/dist/src/drive-document-model/gen/reducer.js +34 -36
  72. package/dist/src/drive-document-model/gen/reducer.js.map +1 -1
  73. package/dist/src/drive-document-model/gen/schema/index.d.ts +2 -2
  74. package/dist/src/drive-document-model/gen/schema/index.d.ts.map +1 -1
  75. package/dist/src/drive-document-model/gen/schema/index.js +2 -2
  76. package/dist/src/drive-document-model/gen/schema/index.js.map +1 -1
  77. package/dist/src/drive-document-model/gen/schema/types.d.ts +8 -3
  78. package/dist/src/drive-document-model/gen/schema/types.d.ts.map +1 -1
  79. package/dist/src/drive-document-model/gen/schema/zod.d.ts +28 -28
  80. package/dist/src/drive-document-model/gen/schema/zod.d.ts.map +1 -1
  81. package/dist/src/drive-document-model/gen/schema/zod.js.map +1 -1
  82. package/dist/src/drive-document-model/gen/types.d.ts +7 -8
  83. package/dist/src/drive-document-model/gen/types.d.ts.map +1 -1
  84. package/dist/src/drive-document-model/gen/types.js +3 -1
  85. package/dist/src/drive-document-model/gen/types.js.map +1 -1
  86. package/dist/src/drive-document-model/gen/utils.d.ts +7 -9
  87. package/dist/src/drive-document-model/gen/utils.d.ts.map +1 -1
  88. package/dist/src/drive-document-model/gen/utils.js +21 -37
  89. package/dist/src/drive-document-model/gen/utils.js.map +1 -1
  90. package/dist/src/drive-document-model/index.d.ts +4 -1
  91. package/dist/src/drive-document-model/index.d.ts.map +1 -1
  92. package/dist/src/drive-document-model/index.js +4 -1
  93. package/dist/src/drive-document-model/index.js.map +1 -1
  94. package/dist/src/drive-document-model/module.d.ts +2 -27
  95. package/dist/src/drive-document-model/module.d.ts.map +1 -1
  96. package/dist/src/drive-document-model/module.js +17 -16
  97. package/dist/src/drive-document-model/module.js.map +1 -1
  98. package/dist/src/drive-document-model/src/index.d.ts +3 -0
  99. package/dist/src/drive-document-model/src/index.d.ts.map +1 -0
  100. package/dist/src/drive-document-model/src/index.js +3 -0
  101. package/dist/src/drive-document-model/src/index.js.map +1 -0
  102. package/dist/src/drive-document-model/src/reducers/drive.d.ts +2 -2
  103. package/dist/src/drive-document-model/src/reducers/drive.d.ts.map +1 -1
  104. package/dist/src/drive-document-model/src/reducers/drive.js +1 -1
  105. package/dist/src/drive-document-model/src/reducers/drive.js.map +1 -1
  106. package/dist/src/drive-document-model/src/reducers/index.d.ts +3 -0
  107. package/dist/src/drive-document-model/src/reducers/index.d.ts.map +1 -0
  108. package/dist/src/drive-document-model/src/reducers/index.js +3 -0
  109. package/dist/src/drive-document-model/src/reducers/index.js.map +1 -0
  110. package/dist/src/drive-document-model/src/reducers/node.d.ts +2 -2
  111. package/dist/src/drive-document-model/src/reducers/node.d.ts.map +1 -1
  112. package/dist/src/drive-document-model/src/reducers/node.js +15 -4
  113. package/dist/src/drive-document-model/src/reducers/node.js.map +1 -1
  114. package/dist/src/drive-document-model/src/tests/actions.test.js +20 -22
  115. package/dist/src/drive-document-model/src/tests/actions.test.js.map +1 -1
  116. package/dist/src/drive-document-model/src/tests/base.test.js +12 -52
  117. package/dist/src/drive-document-model/src/tests/base.test.js.map +1 -1
  118. package/dist/src/drive-document-model/src/tests/document-model.test.js +3 -3
  119. package/dist/src/drive-document-model/src/tests/document-model.test.js.map +1 -1
  120. package/dist/src/drive-document-model/src/tests/drive.test.js +12 -15
  121. package/dist/src/drive-document-model/src/tests/drive.test.js.map +1 -1
  122. package/dist/src/drive-document-model/src/tests/generate-mock.d.ts +5 -0
  123. package/dist/src/drive-document-model/src/tests/generate-mock.d.ts.map +1 -0
  124. package/dist/src/drive-document-model/src/tests/generate-mock.js +5 -0
  125. package/dist/src/drive-document-model/src/tests/generate-mock.js.map +1 -0
  126. package/dist/src/drive-document-model/src/tests/node.test.js +75 -112
  127. package/dist/src/drive-document-model/src/tests/node.test.js.map +1 -1
  128. package/dist/src/drive-document-model/src/tests/test-factories.d.ts +9 -0
  129. package/dist/src/drive-document-model/src/tests/test-factories.d.ts.map +1 -0
  130. package/dist/src/drive-document-model/src/tests/test-factories.js +17 -0
  131. package/dist/src/drive-document-model/src/tests/test-factories.js.map +1 -0
  132. package/dist/src/drive-document-model/src/tests/utils.test.js +1 -1
  133. package/dist/src/drive-document-model/src/tests/utils.test.js.map +1 -1
  134. package/dist/src/drive-document-model/src/types.d.ts +8 -0
  135. package/dist/src/drive-document-model/src/types.d.ts.map +1 -0
  136. package/dist/src/drive-document-model/src/types.js +2 -0
  137. package/dist/src/drive-document-model/src/types.js.map +1 -0
  138. package/dist/src/drive-document-model/src/utils.d.ts +2 -7
  139. package/dist/src/drive-document-model/src/utils.d.ts.map +1 -1
  140. package/dist/src/drive-document-model/src/utils.js +4 -0
  141. package/dist/src/drive-document-model/src/utils.js.map +1 -1
  142. package/dist/src/drive-document-model/types.d.ts +10 -0
  143. package/dist/src/drive-document-model/types.d.ts.map +1 -0
  144. package/dist/src/drive-document-model/types.js +3 -0
  145. package/dist/src/drive-document-model/types.js.map +1 -0
  146. package/dist/src/processors/index.d.ts +4 -0
  147. package/dist/src/processors/index.d.ts.map +1 -0
  148. package/dist/src/processors/index.js +4 -0
  149. package/dist/src/processors/index.js.map +1 -0
  150. package/dist/src/processors/processor-manager.d.ts +1 -2
  151. package/dist/src/processors/processor-manager.d.ts.map +1 -1
  152. package/dist/src/processors/processor-manager.js +4 -5
  153. package/dist/src/processors/processor-manager.js.map +1 -1
  154. package/dist/src/processors/relational.d.ts +4 -17
  155. package/dist/src/processors/relational.d.ts.map +1 -1
  156. package/dist/src/processors/relational.js +4 -7
  157. package/dist/src/processors/relational.js.map +1 -1
  158. package/dist/src/processors/types.d.ts +18 -8
  159. package/dist/src/processors/types.d.ts.map +1 -1
  160. package/dist/src/processors/utils.d.ts +1 -2
  161. package/dist/src/processors/utils.d.ts.map +1 -1
  162. package/dist/src/processors/utils.js +0 -2
  163. package/dist/src/processors/utils.js.map +1 -1
  164. package/dist/src/queue/base.d.ts +1 -1
  165. package/dist/src/queue/base.d.ts.map +1 -1
  166. package/dist/src/queue/event.d.ts +4 -5
  167. package/dist/src/queue/event.d.ts.map +1 -1
  168. package/dist/src/queue/event.js +10 -8
  169. package/dist/src/queue/event.js.map +1 -1
  170. package/dist/src/queue/index.d.ts +5 -0
  171. package/dist/src/queue/index.d.ts.map +1 -0
  172. package/dist/src/queue/index.js +5 -0
  173. package/dist/src/queue/index.js.map +1 -0
  174. package/dist/src/queue/redis.js +1 -1
  175. package/dist/src/queue/redis.js.map +1 -1
  176. package/dist/src/queue/types.d.ts +4 -6
  177. package/dist/src/queue/types.d.ts.map +1 -1
  178. package/dist/src/queue/types.js +1 -9
  179. package/dist/src/queue/types.js.map +1 -1
  180. package/dist/src/queue/utils.d.ts +5 -0
  181. package/dist/src/queue/utils.d.ts.map +1 -0
  182. package/dist/src/queue/utils.js +10 -0
  183. package/dist/src/queue/utils.js.map +1 -0
  184. package/dist/src/read-mode/index.d.ts +4 -0
  185. package/dist/src/read-mode/index.d.ts.map +1 -0
  186. package/dist/src/read-mode/index.js +4 -0
  187. package/dist/src/read-mode/index.js.map +1 -0
  188. package/dist/src/read-mode/server.d.ts +1 -2
  189. package/dist/src/read-mode/server.d.ts.map +1 -1
  190. package/dist/src/read-mode/server.js +1 -3
  191. package/dist/src/read-mode/server.js.map +1 -1
  192. package/dist/src/read-mode/service.d.ts +4 -6
  193. package/dist/src/read-mode/service.d.ts.map +1 -1
  194. package/dist/src/read-mode/service.js +1 -5
  195. package/dist/src/read-mode/service.js.map +1 -1
  196. package/dist/src/read-mode/types.d.ts +4 -8
  197. package/dist/src/read-mode/types.d.ts.map +1 -1
  198. package/dist/src/server/base-server.d.ts +10 -15
  199. package/dist/src/server/base-server.d.ts.map +1 -1
  200. package/dist/src/server/base-server.js +281 -59
  201. package/dist/src/server/base-server.js.map +1 -1
  202. package/dist/src/server/builder.d.ts +2 -5
  203. package/dist/src/server/builder.d.ts.map +1 -1
  204. package/dist/src/server/builder.js +8 -10
  205. package/dist/src/server/builder.js.map +1 -1
  206. package/dist/src/server/constants.d.ts +3 -0
  207. package/dist/src/server/constants.d.ts.map +1 -1
  208. package/dist/src/server/constants.js +3 -0
  209. package/dist/src/server/constants.js.map +1 -1
  210. package/dist/src/server/error.d.ts +6 -2
  211. package/dist/src/server/error.d.ts.map +1 -1
  212. package/dist/src/server/error.js +7 -2
  213. package/dist/src/server/error.js.map +1 -1
  214. package/dist/src/server/event-emitter.d.ts +2 -2
  215. package/dist/src/server/event-emitter.d.ts.map +1 -1
  216. package/dist/src/server/event-emitter.js.map +1 -1
  217. package/dist/src/server/index.d.ts +10 -0
  218. package/dist/src/server/index.d.ts.map +1 -0
  219. package/dist/src/server/index.js +10 -0
  220. package/dist/src/server/index.js.map +1 -0
  221. package/dist/src/server/listener/index.d.ts +2 -0
  222. package/dist/src/server/listener/index.d.ts.map +1 -1
  223. package/dist/src/server/listener/index.js +2 -0
  224. package/dist/src/server/listener/index.js.map +1 -1
  225. package/dist/src/server/listener/listener-manager.d.ts +4 -5
  226. package/dist/src/server/listener/listener-manager.d.ts.map +1 -1
  227. package/dist/src/server/listener/listener-manager.js +7 -9
  228. package/dist/src/server/listener/listener-manager.js.map +1 -1
  229. package/dist/src/server/listener/transmitter/factory.d.ts +3 -4
  230. package/dist/src/server/listener/transmitter/factory.d.ts.map +1 -1
  231. package/dist/src/server/listener/transmitter/factory.js +2 -3
  232. package/dist/src/server/listener/transmitter/factory.js.map +1 -1
  233. package/dist/src/server/listener/transmitter/index.d.ts +5 -0
  234. package/dist/src/server/listener/transmitter/index.d.ts.map +1 -0
  235. package/dist/src/server/listener/transmitter/index.js +5 -0
  236. package/dist/src/server/listener/transmitter/index.js.map +1 -0
  237. package/dist/src/server/listener/transmitter/internal.d.ts +3 -20
  238. package/dist/src/server/listener/transmitter/internal.d.ts.map +1 -1
  239. package/dist/src/server/listener/transmitter/internal.js +18 -15
  240. package/dist/src/server/listener/transmitter/internal.js.map +1 -1
  241. package/dist/src/server/listener/transmitter/pull-responder.d.ts +4 -22
  242. package/dist/src/server/listener/transmitter/pull-responder.d.ts.map +1 -1
  243. package/dist/src/server/listener/transmitter/pull-responder.js +7 -9
  244. package/dist/src/server/listener/transmitter/pull-responder.js.map +1 -1
  245. package/dist/src/server/listener/transmitter/switchboard-push.d.ts +1 -2
  246. package/dist/src/server/listener/transmitter/switchboard-push.d.ts.map +1 -1
  247. package/dist/src/server/listener/transmitter/switchboard-push.js +18 -5
  248. package/dist/src/server/listener/transmitter/switchboard-push.js.map +1 -1
  249. package/dist/src/server/listener/transmitter/types.d.ts +32 -2
  250. package/dist/src/server/listener/transmitter/types.d.ts.map +1 -1
  251. package/dist/src/server/listener/types.d.ts +2 -0
  252. package/dist/src/server/listener/types.d.ts.map +1 -0
  253. package/dist/src/server/listener/types.js +2 -0
  254. package/dist/src/server/listener/types.js.map +1 -0
  255. package/dist/src/server/sync-manager.d.ts +4 -7
  256. package/dist/src/server/sync-manager.d.ts.map +1 -1
  257. package/dist/src/server/sync-manager.js +13 -15
  258. package/dist/src/server/sync-manager.js.map +1 -1
  259. package/dist/src/server/sync-unit-map.d.ts +4 -25
  260. package/dist/src/server/sync-unit-map.d.ts.map +1 -1
  261. package/dist/src/server/sync-unit-map.js +0 -1
  262. package/dist/src/server/sync-unit-map.js.map +1 -1
  263. package/dist/src/server/types.d.ts +43 -26
  264. package/dist/src/server/types.d.ts.map +1 -1
  265. package/dist/src/server/types.js +10 -12
  266. package/dist/src/server/types.js.map +1 -1
  267. package/dist/src/server/utils.d.ts +3 -1
  268. package/dist/src/server/utils.d.ts.map +1 -1
  269. package/dist/src/server/utils.js +17 -1
  270. package/dist/src/server/utils.js.map +1 -1
  271. package/dist/src/storage/browser.d.ts +1 -2
  272. package/dist/src/storage/browser.d.ts.map +1 -1
  273. package/dist/src/storage/browser.js +5 -8
  274. package/dist/src/storage/browser.js.map +1 -1
  275. package/dist/src/storage/filesystem.d.ts +2 -3
  276. package/dist/src/storage/filesystem.d.ts.map +1 -1
  277. package/dist/src/storage/filesystem.js +5 -7
  278. package/dist/src/storage/filesystem.js.map +1 -1
  279. package/dist/src/storage/index.d.ts +4 -0
  280. package/dist/src/storage/index.d.ts.map +1 -0
  281. package/dist/src/storage/index.js +4 -0
  282. package/dist/src/storage/index.js.map +1 -0
  283. package/dist/src/storage/ipfs.d.ts +2 -3
  284. package/dist/src/storage/ipfs.d.ts.map +1 -1
  285. package/dist/src/storage/ipfs.js +7 -5
  286. package/dist/src/storage/ipfs.js.map +1 -1
  287. package/dist/src/storage/memory.d.ts +2 -3
  288. package/dist/src/storage/memory.d.ts.map +1 -1
  289. package/dist/src/storage/memory.js +5 -8
  290. package/dist/src/storage/memory.js.map +1 -1
  291. package/dist/src/storage/prisma/factory.d.ts +2 -2
  292. package/dist/src/storage/prisma/factory.d.ts.map +1 -1
  293. package/dist/src/storage/prisma/factory.js +3 -2
  294. package/dist/src/storage/prisma/factory.js.map +1 -1
  295. package/dist/src/storage/prisma/prisma.d.ts +4 -5
  296. package/dist/src/storage/prisma/prisma.d.ts.map +1 -1
  297. package/dist/src/storage/prisma/prisma.js +46 -31
  298. package/dist/src/storage/prisma/prisma.js.map +1 -1
  299. package/dist/src/storage/types.d.ts +1 -2
  300. package/dist/src/storage/types.d.ts.map +1 -1
  301. package/dist/src/storage/utils.d.ts +1 -1
  302. package/dist/src/storage/utils.d.ts.map +1 -1
  303. package/dist/src/utils/default-drives-manager.d.ts +1 -12
  304. package/dist/src/utils/default-drives-manager.d.ts.map +1 -1
  305. package/dist/src/utils/default-drives-manager.js +1 -2
  306. package/dist/src/utils/default-drives-manager.js.map +1 -1
  307. package/dist/src/utils/gql-transformations.d.ts +14 -5
  308. package/dist/src/utils/gql-transformations.d.ts.map +1 -1
  309. package/dist/src/utils/gql-transformations.js +19 -5
  310. package/dist/src/utils/gql-transformations.js.map +1 -1
  311. package/dist/src/utils/graphql.d.ts +6 -32
  312. package/dist/src/utils/graphql.d.ts.map +1 -1
  313. package/dist/src/utils/graphql.js +21 -31
  314. package/dist/src/utils/graphql.js.map +1 -1
  315. package/dist/src/utils/index.d.ts +8 -0
  316. package/dist/src/utils/index.d.ts.map +1 -0
  317. package/dist/src/utils/index.js +8 -0
  318. package/dist/src/utils/index.js.map +1 -0
  319. package/dist/src/utils/logger.d.ts +2 -8
  320. package/dist/src/utils/logger.d.ts.map +1 -1
  321. package/dist/src/utils/logger.js +6 -7
  322. package/dist/src/utils/logger.js.map +1 -1
  323. package/dist/src/utils/migrations.d.ts +1 -1
  324. package/dist/src/utils/migrations.d.ts.map +1 -1
  325. package/dist/src/utils/migrations.js +81 -17
  326. package/dist/src/utils/migrations.js.map +1 -1
  327. package/dist/src/utils/misc.d.ts +2 -6
  328. package/dist/src/utils/misc.d.ts.map +1 -1
  329. package/dist/src/utils/misc.js +7 -11
  330. package/dist/src/utils/misc.js.map +1 -1
  331. package/dist/src/utils/run-asap.d.ts +7 -11
  332. package/dist/src/utils/run-asap.d.ts.map +1 -1
  333. package/dist/src/utils/run-asap.js +110 -122
  334. package/dist/src/utils/run-asap.js.map +1 -1
  335. package/dist/src/utils/types.d.ts +50 -0
  336. package/dist/src/utils/types.d.ts.map +1 -0
  337. package/dist/src/utils/types.js +2 -0
  338. package/dist/src/utils/types.js.map +1 -0
  339. package/dist/test/benchmarks/getDrive.json +10 -0
  340. package/dist/test/benchmarks/processOperations.bench.d.ts +2 -0
  341. package/dist/test/benchmarks/processOperations.bench.d.ts.map +1 -0
  342. package/dist/test/benchmarks/processOperations.bench.js +148 -0
  343. package/dist/test/benchmarks/processOperations.bench.js.map +1 -0
  344. package/dist/test/benchmarks/queue.bench.d.ts +2 -0
  345. package/dist/test/benchmarks/queue.bench.d.ts.map +1 -0
  346. package/dist/test/benchmarks/queue.bench.js +51 -0
  347. package/dist/test/benchmarks/queue.bench.js.map +1 -0
  348. package/dist/test/benchmarks/strands.small.json +37085 -0
  349. package/dist/test/cache.test.d.ts +2 -0
  350. package/dist/test/cache.test.d.ts.map +1 -0
  351. package/dist/test/cache.test.js +275 -0
  352. package/dist/test/cache.test.js.map +1 -0
  353. package/dist/test/default-remote-drives.test.d.ts +2 -0
  354. package/dist/test/default-remote-drives.test.d.ts.map +1 -0
  355. package/dist/test/default-remote-drives.test.js +445 -0
  356. package/dist/test/default-remote-drives.test.js.map +1 -0
  357. package/dist/test/drive-operations.test.d.ts +2 -0
  358. package/dist/test/drive-operations.test.d.ts.map +1 -0
  359. package/dist/test/drive-operations.test.js +134 -0
  360. package/dist/test/drive-operations.test.js.map +1 -0
  361. package/dist/test/dual-action-create.test.d.ts +2 -0
  362. package/dist/test/dual-action-create.test.d.ts.map +1 -0
  363. package/dist/test/dual-action-create.test.js +199 -0
  364. package/dist/test/dual-action-create.test.js.map +1 -0
  365. package/dist/test/dual-action-migration.test.d.ts +2 -0
  366. package/dist/test/dual-action-migration.test.d.ts.map +1 -0
  367. package/dist/test/dual-action-migration.test.js +344 -0
  368. package/dist/test/dual-action-migration.test.js.map +1 -0
  369. package/dist/test/graphql.test.d.ts +2 -0
  370. package/dist/test/graphql.test.d.ts.map +1 -0
  371. package/dist/test/graphql.test.js +9 -0
  372. package/dist/test/graphql.test.js.map +1 -0
  373. package/dist/test/index.d.ts +2 -0
  374. package/dist/test/index.d.ts.map +1 -0
  375. package/dist/test/index.js +2 -0
  376. package/dist/test/index.js.map +1 -0
  377. package/dist/test/internal-listener.test.d.ts +2 -0
  378. package/dist/test/internal-listener.test.d.ts.map +1 -0
  379. package/dist/test/internal-listener.test.js +243 -0
  380. package/dist/test/internal-listener.test.js.map +1 -0
  381. package/dist/test/queue.test.d.ts +2 -0
  382. package/dist/test/queue.test.d.ts.map +1 -0
  383. package/dist/test/queue.test.js +324 -0
  384. package/dist/test/queue.test.js.map +1 -0
  385. package/dist/test/reactor.test.d.ts +2 -0
  386. package/dist/test/reactor.test.d.ts.map +1 -0
  387. package/dist/test/reactor.test.js +32 -0
  388. package/dist/test/reactor.test.js.map +1 -0
  389. package/dist/test/read-mode.test.d.ts +2 -0
  390. package/dist/test/read-mode.test.d.ts.map +1 -0
  391. package/dist/test/read-mode.test.js +569 -0
  392. package/dist/test/read-mode.test.js.map +1 -0
  393. package/dist/test/server/driveOperationsConflictResolution.test.d.ts +2 -0
  394. package/dist/test/server/driveOperationsConflictResolution.test.d.ts.map +1 -0
  395. package/dist/test/server/driveOperationsConflictResolution.test.js +486 -0
  396. package/dist/test/server/driveOperationsConflictResolution.test.js.map +1 -0
  397. package/dist/test/server/mergeOperations.test.d.ts +2 -0
  398. package/dist/test/server/mergeOperations.test.d.ts.map +1 -0
  399. package/dist/test/server/mergeOperations.test.js +115 -0
  400. package/dist/test/server/mergeOperations.test.js.map +1 -0
  401. package/dist/test/server/processOperations.test.d.ts +2 -0
  402. package/dist/test/server/processOperations.test.d.ts.map +1 -0
  403. package/dist/test/server/processOperations.test.js +392 -0
  404. package/dist/test/server/processOperations.test.js.map +1 -0
  405. package/dist/test/server.test.d.ts +2 -0
  406. package/dist/test/server.test.d.ts.map +1 -0
  407. package/dist/test/server.test.js +944 -0
  408. package/dist/test/server.test.js.map +1 -0
  409. package/dist/test/signature-migration.test.d.ts +2 -0
  410. package/dist/test/signature-migration.test.d.ts.map +1 -0
  411. package/dist/test/signature-migration.test.js +241 -0
  412. package/dist/test/signature-migration.test.js.map +1 -0
  413. package/dist/test/storage.test.d.ts +2 -0
  414. package/dist/test/storage.test.d.ts.map +1 -0
  415. package/dist/test/storage.test.js +522 -0
  416. package/dist/test/storage.test.js.map +1 -0
  417. package/dist/test/switchboard-push-listener.test.d.ts +2 -0
  418. package/dist/test/switchboard-push-listener.test.d.ts.map +1 -0
  419. package/dist/test/switchboard-push-listener.test.js +133 -0
  420. package/dist/test/switchboard-push-listener.test.js.map +1 -0
  421. package/dist/test/sync-manager.test.d.ts +2 -0
  422. package/dist/test/sync-manager.test.d.ts.map +1 -0
  423. package/dist/test/sync-manager.test.js +349 -0
  424. package/dist/test/sync-manager.test.js.map +1 -0
  425. package/dist/test/utils.d.ts +62 -0
  426. package/dist/test/utils.d.ts.map +1 -0
  427. package/dist/test/utils.js +154 -0
  428. package/dist/test/utils.js.map +1 -0
  429. package/dist/test/utils.test.d.ts +2 -0
  430. package/dist/test/utils.test.d.ts.map +1 -0
  431. package/dist/test/utils.test.js +86 -0
  432. package/dist/test/utils.test.js.map +1 -0
  433. package/dist/test/vitest-setup.d.ts +2 -0
  434. package/dist/test/vitest-setup.d.ts.map +1 -0
  435. package/dist/test/vitest-setup.js +5 -0
  436. package/dist/test/vitest-setup.js.map +1 -0
  437. package/dist/tsconfig.tsbuildinfo +1 -0
  438. package/dist/vitest.config.d.ts +3 -0
  439. package/dist/vitest.config.d.ts.map +1 -0
  440. package/dist/vitest.config.js +28 -0
  441. package/dist/vitest.config.js.map +1 -0
  442. package/package.json +37 -26
  443. package/{dist/src → src}/storage/prisma/client/edge.js +13 -8
  444. package/{dist/src → src}/storage/prisma/client/index-browser.js +1 -0
  445. package/{dist/src → src}/storage/prisma/client/index.d.ts +45 -0
  446. package/{dist/src → src}/storage/prisma/client/index.js +19 -10
  447. package/src/storage/prisma/client/libquery_engine-darwin-arm64.dylib.node +0 -0
  448. package/{dist/src/storage/prisma/client/libquery_engine-debian-openssl-3.0.x.so.node → src/storage/prisma/client/libquery_engine-linux-musl.so.node} +0 -0
  449. package/{dist/src → src}/storage/prisma/client/package.json +1 -1
  450. package/{dist/src → src}/storage/prisma/client/schema.prisma +4 -2
  451. package/{dist/src → src}/storage/prisma/client/wasm.js +1 -0
  452. package/dist/prisma/schema.prisma +0 -91
  453. package/dist/src/drive-document-model/gen/actions.d.ts +0 -6
  454. package/dist/src/drive-document-model/gen/actions.d.ts.map +0 -1
  455. package/dist/src/drive-document-model/gen/actions.js +0 -3
  456. package/dist/src/drive-document-model/gen/actions.js.map +0 -1
  457. package/dist/src/drive-document-model/gen/drive/object.d.ts +0 -14
  458. package/dist/src/drive-document-model/gen/drive/object.d.ts.map +0 -1
  459. package/dist/src/drive-document-model/gen/drive/object.js +0 -29
  460. package/dist/src/drive-document-model/gen/drive/object.js.map +0 -1
  461. package/dist/src/drive-document-model/gen/drive/operations.d.ts +0 -14
  462. package/dist/src/drive-document-model/gen/drive/operations.d.ts.map +0 -1
  463. package/dist/src/drive-document-model/gen/drive/operations.js +0 -2
  464. package/dist/src/drive-document-model/gen/drive/operations.js.map +0 -1
  465. package/dist/src/drive-document-model/gen/node/object.d.ts +0 -13
  466. package/dist/src/drive-document-model/gen/node/object.d.ts.map +0 -1
  467. package/dist/src/drive-document-model/gen/node/object.js +0 -26
  468. package/dist/src/drive-document-model/gen/node/object.js.map +0 -1
  469. package/dist/src/drive-document-model/gen/node/operations.d.ts +0 -13
  470. package/dist/src/drive-document-model/gen/node/operations.d.ts.map +0 -1
  471. package/dist/src/drive-document-model/gen/node/operations.js +0 -2
  472. package/dist/src/drive-document-model/gen/node/operations.js.map +0 -1
  473. package/dist/src/drive-document-model/gen/object.d.ts +0 -18
  474. package/dist/src/drive-document-model/gen/object.d.ts.map +0 -1
  475. package/dist/src/drive-document-model/gen/object.js +0 -28
  476. package/dist/src/drive-document-model/gen/object.js.map +0 -1
  477. package/dist/tsconfig.lib.tsbuildinfo +0 -1
  478. /package/{dist/src → src}/storage/prisma/client/default.d.ts +0 -0
  479. /package/{dist/src → src}/storage/prisma/client/default.js +0 -0
  480. /package/{dist/src → src}/storage/prisma/client/edge.d.ts +0 -0
  481. /package/{dist/src → src}/storage/prisma/client/runtime/edge-esm.js +0 -0
  482. /package/{dist/src → src}/storage/prisma/client/runtime/edge.js +0 -0
  483. /package/{dist/src → src}/storage/prisma/client/runtime/index-browser.d.ts +0 -0
  484. /package/{dist/src → src}/storage/prisma/client/runtime/index-browser.js +0 -0
  485. /package/{dist/src → src}/storage/prisma/client/runtime/library.d.ts +0 -0
  486. /package/{dist/src → src}/storage/prisma/client/runtime/library.js +0 -0
  487. /package/{dist/src → src}/storage/prisma/client/runtime/react-native.js +0 -0
  488. /package/{dist/src → src}/storage/prisma/client/runtime/wasm.js +0 -0
  489. /package/{dist/src → src}/storage/prisma/client/wasm.d.ts +0 -0
@@ -1,19 +1,8 @@
1
- import { removeListener, removeTrigger, setSharingType, } from "#drive-document-model/gen/creators";
2
- import { createDocument } from "#drive-document-model/gen/utils";
3
- import { isActionJob, isDocumentJob, isOperationJob, } from "#queue/types";
4
- import { ReadModeServer } from "#read-mode/server";
5
- import { DefaultDrivesManager, } from "#utils/default-drives-manager";
6
- import { requestPublicDriveWithTokenFromReactor } from "#utils/graphql";
7
- import { isDocumentDrive, runAsapAsync } from "#utils/misc";
8
- import { RunAsap } from "#utils/run-asap";
9
- import { DocumentAlreadyExistsError, childLogger, } from "document-drive";
10
- import { attachBranch, createPresignedHeader, garbageCollect, garbageCollectDocumentOperations, groupOperationsByScope, merge, precedes, removeExistingOperations, replayDocument, reshuffleByTimestamp, skipHeaderOperations, sortOperations, validateHeader, } from "document-model";
1
+ import { ConflictOperationError, DefaultDrivesManager, DefaultListenerManagerOptions, DocumentAlreadyExistsError, OperationError, PullResponderTransmitter, ReadModeServer, SwitchboardPushTransmitter, childLogger, driveCreateDocument, filterOperationsByRevision, isActionJob, isAtRevision, isDocumentDrive, isDocumentJob, isOperationJob, removeListener, removeTrigger, requestPublicDriveWithTokenFromReactor, resolveCreateDocumentInput, setSharingType, } from "document-drive";
2
+ import { runAsap, runAsapAsync } from "document-drive/run-asap";
3
+ import {} from "document-model";
4
+ import { attachBranch, createPresignedHeader, defaultBaseState, garbageCollect, garbageCollectDocumentOperations, groupOperationsByScope, hashDocumentStateForScope, merge, precedes, removeExistingOperations, replayDocument, reshuffleByTimestamp, skipHeaderOperations, sortOperations, validateHeader, } from "document-model/core";
11
5
  import { ClientError } from "graphql-request";
12
- import { ConflictOperationError, OperationError, } from "./error.js";
13
- import { PullResponderTransmitter, } from "./listener/transmitter/pull-responder.js";
14
- import { SwitchboardPushTransmitter } from "./listener/transmitter/switchboard-push.js";
15
- import { DefaultListenerManagerOptions, } from "./types.js";
16
- import { filterOperationsByRevision, isAtRevision, resolveCreateDocumentInput, } from "./utils.js";
17
6
  export class BaseDocumentDriveServer {
18
7
  logger = childLogger(["BaseDocumentDriveServer"]);
19
8
  // external dependencies
@@ -47,18 +36,19 @@ export class BaseDocumentDriveServer {
47
36
  ? this.processDriveActions(documentId, actions, options)
48
37
  : this.processActions(documentId, actions, options);
49
38
  },
50
- processDocumentJob: async ({ documentId, documentType, initialState, options, }) => {
39
+ processDocumentJob: async ({ documentId, documentType, header: inputHeader, initialState, options, }) => {
51
40
  const documentModelModule = this.getDocumentModelModule(documentType);
52
- const document = documentModelModule.utils.createDocument({
53
- ...initialState,
54
- });
41
+ const document = documentModelModule.utils.createDocument(initialState);
55
42
  // TODO: header must be included
56
43
  const header = createPresignedHeader(documentId, documentType);
57
44
  document.header.id = documentId;
58
45
  document.header.sig = header.sig;
59
46
  document.header.documentType = documentType;
47
+ if (inputHeader) {
48
+ document.header.meta = inputHeader.meta;
49
+ }
60
50
  try {
61
- const createdDocument = await this.createDocument({ document }, options?.source ?? { type: "local" }, initialState?.header.meta);
51
+ const createdDocument = await this.createDocument({ document }, options?.source ?? { type: "local" }, document.header.meta);
62
52
  return {
63
53
  status: "SUCCESS",
64
54
  operations: [],
@@ -95,6 +85,7 @@ export class BaseDocumentDriveServer {
95
85
  // internal state
96
86
  triggerMap = new Map();
97
87
  initializePromise;
88
+ enableDualActionCreate;
98
89
  constructor(documentModelModules, storage, documentStorage, cache, queueManager, eventEmitter, synchronizationManager, listenerManager, options) {
99
90
  this.documentModelModules = documentModelModules;
100
91
  this.legacyStorage = storage;
@@ -117,9 +108,17 @@ export class BaseDocumentDriveServer {
117
108
  ? () => Promise.resolve("")
118
109
  : options.jwtHandler,
119
110
  taskQueueMethod: options?.taskQueueMethod === undefined
120
- ? RunAsap.runAsap
111
+ ? runAsap
121
112
  : options.taskQueueMethod,
113
+ featureFlags: {
114
+ ...options?.featureFlags,
115
+ },
122
116
  };
117
+ this.enableDualActionCreate =
118
+ options?.featureFlags?.enableDualActionCreate ?? false;
119
+ if (this.enableDualActionCreate) {
120
+ this.logger.warn("Dual action create is enabled.");
121
+ }
123
122
  // todo: move to external dependencies
124
123
  this.defaultDrivesManager = new DefaultDrivesManager(this, this.defaultDrivesManagerDelegate, options);
125
124
  this.initializePromise = this._initialize();
@@ -136,7 +135,7 @@ export class BaseDocumentDriveServer {
136
135
  await this.listenerManager.initialize(this.handleListenerError.bind(this));
137
136
  await this.queueManager.init(this.queueDelegate, (error) => {
138
137
  this.logger.error(`Error initializing queue manager`, error);
139
- errors.push(error);
138
+ // errors.push(error);
140
139
  });
141
140
  try {
142
141
  await this.defaultDrivesManager.removeOldremoteDrives();
@@ -328,7 +327,7 @@ export class BaseDocumentDriveServer {
328
327
  }
329
328
  }
330
329
  getDocumentModelModule(documentType) {
331
- const documentModelModule = this.documentModelModules.find((module) => module.documentModel.id === documentType);
330
+ const documentModelModule = this.documentModelModules.find((module) => module.documentModel.global.id === documentType);
332
331
  if (!documentModelModule) {
333
332
  throw new Error(`Document type ${documentType} not supported`);
334
333
  }
@@ -337,17 +336,25 @@ export class BaseDocumentDriveServer {
337
336
  getDocumentModelModules() {
338
337
  return [...this.documentModelModules];
339
338
  }
340
- addDocument(document, meta) {
341
- return this.createDocument({ document }, { type: "local" }, meta);
339
+ addDocument(documentOrType, meta) {
340
+ const input = typeof documentOrType === "string"
341
+ ? { documentType: documentOrType }
342
+ : { document: documentOrType };
343
+ return this.createDocument(input, { type: "local" }, meta);
342
344
  }
343
345
  async addDrive(input, preferredEditor) {
344
- const document = createDocument({
345
- state: {
346
- global: {
347
- icon: input.global.icon ?? null,
348
- name: input.global.name,
349
- },
350
- local: input.local ?? {},
346
+ // Create document with custom global and local state
347
+ const document = driveCreateDocument({
348
+ global: {
349
+ nodes: [],
350
+ icon: null,
351
+ ...input.global,
352
+ },
353
+ local: {
354
+ availableOffline: input.local?.availableOffline ?? false,
355
+ sharingType: input.local?.sharingType ?? "public",
356
+ listeners: input.local?.listeners ?? [],
357
+ triggers: input.local?.triggers ?? [],
351
358
  },
352
359
  });
353
360
  if (input.id && input.id.length > 0) {
@@ -356,9 +363,10 @@ export class BaseDocumentDriveServer {
356
363
  if (input.slug && input.slug.length > 0) {
357
364
  document.header.slug = input.slug;
358
365
  }
359
- if (preferredEditor) {
366
+ const editorToUse = input.preferredEditor || preferredEditor;
367
+ if (editorToUse) {
360
368
  document.header.meta = {
361
- preferredEditor: preferredEditor,
369
+ preferredEditor: editorToUse,
362
370
  };
363
371
  }
364
372
  await this.documentStorage.create(document);
@@ -545,6 +553,14 @@ export class BaseDocumentDriveServer {
545
553
  }
546
554
  }
547
555
  async createDocument(input, source, meta) {
556
+ if (this.enableDualActionCreate) {
557
+ return this.createDocumentDualAction(input, source, meta);
558
+ }
559
+ else {
560
+ return this.createDocumentLegacy(input, source, meta);
561
+ }
562
+ }
563
+ async createDocumentLegacy(input, source, meta) {
548
564
  const { documentType, document: inputDocument } = resolveCreateDocumentInput(input);
549
565
  // if a document was provided then checks if it's valid
550
566
  let state = undefined;
@@ -558,9 +574,7 @@ export class BaseDocumentDriveServer {
558
574
  }
559
575
  // if no document was provided then create a new one
560
576
  const document = inputDocument ??
561
- this.getDocumentModelModule(documentType).utils.createDocument({
562
- state,
563
- });
577
+ this.getDocumentModelModule(documentType).utils.createDocument(state);
564
578
  // get the header
565
579
  let header;
566
580
  // handle the legacy case where an id is provided
@@ -609,11 +623,9 @@ export class BaseDocumentDriveServer {
609
623
  // stores document information
610
624
  const documentStorage = {
611
625
  header,
612
- history: document.history,
613
626
  operations: { global: [], local: [] },
614
627
  initialState: document.initialState,
615
628
  clipboard: [],
616
- attachments: document.attachments,
617
629
  state: state ?? document.state,
618
630
  };
619
631
  await this.documentStorage.create(documentStorage);
@@ -646,7 +658,172 @@ export class BaseDocumentDriveServer {
646
658
  await this.legacyStorage.addDocumentOperations(header.id, operations, document);
647
659
  }
648
660
  }
649
- return document;
661
+ return await this.getDocument(documentStorage.header.id);
662
+ }
663
+ async createDocumentDualAction(input, source, meta) {
664
+ const { documentType, document: inputDocument } = resolveCreateDocumentInput(input);
665
+ // if a document was provided then checks if it's valid
666
+ let state = undefined;
667
+ if (inputDocument) {
668
+ if ("documentType" in input &&
669
+ documentType !== inputDocument.header.documentType) {
670
+ throw new Error(`Provided document is not ${documentType}`);
671
+ }
672
+ const doc = this._buildDocument(inputDocument);
673
+ state = doc.state;
674
+ }
675
+ // if no document was provided then create a new one
676
+ const document = inputDocument ??
677
+ this.getDocumentModelModule(documentType).utils.createDocument(state);
678
+ // get the header
679
+ let header;
680
+ // handle the legacy case where an id is provided
681
+ let isSigned = false;
682
+ if ("id" in input && input.id) {
683
+ if (inputDocument) {
684
+ header = document.header;
685
+ document.header.id = input.id;
686
+ this.logger.warn("Assigning an id to a document is deprecated. Use the header field instead.");
687
+ }
688
+ else {
689
+ this.logger.warn("Creating a document with an id is deprecated. Use the header field instead.");
690
+ header = createPresignedHeader(input.id, documentType);
691
+ }
692
+ }
693
+ else if ("header" in input) {
694
+ // validate the header passed in
695
+ await validateHeader(input.header);
696
+ isSigned = true;
697
+ header = input.header;
698
+ }
699
+ else if (inputDocument?.header) {
700
+ if (!inputDocument.header.id) {
701
+ throw new Error("Document header id is required");
702
+ }
703
+ if (!inputDocument.header.documentType) {
704
+ throw new Error("Document header documentType is required");
705
+ }
706
+ if (!inputDocument.header.createdAtUtcIso) {
707
+ throw new Error("Document header createdAtUtcIso is required");
708
+ }
709
+ if (!inputDocument.header.sig.nonce) {
710
+ this.logger.warn("Creating a document with an unsigned id is deprecated. Use createSignedHeaderForSigner.");
711
+ // throw new Error("Document header sig nonce is required"); TODO: uncomment when ready to enforce signed documents
712
+ }
713
+ else {
714
+ await validateHeader(inputDocument.header);
715
+ isSigned = true;
716
+ }
717
+ header = inputDocument.header;
718
+ }
719
+ else {
720
+ // otherwise, generate a header
721
+ header = createPresignedHeader(undefined, documentType);
722
+ isSigned = false;
723
+ }
724
+ if (meta) {
725
+ header.meta = { ...header.meta, ...meta };
726
+ }
727
+ const currentVersion = "0.1.0";
728
+ // Get initial state from input or model's defaultState
729
+ const initialState = state ?? document.state;
730
+ // Check if the input document already has operations
731
+ const existingOperations = Object.values(document.operations).flat();
732
+ const shouldCreateOperations = existingOperations.length === 0;
733
+ let operations = [];
734
+ if (shouldCreateOperations) {
735
+ const timestampUtcMs = new Date().toISOString();
736
+ // Determine if this is a signed document
737
+ const signing = isSigned
738
+ ? {
739
+ signature: header.id, // The document ID is the signature
740
+ publicKey: header.sig.publicKey,
741
+ nonce: header.sig.nonce,
742
+ createdAtUtcIso: header.createdAtUtcIso,
743
+ documentType: header.documentType,
744
+ }
745
+ : undefined;
746
+ // Create actions for CREATE_DOCUMENT and UPGRADE_DOCUMENT
747
+ const createDocumentInput = {
748
+ model: documentType,
749
+ version: "0.0.0",
750
+ documentId: header.id,
751
+ signing,
752
+ };
753
+ const createDocumentAction = {
754
+ id: `${header.id}-create`,
755
+ type: "CREATE_DOCUMENT",
756
+ timestampUtcMs,
757
+ input: createDocumentInput,
758
+ scope: "global",
759
+ };
760
+ const upgradeDocumentInput = {
761
+ model: documentType,
762
+ fromVersion: "0.0.0",
763
+ toVersion: currentVersion,
764
+ documentId: header.id,
765
+ initialState,
766
+ };
767
+ const upgradeDocumentAction = {
768
+ id: `${header.id}-upgrade`,
769
+ type: "UPGRADE_DOCUMENT",
770
+ timestampUtcMs,
771
+ input: upgradeDocumentInput,
772
+ scope: "global",
773
+ };
774
+ // we need to create hashes for later verification
775
+ const baseState = defaultBaseState();
776
+ const createStateForHash = {
777
+ state: baseState,
778
+ };
779
+ const createHash = hashDocumentStateForScope(createStateForHash, "document");
780
+ const upgradeStateForHash = {
781
+ state: initialState,
782
+ };
783
+ const upgradeHash = hashDocumentStateForScope(upgradeStateForHash,
784
+ // this is bad! there may not be a global scope
785
+ "global");
786
+ // Create operations from actions with computed hashes
787
+ operations = [
788
+ {
789
+ index: 0,
790
+ skip: 0,
791
+ hash: createHash,
792
+ timestampUtcMs,
793
+ action: createDocumentAction,
794
+ },
795
+ {
796
+ index: 1,
797
+ skip: 0,
798
+ hash: upgradeHash,
799
+ timestampUtcMs,
800
+ action: upgradeDocumentAction,
801
+ },
802
+ ];
803
+ }
804
+ else {
805
+ // Use existing operations from the input document
806
+ operations = existingOperations;
807
+ }
808
+ // stores document information with empty operations initially
809
+ const documentToStore = {
810
+ header,
811
+ operations: { global: [], local: [] },
812
+ initialState: document.initialState,
813
+ clipboard: [],
814
+ state: initialState,
815
+ };
816
+ await this.documentStorage.create(documentToStore);
817
+ // Store operations separately (if any)
818
+ if (operations.length > 0) {
819
+ if (isDocumentDrive(documentToStore)) {
820
+ await this.legacyStorage.addDriveOperations(header.id, operations, documentToStore);
821
+ }
822
+ else {
823
+ await this.legacyStorage.addDocumentOperations(header.id, operations, documentToStore);
824
+ }
825
+ }
826
+ return await this.getDocument(documentToStore.header.id);
650
827
  }
651
828
  async deleteDocument(documentId) {
652
829
  try {
@@ -741,8 +918,8 @@ export class BaseDocumentDriveServer {
741
918
  // to retrieve it from the db to avoid rerunning all the operations
742
919
  if (lastRemainingOperation && !lastRemainingOperation.resultingState) {
743
920
  lastRemainingOperation.resultingState = await (isDocumentDrive(document)
744
- ? this.legacyStorage.getOperationResultingState?.(documentId, lastRemainingOperation.index, lastRemainingOperation.scope, "main")
745
- : this.legacyStorage.getDriveOperationResultingState?.(documentId, lastRemainingOperation.index, lastRemainingOperation.scope, "main"));
921
+ ? this.legacyStorage.getOperationResultingState?.(documentId, lastRemainingOperation.index, lastRemainingOperation.action.scope, "main")
922
+ : this.legacyStorage.getDriveOperationResultingState?.(documentId, lastRemainingOperation.index, lastRemainingOperation.action.scope, "main"));
746
923
  }
747
924
  }
748
925
  return {
@@ -761,17 +938,49 @@ export class BaseDocumentDriveServer {
761
938
  ? filterOperationsByRevision(documentStorage.operations, options.revisions)
762
939
  : documentStorage.operations;
763
940
  const operations = garbageCollectDocumentOperations(revisionOperations);
764
- return replayDocument(documentStorage.initialState, operations, documentModelModule.reducer, undefined, documentStorage.header, undefined, {
941
+ // for backward compatibility, we need to add global and local
942
+ const headerOperations = { global: [], local: [] };
943
+ const operationsToReplay = { global: [], local: [] };
944
+ // Filter out CREATE_DOCUMENT and UPGRADE_DOCUMENT operations
945
+ // (these don't currently have reducers and should not be replayed)
946
+ for (const [scope, scopeOps] of Object.entries(operations)) {
947
+ for (const op of scopeOps) {
948
+ if (op.action.type === "CREATE_DOCUMENT" ||
949
+ op.action.type === "UPGRADE_DOCUMENT") {
950
+ headerOperations[scope].push(op);
951
+ }
952
+ else {
953
+ operationsToReplay[scope].push(op);
954
+ }
955
+ }
956
+ }
957
+ const replayed = replayDocument(documentStorage.initialState, operationsToReplay, documentModelModule.reducer, undefined, documentStorage.header, undefined, {
765
958
  ...options,
766
959
  checkHashes: options?.checkHashes ?? true,
767
960
  reuseOperationResultingState: options?.checkHashes ?? true,
768
961
  });
962
+ // merge header operations back into the result
963
+ const allScopes = new Set([
964
+ ...Object.keys(headerOperations),
965
+ ...Object.keys(replayed.operations),
966
+ ]);
967
+ const finalOperations = {};
968
+ for (const scope of allScopes) {
969
+ finalOperations[scope] = [
970
+ ...headerOperations[scope],
971
+ ...replayed.operations[scope],
972
+ ];
973
+ }
974
+ return {
975
+ ...replayed,
976
+ operations: finalOperations,
977
+ };
769
978
  }
770
979
  async _performOperation(documentId, document, operation, skipHashValidation = false) {
771
980
  const documentModelModule = this.getDocumentModelModule(document.header.documentType);
772
981
  const signalResults = [];
773
982
  let newDocument = document;
774
- const scope = operation.scope;
983
+ const scope = operation.action.scope;
775
984
  const documentOperations = garbageCollectDocumentOperations({
776
985
  ...document.operations,
777
986
  [scope]: skipHeaderOperations(document.operations[scope], operation),
@@ -781,11 +990,11 @@ export class BaseDocumentDriveServer {
781
990
  // to retrieve it from the db to avoid rerunning all the operations
782
991
  if (lastRemainingOperation && !lastRemainingOperation.resultingState) {
783
992
  lastRemainingOperation.resultingState = await (isDocumentDrive(document)
784
- ? this.legacyStorage.getOperationResultingState?.(documentId, lastRemainingOperation.index, lastRemainingOperation.scope, "main")
785
- : this.legacyStorage.getDriveOperationResultingState?.(documentId, lastRemainingOperation.index, lastRemainingOperation.scope, "main"));
993
+ ? this.legacyStorage.getOperationResultingState?.(documentId, lastRemainingOperation.index, lastRemainingOperation.action.scope, "main")
994
+ : this.legacyStorage.getDriveOperationResultingState?.(documentId, lastRemainingOperation.index, lastRemainingOperation.action.scope, "main"));
786
995
  }
787
996
  const operationSignals = [];
788
- newDocument = documentModelModule.reducer(newDocument, operation, (signal) => {
997
+ newDocument = documentModelModule.reducer(newDocument, operation.action, (signal) => {
789
998
  let handler = undefined;
790
999
  switch (signal.type) {
791
1000
  case "CREATE_CHILD_DOCUMENT":
@@ -801,8 +1010,12 @@ export class BaseDocumentDriveServer {
801
1010
  if (handler) {
802
1011
  operationSignals.push(() => handler().then((result) => ({ signal, result })));
803
1012
  }
804
- }, { skip: operation.skip, reuseOperationResultingState: true });
805
- const appliedOperations = newDocument.operations[operation.scope].filter((op) => op.index == operation.index && op.skip == operation.skip);
1013
+ }, {
1014
+ skip: operation.skip,
1015
+ reuseOperationResultingState: true,
1016
+ replayOptions: { operation },
1017
+ });
1018
+ const appliedOperations = newDocument.operations[operation.action.scope].filter((op) => op.index == operation.index && op.skip == operation.skip);
806
1019
  const appliedOperation = appliedOperations.at(0);
807
1020
  if (!appliedOperation) {
808
1021
  throw new OperationError("ERROR", operation, `Operation with index ${operation.index}:${operation.skip} was not applied.`);
@@ -889,7 +1102,8 @@ export class BaseDocumentDriveServer {
889
1102
  jobId = await this.queueManager.addJob({
890
1103
  documentId: id,
891
1104
  documentType,
892
- initialState: document,
1105
+ initialState: document?.state,
1106
+ header: document?.header,
893
1107
  options,
894
1108
  });
895
1109
  }
@@ -921,9 +1135,9 @@ export class BaseDocumentDriveServer {
921
1135
  try {
922
1136
  const document = await this.getDocument(id);
923
1137
  const newOperation = operations.find((op) => !op.id ||
924
- !document.operations[op.scope].find((existingOp) => existingOp.id === op.id &&
1138
+ !document.operations[op.action.scope].find((existingOp) => existingOp.id === op.id &&
925
1139
  existingOp.index === op.index &&
926
- existingOp.type === op.type &&
1140
+ existingOp.action.type === op.action.type &&
927
1141
  existingOp.hash === op.hash));
928
1142
  if (!newOperation) {
929
1143
  return {
@@ -1155,10 +1369,10 @@ export class BaseDocumentDriveServer {
1155
1369
  const syncUnit = {
1156
1370
  documentId,
1157
1371
  documentType: document.header.documentType,
1158
- scope: operation.scope,
1372
+ scope: operation.action.scope,
1159
1373
  branch: "main", // TODO: handle branches
1160
1374
  revision: operation.index + 1,
1161
- lastUpdated: operation.timestamp,
1375
+ lastUpdated: operation.timestampUtcMs,
1162
1376
  };
1163
1377
  // checks if this sync unit was already added
1164
1378
  const exists = syncUnits.some((unit) => unit.documentId === syncUnit.documentId &&
@@ -1277,9 +1491,9 @@ export class BaseDocumentDriveServer {
1277
1491
  try {
1278
1492
  const drive = await this.getDrive(driveId);
1279
1493
  const newOperation = operations.find((op) => !op.id ||
1280
- !drive.operations[op.scope].find((existingOp) => existingOp.id === op.id &&
1494
+ !drive.operations[op.action.scope].find((existingOp) => existingOp.id === op.id &&
1281
1495
  existingOp.index === op.index &&
1282
- existingOp.type === op.type &&
1496
+ existingOp.action.type === op.action.type &&
1283
1497
  existingOp.hash === op.hash));
1284
1498
  if (!newOperation) {
1285
1499
  return {
@@ -1370,7 +1584,7 @@ export class BaseDocumentDriveServer {
1370
1584
  this.cache.setDrive(driveId, document).catch(this.logger.error);
1371
1585
  // update listener cache
1372
1586
  const lastOperation = operationsApplied
1373
- .filter((op) => op.scope === "global")
1587
+ .filter((op) => op.action.scope === "global")
1374
1588
  .slice()
1375
1589
  .pop();
1376
1590
  if (lastOperation) {
@@ -1393,7 +1607,7 @@ export class BaseDocumentDriveServer {
1393
1607
  documentType: document.header.documentType,
1394
1608
  scope: "global",
1395
1609
  branch: "main",
1396
- lastUpdated: lastOperation.timestamp,
1610
+ lastUpdated: lastOperation.timestampUtcMs,
1397
1611
  revision: lastOperation.index,
1398
1612
  },
1399
1613
  ], source, () => {
@@ -1516,7 +1730,7 @@ export class BaseDocumentDriveServer {
1516
1730
  }
1517
1731
  async _legacyAddFileAction(driveId, action, options) {
1518
1732
  // create document before adding it to the drive
1519
- const document = this.getDocumentModelModule(action.input.documentType).utils.createDocument({ ...action.input.document });
1733
+ const document = this.getDocumentModelModule(action.input.documentType).utils.createDocument(action.input.document?.state || undefined);
1520
1734
  document.header.id = action.input.id;
1521
1735
  document.header.name = action.input.name;
1522
1736
  document.header.documentType = action.input.documentType;
@@ -1587,6 +1801,14 @@ export class BaseDocumentDriveServer {
1587
1801
  }
1588
1802
  const operations = strand.operations.map((op) => ({
1589
1803
  ...op,
1804
+ action: {
1805
+ id: op.actionId,
1806
+ timestampUtcMs: op.timestampUtcMs,
1807
+ type: op.type,
1808
+ input: op.input,
1809
+ context: op.context,
1810
+ scope: strand.scope,
1811
+ },
1590
1812
  scope: strand.scope,
1591
1813
  branch: strand.branch,
1592
1814
  }));