@dxos/echo-db 2.33.5-dev.22471d71 → 2.33.5-dev.33d2877e

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 (359) 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 +12 -0
  12. package/dist/src/echo.test.js.map +1 -1
  13. package/dist/src/halo/contact-manager.d.ts +2 -1
  14. package/dist/src/halo/contact-manager.d.ts.map +1 -1
  15. package/dist/src/halo/contact-manager.js +1 -1
  16. package/dist/src/halo/contact-manager.js.map +1 -1
  17. package/dist/src/halo/halo-factory.d.ts +2 -2
  18. package/dist/src/halo/halo-factory.d.ts.map +1 -1
  19. package/dist/src/halo/halo-factory.js +7 -13
  20. package/dist/src/halo/halo-factory.js.map +1 -1
  21. package/dist/src/halo/halo-party.d.ts +4 -3
  22. package/dist/src/halo/halo-party.d.ts.map +1 -1
  23. package/dist/src/halo/halo-party.js +13 -9
  24. package/dist/src/halo/halo-party.js.map +1 -1
  25. package/dist/src/halo/halo.test.js +4 -3
  26. package/dist/src/halo/halo.test.js.map +1 -1
  27. package/dist/src/halo/identity.js +2 -2
  28. package/dist/src/halo/identity.js.map +1 -1
  29. package/dist/src/halo/party-opener.d.ts +1 -1
  30. package/dist/src/halo/party-opener.d.ts.map +1 -1
  31. package/dist/src/halo/party-opener.js +5 -3
  32. package/dist/src/halo/party-opener.js.map +1 -1
  33. package/dist/src/halo/preferences.d.ts +1 -1
  34. package/dist/src/halo/preferences.d.ts.map +1 -1
  35. package/dist/src/halo/preferences.js +8 -11
  36. package/dist/src/halo/preferences.js.map +1 -1
  37. package/dist/src/index.d.ts +2 -2
  38. package/dist/src/index.d.ts.map +1 -1
  39. package/dist/src/index.js +2 -2
  40. package/dist/src/index.js.map +1 -1
  41. package/dist/src/invitations/greeting-initiator.d.ts +2 -2
  42. package/dist/src/invitations/greeting-initiator.d.ts.map +1 -1
  43. package/dist/src/invitations/greeting-initiator.js +2 -1
  44. package/dist/src/invitations/greeting-initiator.js.map +1 -1
  45. package/dist/src/invitations/greeting-protocol-provider.d.ts.map +1 -1
  46. package/dist/src/invitations/greeting-protocol-provider.js +5 -9
  47. package/dist/src/invitations/greeting-protocol-provider.js.map +1 -1
  48. package/dist/src/invitations/greeting-responder.d.ts +6 -4
  49. package/dist/src/invitations/greeting-responder.d.ts.map +1 -1
  50. package/dist/src/invitations/greeting-responder.js +11 -14
  51. package/dist/src/invitations/greeting-responder.js.map +1 -1
  52. package/dist/src/invitations/halo-recovery-initiator.js +1 -1
  53. package/dist/src/invitations/halo-recovery-initiator.js.map +1 -1
  54. package/dist/src/invitations/invitation-descriptor.js +1 -1
  55. package/dist/src/invitations/invitation-descriptor.js.map +1 -1
  56. package/dist/src/invitations/invitation-factory.d.ts +5 -2
  57. package/dist/src/invitations/invitation-factory.d.ts.map +1 -1
  58. package/dist/src/invitations/invitation-factory.js +4 -3
  59. package/dist/src/invitations/invitation-factory.js.map +1 -1
  60. package/dist/src/invitations/offline-invitation-claimer.d.ts.map +1 -1
  61. package/dist/src/invitations/offline-invitation-claimer.js +6 -8
  62. package/dist/src/invitations/offline-invitation-claimer.js.map +1 -1
  63. package/dist/src/{database → packlets/database}/data-mirror.d.ts +0 -0
  64. package/dist/src/packlets/database/data-mirror.d.ts.map +1 -0
  65. package/dist/src/{database → packlets/database}/data-mirror.js +0 -0
  66. package/dist/src/packlets/database/data-mirror.js.map +1 -0
  67. package/dist/src/{database → packlets/database}/data-mirror.test.d.ts +0 -0
  68. package/dist/src/packlets/database/data-mirror.test.d.ts.map +1 -0
  69. package/dist/src/{database → packlets/database}/data-mirror.test.js +0 -0
  70. package/dist/src/packlets/database/data-mirror.test.js.map +1 -0
  71. package/dist/src/{database → packlets/database}/data-service-host.d.ts +0 -0
  72. package/dist/src/packlets/database/data-service-host.d.ts.map +1 -0
  73. package/dist/src/{database → packlets/database}/data-service-host.js +4 -3
  74. package/dist/src/packlets/database/data-service-host.js.map +1 -0
  75. package/dist/src/{database → packlets/database}/data-service-router.d.ts +0 -0
  76. package/dist/src/packlets/database/data-service-router.d.ts.map +1 -0
  77. package/dist/src/{database → packlets/database}/data-service-router.js +0 -0
  78. package/dist/src/packlets/database/data-service-router.js.map +1 -0
  79. package/dist/src/{database → packlets/database}/database-backend.d.ts +0 -0
  80. package/dist/src/packlets/database/database-backend.d.ts.map +1 -0
  81. package/dist/src/{database → packlets/database}/database-backend.js +0 -0
  82. package/dist/src/packlets/database/database-backend.js.map +1 -0
  83. package/dist/src/{api → packlets/database}/database.d.ts +2 -1
  84. package/dist/src/packlets/database/database.d.ts.map +1 -0
  85. package/dist/src/{api → packlets/database}/database.js +2 -2
  86. package/dist/src/packlets/database/database.js.map +1 -0
  87. package/dist/src/{api → packlets/database}/database.test.d.ts +0 -0
  88. package/dist/src/packlets/database/database.test.d.ts.map +1 -0
  89. package/dist/src/{api → packlets/database}/database.test.js +3 -3
  90. package/dist/src/packlets/database/database.test.js.map +1 -0
  91. package/dist/src/{api → packlets/database}/entity.d.ts +1 -1
  92. package/dist/src/packlets/database/entity.d.ts.map +1 -0
  93. package/dist/src/{api → packlets/database}/entity.js +0 -0
  94. package/dist/src/packlets/database/entity.js.map +1 -0
  95. package/dist/src/{database → packlets/database}/index.d.ts +5 -0
  96. package/dist/src/packlets/database/index.d.ts.map +1 -0
  97. package/dist/src/{database → packlets/database}/index.js +5 -0
  98. package/dist/src/packlets/database/index.js.map +1 -0
  99. package/dist/src/{database → packlets/database}/item-demuxer.d.ts +3 -2
  100. package/dist/src/packlets/database/item-demuxer.d.ts.map +1 -0
  101. package/dist/src/{database → packlets/database}/item-demuxer.js +3 -3
  102. package/dist/src/packlets/database/item-demuxer.js.map +1 -0
  103. package/dist/src/{database → packlets/database}/item-demuxer.test.d.ts +0 -0
  104. package/dist/src/packlets/database/item-demuxer.test.d.ts.map +1 -0
  105. package/dist/src/{database → packlets/database}/item-demuxer.test.js +2 -2
  106. package/dist/src/packlets/database/item-demuxer.test.js.map +1 -0
  107. package/dist/src/{database → packlets/database}/item-manager.d.ts +3 -1
  108. package/dist/src/packlets/database/item-manager.d.ts.map +1 -0
  109. package/dist/src/{database → packlets/database}/item-manager.js +13 -12
  110. package/dist/src/packlets/database/item-manager.js.map +1 -0
  111. package/dist/src/{database → packlets/database}/item-manager.test.d.ts +0 -0
  112. package/dist/src/packlets/database/item-manager.test.d.ts.map +1 -0
  113. package/dist/src/{database → packlets/database}/item-manager.test.js +0 -0
  114. package/dist/src/packlets/database/item-manager.test.js.map +1 -0
  115. package/dist/src/{api → packlets/database}/item.d.ts +1 -1
  116. package/dist/src/packlets/database/item.d.ts.map +1 -0
  117. package/dist/src/{api → packlets/database}/item.js +0 -0
  118. package/dist/src/packlets/database/item.js.map +1 -0
  119. package/dist/src/{api → packlets/database}/link.d.ts +1 -1
  120. package/dist/src/packlets/database/link.d.ts.map +1 -0
  121. package/dist/src/{api → packlets/database}/link.js +0 -0
  122. package/dist/src/packlets/database/link.js.map +1 -0
  123. package/dist/src/{api → packlets/database}/selection/index.d.ts +0 -0
  124. package/dist/src/packlets/database/selection/index.d.ts.map +1 -0
  125. package/dist/src/{api → packlets/database}/selection/index.js +0 -0
  126. package/dist/src/packlets/database/selection/index.js.map +1 -0
  127. package/dist/src/{api → packlets/database}/selection/queries.d.ts +0 -0
  128. package/dist/src/packlets/database/selection/queries.d.ts.map +1 -0
  129. package/dist/src/{api → packlets/database}/selection/queries.js +13 -17
  130. package/dist/src/packlets/database/selection/queries.js.map +1 -0
  131. package/dist/src/{api → packlets/database}/selection/result.d.ts +0 -0
  132. package/dist/src/packlets/database/selection/result.d.ts.map +1 -0
  133. package/dist/src/{api → packlets/database}/selection/result.js +0 -0
  134. package/dist/src/packlets/database/selection/result.js.map +1 -0
  135. package/dist/src/{api → packlets/database}/selection/selection.d.ts +0 -0
  136. package/dist/src/packlets/database/selection/selection.d.ts.map +1 -0
  137. package/dist/src/{api → packlets/database}/selection/selection.js +1 -3
  138. package/dist/src/packlets/database/selection/selection.js.map +1 -0
  139. package/dist/src/{api → packlets/database}/selection/selection.test.d.ts +0 -0
  140. package/dist/src/packlets/database/selection/selection.test.d.ts.map +1 -0
  141. package/dist/src/{api → packlets/database}/selection/selection.test.js +4 -12
  142. package/dist/src/packlets/database/selection/selection.test.js.map +1 -0
  143. package/dist/src/{api → packlets/database}/selection/util.d.ts +0 -0
  144. package/dist/src/packlets/database/selection/util.d.ts.map +1 -0
  145. package/dist/src/{api → packlets/database}/selection/util.js +0 -0
  146. package/dist/src/packlets/database/selection/util.js.map +1 -0
  147. package/dist/src/{database → packlets/database}/testing.d.ts +1 -1
  148. package/dist/src/packlets/database/testing.d.ts.map +1 -0
  149. package/dist/src/{database → packlets/database}/testing.js +4 -4
  150. package/dist/src/packlets/database/testing.js.map +1 -0
  151. package/dist/src/{database → packlets/database}/timeframe-clock.d.ts +0 -0
  152. package/dist/src/packlets/database/timeframe-clock.d.ts.map +1 -0
  153. package/dist/src/{database → packlets/database}/timeframe-clock.js +0 -0
  154. package/dist/src/packlets/database/timeframe-clock.js.map +1 -0
  155. package/dist/src/{errors.d.ts → packlets/errors/index.d.ts} +1 -1
  156. package/dist/src/packlets/errors/index.d.ts.map +1 -0
  157. package/dist/src/{errors.js → packlets/errors/index.js} +1 -1
  158. package/dist/src/packlets/errors/index.js.map +1 -0
  159. package/dist/src/parties/data-party.d.ts +11 -8
  160. package/dist/src/parties/data-party.d.ts.map +1 -1
  161. package/dist/src/parties/data-party.js +18 -13
  162. package/dist/src/parties/data-party.js.map +1 -1
  163. package/dist/src/parties/data-party.test.js +23 -22
  164. package/dist/src/parties/data-party.test.js.map +1 -1
  165. package/dist/src/parties/party-factory.d.ts +2 -8
  166. package/dist/src/parties/party-factory.d.ts.map +1 -1
  167. package/dist/src/parties/party-factory.js +22 -50
  168. package/dist/src/parties/party-factory.js.map +1 -1
  169. package/dist/src/parties/party-manager.d.ts +3 -4
  170. package/dist/src/parties/party-manager.d.ts.map +1 -1
  171. package/dist/src/parties/party-manager.js +4 -5
  172. package/dist/src/parties/party-manager.js.map +1 -1
  173. package/dist/src/parties/party-manager.test.js +14 -13
  174. package/dist/src/parties/party-manager.test.js.map +1 -1
  175. package/dist/src/pipeline/message-selector.d.ts +3 -3
  176. package/dist/src/pipeline/message-selector.d.ts.map +1 -1
  177. package/dist/src/pipeline/message-selector.js +30 -29
  178. package/dist/src/pipeline/message-selector.js.map +1 -1
  179. package/dist/src/pipeline/metadata-store.d.ts +3 -3
  180. package/dist/src/pipeline/metadata-store.d.ts.map +1 -1
  181. package/dist/src/pipeline/metadata-store.js +5 -5
  182. package/dist/src/pipeline/metadata-store.js.map +1 -1
  183. package/dist/src/pipeline/metadata-store.test.js +8 -4
  184. package/dist/src/pipeline/metadata-store.test.js.map +1 -1
  185. package/dist/src/pipeline/party-core.d.ts +21 -6
  186. package/dist/src/pipeline/party-core.d.ts.map +1 -1
  187. package/dist/src/pipeline/party-core.js +14 -17
  188. package/dist/src/pipeline/party-core.js.map +1 -1
  189. package/dist/src/pipeline/party-core.test.js +32 -32
  190. package/dist/src/pipeline/party-core.test.js.map +1 -1
  191. package/dist/src/pipeline/party-processor.d.ts +21 -9
  192. package/dist/src/pipeline/party-processor.d.ts.map +1 -1
  193. package/dist/src/pipeline/party-processor.js +0 -8
  194. package/dist/src/pipeline/party-processor.js.map +1 -1
  195. package/dist/src/pipeline/pipeline.d.ts +3 -5
  196. package/dist/src/pipeline/pipeline.d.ts.map +1 -1
  197. package/dist/src/pipeline/pipeline.js +8 -11
  198. package/dist/src/pipeline/pipeline.js.map +1 -1
  199. package/dist/src/pipeline/pipeline.test.js +4 -5
  200. package/dist/src/pipeline/pipeline.test.js.map +1 -1
  201. package/dist/src/protocol/auth-plugin.d.ts +1 -1
  202. package/dist/src/protocol/auth-plugin.d.ts.map +1 -1
  203. package/dist/src/protocol/auth-plugin.js +1 -3
  204. package/dist/src/protocol/auth-plugin.js.map +1 -1
  205. package/dist/src/protocol/authenticator.d.ts +4 -4
  206. package/dist/src/protocol/authenticator.d.ts.map +1 -1
  207. package/dist/src/protocol/authenticator.js +12 -16
  208. package/dist/src/protocol/authenticator.js.map +1 -1
  209. package/dist/src/protocol/authenticator.test.js +1 -4
  210. package/dist/src/protocol/authenticator.test.js.map +1 -1
  211. package/dist/src/protocol/halo-recovery-plugin.d.ts +1 -1
  212. package/dist/src/protocol/halo-recovery-plugin.d.ts.map +1 -1
  213. package/dist/src/protocol/halo-recovery-plugin.js +1 -3
  214. package/dist/src/protocol/halo-recovery-plugin.js.map +1 -1
  215. package/dist/src/protocol/identity-credentials.d.ts +2 -2
  216. package/dist/src/protocol/identity-credentials.d.ts.map +1 -1
  217. package/dist/src/protocol/identity-credentials.js +4 -4
  218. package/dist/src/protocol/identity-credentials.js.map +1 -1
  219. package/dist/src/protocol/offline-invitation-plugin.d.ts +1 -1
  220. package/dist/src/protocol/offline-invitation-plugin.d.ts.map +1 -1
  221. package/dist/src/protocol/offline-invitation-plugin.js +1 -3
  222. package/dist/src/protocol/offline-invitation-plugin.js.map +1 -1
  223. package/dist/src/protocol/replicator-plugin.d.ts.map +1 -1
  224. package/dist/src/protocol/replicator-plugin.js +4 -6
  225. package/dist/src/protocol/replicator-plugin.js.map +1 -1
  226. package/dist/src/snapshots/snapshot-generator.d.ts +2 -2
  227. package/dist/src/snapshots/snapshot-generator.d.ts.map +1 -1
  228. package/dist/src/snapshots/snapshot-generator.js +13 -15
  229. package/dist/src/snapshots/snapshot-generator.js.map +1 -1
  230. package/dist/src/snapshots/snapshot-store.d.ts +3 -3
  231. package/dist/src/snapshots/snapshot-store.d.ts.map +1 -1
  232. package/dist/src/snapshots/snapshot-store.js +5 -5
  233. package/dist/src/snapshots/snapshot-store.js.map +1 -1
  234. package/dist/src/snapshots/snapshot-store.test.js +1 -1
  235. package/dist/src/snapshots/snapshot-store.test.js.map +1 -1
  236. package/dist/src/snapshots/snapshot.test.js +1 -1
  237. package/dist/src/snapshots/snapshot.test.js.map +1 -1
  238. package/dist/src/testing/testing-factories.d.ts +1 -1
  239. package/dist/src/testing/testing-factories.d.ts.map +1 -1
  240. package/dist/src/testing/testing-factories.js +2 -2
  241. package/dist/src/testing/testing-factories.js.map +1 -1
  242. package/dist/tsconfig.tsbuildinfo +1 -1
  243. package/package.json +18 -18
  244. package/src/api/index.ts +0 -5
  245. package/src/api/schema.test.ts +1 -2
  246. package/src/echo.test.ts +16 -1
  247. package/src/echo.ts +10 -20
  248. package/src/halo/contact-manager.ts +3 -2
  249. package/src/halo/halo-factory.ts +8 -21
  250. package/src/halo/halo-party.ts +16 -9
  251. package/src/halo/halo.test.ts +4 -3
  252. package/src/halo/identity.ts +2 -2
  253. package/src/halo/party-opener.ts +5 -3
  254. package/src/halo/preferences.ts +10 -12
  255. package/src/index.ts +3 -2
  256. package/src/invitations/greeting-initiator.ts +5 -4
  257. package/src/invitations/greeting-protocol-provider.ts +5 -9
  258. package/src/invitations/greeting-responder.ts +15 -17
  259. package/src/invitations/halo-recovery-initiator.ts +1 -1
  260. package/src/invitations/invitation-descriptor.ts +1 -1
  261. package/src/invitations/invitation-factory.ts +8 -5
  262. package/src/invitations/offline-invitation-claimer.ts +6 -8
  263. package/src/{database → packlets/database}/data-mirror.test.ts +1 -1
  264. package/src/{database → packlets/database}/data-mirror.ts +1 -1
  265. package/src/{database → packlets/database}/data-service-host.ts +2 -1
  266. package/src/{database → packlets/database}/data-service-router.ts +0 -0
  267. package/src/{database → packlets/database}/database-backend.ts +0 -0
  268. package/src/{api → packlets/database}/database.test.ts +2 -1
  269. package/src/{api → packlets/database}/database.ts +3 -1
  270. package/src/{api → packlets/database}/entity.ts +1 -1
  271. package/src/{database → packlets/database}/index.ts +5 -0
  272. package/src/{database → packlets/database}/item-demuxer.test.ts +1 -1
  273. package/src/{database → packlets/database}/item-demuxer.ts +5 -3
  274. package/src/{database → packlets/database}/item-manager.test.ts +0 -0
  275. package/src/{database → packlets/database}/item-manager.ts +5 -3
  276. package/src/{api → packlets/database}/item.ts +2 -2
  277. package/src/{api → packlets/database}/link.ts +1 -1
  278. package/src/{api → packlets/database}/selection/index.ts +0 -0
  279. package/src/{api → packlets/database}/selection/queries.ts +14 -18
  280. package/src/{api → packlets/database}/selection/result.ts +0 -0
  281. package/src/{api → packlets/database}/selection/selection.test.ts +4 -12
  282. package/src/{api → packlets/database}/selection/selection.ts +1 -7
  283. package/src/{api → packlets/database}/selection/util.ts +0 -0
  284. package/src/{database → packlets/database}/testing.ts +2 -2
  285. package/src/{database → packlets/database}/timeframe-clock.ts +0 -0
  286. package/src/{errors.ts → packlets/errors/index.ts} +0 -0
  287. package/src/parties/data-party.test.ts +26 -23
  288. package/src/parties/data-party.ts +21 -15
  289. package/src/parties/party-factory.ts +28 -75
  290. package/src/parties/party-manager.test.ts +21 -14
  291. package/src/parties/party-manager.ts +4 -5
  292. package/src/pipeline/message-selector.ts +32 -35
  293. package/src/pipeline/metadata-store.test.ts +8 -4
  294. package/src/pipeline/metadata-store.ts +5 -5
  295. package/src/pipeline/party-core.test.ts +33 -33
  296. package/src/pipeline/party-core.ts +34 -19
  297. package/src/pipeline/party-processor.ts +23 -15
  298. package/src/pipeline/pipeline.test.ts +4 -5
  299. package/src/pipeline/pipeline.ts +12 -15
  300. package/src/protocol/auth-plugin.ts +1 -3
  301. package/src/protocol/authenticator.test.ts +1 -4
  302. package/src/protocol/authenticator.ts +33 -33
  303. package/src/protocol/halo-recovery-plugin.ts +4 -6
  304. package/src/protocol/identity-credentials.ts +4 -4
  305. package/src/protocol/offline-invitation-plugin.ts +4 -6
  306. package/src/protocol/replicator-plugin.ts +4 -6
  307. package/src/snapshots/snapshot-generator.ts +13 -17
  308. package/src/snapshots/snapshot-store.test.ts +1 -1
  309. package/src/snapshots/snapshot-store.ts +5 -6
  310. package/src/snapshots/snapshot.test.ts +1 -1
  311. package/src/testing/testing-factories.ts +3 -3
  312. package/dist/src/api/database.d.ts.map +0 -1
  313. package/dist/src/api/database.js.map +0 -1
  314. package/dist/src/api/database.test.d.ts.map +0 -1
  315. package/dist/src/api/database.test.js.map +0 -1
  316. package/dist/src/api/entity.d.ts.map +0 -1
  317. package/dist/src/api/entity.js.map +0 -1
  318. package/dist/src/api/item.d.ts.map +0 -1
  319. package/dist/src/api/item.js.map +0 -1
  320. package/dist/src/api/link.d.ts.map +0 -1
  321. package/dist/src/api/link.js.map +0 -1
  322. package/dist/src/api/selection/index.d.ts.map +0 -1
  323. package/dist/src/api/selection/index.js.map +0 -1
  324. package/dist/src/api/selection/queries.d.ts.map +0 -1
  325. package/dist/src/api/selection/queries.js.map +0 -1
  326. package/dist/src/api/selection/result.d.ts.map +0 -1
  327. package/dist/src/api/selection/result.js.map +0 -1
  328. package/dist/src/api/selection/selection.d.ts.map +0 -1
  329. package/dist/src/api/selection/selection.js.map +0 -1
  330. package/dist/src/api/selection/selection.test.d.ts.map +0 -1
  331. package/dist/src/api/selection/selection.test.js.map +0 -1
  332. package/dist/src/api/selection/util.d.ts.map +0 -1
  333. package/dist/src/api/selection/util.js.map +0 -1
  334. package/dist/src/database/data-mirror.d.ts.map +0 -1
  335. package/dist/src/database/data-mirror.js.map +0 -1
  336. package/dist/src/database/data-mirror.test.d.ts.map +0 -1
  337. package/dist/src/database/data-mirror.test.js.map +0 -1
  338. package/dist/src/database/data-service-host.d.ts.map +0 -1
  339. package/dist/src/database/data-service-host.js.map +0 -1
  340. package/dist/src/database/data-service-router.d.ts.map +0 -1
  341. package/dist/src/database/data-service-router.js.map +0 -1
  342. package/dist/src/database/database-backend.d.ts.map +0 -1
  343. package/dist/src/database/database-backend.js.map +0 -1
  344. package/dist/src/database/index.d.ts.map +0 -1
  345. package/dist/src/database/index.js.map +0 -1
  346. package/dist/src/database/item-demuxer.d.ts.map +0 -1
  347. package/dist/src/database/item-demuxer.js.map +0 -1
  348. package/dist/src/database/item-demuxer.test.d.ts.map +0 -1
  349. package/dist/src/database/item-demuxer.test.js.map +0 -1
  350. package/dist/src/database/item-manager.d.ts.map +0 -1
  351. package/dist/src/database/item-manager.js.map +0 -1
  352. package/dist/src/database/item-manager.test.d.ts.map +0 -1
  353. package/dist/src/database/item-manager.test.js.map +0 -1
  354. package/dist/src/database/testing.d.ts.map +0 -1
  355. package/dist/src/database/testing.js.map +0 -1
  356. package/dist/src/database/timeframe-clock.d.ts.map +0 -1
  357. package/dist/src/database/timeframe-clock.js.map +0 -1
  358. package/dist/src/errors.d.ts.map +0 -1
  359. package/dist/src/errors.js.map +0 -1
@@ -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';
@@ -24,15 +25,15 @@ import { PartyCore } from './party-core';
24
25
  describe('PartyCore', () => {
25
26
  const setup = async () => {
26
27
  const storage = createStorage('', StorageType.RAM);
27
- const feedStore = new FeedStore(storage, { valueEncoding: codec });
28
+ const feedStore = new FeedStore(storage.directory('feed'), { valueEncoding: codec });
28
29
  afterTest(async () => feedStore.close());
29
30
 
30
31
  const keyring = new Keyring();
31
32
 
32
- const metadataStore = new MetadataStore(createStorage('metadata', StorageType.RAM));
33
+ const metadataStore = new MetadataStore(storage.directory('metadata'));
33
34
 
34
35
  const modelFactory = new ModelFactory().registerModel(ObjectModel);
35
- const snapshotStore = new SnapshotStore(createStorage('snapshots', StorageType.RAM));
36
+ const snapshotStore = new SnapshotStore(storage.directory('snapshots'));
36
37
 
37
38
  const partyKey = await keyring.createKeyRecord({ type: KeyType.PARTY });
38
39
 
@@ -51,7 +52,7 @@ describe('PartyCore', () => {
51
52
  afterTest(async () => party.close());
52
53
 
53
54
  // PartyGenesis (self-signed by Party).
54
- await party.processor.writeHaloMessage(createPartyGenesisMessage(
55
+ await party.credentialsWriter.write(createPartyGenesisMessage(
55
56
  keyring,
56
57
  partyKey,
57
58
  feed.key,
@@ -59,7 +60,7 @@ describe('PartyCore', () => {
59
60
  );
60
61
 
61
62
  // FeedAdmit (signed by the Device KeyChain).
62
- await party.processor.writeHaloMessage(createFeedAdmitMessage(
63
+ await party.credentialsWriter.write(createFeedAdmitMessage(
63
64
  keyring,
64
65
  partyKey.publicKey,
65
66
  feed.key,
@@ -120,7 +121,7 @@ describe('PartyCore', () => {
120
121
  const feedKey = await keyring.createKeyRecord({ type: KeyType.FEED });
121
122
 
122
123
  const eventFired = feedStore.feedOpenedEvent.waitForCount(1);
123
- await party.processor.writeHaloMessage(createFeedAdmitMessage(
124
+ await party.credentialsWriter.write(createFeedAdmitMessage(
124
125
  keyring,
125
126
  party.key,
126
127
  feedKey.publicKey,
@@ -132,15 +133,15 @@ describe('PartyCore', () => {
132
133
 
133
134
  test('opens feed from hints', async () => {
134
135
  const storage = createStorage('', StorageType.RAM);
135
- const feedStore = new FeedStore(storage, { valueEncoding: codec });
136
+ const feedStore = new FeedStore(storage.directory('feed'), { valueEncoding: codec });
136
137
  afterTest(async () => feedStore.close());
137
138
 
138
139
  const keyring = new Keyring();
139
140
 
140
- const metadataStore = new MetadataStore(createStorage('metadata', StorageType.RAM));
141
+ const metadataStore = new MetadataStore(storage.directory('metadata'));
141
142
 
142
143
  const modelFactory = new ModelFactory().registerModel(ObjectModel);
143
- const snapshotStore = new SnapshotStore(createStorage('snapshots', StorageType.RAM));
144
+ const snapshotStore = new SnapshotStore(storage.directory('snapshots'));
144
145
 
145
146
  const partyKey = await keyring.createKeyRecord({ type: KeyType.PARTY });
146
147
 
@@ -160,7 +161,7 @@ describe('PartyCore', () => {
160
161
 
161
162
  const feedOpened = feedStore.feedOpenedEvent.waitForCount(1);
162
163
 
163
- await party.open([{ type: KeyType.FEED, publicKey: otherFeedKey }]);
164
+ await party.open({ feedHints: [otherFeedKey] });
164
165
  afterTest(async () => party.close());
165
166
 
166
167
  await feedOpened;
@@ -175,16 +176,16 @@ describe('PartyCore', () => {
175
176
  const feed = await partyFeedProvider.createOrOpenWritableFeed();
176
177
 
177
178
  const itemId = createId();
178
- await feed.feed.append({
179
+ await feed.feed.append(checkType<FeedMessage>({
180
+ timeframe: new Timeframe(),
179
181
  echo: {
180
182
  itemId,
181
183
  genesis: {
182
184
  itemType: 'dxos:example',
183
185
  modelType: ObjectModel.meta.type
184
- },
185
- timeframe: new Timeframe()
186
+ }
186
187
  }
187
- });
188
+ }));
188
189
 
189
190
  await promiseTimeout(party.database.waitForItem({ id: itemId }), 1000, new Error('timeout'));
190
191
  });
@@ -197,7 +198,7 @@ describe('PartyCore', () => {
197
198
  const fullKey = keyring.getFullKey(feedKey.publicKey);
198
199
  const feed2 = await feedStore.openReadWriteFeed(fullKey!.publicKey, fullKey!.secretKey!);
199
200
 
200
- await party.processor.writeHaloMessage(createFeedAdmitMessage(
201
+ await party.credentialsWriter.write(createFeedAdmitMessage(
201
202
  keyring,
202
203
  party.key,
203
204
  feed2.key,
@@ -205,16 +206,16 @@ describe('PartyCore', () => {
205
206
  ));
206
207
 
207
208
  const itemId = createId();
208
- await feed2.append({
209
+ await feed2.append(checkType<FeedMessage>({
210
+ timeframe: new Timeframe(),
209
211
  echo: {
210
212
  itemId,
211
213
  genesis: {
212
214
  itemType: 'dxos:example',
213
215
  modelType: ObjectModel.meta.type
214
- },
215
- timeframe: new Timeframe()
216
+ }
216
217
  }
217
- });
218
+ }));
218
219
 
219
220
  await promiseTimeout(party.database.waitForItem({ id: itemId }), 1000, new Error('timeout'));
220
221
  });
@@ -226,7 +227,7 @@ describe('PartyCore', () => {
226
227
  const feedKey = await keyring.createKeyRecord({ type: KeyType.FEED });
227
228
  const fullKey = keyring.getFullKey(feedKey.publicKey);
228
229
 
229
- await party.processor.writeHaloMessage(createFeedAdmitMessage(
230
+ await party.credentialsWriter.write(createFeedAdmitMessage(
230
231
  keyring,
231
232
  party.key,
232
233
  feedKey.publicKey,
@@ -235,16 +236,16 @@ describe('PartyCore', () => {
235
236
 
236
237
  const feed2 = await feedStore.openReadWriteFeed(fullKey!.publicKey, fullKey!.secretKey!);
237
238
  const itemId = createId();
238
- await feed2.append({
239
+ await feed2.append(checkType<FeedMessage>({
240
+ timeframe: new Timeframe(),
239
241
  echo: {
240
242
  itemId,
241
243
  genesis: {
242
244
  itemType: 'dxos:example',
243
245
  modelType: ObjectModel.meta.type
244
- },
245
- timeframe: new Timeframe()
246
+ }
246
247
  }
247
- });
248
+ }));
248
249
 
249
250
  await promiseTimeout(party.database.waitForItem({ id: itemId }), 1000, new Error('timeout'));
250
251
  });
@@ -253,13 +254,13 @@ describe('PartyCore', () => {
253
254
  const peer1 = await setup();
254
255
 
255
256
  const storage = createStorage('', StorageType.RAM);
256
- const feedStore = new FeedStore(storage, { valueEncoding: codec });
257
+ const feedStore = new FeedStore(storage.directory('feed'), { valueEncoding: codec });
257
258
  afterTest(async () => feedStore.close());
258
259
 
259
- const metadataStore = new MetadataStore(createStorage('metadata', StorageType.RAM));
260
+ const metadataStore = new MetadataStore(storage.directory('metadata'));
260
261
 
261
262
  const modelFactory = new ModelFactory().registerModel(ObjectModel);
262
- const snapshotStore = new SnapshotStore(createStorage('snapshots', StorageType.RAM));
263
+ const snapshotStore = new SnapshotStore(storage.directory('snapshots'));
263
264
 
264
265
  const partyFeedProvider = new PartyFeedProvider(metadataStore, peer1.keyring, feedStore, peer1.party.key);
265
266
 
@@ -273,17 +274,16 @@ describe('PartyCore', () => {
273
274
 
274
275
  const feed2 = await partyFeedProvider.createOrOpenWritableFeed();
275
276
 
276
- await peer1.party.processor.writeHaloMessage(createFeedAdmitMessage(
277
+ await peer1.party.credentialsWriter.write(createFeedAdmitMessage(
277
278
  peer1.keyring,
278
279
  peer1.party.key,
279
280
  feed2.key,
280
281
  [peer1.partyKey]
281
282
  ));
282
283
 
283
- await party2.open([{
284
- publicKey: peer1.feedKey,
285
- type: KeyType.FEED
286
- }]);
284
+ await party2.open({
285
+ feedHints: [peer1.feedKey]
286
+ });
287
287
  afterTest(async () => party2.close());
288
288
 
289
289
  createTestProtocolPair(
@@ -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 { 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
 
@@ -29,6 +28,22 @@ export interface PartyOptions {
29
28
  snapshotInterval?: number;
30
29
  }
31
30
 
31
+ export interface OpenOptions {
32
+ /**
33
+ * Keys of initial feeds needed to bootstrap the party.
34
+ */
35
+ feedHints?: PublicKey[]
36
+ /**
37
+ * Timeframe to start processing feed messages from.
38
+ */
39
+ initialTimeframe?: Timeframe
40
+ /**
41
+ * Timeframe which must be reached until further processing.
42
+ * PartyCore.open will block until this timeframe is reached.
43
+ */
44
+ targetTimeframe?: Timeframe
45
+ }
46
+
32
47
  /**
33
48
  * Encapsulates core components needed by a party:
34
49
  * - ECHO database with item-manager & item-demuxer.
@@ -56,7 +71,6 @@ export class PartyCore {
56
71
  private readonly _modelFactory: ModelFactory,
57
72
  private readonly _snapshotStore: SnapshotStore,
58
73
  private readonly _memberKey: PublicKey,
59
- private readonly _initialTimeframe?: Timeframe,
60
74
  private readonly _options: PartyOptions = {}
61
75
  ) { }
62
76
 
@@ -99,17 +113,27 @@ export class PartyCore {
99
113
  return feed;
100
114
  }
101
115
 
116
+ get credentialsWriter (): FeedWriter<HaloMessage> {
117
+ assert(this._pipeline?.outboundHaloStream, 'Party not open');
118
+ return this._pipeline?.outboundHaloStream;
119
+ }
120
+
102
121
  /**
103
122
  * Opens the pipeline and connects the streams.
104
123
  */
105
124
  @synchronized
106
125
  @timed(1_000)
107
- async open (keyHints: KeyHint[] = []) {
126
+ async open (options: OpenOptions = {}) {
127
+ const {
128
+ feedHints = [],
129
+ initialTimeframe
130
+ } = options;
131
+
108
132
  if (this.isOpen) {
109
133
  return this;
110
134
  }
111
135
 
112
- this._timeframeClock = new TimeframeClock(this._initialTimeframe);
136
+ this._timeframeClock = new TimeframeClock(initialTimeframe);
113
137
 
114
138
  // Open all feeds known from metadata and open or create a writable feed to the party.
115
139
  await this._feedProvider.openKnownFeeds();
@@ -124,12 +148,8 @@ export class PartyCore {
124
148
  void this._feedProvider.createOrOpenReadOnlyFeed(feed);
125
149
  }));
126
150
 
127
- // Hint at our own writable feed.
128
- // TODO(dmaretskyi): Does not seem like it should be required, but without it replication between devices (B -> A) breaks.
129
- await this._partyProcessor.takeHints([{ type: KeyType.FEED, publicKey: writableFeed.key }]);
130
-
131
- if (keyHints.length > 0) {
132
- await this._partyProcessor.takeHints(keyHints);
151
+ if (feedHints.length > 0) {
152
+ await this._partyProcessor.takeHints(feedHints.map(publicKey => ({ publicKey, type: KeyType.FEED })));
133
153
  }
134
154
 
135
155
  //
@@ -138,7 +158,7 @@ export class PartyCore {
138
158
 
139
159
  const iterator = await this._feedProvider.createIterator(
140
160
  createMessageSelector(this._partyProcessor, this._timeframeClock),
141
- this._initialTimeframe
161
+ initialTimeframe
142
162
  );
143
163
 
144
164
  this._pipeline = new Pipeline(
@@ -147,11 +167,6 @@ export class PartyCore {
147
167
  // TODO(burdon): Support read-only parties.
148
168
  const [readStream, writeStream] = await this._pipeline.open();
149
169
 
150
- // Must happen after open.
151
- if (this._pipeline.outboundHaloStream) {
152
- this._partyProcessor.setOutboundStream(this._pipeline.outboundHaloStream);
153
- }
154
-
155
170
  //
156
171
  // Database
157
172
  //
@@ -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,
@@ -4,27 +4,29 @@
4
4
 
5
5
  import debug from 'debug';
6
6
 
7
- import { Authenticator, codec, createAuthMessage, createEnvelopeMessage, createFeedAdmitMessage, PartyAuthenticator } from '@dxos/credentials';
8
- import { FeedKey, PartyKey } from '@dxos/echo-protocol';
7
+ import { Message as HaloMessage, Authenticator, codec, createAuthMessage, createEnvelopeMessage, createFeedAdmitMessage, PartyAuthenticator } from '@dxos/credentials';
8
+ import { FeedKey, FeedWriter, PartyKey } from '@dxos/echo-protocol';
9
9
 
10
10
  import { PartyProcessor } from '../pipeline';
11
11
  import { CredentialsSigner } from './credentials-signer';
12
12
 
13
13
  const log = debug('dxos:echo-db:authenticator');
14
14
 
15
- export function createAuthenticator (partyProcessor: PartyProcessor, credentialsSigner: CredentialsSigner): Authenticator {
16
- return new PartyAuthenticator(partyProcessor.state, async auth => {
17
- if (auth.feedAdmit && auth.feedKey && !partyProcessor.isFeedAdmitted(auth.feedKey)) {
18
- log(`Admitting feed of authenticated member: ${auth.feedKey}`);
19
- await partyProcessor.writeHaloMessage(createEnvelopeMessage(
20
- credentialsSigner.signer,
21
- partyProcessor.partyKey,
22
- auth.feedAdmit,
23
- [credentialsSigner.getDeviceSigningKeys()]
24
- ));
25
- }
26
- });
27
- }
15
+ export const createAuthenticator = (
16
+ partyProcessor: PartyProcessor,
17
+ credentialsSigner: CredentialsSigner,
18
+ credentialsWriter: FeedWriter<HaloMessage>
19
+ ): Authenticator => new PartyAuthenticator(partyProcessor.state, async auth => {
20
+ if (auth.feedAdmit && auth.feedKey && !partyProcessor.isFeedAdmitted(auth.feedKey)) {
21
+ log(`Admitting feed of authenticated member: ${auth.feedKey}`);
22
+ await credentialsWriter.write(createEnvelopeMessage(
23
+ credentialsSigner.signer,
24
+ partyProcessor.partyKey,
25
+ auth.feedAdmit,
26
+ [credentialsSigner.getDeviceSigningKeys()]
27
+ ));
28
+ }
29
+ });
28
30
 
29
31
  export interface CredentialsProvider {
30
32
  /**
@@ -33,24 +35,22 @@ export interface CredentialsProvider {
33
35
  get (): Buffer
34
36
  }
35
37
 
36
- export function createCredentialsProvider (credentialsSigner: CredentialsSigner, partyKey: PartyKey, feedKey: FeedKey): CredentialsProvider {
37
- return {
38
- get: () => {
39
- const authMessage = createAuthMessage(
38
+ export const createCredentialsProvider = (credentialsSigner: CredentialsSigner, partyKey: PartyKey, feedKey: FeedKey): CredentialsProvider => ({
39
+ get: () => {
40
+ const authMessage = createAuthMessage(
41
+ credentialsSigner.signer,
42
+ partyKey,
43
+ credentialsSigner.getIdentityKey(),
44
+ credentialsSigner.getDeviceSigningKeys(),
45
+ feedKey,
46
+ undefined,
47
+ createFeedAdmitMessage(
40
48
  credentialsSigner.signer,
41
49
  partyKey,
42
- credentialsSigner.getIdentityKey(),
43
- credentialsSigner.getDeviceSigningKeys(),
44
50
  feedKey,
45
- undefined,
46
- createFeedAdmitMessage(
47
- credentialsSigner.signer,
48
- partyKey,
49
- feedKey,
50
- [feedKey, credentialsSigner.getDeviceSigningKeys()]
51
- )
52
- );
53
- return Buffer.from(codec.encode(authMessage));
54
- }
55
- };
56
- }
51
+ [feedKey, credentialsSigner.getDeviceSigningKeys()]
52
+ )
53
+ );
54
+ return Buffer.from(codec.encode(authMessage));
55
+ }
56
+ });
@@ -12,9 +12,7 @@ import { HaloRecoveryInitiator, InvitationFactory } from '../invitations';
12
12
  * Plugin is intended to be used in HALO party swarm.
13
13
  *
14
14
  */
15
- export function createHaloRecoveryPlugin (identityKey: PublicKey, invitationFactory: InvitationFactory, peerId: PublicKey) {
16
- return new GreetingCommandPlugin(
17
- peerId.asBuffer(),
18
- HaloRecoveryInitiator.createHaloInvitationClaimHandler(identityKey, invitationFactory)
19
- );
20
- }
15
+ export const createHaloRecoveryPlugin = (identityKey: PublicKey, invitationFactory: InvitationFactory, peerId: PublicKey) => new GreetingCommandPlugin(
16
+ peerId.asBuffer(),
17
+ HaloRecoveryInitiator.createHaloInvitationClaimHandler(identityKey, invitationFactory)
18
+ );
@@ -25,7 +25,7 @@ export interface IdentityCredentials {
25
25
 
26
26
  export type IdentityCredentialsProvider = () => IdentityCredentials | undefined
27
27
 
28
- export async function createTestIdentityCredentials (keyring: Keyring): Promise<IdentityCredentials> {
28
+ export const createTestIdentityCredentials = async (keyring: Keyring): Promise<IdentityCredentials> => {
29
29
  const identityKey = await keyring.createKeyRecord({ type: KeyType.IDENTITY });
30
30
  const deviceKey = await keyring.createKeyRecord({ type: KeyType.DEVICE });
31
31
  const feedKey = await keyring.createKeyRecord({ type: KeyType.FEED });
@@ -53,9 +53,9 @@ export async function createTestIdentityCredentials (keyring: Keyring): Promise<
53
53
  preferences: undefined,
54
54
  contacts: undefined
55
55
  };
56
- }
56
+ };
57
57
 
58
- export async function deriveTestDeviceCredentials (identity: IdentityCredentials): Promise<IdentityCredentials> {
58
+ export const deriveTestDeviceCredentials = async (identity: IdentityCredentials): Promise<IdentityCredentials> => {
59
59
  const deviceKey = await identity.keyring.createKeyRecord({ type: KeyType.DEVICE });
60
60
  const keyAdmit = createKeyAdmitMessage(identity.keyring, identity.identityKey.publicKey, deviceKey, [identity.identityKey]);
61
61
 
@@ -75,4 +75,4 @@ export async function deriveTestDeviceCredentials (identity: IdentityCredentials
75
75
  deviceKeyChain
76
76
  )
77
77
  };
78
- }
78
+ };
@@ -11,9 +11,7 @@ import { InvitationFactory, OfflineInvitationClaimer } from '../invitations';
11
11
  * Creates network protocol plugin that allows peers to claim offline invitations.
12
12
  * Plugin is intended to be used in data-party swarms.
13
13
  */
14
- export function createOfflineInvitationPlugin (invitationFactory: InvitationFactory, peerId: PublicKey) {
15
- return new GreetingCommandPlugin(
16
- peerId.asBuffer(),
17
- OfflineInvitationClaimer.createOfflineInvitationClaimHandler(invitationFactory)
18
- );
19
- }
14
+ export const createOfflineInvitationPlugin = (invitationFactory: InvitationFactory, peerId: PublicKey) => new GreetingCommandPlugin(
15
+ peerId.asBuffer(),
16
+ OfflineInvitationClaimer.createOfflineInvitationClaimHandler(invitationFactory)
17
+ );