@dxos/echo-db 2.33.5-dev.ea3876ba → 2.33.5-dev.ebc105f7

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 (362) hide show
  1. package/dist/src/api/index.d.ts +0 -5
  2. package/dist/src/api/index.d.ts.map +1 -1
  3. package/dist/src/api/index.js +0 -5
  4. package/dist/src/api/index.js.map +1 -1
  5. package/dist/src/api/schema.test.js +1 -1
  6. package/dist/src/api/schema.test.js.map +1 -1
  7. package/dist/src/echo.d.ts +1 -0
  8. package/dist/src/echo.d.ts.map +1 -1
  9. package/dist/src/echo.js +9 -20
  10. package/dist/src/echo.js.map +1 -1
  11. package/dist/src/echo.test.js.map +1 -1
  12. package/dist/src/halo/contact-manager.d.ts +2 -1
  13. package/dist/src/halo/contact-manager.d.ts.map +1 -1
  14. package/dist/src/halo/contact-manager.js +1 -1
  15. package/dist/src/halo/contact-manager.js.map +1 -1
  16. package/dist/src/halo/halo-factory.d.ts.map +1 -1
  17. package/dist/src/halo/halo-factory.js +5 -11
  18. package/dist/src/halo/halo-factory.js.map +1 -1
  19. package/dist/src/halo/halo-party.d.ts +1 -1
  20. package/dist/src/halo/halo-party.d.ts.map +1 -1
  21. package/dist/src/halo/halo-party.js +8 -6
  22. package/dist/src/halo/halo-party.js.map +1 -1
  23. package/dist/src/halo/halo.test.js +4 -3
  24. package/dist/src/halo/halo.test.js.map +1 -1
  25. package/dist/src/halo/identity.js +2 -2
  26. package/dist/src/halo/identity.js.map +1 -1
  27. package/dist/src/halo/party-opener.d.ts +1 -1
  28. package/dist/src/halo/party-opener.d.ts.map +1 -1
  29. package/dist/src/halo/party-opener.js +2 -2
  30. package/dist/src/halo/party-opener.js.map +1 -1
  31. package/dist/src/halo/preferences.d.ts +1 -1
  32. package/dist/src/halo/preferences.d.ts.map +1 -1
  33. package/dist/src/halo/preferences.js +8 -11
  34. package/dist/src/halo/preferences.js.map +1 -1
  35. package/dist/src/index.d.ts +2 -2
  36. package/dist/src/index.d.ts.map +1 -1
  37. package/dist/src/index.js +2 -2
  38. package/dist/src/index.js.map +1 -1
  39. package/dist/src/invitations/greeting-protocol-provider.d.ts.map +1 -1
  40. package/dist/src/invitations/greeting-protocol-provider.js +5 -9
  41. package/dist/src/invitations/greeting-protocol-provider.js.map +1 -1
  42. package/dist/src/invitations/greeting-responder.d.ts +6 -4
  43. package/dist/src/invitations/greeting-responder.d.ts.map +1 -1
  44. package/dist/src/invitations/greeting-responder.js +11 -14
  45. package/dist/src/invitations/greeting-responder.js.map +1 -1
  46. package/dist/src/invitations/halo-recovery-initiator.js +1 -1
  47. package/dist/src/invitations/halo-recovery-initiator.js.map +1 -1
  48. package/dist/src/invitations/invitation-descriptor.js +1 -1
  49. package/dist/src/invitations/invitation-descriptor.js.map +1 -1
  50. package/dist/src/invitations/invitation-factory.d.ts +5 -2
  51. package/dist/src/invitations/invitation-factory.d.ts.map +1 -1
  52. package/dist/src/invitations/invitation-factory.js +4 -3
  53. package/dist/src/invitations/invitation-factory.js.map +1 -1
  54. package/dist/src/invitations/offline-invitation-claimer.d.ts.map +1 -1
  55. package/dist/src/invitations/offline-invitation-claimer.js +6 -8
  56. package/dist/src/invitations/offline-invitation-claimer.js.map +1 -1
  57. package/dist/src/{database → packlets/database}/data-mirror.d.ts +0 -0
  58. package/dist/src/packlets/database/data-mirror.d.ts.map +1 -0
  59. package/dist/src/{database → packlets/database}/data-mirror.js +0 -0
  60. package/dist/src/packlets/database/data-mirror.js.map +1 -0
  61. package/dist/src/{database → packlets/database}/data-mirror.test.d.ts +0 -0
  62. package/dist/src/packlets/database/data-mirror.test.d.ts.map +1 -0
  63. package/dist/src/{database → packlets/database}/data-mirror.test.js +0 -0
  64. package/dist/src/packlets/database/data-mirror.test.js.map +1 -0
  65. package/dist/src/{database → packlets/database}/data-service-host.d.ts +0 -0
  66. package/dist/src/packlets/database/data-service-host.d.ts.map +1 -0
  67. package/dist/src/{database → packlets/database}/data-service-host.js +4 -3
  68. package/dist/src/packlets/database/data-service-host.js.map +1 -0
  69. package/dist/src/{database → packlets/database}/data-service-router.d.ts +0 -0
  70. package/dist/src/packlets/database/data-service-router.d.ts.map +1 -0
  71. package/dist/src/{database → packlets/database}/data-service-router.js +0 -0
  72. package/dist/src/packlets/database/data-service-router.js.map +1 -0
  73. package/dist/src/{database → packlets/database}/database-backend.d.ts +0 -0
  74. package/dist/src/packlets/database/database-backend.d.ts.map +1 -0
  75. package/dist/src/{database → packlets/database}/database-backend.js +0 -0
  76. package/dist/src/packlets/database/database-backend.js.map +1 -0
  77. package/dist/src/{api → packlets/database}/database.d.ts +2 -1
  78. package/dist/src/packlets/database/database.d.ts.map +1 -0
  79. package/dist/src/{api → packlets/database}/database.js +2 -2
  80. package/dist/src/packlets/database/database.js.map +1 -0
  81. package/dist/src/{api → packlets/database}/database.test.d.ts +0 -0
  82. package/dist/src/packlets/database/database.test.d.ts.map +1 -0
  83. package/dist/src/{api → packlets/database}/database.test.js +3 -3
  84. package/dist/src/packlets/database/database.test.js.map +1 -0
  85. package/dist/src/{api → packlets/database}/entity.d.ts +1 -1
  86. package/dist/src/packlets/database/entity.d.ts.map +1 -0
  87. package/dist/src/{api → packlets/database}/entity.js +0 -0
  88. package/dist/src/packlets/database/entity.js.map +1 -0
  89. package/dist/src/{database → packlets/database}/index.d.ts +5 -0
  90. package/dist/src/packlets/database/index.d.ts.map +1 -0
  91. package/dist/src/{database → packlets/database}/index.js +5 -0
  92. package/dist/src/packlets/database/index.js.map +1 -0
  93. package/dist/src/{database → packlets/database}/item-demuxer.d.ts +3 -2
  94. package/dist/src/packlets/database/item-demuxer.d.ts.map +1 -0
  95. package/dist/src/{database → packlets/database}/item-demuxer.js +3 -5
  96. package/dist/src/packlets/database/item-demuxer.js.map +1 -0
  97. package/dist/src/{database → packlets/database}/item-demuxer.test.d.ts +0 -0
  98. package/dist/src/packlets/database/item-demuxer.test.d.ts.map +1 -0
  99. package/dist/src/{database → packlets/database}/item-demuxer.test.js +2 -2
  100. package/dist/src/packlets/database/item-demuxer.test.js.map +1 -0
  101. package/dist/src/{database → packlets/database}/item-manager.d.ts +3 -1
  102. package/dist/src/packlets/database/item-manager.d.ts.map +1 -0
  103. package/dist/src/{database → packlets/database}/item-manager.js +13 -12
  104. package/dist/src/packlets/database/item-manager.js.map +1 -0
  105. package/dist/src/{database → packlets/database}/item-manager.test.d.ts +0 -0
  106. package/dist/src/packlets/database/item-manager.test.d.ts.map +1 -0
  107. package/dist/src/{database → packlets/database}/item-manager.test.js +0 -0
  108. package/dist/src/packlets/database/item-manager.test.js.map +1 -0
  109. package/dist/src/{api → packlets/database}/item.d.ts +1 -1
  110. package/dist/src/packlets/database/item.d.ts.map +1 -0
  111. package/dist/src/{api → packlets/database}/item.js +0 -0
  112. package/dist/src/packlets/database/item.js.map +1 -0
  113. package/dist/src/{api → packlets/database}/link.d.ts +1 -1
  114. package/dist/src/packlets/database/link.d.ts.map +1 -0
  115. package/dist/src/{api → packlets/database}/link.js +0 -0
  116. package/dist/src/packlets/database/link.js.map +1 -0
  117. package/dist/src/{api → packlets/database}/selection/index.d.ts +0 -0
  118. package/dist/src/packlets/database/selection/index.d.ts.map +1 -0
  119. package/dist/src/{api → packlets/database}/selection/index.js +0 -0
  120. package/dist/src/packlets/database/selection/index.js.map +1 -0
  121. package/dist/src/{api → packlets/database}/selection/queries.d.ts +0 -0
  122. package/dist/src/packlets/database/selection/queries.d.ts.map +1 -0
  123. package/dist/src/{api → packlets/database}/selection/queries.js +13 -17
  124. package/dist/src/packlets/database/selection/queries.js.map +1 -0
  125. package/dist/src/{api → packlets/database}/selection/result.d.ts +0 -0
  126. package/dist/src/packlets/database/selection/result.d.ts.map +1 -0
  127. package/dist/src/{api → packlets/database}/selection/result.js +0 -0
  128. package/dist/src/packlets/database/selection/result.js.map +1 -0
  129. package/dist/src/{api → packlets/database}/selection/selection.d.ts +0 -0
  130. package/dist/src/packlets/database/selection/selection.d.ts.map +1 -0
  131. package/dist/src/{api → packlets/database}/selection/selection.js +1 -3
  132. package/dist/src/packlets/database/selection/selection.js.map +1 -0
  133. package/dist/src/{api → packlets/database}/selection/selection.test.d.ts +0 -0
  134. package/dist/src/packlets/database/selection/selection.test.d.ts.map +1 -0
  135. package/dist/src/{api → packlets/database}/selection/selection.test.js +4 -12
  136. package/dist/src/packlets/database/selection/selection.test.js.map +1 -0
  137. package/dist/src/{api → packlets/database}/selection/util.d.ts +0 -0
  138. package/dist/src/packlets/database/selection/util.d.ts.map +1 -0
  139. package/dist/src/{api → packlets/database}/selection/util.js +0 -0
  140. package/dist/src/packlets/database/selection/util.js.map +1 -0
  141. package/dist/src/{database → packlets/database}/testing.d.ts +1 -1
  142. package/dist/src/packlets/database/testing.d.ts.map +1 -0
  143. package/dist/src/{database → packlets/database}/testing.js +4 -4
  144. package/dist/src/packlets/database/testing.js.map +1 -0
  145. package/dist/src/{database → packlets/database}/timeframe-clock.d.ts +0 -0
  146. package/dist/src/packlets/database/timeframe-clock.d.ts.map +1 -0
  147. package/dist/src/{database → packlets/database}/timeframe-clock.js +0 -0
  148. package/dist/src/packlets/database/timeframe-clock.js.map +1 -0
  149. package/dist/src/{errors.d.ts → packlets/errors/index.d.ts} +1 -1
  150. package/dist/src/packlets/errors/index.d.ts.map +1 -0
  151. package/dist/src/{errors.js → packlets/errors/index.js} +1 -1
  152. package/dist/src/packlets/errors/index.js.map +1 -0
  153. package/dist/src/parties/data-party.d.ts +8 -5
  154. package/dist/src/parties/data-party.d.ts.map +1 -1
  155. package/dist/src/parties/data-party.js +13 -10
  156. package/dist/src/parties/data-party.js.map +1 -1
  157. package/dist/src/parties/data-party.test.js +18 -17
  158. package/dist/src/parties/data-party.test.js.map +1 -1
  159. package/dist/src/parties/party-factory.d.ts +0 -6
  160. package/dist/src/parties/party-factory.d.ts.map +1 -1
  161. package/dist/src/parties/party-factory.js +20 -48
  162. package/dist/src/parties/party-factory.js.map +1 -1
  163. package/dist/src/parties/party-manager.d.ts.map +1 -1
  164. package/dist/src/parties/party-manager.js +2 -1
  165. package/dist/src/parties/party-manager.js.map +1 -1
  166. package/dist/src/parties/party-manager.test.js +13 -9
  167. package/dist/src/parties/party-manager.test.js.map +1 -1
  168. package/dist/src/pipeline/message-selector.d.ts +3 -3
  169. package/dist/src/pipeline/message-selector.d.ts.map +1 -1
  170. package/dist/src/pipeline/message-selector.js +30 -29
  171. package/dist/src/pipeline/message-selector.js.map +1 -1
  172. package/dist/src/pipeline/metadata-store.d.ts +3 -3
  173. package/dist/src/pipeline/metadata-store.d.ts.map +1 -1
  174. package/dist/src/pipeline/metadata-store.js +5 -5
  175. package/dist/src/pipeline/metadata-store.js.map +1 -1
  176. package/dist/src/pipeline/metadata-store.test.js +8 -4
  177. package/dist/src/pipeline/metadata-store.test.js.map +1 -1
  178. package/dist/src/pipeline/party-core.d.ts +4 -3
  179. package/dist/src/pipeline/party-core.d.ts.map +1 -1
  180. package/dist/src/pipeline/party-core.js +7 -7
  181. package/dist/src/pipeline/party-core.js.map +1 -1
  182. package/dist/src/pipeline/party-core.test.js +30 -28
  183. package/dist/src/pipeline/party-core.test.js.map +1 -1
  184. package/dist/src/pipeline/party-processor.d.ts +21 -9
  185. package/dist/src/pipeline/party-processor.d.ts.map +1 -1
  186. package/dist/src/pipeline/party-processor.js +0 -8
  187. package/dist/src/pipeline/party-processor.js.map +1 -1
  188. package/dist/src/pipeline/pipeline.d.ts +3 -5
  189. package/dist/src/pipeline/pipeline.d.ts.map +1 -1
  190. package/dist/src/pipeline/pipeline.js +8 -11
  191. package/dist/src/pipeline/pipeline.js.map +1 -1
  192. package/dist/src/pipeline/pipeline.test.js +4 -5
  193. package/dist/src/pipeline/pipeline.test.js.map +1 -1
  194. package/dist/src/protocol/auth-plugin.d.ts +1 -1
  195. package/dist/src/protocol/auth-plugin.d.ts.map +1 -1
  196. package/dist/src/protocol/auth-plugin.js +1 -3
  197. package/dist/src/protocol/auth-plugin.js.map +1 -1
  198. package/dist/src/protocol/authenticator.d.ts +4 -4
  199. package/dist/src/protocol/authenticator.d.ts.map +1 -1
  200. package/dist/src/protocol/authenticator.js +12 -16
  201. package/dist/src/protocol/authenticator.js.map +1 -1
  202. package/dist/src/protocol/authenticator.test.js +1 -4
  203. package/dist/src/protocol/authenticator.test.js.map +1 -1
  204. package/dist/src/protocol/halo-recovery-plugin.d.ts +1 -1
  205. package/dist/src/protocol/halo-recovery-plugin.d.ts.map +1 -1
  206. package/dist/src/protocol/halo-recovery-plugin.js +1 -3
  207. package/dist/src/protocol/halo-recovery-plugin.js.map +1 -1
  208. package/dist/src/protocol/identity-credentials.d.ts +2 -2
  209. package/dist/src/protocol/identity-credentials.d.ts.map +1 -1
  210. package/dist/src/protocol/identity-credentials.js +4 -4
  211. package/dist/src/protocol/identity-credentials.js.map +1 -1
  212. package/dist/src/protocol/offline-invitation-plugin.d.ts +1 -1
  213. package/dist/src/protocol/offline-invitation-plugin.d.ts.map +1 -1
  214. package/dist/src/protocol/offline-invitation-plugin.js +1 -3
  215. package/dist/src/protocol/offline-invitation-plugin.js.map +1 -1
  216. package/dist/src/protocol/party-protocol-factory.d.ts +1 -14
  217. package/dist/src/protocol/party-protocol-factory.d.ts.map +1 -1
  218. package/dist/src/protocol/party-protocol-factory.js +2 -55
  219. package/dist/src/protocol/party-protocol-factory.js.map +1 -1
  220. package/dist/src/protocol/replicator-plugin.d.ts +7 -0
  221. package/dist/src/protocol/replicator-plugin.d.ts.map +1 -0
  222. package/dist/src/protocol/replicator-plugin.js +36 -0
  223. package/dist/src/protocol/replicator-plugin.js.map +1 -0
  224. package/dist/src/snapshots/snapshot-generator.d.ts +2 -2
  225. package/dist/src/snapshots/snapshot-generator.d.ts.map +1 -1
  226. package/dist/src/snapshots/snapshot-generator.js +13 -15
  227. package/dist/src/snapshots/snapshot-generator.js.map +1 -1
  228. package/dist/src/snapshots/snapshot-store.d.ts +3 -3
  229. package/dist/src/snapshots/snapshot-store.d.ts.map +1 -1
  230. package/dist/src/snapshots/snapshot-store.js +5 -5
  231. package/dist/src/snapshots/snapshot-store.js.map +1 -1
  232. package/dist/src/snapshots/snapshot-store.test.js +1 -1
  233. package/dist/src/snapshots/snapshot-store.test.js.map +1 -1
  234. package/dist/src/snapshots/snapshot.test.js +1 -1
  235. package/dist/src/snapshots/snapshot.test.js.map +1 -1
  236. package/dist/src/testing/benchmark.test.d.ts +2 -0
  237. package/dist/src/testing/benchmark.test.d.ts.map +1 -0
  238. package/dist/src/testing/benchmark.test.js +25 -0
  239. package/dist/src/testing/benchmark.test.js.map +1 -0
  240. package/dist/src/testing/testing-factories.d.ts +1 -1
  241. package/dist/src/testing/testing-factories.d.ts.map +1 -1
  242. package/dist/src/testing/testing-factories.js +2 -2
  243. package/dist/src/testing/testing-factories.js.map +1 -1
  244. package/dist/tsconfig.tsbuildinfo +1 -1
  245. package/package.json +18 -18
  246. package/src/api/index.ts +0 -5
  247. package/src/api/schema.test.ts +1 -2
  248. package/src/echo.test.ts +1 -1
  249. package/src/echo.ts +10 -20
  250. package/src/halo/contact-manager.ts +3 -2
  251. package/src/halo/halo-factory.ts +6 -18
  252. package/src/halo/halo-party.ts +12 -6
  253. package/src/halo/halo.test.ts +4 -3
  254. package/src/halo/identity.ts +2 -2
  255. package/src/halo/party-opener.ts +2 -2
  256. package/src/halo/preferences.ts +10 -12
  257. package/src/index.ts +3 -2
  258. package/src/invitations/greeting-protocol-provider.ts +5 -9
  259. package/src/invitations/greeting-responder.ts +15 -17
  260. package/src/invitations/halo-recovery-initiator.ts +1 -1
  261. package/src/invitations/invitation-descriptor.ts +1 -1
  262. package/src/invitations/invitation-factory.ts +8 -5
  263. package/src/invitations/offline-invitation-claimer.ts +6 -8
  264. package/src/{database → packlets/database}/data-mirror.test.ts +1 -1
  265. package/src/{database → packlets/database}/data-mirror.ts +1 -1
  266. package/src/{database → packlets/database}/data-service-host.ts +2 -1
  267. package/src/{database → packlets/database}/data-service-router.ts +0 -0
  268. package/src/{database → packlets/database}/database-backend.ts +0 -0
  269. package/src/{api → packlets/database}/database.test.ts +2 -1
  270. package/src/{api → packlets/database}/database.ts +3 -1
  271. package/src/{api → packlets/database}/entity.ts +1 -1
  272. package/src/{database → packlets/database}/index.ts +5 -0
  273. package/src/{database → packlets/database}/item-demuxer.test.ts +1 -1
  274. package/src/{database → packlets/database}/item-demuxer.ts +5 -5
  275. package/src/{database → packlets/database}/item-manager.test.ts +0 -0
  276. package/src/{database → packlets/database}/item-manager.ts +5 -3
  277. package/src/{api → packlets/database}/item.ts +2 -2
  278. package/src/{api → packlets/database}/link.ts +1 -1
  279. package/src/{api → packlets/database}/selection/index.ts +0 -0
  280. package/src/{api → packlets/database}/selection/queries.ts +14 -18
  281. package/src/{api → packlets/database}/selection/result.ts +0 -0
  282. package/src/{api → packlets/database}/selection/selection.test.ts +4 -12
  283. package/src/{api → packlets/database}/selection/selection.ts +1 -7
  284. package/src/{api → packlets/database}/selection/util.ts +0 -0
  285. package/src/{database → packlets/database}/testing.ts +2 -2
  286. package/src/{database → packlets/database}/timeframe-clock.ts +0 -0
  287. package/src/{errors.ts → packlets/errors/index.ts} +0 -0
  288. package/src/parties/data-party.test.ts +19 -17
  289. package/src/parties/data-party.ts +17 -11
  290. package/src/parties/party-factory.ts +26 -72
  291. package/src/parties/party-manager.test.ts +20 -10
  292. package/src/parties/party-manager.ts +2 -1
  293. package/src/pipeline/message-selector.ts +32 -35
  294. package/src/pipeline/metadata-store.test.ts +8 -4
  295. package/src/pipeline/metadata-store.ts +5 -5
  296. package/src/pipeline/party-core.test.ts +33 -35
  297. package/src/pipeline/party-core.ts +8 -9
  298. package/src/pipeline/party-processor.ts +23 -15
  299. package/src/pipeline/pipeline.test.ts +4 -5
  300. package/src/pipeline/pipeline.ts +12 -15
  301. package/src/protocol/auth-plugin.ts +1 -3
  302. package/src/protocol/authenticator.test.ts +1 -4
  303. package/src/protocol/authenticator.ts +33 -33
  304. package/src/protocol/halo-recovery-plugin.ts +4 -6
  305. package/src/protocol/identity-credentials.ts +4 -4
  306. package/src/protocol/offline-invitation-plugin.ts +4 -6
  307. package/src/protocol/party-protocol-factory.ts +3 -56
  308. package/src/protocol/replicator-plugin.ts +37 -0
  309. package/src/snapshots/snapshot-generator.ts +13 -17
  310. package/src/snapshots/snapshot-store.test.ts +1 -1
  311. package/src/snapshots/snapshot-store.ts +5 -6
  312. package/src/snapshots/snapshot.test.ts +1 -1
  313. package/src/testing/benchmark.test.ts +30 -0
  314. package/src/testing/testing-factories.ts +3 -3
  315. package/dist/src/api/database.d.ts.map +0 -1
  316. package/dist/src/api/database.js.map +0 -1
  317. package/dist/src/api/database.test.d.ts.map +0 -1
  318. package/dist/src/api/database.test.js.map +0 -1
  319. package/dist/src/api/entity.d.ts.map +0 -1
  320. package/dist/src/api/entity.js.map +0 -1
  321. package/dist/src/api/item.d.ts.map +0 -1
  322. package/dist/src/api/item.js.map +0 -1
  323. package/dist/src/api/link.d.ts.map +0 -1
  324. package/dist/src/api/link.js.map +0 -1
  325. package/dist/src/api/selection/index.d.ts.map +0 -1
  326. package/dist/src/api/selection/index.js.map +0 -1
  327. package/dist/src/api/selection/queries.d.ts.map +0 -1
  328. package/dist/src/api/selection/queries.js.map +0 -1
  329. package/dist/src/api/selection/result.d.ts.map +0 -1
  330. package/dist/src/api/selection/result.js.map +0 -1
  331. package/dist/src/api/selection/selection.d.ts.map +0 -1
  332. package/dist/src/api/selection/selection.js.map +0 -1
  333. package/dist/src/api/selection/selection.test.d.ts.map +0 -1
  334. package/dist/src/api/selection/selection.test.js.map +0 -1
  335. package/dist/src/api/selection/util.d.ts.map +0 -1
  336. package/dist/src/api/selection/util.js.map +0 -1
  337. package/dist/src/database/data-mirror.d.ts.map +0 -1
  338. package/dist/src/database/data-mirror.js.map +0 -1
  339. package/dist/src/database/data-mirror.test.d.ts.map +0 -1
  340. package/dist/src/database/data-mirror.test.js.map +0 -1
  341. package/dist/src/database/data-service-host.d.ts.map +0 -1
  342. package/dist/src/database/data-service-host.js.map +0 -1
  343. package/dist/src/database/data-service-router.d.ts.map +0 -1
  344. package/dist/src/database/data-service-router.js.map +0 -1
  345. package/dist/src/database/database-backend.d.ts.map +0 -1
  346. package/dist/src/database/database-backend.js.map +0 -1
  347. package/dist/src/database/index.d.ts.map +0 -1
  348. package/dist/src/database/index.js.map +0 -1
  349. package/dist/src/database/item-demuxer.d.ts.map +0 -1
  350. package/dist/src/database/item-demuxer.js.map +0 -1
  351. package/dist/src/database/item-demuxer.test.d.ts.map +0 -1
  352. package/dist/src/database/item-demuxer.test.js.map +0 -1
  353. package/dist/src/database/item-manager.d.ts.map +0 -1
  354. package/dist/src/database/item-manager.js.map +0 -1
  355. package/dist/src/database/item-manager.test.d.ts.map +0 -1
  356. package/dist/src/database/item-manager.test.js.map +0 -1
  357. package/dist/src/database/testing.d.ts.map +0 -1
  358. package/dist/src/database/testing.js.map +0 -1
  359. package/dist/src/database/timeframe-clock.d.ts.map +0 -1
  360. package/dist/src/database/timeframe-clock.js.map +0 -1
  361. package/dist/src/errors.d.ts.map +0 -1
  362. package/dist/src/errors.js.map +0 -1
@@ -9,8 +9,8 @@ import { getPartyCredentialMessageType, PartyCredential } from '@dxos/credential
9
9
  import { PublicKey } from '@dxos/crypto';
10
10
  import { MessageSelector } from '@dxos/echo-protocol';
11
11
 
12
- import { TimeframeClock } from '../database';
13
- import { PartyProcessor } from './party-processor';
12
+ import { TimeframeClock } from '../packlets/database';
13
+ import { PartyStateProvider } from './party-processor';
14
14
 
15
15
  const log = debug('dxos:echo-db:message-selector');
16
16
 
@@ -23,47 +23,44 @@ const log = debug('dxos:echo-db:message-selector');
23
23
  * @param partyProcessor
24
24
  * @param timeframeClock
25
25
  */
26
- export function createMessageSelector (
27
- partyProcessor: PartyProcessor,
28
- timeframeClock: TimeframeClock
29
- ): MessageSelector {
30
- // TODO(telackey): Add KeyAdmit checks.
31
- return candidates => {
32
- // Check ECHO message candidates first since they are less expensive than HALO cancidates.
33
- for (let i = 0; i < candidates.length; i++) {
34
- const { data: { echo } } = candidates[i];
35
- const feedKey = PublicKey.from(candidates[i].key);
36
- if (!echo) {
37
- continue;
38
- }
26
+ export const createMessageSelector = (partyProcessor: PartyStateProvider, timeframeClock: TimeframeClock): MessageSelector => candidates => {
27
+ // Check ECHO message candidates first since they are less expensive than HALO cancidates.
28
+ for (let i = 0; i < candidates.length; i++) {
29
+ const { data: { timeframe, echo } } = candidates[i];
30
+ const feedKey = PublicKey.from(candidates[i].key);
31
+ if (!echo) {
32
+ continue;
33
+ }
39
34
 
40
- assert(echo.timeframe);
41
- if (partyProcessor.isFeedAdmitted(feedKey) && !timeframeClock.hasGaps(echo.timeframe)) {
42
- return i;
43
- }
35
+ assert(timeframe);
36
+ if (partyProcessor.isFeedAdmitted(feedKey) && !timeframeClock.hasGaps(timeframe)) {
37
+ return i;
44
38
  }
39
+ }
45
40
 
46
- // Check HALO message candidates.
47
- for (let i = 0; i < candidates.length; i++) {
48
- const { data: { halo } } = candidates[i];
49
- const feedKey = PublicKey.from(candidates[i].key);
50
- if (!halo) {
51
- continue;
52
- }
41
+ // Check HALO message candidates.
42
+ for (let i = 0; i < candidates.length; i++) {
43
+ const { data: { timeframe, halo } } = candidates[i];
44
+ const feedKey = PublicKey.from(candidates[i].key);
45
+ if (!halo) {
46
+ continue;
47
+ }
53
48
 
54
- if (partyProcessor.isFeedAdmitted(feedKey)) {
55
- return i;
56
- }
49
+ assert(timeframe);
50
+ if (partyProcessor.isFeedAdmitted(feedKey) && !timeframeClock.hasGaps(timeframe)) {
51
+ return i;
52
+ }
57
53
 
58
- if (partyProcessor.genesisRequired) {
54
+ if (partyProcessor.genesisRequired) {
55
+ try { // TODO(dmaretskyi): Get getPartyCredentialMessageType crashes for some reason.
59
56
  // TODO(telackey): Add check that this is for the right Party.
60
57
  if (getPartyCredentialMessageType(halo) === PartyCredential.Type.PARTY_GENESIS) {
61
58
  return i;
62
59
  }
63
- }
60
+ } catch { }
64
61
  }
62
+ }
65
63
 
66
- // Not ready for this message yet.
67
- log('Skipping...');
68
- };
69
- }
64
+ // Not ready for this message yet.
65
+ log('Skipping...');
66
+ };
@@ -11,7 +11,8 @@ import { MetadataStore } from './metadata-store';
11
11
 
12
12
  describe('MetadataStore in-memory', () => {
13
13
  it('Creates party and adds feeds to it', async () => {
14
- const store = new MetadataStore(createStorage('metadata', StorageType.RAM));
14
+ const storage = createStorage('', StorageType.RAM);
15
+ const store = new MetadataStore(storage.directory('metadata'));
15
16
  await store.load();
16
17
  expect(store.parties?.length).toBe(0);
17
18
 
@@ -33,7 +34,8 @@ describe('MetadataStore in-memory', () => {
33
34
  });
34
35
 
35
36
  it('Creates party when adding feed', async () => {
36
- const store = new MetadataStore(createStorage('metadata', StorageType.RAM));
37
+ const storage = createStorage('', StorageType.RAM);
38
+ const store = new MetadataStore(storage.directory('metadata'));
37
39
  await store.load();
38
40
 
39
41
  const partyKey = PublicKey.random();
@@ -45,7 +47,8 @@ describe('MetadataStore in-memory', () => {
45
47
  });
46
48
 
47
49
  it('Doesn\'t add same feed twice', async () => {
48
- const store = new MetadataStore(createStorage('metadata', StorageType.RAM));
50
+ const storage = createStorage('', StorageType.RAM);
51
+ const store = new MetadataStore(storage.directory('metadata'));
49
52
  await store.load();
50
53
 
51
54
  const partyKey = PublicKey.random();
@@ -60,7 +63,8 @@ describe('MetadataStore in-memory', () => {
60
63
 
61
64
  // TODO(yivlad): Doesn't work for now.
62
65
  it.skip('Resets storage', async () => {
63
- const store = new MetadataStore(createStorage('snapshots', StorageType.RAM));
66
+ const storage = createStorage('snapshots', StorageType.RAM);
67
+ const store = new MetadataStore(storage.directory(''));
64
68
 
65
69
  const partyKey = PublicKey.random();
66
70
  const feedKey = PublicKey.random();
@@ -8,7 +8,7 @@ import debug from 'debug';
8
8
  import { PublicKey } from '@dxos/crypto';
9
9
  import { failUndefined } from '@dxos/debug';
10
10
  import { EchoMetadata, PartyMetadata, schema } from '@dxos/echo-protocol';
11
- import { Storage } from '@dxos/random-access-multi-storage';
11
+ import { Directory } from '@dxos/random-access-multi-storage';
12
12
 
13
13
  /**
14
14
  * Version for the schema of the stored data as defined in dxos.echo.metadata.EchoMetadata.
@@ -28,7 +28,7 @@ export class MetadataStore {
28
28
  };
29
29
 
30
30
  constructor (
31
- private readonly _storage: Storage
31
+ private readonly _directory: Directory
32
32
  ) {}
33
33
 
34
34
  get version (): number {
@@ -47,7 +47,7 @@ export class MetadataStore {
47
47
  * Loads metadata from persistent storage.
48
48
  */
49
49
  async load (): Promise<void> {
50
- const file = this._storage.createOrOpen('EchoMetadata');
50
+ const file = this._directory.createOrOpen('EchoMetadata');
51
51
  try {
52
52
  const { size } = await file.stat();
53
53
  if (size === 0) {
@@ -75,7 +75,7 @@ export class MetadataStore {
75
75
  updated: new Date()
76
76
  };
77
77
 
78
- const file = this._storage.createOrOpen('EchoMetadata');
78
+ const file = this._directory.createOrOpen('EchoMetadata');
79
79
 
80
80
  try {
81
81
  const encoded = Buffer.from(schema.getCodecForType('dxos.echo.metadata.EchoMetadata').encode(data));
@@ -90,7 +90,7 @@ export class MetadataStore {
90
90
  */
91
91
  async clear (): Promise<void> {
92
92
  log('Clearing all echo metadata...');
93
- await this._storage.destroy();
93
+ await this._directory.destroy();
94
94
  }
95
95
 
96
96
  /**
@@ -8,7 +8,8 @@ import { it as test } from 'mocha';
8
8
  import { promiseTimeout } from '@dxos/async';
9
9
  import { createFeedAdmitMessage, createPartyGenesisMessage, Keyring, KeyType } from '@dxos/credentials';
10
10
  import { createId, PublicKey } from '@dxos/crypto';
11
- import { codec, Timeframe } from '@dxos/echo-protocol';
11
+ import { checkType } from '@dxos/debug';
12
+ import { codec, FeedMessage, Timeframe } from '@dxos/echo-protocol';
12
13
  import { FeedStore } from '@dxos/feed-store';
13
14
  import { createTestProtocolPair } from '@dxos/mesh-protocol';
14
15
  import { ModelFactory } from '@dxos/model-factory';
@@ -16,22 +17,23 @@ import { ObjectModel } from '@dxos/object-model';
16
17
  import { createStorage, StorageType } from '@dxos/random-access-multi-storage';
17
18
  import { afterTest } from '@dxos/testutils';
18
19
 
19
- import { MetadataStore, PartyFeedProvider, ReplicatorProtocolPluginFactory } from '../pipeline';
20
+ import { MetadataStore, PartyFeedProvider } from '../pipeline';
21
+ import { createReplicatorPlugin } from '../protocol/replicator-plugin';
20
22
  import { SnapshotStore } from '../snapshots';
21
23
  import { PartyCore } from './party-core';
22
24
 
23
25
  describe('PartyCore', () => {
24
26
  const setup = async () => {
25
27
  const storage = createStorage('', StorageType.RAM);
26
- const feedStore = new FeedStore(storage, { valueEncoding: codec });
28
+ const feedStore = new FeedStore(storage.directory('feed'), { valueEncoding: codec });
27
29
  afterTest(async () => feedStore.close());
28
30
 
29
31
  const keyring = new Keyring();
30
32
 
31
- const metadataStore = new MetadataStore(createStorage('metadata', StorageType.RAM));
33
+ const metadataStore = new MetadataStore(storage.directory('metadata'));
32
34
 
33
35
  const modelFactory = new ModelFactory().registerModel(ObjectModel);
34
- const snapshotStore = new SnapshotStore(createStorage('snapshots', StorageType.RAM));
36
+ const snapshotStore = new SnapshotStore(storage.directory('snapshots'));
35
37
 
36
38
  const partyKey = await keyring.createKeyRecord({ type: KeyType.PARTY });
37
39
 
@@ -50,7 +52,7 @@ describe('PartyCore', () => {
50
52
  afterTest(async () => party.close());
51
53
 
52
54
  // PartyGenesis (self-signed by Party).
53
- await party.processor.writeHaloMessage(createPartyGenesisMessage(
55
+ await party.credentialsWriter.write(createPartyGenesisMessage(
54
56
  keyring,
55
57
  partyKey,
56
58
  feed.key,
@@ -58,7 +60,7 @@ describe('PartyCore', () => {
58
60
  );
59
61
 
60
62
  // FeedAdmit (signed by the Device KeyChain).
61
- await party.processor.writeHaloMessage(createFeedAdmitMessage(
63
+ await party.credentialsWriter.write(createFeedAdmitMessage(
62
64
  keyring,
63
65
  partyKey.publicKey,
64
66
  feed.key,
@@ -119,7 +121,7 @@ describe('PartyCore', () => {
119
121
  const feedKey = await keyring.createKeyRecord({ type: KeyType.FEED });
120
122
 
121
123
  const eventFired = feedStore.feedOpenedEvent.waitForCount(1);
122
- await party.processor.writeHaloMessage(createFeedAdmitMessage(
124
+ await party.credentialsWriter.write(createFeedAdmitMessage(
123
125
  keyring,
124
126
  party.key,
125
127
  feedKey.publicKey,
@@ -131,15 +133,15 @@ describe('PartyCore', () => {
131
133
 
132
134
  test('opens feed from hints', async () => {
133
135
  const storage = createStorage('', StorageType.RAM);
134
- const feedStore = new FeedStore(storage, { valueEncoding: codec });
136
+ const feedStore = new FeedStore(storage.directory('feed'), { valueEncoding: codec });
135
137
  afterTest(async () => feedStore.close());
136
138
 
137
139
  const keyring = new Keyring();
138
140
 
139
- const metadataStore = new MetadataStore(createStorage('metadata', StorageType.RAM));
141
+ const metadataStore = new MetadataStore(storage.directory('metadata'));
140
142
 
141
143
  const modelFactory = new ModelFactory().registerModel(ObjectModel);
142
- const snapshotStore = new SnapshotStore(createStorage('snapshots', StorageType.RAM));
144
+ const snapshotStore = new SnapshotStore(storage.directory('snapshots'));
143
145
 
144
146
  const partyKey = await keyring.createKeyRecord({ type: KeyType.PARTY });
145
147
 
@@ -174,16 +176,16 @@ describe('PartyCore', () => {
174
176
  const feed = await partyFeedProvider.createOrOpenWritableFeed();
175
177
 
176
178
  const itemId = createId();
177
- await feed.feed.append({
179
+ await feed.feed.append(checkType<FeedMessage>({
180
+ timeframe: new Timeframe(),
178
181
  echo: {
179
182
  itemId,
180
183
  genesis: {
181
184
  itemType: 'dxos:example',
182
185
  modelType: ObjectModel.meta.type
183
- },
184
- timeframe: new Timeframe()
186
+ }
185
187
  }
186
- });
188
+ }));
187
189
 
188
190
  await promiseTimeout(party.database.waitForItem({ id: itemId }), 1000, new Error('timeout'));
189
191
  });
@@ -196,7 +198,7 @@ describe('PartyCore', () => {
196
198
  const fullKey = keyring.getFullKey(feedKey.publicKey);
197
199
  const feed2 = await feedStore.openReadWriteFeed(fullKey!.publicKey, fullKey!.secretKey!);
198
200
 
199
- await party.processor.writeHaloMessage(createFeedAdmitMessage(
201
+ await party.credentialsWriter.write(createFeedAdmitMessage(
200
202
  keyring,
201
203
  party.key,
202
204
  feed2.key,
@@ -204,16 +206,16 @@ describe('PartyCore', () => {
204
206
  ));
205
207
 
206
208
  const itemId = createId();
207
- await feed2.append({
209
+ await feed2.append(checkType<FeedMessage>({
210
+ timeframe: new Timeframe(),
208
211
  echo: {
209
212
  itemId,
210
213
  genesis: {
211
214
  itemType: 'dxos:example',
212
215
  modelType: ObjectModel.meta.type
213
- },
214
- timeframe: new Timeframe()
216
+ }
215
217
  }
216
- });
218
+ }));
217
219
 
218
220
  await promiseTimeout(party.database.waitForItem({ id: itemId }), 1000, new Error('timeout'));
219
221
  });
@@ -225,7 +227,7 @@ describe('PartyCore', () => {
225
227
  const feedKey = await keyring.createKeyRecord({ type: KeyType.FEED });
226
228
  const fullKey = keyring.getFullKey(feedKey.publicKey);
227
229
 
228
- await party.processor.writeHaloMessage(createFeedAdmitMessage(
230
+ await party.credentialsWriter.write(createFeedAdmitMessage(
229
231
  keyring,
230
232
  party.key,
231
233
  feedKey.publicKey,
@@ -234,16 +236,16 @@ describe('PartyCore', () => {
234
236
 
235
237
  const feed2 = await feedStore.openReadWriteFeed(fullKey!.publicKey, fullKey!.secretKey!);
236
238
  const itemId = createId();
237
- await feed2.append({
239
+ await feed2.append(checkType<FeedMessage>({
240
+ timeframe: new Timeframe(),
238
241
  echo: {
239
242
  itemId,
240
243
  genesis: {
241
244
  itemType: 'dxos:example',
242
245
  modelType: ObjectModel.meta.type
243
- },
244
- timeframe: new Timeframe()
246
+ }
245
247
  }
246
- });
248
+ }));
247
249
 
248
250
  await promiseTimeout(party.database.waitForItem({ id: itemId }), 1000, new Error('timeout'));
249
251
  });
@@ -252,13 +254,13 @@ describe('PartyCore', () => {
252
254
  const peer1 = await setup();
253
255
 
254
256
  const storage = createStorage('', StorageType.RAM);
255
- const feedStore = new FeedStore(storage, { valueEncoding: codec });
257
+ const feedStore = new FeedStore(storage.directory('feed'), { valueEncoding: codec });
256
258
  afterTest(async () => feedStore.close());
257
259
 
258
- const metadataStore = new MetadataStore(createStorage('metadata', StorageType.RAM));
260
+ const metadataStore = new MetadataStore(storage.directory('metadata'));
259
261
 
260
262
  const modelFactory = new ModelFactory().registerModel(ObjectModel);
261
- const snapshotStore = new SnapshotStore(createStorage('snapshots', StorageType.RAM));
263
+ const snapshotStore = new SnapshotStore(storage.directory('snapshots'));
262
264
 
263
265
  const partyFeedProvider = new PartyFeedProvider(metadataStore, peer1.keyring, feedStore, peer1.party.key);
264
266
 
@@ -272,7 +274,7 @@ describe('PartyCore', () => {
272
274
 
273
275
  const feed2 = await partyFeedProvider.createOrOpenWritableFeed();
274
276
 
275
- await peer1.party.processor.writeHaloMessage(createFeedAdmitMessage(
277
+ await peer1.party.credentialsWriter.write(createFeedAdmitMessage(
276
278
  peer1.keyring,
277
279
  peer1.party.key,
278
280
  feed2.key,
@@ -286,12 +288,8 @@ describe('PartyCore', () => {
286
288
  afterTest(async () => party2.close());
287
289
 
288
290
  createTestProtocolPair(
289
- new ReplicatorProtocolPluginFactory(
290
- peer1.partyFeedProvider
291
- ).createPlugins().map(r => r.createExtension()),
292
- new ReplicatorProtocolPluginFactory(
293
- partyFeedProvider
294
- ).createPlugins().map(r => r.createExtension())
291
+ [createReplicatorPlugin(peer1.partyFeedProvider).createExtension()],
292
+ [createReplicatorPlugin(partyFeedProvider).createExtension()]
295
293
  );
296
294
 
297
295
  const item1 = await peer1.party.database.createItem();
@@ -5,15 +5,14 @@
5
5
  import assert from 'assert';
6
6
 
7
7
  import { synchronized } from '@dxos/async';
8
- import { KeyHint, KeyType } from '@dxos/credentials';
8
+ import { KeyHint, KeyType, Message as HaloMessage } from '@dxos/credentials';
9
9
  import { PublicKey } from '@dxos/crypto';
10
10
  import { timed } from '@dxos/debug';
11
- import { createFeedWriter, DatabaseSnapshot, PartyKey, PartySnapshot, Timeframe } from '@dxos/echo-protocol';
11
+ import { createFeedWriter, DatabaseSnapshot, FeedWriter, PartyKey, PartySnapshot, Timeframe } from '@dxos/echo-protocol';
12
12
  import { ModelFactory } from '@dxos/model-factory';
13
13
  import { SubscriptionGroup } from '@dxos/util';
14
14
 
15
- import { Database } from '../api';
16
- import { FeedDatabaseBackend, TimeframeClock } from '../database';
15
+ import { Database, FeedDatabaseBackend, TimeframeClock } from '../packlets/database';
17
16
  import { createMessageSelector, PartyProcessor, PartyFeedProvider, Pipeline } from '../pipeline';
18
17
  import { createAutomaticSnapshots, SnapshotStore } from '../snapshots';
19
18
 
@@ -99,6 +98,11 @@ export class PartyCore {
99
98
  return feed;
100
99
  }
101
100
 
101
+ get credentialsWriter (): FeedWriter<HaloMessage> {
102
+ assert(this._pipeline?.outboundHaloStream, 'Party not open');
103
+ return this._pipeline?.outboundHaloStream;
104
+ }
105
+
102
106
  /**
103
107
  * Opens the pipeline and connects the streams.
104
108
  */
@@ -147,11 +151,6 @@ export class PartyCore {
147
151
  // TODO(burdon): Support read-only parties.
148
152
  const [readStream, writeStream] = await this._pipeline.open();
149
153
 
150
- // Must happen after open.
151
- if (this._pipeline.outboundHaloStream) {
152
- this._partyProcessor.setOutboundStream(this._pipeline.outboundHaloStream);
153
- }
154
-
155
154
  //
156
155
  // Database
157
156
  //
@@ -12,22 +12,40 @@ import {
12
12
  PartyState,
13
13
  Message as HaloMessage,
14
14
  IdentityEventType,
15
- PartyEventType
15
+ PartyEventType,
16
+ SignedMessage
16
17
  } from '@dxos/credentials';
17
18
  import { PublicKey } from '@dxos/crypto';
18
- import { FeedKey, FeedWriter, IHaloStream, PartyKey, HaloStateSnapshot, WriteReceipt } from '@dxos/echo-protocol';
19
+ import { FeedKey, IHaloStream, PartyKey, HaloStateSnapshot } from '@dxos/echo-protocol';
19
20
  import { jsonReplacer } from '@dxos/util';
20
21
 
21
22
  const log = debug('dxos:echo-db:party-processor');
22
23
 
24
+ export interface CredentialProcessor {
25
+ processMessage (message: IHaloStream): Promise<void>
26
+ }
27
+
28
+ export interface PartyStateProvider {
29
+ partyKey: PublicKey
30
+
31
+ /**
32
+ * Whether PartyGenesis was already processed.
33
+ */
34
+ genesisRequired: boolean
35
+ memberKeys: PublicKey[]
36
+ feedKeys: PublicKey[]
37
+ getFeedOwningMember (feedKey: FeedKey): PublicKey | undefined
38
+ isFeedAdmitted (feedKey: FeedKey): boolean
39
+
40
+ getOfflineInvitation (invitationID: Buffer): SignedMessage | undefined
41
+ }
42
+
23
43
  /**
24
44
  * TODO(burdon): Wrapper/Bridge between HALO APIs.
25
45
  */
26
- export class PartyProcessor {
46
+ export class PartyProcessor implements CredentialProcessor, PartyStateProvider {
27
47
  private readonly _state: PartyState;
28
48
 
29
- private _outboundHaloStream: FeedWriter<HaloMessage> | undefined;
30
-
31
49
  readonly feedAdded = new Event<FeedKey>()
32
50
 
33
51
  public readonly keyOrInfoAdded = new Event<PublicKey>();
@@ -124,16 +142,6 @@ export class PartyProcessor {
124
142
  await this._state.processMessages([data]);
125
143
  }
126
144
 
127
- setOutboundStream (stream: FeedWriter<HaloMessage>) {
128
- this._outboundHaloStream = stream;
129
- }
130
-
131
- async writeHaloMessage (message: HaloMessage): Promise<WriteReceipt> {
132
- assert(this._outboundHaloStream, 'Party is closed or read-only');
133
- // TODO(marik-d): Wait for the message to be processed?
134
- return this._outboundHaloStream.write(message);
135
- }
136
-
137
145
  makeSnapshot (): HaloStateSnapshot {
138
146
  return {
139
147
  messages: this._haloMessages
@@ -15,7 +15,7 @@ import { createSetPropertyMutation } from '@dxos/model-factory';
15
15
  import { createStorage, StorageType } from '@dxos/random-access-multi-storage';
16
16
  import { jsonReplacer } from '@dxos/util';
17
17
 
18
- import { TimeframeClock } from '../database';
18
+ import { TimeframeClock } from '../packlets/database';
19
19
  import { PartyProcessor } from './party-processor';
20
20
  import { Pipeline } from './pipeline';
21
21
 
@@ -25,7 +25,7 @@ const log = debug('dxos:echo:pipeline:test');
25
25
  describe('pipeline', () => {
26
26
  test('streams', async () => {
27
27
  const storage = createStorage('', StorageType.RAM);
28
- const feedStore = new FeedStore(storage, { valueEncoding: codec });
28
+ const feedStore = new FeedStore(storage.directory('feed'), { valueEncoding: codec });
29
29
  const feedKeys: Uint8Array[] = [];
30
30
  const feedSelector: FeedSelector = descriptor => !!feedKeys.find(key => descriptor.key.equals(key));
31
31
  const feedReadStream = new FeedStoreIterator(feedSelector, () => 0, new Timeframe());
@@ -87,7 +87,7 @@ describe('pipeline', () => {
87
87
 
88
88
  test('writing', async () => {
89
89
  const storage = createStorage('', StorageType.RAM);
90
- const feedStore = new FeedStore(storage, { valueEncoding: codec });
90
+ const feedStore = new FeedStore(storage.directory('feed'), { valueEncoding: codec });
91
91
  const feedReadStream = new FeedStoreIterator(() => true, () => 0, new Timeframe());
92
92
 
93
93
  const { publicKey, secretKey } = createKeyPair();
@@ -133,8 +133,7 @@ describe('pipeline', () => {
133
133
  itemId: '123',
134
134
  genesis: {
135
135
  itemType: 'foo'
136
- },
137
- timeframe: expect.any(Timeframe)
136
+ }
138
137
  });
139
138
  });
140
139
  });
@@ -16,8 +16,8 @@ import {
16
16
  import { createReadable } from '@dxos/feed-store';
17
17
  import { jsonReplacer } from '@dxos/util';
18
18
 
19
- import { TimeframeClock } from '../database';
20
- import { PartyProcessor } from './party-processor';
19
+ import { TimeframeClock } from '../packlets/database';
20
+ import { CredentialProcessor, PartyStateProvider } from './party-processor';
21
21
 
22
22
  interface Options {
23
23
  readLogger?: (msg: any) => void
@@ -55,17 +55,13 @@ export class Pipeline {
55
55
  * @param _options
56
56
  */
57
57
  constructor (
58
- private readonly _partyProcessor: PartyProcessor,
58
+ private readonly _partyProcessor: CredentialProcessor & PartyStateProvider,
59
59
  private readonly _feedStorIterator: FeedStoreIterator,
60
60
  private readonly _timeframeClock: TimeframeClock,
61
61
  private readonly _feedWriter?: FeedWriter<FeedMessage>,
62
62
  private readonly _options: Options = {}
63
63
  ) {}
64
64
 
65
- get partyKey () {
66
- return this._partyProcessor.partyKey;
67
- }
68
-
69
65
  get isOpen () {
70
66
  return this._inboundEchoStream !== undefined;
71
67
  }
@@ -113,6 +109,8 @@ export class Pipeline {
113
109
  try {
114
110
  const { data: message } = block;
115
111
 
112
+ this._timeframeClock.updateTimeframe(PublicKey.from(block.key), block.seq);
113
+
116
114
  //
117
115
  // HALO
118
116
  //
@@ -129,7 +127,6 @@ export class Pipeline {
129
127
  //
130
128
 
131
129
  if (message.echo) {
132
- this._timeframeClock.updateTimeframe(PublicKey.from(block.key), block.seq);
133
130
  const memberKey = this._partyProcessor.getFeedOwningMember(PublicKey.from(block.key));
134
131
  assert(memberKey, `Ownership of feed ${keyToString(block.key)} could not be determined.`);
135
132
 
@@ -142,7 +139,7 @@ export class Pipeline {
142
139
  seq: block.seq,
143
140
  feedKey: block.key,
144
141
  memberKey,
145
- timeframe: message.echo.timeframe ?? new Timeframe()
142
+ timeframe: message.timeframe ?? new Timeframe()
146
143
  },
147
144
  data: message.echo
148
145
  }));
@@ -171,13 +168,13 @@ export class Pipeline {
171
168
  }, this._feedWriter);
172
169
 
173
170
  this._outboundEchoStream = mapFeedWriter<EchoEnvelope, FeedMessage>(async message => ({
174
- echo: {
175
- ...message,
176
- timeframe: this._timeframeClock.timeframe
177
- }
171
+ timeframe: this._timeframeClock.timeframe,
172
+ echo: message
173
+ }), loggingWriter);
174
+ this._outboundHaloStream = mapFeedWriter<HaloMessage, FeedMessage>(async message => ({
175
+ timeframe: this._timeframeClock.timeframe,
176
+ halo: message
178
177
  }), loggingWriter);
179
- this._outboundHaloStream =
180
- mapFeedWriter<HaloMessage, FeedMessage>(async message => ({ halo: message }), loggingWriter);
181
178
  }
182
179
 
183
180
  return [
@@ -9,6 +9,4 @@ import { Replicator } from '@dxos/protocol-plugin-replicator';
9
9
  /**
10
10
  * Creates authenticator network-protocol plugin that guards access to the replicator.
11
11
  */
12
- export function createAuthPlugin (authenticator: Authenticator, peerId: PublicKey) {
13
- return new AuthPlugin(peerId.asBuffer(), authenticator, [Replicator.extension]);
14
- }
12
+ export const createAuthPlugin = (authenticator: Authenticator, peerId: PublicKey) => new AuthPlugin(peerId.asBuffer(), authenticator, [Replicator.extension]);
@@ -6,7 +6,6 @@ import expect from 'expect';
6
6
  import { it as test } from 'mocha';
7
7
 
8
8
  import { createAuthMessage, createKeyAdmitMessage, createPartyGenesisMessage, Keyring, KeyType } from '@dxos/credentials';
9
- import { MockFeedWriter } from '@dxos/echo-protocol';
10
9
 
11
10
  import { PartyProcessor } from '../pipeline';
12
11
  import { createAuthenticator } from './authenticator';
@@ -23,8 +22,6 @@ describe('authenticator', () => {
23
22
  const signer = CredentialsSigner.createDirectDeviceSigner(keyring);
24
23
 
25
24
  const partyProcessor = new PartyProcessor(partyKey.publicKey);
26
- const feed = new MockFeedWriter();
27
- partyProcessor.setOutboundStream(feed);
28
25
  await partyProcessor.processMessage({
29
26
  data: createPartyGenesisMessage(
30
27
  keyring,
@@ -53,7 +50,7 @@ describe('authenticator', () => {
53
50
  meta: {} as any
54
51
  });
55
52
 
56
- const authenticator = createAuthenticator(partyProcessor, signer);
53
+ const authenticator = createAuthenticator(partyProcessor, signer, null as any);
57
54
  const credential = createAuthMessage(
58
55
  keyring,
59
56
  partyKey.publicKey,