anchordb 0.2.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 (438) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/LICENSE +21 -0
  3. package/README.md +160 -0
  4. package/dist/cjs/conflict/strategies.d.ts +110 -0
  5. package/dist/cjs/conflict/strategies.d.ts.map +1 -0
  6. package/dist/cjs/conflict/strategies.js +298 -0
  7. package/dist/cjs/conflict/strategies.js.map +1 -0
  8. package/dist/cjs/conflict/types.d.ts +38 -0
  9. package/dist/cjs/conflict/types.d.ts.map +1 -0
  10. package/dist/cjs/conflict/types.js +3 -0
  11. package/dist/cjs/conflict/types.js.map +1 -0
  12. package/dist/cjs/core/anchor-db.d.ts +154 -0
  13. package/dist/cjs/core/anchor-db.d.ts.map +1 -0
  14. package/dist/cjs/core/anchor-db.js +273 -0
  15. package/dist/cjs/core/anchor-db.js.map +1 -0
  16. package/dist/cjs/core/errors.d.ts +125 -0
  17. package/dist/cjs/core/errors.d.ts.map +1 -0
  18. package/dist/cjs/core/errors.js +174 -0
  19. package/dist/cjs/core/errors.js.map +1 -0
  20. package/dist/cjs/core/hex.d.ts +4 -0
  21. package/dist/cjs/core/hex.d.ts.map +1 -0
  22. package/dist/cjs/core/hex.js +41 -0
  23. package/dist/cjs/core/hex.js.map +1 -0
  24. package/dist/cjs/core/hlc.d.ts +96 -0
  25. package/dist/cjs/core/hlc.d.ts.map +1 -0
  26. package/dist/cjs/core/hlc.js +161 -0
  27. package/dist/cjs/core/hlc.js.map +1 -0
  28. package/dist/cjs/core/object-id.d.ts +38 -0
  29. package/dist/cjs/core/object-id.d.ts.map +1 -0
  30. package/dist/cjs/core/object-id.js +167 -0
  31. package/dist/cjs/core/object-id.js.map +1 -0
  32. package/dist/cjs/core/random.d.ts +6 -0
  33. package/dist/cjs/core/random.d.ts.map +1 -0
  34. package/dist/cjs/core/random.js +39 -0
  35. package/dist/cjs/core/random.js.map +1 -0
  36. package/dist/cjs/core/runtime.d.ts +96 -0
  37. package/dist/cjs/core/runtime.d.ts.map +1 -0
  38. package/dist/cjs/core/runtime.js +3 -0
  39. package/dist/cjs/core/runtime.js.map +1 -0
  40. package/dist/cjs/core/uuid.d.ts +16 -0
  41. package/dist/cjs/core/uuid.d.ts.map +1 -0
  42. package/dist/cjs/core/uuid.js +37 -0
  43. package/dist/cjs/core/uuid.js.map +1 -0
  44. package/dist/cjs/decorators/index.d.ts +48 -0
  45. package/dist/cjs/decorators/index.d.ts.map +1 -0
  46. package/dist/cjs/decorators/index.js +295 -0
  47. package/dist/cjs/decorators/index.js.map +1 -0
  48. package/dist/cjs/events/emitter.d.ts +16 -0
  49. package/dist/cjs/events/emitter.d.ts.map +1 -0
  50. package/dist/cjs/events/emitter.js +56 -0
  51. package/dist/cjs/events/emitter.js.map +1 -0
  52. package/dist/cjs/index/keys.d.ts +79 -0
  53. package/dist/cjs/index/keys.d.ts.map +1 -0
  54. package/dist/cjs/index/keys.js +208 -0
  55. package/dist/cjs/index/keys.js.map +1 -0
  56. package/dist/cjs/index.d.ts +81 -0
  57. package/dist/cjs/index.d.ts.map +1 -0
  58. package/dist/cjs/index.js +193 -0
  59. package/dist/cjs/index.js.map +1 -0
  60. package/dist/cjs/inspector/agent.d.ts +75 -0
  61. package/dist/cjs/inspector/agent.d.ts.map +1 -0
  62. package/dist/cjs/inspector/agent.js +520 -0
  63. package/dist/cjs/inspector/agent.js.map +1 -0
  64. package/dist/cjs/inspector/auth.d.ts +49 -0
  65. package/dist/cjs/inspector/auth.d.ts.map +1 -0
  66. package/dist/cjs/inspector/auth.js +234 -0
  67. package/dist/cjs/inspector/auth.js.map +1 -0
  68. package/dist/cjs/inspector/bridge.d.ts +141 -0
  69. package/dist/cjs/inspector/bridge.d.ts.map +1 -0
  70. package/dist/cjs/inspector/bridge.js +190 -0
  71. package/dist/cjs/inspector/bridge.js.map +1 -0
  72. package/dist/cjs/inspector/client.d.ts +111 -0
  73. package/dist/cjs/inspector/client.d.ts.map +1 -0
  74. package/dist/cjs/inspector/client.js +218 -0
  75. package/dist/cjs/inspector/client.js.map +1 -0
  76. package/dist/cjs/inspector/protocol.d.ts +160 -0
  77. package/dist/cjs/inspector/protocol.d.ts.map +1 -0
  78. package/dist/cjs/inspector/protocol.js +53 -0
  79. package/dist/cjs/inspector/protocol.js.map +1 -0
  80. package/dist/cjs/inspector/transports/in-process.d.ts +7 -0
  81. package/dist/cjs/inspector/transports/in-process.d.ts.map +1 -0
  82. package/dist/cjs/inspector/transports/in-process.js +58 -0
  83. package/dist/cjs/inspector/transports/in-process.js.map +1 -0
  84. package/dist/cjs/inspector/transports/websocket.d.ts +39 -0
  85. package/dist/cjs/inspector/transports/websocket.d.ts.map +1 -0
  86. package/dist/cjs/inspector/transports/websocket.js +60 -0
  87. package/dist/cjs/inspector/transports/websocket.js.map +1 -0
  88. package/dist/cjs/interop/csv.d.ts +53 -0
  89. package/dist/cjs/interop/csv.d.ts.map +1 -0
  90. package/dist/cjs/interop/csv.js +230 -0
  91. package/dist/cjs/interop/csv.js.map +1 -0
  92. package/dist/cjs/interop/ejson.d.ts +41 -0
  93. package/dist/cjs/interop/ejson.d.ts.map +1 -0
  94. package/dist/cjs/interop/ejson.js +182 -0
  95. package/dist/cjs/interop/ejson.js.map +1 -0
  96. package/dist/cjs/interop/export-import.d.ts +98 -0
  97. package/dist/cjs/interop/export-import.d.ts.map +1 -0
  98. package/dist/cjs/interop/export-import.js +222 -0
  99. package/dist/cjs/interop/export-import.js.map +1 -0
  100. package/dist/cjs/model/document.d.ts +66 -0
  101. package/dist/cjs/model/document.d.ts.map +1 -0
  102. package/dist/cjs/model/document.js +302 -0
  103. package/dist/cjs/model/document.js.map +1 -0
  104. package/dist/cjs/model/model.d.ts +178 -0
  105. package/dist/cjs/model/model.d.ts.map +1 -0
  106. package/dist/cjs/model/model.js +823 -0
  107. package/dist/cjs/model/model.js.map +1 -0
  108. package/dist/cjs/package.json +3 -0
  109. package/dist/cjs/query/aggregation/expressions.d.ts +34 -0
  110. package/dist/cjs/query/aggregation/expressions.d.ts.map +1 -0
  111. package/dist/cjs/query/aggregation/expressions.js +552 -0
  112. package/dist/cjs/query/aggregation/expressions.js.map +1 -0
  113. package/dist/cjs/query/aggregation/pipeline.d.ts +79 -0
  114. package/dist/cjs/query/aggregation/pipeline.d.ts.map +1 -0
  115. package/dist/cjs/query/aggregation/pipeline.js +597 -0
  116. package/dist/cjs/query/aggregation/pipeline.js.map +1 -0
  117. package/dist/cjs/query/aggregation/source.d.ts +35 -0
  118. package/dist/cjs/query/aggregation/source.d.ts.map +1 -0
  119. package/dist/cjs/query/aggregation/source.js +81 -0
  120. package/dist/cjs/query/aggregation/source.js.map +1 -0
  121. package/dist/cjs/query/builder/query.d.ts +113 -0
  122. package/dist/cjs/query/builder/query.d.ts.map +1 -0
  123. package/dist/cjs/query/builder/query.js +215 -0
  124. package/dist/cjs/query/builder/query.js.map +1 -0
  125. package/dist/cjs/query/filter.d.ts +50 -0
  126. package/dist/cjs/query/filter.d.ts.map +1 -0
  127. package/dist/cjs/query/filter.js +275 -0
  128. package/dist/cjs/query/filter.js.map +1 -0
  129. package/dist/cjs/query/path.d.ts +41 -0
  130. package/dist/cjs/query/path.d.ts.map +1 -0
  131. package/dist/cjs/query/path.js +294 -0
  132. package/dist/cjs/query/path.js.map +1 -0
  133. package/dist/cjs/query/update.d.ts +30 -0
  134. package/dist/cjs/query/update.d.ts.map +1 -0
  135. package/dist/cjs/query/update.js +205 -0
  136. package/dist/cjs/query/update.js.map +1 -0
  137. package/dist/cjs/reactive/live-query.d.ts +41 -0
  138. package/dist/cjs/reactive/live-query.d.ts.map +1 -0
  139. package/dist/cjs/reactive/live-query.js +88 -0
  140. package/dist/cjs/reactive/live-query.js.map +1 -0
  141. package/dist/cjs/schema/cast.d.ts +38 -0
  142. package/dist/cjs/schema/cast.d.ts.map +1 -0
  143. package/dist/cjs/schema/cast.js +280 -0
  144. package/dist/cjs/schema/cast.js.map +1 -0
  145. package/dist/cjs/schema/index.d.ts +5 -0
  146. package/dist/cjs/schema/index.d.ts.map +1 -0
  147. package/dist/cjs/schema/index.js +27 -0
  148. package/dist/cjs/schema/index.js.map +1 -0
  149. package/dist/cjs/schema/schema.d.ts +58 -0
  150. package/dist/cjs/schema/schema.d.ts.map +1 -0
  151. package/dist/cjs/schema/schema.js +363 -0
  152. package/dist/cjs/schema/schema.js.map +1 -0
  153. package/dist/cjs/schema/types.d.ts +144 -0
  154. package/dist/cjs/schema/types.d.ts.map +1 -0
  155. package/dist/cjs/schema/types.js +20 -0
  156. package/dist/cjs/schema/types.js.map +1 -0
  157. package/dist/cjs/schema/validate.d.ts +15 -0
  158. package/dist/cjs/schema/validate.d.ts.map +1 -0
  159. package/dist/cjs/schema/validate.js +101 -0
  160. package/dist/cjs/schema/validate.js.map +1 -0
  161. package/dist/cjs/storage/adapters/capacitor-sqlite.d.ts +67 -0
  162. package/dist/cjs/storage/adapters/capacitor-sqlite.d.ts.map +1 -0
  163. package/dist/cjs/storage/adapters/capacitor-sqlite.js +69 -0
  164. package/dist/cjs/storage/adapters/capacitor-sqlite.js.map +1 -0
  165. package/dist/cjs/storage/adapters/expo-sqlite.d.ts +55 -0
  166. package/dist/cjs/storage/adapters/expo-sqlite.d.ts.map +1 -0
  167. package/dist/cjs/storage/adapters/expo-sqlite.js +53 -0
  168. package/dist/cjs/storage/adapters/expo-sqlite.js.map +1 -0
  169. package/dist/cjs/storage/adapters/indexeddb.d.ts +55 -0
  170. package/dist/cjs/storage/adapters/indexeddb.d.ts.map +1 -0
  171. package/dist/cjs/storage/adapters/indexeddb.js +393 -0
  172. package/dist/cjs/storage/adapters/indexeddb.js.map +1 -0
  173. package/dist/cjs/storage/adapters/memory.d.ts +44 -0
  174. package/dist/cjs/storage/adapters/memory.d.ts.map +1 -0
  175. package/dist/cjs/storage/adapters/memory.js +286 -0
  176. package/dist/cjs/storage/adapters/memory.js.map +1 -0
  177. package/dist/cjs/storage/adapters/node-sqlite.d.ts +59 -0
  178. package/dist/cjs/storage/adapters/node-sqlite.d.ts.map +1 -0
  179. package/dist/cjs/storage/adapters/node-sqlite.js +457 -0
  180. package/dist/cjs/storage/adapters/node-sqlite.js.map +1 -0
  181. package/dist/cjs/storage/adapters/sql-base.d.ts +84 -0
  182. package/dist/cjs/storage/adapters/sql-base.d.ts.map +1 -0
  183. package/dist/cjs/storage/adapters/sql-base.js +393 -0
  184. package/dist/cjs/storage/adapters/sql-base.js.map +1 -0
  185. package/dist/cjs/storage/types.d.ts +131 -0
  186. package/dist/cjs/storage/types.d.ts.map +1 -0
  187. package/dist/cjs/storage/types.js +3 -0
  188. package/dist/cjs/storage/types.js.map +1 -0
  189. package/dist/cjs/sync/adapters/rest.d.ts +31 -0
  190. package/dist/cjs/sync/adapters/rest.d.ts.map +1 -0
  191. package/dist/cjs/sync/adapters/rest.js +75 -0
  192. package/dist/cjs/sync/adapters/rest.js.map +1 -0
  193. package/dist/cjs/sync/attach.d.ts +30 -0
  194. package/dist/cjs/sync/attach.d.ts.map +1 -0
  195. package/dist/cjs/sync/attach.js +104 -0
  196. package/dist/cjs/sync/attach.js.map +1 -0
  197. package/dist/cjs/sync/engine.d.ts +96 -0
  198. package/dist/cjs/sync/engine.d.ts.map +1 -0
  199. package/dist/cjs/sync/engine.js +491 -0
  200. package/dist/cjs/sync/engine.js.map +1 -0
  201. package/dist/cjs/sync/protocol.d.ts +128 -0
  202. package/dist/cjs/sync/protocol.d.ts.map +1 -0
  203. package/dist/cjs/sync/protocol.js +38 -0
  204. package/dist/cjs/sync/protocol.js.map +1 -0
  205. package/dist/cjs/sync/queue.d.ts +77 -0
  206. package/dist/cjs/sync/queue.d.ts.map +1 -0
  207. package/dist/cjs/sync/queue.js +245 -0
  208. package/dist/cjs/sync/queue.js.map +1 -0
  209. package/dist/cjs/sync/server/memory-server.d.ts +65 -0
  210. package/dist/cjs/sync/server/memory-server.d.ts.map +1 -0
  211. package/dist/cjs/sync/server/memory-server.js +193 -0
  212. package/dist/cjs/sync/server/memory-server.js.map +1 -0
  213. package/dist/cjs/timestamps/index.d.ts +47 -0
  214. package/dist/cjs/timestamps/index.d.ts.map +1 -0
  215. package/dist/cjs/timestamps/index.js +88 -0
  216. package/dist/cjs/timestamps/index.js.map +1 -0
  217. package/dist/cjs/timestamps/timezone.d.ts +65 -0
  218. package/dist/cjs/timestamps/timezone.d.ts.map +1 -0
  219. package/dist/cjs/timestamps/timezone.js +208 -0
  220. package/dist/cjs/timestamps/timezone.js.map +1 -0
  221. package/dist/esm/conflict/strategies.d.ts +110 -0
  222. package/dist/esm/conflict/strategies.d.ts.map +1 -0
  223. package/dist/esm/conflict/strategies.js +289 -0
  224. package/dist/esm/conflict/strategies.js.map +1 -0
  225. package/dist/esm/conflict/types.d.ts +38 -0
  226. package/dist/esm/conflict/types.d.ts.map +1 -0
  227. package/dist/esm/conflict/types.js +2 -0
  228. package/dist/esm/conflict/types.js.map +1 -0
  229. package/dist/esm/core/anchor-db.d.ts +154 -0
  230. package/dist/esm/core/anchor-db.d.ts.map +1 -0
  231. package/dist/esm/core/anchor-db.js +269 -0
  232. package/dist/esm/core/anchor-db.js.map +1 -0
  233. package/dist/esm/core/errors.d.ts +125 -0
  234. package/dist/esm/core/errors.d.ts.map +1 -0
  235. package/dist/esm/core/errors.js +161 -0
  236. package/dist/esm/core/errors.js.map +1 -0
  237. package/dist/esm/core/hex.d.ts +4 -0
  238. package/dist/esm/core/hex.d.ts.map +1 -0
  239. package/dist/esm/core/hex.js +37 -0
  240. package/dist/esm/core/hex.js.map +1 -0
  241. package/dist/esm/core/hlc.d.ts +96 -0
  242. package/dist/esm/core/hlc.d.ts.map +1 -0
  243. package/dist/esm/core/hlc.js +153 -0
  244. package/dist/esm/core/hlc.js.map +1 -0
  245. package/dist/esm/core/object-id.d.ts +38 -0
  246. package/dist/esm/core/object-id.d.ts.map +1 -0
  247. package/dist/esm/core/object-id.js +163 -0
  248. package/dist/esm/core/object-id.js.map +1 -0
  249. package/dist/esm/core/random.d.ts +6 -0
  250. package/dist/esm/core/random.d.ts.map +1 -0
  251. package/dist/esm/core/random.js +34 -0
  252. package/dist/esm/core/random.js.map +1 -0
  253. package/dist/esm/core/runtime.d.ts +96 -0
  254. package/dist/esm/core/runtime.d.ts.map +1 -0
  255. package/dist/esm/core/runtime.js +2 -0
  256. package/dist/esm/core/runtime.js.map +1 -0
  257. package/dist/esm/core/uuid.d.ts +16 -0
  258. package/dist/esm/core/uuid.d.ts.map +1 -0
  259. package/dist/esm/core/uuid.js +33 -0
  260. package/dist/esm/core/uuid.js.map +1 -0
  261. package/dist/esm/decorators/index.d.ts +48 -0
  262. package/dist/esm/decorators/index.d.ts.map +1 -0
  263. package/dist/esm/decorators/index.js +286 -0
  264. package/dist/esm/decorators/index.js.map +1 -0
  265. package/dist/esm/events/emitter.d.ts +16 -0
  266. package/dist/esm/events/emitter.d.ts.map +1 -0
  267. package/dist/esm/events/emitter.js +52 -0
  268. package/dist/esm/events/emitter.js.map +1 -0
  269. package/dist/esm/index/keys.d.ts +79 -0
  270. package/dist/esm/index/keys.d.ts.map +1 -0
  271. package/dist/esm/index/keys.js +198 -0
  272. package/dist/esm/index/keys.js.map +1 -0
  273. package/dist/esm/index.d.ts +81 -0
  274. package/dist/esm/index.d.ts.map +1 -0
  275. package/dist/esm/index.js +59 -0
  276. package/dist/esm/index.js.map +1 -0
  277. package/dist/esm/inspector/agent.d.ts +75 -0
  278. package/dist/esm/inspector/agent.d.ts.map +1 -0
  279. package/dist/esm/inspector/agent.js +482 -0
  280. package/dist/esm/inspector/agent.js.map +1 -0
  281. package/dist/esm/inspector/auth.d.ts +49 -0
  282. package/dist/esm/inspector/auth.d.ts.map +1 -0
  283. package/dist/esm/inspector/auth.js +228 -0
  284. package/dist/esm/inspector/auth.js.map +1 -0
  285. package/dist/esm/inspector/bridge.d.ts +141 -0
  286. package/dist/esm/inspector/bridge.d.ts.map +1 -0
  287. package/dist/esm/inspector/bridge.js +182 -0
  288. package/dist/esm/inspector/bridge.js.map +1 -0
  289. package/dist/esm/inspector/client.d.ts +111 -0
  290. package/dist/esm/inspector/client.d.ts.map +1 -0
  291. package/dist/esm/inspector/client.js +213 -0
  292. package/dist/esm/inspector/client.js.map +1 -0
  293. package/dist/esm/inspector/protocol.d.ts +160 -0
  294. package/dist/esm/inspector/protocol.d.ts.map +1 -0
  295. package/dist/esm/inspector/protocol.js +43 -0
  296. package/dist/esm/inspector/protocol.js.map +1 -0
  297. package/dist/esm/inspector/transports/in-process.d.ts +7 -0
  298. package/dist/esm/inspector/transports/in-process.d.ts.map +1 -0
  299. package/dist/esm/inspector/transports/in-process.js +55 -0
  300. package/dist/esm/inspector/transports/in-process.js.map +1 -0
  301. package/dist/esm/inspector/transports/websocket.d.ts +39 -0
  302. package/dist/esm/inspector/transports/websocket.d.ts.map +1 -0
  303. package/dist/esm/inspector/transports/websocket.js +56 -0
  304. package/dist/esm/inspector/transports/websocket.js.map +1 -0
  305. package/dist/esm/interop/csv.d.ts +53 -0
  306. package/dist/esm/interop/csv.d.ts.map +1 -0
  307. package/dist/esm/interop/csv.js +222 -0
  308. package/dist/esm/interop/csv.js.map +1 -0
  309. package/dist/esm/interop/ejson.d.ts +41 -0
  310. package/dist/esm/interop/ejson.d.ts.map +1 -0
  311. package/dist/esm/interop/ejson.js +176 -0
  312. package/dist/esm/interop/ejson.js.map +1 -0
  313. package/dist/esm/interop/export-import.d.ts +98 -0
  314. package/dist/esm/interop/export-import.d.ts.map +1 -0
  315. package/dist/esm/interop/export-import.js +210 -0
  316. package/dist/esm/interop/export-import.js.map +1 -0
  317. package/dist/esm/model/document.d.ts +66 -0
  318. package/dist/esm/model/document.d.ts.map +1 -0
  319. package/dist/esm/model/document.js +297 -0
  320. package/dist/esm/model/document.js.map +1 -0
  321. package/dist/esm/model/model.d.ts +178 -0
  322. package/dist/esm/model/model.d.ts.map +1 -0
  323. package/dist/esm/model/model.js +815 -0
  324. package/dist/esm/model/model.js.map +1 -0
  325. package/dist/esm/package.json +3 -0
  326. package/dist/esm/query/aggregation/expressions.d.ts +34 -0
  327. package/dist/esm/query/aggregation/expressions.d.ts.map +1 -0
  328. package/dist/esm/query/aggregation/expressions.js +545 -0
  329. package/dist/esm/query/aggregation/expressions.js.map +1 -0
  330. package/dist/esm/query/aggregation/pipeline.d.ts +79 -0
  331. package/dist/esm/query/aggregation/pipeline.d.ts.map +1 -0
  332. package/dist/esm/query/aggregation/pipeline.js +591 -0
  333. package/dist/esm/query/aggregation/pipeline.js.map +1 -0
  334. package/dist/esm/query/aggregation/source.d.ts +35 -0
  335. package/dist/esm/query/aggregation/source.d.ts.map +1 -0
  336. package/dist/esm/query/aggregation/source.js +77 -0
  337. package/dist/esm/query/aggregation/source.js.map +1 -0
  338. package/dist/esm/query/builder/query.d.ts +113 -0
  339. package/dist/esm/query/builder/query.d.ts.map +1 -0
  340. package/dist/esm/query/builder/query.js +209 -0
  341. package/dist/esm/query/builder/query.js.map +1 -0
  342. package/dist/esm/query/filter.d.ts +50 -0
  343. package/dist/esm/query/filter.d.ts.map +1 -0
  344. package/dist/esm/query/filter.js +267 -0
  345. package/dist/esm/query/filter.js.map +1 -0
  346. package/dist/esm/query/path.d.ts +41 -0
  347. package/dist/esm/query/path.d.ts.map +1 -0
  348. package/dist/esm/query/path.js +282 -0
  349. package/dist/esm/query/path.js.map +1 -0
  350. package/dist/esm/query/update.d.ts +30 -0
  351. package/dist/esm/query/update.d.ts.map +1 -0
  352. package/dist/esm/query/update.js +198 -0
  353. package/dist/esm/query/update.js.map +1 -0
  354. package/dist/esm/reactive/live-query.d.ts +41 -0
  355. package/dist/esm/reactive/live-query.d.ts.map +1 -0
  356. package/dist/esm/reactive/live-query.js +83 -0
  357. package/dist/esm/reactive/live-query.js.map +1 -0
  358. package/dist/esm/schema/cast.d.ts +38 -0
  359. package/dist/esm/schema/cast.d.ts.map +1 -0
  360. package/dist/esm/schema/cast.js +275 -0
  361. package/dist/esm/schema/cast.js.map +1 -0
  362. package/dist/esm/schema/index.d.ts +5 -0
  363. package/dist/esm/schema/index.d.ts.map +1 -0
  364. package/dist/esm/schema/index.js +5 -0
  365. package/dist/esm/schema/index.js.map +1 -0
  366. package/dist/esm/schema/schema.d.ts +58 -0
  367. package/dist/esm/schema/schema.d.ts.map +1 -0
  368. package/dist/esm/schema/schema.js +358 -0
  369. package/dist/esm/schema/schema.js.map +1 -0
  370. package/dist/esm/schema/types.d.ts +144 -0
  371. package/dist/esm/schema/types.d.ts.map +1 -0
  372. package/dist/esm/schema/types.js +17 -0
  373. package/dist/esm/schema/types.js.map +1 -0
  374. package/dist/esm/schema/validate.d.ts +15 -0
  375. package/dist/esm/schema/validate.d.ts.map +1 -0
  376. package/dist/esm/schema/validate.js +98 -0
  377. package/dist/esm/schema/validate.js.map +1 -0
  378. package/dist/esm/storage/adapters/capacitor-sqlite.d.ts +67 -0
  379. package/dist/esm/storage/adapters/capacitor-sqlite.d.ts.map +1 -0
  380. package/dist/esm/storage/adapters/capacitor-sqlite.js +65 -0
  381. package/dist/esm/storage/adapters/capacitor-sqlite.js.map +1 -0
  382. package/dist/esm/storage/adapters/expo-sqlite.d.ts +55 -0
  383. package/dist/esm/storage/adapters/expo-sqlite.d.ts.map +1 -0
  384. package/dist/esm/storage/adapters/expo-sqlite.js +49 -0
  385. package/dist/esm/storage/adapters/expo-sqlite.js.map +1 -0
  386. package/dist/esm/storage/adapters/indexeddb.d.ts +55 -0
  387. package/dist/esm/storage/adapters/indexeddb.d.ts.map +1 -0
  388. package/dist/esm/storage/adapters/indexeddb.js +389 -0
  389. package/dist/esm/storage/adapters/indexeddb.js.map +1 -0
  390. package/dist/esm/storage/adapters/memory.d.ts +44 -0
  391. package/dist/esm/storage/adapters/memory.d.ts.map +1 -0
  392. package/dist/esm/storage/adapters/memory.js +282 -0
  393. package/dist/esm/storage/adapters/memory.js.map +1 -0
  394. package/dist/esm/storage/adapters/node-sqlite.d.ts +59 -0
  395. package/dist/esm/storage/adapters/node-sqlite.d.ts.map +1 -0
  396. package/dist/esm/storage/adapters/node-sqlite.js +450 -0
  397. package/dist/esm/storage/adapters/node-sqlite.js.map +1 -0
  398. package/dist/esm/storage/adapters/sql-base.d.ts +84 -0
  399. package/dist/esm/storage/adapters/sql-base.d.ts.map +1 -0
  400. package/dist/esm/storage/adapters/sql-base.js +383 -0
  401. package/dist/esm/storage/adapters/sql-base.js.map +1 -0
  402. package/dist/esm/storage/types.d.ts +131 -0
  403. package/dist/esm/storage/types.d.ts.map +1 -0
  404. package/dist/esm/storage/types.js +2 -0
  405. package/dist/esm/storage/types.js.map +1 -0
  406. package/dist/esm/sync/adapters/rest.d.ts +31 -0
  407. package/dist/esm/sync/adapters/rest.d.ts.map +1 -0
  408. package/dist/esm/sync/adapters/rest.js +71 -0
  409. package/dist/esm/sync/adapters/rest.js.map +1 -0
  410. package/dist/esm/sync/attach.d.ts +30 -0
  411. package/dist/esm/sync/attach.d.ts.map +1 -0
  412. package/dist/esm/sync/attach.js +98 -0
  413. package/dist/esm/sync/attach.js.map +1 -0
  414. package/dist/esm/sync/engine.d.ts +96 -0
  415. package/dist/esm/sync/engine.d.ts.map +1 -0
  416. package/dist/esm/sync/engine.js +487 -0
  417. package/dist/esm/sync/engine.js.map +1 -0
  418. package/dist/esm/sync/protocol.d.ts +128 -0
  419. package/dist/esm/sync/protocol.d.ts.map +1 -0
  420. package/dist/esm/sync/protocol.js +33 -0
  421. package/dist/esm/sync/protocol.js.map +1 -0
  422. package/dist/esm/sync/queue.d.ts +77 -0
  423. package/dist/esm/sync/queue.d.ts.map +1 -0
  424. package/dist/esm/sync/queue.js +241 -0
  425. package/dist/esm/sync/queue.js.map +1 -0
  426. package/dist/esm/sync/server/memory-server.d.ts +65 -0
  427. package/dist/esm/sync/server/memory-server.d.ts.map +1 -0
  428. package/dist/esm/sync/server/memory-server.js +189 -0
  429. package/dist/esm/sync/server/memory-server.js.map +1 -0
  430. package/dist/esm/timestamps/index.d.ts +47 -0
  431. package/dist/esm/timestamps/index.d.ts.map +1 -0
  432. package/dist/esm/timestamps/index.js +70 -0
  433. package/dist/esm/timestamps/index.js.map +1 -0
  434. package/dist/esm/timestamps/timezone.d.ts +65 -0
  435. package/dist/esm/timestamps/timezone.d.ts.map +1 -0
  436. package/dist/esm/timestamps/timezone.js +196 -0
  437. package/dist/esm/timestamps/timezone.js.map +1 -0
  438. package/package.json +163 -0
@@ -0,0 +1,234 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InspectorAuth = void 0;
4
+ exports.hmacSha256 = hmacSha256;
5
+ exports.timingSafeEqual = timingSafeEqual;
6
+ const hex_ts_1 = require("../core/hex.js");
7
+ const random_ts_1 = require("../core/random.js");
8
+ /**
9
+ * Inspector pairing and session authentication.
10
+ *
11
+ * ## The threat this addresses
12
+ *
13
+ * An inspector connection exposes the whole local database. The pairing code travels through a QR
14
+ * code or is read aloud, so it is the *least* protected part of the flow — which is exactly why it
15
+ * must never become a long-lived bearer credential.
16
+ *
17
+ * So pairing is challenge–response:
18
+ *
19
+ * agent -> challenge (random, single-use)
20
+ * client -> HMAC(pairingCode, challenge)
21
+ * agent -> verifies, issues a session token, burns the pairing code
22
+ *
23
+ * The code itself is never transmitted. Replaying a captured proof fails because the challenge is
24
+ * consumed on use, and a stolen QR is useless after the short pairing window closes.
25
+ *
26
+ * ## Why HMAC-SHA256 is implemented here
27
+ *
28
+ * `crypto.subtle` is unavailable or async-only on several React Native runtimes, and this must
29
+ * behave identically on device, in Node and in a browser. A self-contained implementation is ~80
30
+ * lines and removes the platform question entirely. It is used only for pairing proofs — never for
31
+ * storing secrets.
32
+ */
33
+ const K = new Uint32Array([
34
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
35
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
36
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
37
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
38
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
39
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
40
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
41
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
42
+ ]);
43
+ function sha256(input) {
44
+ const h = new Uint32Array([
45
+ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,
46
+ ]);
47
+ const bitLength = input.length * 8;
48
+ const paddedLength = (((input.length + 8) >> 6) + 1) << 6;
49
+ const buffer = new Uint8Array(paddedLength);
50
+ buffer.set(input);
51
+ buffer[input.length] = 0x80;
52
+ const view = new DataView(buffer.buffer);
53
+ view.setUint32(paddedLength - 4, bitLength >>> 0, false);
54
+ view.setUint32(paddedLength - 8, Math.floor(bitLength / 2 ** 32), false);
55
+ const w = new Uint32Array(64);
56
+ for (let offset = 0; offset < paddedLength; offset += 64) {
57
+ for (let i = 0; i < 16; i++)
58
+ w[i] = view.getUint32(offset + i * 4, false);
59
+ for (let i = 16; i < 64; i++) {
60
+ const a = w[i - 15];
61
+ const b = w[i - 2];
62
+ const s0 = ((a >>> 7) | (a << 25)) ^ ((a >>> 18) | (a << 14)) ^ (a >>> 3);
63
+ const s1 = ((b >>> 17) | (b << 15)) ^ ((b >>> 19) | (b << 13)) ^ (b >>> 10);
64
+ w[i] = (w[i - 16] + s0 + w[i - 7] + s1) >>> 0;
65
+ }
66
+ let [a, b, c, d, e, f, g, hh] = [h[0], h[1], h[2], h[3], h[4], h[5], h[6], h[7]];
67
+ for (let i = 0; i < 64; i++) {
68
+ const S1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7));
69
+ const ch = (e & f) ^ (~e & g);
70
+ const temp1 = (hh + S1 + ch + K[i] + w[i]) >>> 0;
71
+ const S0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10));
72
+ const maj = (a & b) ^ (a & c) ^ (b & c);
73
+ const temp2 = (S0 + maj) >>> 0;
74
+ hh = g;
75
+ g = f;
76
+ f = e;
77
+ e = (d + temp1) >>> 0;
78
+ d = c;
79
+ c = b;
80
+ b = a;
81
+ a = (temp1 + temp2) >>> 0;
82
+ }
83
+ h[0] = (h[0] + a) >>> 0;
84
+ h[1] = (h[1] + b) >>> 0;
85
+ h[2] = (h[2] + c) >>> 0;
86
+ h[3] = (h[3] + d) >>> 0;
87
+ h[4] = (h[4] + e) >>> 0;
88
+ h[5] = (h[5] + f) >>> 0;
89
+ h[6] = (h[6] + g) >>> 0;
90
+ h[7] = (h[7] + hh) >>> 0;
91
+ }
92
+ const out = new Uint8Array(32);
93
+ const outView = new DataView(out.buffer);
94
+ for (let i = 0; i < 8; i++)
95
+ outView.setUint32(i * 4, h[i], false);
96
+ return out;
97
+ }
98
+ function utf8(text) {
99
+ return new TextEncoder().encode(text);
100
+ }
101
+ function hmacSha256(key, message) {
102
+ const blockSize = 64;
103
+ let keyBytes = utf8(key);
104
+ if (keyBytes.length > blockSize)
105
+ keyBytes = sha256(keyBytes);
106
+ const padded = new Uint8Array(blockSize);
107
+ padded.set(keyBytes);
108
+ const inner = new Uint8Array(blockSize);
109
+ const outer = new Uint8Array(blockSize);
110
+ for (let i = 0; i < blockSize; i++) {
111
+ inner[i] = padded[i] ^ 0x36;
112
+ outer[i] = padded[i] ^ 0x5c;
113
+ }
114
+ const messageBytes = utf8(message);
115
+ const innerInput = new Uint8Array(blockSize + messageBytes.length);
116
+ innerInput.set(inner);
117
+ innerInput.set(messageBytes, blockSize);
118
+ const innerHash = sha256(innerInput);
119
+ const outerInput = new Uint8Array(blockSize + innerHash.length);
120
+ outerInput.set(outer);
121
+ outerInput.set(innerHash, blockSize);
122
+ return (0, hex_ts_1.bytesToHex)(sha256(outerInput));
123
+ }
124
+ /** Constant-time comparison — a length-independent early return would leak the proof by timing. */
125
+ function timingSafeEqual(a, b) {
126
+ if (a.length !== b.length)
127
+ return false;
128
+ let diff = 0;
129
+ for (let i = 0; i < a.length; i++)
130
+ diff |= a.charCodeAt(i) ^ b.charCodeAt(i);
131
+ return diff === 0;
132
+ }
133
+ class InspectorAuth {
134
+ constructor(options = {}) {
135
+ this.pairing = null;
136
+ this.sessions = new Map();
137
+ this.opts = {
138
+ pairingTtlMs: options.pairingTtlMs ?? 5 * 60_000,
139
+ sessionTtlMs: options.sessionTtlMs ?? 60 * 60_000,
140
+ disabled: options.disabled ?? false,
141
+ now: options.now ?? (() => Date.now()),
142
+ };
143
+ }
144
+ get isDisabled() {
145
+ return this.opts.disabled;
146
+ }
147
+ /** Begin a pairing window. Any previous unused code is invalidated. */
148
+ startPairing() {
149
+ const code = formatCode((0, random_ts_1.randomBytes)(4));
150
+ const challenge = (0, hex_ts_1.bytesToHex)((0, random_ts_1.randomBytes)(16));
151
+ this.pairing = {
152
+ code,
153
+ challenge,
154
+ expiresAt: new Date(this.opts.now() + this.opts.pairingTtlMs).toISOString(),
155
+ };
156
+ return this.pairing;
157
+ }
158
+ /** The challenge a client must sign. Null when no pairing window is open. */
159
+ currentChallenge() {
160
+ if (!this.pairing)
161
+ return null;
162
+ if (Date.parse(this.pairing.expiresAt) <= this.opts.now()) {
163
+ this.pairing = null;
164
+ return null;
165
+ }
166
+ return this.pairing.challenge;
167
+ }
168
+ /** What a client computes from the code it scanned. */
169
+ static proofFor(pairingCode, challenge) {
170
+ return hmacSha256(pairingCode, challenge);
171
+ }
172
+ /**
173
+ * Verify a proof and issue a session.
174
+ *
175
+ * The pairing code is consumed whether or not the proof was correct, so a captured challenge
176
+ * cannot be brute-forced by replaying against the same window.
177
+ */
178
+ authenticate(proof, clientName = "Anchor Lens") {
179
+ if (this.opts.disabled)
180
+ return this.issueSession(clientName);
181
+ const pairing = this.pairing;
182
+ if (!pairing || Date.parse(pairing.expiresAt) <= this.opts.now()) {
183
+ this.pairing = null;
184
+ return null;
185
+ }
186
+ this.pairing = null; // single use, success or failure
187
+ const expected = hmacSha256(pairing.code, pairing.challenge);
188
+ if (!timingSafeEqual(expected, proof))
189
+ return null;
190
+ return this.issueSession(clientName);
191
+ }
192
+ issueSession(clientName) {
193
+ const session = {
194
+ token: (0, hex_ts_1.bytesToHex)((0, random_ts_1.randomBytes)(24)),
195
+ clientName,
196
+ createdAt: new Date(this.opts.now()).toISOString(),
197
+ expiresAt: new Date(this.opts.now() + this.opts.sessionTtlMs).toISOString(),
198
+ };
199
+ this.sessions.set(session.token, session);
200
+ return session;
201
+ }
202
+ verify(token) {
203
+ if (this.opts.disabled)
204
+ return { token: "disabled", clientName: "in-process", createdAt: "", expiresAt: "" };
205
+ if (!token)
206
+ return null;
207
+ const session = this.sessions.get(token);
208
+ if (!session)
209
+ return null;
210
+ if (Date.parse(session.expiresAt) <= this.opts.now()) {
211
+ this.sessions.delete(token);
212
+ return null;
213
+ }
214
+ return session;
215
+ }
216
+ revoke(token) {
217
+ this.sessions.delete(token);
218
+ }
219
+ activeSessions() {
220
+ const now = this.opts.now();
221
+ for (const [token, session] of this.sessions) {
222
+ if (Date.parse(session.expiresAt) <= now)
223
+ this.sessions.delete(token);
224
+ }
225
+ return [...this.sessions.values()];
226
+ }
227
+ }
228
+ exports.InspectorAuth = InspectorAuth;
229
+ /** `A3F9-2B71` — short enough to read aloud, 32 bits of entropy inside a 5-minute window. */
230
+ function formatCode(bytes) {
231
+ const hex = (0, hex_ts_1.bytesToHex)(bytes).toUpperCase();
232
+ return `${hex.slice(0, 4)}-${hex.slice(4, 8)}`;
233
+ }
234
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/inspector/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ import type { WebSocketLike } from "./transports/websocket.js";
2
+ /**
3
+ * The MongoDB bridge protocol — moving collections between a device and a real MongoDB.
4
+ *
5
+ * ## Why this exists as a separate channel
6
+ *
7
+ * Anchor Lens cannot talk to MongoDB. The driver needs raw TCP and TLS sockets; React Native has
8
+ * neither without a native module, which is the same reason the inspector needs a relay at all.
9
+ * Lens's own source guard bans importing `mongodb` for exactly this reason.
10
+ *
11
+ * So the driver lives in the relay — an ordinary Node process, already running on the developer's
12
+ * machine, already bound to localhost — and Lens orchestrates the two ends it *can* reach:
13
+ *
14
+ * ```
15
+ * pull: relay reads MongoDB ──Extended JSON──► agent.importCollection()
16
+ * push: agent.exportCollection() ──Extended JSON──► relay writes MongoDB
17
+ * ```
18
+ *
19
+ * The payload is Extended JSON in both directions, so this reuses the interchange format that is
20
+ * already cross-validated against the official `bson` package. Anchor's codec encodes on the Anchor
21
+ * side, MongoDB's own codec decodes on the MongoDB side, and the two are tested to agree — no third
22
+ * interpretation of an ObjectId or a Date is introduced anywhere.
23
+ *
24
+ * This is a **development tool**. The bridge is off unless the relay is started with
25
+ * `--mongo-bridge`, and a connection string is held only for the life of a socket.
26
+ */
27
+ export declare const BRIDGE_PROTOCOL_VERSION = 1;
28
+ export type BridgeOp = "connect" | "read" | "write" | "disconnect";
29
+ /** How an existing document in the target collection is treated. Mirrors `ImportOptions.mode`. */
30
+ export type BridgeWriteMode = "insert" | "upsert" | "replace";
31
+ export interface BridgeRequest {
32
+ v: number;
33
+ id: string;
34
+ op: BridgeOp;
35
+ /** Present on `connect`. Never logged, never persisted. */
36
+ uri?: string;
37
+ database?: string;
38
+ /** The relay room, used as the bridge's access token. */
39
+ room?: string;
40
+ collection?: string;
41
+ data?: string;
42
+ mode?: BridgeWriteMode;
43
+ }
44
+ export interface BridgeResponse {
45
+ v: number;
46
+ id: string;
47
+ ok: boolean;
48
+ error?: {
49
+ code: BridgeErrorCode;
50
+ message: string;
51
+ };
52
+ result?: unknown;
53
+ /** `read` streams its body: a chunk of newline-delimited Extended JSON. */
54
+ chunk?: string;
55
+ done?: boolean;
56
+ /** Documents sent so far, for progress. */
57
+ sent?: number;
58
+ }
59
+ export type BridgeErrorCode = "disabled" | "unauthorized" | "driver_missing" | "not_connected" | "connect_failed" | "bad_request" | "failed";
60
+ export interface MongoCollectionInfo {
61
+ name: string;
62
+ /** Estimated, from collection metadata — instant, but may lag by a few documents. */
63
+ count: number;
64
+ }
65
+ export interface BridgeConnectResult {
66
+ database: string;
67
+ serverVersion: string;
68
+ collections: MongoCollectionInfo[];
69
+ }
70
+ export interface BridgeWriteResult {
71
+ collection: string;
72
+ inserted: number;
73
+ updated: number;
74
+ skipped: number;
75
+ }
76
+ export interface BridgeReadResult {
77
+ collection: string;
78
+ /** Newline-delimited Extended JSON, ready to hand straight to `importCollection`. */
79
+ data: string;
80
+ count: number;
81
+ }
82
+ export declare class BridgeError extends Error {
83
+ readonly code: BridgeErrorCode;
84
+ constructor(error: {
85
+ code: BridgeErrorCode;
86
+ message: string;
87
+ });
88
+ }
89
+ /**
90
+ * Hide the password in a connection string.
91
+ *
92
+ * One implementation, used by the relay's logs, the relay's error messages and Lens's display, so a
93
+ * credential cannot leak through the one place that forgot to redact. Anything that is not
94
+ * recognisably a URI is replaced wholesale rather than echoed back — a malformed string is far more
95
+ * likely to be a secret typed into the wrong box than something safe to print.
96
+ */
97
+ export declare function redactMongoUri(uri: string): string;
98
+ export interface MongoBridgeClientOptions {
99
+ socket: WebSocketLike;
100
+ /** Requests fail rather than hang if the relay stops answering. */
101
+ timeoutMs?: number;
102
+ }
103
+ /**
104
+ * The Lens half of the bridge.
105
+ *
106
+ * Lives here rather than in the relay package because the relay is a Node program — it imports
107
+ * `node:http` and `ws`, neither of which exists in React Native. Keeping both halves compiled from
108
+ * one definition of the protocol is the same reason `InspectorClient` lives beside `InspectorAgent`.
109
+ */
110
+ export declare class MongoBridgeClient {
111
+ private readonly socket;
112
+ private readonly timeoutMs;
113
+ private readonly pending;
114
+ /** Frames written before the socket opened, flushed on open rather than lost to the race. */
115
+ private queued;
116
+ private opened;
117
+ constructor(options: MongoBridgeClientOptions);
118
+ private receive;
119
+ private call;
120
+ /** Open a MongoDB connection on the relay and list what is there. */
121
+ connect(uri: string, database: string, room: string): Promise<BridgeConnectResult>;
122
+ /** Read a whole collection as newline-delimited Extended JSON. */
123
+ read(collection: string, onProgress?: (sent: number) => void): Promise<BridgeReadResult>;
124
+ /** Write Extended JSON into a MongoDB collection. */
125
+ write(collection: string, data: string, mode: BridgeWriteMode): Promise<BridgeWriteResult>;
126
+ disconnect(): Promise<{
127
+ closed: boolean;
128
+ }>;
129
+ close(): void;
130
+ }
131
+ /** The URL Lens dials for the bridge, given the relay it is already talking to. */
132
+ export declare function bridgeUrl(host: string, port: number, room: string): string;
133
+ /**
134
+ * The bridge URL for a relay Lens is already connected to.
135
+ *
136
+ * Lens holds the relay address from the QR link, in whatever form it was written — with or without
137
+ * a path, with or without query parameters. Rewriting it here keeps that parsing in one place
138
+ * instead of in the screen.
139
+ */
140
+ export declare function bridgeUrlFromRelay(relayUrl: string, room: string): string;
141
+ //# sourceMappingURL=bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../../src/inspector/bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MongoBridgeClient = exports.BridgeError = exports.BRIDGE_PROTOCOL_VERSION = void 0;
4
+ exports.redactMongoUri = redactMongoUri;
5
+ exports.bridgeUrl = bridgeUrl;
6
+ exports.bridgeUrlFromRelay = bridgeUrlFromRelay;
7
+ const uuid_ts_1 = require("../core/uuid.js");
8
+ /**
9
+ * The MongoDB bridge protocol — moving collections between a device and a real MongoDB.
10
+ *
11
+ * ## Why this exists as a separate channel
12
+ *
13
+ * Anchor Lens cannot talk to MongoDB. The driver needs raw TCP and TLS sockets; React Native has
14
+ * neither without a native module, which is the same reason the inspector needs a relay at all.
15
+ * Lens's own source guard bans importing `mongodb` for exactly this reason.
16
+ *
17
+ * So the driver lives in the relay — an ordinary Node process, already running on the developer's
18
+ * machine, already bound to localhost — and Lens orchestrates the two ends it *can* reach:
19
+ *
20
+ * ```
21
+ * pull: relay reads MongoDB ──Extended JSON──► agent.importCollection()
22
+ * push: agent.exportCollection() ──Extended JSON──► relay writes MongoDB
23
+ * ```
24
+ *
25
+ * The payload is Extended JSON in both directions, so this reuses the interchange format that is
26
+ * already cross-validated against the official `bson` package. Anchor's codec encodes on the Anchor
27
+ * side, MongoDB's own codec decodes on the MongoDB side, and the two are tested to agree — no third
28
+ * interpretation of an ObjectId or a Date is introduced anywhere.
29
+ *
30
+ * This is a **development tool**. The bridge is off unless the relay is started with
31
+ * `--mongo-bridge`, and a connection string is held only for the life of a socket.
32
+ */
33
+ exports.BRIDGE_PROTOCOL_VERSION = 1;
34
+ class BridgeError extends Error {
35
+ constructor(error) {
36
+ super(error.message);
37
+ this.code = error.code;
38
+ this.name = "BridgeError";
39
+ }
40
+ }
41
+ exports.BridgeError = BridgeError;
42
+ /**
43
+ * Hide the password in a connection string.
44
+ *
45
+ * One implementation, used by the relay's logs, the relay's error messages and Lens's display, so a
46
+ * credential cannot leak through the one place that forgot to redact. Anything that is not
47
+ * recognisably a URI is replaced wholesale rather than echoed back — a malformed string is far more
48
+ * likely to be a secret typed into the wrong box than something safe to print.
49
+ */
50
+ function redactMongoUri(uri) {
51
+ const match = /^(mongodb(?:\+srv)?:\/\/)(?:[^@/]*@)?([^/?]*)(.*)$/.exec(uri.trim());
52
+ if (!match)
53
+ return "<redacted>";
54
+ const [, scheme, hostPart, rest] = match;
55
+ const hadCredentials = /^mongodb(?:\+srv)?:\/\/[^@/]*@/.test(uri.trim());
56
+ const path = (rest ?? "").split("?")[0] ?? "";
57
+ return `${scheme}${hadCredentials ? "***:***@" : ""}${hostPart}${path}`;
58
+ }
59
+ /**
60
+ * The Lens half of the bridge.
61
+ *
62
+ * Lives here rather than in the relay package because the relay is a Node program — it imports
63
+ * `node:http` and `ws`, neither of which exists in React Native. Keeping both halves compiled from
64
+ * one definition of the protocol is the same reason `InspectorClient` lives beside `InspectorAgent`.
65
+ */
66
+ class MongoBridgeClient {
67
+ constructor(options) {
68
+ this.pending = new Map();
69
+ /** Frames written before the socket opened, flushed on open rather than lost to the race. */
70
+ this.queued = [];
71
+ this.socket = options.socket;
72
+ this.timeoutMs = options.timeoutMs ?? 60_000;
73
+ this.opened = options.socket.readyState === 1;
74
+ this.socket.addEventListener("open", () => {
75
+ this.opened = true;
76
+ for (const frame of this.queued)
77
+ this.socket.send(frame);
78
+ this.queued = [];
79
+ });
80
+ this.socket.addEventListener("message", (event) => {
81
+ let parsed;
82
+ try {
83
+ parsed = JSON.parse(String(event.data));
84
+ }
85
+ catch {
86
+ return; // not ours; a malformed frame must not take the socket down
87
+ }
88
+ this.receive(parsed);
89
+ });
90
+ this.socket.addEventListener("close", () => {
91
+ for (const [, entry] of this.pending) {
92
+ clearTimeout(entry.timer);
93
+ entry.reject(new BridgeError({ code: "failed", message: "The relay connection closed." }));
94
+ }
95
+ this.pending.clear();
96
+ });
97
+ }
98
+ receive(response) {
99
+ const entry = this.pending.get(response.id);
100
+ if (!entry)
101
+ return;
102
+ if (!response.ok) {
103
+ clearTimeout(entry.timer);
104
+ this.pending.delete(response.id);
105
+ entry.reject(new BridgeError(response.error ?? { code: "failed", message: "The bridge reported a failure." }));
106
+ return;
107
+ }
108
+ // A streamed read arrives as many frames; only the last one settles the promise.
109
+ if (response.chunk !== undefined) {
110
+ if (response.chunk !== "")
111
+ entry.chunks.push(response.chunk);
112
+ if (!response.done) {
113
+ // Progress only while there is more to come. The terminal frame repeats the final count,
114
+ // and reporting it again would emit the same number twice.
115
+ if (response.sent !== undefined)
116
+ entry.onProgress?.(response.sent);
117
+ return;
118
+ }
119
+ clearTimeout(entry.timer);
120
+ this.pending.delete(response.id);
121
+ entry.resolve({ ...response.result, data: entry.chunks.join("\n") });
122
+ return;
123
+ }
124
+ clearTimeout(entry.timer);
125
+ this.pending.delete(response.id);
126
+ entry.resolve(response.result);
127
+ }
128
+ call(request, onProgress) {
129
+ const id = (0, uuid_ts_1.uuidv7)();
130
+ const frame = { v: exports.BRIDGE_PROTOCOL_VERSION, id, ...request };
131
+ return new Promise((resolve, reject) => {
132
+ const timer = setTimeout(() => {
133
+ this.pending.delete(id);
134
+ reject(new BridgeError({ code: "failed", message: `The bridge did not answer "${request.op}" in time.` }));
135
+ }, this.timeoutMs);
136
+ this.pending.set(id, {
137
+ resolve: resolve,
138
+ reject,
139
+ timer,
140
+ chunks: [],
141
+ ...(onProgress ? { onProgress } : {}),
142
+ });
143
+ const encoded = JSON.stringify(frame);
144
+ if (this.opened)
145
+ this.socket.send(encoded);
146
+ else
147
+ this.queued.push(encoded);
148
+ });
149
+ }
150
+ /** Open a MongoDB connection on the relay and list what is there. */
151
+ connect(uri, database, room) {
152
+ return this.call({ op: "connect", uri, database, room });
153
+ }
154
+ /** Read a whole collection as newline-delimited Extended JSON. */
155
+ read(collection, onProgress) {
156
+ return this.call({ op: "read", collection }, onProgress);
157
+ }
158
+ /** Write Extended JSON into a MongoDB collection. */
159
+ write(collection, data, mode) {
160
+ return this.call({ op: "write", collection, data, mode });
161
+ }
162
+ disconnect() {
163
+ return this.call({ op: "disconnect" });
164
+ }
165
+ close() {
166
+ for (const [, entry] of this.pending)
167
+ clearTimeout(entry.timer);
168
+ this.pending.clear();
169
+ this.socket.close();
170
+ }
171
+ }
172
+ exports.MongoBridgeClient = MongoBridgeClient;
173
+ /** The URL Lens dials for the bridge, given the relay it is already talking to. */
174
+ function bridgeUrl(host, port, room) {
175
+ return `ws://${host}:${port}/bridge?room=${encodeURIComponent(room)}`;
176
+ }
177
+ /**
178
+ * The bridge URL for a relay Lens is already connected to.
179
+ *
180
+ * Lens holds the relay address from the QR link, in whatever form it was written — with or without
181
+ * a path, with or without query parameters. Rewriting it here keeps that parsing in one place
182
+ * instead of in the screen.
183
+ */
184
+ function bridgeUrlFromRelay(relayUrl, room) {
185
+ const trimmed = relayUrl.trim().replace(/\/+$/, "");
186
+ const withoutQuery = trimmed.split("?")[0] ?? trimmed;
187
+ const origin = withoutQuery.replace(/\/relay$|\/bridge$/, "");
188
+ return `${origin}/bridge?room=${encodeURIComponent(room)}`;
189
+ }
190
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../src/inspector/bridge.ts"],"names":[],"mappings":";;;AAmHA,wCAQC;AAiJD,8BAEC;AASD,gDAKC;AA5RD,6CAAyC;AAGzC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEU,QAAA,uBAAuB,GAAG,CAAC,CAAC;AAqEzC,MAAa,WAAY,SAAQ,KAAK;IAEpC,YAAY,KAAiD;QAC3D,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAPD,kCAOC;AAED;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,GAAW;IACxC,MAAM,KAAK,GAAG,oDAAoD,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACpF,IAAI,CAAC,KAAK;QAAE,OAAO,YAAY,CAAC;IAEhC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;IACzC,MAAM,cAAc,GAAG,gCAAgC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,OAAO,GAAG,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAC;AAC1E,CAAC;AAgBD;;;;;;GAMG;AACH,MAAa,iBAAiB;IAQ5B,YAAY,OAAiC;QAL5B,YAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;QAC7D,6FAA6F;QACrF,WAAM,GAAa,EAAE,CAAC;QAI5B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,CAAC;QAE9C,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;YACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YAChD,IAAI,MAAsB,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAmB,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,4DAA4D;YACtE,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACzC,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACrC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC1B,KAAK,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC,CAAC,CAAC;YAC7F,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,OAAO,CAAC,QAAwB;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACjC,KAAK,CAAC,MAAM,CACV,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC,CACjG,CAAC;YACF,OAAO;QACT,CAAC;QAED,iFAAiF;QACjF,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,KAAK,KAAK,EAAE;gBAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC7D,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnB,yFAAyF;gBACzF,2DAA2D;gBAC3D,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;oBAAE,KAAK,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACnE,OAAO;YACT,CAAC;YAED,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACjC,KAAK,CAAC,OAAO,CAAC,EAAE,GAAI,QAAQ,CAAC,MAAiB,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjF,OAAO;QACT,CAAC;QAED,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAEO,IAAI,CAAI,OAAwC,EAAE,UAAmC;QAC3F,MAAM,EAAE,GAAG,IAAA,gBAAM,GAAE,CAAC;QACpB,MAAM,KAAK,GAAkB,EAAE,CAAC,EAAE,+BAAuB,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC;QAE5E,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACxB,MAAM,CAAC,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,8BAA8B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;YAC7G,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAEnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE;gBACnB,OAAO,EAAE,OAAmC;gBAC5C,MAAM;gBACN,KAAK;gBACL,MAAM,EAAE,EAAE;gBACV,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtC,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;gBACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qEAAqE;IACrE,OAAO,CAAC,GAAW,EAAE,QAAgB,EAAE,IAAY;QACjD,OAAO,IAAI,CAAC,IAAI,CAAsB,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,kEAAkE;IAClE,IAAI,CAAC,UAAkB,EAAE,UAAmC;QAC1D,OAAO,IAAI,CAAC,IAAI,CAAmB,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,UAAU,CAAC,CAAC;IAC7E,CAAC;IAED,qDAAqD;IACrD,KAAK,CAAC,UAAkB,EAAE,IAAY,EAAE,IAAqB;QAC3D,OAAO,IAAI,CAAC,IAAI,CAAoB,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,IAAI,CAAsB,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK;QACH,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO;YAAE,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF;AAvHD,8CAuHC;AAED,mFAAmF;AACnF,SAAgB,SAAS,CAAC,IAAY,EAAE,IAAY,EAAE,IAAY;IAChE,OAAO,QAAQ,IAAI,IAAI,IAAI,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;AACxE,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,QAAgB,EAAE,IAAY;IAC/D,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IACtD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;IAC9D,OAAO,GAAG,MAAM,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;AAC7D,CAAC"}