@econ-v1/domain 6.7.0 → 6.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/dist/errors/index.d.ts +96 -25
  2. package/dist/errors/index.d.ts.map +1 -1
  3. package/dist/events/index.d.ts +127 -20
  4. package/dist/events/index.d.ts.map +1 -1
  5. package/dist/index.d.ts +250 -47
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/models/agent.d.ts +25 -4
  8. package/dist/models/agent.d.ts.map +1 -1
  9. package/dist/models/app-data.d.ts +84 -0
  10. package/dist/models/app-data.d.ts.map +1 -0
  11. package/dist/models/conversation.d.ts +12 -2
  12. package/dist/models/conversation.d.ts.map +1 -1
  13. package/dist/models/delegation.d.ts +12 -3
  14. package/dist/models/delegation.d.ts.map +1 -1
  15. package/dist/models/device-boot-state.d.ts +12 -0
  16. package/dist/models/device-boot-state.d.ts.map +1 -0
  17. package/dist/models/device-identity.d.ts +11 -3
  18. package/dist/models/device-identity.d.ts.map +1 -1
  19. package/dist/models/graph.d.ts +26 -3
  20. package/dist/models/graph.d.ts.map +1 -1
  21. package/dist/models/index.d.ts +82 -14
  22. package/dist/models/index.d.ts.map +1 -1
  23. package/dist/models/json.d.ts +5 -5
  24. package/dist/models/json.d.ts.map +1 -1
  25. package/dist/models/l402.d.ts +4 -5
  26. package/dist/models/l402.d.ts.map +1 -1
  27. package/dist/models/live-query-definition.d.ts +15 -16
  28. package/dist/models/live-query-definition.d.ts.map +1 -1
  29. package/dist/models/node-app-memory.d.ts +107 -0
  30. package/dist/models/node-app-memory.d.ts.map +1 -0
  31. package/dist/models/outbox-intent.d.ts +3 -3
  32. package/dist/models/outbox-intent.d.ts.map +1 -1
  33. package/dist/models/outbox.d.ts +67 -15
  34. package/dist/models/outbox.d.ts.map +1 -1
  35. package/dist/models/owner-views.d.ts +28 -28
  36. package/dist/models/owner-views.d.ts.map +1 -1
  37. package/dist/models/payment.d.ts +28 -9
  38. package/dist/models/payment.d.ts.map +1 -1
  39. package/dist/models/query-diff.d.ts +2 -2
  40. package/dist/models/query-diff.d.ts.map +1 -1
  41. package/dist/models/release-manifest.d.ts +32 -47
  42. package/dist/models/release-manifest.d.ts.map +1 -1
  43. package/dist/models/repository-write.d.ts +3 -3
  44. package/dist/models/repository-write.d.ts.map +1 -1
  45. package/dist/models/revisioned-commands.d.ts +66 -13
  46. package/dist/models/revisioned-commands.d.ts.map +1 -1
  47. package/dist/models/revisioned.d.ts +50 -10
  48. package/dist/models/revisioned.d.ts.map +1 -1
  49. package/dist/models/settings.d.ts +2 -2
  50. package/dist/models/settings.d.ts.map +1 -1
  51. package/dist/models/sync.d.ts +18 -18
  52. package/dist/models/sync.d.ts.map +1 -1
  53. package/dist/models/wallet.d.ts +16 -16
  54. package/dist/models/wallet.d.ts.map +1 -1
  55. package/dist/queries/certificate-trust.d.ts +13 -0
  56. package/dist/queries/certificate-trust.d.ts.map +1 -0
  57. package/dist/queries/conversations.d.ts +38 -7
  58. package/dist/queries/conversations.d.ts.map +1 -1
  59. package/dist/queries/discovery.d.ts +10 -10
  60. package/dist/queries/discovery.d.ts.map +1 -1
  61. package/dist/queries/notifications.d.ts +24 -4
  62. package/dist/queries/notifications.d.ts.map +1 -1
  63. package/dist/queries/onboarding-flow.d.ts +25 -0
  64. package/dist/queries/onboarding-flow.d.ts.map +1 -0
  65. package/dist/queries/onboarding-lcd-screen.d.ts +56 -0
  66. package/dist/queries/onboarding-lcd-screen.d.ts.map +1 -0
  67. package/dist/queries/onboarding-status.d.ts +10 -10
  68. package/dist/queries/onboarding-status.d.ts.map +1 -1
  69. package/dist/queries/revisioned.d.ts +47 -13
  70. package/dist/queries/revisioned.d.ts.map +1 -1
  71. package/dist/queries/wallet.d.ts +40 -10
  72. package/dist/queries/wallet.d.ts.map +1 -1
  73. package/dist/services/abort-signal.d.ts +54 -0
  74. package/dist/services/abort-signal.d.ts.map +1 -0
  75. package/dist/services/certificate-trust-service.d.ts +42 -0
  76. package/dist/services/certificate-trust-service.d.ts.map +1 -0
  77. package/dist/services/conversation-service.d.ts +103 -15
  78. package/dist/services/conversation-service.d.ts.map +1 -1
  79. package/dist/services/conversation-sync.d.ts +9 -5
  80. package/dist/services/conversation-sync.d.ts.map +1 -1
  81. package/dist/services/device-boot-state-service.d.ts +17 -0
  82. package/dist/services/device-boot-state-service.d.ts.map +1 -0
  83. package/dist/services/device-cleanup-service.d.ts +47 -0
  84. package/dist/services/device-cleanup-service.d.ts.map +1 -0
  85. package/dist/services/discovery-probe-service.d.ts +37 -46
  86. package/dist/services/discovery-probe-service.d.ts.map +1 -1
  87. package/dist/services/gossip-service.d.ts +28 -13
  88. package/dist/services/gossip-service.d.ts.map +1 -1
  89. package/dist/services/invite-redemption-service.d.ts +43 -0
  90. package/dist/services/invite-redemption-service.d.ts.map +1 -0
  91. package/dist/services/lan-candidate-refresh-service.d.ts +22 -7
  92. package/dist/services/lan-candidate-refresh-service.d.ts.map +1 -1
  93. package/dist/services/lcd-decision-service.d.ts +58 -0
  94. package/dist/services/lcd-decision-service.d.ts.map +1 -0
  95. package/dist/services/onboarding-checkpoint-store.d.ts +54 -0
  96. package/dist/services/onboarding-checkpoint-store.d.ts.map +1 -0
  97. package/dist/services/onboarding-flow-service.d.ts +180 -0
  98. package/dist/services/onboarding-flow-service.d.ts.map +1 -0
  99. package/dist/services/onboarding-status-service.d.ts +21 -38
  100. package/dist/services/onboarding-status-service.d.ts.map +1 -1
  101. package/dist/services/outbox-service.d.ts +105 -29
  102. package/dist/services/outbox-service.d.ts.map +1 -1
  103. package/dist/services/owner-claim-service.d.ts +187 -0
  104. package/dist/services/owner-claim-service.d.ts.map +1 -0
  105. package/dist/services/owner-view-refresh-service.d.ts +40 -0
  106. package/dist/services/owner-view-refresh-service.d.ts.map +1 -0
  107. package/dist/services/owner-view-service.d.ts +49 -4
  108. package/dist/services/owner-view-service.d.ts.map +1 -1
  109. package/dist/services/peer-directory-service.d.ts +53 -17
  110. package/dist/services/peer-directory-service.d.ts.map +1 -1
  111. package/dist/services/release-manifest-verifier.d.ts +18 -20
  112. package/dist/services/release-manifest-verifier.d.ts.map +1 -1
  113. package/dist/services/revisioned-domain-service.d.ts +50 -17
  114. package/dist/services/revisioned-domain-service.d.ts.map +1 -1
  115. package/dist/services/runtime-globals.d.ts +39 -0
  116. package/dist/services/runtime-globals.d.ts.map +1 -0
  117. package/dist/services/session-service.d.ts +23 -3
  118. package/dist/services/session-service.d.ts.map +1 -1
  119. package/dist/services/sync/authoritative-mirror.d.ts +88 -15
  120. package/dist/services/sync/authoritative-mirror.d.ts.map +1 -1
  121. package/dist/services/sync/index.d.ts +17 -5
  122. package/dist/services/sync/index.d.ts.map +1 -1
  123. package/dist/services/sync/log-sync.d.ts +42 -8
  124. package/dist/services/sync/log-sync.d.ts.map +1 -1
  125. package/dist/services/sync/revision-merge.d.ts +80 -13
  126. package/dist/services/sync/revision-merge.d.ts.map +1 -1
  127. package/dist/services/sync/strategy.d.ts +11 -1
  128. package/dist/services/sync/strategy.d.ts.map +1 -1
  129. package/dist/services/transport-manager.d.ts +84 -29
  130. package/dist/services/transport-manager.d.ts.map +1 -1
  131. package/dist/services/wallet-mirror-service.d.ts +81 -18
  132. package/dist/services/wallet-mirror-service.d.ts.map +1 -1
  133. package/dist/services/wifi-provisioning-service.d.ts +146 -0
  134. package/dist/services/wifi-provisioning-service.d.ts.map +1 -0
  135. package/package.json +18 -12
  136. package/src/errors/index.js +126 -0
  137. package/src/events/index.js +124 -0
  138. package/src/index.js +566 -0
  139. package/src/models/agent.js +43 -0
  140. package/src/models/app-data.js +122 -0
  141. package/src/models/conversation.js +36 -0
  142. package/{dist → src}/models/delegation.js +18 -1
  143. package/src/models/device-boot-state.js +3 -0
  144. package/{dist → src}/models/device-identity.js +18 -2
  145. package/{dist → src}/models/graph.js +30 -3
  146. package/src/models/index.js +175 -0
  147. package/src/models/json.js +18 -0
  148. package/src/models/l402.js +9 -0
  149. package/src/models/live-query-definition.js +30 -0
  150. package/src/models/node-app-memory.js +130 -0
  151. package/src/models/outbox-intent.js +12 -0
  152. package/{dist → src}/models/outbox.js +102 -3
  153. package/src/models/owner-views.js +59 -0
  154. package/src/models/payment.js +24 -0
  155. package/src/models/query-diff.js +7 -0
  156. package/src/models/release-manifest.js +160 -0
  157. package/src/models/repository-write.js +10 -0
  158. package/src/models/revisioned-commands.js +92 -0
  159. package/src/models/revisioned.js +41 -0
  160. package/src/models/settings.js +16 -0
  161. package/src/models/sync.js +44 -0
  162. package/src/models/wallet.js +40 -0
  163. package/src/queries/certificate-trust.js +31 -0
  164. package/{dist → src}/queries/conversations.js +54 -3
  165. package/src/queries/discovery.js +34 -0
  166. package/{dist → src}/queries/notifications.js +25 -2
  167. package/src/queries/onboarding-flow.js +48 -0
  168. package/src/queries/onboarding-lcd-screen.js +100 -0
  169. package/src/queries/onboarding-status.js +34 -0
  170. package/src/queries/revisioned.js +128 -0
  171. package/{dist → src}/queries/wallet.js +35 -1
  172. package/src/services/abort-signal.js +69 -0
  173. package/src/services/certificate-trust-service.js +119 -0
  174. package/{dist → src}/services/conversation-service.js +108 -1
  175. package/src/services/conversation-sync.js +28 -0
  176. package/src/services/device-boot-state-service.js +45 -0
  177. package/src/services/device-cleanup-service.js +112 -0
  178. package/src/services/discovery-probe-service.js +196 -0
  179. package/{dist → src}/services/gossip-service.js +54 -4
  180. package/src/services/invite-redemption-service.js +64 -0
  181. package/src/services/lan-candidate-refresh-service.js +164 -0
  182. package/src/services/lcd-decision-service.js +93 -0
  183. package/src/services/onboarding-checkpoint-store.js +155 -0
  184. package/src/services/onboarding-flow-service.js +1096 -0
  185. package/src/services/onboarding-status-service.js +64 -0
  186. package/{dist → src}/services/outbox-service.js +132 -1
  187. package/src/services/owner-claim-service.js +347 -0
  188. package/src/services/owner-view-refresh-service.js +208 -0
  189. package/src/services/owner-view-service.js +87 -0
  190. package/{dist → src}/services/peer-directory-service.js +72 -3
  191. package/src/services/release-manifest-verifier.js +108 -0
  192. package/{dist → src}/services/revisioned-domain-service.js +189 -9
  193. package/src/services/runtime-globals.js +174 -0
  194. package/src/services/session-service.js +50 -0
  195. package/{dist → src}/services/sync/authoritative-mirror.js +90 -1
  196. package/src/services/sync/index.js +67 -0
  197. package/src/services/sync/log-sync.js +60 -0
  198. package/src/services/sync/revision-merge.js +119 -0
  199. package/src/services/sync/strategy.js +44 -0
  200. package/src/services/transport-manager.js +478 -0
  201. package/{dist → src}/services/wallet-mirror-service.js +226 -6
  202. package/src/services/wifi-provisioning-service.js +278 -0
  203. package/dist/errors/index.js +0 -45
  204. package/dist/errors/index.js.map +0 -1
  205. package/dist/events/index.js +0 -17
  206. package/dist/events/index.js.map +0 -1
  207. package/dist/index.js +0 -31
  208. package/dist/index.js.map +0 -1
  209. package/dist/models/agent.js +0 -17
  210. package/dist/models/agent.js.map +0 -1
  211. package/dist/models/conversation.js +0 -2
  212. package/dist/models/conversation.js.map +0 -1
  213. package/dist/models/delegation.js.map +0 -1
  214. package/dist/models/device-identity.js.map +0 -1
  215. package/dist/models/graph.js.map +0 -1
  216. package/dist/models/index.js +0 -8
  217. package/dist/models/index.js.map +0 -1
  218. package/dist/models/json.js +0 -2
  219. package/dist/models/json.js.map +0 -1
  220. package/dist/models/l402.js +0 -2
  221. package/dist/models/l402.js.map +0 -1
  222. package/dist/models/live-query-definition.js +0 -2
  223. package/dist/models/live-query-definition.js.map +0 -1
  224. package/dist/models/outbox-intent.js +0 -2
  225. package/dist/models/outbox-intent.js.map +0 -1
  226. package/dist/models/outbox.js.map +0 -1
  227. package/dist/models/owner-views.js +0 -7
  228. package/dist/models/owner-views.js.map +0 -1
  229. package/dist/models/payment.js +0 -3
  230. package/dist/models/payment.js.map +0 -1
  231. package/dist/models/query-diff.js +0 -2
  232. package/dist/models/query-diff.js.map +0 -1
  233. package/dist/models/release-manifest.js +0 -147
  234. package/dist/models/release-manifest.js.map +0 -1
  235. package/dist/models/repository-write.js +0 -2
  236. package/dist/models/repository-write.js.map +0 -1
  237. package/dist/models/revisioned-commands.js +0 -35
  238. package/dist/models/revisioned-commands.js.map +0 -1
  239. package/dist/models/revisioned.js +0 -2
  240. package/dist/models/revisioned.js.map +0 -1
  241. package/dist/models/settings.js +0 -2
  242. package/dist/models/settings.js.map +0 -1
  243. package/dist/models/sync.js +0 -2
  244. package/dist/models/sync.js.map +0 -1
  245. package/dist/models/wallet.js +0 -2
  246. package/dist/models/wallet.js.map +0 -1
  247. package/dist/queries/conversations.js.map +0 -1
  248. package/dist/queries/discovery.js +0 -27
  249. package/dist/queries/discovery.js.map +0 -1
  250. package/dist/queries/notifications.js.map +0 -1
  251. package/dist/queries/onboarding-status.js +0 -27
  252. package/dist/queries/onboarding-status.js.map +0 -1
  253. package/dist/queries/revisioned.js +0 -58
  254. package/dist/queries/revisioned.js.map +0 -1
  255. package/dist/queries/wallet.js.map +0 -1
  256. package/dist/services/conversation-service.js.map +0 -1
  257. package/dist/services/conversation-sync.js +0 -9
  258. package/dist/services/conversation-sync.js.map +0 -1
  259. package/dist/services/discovery-probe-service.js +0 -129
  260. package/dist/services/discovery-probe-service.js.map +0 -1
  261. package/dist/services/gossip-service.js.map +0 -1
  262. package/dist/services/lan-candidate-refresh-service.js +0 -79
  263. package/dist/services/lan-candidate-refresh-service.js.map +0 -1
  264. package/dist/services/onboarding-status-service.js +0 -32
  265. package/dist/services/onboarding-status-service.js.map +0 -1
  266. package/dist/services/outbox-service.js.map +0 -1
  267. package/dist/services/owner-view-service.js +0 -21
  268. package/dist/services/owner-view-service.js.map +0 -1
  269. package/dist/services/peer-directory-service.js.map +0 -1
  270. package/dist/services/release-manifest-verifier.js +0 -84
  271. package/dist/services/release-manifest-verifier.js.map +0 -1
  272. package/dist/services/revisioned-domain-service.js.map +0 -1
  273. package/dist/services/session-service.js +0 -20
  274. package/dist/services/session-service.js.map +0 -1
  275. package/dist/services/sync/authoritative-mirror.js.map +0 -1
  276. package/dist/services/sync/index.js +0 -4
  277. package/dist/services/sync/index.js.map +0 -1
  278. package/dist/services/sync/log-sync.js +0 -20
  279. package/dist/services/sync/log-sync.js.map +0 -1
  280. package/dist/services/sync/revision-merge.js +0 -46
  281. package/dist/services/sync/revision-merge.js.map +0 -1
  282. package/dist/services/sync/strategy.js +0 -2
  283. package/dist/services/sync/strategy.js.map +0 -1
  284. package/dist/services/transport-manager.js +0 -234
  285. package/dist/services/transport-manager.js.map +0 -1
  286. package/dist/services/wallet-mirror-service.js.map +0 -1
@@ -0,0 +1,67 @@
1
+ // @ts-check
2
+
3
+ /**
4
+ * @typedef {import("./authoritative-mirror.js").AuthoritativeCommandOptions} AuthoritativeCommandOptions
5
+ */
6
+ /**
7
+ * @template TValue
8
+ * @template TCommand
9
+ * @template TResult
10
+ * @typedef {import("./authoritative-mirror.js").AuthoritativeMirrorOptions<TValue, TCommand, TResult>} AuthoritativeMirrorOptions
11
+ */
12
+ /**
13
+ * @template TPayload
14
+ * @typedef {import("./log-sync.js").LogSyncOptions<TPayload>} LogSyncOptions
15
+ */
16
+ /**
17
+ * @template TValue
18
+ * @typedef {import("./revision-merge.js").RevisionMergeOptions<TValue>} RevisionMergeOptions
19
+ */
20
+ /**
21
+ * @template TValue
22
+ * @typedef {import("./revision-merge.js").RevisionWriteInput<TValue>} RevisionWriteInput
23
+ */
24
+ /**
25
+ * @template TPayload
26
+ * @typedef {import("./strategy.js").AuthoritativeCommand<TPayload>} AuthoritativeCommand
27
+ */
28
+ /**
29
+ * @template TValue
30
+ * @typedef {import("./strategy.js").AuthoritativeSnapshot<TValue>} AuthoritativeSnapshot
31
+ */
32
+ /**
33
+ * @template TValue
34
+ * @typedef {import("./strategy.js").RevisionCommandResult<TValue>} RevisionCommandResult
35
+ */
36
+ /**
37
+ * @template TValue
38
+ * @typedef {import("./strategy.js").RevisionConflict<TValue>} RevisionConflict
39
+ */
40
+ /**
41
+ * @template TValue
42
+ * @typedef {import("./strategy.js").RevisionEntity<TValue>} RevisionEntity
43
+ */
44
+ /**
45
+ * @template TValue
46
+ * @typedef {import("./strategy.js").RevisionIntent<TValue>} RevisionIntent
47
+ */
48
+ /**
49
+ * @typedef {import("./strategy.js").SyncApplyResult} SyncApplyResult
50
+ */
51
+ /**
52
+ * @template TPayload
53
+ * @typedef {import("./strategy.js").SyncDelta<TPayload>} SyncDelta
54
+ */
55
+ /**
56
+ * @typedef {import("./strategy.js").SyncDeltaContext} SyncDeltaContext
57
+ */
58
+ /**
59
+ * @template TPayload
60
+ * @typedef {import("./strategy.js").SyncStrategy<TPayload>} SyncStrategy
61
+ */
62
+ /**
63
+ * @typedef {import("./strategy.js").SyncStrategyKind} SyncStrategyKind
64
+ */
65
+ export { AuthoritativeMirror, AuthoritativeRevalidationRequiredError } from "./authoritative-mirror.js";
66
+ export { LogSync } from "./log-sync.js";
67
+ export { RevisionMerge } from "./revision-merge.js";
@@ -0,0 +1,60 @@
1
+ // @ts-check
2
+
3
+ /**
4
+ * @typedef {import("../../models/sync.js").SyncApplyResult} SyncApplyResult
5
+ */
6
+ /**
7
+ * @template TPayload
8
+ * @typedef {import("../../models/sync.js").SyncDelta<TPayload>} SyncDelta
9
+ */
10
+ /**
11
+ * @typedef {import("../../models/sync.js").SyncDeltaContext} SyncDeltaContext
12
+ */
13
+ /**
14
+ * @template TPayload
15
+ * @typedef {import("../../models/sync.js").SyncStrategy<TPayload>} SyncStrategy
16
+ */
17
+ /**
18
+ * @template TPayload
19
+ * @typedef {{ readonly apply: (payload: TPayload, delta: SyncDelta<TPayload>) => Promise<void>; readonly key?: (delta: SyncDelta<TPayload>) => string; }} LogSyncOptions
20
+ */
21
+ /**
22
+ * @template TPayload
23
+ * @implements {SyncStrategy<TPayload>}
24
+ */
25
+ export class LogSync {
26
+ /** @readonly @type {"log"} */
27
+ kind = "log";
28
+ /**
29
+ * @readonly
30
+ * @type {LogSyncOptions<TPayload>["apply"]}
31
+ */
32
+ #apply;
33
+ /**
34
+ * @readonly
35
+ * @type {(delta: SyncDelta<TPayload>) => string}
36
+ */
37
+ #key;
38
+ #applied = new Set();
39
+ /**
40
+ * @param {LogSyncOptions<TPayload>} options
41
+ */
42
+ constructor(options) {
43
+ this.#apply = options.apply;
44
+ this.#key = options.key ?? ((delta) => delta.id);
45
+ }
46
+ /**
47
+ * @param {SyncDelta<TPayload>} delta
48
+ * @param {SyncDeltaContext} context
49
+ * @returns {Promise<SyncApplyResult>}
50
+ */
51
+ async applyDelta(delta, context) {
52
+ void context;
53
+ const key = this.#key(delta);
54
+ if (this.#applied.has(key))
55
+ return { applied: false };
56
+ await this.#apply(delta.payload, delta);
57
+ this.#applied.add(key);
58
+ return { applied: true };
59
+ }
60
+ }
@@ -0,0 +1,119 @@
1
+ // @ts-check
2
+
3
+ /**
4
+ * @template TValue
5
+ * @typedef {import("../../models/sync.js").RevisionCommandResult<TValue>} RevisionCommandResult
6
+ */
7
+ /**
8
+ * @template TValue
9
+ * @typedef {import("../../models/sync.js").RevisionConflict<TValue>} RevisionConflict
10
+ */
11
+ /**
12
+ * @template TValue
13
+ * @typedef {import("../../models/sync.js").RevisionEntity<TValue>} RevisionEntity
14
+ */
15
+ /**
16
+ * @template TValue
17
+ * @typedef {import("../../models/sync.js").RevisionIntent<TValue>} RevisionIntent
18
+ */
19
+ /**
20
+ * @typedef {import("../../models/sync.js").SyncApplyResult} SyncApplyResult
21
+ */
22
+ /**
23
+ * @template TPayload
24
+ * @typedef {import("../../models/sync.js").SyncDelta<TPayload>} SyncDelta
25
+ */
26
+ /**
27
+ * @typedef {import("../../models/sync.js").SyncDeltaContext} SyncDeltaContext
28
+ */
29
+ /**
30
+ * @template TPayload
31
+ * @typedef {import("../../models/sync.js").SyncStrategy<TPayload>} SyncStrategy
32
+ */
33
+ /**
34
+ * @template TValue
35
+ * @typedef {{ readonly parkConflict: (conflict: RevisionConflict<TValue>) => Promise<void>; readonly read: (id: string) => Promise<RevisionEntity<TValue> | undefined>; readonly write: (entity: RevisionEntity<TValue>) => Promise<void>; }} RevisionMergeOptions
36
+ */
37
+ /**
38
+ * @template TValue
39
+ * @typedef {{ readonly baseRev?: number; readonly id: string; readonly value: TValue; }} RevisionWriteInput
40
+ */
41
+ /**
42
+ * @template TValue
43
+ * @implements {SyncStrategy<RevisionEntity<TValue>>}
44
+ */
45
+ export class RevisionMerge {
46
+ /** @readonly @type {"revision-merge"} */
47
+ kind = "revision-merge";
48
+ /**
49
+ * @readonly
50
+ * @type {RevisionMergeOptions<TValue>["parkConflict"]}
51
+ */
52
+ #parkConflict;
53
+ /**
54
+ * @readonly
55
+ * @type {RevisionMergeOptions<TValue>["read"]}
56
+ */
57
+ #read;
58
+ /**
59
+ * @readonly
60
+ * @type {RevisionMergeOptions<TValue>["write"]}
61
+ */
62
+ #write;
63
+ #applied = new Set();
64
+ /**
65
+ * @param {RevisionMergeOptions<TValue>} options
66
+ */
67
+ constructor(options) {
68
+ this.#parkConflict = options.parkConflict;
69
+ this.#read = options.read;
70
+ this.#write = options.write;
71
+ }
72
+ /**
73
+ * @param {SyncDelta<RevisionEntity<TValue>>} delta
74
+ * @param {SyncDeltaContext} context
75
+ * @returns {Promise<SyncApplyResult>}
76
+ */
77
+ async applyDelta(delta, context) {
78
+ void context;
79
+ if (this.#applied.has(delta.id))
80
+ return { applied: false };
81
+ const local = await this.#read(delta.payload.id);
82
+ if (local !== undefined && local.rev >= delta.payload.rev) {
83
+ this.#applied.add(delta.id);
84
+ return { applied: false };
85
+ }
86
+ await this.#write(delta.payload);
87
+ this.#applied.add(delta.id);
88
+ return { applied: true };
89
+ }
90
+ /**
91
+ * @param {RevisionWriteInput<TValue>} input
92
+ * @returns {Promise<RevisionIntent<TValue>>}
93
+ */
94
+ async createIntent(input) {
95
+ const local = await this.#read(input.id);
96
+ return {
97
+ baseRev: input.baseRev ?? local?.rev ?? 0,
98
+ id: input.id,
99
+ value: input.value,
100
+ };
101
+ }
102
+ /**
103
+ * @param {RevisionIntent<TValue>} intent
104
+ * @param {RevisionCommandResult<TValue>} result
105
+ * @returns {Promise<void>}
106
+ */
107
+ async handleCommandResult(intent, result) {
108
+ if (result.status === "accepted") {
109
+ await this.#write(result.entity);
110
+ return;
111
+ }
112
+ await this.#parkConflict({
113
+ baseRev: intent.baseRev,
114
+ id: intent.id,
115
+ mine: intent.value,
116
+ theirs: result.theirs,
117
+ });
118
+ }
119
+ }
@@ -0,0 +1,44 @@
1
+ // @ts-check
2
+
3
+ /**
4
+ * @template TPayload
5
+ * @typedef {import("../../models/sync.js").AuthoritativeCommand<TPayload>} AuthoritativeCommand
6
+ */
7
+ /**
8
+ * @template TValue
9
+ * @typedef {import("../../models/sync.js").AuthoritativeSnapshot<TValue>} AuthoritativeSnapshot
10
+ */
11
+ /**
12
+ * @template TValue
13
+ * @typedef {import("../../models/sync.js").RevisionCommandResult<TValue>} RevisionCommandResult
14
+ */
15
+ /**
16
+ * @template TValue
17
+ * @typedef {import("../../models/sync.js").RevisionConflict<TValue>} RevisionConflict
18
+ */
19
+ /**
20
+ * @template TValue
21
+ * @typedef {import("../../models/sync.js").RevisionEntity<TValue>} RevisionEntity
22
+ */
23
+ /**
24
+ * @template TValue
25
+ * @typedef {import("../../models/sync.js").RevisionIntent<TValue>} RevisionIntent
26
+ */
27
+ /**
28
+ * @typedef {import("../../models/sync.js").SyncApplyResult} SyncApplyResult
29
+ */
30
+ /**
31
+ * @template TPayload
32
+ * @typedef {import("../../models/sync.js").SyncDelta<TPayload>} SyncDelta
33
+ */
34
+ /**
35
+ * @typedef {import("../../models/sync.js").SyncDeltaContext} SyncDeltaContext
36
+ */
37
+ /**
38
+ * @template TPayload
39
+ * @typedef {import("../../models/sync.js").SyncStrategy<TPayload>} SyncStrategy
40
+ */
41
+ /**
42
+ * @typedef {import("../../models/sync.js").SyncStrategyKind} SyncStrategyKind
43
+ */
44
+ export {} from "../../models/sync.js";