@enbox/agent 0.0.1

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 (348) hide show
  1. package/dist/browser.js +2215 -0
  2. package/dist/browser.js.map +7 -0
  3. package/dist/browser.mjs +2215 -0
  4. package/dist/browser.mjs.map +7 -0
  5. package/dist/cjs/index.js +8530 -0
  6. package/dist/cjs/index.js.map +7 -0
  7. package/dist/cjs/package.json +1 -0
  8. package/dist/esm/agent-did-resolver-cache.js +87 -0
  9. package/dist/esm/agent-did-resolver-cache.js.map +1 -0
  10. package/dist/esm/bearer-identity.js +41 -0
  11. package/dist/esm/bearer-identity.js.map +1 -0
  12. package/dist/esm/connect.js +191 -0
  13. package/dist/esm/connect.js.map +1 -0
  14. package/dist/esm/crypto-api.js +346 -0
  15. package/dist/esm/crypto-api.js.map +1 -0
  16. package/dist/esm/did-api.js +278 -0
  17. package/dist/esm/did-api.js.map +1 -0
  18. package/dist/esm/dwn-api.js +336 -0
  19. package/dist/esm/dwn-api.js.map +1 -0
  20. package/dist/esm/dwn-registrar.js +120 -0
  21. package/dist/esm/dwn-registrar.js.map +1 -0
  22. package/dist/esm/hd-identity-vault.js +729 -0
  23. package/dist/esm/hd-identity-vault.js.map +1 -0
  24. package/dist/esm/identity-api.js +262 -0
  25. package/dist/esm/identity-api.js.map +1 -0
  26. package/dist/esm/index.js +23 -0
  27. package/dist/esm/index.js.map +1 -0
  28. package/dist/esm/local-key-manager.js +498 -0
  29. package/dist/esm/local-key-manager.js.map +1 -0
  30. package/dist/esm/oidc.js +507 -0
  31. package/dist/esm/oidc.js.map +1 -0
  32. package/dist/esm/permissions-api.js +322 -0
  33. package/dist/esm/permissions-api.js.map +1 -0
  34. package/dist/esm/prototyping/clients/dwn-rpc-types.js +2 -0
  35. package/dist/esm/prototyping/clients/dwn-rpc-types.js.map +1 -0
  36. package/dist/esm/prototyping/clients/dwn-server-info-cache-memory.js +74 -0
  37. package/dist/esm/prototyping/clients/dwn-server-info-cache-memory.js.map +1 -0
  38. package/dist/esm/prototyping/clients/http-dwn-rpc-client.js +105 -0
  39. package/dist/esm/prototyping/clients/http-dwn-rpc-client.js.map +1 -0
  40. package/dist/esm/prototyping/clients/json-rpc-socket.js +150 -0
  41. package/dist/esm/prototyping/clients/json-rpc-socket.js.map +1 -0
  42. package/dist/esm/prototyping/clients/json-rpc.js +58 -0
  43. package/dist/esm/prototyping/clients/json-rpc.js.map +1 -0
  44. package/dist/esm/prototyping/clients/server-info-types.js +2 -0
  45. package/dist/esm/prototyping/clients/server-info-types.js.map +1 -0
  46. package/dist/esm/prototyping/clients/web-socket-clients.js +90 -0
  47. package/dist/esm/prototyping/clients/web-socket-clients.js.map +1 -0
  48. package/dist/esm/prototyping/common/object.js +14 -0
  49. package/dist/esm/prototyping/common/object.js.map +1 -0
  50. package/dist/esm/prototyping/common/type-utils.js +2 -0
  51. package/dist/esm/prototyping/common/type-utils.js.map +1 -0
  52. package/dist/esm/prototyping/crypto/algorithms/aes-gcm.js +147 -0
  53. package/dist/esm/prototyping/crypto/algorithms/aes-gcm.js.map +1 -0
  54. package/dist/esm/prototyping/crypto/algorithms/aes-kw.js +137 -0
  55. package/dist/esm/prototyping/crypto/algorithms/aes-kw.js.map +1 -0
  56. package/dist/esm/prototyping/crypto/algorithms/ecdsa.js +307 -0
  57. package/dist/esm/prototyping/crypto/algorithms/ecdsa.js.map +1 -0
  58. package/dist/esm/prototyping/crypto/algorithms/eddsa.js +264 -0
  59. package/dist/esm/prototyping/crypto/algorithms/eddsa.js.map +1 -0
  60. package/dist/esm/prototyping/crypto/algorithms/hkdf.js +39 -0
  61. package/dist/esm/prototyping/crypto/algorithms/hkdf.js.map +1 -0
  62. package/dist/esm/prototyping/crypto/algorithms/pbkdf2.js +41 -0
  63. package/dist/esm/prototyping/crypto/algorithms/pbkdf2.js.map +1 -0
  64. package/dist/esm/prototyping/crypto/crypto-error.js +41 -0
  65. package/dist/esm/prototyping/crypto/crypto-error.js.map +1 -0
  66. package/dist/esm/prototyping/crypto/dsa.js +236 -0
  67. package/dist/esm/prototyping/crypto/dsa.js.map +1 -0
  68. package/dist/esm/prototyping/crypto/jose/jwe-compact.js +130 -0
  69. package/dist/esm/prototyping/crypto/jose/jwe-compact.js.map +1 -0
  70. package/dist/esm/prototyping/crypto/jose/jwe-flattened.js +294 -0
  71. package/dist/esm/prototyping/crypto/jose/jwe-flattened.js.map +1 -0
  72. package/dist/esm/prototyping/crypto/jose/jwe.js +308 -0
  73. package/dist/esm/prototyping/crypto/jose/jwe.js.map +1 -0
  74. package/dist/esm/prototyping/crypto/primitives/aes-gcm.js +352 -0
  75. package/dist/esm/prototyping/crypto/primitives/aes-gcm.js.map +1 -0
  76. package/dist/esm/prototyping/crypto/primitives/aes-kw.js +247 -0
  77. package/dist/esm/prototyping/crypto/primitives/aes-kw.js.map +1 -0
  78. package/dist/esm/prototyping/crypto/primitives/hkdf.js +80 -0
  79. package/dist/esm/prototyping/crypto/primitives/hkdf.js.map +1 -0
  80. package/dist/esm/prototyping/crypto/primitives/pbkdf2.js +85 -0
  81. package/dist/esm/prototyping/crypto/primitives/pbkdf2.js.map +1 -0
  82. package/dist/esm/prototyping/crypto/types/cipher.js +2 -0
  83. package/dist/esm/prototyping/crypto/types/cipher.js.map +1 -0
  84. package/dist/esm/prototyping/crypto/types/crypto-api.js +2 -0
  85. package/dist/esm/prototyping/crypto/types/crypto-api.js.map +1 -0
  86. package/dist/esm/prototyping/crypto/types/key-converter.js +2 -0
  87. package/dist/esm/prototyping/crypto/types/key-converter.js.map +1 -0
  88. package/dist/esm/prototyping/crypto/types/key-deriver.js +2 -0
  89. package/dist/esm/prototyping/crypto/types/key-deriver.js.map +1 -0
  90. package/dist/esm/prototyping/crypto/types/key-io.js +2 -0
  91. package/dist/esm/prototyping/crypto/types/key-io.js.map +1 -0
  92. package/dist/esm/prototyping/crypto/types/key-manager.js +2 -0
  93. package/dist/esm/prototyping/crypto/types/key-manager.js.map +1 -0
  94. package/dist/esm/prototyping/crypto/types/key-wrapper.js +2 -0
  95. package/dist/esm/prototyping/crypto/types/key-wrapper.js.map +1 -0
  96. package/dist/esm/prototyping/crypto/types/params-direct.js +2 -0
  97. package/dist/esm/prototyping/crypto/types/params-direct.js.map +1 -0
  98. package/dist/esm/prototyping/crypto/types/params-kms.js +2 -0
  99. package/dist/esm/prototyping/crypto/types/params-kms.js.map +1 -0
  100. package/dist/esm/prototyping/crypto/utils.js +19 -0
  101. package/dist/esm/prototyping/crypto/utils.js.map +1 -0
  102. package/dist/esm/prototyping/dids/resolver-cache-memory.js +77 -0
  103. package/dist/esm/prototyping/dids/resolver-cache-memory.js.map +1 -0
  104. package/dist/esm/prototyping/dids/utils.js +9 -0
  105. package/dist/esm/prototyping/dids/utils.js.map +1 -0
  106. package/dist/esm/rpc-client.js +123 -0
  107. package/dist/esm/rpc-client.js.map +1 -0
  108. package/dist/esm/store-data-protocols.js +38 -0
  109. package/dist/esm/store-data-protocols.js.map +1 -0
  110. package/dist/esm/store-data.js +320 -0
  111. package/dist/esm/store-data.js.map +1 -0
  112. package/dist/esm/store-did.js +136 -0
  113. package/dist/esm/store-did.js.map +1 -0
  114. package/dist/esm/store-identity.js +140 -0
  115. package/dist/esm/store-identity.js.map +1 -0
  116. package/dist/esm/store-key.js +136 -0
  117. package/dist/esm/store-key.js.map +1 -0
  118. package/dist/esm/sync-api.js +61 -0
  119. package/dist/esm/sync-api.js.map +1 -0
  120. package/dist/esm/sync-engine-level.js +618 -0
  121. package/dist/esm/sync-engine-level.js.map +1 -0
  122. package/dist/esm/test-harness.js +239 -0
  123. package/dist/esm/test-harness.js.map +1 -0
  124. package/dist/esm/types/agent.js +2 -0
  125. package/dist/esm/types/agent.js.map +1 -0
  126. package/dist/esm/types/dwn.js +31 -0
  127. package/dist/esm/types/dwn.js.map +1 -0
  128. package/dist/esm/types/identity-vault.js +2 -0
  129. package/dist/esm/types/identity-vault.js.map +1 -0
  130. package/dist/esm/types/identity.js +2 -0
  131. package/dist/esm/types/identity.js.map +1 -0
  132. package/dist/esm/types/key-manager.js +2 -0
  133. package/dist/esm/types/key-manager.js.map +1 -0
  134. package/dist/esm/types/permissions.js +2 -0
  135. package/dist/esm/types/permissions.js.map +1 -0
  136. package/dist/esm/types/sync.js +2 -0
  137. package/dist/esm/types/sync.js.map +1 -0
  138. package/dist/esm/types/vc.js +5 -0
  139. package/dist/esm/types/vc.js.map +1 -0
  140. package/dist/esm/utils-internal.js +147 -0
  141. package/dist/esm/utils-internal.js.map +1 -0
  142. package/dist/esm/utils.js +161 -0
  143. package/dist/esm/utils.js.map +1 -0
  144. package/dist/types/agent-did-resolver-cache.d.ts +30 -0
  145. package/dist/types/agent-did-resolver-cache.d.ts.map +1 -0
  146. package/dist/types/bearer-identity.d.ts +31 -0
  147. package/dist/types/bearer-identity.d.ts.map +1 -0
  148. package/dist/types/connect.d.ts +88 -0
  149. package/dist/types/connect.d.ts.map +1 -0
  150. package/dist/types/crypto-api.d.ts +286 -0
  151. package/dist/types/crypto-api.d.ts.map +1 -0
  152. package/dist/types/did-api.d.ts +119 -0
  153. package/dist/types/did-api.d.ts.map +1 -0
  154. package/dist/types/dwn-api.d.ts +66 -0
  155. package/dist/types/dwn-api.d.ts.map +1 -0
  156. package/dist/types/dwn-registrar.d.ts +29 -0
  157. package/dist/types/dwn-registrar.d.ts.map +1 -0
  158. package/dist/types/hd-identity-vault.d.ts +306 -0
  159. package/dist/types/hd-identity-vault.d.ts.map +1 -0
  160. package/dist/types/identity-api.d.ts +107 -0
  161. package/dist/types/identity-api.d.ts.map +1 -0
  162. package/dist/types/index.d.ts +30 -0
  163. package/dist/types/index.d.ts.map +1 -0
  164. package/dist/types/local-key-manager.d.ts +311 -0
  165. package/dist/types/local-key-manager.d.ts.map +1 -0
  166. package/dist/types/oidc.d.ts +247 -0
  167. package/dist/types/oidc.d.ts.map +1 -0
  168. package/dist/types/permissions-api.d.ts +35 -0
  169. package/dist/types/permissions-api.d.ts.map +1 -0
  170. package/dist/types/prototyping/clients/dwn-rpc-types.d.ts +45 -0
  171. package/dist/types/prototyping/clients/dwn-rpc-types.d.ts.map +1 -0
  172. package/dist/types/prototyping/clients/dwn-server-info-cache-memory.d.ts +57 -0
  173. package/dist/types/prototyping/clients/dwn-server-info-cache-memory.d.ts.map +1 -0
  174. package/dist/types/prototyping/clients/http-dwn-rpc-client.d.ts +13 -0
  175. package/dist/types/prototyping/clients/http-dwn-rpc-client.d.ts.map +1 -0
  176. package/dist/types/prototyping/clients/json-rpc-socket.d.ts +43 -0
  177. package/dist/types/prototyping/clients/json-rpc-socket.d.ts.map +1 -0
  178. package/dist/types/prototyping/clients/json-rpc.d.ts +49 -0
  179. package/dist/types/prototyping/clients/json-rpc.d.ts.map +1 -0
  180. package/dist/types/prototyping/clients/server-info-types.d.ts +20 -0
  181. package/dist/types/prototyping/clients/server-info-types.d.ts.map +1 -0
  182. package/dist/types/prototyping/clients/web-socket-clients.d.ts +10 -0
  183. package/dist/types/prototyping/clients/web-socket-clients.d.ts.map +1 -0
  184. package/dist/types/prototyping/common/object.d.ts +2 -0
  185. package/dist/types/prototyping/common/object.d.ts.map +1 -0
  186. package/dist/types/prototyping/common/type-utils.d.ts +7 -0
  187. package/dist/types/prototyping/common/type-utils.d.ts.map +1 -0
  188. package/dist/types/prototyping/crypto/algorithms/aes-gcm.d.ts +151 -0
  189. package/dist/types/prototyping/crypto/algorithms/aes-gcm.d.ts.map +1 -0
  190. package/dist/types/prototyping/crypto/algorithms/aes-kw.d.ts +109 -0
  191. package/dist/types/prototyping/crypto/algorithms/aes-kw.d.ts.map +1 -0
  192. package/dist/types/prototyping/crypto/algorithms/ecdsa.d.ts +160 -0
  193. package/dist/types/prototyping/crypto/algorithms/ecdsa.d.ts.map +1 -0
  194. package/dist/types/prototyping/crypto/algorithms/eddsa.d.ts +157 -0
  195. package/dist/types/prototyping/crypto/algorithms/eddsa.d.ts.map +1 -0
  196. package/dist/types/prototyping/crypto/algorithms/hkdf.d.ts +21 -0
  197. package/dist/types/prototyping/crypto/algorithms/hkdf.d.ts.map +1 -0
  198. package/dist/types/prototyping/crypto/algorithms/pbkdf2.d.ts +21 -0
  199. package/dist/types/prototyping/crypto/algorithms/pbkdf2.d.ts.map +1 -0
  200. package/dist/types/prototyping/crypto/crypto-error.d.ts +29 -0
  201. package/dist/types/prototyping/crypto/crypto-error.d.ts.map +1 -0
  202. package/dist/types/prototyping/crypto/dsa.d.ts +169 -0
  203. package/dist/types/prototyping/crypto/dsa.d.ts.map +1 -0
  204. package/dist/types/prototyping/crypto/jose/jwe-compact.d.ts +135 -0
  205. package/dist/types/prototyping/crypto/jose/jwe-compact.d.ts.map +1 -0
  206. package/dist/types/prototyping/crypto/jose/jwe-flattened.d.ts +134 -0
  207. package/dist/types/prototyping/crypto/jose/jwe-flattened.d.ts.map +1 -0
  208. package/dist/types/prototyping/crypto/jose/jwe.d.ts +378 -0
  209. package/dist/types/prototyping/crypto/jose/jwe.d.ts.map +1 -0
  210. package/dist/types/prototyping/crypto/primitives/aes-gcm.d.ts +245 -0
  211. package/dist/types/prototyping/crypto/primitives/aes-gcm.d.ts.map +1 -0
  212. package/dist/types/prototyping/crypto/primitives/aes-kw.d.ts +103 -0
  213. package/dist/types/prototyping/crypto/primitives/aes-kw.d.ts.map +1 -0
  214. package/dist/types/prototyping/crypto/primitives/hkdf.d.ts +90 -0
  215. package/dist/types/prototyping/crypto/primitives/hkdf.d.ts.map +1 -0
  216. package/dist/types/prototyping/crypto/primitives/pbkdf2.d.ts +84 -0
  217. package/dist/types/prototyping/crypto/primitives/pbkdf2.d.ts.map +1 -0
  218. package/dist/types/prototyping/crypto/types/cipher.d.ts +14 -0
  219. package/dist/types/prototyping/crypto/types/cipher.d.ts.map +1 -0
  220. package/dist/types/prototyping/crypto/types/crypto-api.d.ts +35 -0
  221. package/dist/types/prototyping/crypto/types/crypto-api.d.ts.map +1 -0
  222. package/dist/types/prototyping/crypto/types/key-converter.d.ts +49 -0
  223. package/dist/types/prototyping/crypto/types/key-converter.d.ts.map +1 -0
  224. package/dist/types/prototyping/crypto/types/key-deriver.d.ts +50 -0
  225. package/dist/types/prototyping/crypto/types/key-deriver.d.ts.map +1 -0
  226. package/dist/types/prototyping/crypto/types/key-io.d.ts +49 -0
  227. package/dist/types/prototyping/crypto/types/key-io.d.ts.map +1 -0
  228. package/dist/types/prototyping/crypto/types/key-manager.d.ts +69 -0
  229. package/dist/types/prototyping/crypto/types/key-manager.d.ts.map +1 -0
  230. package/dist/types/prototyping/crypto/types/key-wrapper.d.ts +14 -0
  231. package/dist/types/prototyping/crypto/types/key-wrapper.d.ts.map +1 -0
  232. package/dist/types/prototyping/crypto/types/params-direct.d.ts +75 -0
  233. package/dist/types/prototyping/crypto/types/params-direct.d.ts.map +1 -0
  234. package/dist/types/prototyping/crypto/types/params-kms.d.ts +63 -0
  235. package/dist/types/prototyping/crypto/types/params-kms.d.ts.map +1 -0
  236. package/dist/types/prototyping/crypto/utils.d.ts +7 -0
  237. package/dist/types/prototyping/crypto/utils.d.ts.map +1 -0
  238. package/dist/types/prototyping/dids/resolver-cache-memory.d.ts +57 -0
  239. package/dist/types/prototyping/dids/resolver-cache-memory.d.ts.map +1 -0
  240. package/dist/types/prototyping/dids/utils.d.ts +3 -0
  241. package/dist/types/prototyping/dids/utils.d.ts.map +1 -0
  242. package/dist/types/rpc-client.d.ts +51 -0
  243. package/dist/types/rpc-client.d.ts.map +1 -0
  244. package/dist/types/store-data-protocols.d.ts +4 -0
  245. package/dist/types/store-data-protocols.d.ts.map +1 -0
  246. package/dist/types/store-data.d.ts +95 -0
  247. package/dist/types/store-data.d.ts.map +1 -0
  248. package/dist/types/store-did.d.ts +33 -0
  249. package/dist/types/store-did.d.ts.map +1 -0
  250. package/dist/types/store-identity.d.ts +34 -0
  251. package/dist/types/store-identity.d.ts.map +1 -0
  252. package/dist/types/store-key.d.ts +32 -0
  253. package/dist/types/store-key.d.ts.map +1 -0
  254. package/dist/types/sync-api.d.ts +41 -0
  255. package/dist/types/sync-api.d.ts.map +1 -0
  256. package/dist/types/sync-engine-level.d.ts +85 -0
  257. package/dist/types/sync-engine-level.d.ts.map +1 -0
  258. package/dist/types/test-harness.d.ts +69 -0
  259. package/dist/types/test-harness.d.ts.map +1 -0
  260. package/dist/types/types/agent.d.ts +172 -0
  261. package/dist/types/types/agent.d.ts.map +1 -0
  262. package/dist/types/types/dwn.d.ts +178 -0
  263. package/dist/types/types/dwn.d.ts.map +1 -0
  264. package/dist/types/types/identity-vault.d.ts +129 -0
  265. package/dist/types/types/identity-vault.d.ts.map +1 -0
  266. package/dist/types/types/identity.d.ts +16 -0
  267. package/dist/types/types/identity.d.ts.map +1 -0
  268. package/dist/types/types/key-manager.d.ts +9 -0
  269. package/dist/types/types/key-manager.d.ts.map +1 -0
  270. package/dist/types/types/permissions.d.ts +98 -0
  271. package/dist/types/types/permissions.d.ts.map +1 -0
  272. package/dist/types/types/sync.d.ts +66 -0
  273. package/dist/types/types/sync.d.ts.map +1 -0
  274. package/dist/types/types/vc.d.ts +7 -0
  275. package/dist/types/types/vc.d.ts.map +1 -0
  276. package/dist/types/utils-internal.d.ts +50 -0
  277. package/dist/types/utils-internal.d.ts.map +1 -0
  278. package/dist/types/utils.d.ts +37 -0
  279. package/dist/types/utils.d.ts.map +1 -0
  280. package/package.json +112 -0
  281. package/src/agent-did-resolver-cache.ts +95 -0
  282. package/src/bearer-identity.ts +42 -0
  283. package/src/connect.ts +296 -0
  284. package/src/crypto-api.ts +593 -0
  285. package/src/did-api.ts +429 -0
  286. package/src/dwn-api.ts +462 -0
  287. package/src/dwn-registrar.ts +127 -0
  288. package/src/hd-identity-vault.ts +853 -0
  289. package/src/identity-api.ts +324 -0
  290. package/src/index.ts +30 -0
  291. package/src/local-key-manager.ts +672 -0
  292. package/src/oidc.ts +857 -0
  293. package/src/permissions-api.ts +408 -0
  294. package/src/prototyping/clients/dwn-rpc-types.ts +55 -0
  295. package/src/prototyping/clients/dwn-server-info-cache-memory.ts +79 -0
  296. package/src/prototyping/clients/http-dwn-rpc-client.ts +110 -0
  297. package/src/prototyping/clients/json-rpc-socket.ts +169 -0
  298. package/src/prototyping/clients/json-rpc.ts +113 -0
  299. package/src/prototyping/clients/server-info-types.ts +21 -0
  300. package/src/prototyping/clients/web-socket-clients.ts +100 -0
  301. package/src/prototyping/common/object.ts +15 -0
  302. package/src/prototyping/common/type-utils.ts +6 -0
  303. package/src/prototyping/crypto/algorithms/aes-gcm.ts +211 -0
  304. package/src/prototyping/crypto/algorithms/aes-kw.ts +164 -0
  305. package/src/prototyping/crypto/algorithms/ecdsa.ts +365 -0
  306. package/src/prototyping/crypto/algorithms/eddsa.ts +310 -0
  307. package/src/prototyping/crypto/algorithms/hkdf.ts +40 -0
  308. package/src/prototyping/crypto/algorithms/pbkdf2.ts +44 -0
  309. package/src/prototyping/crypto/crypto-error.ts +45 -0
  310. package/src/prototyping/crypto/dsa.ts +367 -0
  311. package/src/prototyping/crypto/jose/jwe-compact.ts +225 -0
  312. package/src/prototyping/crypto/jose/jwe-flattened.ts +459 -0
  313. package/src/prototyping/crypto/jose/jwe.ts +653 -0
  314. package/src/prototyping/crypto/primitives/aes-gcm.ts +374 -0
  315. package/src/prototyping/crypto/primitives/aes-kw.ts +271 -0
  316. package/src/prototyping/crypto/primitives/hkdf.ts +121 -0
  317. package/src/prototyping/crypto/primitives/pbkdf2.ts +116 -0
  318. package/src/prototyping/crypto/types/cipher.ts +17 -0
  319. package/src/prototyping/crypto/types/crypto-api.ts +78 -0
  320. package/src/prototyping/crypto/types/key-converter.ts +53 -0
  321. package/src/prototyping/crypto/types/key-deriver.ts +56 -0
  322. package/src/prototyping/crypto/types/key-io.ts +51 -0
  323. package/src/prototyping/crypto/types/key-manager.ts +83 -0
  324. package/src/prototyping/crypto/types/key-wrapper.ts +17 -0
  325. package/src/prototyping/crypto/types/params-direct.ts +95 -0
  326. package/src/prototyping/crypto/types/params-kms.ts +76 -0
  327. package/src/prototyping/crypto/utils.ts +41 -0
  328. package/src/prototyping/dids/resolver-cache-memory.ts +83 -0
  329. package/src/prototyping/dids/utils.ts +10 -0
  330. package/src/rpc-client.ts +162 -0
  331. package/src/store-data-protocols.ts +40 -0
  332. package/src/store-data.ts +400 -0
  333. package/src/store-did.ts +105 -0
  334. package/src/store-identity.ts +109 -0
  335. package/src/store-key.ts +104 -0
  336. package/src/sync-api.ts +71 -0
  337. package/src/sync-engine-level.ts +714 -0
  338. package/src/test-harness.ts +330 -0
  339. package/src/types/agent.ts +195 -0
  340. package/src/types/dwn.ts +278 -0
  341. package/src/types/identity-vault.ts +137 -0
  342. package/src/types/identity.ts +18 -0
  343. package/src/types/key-manager.ts +15 -0
  344. package/src/types/permissions.ts +115 -0
  345. package/src/types/sync.ts +58 -0
  346. package/src/types/vc.ts +7 -0
  347. package/src/utils-internal.ts +157 -0
  348. package/src/utils.ts +181 -0
@@ -0,0 +1,618 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
11
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
12
+ var m = o[Symbol.asyncIterator], i;
13
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
14
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
15
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
16
+ };
17
+ import ms from 'ms';
18
+ import { Level } from 'level';
19
+ import { monotonicFactory } from 'ulidx';
20
+ import { NodeStream } from '@enbox/common';
21
+ import { DwnInterfaceName, DwnMethodName, } from '@enbox/dwn-sdk-js';
22
+ import { DwnInterface } from './types/dwn.js';
23
+ import { getDwnServiceEndpointUrls, isRecordsWrite } from './utils.js';
24
+ import { AgentPermissionsApi } from './permissions-api.js';
25
+ export class SyncEngineLevel {
26
+ ;
27
+ constructor({ agent, dataPath, db }) {
28
+ this._syncLock = false;
29
+ this._agent = agent;
30
+ this._permissionsApi = new AgentPermissionsApi({ agent: agent });
31
+ this._db = (db) ? db : new Level(dataPath !== null && dataPath !== void 0 ? dataPath : 'DATA/AGENT/SYNC_STORE');
32
+ this._ulidFactory = monotonicFactory();
33
+ }
34
+ /**
35
+ * Retrieves the `Web5PlatformAgent` execution context.
36
+ *
37
+ * @returns The `Web5PlatformAgent` instance that represents the current execution context.
38
+ * @throws Will throw an error if the `agent` instance property is undefined.
39
+ */
40
+ get agent() {
41
+ if (this._agent === undefined) {
42
+ throw new Error('SyncEngineLevel: Unable to determine agent execution context.');
43
+ }
44
+ return this._agent;
45
+ }
46
+ set agent(agent) {
47
+ this._agent = agent;
48
+ this._permissionsApi = new AgentPermissionsApi({ agent: agent });
49
+ }
50
+ clear() {
51
+ return __awaiter(this, void 0, void 0, function* () {
52
+ yield this._permissionsApi.clear();
53
+ yield this._db.clear();
54
+ });
55
+ }
56
+ close() {
57
+ return __awaiter(this, void 0, void 0, function* () {
58
+ yield this._db.close();
59
+ });
60
+ }
61
+ pull() {
62
+ var _a;
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ const syncPeerState = yield this.getSyncPeerState({ syncDirection: 'pull' });
65
+ yield this.enqueueOperations({ syncDirection: 'pull', syncPeerState });
66
+ const pullQueue = this.getPullQueue();
67
+ const pullJobs = yield pullQueue.iterator().all();
68
+ const deleteOperations = [];
69
+ const errored = new Set();
70
+ for (let job of pullJobs) {
71
+ const [key] = job;
72
+ const { did, dwnUrl, messageCid, delegateDid, protocol } = SyncEngineLevel.parseSyncMessageParamsKey(key);
73
+ // If a particular DWN service endpoint is unreachable, skip subsequent pull operations.
74
+ if (errored.has(dwnUrl)) {
75
+ continue;
76
+ }
77
+ const messageExists = yield this.messageExists(did, messageCid);
78
+ if (messageExists) {
79
+ deleteOperations.push({ type: 'del', key: key });
80
+ continue;
81
+ }
82
+ let permissionGrantId;
83
+ let granteeDid;
84
+ if (delegateDid) {
85
+ try {
86
+ const messagesReadGrant = yield this._permissionsApi.getPermissionForRequest({
87
+ connectedDid: did,
88
+ messageType: DwnInterface.MessagesRead,
89
+ delegateDid,
90
+ protocol,
91
+ cached: true
92
+ });
93
+ permissionGrantId = messagesReadGrant.grant.id;
94
+ granteeDid = delegateDid;
95
+ }
96
+ catch (error) {
97
+ console.error('SyncEngineLevel: pull - Error fetching MessagesRead permission grant for delegate DID', error);
98
+ continue;
99
+ }
100
+ }
101
+ const messagesRead = yield this.agent.processDwnRequest({
102
+ store: false,
103
+ author: did,
104
+ target: did,
105
+ messageType: DwnInterface.MessagesRead,
106
+ granteeDid,
107
+ messageParams: {
108
+ messageCid,
109
+ permissionGrantId
110
+ }
111
+ });
112
+ let reply;
113
+ try {
114
+ reply = (yield this.agent.rpc.sendDwnRequest({
115
+ dwnUrl, targetDid: did,
116
+ message: messagesRead.message,
117
+ }));
118
+ }
119
+ catch (e) {
120
+ errored.add(dwnUrl);
121
+ continue;
122
+ }
123
+ if (reply.status.code !== 200 || !((_a = reply.entry) === null || _a === void 0 ? void 0 : _a.message)) {
124
+ yield this.addMessage(did, messageCid);
125
+ deleteOperations.push({ type: 'del', key: key });
126
+ continue;
127
+ }
128
+ const replyEntry = reply.entry;
129
+ const message = replyEntry.message;
130
+ // if the message includes data we convert it to a Node readable stream
131
+ // otherwise we set it as undefined, as the message does not include data
132
+ // this occurs when the message is a RecordsWrite message that has been updated
133
+ const dataStream = isRecordsWrite(replyEntry) && replyEntry.data ?
134
+ NodeStream.fromWebReadable({ readableStream: replyEntry.data })
135
+ : undefined;
136
+ const pullReply = yield this.agent.dwn.node.processMessage(did, message, { dataStream: dataStream });
137
+ if (SyncEngineLevel.syncMessageReplyIsSuccessful(pullReply)) {
138
+ yield this.addMessage(did, messageCid);
139
+ deleteOperations.push({ type: 'del', key: key });
140
+ }
141
+ }
142
+ yield pullQueue.batch(deleteOperations);
143
+ });
144
+ }
145
+ push() {
146
+ return __awaiter(this, void 0, void 0, function* () {
147
+ const syncPeerState = yield this.getSyncPeerState({ syncDirection: 'push' });
148
+ yield this.enqueueOperations({ syncDirection: 'push', syncPeerState });
149
+ const pushQueue = this.getPushQueue();
150
+ const pushJobs = yield pushQueue.iterator().all();
151
+ const deleteOperations = [];
152
+ const errored = new Set();
153
+ for (let job of pushJobs) {
154
+ const [key] = job;
155
+ const { did, delegateDid, protocol, dwnUrl, messageCid } = SyncEngineLevel.parseSyncMessageParamsKey(key);
156
+ // If a particular DWN service endpoint is unreachable, skip subsequent push operations.
157
+ if (errored.has(dwnUrl)) {
158
+ continue;
159
+ }
160
+ // Attempt to retrieve the message from the local DWN.
161
+ const dwnMessage = yield this.getDwnMessage({ author: did, messageCid, delegateDid, protocol });
162
+ // If the message does not exist on the local DWN, remove the sync operation from the
163
+ // push queue, update the push watermark for this DID/DWN endpoint combination, add the
164
+ // message to the local message store, and continue to the next job.
165
+ if (!dwnMessage) {
166
+ deleteOperations.push({ type: 'del', key: key });
167
+ yield this.addMessage(did, messageCid);
168
+ continue;
169
+ }
170
+ try {
171
+ const reply = yield this.agent.rpc.sendDwnRequest({
172
+ dwnUrl,
173
+ targetDid: did,
174
+ data: dwnMessage.data,
175
+ message: dwnMessage.message
176
+ });
177
+ // Update the watermark and add the messageCid to the Sync Message Store if either:
178
+ if (SyncEngineLevel.syncMessageReplyIsSuccessful(reply)) {
179
+ yield this.addMessage(did, messageCid);
180
+ deleteOperations.push({ type: 'del', key: key });
181
+ }
182
+ }
183
+ catch (_a) {
184
+ // Error is intentionally ignored; 'errored' set is updated with 'dwnUrl'.
185
+ errored.add(dwnUrl);
186
+ }
187
+ }
188
+ yield pushQueue.batch(deleteOperations);
189
+ });
190
+ }
191
+ registerIdentity({ did, options }) {
192
+ return __awaiter(this, void 0, void 0, function* () {
193
+ // Get a reference to the `registeredIdentities` sublevel.
194
+ const registeredIdentities = this._db.sublevel('registeredIdentities');
195
+ const existing = yield this.getIdentityOptions(did);
196
+ if (existing) {
197
+ throw new Error(`SyncEngineLevel: Identity with DID ${did} is already registered.`);
198
+ }
199
+ // if no options are provided, we default to no delegateDid and all protocols (empty array)
200
+ options !== null && options !== void 0 ? options : (options = { protocols: [] });
201
+ // Add (or overwrite, if present) the Identity's DID as a registered identity.
202
+ yield registeredIdentities.put(did, JSON.stringify(options));
203
+ });
204
+ }
205
+ unregisterIdentity(did) {
206
+ return __awaiter(this, void 0, void 0, function* () {
207
+ const registeredIdentities = this._db.sublevel('registeredIdentities');
208
+ const existing = yield this.getIdentityOptions(did);
209
+ if (!existing) {
210
+ throw new Error(`SyncEngineLevel: Identity with DID ${did} is not registered.`);
211
+ }
212
+ yield registeredIdentities.del(did);
213
+ });
214
+ }
215
+ getIdentityOptions(did) {
216
+ return __awaiter(this, void 0, void 0, function* () {
217
+ const registeredIdentities = this._db.sublevel('registeredIdentities');
218
+ try {
219
+ const options = yield registeredIdentities.get(did);
220
+ if (options) {
221
+ return JSON.parse(options);
222
+ }
223
+ }
224
+ catch (error) {
225
+ const e = error;
226
+ // `Level`` throws an error if the key is not present. Return `undefined` in this case.
227
+ if (e.code === 'LEVEL_NOT_FOUND') {
228
+ return;
229
+ }
230
+ else {
231
+ throw new Error(`SyncEngineLevel: Error reading level: ${e.code}.`);
232
+ }
233
+ }
234
+ });
235
+ }
236
+ updateIdentityOptions({ did, options }) {
237
+ return __awaiter(this, void 0, void 0, function* () {
238
+ const registeredIdentities = this._db.sublevel('registeredIdentities');
239
+ const existingOptions = yield this.getIdentityOptions(did);
240
+ if (!existingOptions) {
241
+ throw new Error(`SyncEngineLevel: Identity with DID ${did} is not registered.`);
242
+ }
243
+ yield registeredIdentities.put(did, JSON.stringify(options));
244
+ });
245
+ }
246
+ sync(direction) {
247
+ return __awaiter(this, void 0, void 0, function* () {
248
+ if (this._syncLock) {
249
+ throw new Error('SyncEngineLevel: Sync operation is already in progress.');
250
+ }
251
+ this._syncLock = true;
252
+ try {
253
+ if (!direction || direction === 'push') {
254
+ yield this.push();
255
+ }
256
+ if (!direction || direction === 'pull') {
257
+ yield this.pull();
258
+ }
259
+ }
260
+ finally {
261
+ this._syncLock = false;
262
+ }
263
+ });
264
+ }
265
+ startSync({ interval }) {
266
+ return __awaiter(this, void 0, void 0, function* () {
267
+ // Convert the interval string to milliseconds.
268
+ const intervalMilliseconds = ms(interval);
269
+ const intervalSync = () => __awaiter(this, void 0, void 0, function* () {
270
+ if (this._syncLock) {
271
+ return;
272
+ }
273
+ clearInterval(this._syncIntervalId);
274
+ this._syncIntervalId = undefined;
275
+ try {
276
+ yield this.sync();
277
+ }
278
+ catch (error) {
279
+ console.error('SyncEngineLevel: Error during sync operation', error);
280
+ }
281
+ if (!this._syncIntervalId) {
282
+ this._syncIntervalId = setInterval(intervalSync, intervalMilliseconds);
283
+ }
284
+ });
285
+ if (this._syncIntervalId) {
286
+ clearInterval(this._syncIntervalId);
287
+ }
288
+ // Set up a new interval.
289
+ this._syncIntervalId = setInterval(intervalSync, intervalMilliseconds);
290
+ // initiate an immediate sync
291
+ if (!this._syncLock) {
292
+ yield this.sync();
293
+ }
294
+ });
295
+ }
296
+ /**
297
+ * stopSync currently awaits the completion of the current sync operation before stopping the sync interval.
298
+ * TODO: implement a signal to gracefully stop sync immediately https://github.com/TBD54566975/web5-js/issues/890
299
+ */
300
+ stopSync(timeout = 2000) {
301
+ return __awaiter(this, void 0, void 0, function* () {
302
+ let elapsedTimeout = 0;
303
+ while (this._syncLock) {
304
+ if (elapsedTimeout >= timeout) {
305
+ throw new Error(`SyncEngineLevel: Existing sync operation did not complete within ${timeout} milliseconds.`);
306
+ }
307
+ elapsedTimeout += 100;
308
+ yield new Promise((resolve) => setTimeout(resolve, timeout < 100 ? timeout : 100));
309
+ }
310
+ if (this._syncIntervalId) {
311
+ clearInterval(this._syncIntervalId);
312
+ this._syncIntervalId = undefined;
313
+ }
314
+ });
315
+ }
316
+ /**
317
+ * 202: message was successfully written to the remote DWN
318
+ * 204: an initial write message was written without any data, cannot yet be read until a subsequent message is written with data
319
+ * 409: message was already present on the remote DWN
320
+ * RecordsDelete and the status code is 404: the initial write message was not found or the message was already deleted
321
+ */
322
+ static syncMessageReplyIsSuccessful(reply) {
323
+ var _a, _b;
324
+ return reply.status.code === 202 ||
325
+ // a 204 status code is returned when the message was accepted without any data.
326
+ // This is the case for an initial RecordsWrite messages for records that have been updated.
327
+ // For context: https://github.com/TBD54566975/dwn-sdk-js/issues/695
328
+ reply.status.code === 204 ||
329
+ reply.status.code === 409 ||
330
+ (
331
+ // If the message is a RecordsDelete and the status code is 404, the initial write message was not found or the message was already deleted
332
+ ((_a = reply.entry) === null || _a === void 0 ? void 0 : _a.message.descriptor.interface) === DwnInterfaceName.Records &&
333
+ ((_b = reply.entry) === null || _b === void 0 ? void 0 : _b.message.descriptor.method) === DwnMethodName.Delete &&
334
+ reply.status.code === 404);
335
+ }
336
+ enqueueOperations({ syncDirection, syncPeerState }) {
337
+ return __awaiter(this, void 0, void 0, function* () {
338
+ const enqueueOps = yield Promise.allSettled(syncPeerState.map((syncState) => __awaiter(this, void 0, void 0, function* () {
339
+ // Get the event log from the remote DWN if pull sync, or local DWN if push sync.
340
+ const eventLog = yield this.getDwnEventLog({
341
+ did: syncState.did,
342
+ delegateDid: syncState.delegateDid,
343
+ dwnUrl: syncState.dwnUrl,
344
+ cursor: syncState.cursor,
345
+ protocol: syncState.protocol,
346
+ syncDirection
347
+ });
348
+ const syncOperations = [];
349
+ for (let messageCid of eventLog) {
350
+ const watermark = this._ulidFactory();
351
+ const operationKey = SyncEngineLevel.generateSyncMessageParamsKey(Object.assign(Object.assign({}, syncState), { watermark,
352
+ messageCid }));
353
+ syncOperations.push({ type: 'put', key: operationKey, value: '' });
354
+ }
355
+ if (syncOperations.length > 0) {
356
+ const syncQueue = (syncDirection === 'pull')
357
+ ? this.getPullQueue()
358
+ : this.getPushQueue();
359
+ yield syncQueue.batch(syncOperations);
360
+ }
361
+ })));
362
+ // log any errors that occurred during the enqueuing process
363
+ enqueueOps.forEach((result, index) => {
364
+ if (result.status === 'rejected') {
365
+ const peerState = syncPeerState[index];
366
+ console.error(`SyncEngineLevel: Error enqueuing sync operation for peerState: ${JSON.stringify(peerState)}`, result.reason);
367
+ }
368
+ });
369
+ });
370
+ }
371
+ static generateSyncMessageParamsKey({ did, delegateDid, dwnUrl, protocol, watermark, messageCid }) {
372
+ // Use "did~dwnUrl~watermark~messageCid" as the key in the sync queue.
373
+ // Note: It is critical that `watermark` precedes `messageCid` to ensure that when the sync
374
+ // jobs are pulled off the queue, they are lexographically sorted oldest to newest.
375
+ //
376
+ // `protocol` and `delegateDid` may be undefined, which is fine, its part of the key will be stored as an empty string.
377
+ // Later, when parsing the key, we will handle this case and return an actual undefined.
378
+ // This is information useful for subset and delegated sync.
379
+ return [did, delegateDid, dwnUrl, protocol, watermark, messageCid].join('~');
380
+ }
381
+ static parseSyncMessageParamsKey(key) {
382
+ // The order is import here, see `generateKey` for more information.
383
+ const [did, delegateDidString, dwnUrl, protocolString, watermark, messageCid] = key.split('~');
384
+ // `protocol` or `delegateDid` may be parsed as an empty string, so we need to handle that case and returned an actual undefined.
385
+ const protocol = protocolString === '' ? undefined : protocolString;
386
+ const delegateDid = delegateDidString === '' ? undefined : delegateDidString;
387
+ return { did, delegateDid, dwnUrl, watermark, messageCid, protocol };
388
+ }
389
+ getDwnEventLog({ did, delegateDid, dwnUrl, syncDirection, cursor, protocol }) {
390
+ var _a;
391
+ return __awaiter(this, void 0, void 0, function* () {
392
+ let messagesReply = {};
393
+ let permissionGrantId;
394
+ if (delegateDid) {
395
+ // fetch the grants for the delegate DID
396
+ try {
397
+ const messagesQueryGrant = yield this._permissionsApi.getPermissionForRequest({
398
+ connectedDid: did,
399
+ messageType: DwnInterface.MessagesQuery,
400
+ delegateDid,
401
+ protocol,
402
+ cached: true
403
+ });
404
+ permissionGrantId = messagesQueryGrant.grant.id;
405
+ }
406
+ catch (error) {
407
+ console.error('SyncEngineLevel: Error fetching MessagesQuery permission grant for delegate DID', error);
408
+ return [];
409
+ }
410
+ }
411
+ if (syncDirection === 'pull') {
412
+ // filter for a specific protocol if one is provided
413
+ const filters = protocol ? [{ protocol }] : [];
414
+ // When sync is a pull, get the event log from the remote DWN.
415
+ const messagesQueryMessage = yield this.agent.dwn.processRequest({
416
+ store: false,
417
+ target: did,
418
+ author: did,
419
+ messageType: DwnInterface.MessagesQuery,
420
+ granteeDid: delegateDid,
421
+ messageParams: { filters, cursor, permissionGrantId }
422
+ });
423
+ try {
424
+ messagesReply = (yield this.agent.rpc.sendDwnRequest({
425
+ dwnUrl: dwnUrl,
426
+ targetDid: did,
427
+ message: messagesQueryMessage.message,
428
+ }));
429
+ }
430
+ catch (_b) {
431
+ // If a particular DWN service endpoint is unreachable, silently ignore.
432
+ }
433
+ }
434
+ else if (syncDirection === 'push') {
435
+ const filters = protocol ? [{ protocol }] : [];
436
+ // When sync is a push, get the event log from the local DWN.
437
+ const messagesQueryDwnResponse = yield this.agent.dwn.processRequest({
438
+ author: did,
439
+ target: did,
440
+ messageType: DwnInterface.MessagesQuery,
441
+ granteeDid: delegateDid,
442
+ messageParams: { filters, cursor, permissionGrantId }
443
+ });
444
+ messagesReply = messagesQueryDwnResponse.reply;
445
+ }
446
+ const eventLog = (_a = messagesReply.entries) !== null && _a !== void 0 ? _a : [];
447
+ if (messagesReply.cursor) {
448
+ this.setCursor(did, dwnUrl, syncDirection, messagesReply.cursor, protocol);
449
+ }
450
+ return eventLog;
451
+ });
452
+ }
453
+ getDwnMessage({ author, delegateDid, protocol, messageCid }) {
454
+ return __awaiter(this, void 0, void 0, function* () {
455
+ let permissionGrantId;
456
+ if (delegateDid) {
457
+ try {
458
+ const messagesReadGrant = yield this._permissionsApi.getPermissionForRequest({
459
+ connectedDid: author,
460
+ messageType: DwnInterface.MessagesRead,
461
+ delegateDid,
462
+ protocol,
463
+ cached: true
464
+ });
465
+ permissionGrantId = messagesReadGrant.grant.id;
466
+ }
467
+ catch (error) {
468
+ console.error('SyncEngineLevel: push - Error fetching MessagesRead permission grant for delegate DID', error);
469
+ return;
470
+ }
471
+ }
472
+ let { reply } = yield this.agent.dwn.processRequest({
473
+ author: author,
474
+ target: author,
475
+ messageType: DwnInterface.MessagesRead,
476
+ granteeDid: delegateDid,
477
+ messageParams: { messageCid, permissionGrantId }
478
+ });
479
+ // Absence of a messageEntry or message within messageEntry can happen because updating a
480
+ // Record creates another RecordsWrite with the same recordId. Only the first and
481
+ // most recent RecordsWrite messages are kept for a given recordId. Any RecordsWrite messages
482
+ // that aren't the first or most recent are discarded by the DWN.
483
+ if (reply.status.code !== 200 || !reply.entry) {
484
+ return undefined;
485
+ }
486
+ const messageEntry = reply.entry;
487
+ let dwnMessageWithBlob = { message: messageEntry.message };
488
+ // If the message is a RecordsWrite, either data will be present,
489
+ // OR we have to fetch it using a RecordsRead.
490
+ if (isRecordsWrite(messageEntry) && messageEntry.data) {
491
+ const dataBytes = yield NodeStream.consumeToBytes({ readable: messageEntry.data });
492
+ dwnMessageWithBlob.data = new Blob([dataBytes], { type: messageEntry.message.descriptor.dataFormat });
493
+ }
494
+ return dwnMessageWithBlob;
495
+ });
496
+ }
497
+ getSyncPeerState({ syncDirection }) {
498
+ var _a, e_1, _b, _c;
499
+ return __awaiter(this, void 0, void 0, function* () {
500
+ // Array to accumulate the list of sync peers for each DID.
501
+ const syncPeerState = [];
502
+ try {
503
+ // iterate over all registered identities
504
+ for (var _d = true, _e = __asyncValues(this._db.sublevel('registeredIdentities').iterator()), _f; _f = yield _e.next(), _a = _f.done, !_a; _d = true) {
505
+ _c = _f.value;
506
+ _d = false;
507
+ const [did, options] = _c;
508
+ const { protocols, delegateDid } = yield new Promise((resolve) => {
509
+ try {
510
+ const { protocols, delegateDid } = JSON.parse(options);
511
+ resolve({ protocols, delegateDid });
512
+ }
513
+ catch (error) {
514
+ resolve({ protocols: [] });
515
+ }
516
+ });
517
+ // First, confirm the DID can be resolved and extract the DWN service endpoint URLs.
518
+ const dwnEndpointUrls = yield getDwnServiceEndpointUrls(did, this.agent.did);
519
+ if (dwnEndpointUrls.length === 0) {
520
+ // Silently ignore and do not try to perform Sync for any DID that does not have a DWN
521
+ // service endpoint published in its DID document.
522
+ continue;
523
+ }
524
+ // Get the cursor (or undefined) for each (DID, DWN service endpoint, sync direction)
525
+ // combination and add it to the sync peer state array.
526
+ for (let dwnUrl of dwnEndpointUrls) {
527
+ if (protocols.length === 0) {
528
+ const cursor = yield this.getCursor(did, dwnUrl, syncDirection);
529
+ syncPeerState.push({ did, delegateDid, dwnUrl, cursor });
530
+ }
531
+ else {
532
+ for (const protocol of protocols) {
533
+ const cursor = yield this.getCursor(did, dwnUrl, syncDirection, protocol);
534
+ syncPeerState.push({ did, delegateDid, dwnUrl, cursor, protocol });
535
+ }
536
+ }
537
+ }
538
+ }
539
+ }
540
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
541
+ finally {
542
+ try {
543
+ if (!_d && !_a && (_b = _e.return)) yield _b.call(_e);
544
+ }
545
+ finally { if (e_1) throw e_1.error; }
546
+ }
547
+ return syncPeerState;
548
+ });
549
+ }
550
+ getCursor(did, dwnUrl, direction, protocol) {
551
+ return __awaiter(this, void 0, void 0, function* () {
552
+ // if a protocol is provided, we append it to the key
553
+ const cursorKey = protocol ? `${did}~${dwnUrl}~${direction}-${protocol}` :
554
+ `${did}~${dwnUrl}~${direction}`;
555
+ const cursorsStore = this.getCursorStore();
556
+ try {
557
+ const cursorValue = yield cursorsStore.get(cursorKey);
558
+ if (cursorValue) {
559
+ return JSON.parse(cursorValue);
560
+ }
561
+ }
562
+ catch (error) {
563
+ // Don't throw when a key wasn't found.
564
+ if (error.notFound) {
565
+ return undefined;
566
+ }
567
+ }
568
+ });
569
+ }
570
+ setCursor(did, dwnUrl, direction, cursor, protocol) {
571
+ return __awaiter(this, void 0, void 0, function* () {
572
+ const cursorKey = protocol ? `${did}~${dwnUrl}~${direction}-${protocol}` :
573
+ `${did}~${dwnUrl}~${direction}`;
574
+ const cursorsStore = this.getCursorStore();
575
+ yield cursorsStore.put(cursorKey, JSON.stringify(cursor));
576
+ });
577
+ }
578
+ /**
579
+ * The message store is used to prevent "echoes" that occur during a sync pull operation.
580
+ * After a message is confirmed to already be synchronized on the local DWN, its CID is added
581
+ * to the message store to ensure that any subsequent pull attempts are skipped.
582
+ */
583
+ messageExists(did, messageCid) {
584
+ return __awaiter(this, void 0, void 0, function* () {
585
+ const messageStore = this.getMessageStore(did);
586
+ // If the `messageCid` exists in this DID's store, return true. Otherwise, return false.
587
+ try {
588
+ yield messageStore.get(messageCid);
589
+ return true;
590
+ }
591
+ catch (error) {
592
+ if (error.notFound) {
593
+ return false;
594
+ }
595
+ throw error;
596
+ }
597
+ });
598
+ }
599
+ addMessage(did, messageCid) {
600
+ return __awaiter(this, void 0, void 0, function* () {
601
+ const messageStore = this.getMessageStore(did);
602
+ return yield messageStore.put(messageCid, '');
603
+ });
604
+ }
605
+ getMessageStore(did) {
606
+ return this._db.sublevel('history').sublevel(did).sublevel('messages');
607
+ }
608
+ getCursorStore() {
609
+ return this._db.sublevel('cursors');
610
+ }
611
+ getPushQueue() {
612
+ return this._db.sublevel('pushQueue');
613
+ }
614
+ getPullQueue() {
615
+ return this._db.sublevel('pullQueue');
616
+ }
617
+ }
618
+ //# sourceMappingURL=sync-engine-level.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-engine-level.js","sourceRoot":"","sources":["../../src/sync-engine-level.ts"],"names":[],"mappings":"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"}