holosphere 2.0.0-alpha7 → 2.0.0-alpha9

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 (327) hide show
  1. package/CHANGELOG.md +446 -0
  2. package/FEATURES.md +431 -0
  3. package/LICENSE +29 -166
  4. package/LICENSE-AGPL.md +180 -0
  5. package/dist/cdn/holosphere.min.js +55 -0
  6. package/dist/cdn/holosphere.min.js.map +1 -0
  7. package/dist/cjs/holosphere.cjs +1 -1
  8. package/dist/esm/holosphere.js +1 -1
  9. package/dist/{index-C-IlLYlk.cjs → index-DDGt_V9o.cjs} +2 -2
  10. package/dist/{index-C-IlLYlk.cjs.map → index-DDGt_V9o.cjs.map} +1 -1
  11. package/dist/{index-d6f4RJBM.js → index-DJXftyvB.js} +2253 -387
  12. package/dist/index-DJXftyvB.js.map +1 -0
  13. package/dist/index-DMbdcMtK.cjs +18 -0
  14. package/dist/index-DMbdcMtK.cjs.map +1 -0
  15. package/dist/{index-jmTHEbR2.js → index-DeZ1xz_s.js} +2 -2
  16. package/dist/{index-jmTHEbR2.js.map → index-DeZ1xz_s.js.map} +1 -1
  17. package/dist/{indexeddb-storage-D8kOl0oK.js → indexeddb-storage-BFt6hMeF.js} +48 -4
  18. package/dist/indexeddb-storage-BFt6hMeF.js.map +1 -0
  19. package/dist/{indexeddb-storage-a8GipaDr.cjs → indexeddb-storage-BK5tv4Sh.cjs} +2 -2
  20. package/dist/indexeddb-storage-BK5tv4Sh.cjs.map +1 -0
  21. package/dist/{memory-storage-DBQK622V.js → memory-storage-C9HuoL2E.js} +44 -4
  22. package/dist/memory-storage-C9HuoL2E.js.map +1 -0
  23. package/dist/{memory-storage-gfRovk2O.cjs → memory-storage-Dao7jfYG.cjs} +2 -2
  24. package/dist/memory-storage-Dao7jfYG.cjs.map +1 -0
  25. package/dist/{secp256k1-BCAPF45D.cjs → secp256k1-BbKzbLtD.cjs} +2 -2
  26. package/dist/{secp256k1-BCAPF45D.cjs.map → secp256k1-BbKzbLtD.cjs.map} +1 -1
  27. package/dist/{secp256k1-DYm_CMqW.js → secp256k1-CreY7Pcl.js} +2 -2
  28. package/dist/{secp256k1-DYm_CMqW.js.map → secp256k1-CreY7Pcl.js.map} +1 -1
  29. package/docs/api/ai_aggregation.js.html +333 -0
  30. package/docs/api/ai_breakdown.js.html +524 -0
  31. package/docs/api/ai_classifier.js.html +231 -0
  32. package/docs/api/ai_council.js.html +246 -0
  33. package/docs/api/ai_embeddings.js.html +304 -0
  34. package/docs/api/ai_federation-ai.js.html +338 -0
  35. package/docs/api/ai_h3-ai.js.html +970 -0
  36. package/docs/api/ai_index.js.html +124 -0
  37. package/docs/api/ai_json-ops.js.html +241 -0
  38. package/docs/api/ai_llm-service.js.html +239 -0
  39. package/docs/api/ai_nl-query.js.html +236 -0
  40. package/docs/api/ai_relationships.js.html +367 -0
  41. package/docs/api/ai_schema-extractor.js.html +235 -0
  42. package/docs/api/ai_spatial.js.html +307 -0
  43. package/docs/api/ai_tts.js.html +214 -0
  44. package/docs/api/content_social-protocols.js.html +180 -0
  45. package/docs/api/core_holosphere.js.html +757 -0
  46. package/docs/api/crypto_nostr-utils.js.html +306 -0
  47. package/docs/api/crypto_secp256k1.js.html +267 -0
  48. package/docs/api/data/search.json +1 -0
  49. package/docs/api/federation_discovery.js.html +337 -0
  50. package/docs/api/federation_handshake.js.html +478 -0
  51. package/docs/api/federation_hologram.js.html +1053 -0
  52. package/docs/api/federation_registry.js.html +389 -0
  53. package/docs/api/fonts/Inconsolata-Regular.ttf +0 -0
  54. package/docs/api/fonts/OpenSans-Regular.ttf +0 -0
  55. package/docs/api/fonts/WorkSans-Bold.ttf +0 -0
  56. package/docs/api/global.html +3 -0
  57. package/docs/api/hierarchical_upcast.js.html +128 -0
  58. package/docs/api/index.html +265 -0
  59. package/docs/api/index.js.html +1868 -0
  60. package/docs/api/lib_ai-methods.js.html +660 -0
  61. package/docs/api/lib_contract-methods.js.html +445 -0
  62. package/docs/api/lib_errors.js.html +56 -0
  63. package/docs/api/lib_federation-methods.js.html +348 -0
  64. package/docs/api/lib_index.js.html +33 -0
  65. package/docs/api/module-ai.html +5 -0
  66. package/docs/api/module-ai_aggregation-SmartAggregation.html +6 -0
  67. package/docs/api/module-ai_aggregation.SmartAggregation.html +3 -0
  68. package/docs/api/module-ai_aggregation.html +3 -0
  69. package/docs/api/module-ai_breakdown-TaskBreakdown.html +5 -0
  70. package/docs/api/module-ai_breakdown.TaskBreakdown.html +3 -0
  71. package/docs/api/module-ai_breakdown.html +3 -0
  72. package/docs/api/module-ai_classifier-Classifier.html +6 -0
  73. package/docs/api/module-ai_classifier.Classifier.html +3 -0
  74. package/docs/api/module-ai_classifier.html +3 -0
  75. package/docs/api/module-ai_council-Council.html +6 -0
  76. package/docs/api/module-ai_council.Council.html +3 -0
  77. package/docs/api/module-ai_council.html +3 -0
  78. package/docs/api/module-ai_embeddings-Embeddings.html +5 -0
  79. package/docs/api/module-ai_embeddings.Embeddings.html +3 -0
  80. package/docs/api/module-ai_embeddings.html +3 -0
  81. package/docs/api/module-ai_federation-ai-FederationAdvisor.html +6 -0
  82. package/docs/api/module-ai_federation-ai.FederationAdvisor.html +3 -0
  83. package/docs/api/module-ai_federation-ai.html +3 -0
  84. package/docs/api/module-ai_h3-ai-H3AI.html +6 -0
  85. package/docs/api/module-ai_h3-ai.H3AI.html +3 -0
  86. package/docs/api/module-ai_h3-ai.html +3 -0
  87. package/docs/api/module-ai_json-ops-JSONOps.html +5 -0
  88. package/docs/api/module-ai_json-ops.JSONOps.html +3 -0
  89. package/docs/api/module-ai_json-ops.html +3 -0
  90. package/docs/api/module-ai_llm-service-LLMService.html +5 -0
  91. package/docs/api/module-ai_llm-service.LLMService.html +3 -0
  92. package/docs/api/module-ai_llm-service.html +3 -0
  93. package/docs/api/module-ai_nl-query-NLQuery.html +5 -0
  94. package/docs/api/module-ai_nl-query.NLQuery.html +3 -0
  95. package/docs/api/module-ai_nl-query.html +3 -0
  96. package/docs/api/module-ai_relationships-RelationshipDiscovery.html +6 -0
  97. package/docs/api/module-ai_relationships.RelationshipDiscovery.html +3 -0
  98. package/docs/api/module-ai_relationships.html +3 -0
  99. package/docs/api/module-ai_schema-extractor-SchemaExtractor.html +5 -0
  100. package/docs/api/module-ai_schema-extractor.SchemaExtractor.html +3 -0
  101. package/docs/api/module-ai_schema-extractor.html +3 -0
  102. package/docs/api/module-ai_spatial-SpatialAnalysis.html +6 -0
  103. package/docs/api/module-ai_spatial.SpatialAnalysis.html +3 -0
  104. package/docs/api/module-ai_spatial.html +3 -0
  105. package/docs/api/module-ai_tts-TTS.html +5 -0
  106. package/docs/api/module-ai_tts.TTS.html +3 -0
  107. package/docs/api/module-ai_tts.html +3 -0
  108. package/docs/api/module-content_social-protocols.html +3 -0
  109. package/docs/api/module-core_holosphere-HoloSphere.html +6 -0
  110. package/docs/api/module-core_holosphere.HoloSphere.html +3 -0
  111. package/docs/api/module-core_holosphere.html +3 -0
  112. package/docs/api/module-crypto_nostr-utils.html +3 -0
  113. package/docs/api/module-crypto_secp256k1.html +3 -0
  114. package/docs/api/module-federation_hologram.html +3 -0
  115. package/docs/api/module-hierarchical_upcast.html +3 -0
  116. package/docs/api/module-holosphere-HoloSphereBase.html +3 -0
  117. package/docs/api/module-holosphere.html +3 -0
  118. package/docs/api/module-lib_ai-methods.html +3 -0
  119. package/docs/api/module-lib_contract-methods.html +3 -0
  120. package/docs/api/module-lib_errors-AuthorizationError.html +3 -0
  121. package/docs/api/module-lib_errors-ValidationError.html +3 -0
  122. package/docs/api/module-lib_errors.AuthorizationError.html +3 -0
  123. package/docs/api/module-lib_errors.ValidationError.html +3 -0
  124. package/docs/api/module-lib_errors.html +3 -0
  125. package/docs/api/module-lib_federation-methods.html +3 -0
  126. package/docs/api/module-lib_index.html +3 -0
  127. package/docs/api/module-schema_validator-ValidationError.html +3 -0
  128. package/docs/api/module-schema_validator.ValidationError.html +3 -0
  129. package/docs/api/module-schema_validator.html +3 -0
  130. package/docs/api/module-spatial_h3-operations.html +4 -0
  131. package/docs/api/module-storage_backend-factory.BackendFactory.html +3 -0
  132. package/docs/api/module-storage_backend-factory.html +3 -0
  133. package/docs/api/module-storage_backend-interface-StorageBackend.html +3 -0
  134. package/docs/api/module-storage_backend-interface.StorageBackend.html +3 -0
  135. package/docs/api/module-storage_backend-interface.html +3 -0
  136. package/docs/api/module-storage_backends_activitypub-backend-ActivityPubBackend.html +7 -0
  137. package/docs/api/module-storage_backends_activitypub-backend.ActivityPubBackend.html +3 -0
  138. package/docs/api/module-storage_backends_activitypub-backend.html +3 -0
  139. package/docs/api/module-storage_backends_activitypub_server-ActivityPubServer.html +8 -0
  140. package/docs/api/module-storage_backends_activitypub_server.ActivityPubServer.html +3 -0
  141. package/docs/api/module-storage_backends_activitypub_server.html +3 -0
  142. package/docs/api/module-storage_backends_gundb-backend-GunDBBackend.html +7 -0
  143. package/docs/api/module-storage_backends_gundb-backend.GunDBBackend.html +3 -0
  144. package/docs/api/module-storage_backends_gundb-backend.html +3 -0
  145. package/docs/api/module-storage_backends_nostr-backend-NostrBackend.html +8 -0
  146. package/docs/api/module-storage_backends_nostr-backend.NostrBackend.html +3 -0
  147. package/docs/api/module-storage_backends_nostr-backend.html +3 -0
  148. package/docs/api/module-storage_filesystem-storage-FileSystemStorage.html +5 -0
  149. package/docs/api/module-storage_filesystem-storage-browser-FileSystemStorage.html +3 -0
  150. package/docs/api/module-storage_filesystem-storage-browser.FileSystemStorage.html +3 -0
  151. package/docs/api/module-storage_filesystem-storage-browser.html +3 -0
  152. package/docs/api/module-storage_filesystem-storage.FileSystemStorage.html +3 -0
  153. package/docs/api/module-storage_filesystem-storage.html +3 -0
  154. package/docs/api/module-storage_global-tables.html +3 -0
  155. package/docs/api/module-storage_gun-async.html +3 -0
  156. package/docs/api/module-storage_gun-auth-GunAuth.html +5 -0
  157. package/docs/api/module-storage_gun-auth.GunAuth.html +3 -0
  158. package/docs/api/module-storage_gun-auth.html +3 -0
  159. package/docs/api/module-storage_gun-federation.html +3 -0
  160. package/docs/api/module-storage_gun-references-GunReferenceHandler.html +5 -0
  161. package/docs/api/module-storage_gun-references.GunReferenceHandler.html +3 -0
  162. package/docs/api/module-storage_gun-references.html +3 -0
  163. package/docs/api/module-storage_gun-schema-GunSchemaValidator.html +5 -0
  164. package/docs/api/module-storage_gun-schema.GunSchemaValidator.html +3 -0
  165. package/docs/api/module-storage_gun-schema.html +3 -0
  166. package/docs/api/module-storage_gun-wrapper.html +11 -0
  167. package/docs/api/module-storage_indexeddb-storage-IndexedDBStorage.html +5 -0
  168. package/docs/api/module-storage_indexeddb-storage.IndexedDBStorage.html +3 -0
  169. package/docs/api/module-storage_indexeddb-storage.html +3 -0
  170. package/docs/api/module-storage_key-storage-simple.html +3 -0
  171. package/docs/api/module-storage_key-storage.html +4 -0
  172. package/docs/api/module-storage_memory-storage-MemoryStorage.html +5 -0
  173. package/docs/api/module-storage_memory-storage.MemoryStorage.html +3 -0
  174. package/docs/api/module-storage_memory-storage.html +3 -0
  175. package/docs/api/module-storage_migration-MigrationTool.html +6 -0
  176. package/docs/api/module-storage_migration.MigrationTool.html +3 -0
  177. package/docs/api/module-storage_migration.html +3 -0
  178. package/docs/api/module-storage_nostr-async.html +18 -0
  179. package/docs/api/module-storage_nostr-client-LRUCache.html +3 -0
  180. package/docs/api/module-storage_nostr-client-NostrClient.html +7 -0
  181. package/docs/api/module-storage_nostr-client.NostrClient.html +15 -0
  182. package/docs/api/module-storage_nostr-client.html +6 -0
  183. package/docs/api/module-storage_nostr-wrapper.html +3 -0
  184. package/docs/api/module-storage_outbox-queue-OutboxQueue.html +4 -0
  185. package/docs/api/module-storage_outbox-queue.OutboxQueue.html +3 -0
  186. package/docs/api/module-storage_outbox-queue.html +3 -0
  187. package/docs/api/module-storage_persistent-storage-PersistentStorage.html +3 -0
  188. package/docs/api/module-storage_persistent-storage.html +4 -0
  189. package/docs/api/module-storage_sync-service-SyncService.html +5 -0
  190. package/docs/api/module-storage_sync-service.SyncService.html +3 -0
  191. package/docs/api/module-storage_sync-service.html +3 -0
  192. package/docs/api/module-storage_unified-storage.html +3 -0
  193. package/docs/api/module-subscriptions_manager.SubscriptionRegistry.html +3 -0
  194. package/docs/api/module-subscriptions_manager.html +3 -0
  195. package/docs/api/schema_validator.js.html +113 -0
  196. package/docs/api/scripts/core.js +726 -0
  197. package/docs/api/scripts/core.min.js +23 -0
  198. package/docs/api/scripts/resize.js +90 -0
  199. package/docs/api/scripts/search.js +265 -0
  200. package/docs/api/scripts/search.min.js +6 -0
  201. package/docs/api/scripts/third-party/Apache-License-2.0.txt +202 -0
  202. package/docs/api/scripts/third-party/fuse.js +9 -0
  203. package/docs/api/scripts/third-party/hljs-line-num-original.js +369 -0
  204. package/docs/api/scripts/third-party/hljs-line-num.js +1 -0
  205. package/docs/api/scripts/third-party/hljs-original.js +5171 -0
  206. package/docs/api/scripts/third-party/hljs.js +1 -0
  207. package/docs/api/scripts/third-party/popper.js +5 -0
  208. package/docs/api/scripts/third-party/tippy.js +1 -0
  209. package/docs/api/scripts/third-party/tocbot.js +672 -0
  210. package/docs/api/scripts/third-party/tocbot.min.js +1 -0
  211. package/docs/api/spatial_h3-operations.js.html +129 -0
  212. package/docs/api/storage_backend-factory.js.html +133 -0
  213. package/docs/api/storage_backend-interface.js.html +164 -0
  214. package/docs/api/storage_backends_activitypub-backend.js.html +298 -0
  215. package/docs/api/storage_backends_activitypub_server.js.html +678 -0
  216. package/docs/api/storage_backends_gundb-backend.js.html +878 -0
  217. package/docs/api/storage_backends_nostr-backend.js.html +254 -0
  218. package/docs/api/storage_filesystem-storage-browser.js.html +83 -0
  219. package/docs/api/storage_filesystem-storage.js.html +207 -0
  220. package/docs/api/storage_global-tables.js.html +116 -0
  221. package/docs/api/storage_gun-async.js.html +344 -0
  222. package/docs/api/storage_gun-auth.js.html +376 -0
  223. package/docs/api/storage_gun-federation.js.html +788 -0
  224. package/docs/api/storage_gun-references.js.html +212 -0
  225. package/docs/api/storage_gun-schema.js.html +309 -0
  226. package/docs/api/storage_gun-wrapper.js.html +645 -0
  227. package/docs/api/storage_indexeddb-storage.js.html +224 -0
  228. package/docs/api/storage_key-storage-simple.js.html +102 -0
  229. package/docs/api/storage_key-storage.js.html +171 -0
  230. package/docs/api/storage_memory-storage.js.html +128 -0
  231. package/docs/api/storage_migration.js.html +354 -0
  232. package/docs/api/storage_nostr-async.js.html +1076 -0
  233. package/docs/api/storage_nostr-client.js.html +1598 -0
  234. package/docs/api/storage_nostr-wrapper.js.html +218 -0
  235. package/docs/api/storage_outbox-queue.js.html +248 -0
  236. package/docs/api/storage_persistent-storage.js.html +160 -0
  237. package/docs/api/storage_sync-service.js.html +201 -0
  238. package/docs/api/storage_unified-storage.js.html +157 -0
  239. package/docs/api/styles/clean-jsdoc-theme-base.css +1159 -0
  240. package/docs/api/styles/clean-jsdoc-theme-dark.css +412 -0
  241. package/docs/api/styles/clean-jsdoc-theme-light.css +482 -0
  242. package/docs/api/styles/clean-jsdoc-theme-scrollbar.css +30 -0
  243. package/docs/api/styles/clean-jsdoc-theme-without-scrollbar.min.css +1 -0
  244. package/docs/api/styles/clean-jsdoc-theme.min.css +1 -0
  245. package/docs/api/subscriptions_manager.js.html +162 -0
  246. package/examples/holosphere-widget.js +1242 -0
  247. package/examples/widget-demo.html +274 -0
  248. package/examples/widget.html +703 -0
  249. package/jsdoc.json +26 -0
  250. package/package.json +16 -3
  251. package/src/ai/aggregation.js +13 -2
  252. package/src/ai/breakdown.js +12 -2
  253. package/src/ai/classifier.js +14 -3
  254. package/src/ai/council.js +22 -7
  255. package/src/ai/embeddings.js +37 -15
  256. package/src/ai/federation-ai.js +13 -2
  257. package/src/ai/h3-ai.js +14 -2
  258. package/src/ai/index.js +16 -7
  259. package/src/ai/json-ops.js +18 -5
  260. package/src/ai/llm-service.js +62 -31
  261. package/src/ai/nl-query.js +12 -2
  262. package/src/ai/relationships.js +13 -2
  263. package/src/ai/schema-extractor.js +24 -10
  264. package/src/ai/spatial.js +13 -2
  265. package/src/ai/tts.js +25 -8
  266. package/src/cdn-entry.js +22 -0
  267. package/src/content/social-protocols.js +34 -25
  268. package/src/contracts/chain-manager.js +68 -40
  269. package/src/contracts/deployer.js +70 -42
  270. package/src/contracts/event-listener.js +61 -29
  271. package/src/contracts/holon-contracts.js +46 -31
  272. package/src/contracts/index.js +5 -6
  273. package/src/contracts/networks.js +19 -14
  274. package/src/contracts/operations.js +58 -41
  275. package/src/contracts/queries.js +70 -21
  276. package/src/core/holosphere.js +37 -8
  277. package/src/crypto/nostr-utils.js +105 -65
  278. package/src/crypto/secp256k1.js +7 -2
  279. package/src/federation/handshake.js +23 -11
  280. package/src/federation/hologram.js +9 -1
  281. package/src/hierarchical/upcast.js +34 -20
  282. package/src/index.js +671 -7
  283. package/src/lib/ai-methods.js +352 -3
  284. package/src/lib/contract-methods.js +152 -3
  285. package/src/lib/errors.js +31 -1
  286. package/src/lib/federation-methods.js +110 -3
  287. package/src/lib/index.js +9 -5
  288. package/src/schema/validator.js +22 -3
  289. package/src/spatial/h3-operations.js +17 -1
  290. package/src/storage/backend-factory.js +7 -2
  291. package/src/storage/backend-interface.js +21 -2
  292. package/src/storage/backends/activitypub/server.js +25 -3
  293. package/src/storage/backends/activitypub-backend.js +25 -2
  294. package/src/storage/backends/gundb-backend.js +322 -11
  295. package/src/storage/backends/nostr-backend.js +116 -1
  296. package/src/storage/filesystem-storage-browser.js +42 -2
  297. package/src/storage/filesystem-storage.js +72 -5
  298. package/src/storage/global-tables.js +7 -2
  299. package/src/storage/gun-async.js +20 -11
  300. package/src/storage/gun-auth.js +15 -4
  301. package/src/storage/gun-federation.js +14 -5
  302. package/src/storage/gun-references.js +16 -5
  303. package/src/storage/gun-schema.js +25 -10
  304. package/src/storage/gun-wrapper.js +160 -49
  305. package/src/storage/indexeddb-storage.js +65 -4
  306. package/src/storage/key-storage-simple.js +32 -9
  307. package/src/storage/key-storage.js +45 -13
  308. package/src/storage/memory-storage.js +65 -4
  309. package/src/storage/migration.js +20 -7
  310. package/src/storage/nostr-async.js +195 -90
  311. package/src/storage/nostr-client.js +173 -49
  312. package/src/storage/nostr-wrapper.js +6 -2
  313. package/src/storage/outbox-queue.js +55 -18
  314. package/src/storage/persistent-storage.js +56 -13
  315. package/src/storage/sync-service.js +51 -17
  316. package/src/storage/unified-storage.js +38 -3
  317. package/src/subscriptions/manager.js +33 -16
  318. package/vite.config.cdn.js +60 -0
  319. package/dist/index-Bvwyvd0T.cjs +0 -5
  320. package/dist/index-Bvwyvd0T.cjs.map +0 -1
  321. package/dist/index-d6f4RJBM.js.map +0 -1
  322. package/dist/indexeddb-storage-D8kOl0oK.js.map +0 -1
  323. package/dist/indexeddb-storage-a8GipaDr.cjs.map +0 -1
  324. package/dist/memory-storage-DBQK622V.js.map +0 -1
  325. package/dist/memory-storage-gfRovk2O.cjs.map +0 -1
  326. /package/{cleanup-test-data.js → scripts/cleanup-test-data.js} +0 -0
  327. /package/{test-ai-real-api.js → scripts/test-ai-real-api.js} +0 -0
@@ -1,18 +1,52 @@
1
1
  /**
2
- * Nostr Storage Backend
2
+ * @fileoverview Nostr Storage Backend.
3
+ *
3
4
  * Wraps existing nostr-wrapper.js and nostr-client.js as a StorageBackend
5
+ * implementation. Provides Nostr-based distributed storage with relay support.
6
+ *
7
+ * @module storage/backends/nostr-backend
4
8
  */
5
9
 
6
10
  import { StorageBackend } from '../backend-interface.js';
7
11
  import { createClient } from '../nostr-client.js';
8
12
  import * as wrapper from '../nostr-wrapper.js';
9
13
 
14
+ /**
15
+ * Nostr storage backend implementation.
16
+ *
17
+ * Provides distributed storage using Nostr relays with event-based data storage.
18
+ *
19
+ * @class NostrBackend
20
+ * @extends StorageBackend
21
+ * @example
22
+ * const backend = new NostrBackend({
23
+ * relays: ['wss://relay.example.com'],
24
+ * appName: 'myapp',
25
+ * persistence: true
26
+ * });
27
+ * await backend.init();
28
+ */
10
29
  export class NostrBackend extends StorageBackend {
30
+ /**
31
+ * Create a new NostrBackend.
32
+ *
33
+ * @param {Object} config - Backend configuration
34
+ * @param {string[]} [config.relays] - Relay URLs
35
+ * @param {string} [config.privateKey] - Private key for signing
36
+ * @param {string} [config.appName] - Application name
37
+ * @param {boolean} [config.persistence=true] - Enable persistent storage
38
+ * @param {boolean} [config.backgroundSync] - Enable background sync
39
+ */
11
40
  constructor(config) {
12
41
  super(config);
13
42
  this.client = null;
14
43
  }
15
44
 
45
+ /**
46
+ * Initialize the backend.
47
+ *
48
+ * @returns {Promise<void>}
49
+ */
16
50
  async init() {
17
51
  this.client = createClient({
18
52
  relays: this.config.relays || ['wss://relay.holons.io'],
@@ -32,38 +66,102 @@ export class NostrBackend extends StorageBackend {
32
66
  this.publicKey = this.client.publicKey;
33
67
  }
34
68
 
69
+ /**
70
+ * Build path from components.
71
+ *
72
+ * @param {string} appName - Application name
73
+ * @param {string} holonId - Holon ID
74
+ * @param {string} lensName - Lens name
75
+ * @param {string} [key=null] - Optional key
76
+ * @returns {string} Built path
77
+ */
35
78
  buildPath(appName, holonId, lensName, key = null) {
36
79
  return wrapper.buildPath(appName, holonId, lensName, key);
37
80
  }
38
81
 
82
+ /**
83
+ * Write data to path.
84
+ *
85
+ * @param {string} path - Storage path
86
+ * @param {Object} data - Data to write
87
+ * @param {Object} [options={}] - Write options
88
+ * @returns {Promise<Object>} Write result
89
+ */
39
90
  async write(path, data, options = {}) {
40
91
  return wrapper.write(this.client, path, data);
41
92
  }
42
93
 
94
+ /**
95
+ * Read data from path.
96
+ *
97
+ * @param {string} path - Storage path
98
+ * @param {Object} [options={}] - Read options
99
+ * @returns {Promise<Object|null>} Data or null
100
+ */
43
101
  async read(path, options = {}) {
44
102
  return wrapper.read(this.client, path, options);
45
103
  }
46
104
 
105
+ /**
106
+ * Read all data under path.
107
+ *
108
+ * @param {string} path - Storage path prefix
109
+ * @param {Object} [options={}] - Read options
110
+ * @returns {Promise<Object[]>} Array of data objects
111
+ */
47
112
  async readAll(path, options = {}) {
48
113
  return wrapper.readAll(this.client, path, options);
49
114
  }
50
115
 
116
+ /**
117
+ * Update data at path.
118
+ *
119
+ * @param {string} path - Storage path
120
+ * @param {Object} updates - Fields to update
121
+ * @returns {Promise<Object>} Update result
122
+ */
51
123
  async update(path, updates) {
52
124
  return wrapper.update(this.client, path, updates);
53
125
  }
54
126
 
127
+ /**
128
+ * Delete data at path.
129
+ *
130
+ * @param {string} path - Storage path
131
+ * @returns {Promise<boolean>} Success indicator
132
+ */
55
133
  async delete(path) {
56
134
  return wrapper.deleteData(this.client, path);
57
135
  }
58
136
 
137
+ /**
138
+ * Delete all data under path.
139
+ *
140
+ * @param {string} path - Storage path prefix
141
+ * @returns {Promise<Object>} Deletion results
142
+ */
59
143
  async deleteAll(path) {
60
144
  return wrapper.deleteAll(this.client, path);
61
145
  }
62
146
 
147
+ /**
148
+ * Subscribe to changes at path.
149
+ *
150
+ * @param {string} path - Storage path
151
+ * @param {Function} callback - Callback function
152
+ * @param {Object} [options={}] - Subscribe options
153
+ * @returns {Promise<Object>} Subscription object with unsubscribe method
154
+ */
63
155
  async subscribe(path, callback, options = {}) {
64
156
  return wrapper.subscribe(this.client, path, callback, options);
65
157
  }
66
158
 
159
+ /**
160
+ * Export all data for this user.
161
+ *
162
+ * @param {string} [pathPrefix=''] - Optional path prefix filter
163
+ * @returns {Promise<Object[]>} Array of exported records
164
+ */
67
165
  async exportData(pathPrefix = '') {
68
166
  // Wait for client to be ready
69
167
  await this.client._initReady;
@@ -101,6 +199,13 @@ export class NostrBackend extends StorageBackend {
101
199
  .filter(record => !record.data._deleted); // Filter out deleted items
102
200
  }
103
201
 
202
+ /**
203
+ * Import data records.
204
+ *
205
+ * @param {Object[]} records - Array of records to import
206
+ * @param {Object} [options={}] - Import options
207
+ * @returns {Promise<Object>} Import results with success/failed counts
208
+ */
104
209
  async importData(records, options = {}) {
105
210
  const results = { success: 0, failed: 0, errors: [] };
106
211
 
@@ -117,12 +222,22 @@ export class NostrBackend extends StorageBackend {
117
222
  return results;
118
223
  }
119
224
 
225
+ /**
226
+ * Close the backend and cleanup resources.
227
+ *
228
+ * @returns {void}
229
+ */
120
230
  close() {
121
231
  if (this.client) {
122
232
  this.client.close();
123
233
  }
124
234
  }
125
235
 
236
+ /**
237
+ * Get backend status.
238
+ *
239
+ * @returns {Object} Status object with type, publicKey, relays, connected
240
+ */
126
241
  getStatus() {
127
242
  return {
128
243
  type: 'nostr',
@@ -1,40 +1,80 @@
1
1
  /**
2
- * Browser stub for FileSystemStorage
3
- * Throws an error if used in browser environment
2
+ * @fileoverview Browser stub for FileSystemStorage.
3
+ *
4
+ * This stub throws errors if FileSystemStorage is used in browser environments.
5
+ * Browsers should use IndexedDBStorage or MemoryStorage instead.
6
+ *
7
+ * @module storage/filesystem-storage-browser
4
8
  */
5
9
 
6
10
  import { PersistentStorage } from './persistent-storage.js';
7
11
 
12
+ /**
13
+ * Browser stub for FileSystemStorage.
14
+ *
15
+ * All methods throw errors indicating filesystem storage is unavailable in browsers.
16
+ *
17
+ * @class FileSystemStorage
18
+ * @extends PersistentStorage
19
+ * @throws {Error} Always throws - not available in browser environments
20
+ */
8
21
  export class FileSystemStorage extends PersistentStorage {
22
+ /**
23
+ * Constructor throws error in browser.
24
+ *
25
+ * @param {string} [baseDir=null] - Ignored in browser
26
+ * @throws {Error} Always throws - not available in browser
27
+ */
9
28
  constructor(baseDir = null) {
10
29
  super();
11
30
  throw new Error('FileSystemStorage is not available in browser environments. Use IndexedDBStorage or MemoryStorage instead.');
12
31
  }
13
32
 
33
+ /**
34
+ * @throws {Error} Always throws - not available in browser
35
+ */
14
36
  async init(namespace) {
15
37
  throw new Error('FileSystemStorage is not available in browser environments');
16
38
  }
17
39
 
40
+ /**
41
+ * @throws {Error} Always throws - not available in browser
42
+ */
18
43
  async put(key, event) {
19
44
  throw new Error('FileSystemStorage is not available in browser environments');
20
45
  }
21
46
 
47
+ /**
48
+ * @throws {Error} Always throws - not available in browser
49
+ */
22
50
  async get(key) {
23
51
  throw new Error('FileSystemStorage is not available in browser environments');
24
52
  }
25
53
 
54
+ /**
55
+ * @throws {Error} Always throws - not available in browser
56
+ */
26
57
  async getAll(prefix) {
27
58
  throw new Error('FileSystemStorage is not available in browser environments');
28
59
  }
29
60
 
61
+ /**
62
+ * @throws {Error} Always throws - not available in browser
63
+ */
30
64
  async delete(key) {
31
65
  throw new Error('FileSystemStorage is not available in browser environments');
32
66
  }
33
67
 
68
+ /**
69
+ * @throws {Error} Always throws - not available in browser
70
+ */
34
71
  async clear() {
35
72
  throw new Error('FileSystemStorage is not available in browser environments');
36
73
  }
37
74
 
75
+ /**
76
+ * @throws {Error} Always throws - not available in browser
77
+ */
38
78
  async close() {
39
79
  throw new Error('FileSystemStorage is not available in browser environments');
40
80
  }
@@ -1,7 +1,10 @@
1
1
  /**
2
- * File system storage adapter for Node.js
3
- * Stores events as JSON files in a directory structure
4
- * This module is only loaded in Node.js environments
2
+ * @fileoverview File system storage adapter for Node.js.
3
+ *
4
+ * Stores events as JSON files in a directory structure.
5
+ * This module is only loaded in Node.js environments.
6
+ *
7
+ * @module storage/filesystem-storage
5
8
  */
6
9
 
7
10
  // Guard against browser environments
@@ -14,7 +17,24 @@ import { promises as fs } from 'fs';
14
17
  import path from 'path';
15
18
  import os from 'os';
16
19
 
20
+ /**
21
+ * File system storage adapter for Node.js.
22
+ *
23
+ * Stores events as JSON files in a directory structure for persistent storage.
24
+ *
25
+ * @class FileSystemStorage
26
+ * @extends PersistentStorage
27
+ * @example
28
+ * const storage = new FileSystemStorage('/custom/path');
29
+ * await storage.init('myapp');
30
+ * await storage.put('key1', { id: 'event1', data: 'test' });
31
+ */
17
32
  export class FileSystemStorage extends PersistentStorage {
33
+ /**
34
+ * Create a new FileSystemStorage instance.
35
+ *
36
+ * @param {string} [baseDir=null] - Base directory for storage (defaults to ~/.holosphere)
37
+ */
18
38
  constructor(baseDir = null) {
19
39
  super();
20
40
  this.baseDir = baseDir || path.join(os.homedir(), '.holosphere');
@@ -22,6 +42,12 @@ export class FileSystemStorage extends PersistentStorage {
22
42
  this.storageDir = null;
23
43
  }
24
44
 
45
+ /**
46
+ * Initialize storage with namespace.
47
+ *
48
+ * @param {string} namespace - Storage namespace (app name)
49
+ * @returns {Promise<void>}
50
+ */
25
51
  async init(namespace) {
26
52
  this.namespace = namespace;
27
53
  this.storageDir = path.join(this.baseDir, namespace);
@@ -37,8 +63,11 @@ export class FileSystemStorage extends PersistentStorage {
37
63
  }
38
64
 
39
65
  /**
40
- * Convert key to safe filename
66
+ * Convert key to safe filename.
67
+ *
41
68
  * @private
69
+ * @param {string} key - Storage key
70
+ * @returns {string} Safe filename
42
71
  */
43
72
  _keyToFilename(key) {
44
73
  // Replace unsafe characters
@@ -46,19 +75,35 @@ export class FileSystemStorage extends PersistentStorage {
46
75
  }
47
76
 
48
77
  /**
49
- * Get full file path for key
78
+ * Get full file path for key.
79
+ *
50
80
  * @private
81
+ * @param {string} key - Storage key
82
+ * @returns {string} Full file path
51
83
  */
52
84
  _getFilePath(key) {
53
85
  return path.join(this.storageDir, this._keyToFilename(key));
54
86
  }
55
87
 
88
+ /**
89
+ * Store an event.
90
+ *
91
+ * @param {string} key - Storage key
92
+ * @param {Object} event - Event data to store
93
+ * @returns {Promise<void>}
94
+ */
56
95
  async put(key, event) {
57
96
  const filePath = this._getFilePath(key);
58
97
  const data = JSON.stringify(event, null, 2);
59
98
  await fs.writeFile(filePath, data, 'utf8');
60
99
  }
61
100
 
101
+ /**
102
+ * Retrieve an event.
103
+ *
104
+ * @param {string} key - Storage key
105
+ * @returns {Promise<Object|null>} Event data or null if not found
106
+ */
62
107
  async get(key) {
63
108
  const filePath = this._getFilePath(key);
64
109
  try {
@@ -72,6 +117,12 @@ export class FileSystemStorage extends PersistentStorage {
72
117
  }
73
118
  }
74
119
 
120
+ /**
121
+ * Retrieve all events matching a prefix.
122
+ *
123
+ * @param {string} prefix - Key prefix to match
124
+ * @returns {Promise<Object[]>} Array of matching events
125
+ */
75
126
  async getAll(prefix) {
76
127
  const results = [];
77
128
 
@@ -108,6 +159,12 @@ export class FileSystemStorage extends PersistentStorage {
108
159
  return results;
109
160
  }
110
161
 
162
+ /**
163
+ * Delete an event.
164
+ *
165
+ * @param {string} key - Storage key
166
+ * @returns {Promise<void>}
167
+ */
111
168
  async delete(key) {
112
169
  const filePath = this._getFilePath(key);
113
170
  try {
@@ -119,6 +176,11 @@ export class FileSystemStorage extends PersistentStorage {
119
176
  }
120
177
  }
121
178
 
179
+ /**
180
+ * Clear all stored events.
181
+ *
182
+ * @returns {Promise<void>}
183
+ */
122
184
  async clear() {
123
185
  try {
124
186
  const files = await fs.readdir(this.storageDir);
@@ -132,6 +194,11 @@ export class FileSystemStorage extends PersistentStorage {
132
194
  }
133
195
  }
134
196
 
197
+ /**
198
+ * Close storage (no-op for filesystem).
199
+ *
200
+ * @returns {Promise<void>}
201
+ */
135
202
  async close() {
136
203
  // Nothing to close for file system storage
137
204
  }
@@ -1,6 +1,11 @@
1
1
  /**
2
- * Global Data Operations
3
- * Non-location-specific storage (FR-044, FR-045)
2
+ * @fileoverview Global Data Operations.
3
+ *
4
+ * Provides non-location-specific (non-holon) data storage operations.
5
+ * Used for storing application-wide data like federation configs, schemas,
6
+ * and user preferences that aren't tied to specific H3 cells.
7
+ *
8
+ * @module storage/global-tables
4
9
  */
5
10
 
6
11
  import { write, read, readAll, update, deleteData, deleteAll, subscribe } from './unified-storage.js';
@@ -1,13 +1,18 @@
1
1
  /**
2
- * Gun Async Utilities
3
- * Provides Promise-based wrappers and async patterns for Gun operations
2
+ * @fileoverview Gun Async Utilities.
3
+ *
4
+ * Provides Promise-based wrappers and async patterns for Gun operations.
5
+ * Includes utilities for promises, batch operations, retries, streams, and async iteration.
6
+ *
7
+ * @module storage/gun-async
4
8
  */
5
9
 
6
10
  /**
7
- * Get data from Gun using native .then() support
11
+ * Get data from Gun using native .then() support.
12
+ *
8
13
  * @param {Object} gunChain - Gun chain reference
9
- * @param {number} timeout - Timeout in ms (default 1000ms)
10
- * @returns {Promise<any>} Promise resolving to data
14
+ * @param {number} [timeout=1000] - Timeout in ms
15
+ * @returns {Promise<any>} Promise resolving to data or null on timeout
11
16
  */
12
17
  export function gunPromise(gunChain, timeout = 1000) {
13
18
  return new Promise((resolve, reject) => {
@@ -31,11 +36,13 @@ export function gunPromise(gunChain, timeout = 1000) {
31
36
  }
32
37
 
33
38
  /**
34
- * Wait for Gun write acknowledgement
39
+ * Wait for Gun write acknowledgement.
40
+ *
35
41
  * @param {Object} gunChain - Gun chain reference
36
42
  * @param {any} data - Data to write
37
- * @param {number} timeout - Timeout in ms (default 1000ms)
38
- * @returns {Promise<Object>} Promise resolving to ack object
43
+ * @param {number} [timeout=1000] - Timeout in ms
44
+ * @returns {Promise<Object>} Promise resolving to ack object { ok, timeout? }
45
+ * @throws {Error} If write fails with error
39
46
  */
40
47
  export function gunPut(gunChain, data, timeout = 1000) {
41
48
  return new Promise((resolve, reject) => {
@@ -63,10 +70,12 @@ export function gunPut(gunChain, data, timeout = 1000) {
63
70
  }
64
71
 
65
72
  /**
66
- * Get all items from a Gun map
67
- * First gets count of items, then collects until count is reached
73
+ * Get all items from a Gun map.
74
+ *
75
+ * First gets count of items, then collects until count is reached.
76
+ *
68
77
  * @param {Object} gunChain - Gun chain reference
69
- * @param {number} timeout - Timeout in ms (fallback, default 5000ms)
78
+ * @param {number} [timeout=5000] - Timeout in ms (fallback)
70
79
  * @returns {Promise<Object>} Promise resolving to map of items
71
80
  */
72
81
  export async function gunMap(gunChain, timeout = 5000) {
@@ -1,19 +1,30 @@
1
1
  /**
2
- * GunDB Authentication Handler
3
- * Handles user authentication and private data storage using Gun's user system
2
+ * @fileoverview GunDB Authentication Handler.
4
3
  *
4
+ * Handles user authentication and private data storage using Gun's user system.
5
5
  * Private data is stored under: user.get('private').get(lens).get(key)
6
6
  * Usernames are namespaced: ${appname}:${holonId}
7
+ *
8
+ * @module storage/gun-auth
7
9
  */
8
10
 
9
11
  import { gunPromise, gunPut } from './gun-async.js';
10
12
 
11
13
  /**
12
- * Authentication handler for GunDB backend
14
+ * Authentication handler for GunDB backend.
15
+ *
16
+ * Manages user creation, authentication, and private data access.
17
+ *
18
+ * @class GunAuth
19
+ * @example
20
+ * const auth = new GunAuth(gun, 'myapp');
21
+ * await auth.createUser('holon123', 'password');
22
+ * await auth.authenticate('holon123', 'password');
13
23
  */
14
24
  export class GunAuth {
15
25
  /**
16
- * Create a new authentication handler
26
+ * Create a new authentication handler.
27
+ *
17
28
  * @param {Object} gun - Gun instance
18
29
  * @param {string} appname - Application namespace
19
30
  */
@@ -1,19 +1,28 @@
1
1
  /**
2
- * GunDB Federation Module
3
- * Provides methods for creating, managing, and using federated spaces
2
+ * @fileoverview GunDB Federation Module.
4
3
  *
5
- * Ported from holosphere/federation.js to work with the GunDBBackend
4
+ * Provides methods for creating, managing, and using federated spaces.
5
+ * Supports data propagation with references for lightweight federation,
6
+ * aggregation across federated sources, and subscription to federated changes.
7
+ *
8
+ * Ported from holosphere/federation.js to work with the GunDBBackend.
9
+ *
10
+ * @module storage/gun-federation
6
11
  */
7
12
 
8
13
  /**
9
- * Creates a federation relationship between two spaces
14
+ * Creates a federation relationship between two spaces.
15
+ *
10
16
  * Federation is bidirectional by default, and data propagation uses soul references by default.
11
17
  *
12
18
  * @param {Object} backend - The GunDBBackend instance
13
19
  * @param {string} spaceId1 - The first space ID
14
20
  * @param {string} spaceId2 - The second space ID
15
- * @param {boolean} bidirectional - Whether to set up bidirectional notifications (default: true)
21
+ * @param {boolean} [bidirectional=true] - Whether to set up bidirectional notifications
16
22
  * @returns {Promise<boolean>} True if federation was created successfully
23
+ * @throws {Error} If space IDs are missing or identical
24
+ * @example
25
+ * await federate(backend, 'space1', 'space2');
17
26
  */
18
27
  export async function federate(backend, spaceId1, spaceId2, bidirectional = true) {
19
28
  if (!spaceId1 || !spaceId2) {
@@ -1,19 +1,30 @@
1
1
  /**
2
- * GunDB Reference Handler
3
- * Handles creation and resolution of data references for federation
2
+ * @fileoverview GunDB Reference Handler.
4
3
  *
4
+ * Handles creation and resolution of data references for federation.
5
5
  * References use a "soul" pattern: appname/holon/lens/key
6
- * This allows lightweight propagation without data duplication
6
+ * This allows lightweight propagation without data duplication.
7
+ *
8
+ * @module storage/gun-references
7
9
  */
8
10
 
9
11
  import { read } from './gun-wrapper.js';
10
12
 
11
13
  /**
12
- * Reference handler for GunDB backend
14
+ * Reference handler for GunDB backend.
15
+ *
16
+ * Manages creation, detection, and resolution of data references.
17
+ *
18
+ * @class GunReferenceHandler
19
+ * @example
20
+ * const handler = new GunReferenceHandler('myapp');
21
+ * const ref = handler.createReference('holon1', 'items', { id: '123', name: 'Test' });
22
+ * const resolved = await handler.resolveReference(gun, ref);
13
23
  */
14
24
  export class GunReferenceHandler {
15
25
  /**
16
- * Create a new reference handler
26
+ * Create a new reference handler.
27
+ *
17
28
  * @param {string} appname - Application namespace
18
29
  */
19
30
  constructor(appname) {
@@ -1,14 +1,20 @@
1
1
  /**
2
- * GunDB Schema Validator
3
- * Handles JSON Schema validation for data stored in GunDB
2
+ * @fileoverview GunDB Schema Validator.
4
3
  *
5
- * Schemas are stored in the global 'schemas' table
6
- * Validation uses AJV (Another JSON Schema Validator) with JSON Schema 2019
4
+ * Handles JSON Schema validation for data stored in GunDB.
5
+ * Schemas are stored in the global 'schemas' table.
6
+ * Validation uses AJV (Another JSON Schema Validator) with JSON Schema 2019.
7
+ *
8
+ * @module storage/gun-schema
7
9
  */
8
10
 
9
11
  import { writeGlobal, readGlobal, readAllGlobal, deleteGlobal } from './gun-wrapper.js';
10
12
 
11
- // Default meta-schema for validating schema definitions
13
+ /**
14
+ * Default meta-schema for validating schema definitions.
15
+ * @private
16
+ * @constant {Object}
17
+ */
12
18
  const META_SCHEMA = {
13
19
  type: 'object',
14
20
  required: ['type'],
@@ -23,14 +29,23 @@ const META_SCHEMA = {
23
29
  };
24
30
 
25
31
  /**
26
- * Schema validator for GunDB backend
32
+ * Schema validator for GunDB backend.
33
+ *
34
+ * Provides JSON Schema validation with caching and lazy-loaded AJV.
35
+ *
36
+ * @class GunSchemaValidator
37
+ * @example
38
+ * const validator = new GunSchemaValidator({ strict: true });
39
+ * await validator.init();
40
+ * await validator.setSchema(gun, 'myapp', 'user', { type: 'object', properties: { name: { type: 'string' } } });
27
41
  */
28
42
  export class GunSchemaValidator {
29
43
  /**
30
- * Create a new schema validator
31
- * @param {Object} options - Validator options
32
- * @param {boolean} options.strict - Whether to enforce strict validation (default: false)
33
- * @param {number} options.cacheMaxAge - Schema cache TTL in ms (default: 3600000 = 1 hour)
44
+ * Create a new schema validator.
45
+ *
46
+ * @param {Object} [options={}] - Validator options
47
+ * @param {boolean} [options.strict=false] - Whether to enforce strict validation
48
+ * @param {number} [options.cacheMaxAge=3600000] - Schema cache TTL in ms (1 hour)
34
49
  */
35
50
  constructor(options = {}) {
36
51
  this.strict = options.strict || false;