holosphere 2.0.0-alpha1 → 2.0.0-alpha10

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 (418) hide show
  1. package/CHANGELOG.md +473 -0
  2. package/FEATURES.md +431 -0
  3. package/LICENSE +29 -166
  4. package/LICENSE-AGPL.md +180 -0
  5. package/README.md +97 -16
  6. package/dist/2019-D2OG2idw.js +6680 -0
  7. package/dist/2019-D2OG2idw.js.map +1 -0
  8. package/dist/2019-EION3wKo.cjs +8 -0
  9. package/dist/2019-EION3wKo.cjs.map +1 -0
  10. package/dist/_commonjsHelpers-C37NGDzP.cjs +2 -0
  11. package/dist/_commonjsHelpers-C37NGDzP.cjs.map +1 -0
  12. package/dist/_commonjsHelpers-CUmg6egw.js +7 -0
  13. package/dist/_commonjsHelpers-CUmg6egw.js.map +1 -0
  14. package/dist/browser-BSniCNqO.js +3058 -0
  15. package/dist/browser-BSniCNqO.js.map +1 -0
  16. package/dist/browser-Cq59Ij19.cjs +2 -0
  17. package/dist/browser-Cq59Ij19.cjs.map +1 -0
  18. package/dist/cdn/holosphere.min.js +55 -0
  19. package/dist/cdn/holosphere.min.js.map +1 -0
  20. package/dist/cjs/holosphere.cjs +2 -0
  21. package/dist/cjs/holosphere.cjs.map +1 -0
  22. package/dist/esm/holosphere.js +53 -0
  23. package/dist/esm/holosphere.js.map +1 -0
  24. package/dist/index-DDGt_V9o.cjs +12 -0
  25. package/dist/index-DDGt_V9o.cjs.map +1 -0
  26. package/dist/index-DJXftyvB.js +39841 -0
  27. package/dist/index-DJXftyvB.js.map +1 -0
  28. package/dist/index-DMbdcMtK.cjs +18 -0
  29. package/dist/index-DMbdcMtK.cjs.map +1 -0
  30. package/dist/index-DeZ1xz_s.js +15104 -0
  31. package/dist/index-DeZ1xz_s.js.map +1 -0
  32. package/dist/indexeddb-storage-BFt6hMeF.js +176 -0
  33. package/dist/indexeddb-storage-BFt6hMeF.js.map +1 -0
  34. package/dist/indexeddb-storage-BK5tv4Sh.cjs +2 -0
  35. package/dist/indexeddb-storage-BK5tv4Sh.cjs.map +1 -0
  36. package/dist/memory-storage-C9HuoL2E.js +91 -0
  37. package/dist/memory-storage-C9HuoL2E.js.map +1 -0
  38. package/dist/memory-storage-Dao7jfYG.cjs +2 -0
  39. package/dist/memory-storage-Dao7jfYG.cjs.map +1 -0
  40. package/dist/secp256k1-BbKzbLtD.cjs +12 -0
  41. package/dist/secp256k1-BbKzbLtD.cjs.map +1 -0
  42. package/dist/secp256k1-CreY7Pcl.js +1890 -0
  43. package/dist/secp256k1-CreY7Pcl.js.map +1 -0
  44. package/docs/CONTRACTS.md +797 -0
  45. package/docs/FOSDEM_PROPOSAL.md +388 -0
  46. package/docs/LOCALFIRST.md +266 -0
  47. package/docs/api/ai_aggregation.js.html +333 -0
  48. package/docs/api/ai_breakdown.js.html +524 -0
  49. package/docs/api/ai_classifier.js.html +231 -0
  50. package/docs/api/ai_council.js.html +246 -0
  51. package/docs/api/ai_embeddings.js.html +304 -0
  52. package/docs/api/ai_federation-ai.js.html +338 -0
  53. package/docs/api/ai_h3-ai.js.html +970 -0
  54. package/docs/api/ai_index.js.html +124 -0
  55. package/docs/api/ai_json-ops.js.html +241 -0
  56. package/docs/api/ai_llm-service.js.html +239 -0
  57. package/docs/api/ai_nl-query.js.html +236 -0
  58. package/docs/api/ai_relationships.js.html +367 -0
  59. package/docs/api/ai_schema-extractor.js.html +235 -0
  60. package/docs/api/ai_spatial.js.html +307 -0
  61. package/docs/api/ai_tts.js.html +214 -0
  62. package/docs/api/content_social-protocols.js.html +180 -0
  63. package/docs/api/core_holosphere.js.html +757 -0
  64. package/docs/api/crypto_nostr-utils.js.html +306 -0
  65. package/docs/api/crypto_secp256k1.js.html +267 -0
  66. package/docs/api/data/search.json +1 -0
  67. package/docs/api/federation_discovery.js.html +337 -0
  68. package/docs/api/federation_handshake.js.html +478 -0
  69. package/docs/api/federation_hologram.js.html +1053 -0
  70. package/docs/api/federation_registry.js.html +389 -0
  71. package/docs/api/fonts/Inconsolata-Regular.ttf +0 -0
  72. package/docs/api/fonts/OpenSans-Regular.ttf +0 -0
  73. package/docs/api/fonts/WorkSans-Bold.ttf +0 -0
  74. package/docs/api/global.html +3 -0
  75. package/docs/api/hierarchical_upcast.js.html +128 -0
  76. package/docs/api/index.html +265 -0
  77. package/docs/api/index.js.html +1868 -0
  78. package/docs/api/lib_ai-methods.js.html +660 -0
  79. package/docs/api/lib_contract-methods.js.html +445 -0
  80. package/docs/api/lib_errors.js.html +56 -0
  81. package/docs/api/lib_federation-methods.js.html +348 -0
  82. package/docs/api/lib_index.js.html +33 -0
  83. package/docs/api/module-ai.html +5 -0
  84. package/docs/api/module-ai_aggregation-SmartAggregation.html +6 -0
  85. package/docs/api/module-ai_aggregation.SmartAggregation.html +3 -0
  86. package/docs/api/module-ai_aggregation.html +3 -0
  87. package/docs/api/module-ai_breakdown-TaskBreakdown.html +5 -0
  88. package/docs/api/module-ai_breakdown.TaskBreakdown.html +3 -0
  89. package/docs/api/module-ai_breakdown.html +3 -0
  90. package/docs/api/module-ai_classifier-Classifier.html +6 -0
  91. package/docs/api/module-ai_classifier.Classifier.html +3 -0
  92. package/docs/api/module-ai_classifier.html +3 -0
  93. package/docs/api/module-ai_council-Council.html +6 -0
  94. package/docs/api/module-ai_council.Council.html +3 -0
  95. package/docs/api/module-ai_council.html +3 -0
  96. package/docs/api/module-ai_embeddings-Embeddings.html +5 -0
  97. package/docs/api/module-ai_embeddings.Embeddings.html +3 -0
  98. package/docs/api/module-ai_embeddings.html +3 -0
  99. package/docs/api/module-ai_federation-ai-FederationAdvisor.html +6 -0
  100. package/docs/api/module-ai_federation-ai.FederationAdvisor.html +3 -0
  101. package/docs/api/module-ai_federation-ai.html +3 -0
  102. package/docs/api/module-ai_h3-ai-H3AI.html +6 -0
  103. package/docs/api/module-ai_h3-ai.H3AI.html +3 -0
  104. package/docs/api/module-ai_h3-ai.html +3 -0
  105. package/docs/api/module-ai_json-ops-JSONOps.html +5 -0
  106. package/docs/api/module-ai_json-ops.JSONOps.html +3 -0
  107. package/docs/api/module-ai_json-ops.html +3 -0
  108. package/docs/api/module-ai_llm-service-LLMService.html +5 -0
  109. package/docs/api/module-ai_llm-service.LLMService.html +3 -0
  110. package/docs/api/module-ai_llm-service.html +3 -0
  111. package/docs/api/module-ai_nl-query-NLQuery.html +5 -0
  112. package/docs/api/module-ai_nl-query.NLQuery.html +3 -0
  113. package/docs/api/module-ai_nl-query.html +3 -0
  114. package/docs/api/module-ai_relationships-RelationshipDiscovery.html +6 -0
  115. package/docs/api/module-ai_relationships.RelationshipDiscovery.html +3 -0
  116. package/docs/api/module-ai_relationships.html +3 -0
  117. package/docs/api/module-ai_schema-extractor-SchemaExtractor.html +5 -0
  118. package/docs/api/module-ai_schema-extractor.SchemaExtractor.html +3 -0
  119. package/docs/api/module-ai_schema-extractor.html +3 -0
  120. package/docs/api/module-ai_spatial-SpatialAnalysis.html +6 -0
  121. package/docs/api/module-ai_spatial.SpatialAnalysis.html +3 -0
  122. package/docs/api/module-ai_spatial.html +3 -0
  123. package/docs/api/module-ai_tts-TTS.html +5 -0
  124. package/docs/api/module-ai_tts.TTS.html +3 -0
  125. package/docs/api/module-ai_tts.html +3 -0
  126. package/docs/api/module-content_social-protocols.html +3 -0
  127. package/docs/api/module-core_holosphere-HoloSphere.html +6 -0
  128. package/docs/api/module-core_holosphere.HoloSphere.html +3 -0
  129. package/docs/api/module-core_holosphere.html +3 -0
  130. package/docs/api/module-crypto_nostr-utils.html +3 -0
  131. package/docs/api/module-crypto_secp256k1.html +3 -0
  132. package/docs/api/module-federation_hologram.html +3 -0
  133. package/docs/api/module-hierarchical_upcast.html +3 -0
  134. package/docs/api/module-holosphere-HoloSphereBase.html +3 -0
  135. package/docs/api/module-holosphere.html +3 -0
  136. package/docs/api/module-lib_ai-methods.html +3 -0
  137. package/docs/api/module-lib_contract-methods.html +3 -0
  138. package/docs/api/module-lib_errors-AuthorizationError.html +3 -0
  139. package/docs/api/module-lib_errors-ValidationError.html +3 -0
  140. package/docs/api/module-lib_errors.AuthorizationError.html +3 -0
  141. package/docs/api/module-lib_errors.ValidationError.html +3 -0
  142. package/docs/api/module-lib_errors.html +3 -0
  143. package/docs/api/module-lib_federation-methods.html +3 -0
  144. package/docs/api/module-lib_index.html +3 -0
  145. package/docs/api/module-schema_validator-ValidationError.html +3 -0
  146. package/docs/api/module-schema_validator.ValidationError.html +3 -0
  147. package/docs/api/module-schema_validator.html +3 -0
  148. package/docs/api/module-spatial_h3-operations.html +4 -0
  149. package/docs/api/module-storage_backend-factory.BackendFactory.html +3 -0
  150. package/docs/api/module-storage_backend-factory.html +3 -0
  151. package/docs/api/module-storage_backend-interface-StorageBackend.html +3 -0
  152. package/docs/api/module-storage_backend-interface.StorageBackend.html +3 -0
  153. package/docs/api/module-storage_backend-interface.html +3 -0
  154. package/docs/api/module-storage_backends_activitypub-backend-ActivityPubBackend.html +7 -0
  155. package/docs/api/module-storage_backends_activitypub-backend.ActivityPubBackend.html +3 -0
  156. package/docs/api/module-storage_backends_activitypub-backend.html +3 -0
  157. package/docs/api/module-storage_backends_activitypub_server-ActivityPubServer.html +8 -0
  158. package/docs/api/module-storage_backends_activitypub_server.ActivityPubServer.html +3 -0
  159. package/docs/api/module-storage_backends_activitypub_server.html +3 -0
  160. package/docs/api/module-storage_backends_gundb-backend-GunDBBackend.html +7 -0
  161. package/docs/api/module-storage_backends_gundb-backend.GunDBBackend.html +3 -0
  162. package/docs/api/module-storage_backends_gundb-backend.html +3 -0
  163. package/docs/api/module-storage_backends_nostr-backend-NostrBackend.html +8 -0
  164. package/docs/api/module-storage_backends_nostr-backend.NostrBackend.html +3 -0
  165. package/docs/api/module-storage_backends_nostr-backend.html +3 -0
  166. package/docs/api/module-storage_filesystem-storage-FileSystemStorage.html +5 -0
  167. package/docs/api/module-storage_filesystem-storage-browser-FileSystemStorage.html +3 -0
  168. package/docs/api/module-storage_filesystem-storage-browser.FileSystemStorage.html +3 -0
  169. package/docs/api/module-storage_filesystem-storage-browser.html +3 -0
  170. package/docs/api/module-storage_filesystem-storage.FileSystemStorage.html +3 -0
  171. package/docs/api/module-storage_filesystem-storage.html +3 -0
  172. package/docs/api/module-storage_global-tables.html +3 -0
  173. package/docs/api/module-storage_gun-async.html +3 -0
  174. package/docs/api/module-storage_gun-auth-GunAuth.html +5 -0
  175. package/docs/api/module-storage_gun-auth.GunAuth.html +3 -0
  176. package/docs/api/module-storage_gun-auth.html +3 -0
  177. package/docs/api/module-storage_gun-federation.html +3 -0
  178. package/docs/api/module-storage_gun-references-GunReferenceHandler.html +5 -0
  179. package/docs/api/module-storage_gun-references.GunReferenceHandler.html +3 -0
  180. package/docs/api/module-storage_gun-references.html +3 -0
  181. package/docs/api/module-storage_gun-schema-GunSchemaValidator.html +5 -0
  182. package/docs/api/module-storage_gun-schema.GunSchemaValidator.html +3 -0
  183. package/docs/api/module-storage_gun-schema.html +3 -0
  184. package/docs/api/module-storage_gun-wrapper.html +11 -0
  185. package/docs/api/module-storage_indexeddb-storage-IndexedDBStorage.html +5 -0
  186. package/docs/api/module-storage_indexeddb-storage.IndexedDBStorage.html +3 -0
  187. package/docs/api/module-storage_indexeddb-storage.html +3 -0
  188. package/docs/api/module-storage_key-storage-simple.html +3 -0
  189. package/docs/api/module-storage_key-storage.html +4 -0
  190. package/docs/api/module-storage_memory-storage-MemoryStorage.html +5 -0
  191. package/docs/api/module-storage_memory-storage.MemoryStorage.html +3 -0
  192. package/docs/api/module-storage_memory-storage.html +3 -0
  193. package/docs/api/module-storage_migration-MigrationTool.html +6 -0
  194. package/docs/api/module-storage_migration.MigrationTool.html +3 -0
  195. package/docs/api/module-storage_migration.html +3 -0
  196. package/docs/api/module-storage_nostr-async.html +18 -0
  197. package/docs/api/module-storage_nostr-client-LRUCache.html +3 -0
  198. package/docs/api/module-storage_nostr-client-NostrClient.html +7 -0
  199. package/docs/api/module-storage_nostr-client.NostrClient.html +15 -0
  200. package/docs/api/module-storage_nostr-client.html +6 -0
  201. package/docs/api/module-storage_nostr-wrapper.html +3 -0
  202. package/docs/api/module-storage_outbox-queue-OutboxQueue.html +4 -0
  203. package/docs/api/module-storage_outbox-queue.OutboxQueue.html +3 -0
  204. package/docs/api/module-storage_outbox-queue.html +3 -0
  205. package/docs/api/module-storage_persistent-storage-PersistentStorage.html +3 -0
  206. package/docs/api/module-storage_persistent-storage.html +4 -0
  207. package/docs/api/module-storage_sync-service-SyncService.html +5 -0
  208. package/docs/api/module-storage_sync-service.SyncService.html +3 -0
  209. package/docs/api/module-storage_sync-service.html +3 -0
  210. package/docs/api/module-storage_unified-storage.html +3 -0
  211. package/docs/api/module-subscriptions_manager.SubscriptionRegistry.html +3 -0
  212. package/docs/api/module-subscriptions_manager.html +3 -0
  213. package/docs/api/schema_validator.js.html +113 -0
  214. package/docs/api/scripts/core.js +726 -0
  215. package/docs/api/scripts/core.min.js +23 -0
  216. package/docs/api/scripts/resize.js +90 -0
  217. package/docs/api/scripts/search.js +265 -0
  218. package/docs/api/scripts/search.min.js +6 -0
  219. package/docs/api/scripts/third-party/Apache-License-2.0.txt +202 -0
  220. package/docs/api/scripts/third-party/fuse.js +9 -0
  221. package/docs/api/scripts/third-party/hljs-line-num-original.js +369 -0
  222. package/docs/api/scripts/third-party/hljs-line-num.js +1 -0
  223. package/docs/api/scripts/third-party/hljs-original.js +5171 -0
  224. package/docs/api/scripts/third-party/hljs.js +1 -0
  225. package/docs/api/scripts/third-party/popper.js +5 -0
  226. package/docs/api/scripts/third-party/tippy.js +1 -0
  227. package/docs/api/scripts/third-party/tocbot.js +672 -0
  228. package/docs/api/scripts/third-party/tocbot.min.js +1 -0
  229. package/docs/api/spatial_h3-operations.js.html +129 -0
  230. package/docs/api/storage_backend-factory.js.html +133 -0
  231. package/docs/api/storage_backend-interface.js.html +164 -0
  232. package/docs/api/storage_backends_activitypub-backend.js.html +298 -0
  233. package/docs/api/storage_backends_activitypub_server.js.html +678 -0
  234. package/docs/api/storage_backends_gundb-backend.js.html +878 -0
  235. package/docs/api/storage_backends_nostr-backend.js.html +254 -0
  236. package/docs/api/storage_filesystem-storage-browser.js.html +83 -0
  237. package/docs/api/storage_filesystem-storage.js.html +207 -0
  238. package/docs/api/storage_global-tables.js.html +116 -0
  239. package/docs/api/storage_gun-async.js.html +344 -0
  240. package/docs/api/storage_gun-auth.js.html +376 -0
  241. package/docs/api/storage_gun-federation.js.html +788 -0
  242. package/docs/api/storage_gun-references.js.html +212 -0
  243. package/docs/api/storage_gun-schema.js.html +309 -0
  244. package/docs/api/storage_gun-wrapper.js.html +645 -0
  245. package/docs/api/storage_indexeddb-storage.js.html +224 -0
  246. package/docs/api/storage_key-storage-simple.js.html +102 -0
  247. package/docs/api/storage_key-storage.js.html +171 -0
  248. package/docs/api/storage_memory-storage.js.html +128 -0
  249. package/docs/api/storage_migration.js.html +354 -0
  250. package/docs/api/storage_nostr-async.js.html +1076 -0
  251. package/docs/api/storage_nostr-client.js.html +1598 -0
  252. package/docs/api/storage_nostr-wrapper.js.html +218 -0
  253. package/docs/api/storage_outbox-queue.js.html +248 -0
  254. package/docs/api/storage_persistent-storage.js.html +160 -0
  255. package/docs/api/storage_sync-service.js.html +201 -0
  256. package/docs/api/storage_unified-storage.js.html +157 -0
  257. package/docs/api/styles/clean-jsdoc-theme-base.css +1159 -0
  258. package/docs/api/styles/clean-jsdoc-theme-dark.css +412 -0
  259. package/docs/api/styles/clean-jsdoc-theme-light.css +482 -0
  260. package/docs/api/styles/clean-jsdoc-theme-scrollbar.css +30 -0
  261. package/docs/api/styles/clean-jsdoc-theme-without-scrollbar.min.css +1 -0
  262. package/docs/api/styles/clean-jsdoc-theme.min.css +1 -0
  263. package/docs/api/subscriptions_manager.js.html +162 -0
  264. package/docs/contracts/api-interface.md +793 -0
  265. package/docs/data-model.md +476 -0
  266. package/docs/gun-async-usage.md +338 -0
  267. package/docs/plan.md +349 -0
  268. package/docs/quickstart.md +674 -0
  269. package/docs/research.md +362 -0
  270. package/docs/spec.md +244 -0
  271. package/docs/storage-backends.md +326 -0
  272. package/docs/tasks.md +947 -0
  273. package/examples/demo.html +47 -0
  274. package/examples/holosphere-widget.js +1242 -0
  275. package/examples/widget-demo.html +274 -0
  276. package/examples/widget.html +703 -0
  277. package/jsdoc.json +26 -0
  278. package/package.json +25 -7
  279. package/src/ai/aggregation.js +13 -2
  280. package/src/ai/breakdown.js +12 -2
  281. package/src/ai/classifier.js +14 -3
  282. package/src/ai/council.js +22 -7
  283. package/src/ai/embeddings.js +37 -15
  284. package/src/ai/federation-ai.js +13 -2
  285. package/src/ai/h3-ai.js +14 -2
  286. package/src/ai/index.js +16 -7
  287. package/src/ai/json-ops.js +18 -5
  288. package/src/ai/llm-service.js +62 -31
  289. package/src/ai/nl-query.js +12 -2
  290. package/src/ai/relationships.js +13 -2
  291. package/src/ai/schema-extractor.js +24 -10
  292. package/src/ai/spatial.js +13 -2
  293. package/src/ai/tts.js +25 -8
  294. package/src/cdn-entry.js +22 -0
  295. package/src/content/social-protocols.js +34 -25
  296. package/src/contracts/abis/Appreciative.json +1280 -0
  297. package/src/contracts/abis/AppreciativeFactory.json +101 -0
  298. package/src/contracts/abis/Bundle.json +1438 -0
  299. package/src/contracts/abis/BundleFactory.json +106 -0
  300. package/src/contracts/abis/Holon.json +881 -0
  301. package/src/contracts/abis/Holons.json +330 -0
  302. package/src/contracts/abis/Managed.json +1262 -0
  303. package/src/contracts/abis/ManagedFactory.json +149 -0
  304. package/src/contracts/abis/Membrane.json +261 -0
  305. package/src/contracts/abis/Splitter.json +1624 -0
  306. package/src/contracts/abis/SplitterFactory.json +220 -0
  307. package/src/contracts/abis/TestToken.json +321 -0
  308. package/src/contracts/abis/Zoned.json +1461 -0
  309. package/src/contracts/abis/ZonedFactory.json +154 -0
  310. package/src/contracts/chain-manager.js +403 -0
  311. package/src/contracts/deployer.js +500 -0
  312. package/src/contracts/event-listener.js +539 -0
  313. package/src/contracts/holon-contracts.js +359 -0
  314. package/src/contracts/index.js +82 -0
  315. package/src/contracts/networks.js +229 -0
  316. package/src/contracts/operations.js +687 -0
  317. package/src/contracts/queries.js +638 -0
  318. package/src/core/holosphere.js +487 -6
  319. package/src/crypto/nostr-utils.js +303 -0
  320. package/src/crypto/secp256k1.js +7 -2
  321. package/src/federation/handshake.js +475 -0
  322. package/src/federation/hologram.js +117 -3
  323. package/src/hierarchical/upcast.js +40 -25
  324. package/src/index.js +1501 -1909
  325. package/src/lib/ai-methods.js +657 -0
  326. package/src/lib/contract-methods.js +442 -0
  327. package/src/lib/errors.js +53 -0
  328. package/src/lib/federation-methods.js +345 -0
  329. package/src/lib/index.js +30 -0
  330. package/src/schema/validator.js +22 -3
  331. package/src/spatial/h3-operations.js +19 -3
  332. package/src/storage/backend-factory.js +7 -2
  333. package/src/storage/backend-interface.js +21 -2
  334. package/src/storage/backends/activitypub/server.js +25 -3
  335. package/src/storage/backends/activitypub-backend.js +25 -2
  336. package/src/storage/backends/gundb-backend.js +692 -50
  337. package/src/storage/backends/nostr-backend.js +116 -1
  338. package/src/storage/filesystem-storage-browser.js +42 -2
  339. package/src/storage/filesystem-storage.js +72 -5
  340. package/src/storage/global-tables.js +35 -3
  341. package/src/storage/gun-async.js +75 -15
  342. package/src/storage/gun-auth.js +373 -0
  343. package/src/storage/gun-federation.js +785 -0
  344. package/src/storage/gun-references.js +209 -0
  345. package/src/storage/gun-schema.js +306 -0
  346. package/src/storage/gun-wrapper.js +475 -54
  347. package/src/storage/indexeddb-storage.js +112 -13
  348. package/src/storage/key-storage-simple.js +32 -9
  349. package/src/storage/key-storage.js +45 -13
  350. package/src/storage/memory-storage.js +68 -2
  351. package/src/storage/migration.js +20 -7
  352. package/src/storage/nostr-async.js +412 -122
  353. package/src/storage/nostr-client.js +749 -76
  354. package/src/storage/nostr-wrapper.js +6 -2
  355. package/src/storage/outbox-queue.js +55 -18
  356. package/src/storage/persistent-storage.js +62 -14
  357. package/src/storage/sync-service.js +51 -17
  358. package/src/storage/unified-storage.js +154 -0
  359. package/src/subscriptions/manager.js +34 -17
  360. package/types/index.d.ts +133 -0
  361. package/vite.config.cdn.js +60 -0
  362. package/tests/unit/ai/aggregation.test.js +0 -295
  363. package/tests/unit/ai/breakdown.test.js +0 -446
  364. package/tests/unit/ai/classifier.test.js +0 -294
  365. package/tests/unit/ai/council.test.js +0 -262
  366. package/tests/unit/ai/embeddings.test.js +0 -384
  367. package/tests/unit/ai/federation-ai.test.js +0 -344
  368. package/tests/unit/ai/h3-ai.test.js +0 -458
  369. package/tests/unit/ai/index.test.js +0 -304
  370. package/tests/unit/ai/json-ops.test.js +0 -307
  371. package/tests/unit/ai/llm-service.test.js +0 -390
  372. package/tests/unit/ai/nl-query.test.js +0 -383
  373. package/tests/unit/ai/relationships.test.js +0 -311
  374. package/tests/unit/ai/schema-extractor.test.js +0 -384
  375. package/tests/unit/ai/spatial.test.js +0 -279
  376. package/tests/unit/ai/tts.test.js +0 -279
  377. package/tests/unit/content.test.js +0 -332
  378. package/tests/unit/contract/core.test.js +0 -88
  379. package/tests/unit/contract/crypto.test.js +0 -198
  380. package/tests/unit/contract/data.test.js +0 -223
  381. package/tests/unit/contract/federation.test.js +0 -181
  382. package/tests/unit/contract/hierarchical.test.js +0 -113
  383. package/tests/unit/contract/schema.test.js +0 -114
  384. package/tests/unit/contract/social.test.js +0 -217
  385. package/tests/unit/contract/spatial.test.js +0 -110
  386. package/tests/unit/contract/subscriptions.test.js +0 -128
  387. package/tests/unit/contract/utils.test.js +0 -159
  388. package/tests/unit/core.test.js +0 -152
  389. package/tests/unit/crypto.test.js +0 -328
  390. package/tests/unit/federation.test.js +0 -234
  391. package/tests/unit/gun-async.test.js +0 -252
  392. package/tests/unit/hierarchical.test.js +0 -399
  393. package/tests/unit/integration/scenario-01-geographic-storage.test.js +0 -74
  394. package/tests/unit/integration/scenario-02-federation.test.js +0 -76
  395. package/tests/unit/integration/scenario-03-subscriptions.test.js +0 -102
  396. package/tests/unit/integration/scenario-04-validation.test.js +0 -129
  397. package/tests/unit/integration/scenario-05-hierarchy.test.js +0 -125
  398. package/tests/unit/integration/scenario-06-social.test.js +0 -135
  399. package/tests/unit/integration/scenario-07-persistence.test.js +0 -130
  400. package/tests/unit/integration/scenario-08-authorization.test.js +0 -161
  401. package/tests/unit/integration/scenario-09-cross-dimensional.test.js +0 -139
  402. package/tests/unit/integration/scenario-10-cross-holosphere-capabilities.test.js +0 -357
  403. package/tests/unit/integration/scenario-11-cross-holosphere-federation.test.js +0 -410
  404. package/tests/unit/integration/scenario-12-capability-federated-read.test.js +0 -719
  405. package/tests/unit/performance/benchmark.test.js +0 -85
  406. package/tests/unit/schema.test.js +0 -213
  407. package/tests/unit/spatial.test.js +0 -158
  408. package/tests/unit/storage.test.js +0 -195
  409. package/tests/unit/subscriptions.test.js +0 -328
  410. package/tests/unit/test-data-permanence-debug.js +0 -197
  411. package/tests/unit/test-data-permanence.js +0 -340
  412. package/tests/unit/test-key-persistence-fixed.js +0 -148
  413. package/tests/unit/test-key-persistence.js +0 -172
  414. package/tests/unit/test-relay-permanence.js +0 -376
  415. package/tests/unit/test-second-node.js +0 -95
  416. package/tests/unit/test-simple-write.js +0 -89
  417. /package/{cleanup-test-data.js → scripts/cleanup-test-data.js} +0 -0
  418. /package/{test-ai-real-api.js → scripts/test-ai-real-api.js} +0 -0
@@ -1,18 +1,48 @@
1
1
  /**
2
- * IndexedDB storage adapter for browsers
3
- * Provides persistent storage with good performance
2
+ * @fileoverview IndexedDB storage adapter for browsers.
3
+ *
4
+ * Provides persistent storage with good performance using browser IndexedDB.
5
+ * Uses B-tree indexes for efficient prefix queries.
6
+ *
7
+ * @module storage/indexeddb-storage
4
8
  */
5
9
 
6
10
  import { PersistentStorage } from './persistent-storage.js';
7
11
 
12
+ /**
13
+ * IndexedDB storage adapter for browsers.
14
+ *
15
+ * Provides high-performance persistent storage using IndexedDB with efficient prefix queries.
16
+ *
17
+ * @class IndexedDBStorage
18
+ * @extends PersistentStorage
19
+ * @example
20
+ * const storage = new IndexedDBStorage();
21
+ * await storage.init('myapp');
22
+ * await storage.put('key1', { id: 'event1', content: 'test' });
23
+ */
8
24
  export class IndexedDBStorage extends PersistentStorage {
25
+ /**
26
+ * Create a new IndexedDBStorage instance.
27
+ */
9
28
  constructor() {
10
29
  super();
30
+ /** @type {IDBDatabase|null} */
11
31
  this.db = null;
12
- this.dbName = null;
32
+ /** @type {string} */
33
+ this.dbName = '';
34
+ /** @type {string} */
13
35
  this.storeName = 'events';
14
36
  }
15
37
 
38
+ /**
39
+ * Initialize storage with namespace.
40
+ *
41
+ * Creates or opens the IndexedDB database and object store.
42
+ *
43
+ * @param {string} namespace - Storage namespace
44
+ * @returns {Promise<void>}
45
+ */
16
46
  async init(namespace) {
17
47
  this.dbName = `holosphere_${namespace}`;
18
48
 
@@ -22,11 +52,12 @@ export class IndexedDBStorage extends PersistentStorage {
22
52
  request.onerror = () => reject(request.error);
23
53
  request.onsuccess = () => {
24
54
  this.db = request.result;
25
- resolve();
55
+ resolve(undefined);
26
56
  };
27
57
 
28
58
  request.onupgradeneeded = (event) => {
29
- const db = event.target.result;
59
+ const target = /** @type {IDBOpenDBRequest} */ (event.target);
60
+ const db = target.result;
30
61
 
31
62
  // Create object store if it doesn't exist
32
63
  if (!db.objectStoreNames.contains(this.storeName)) {
@@ -38,20 +69,41 @@ export class IndexedDBStorage extends PersistentStorage {
38
69
  });
39
70
  }
40
71
 
72
+ /**
73
+ * Store an event.
74
+ *
75
+ * @param {string} key - Storage key
76
+ * @param {Object} event - Event data
77
+ * @returns {Promise<void>}
78
+ */
41
79
  async put(key, event) {
42
80
  return new Promise((resolve, reject) => {
81
+ if (!this.db) {
82
+ reject(new Error('Database not initialized'));
83
+ return;
84
+ }
43
85
  const transaction = this.db.transaction([this.storeName], 'readwrite');
44
86
  const objectStore = transaction.objectStore(this.storeName);
45
87
 
46
88
  const request = objectStore.put({ key, event, timestamp: Date.now() });
47
89
 
48
- request.onsuccess = () => resolve();
90
+ request.onsuccess = () => resolve(undefined);
49
91
  request.onerror = () => reject(request.error);
50
92
  });
51
93
  }
52
94
 
95
+ /**
96
+ * Retrieve an event.
97
+ *
98
+ * @param {string} key - Storage key
99
+ * @returns {Promise<Object|null>} Event data or null
100
+ */
53
101
  async get(key) {
54
102
  return new Promise((resolve, reject) => {
103
+ if (!this.db) {
104
+ reject(new Error('Database not initialized'));
105
+ return;
106
+ }
55
107
  const transaction = this.db.transaction([this.storeName], 'readonly');
56
108
  const objectStore = transaction.objectStore(this.storeName);
57
109
 
@@ -65,20 +117,43 @@ export class IndexedDBStorage extends PersistentStorage {
65
117
  });
66
118
  }
67
119
 
120
+ /**
121
+ * Retrieve all events matching a prefix.
122
+ *
123
+ * Uses IDBKeyRange for efficient B-tree index queries.
124
+ *
125
+ * @param {string} prefix - Key prefix to match
126
+ * @returns {Promise<any[]>} Array of matching events
127
+ */
68
128
  async getAll(prefix) {
69
129
  return new Promise((resolve, reject) => {
130
+ if (!this.db) {
131
+ reject(new Error('Database not initialized'));
132
+ return;
133
+ }
70
134
  const transaction = this.db.transaction([this.storeName], 'readonly');
71
135
  const objectStore = transaction.objectStore(this.storeName);
72
136
 
137
+ /** @type {any[]} */
73
138
  const results = [];
74
- const request = objectStore.openCursor();
139
+
140
+ // Use IDBKeyRange for efficient prefix query instead of full table scan
141
+ // This creates a range from "prefix" to "prefix\uffff" (highest unicode char)
142
+ // which efficiently uses the B-tree index
143
+ let request;
144
+ if (prefix) {
145
+ const range = IDBKeyRange.bound(prefix, prefix + '\uffff', false, false);
146
+ request = objectStore.openCursor(range);
147
+ } else {
148
+ // No prefix = get all
149
+ request = objectStore.openCursor();
150
+ }
75
151
 
76
152
  request.onsuccess = (event) => {
77
- const cursor = event.target.result;
153
+ const target = /** @type {IDBRequest} */ (event.target);
154
+ const cursor = target.result;
78
155
  if (cursor) {
79
- if (cursor.value.key.startsWith(prefix)) {
80
- results.push(cursor.value.event);
81
- }
156
+ results.push(cursor.value.event);
82
157
  cursor.continue();
83
158
  } else {
84
159
  resolve(results);
@@ -89,30 +164,54 @@ export class IndexedDBStorage extends PersistentStorage {
89
164
  });
90
165
  }
91
166
 
167
+ /**
168
+ * Delete an event.
169
+ *
170
+ * @param {string} key - Storage key
171
+ * @returns {Promise<void>}
172
+ */
92
173
  async delete(key) {
93
174
  return new Promise((resolve, reject) => {
175
+ if (!this.db) {
176
+ reject(new Error('Database not initialized'));
177
+ return;
178
+ }
94
179
  const transaction = this.db.transaction([this.storeName], 'readwrite');
95
180
  const objectStore = transaction.objectStore(this.storeName);
96
181
 
97
182
  const request = objectStore.delete(key);
98
183
 
99
- request.onsuccess = () => resolve();
184
+ request.onsuccess = () => resolve(undefined);
100
185
  request.onerror = () => reject(request.error);
101
186
  });
102
187
  }
103
188
 
189
+ /**
190
+ * Clear all stored events.
191
+ *
192
+ * @returns {Promise<void>}
193
+ */
104
194
  async clear() {
105
195
  return new Promise((resolve, reject) => {
196
+ if (!this.db) {
197
+ reject(new Error('Database not initialized'));
198
+ return;
199
+ }
106
200
  const transaction = this.db.transaction([this.storeName], 'readwrite');
107
201
  const objectStore = transaction.objectStore(this.storeName);
108
202
 
109
203
  const request = objectStore.clear();
110
204
 
111
- request.onsuccess = () => resolve();
205
+ request.onsuccess = () => resolve(undefined);
112
206
  request.onerror = () => reject(request.error);
113
207
  });
114
208
  }
115
209
 
210
+ /**
211
+ * Close the database connection.
212
+ *
213
+ * @returns {Promise<void>}
214
+ */
116
215
  async close() {
117
216
  if (this.db) {
118
217
  this.db.close();
@@ -1,9 +1,11 @@
1
1
  /**
2
- * Simple Key Storage for Node.js
3
- * Basic filesystem-based key management
2
+ * @fileoverview Simple Key Storage for Node.js.
4
3
  *
5
- * NOTE: This only works in Node.js, not browsers
6
- * For browsers, keys are managed in localStorage
4
+ * Basic filesystem-based key management.
5
+ * NOTE: This only works in Node.js, not browsers.
6
+ * For browsers, keys are managed in localStorage.
7
+ *
8
+ * @module storage/key-storage-simple
7
9
  */
8
10
 
9
11
  import fs from 'fs';
@@ -11,7 +13,10 @@ import path from 'path';
11
13
  import os from 'os';
12
14
 
13
15
  /**
14
- * Get key storage directory
16
+ * Get key storage directory.
17
+ *
18
+ * @private
19
+ * @returns {string} Key storage directory path
15
20
  */
16
21
  function getKeyDir() {
17
22
  const configDir = process.env.XDG_CONFIG_HOME ||
@@ -23,7 +28,11 @@ function getKeyDir() {
23
28
  }
24
29
 
25
30
  /**
26
- * Get key file path for an app
31
+ * Get key file path for an app.
32
+ *
33
+ * @private
34
+ * @param {string} appName - Application name
35
+ * @returns {string} Full path to key file
27
36
  */
28
37
  function getKeyPath(appName) {
29
38
  const safeName = appName.replace(/[^a-zA-Z0-9-_]/g, '_');
@@ -31,7 +40,10 @@ function getKeyPath(appName) {
31
40
  }
32
41
 
33
42
  /**
34
- * Load private key
43
+ * Load private key from filesystem.
44
+ *
45
+ * @param {string} appName - Application name
46
+ * @returns {string|null} Private key (hex) or null if not found
35
47
  */
36
48
  export function loadKey(appName) {
37
49
  const keyPath = getKeyPath(appName);
@@ -45,7 +57,12 @@ export function loadKey(appName) {
45
57
  }
46
58
 
47
59
  /**
48
- * Save private key
60
+ * Save private key to filesystem with secure permissions.
61
+ *
62
+ * @param {string} appName - Application name
63
+ * @param {string} privateKey - Private key (64-character hex string)
64
+ * @returns {string} Path where key was saved
65
+ * @throws {Error} If private key format is invalid
49
66
  */
50
67
  export function saveKey(appName, privateKey) {
51
68
  if (!/^[0-9a-f]{64}$/i.test(privateKey)) {
@@ -64,7 +81,13 @@ export function saveKey(appName, privateKey) {
64
81
  }
65
82
 
66
83
  /**
67
- * Get or create key
84
+ * Get or create private key.
85
+ *
86
+ * Loads existing key or generates and saves a new one.
87
+ *
88
+ * @param {string} appName - Application name
89
+ * @param {Function} generateFn - Function to generate new key (returns hex string)
90
+ * @returns {string} Private key (hex)
68
91
  */
69
92
  export function getOrCreateKey(appName, generateFn) {
70
93
  const existing = loadKey(appName);
@@ -1,13 +1,25 @@
1
1
  /**
2
- * Key Storage - Universal API
3
- * Automatically uses Node.js or Browser implementation
2
+ * @fileoverview Key Storage - Universal API.
3
+ *
4
+ * Automatically uses Node.js or Browser implementation for storing private keys.
5
+ * In Node.js, keys are stored in the filesystem (~/.config/holosphere/keys).
6
+ * In browsers, keys are stored in localStorage.
7
+ *
8
+ * @module storage/key-storage
4
9
  */
5
10
 
6
11
  /**
7
- * Lazy-loaded Node.js modules
12
+ * Lazy-loaded Node.js modules.
13
+ * @private
8
14
  */
9
15
  let nodeModules = null;
10
16
 
17
+ /**
18
+ * Get or initialize Node.js modules for filesystem access.
19
+ *
20
+ * @private
21
+ * @returns {Object|null} Node.js modules or null if unavailable
22
+ */
11
23
  function getNodeModules() {
12
24
  if (!nodeModules) {
13
25
  try {
@@ -36,10 +48,17 @@ function getNodeModules() {
36
48
  }
37
49
 
38
50
  /**
39
- * Load private key from storage
51
+ * Load private key from storage.
52
+ *
53
+ * Attempts to load from localStorage (browser) or filesystem (Node.js).
54
+ *
40
55
  * @param {string} appName - Application name
41
- * @param {Object} options - Options
42
- * @returns {string|null} Private key or null
56
+ * @param {Object} [options={}] - Options
57
+ * @param {string} [options.keyDir] - Custom key directory (Node.js only)
58
+ * @returns {string|null} Private key (hex) or null if not found
59
+ * @example
60
+ * const key = loadPrivateKey('myapp');
61
+ * if (key) console.log('Loaded existing key');
43
62
  */
44
63
  export function loadPrivateKey(appName, options = {}) {
45
64
  // Browser environment
@@ -70,11 +89,18 @@ export function loadPrivateKey(appName, options = {}) {
70
89
  }
71
90
 
72
91
  /**
73
- * Save private key to storage
92
+ * Save private key to storage.
93
+ *
94
+ * Saves to localStorage (browser) or filesystem (Node.js) with secure permissions.
95
+ *
74
96
  * @param {string} appName - Application name
75
- * @param {string} privateKey - Private key (hex)
76
- * @param {Object} options - Options
77
- * @returns {boolean} Success
97
+ * @param {string} privateKey - Private key (64-character hex string)
98
+ * @param {Object} [options={}] - Options
99
+ * @param {string} [options.keyDir] - Custom key directory (Node.js only)
100
+ * @returns {boolean} True if saved successfully
101
+ * @throws {Error} If private key format is invalid
102
+ * @example
103
+ * const success = savePrivateKey('myapp', '1a2b3c...');
78
104
  */
79
105
  export function savePrivateKey(appName, privateKey, options = {}) {
80
106
  if (!/^[0-9a-f]{64}$/i.test(privateKey)) {
@@ -113,11 +139,17 @@ export function savePrivateKey(appName, privateKey, options = {}) {
113
139
  }
114
140
 
115
141
  /**
116
- * Get or create private key for an app
142
+ * Get or create private key for an app.
143
+ *
144
+ * Loads existing key or generates and saves a new one.
145
+ *
117
146
  * @param {string} appName - Application name
118
- * @param {Function} generateFn - Function to generate new key
119
- * @param {Object} options - Options
147
+ * @param {Function} generateFn - Function to generate new key (returns hex string)
148
+ * @param {Object} [options={}] - Options
149
+ * @param {string} [options.keyDir] - Custom key directory (Node.js only)
120
150
  * @returns {string} Private key (hex)
151
+ * @example
152
+ * const key = getOrCreatePrivateKey('myapp', () => generateSecureKey());
121
153
  */
122
154
  export function getOrCreatePrivateKey(appName, generateFn, options = {}) {
123
155
  const existingKey = loadPrivateKey(appName, options);
@@ -1,16 +1,43 @@
1
1
  /**
2
- * Memory-only storage adapter (fallback, no actual persistence)
2
+ * @fileoverview Memory-only storage adapter (fallback, no actual persistence).
3
+ *
4
+ * Provides in-memory storage for testing or when persistent storage is unavailable.
5
+ * Data is shared across instances with the same namespace but lost on process restart.
6
+ *
7
+ * @module storage/memory-storage
3
8
  */
4
9
 
5
10
  import { PersistentStorage } from './persistent-storage.js';
6
11
 
12
+ /**
13
+ * Memory-only storage adapter.
14
+ *
15
+ * Stores data in memory with no persistence across restarts.
16
+ * Uses a global store to share data across instances with same namespace.
17
+ *
18
+ * @class MemoryStorage
19
+ * @extends PersistentStorage
20
+ * @example
21
+ * const storage = new MemoryStorage();
22
+ * await storage.init('myapp');
23
+ * await storage.put('key1', { id: 'event1' });
24
+ */
7
25
  export class MemoryStorage extends PersistentStorage {
26
+ /**
27
+ * Create a new MemoryStorage instance.
28
+ */
8
29
  constructor() {
9
30
  super();
10
31
  this.data = new Map();
11
32
  this.namespace = null;
12
33
  }
13
34
 
35
+ /**
36
+ * Initialize storage with namespace.
37
+ *
38
+ * @param {string} namespace - Storage namespace
39
+ * @returns {Promise<void>}
40
+ */
14
41
  async init(namespace) {
15
42
  this.namespace = namespace;
16
43
  // Check if there's existing data for this namespace
@@ -23,16 +50,36 @@ export class MemoryStorage extends PersistentStorage {
23
50
  this.data = MemoryStorage._globalStore.get(namespace);
24
51
  }
25
52
 
53
+ /**
54
+ * Store an event.
55
+ *
56
+ * @param {string} key - Storage key
57
+ * @param {Object} event - Event data
58
+ * @returns {Promise<void>}
59
+ */
26
60
  async put(key, event) {
27
61
  this.data.set(key, JSON.parse(JSON.stringify(event))); // Deep clone
28
62
  }
29
63
 
64
+ /**
65
+ * Retrieve an event.
66
+ *
67
+ * @param {string} key - Storage key
68
+ * @returns {Promise<Object|null>} Event data or null
69
+ */
30
70
  async get(key) {
31
71
  const data = this.data.get(key);
32
72
  return data ? JSON.parse(JSON.stringify(data)) : null; // Deep clone
33
73
  }
34
74
 
75
+ /**
76
+ * Retrieve all events matching a prefix.
77
+ *
78
+ * @param {string} prefix - Key prefix to match
79
+ * @returns {Promise<any[]>} Array of matching events
80
+ */
35
81
  async getAll(prefix) {
82
+ /** @type {any[]} */
36
83
  const results = [];
37
84
  for (const [key, value] of this.data.entries()) {
38
85
  if (key.startsWith(prefix)) {
@@ -42,18 +89,37 @@ export class MemoryStorage extends PersistentStorage {
42
89
  return results;
43
90
  }
44
91
 
92
+ /**
93
+ * Delete an event.
94
+ *
95
+ * @param {string} key - Storage key
96
+ * @returns {Promise<void>}
97
+ */
45
98
  async delete(key) {
46
99
  this.data.delete(key);
47
100
  }
48
101
 
102
+ /**
103
+ * Clear all stored events.
104
+ *
105
+ * @returns {Promise<void>}
106
+ */
49
107
  async clear() {
50
108
  this.data.clear();
51
109
  }
52
110
 
111
+ /**
112
+ * Close storage (no-op for memory storage).
113
+ *
114
+ * @returns {Promise<void>}
115
+ */
53
116
  async close() {
54
117
  // Nothing to close for memory storage
55
118
  }
56
119
  }
57
120
 
58
- // Global store shared across instances with same namespace
121
+ /**
122
+ * Global store shared across instances with same namespace.
123
+ * @private
124
+ */
59
125
  MemoryStorage._globalStore = null;
@@ -1,11 +1,8 @@
1
1
  /**
2
- * Migration Tool for HoloSphere Storage Backends
3
- *
4
- * Enables data migration between different storage backends:
5
- * - Export data from any backend to a portable format
6
- * - Import data to any backend from the portable format
7
- * - Direct migration between backends
8
- * - Validation of migrated data
2
+ * @fileoverview Migration tool for HoloSphere storage backends.
3
+ * Enables data migration between different storage backends (Nostr, GunDB, ActivityPub)
4
+ * with export/import functionality, direct migration, and validation.
5
+ * @module storage/migration
9
6
  */
10
7
 
11
8
  import { BackendFactory } from './backend-factory.js';
@@ -38,9 +35,25 @@ import { BackendFactory } from './backend-factory.js';
38
35
  * @property {Object[]} errors - Error details
39
36
  */
40
37
 
38
+ /**
39
+ * Migration tool for transferring data between HoloSphere storage backends.
40
+ * Supports export/import to portable format, direct migration, and validation.
41
+ *
42
+ * @class MigrationTool
43
+ * @example
44
+ * const tool = new MigrationTool();
45
+ * await tool.setSource('nostr', { relays: ['wss://...'] });
46
+ * await tool.setTarget('gundb', { peers: ['wss://...'] });
47
+ * const results = await tool.migrate();
48
+ */
41
49
  export class MigrationTool {
50
+ /**
51
+ * Create a new MigrationTool instance.
52
+ */
42
53
  constructor() {
54
+ /** @type {StorageBackend|null} */
43
55
  this.sourceBackend = null;
56
+ /** @type {StorageBackend|null} */
44
57
  this.targetBackend = null;
45
58
  }
46
59