holosphere 2.0.0-alpha0 → 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 -42
  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
@@ -0,0 +1,154 @@
1
+ [
2
+ {
3
+ "type": "constructor",
4
+ "inputs": [
5
+ {
6
+ "name": "_botAddress",
7
+ "type": "address",
8
+ "internalType": "address"
9
+ }
10
+ ],
11
+ "stateMutability": "nonpayable"
12
+ },
13
+ {
14
+ "type": "function",
15
+ "name": "botAddress",
16
+ "inputs": [],
17
+ "outputs": [
18
+ {
19
+ "name": "",
20
+ "type": "address",
21
+ "internalType": "address"
22
+ }
23
+ ],
24
+ "stateMutability": "view"
25
+ },
26
+ {
27
+ "type": "function",
28
+ "name": "createZoned",
29
+ "inputs": [
30
+ {
31
+ "name": "_creatorUserId",
32
+ "type": "string",
33
+ "internalType": "string"
34
+ },
35
+ {
36
+ "name": "_name",
37
+ "type": "string",
38
+ "internalType": "string"
39
+ },
40
+ {
41
+ "name": "_parameter",
42
+ "type": "uint256",
43
+ "internalType": "uint256"
44
+ }
45
+ ],
46
+ "outputs": [
47
+ {
48
+ "name": "",
49
+ "type": "address",
50
+ "internalType": "address"
51
+ }
52
+ ],
53
+ "stateMutability": "nonpayable"
54
+ },
55
+ {
56
+ "type": "function",
57
+ "name": "listHolons",
58
+ "inputs": [],
59
+ "outputs": [
60
+ {
61
+ "name": "",
62
+ "type": "address[]",
63
+ "internalType": "address[]"
64
+ }
65
+ ],
66
+ "stateMutability": "view"
67
+ },
68
+ {
69
+ "type": "function",
70
+ "name": "listHolonsOf",
71
+ "inputs": [
72
+ {
73
+ "name": "_address",
74
+ "type": "address",
75
+ "internalType": "address"
76
+ }
77
+ ],
78
+ "outputs": [
79
+ {
80
+ "name": "",
81
+ "type": "address[]",
82
+ "internalType": "address[]"
83
+ }
84
+ ],
85
+ "stateMutability": "view"
86
+ },
87
+ {
88
+ "type": "function",
89
+ "name": "newHolon",
90
+ "inputs": [
91
+ {
92
+ "name": "creatorUserId",
93
+ "type": "string",
94
+ "internalType": "string"
95
+ },
96
+ {
97
+ "name": "_name",
98
+ "type": "string",
99
+ "internalType": "string"
100
+ },
101
+ {
102
+ "name": "_parameter",
103
+ "type": "uint256",
104
+ "internalType": "uint256"
105
+ }
106
+ ],
107
+ "outputs": [
108
+ {
109
+ "name": "",
110
+ "type": "address",
111
+ "internalType": "address"
112
+ }
113
+ ],
114
+ "stateMutability": "nonpayable"
115
+ },
116
+ {
117
+ "type": "function",
118
+ "name": "toAddress",
119
+ "inputs": [
120
+ {
121
+ "name": "",
122
+ "type": "string",
123
+ "internalType": "string"
124
+ }
125
+ ],
126
+ "outputs": [
127
+ {
128
+ "name": "",
129
+ "type": "address",
130
+ "internalType": "address"
131
+ }
132
+ ],
133
+ "stateMutability": "view"
134
+ },
135
+ {
136
+ "type": "event",
137
+ "name": "NewHolon",
138
+ "inputs": [
139
+ {
140
+ "name": "name",
141
+ "type": "string",
142
+ "indexed": false,
143
+ "internalType": "string"
144
+ },
145
+ {
146
+ "name": "addr",
147
+ "type": "address",
148
+ "indexed": false,
149
+ "internalType": "address"
150
+ }
151
+ ],
152
+ "anonymous": false
153
+ }
154
+ ]
@@ -0,0 +1,403 @@
1
+ /**
2
+ * @fileoverview Multi-chain connection manager for Holosphere smart contracts.
3
+ * Handles provider/signer setup, network switching, and wallet management across EVM chains.
4
+ * @module contracts/chain-manager
5
+ */
6
+
7
+ import { NETWORKS, getNetwork, isNetworkSupported } from './networks.js';
8
+
9
+ /**
10
+ * Multi-chain connection manager for Holosphere contracts.
11
+ * Supports both RPC providers and browser wallets (MetaMask, etc.).
12
+ * @class
13
+ */
14
+ export class ChainManager {
15
+ /**
16
+ * Create a new ChainManager instance.
17
+ * @param {Object} [config={}] - Configuration options
18
+ */
19
+ constructor(config = {}) {
20
+ this.config = config;
21
+ this.provider = null;
22
+ this.signer = null;
23
+ this.network = null;
24
+ this.networkName = null;
25
+ this.ethers = null;
26
+ this._initialized = false;
27
+ }
28
+
29
+ /**
30
+ * Initialize ethers.js library (lazy load).
31
+ * @private
32
+ * @returns {Promise<Object>} Ethers.js module
33
+ */
34
+ async _loadEthers() {
35
+ if (!this.ethers) {
36
+ // Dynamic import for ethers
37
+ const ethersModule = await import('ethers');
38
+ this.ethers = ethersModule;
39
+ }
40
+ return this.ethers;
41
+ }
42
+
43
+ /**
44
+ * Connect to a network using RPC provider.
45
+ * @param {string} networkName - Network name (e.g., 'sepolia', 'polygon')
46
+ * @param {string} [privateKey] - Private key for signing transactions
47
+ * @param {string} [rpcUrl] - Custom RPC URL (overrides default)
48
+ * @returns {Promise<{provider: Object, signer: Object|null, network: Object, networkName: string, config: Object}>} Connection details
49
+ * @throws {Error} If network is unsupported and no custom RPC URL provided
50
+ */
51
+ async connect(networkName, privateKey, rpcUrl) {
52
+ const ethers = await this._loadEthers();
53
+
54
+ if (!isNetworkSupported(networkName) && !rpcUrl) {
55
+ throw new Error(`Unsupported network: ${networkName}. Use a custom rpcUrl or choose from: ${Object.keys(NETWORKS).join(', ')}`);
56
+ }
57
+
58
+ const networkConfig = getNetwork(networkName) || { chainId: 0, name: networkName };
59
+ const url = rpcUrl || networkConfig.rpc;
60
+
61
+ // Create provider
62
+ this.provider = new ethers.JsonRpcProvider(url, {
63
+ chainId: networkConfig.chainId,
64
+ name: networkConfig.name
65
+ });
66
+
67
+ // Wait for provider to be ready
68
+ await this.provider.ready;
69
+
70
+ // Get actual network info
71
+ this.network = await this.provider.getNetwork();
72
+ this.networkName = networkName;
73
+
74
+ // Create signer if private key provided
75
+ if (privateKey) {
76
+ // Remove 0x prefix if present
77
+ const cleanKey = privateKey.startsWith('0x') ? privateKey : `0x${privateKey}`;
78
+ this.signer = new ethers.Wallet(cleanKey, this.provider);
79
+ }
80
+
81
+ this._initialized = true;
82
+
83
+ return {
84
+ provider: this.provider,
85
+ signer: this.signer,
86
+ network: this.network,
87
+ networkName: this.networkName,
88
+ config: networkConfig
89
+ };
90
+ }
91
+
92
+ /**
93
+ * Connect using browser wallet (MetaMask, etc.).
94
+ * @param {string} [networkName] - Optionally switch to this network
95
+ * @returns {Promise<{provider: Object, signer: Object, network: Object, address: string}>} Connection details including user address
96
+ * @throws {Error} If no browser wallet is detected
97
+ */
98
+ async connectBrowser(networkName) {
99
+ const ethers = await this._loadEthers();
100
+
101
+ if (typeof window === 'undefined' || !window.ethereum) {
102
+ throw new Error('No browser wallet detected. Please install MetaMask or another Web3 wallet.');
103
+ }
104
+
105
+ // Request account access
106
+ await window.ethereum.request({ method: 'eth_requestAccounts' });
107
+
108
+ // Create provider from browser
109
+ this.provider = new ethers.BrowserProvider(window.ethereum);
110
+ this.signer = await this.provider.getSigner();
111
+ this.network = await this.provider.getNetwork();
112
+
113
+ // Switch network if requested
114
+ if (networkName && isNetworkSupported(networkName)) {
115
+ const targetConfig = getNetwork(networkName);
116
+ if (this.network.chainId !== BigInt(targetConfig.chainId)) {
117
+ await this.switchNetwork(networkName);
118
+ }
119
+ }
120
+
121
+ const address = await this.signer.getAddress();
122
+ this._initialized = true;
123
+
124
+ return {
125
+ provider: this.provider,
126
+ signer: this.signer,
127
+ network: this.network,
128
+ address
129
+ };
130
+ }
131
+
132
+ /**
133
+ * Switch to a different network (browser wallet only).
134
+ * Adds the network to the wallet if it doesn't exist.
135
+ * @param {string} networkName - Target network name
136
+ * @returns {Promise<void>}
137
+ * @throws {Error} If not using a browser wallet or network is unknown
138
+ */
139
+ async switchNetwork(networkName) {
140
+ if (typeof window === 'undefined' || !window.ethereum) {
141
+ throw new Error('Network switching requires a browser wallet');
142
+ }
143
+
144
+ const config = getNetwork(networkName);
145
+ if (!config) {
146
+ throw new Error(`Unknown network: ${networkName}`);
147
+ }
148
+
149
+ const chainIdHex = '0x' + config.chainId.toString(16);
150
+
151
+ try {
152
+ // Try to switch to the network
153
+ await window.ethereum.request({
154
+ method: 'wallet_switchEthereumChain',
155
+ params: [{ chainId: chainIdHex }]
156
+ });
157
+ } catch (switchError) {
158
+ // If the network doesn't exist, add it
159
+ if (switchError.code === 4902) {
160
+ await window.ethereum.request({
161
+ method: 'wallet_addEthereumChain',
162
+ params: [{
163
+ chainId: chainIdHex,
164
+ chainName: config.name,
165
+ nativeCurrency: config.currency,
166
+ rpcUrls: [config.rpc],
167
+ blockExplorerUrls: config.explorer ? [config.explorer] : []
168
+ }]
169
+ });
170
+ } else {
171
+ throw switchError;
172
+ }
173
+ }
174
+
175
+ // Refresh provider/signer after network switch
176
+ const ethers = await this._loadEthers();
177
+ this.provider = new ethers.BrowserProvider(window.ethereum);
178
+ this.signer = await this.provider.getSigner();
179
+ this.network = await this.provider.getNetwork();
180
+ this.networkName = networkName;
181
+ }
182
+
183
+ /**
184
+ * Get the current provider.
185
+ * @returns {Object} Ethers.js provider instance
186
+ * @throws {Error} If not initialized
187
+ */
188
+ getProvider() {
189
+ this._requireInitialized();
190
+ return this.provider;
191
+ }
192
+
193
+ /**
194
+ * Get the current signer.
195
+ * @returns {Object} Ethers.js signer instance
196
+ * @throws {Error} If not initialized or no signer available
197
+ */
198
+ getSigner() {
199
+ this._requireInitialized();
200
+ if (!this.signer) {
201
+ throw new Error('No signer available. Connect with a private key or use connectBrowser().');
202
+ }
203
+ return this.signer;
204
+ }
205
+
206
+ /**
207
+ * Get the connected wallet address.
208
+ * @returns {Promise<string>} Ethereum address
209
+ * @throws {Error} If no signer available
210
+ */
211
+ async getAddress() {
212
+ const signer = this.getSigner();
213
+ return signer.getAddress();
214
+ }
215
+
216
+ /**
217
+ * Get ETH balance of an address.
218
+ * @param {string} [address] - Address to check (defaults to signer)
219
+ * @returns {Promise<string>} Balance in ETH as decimal string
220
+ * @throws {Error} If not initialized or no address/signer available
221
+ */
222
+ async getBalance(address) {
223
+ this._requireInitialized();
224
+ const ethers = await this._loadEthers();
225
+ const addr = address || (this.signer ? await this.signer.getAddress() : null);
226
+ if (!addr) {
227
+ throw new Error('No address provided and no signer available');
228
+ }
229
+ const balance = await this.provider.getBalance(addr);
230
+ return ethers.formatEther(balance);
231
+ }
232
+
233
+ /**
234
+ * Get current network configuration.
235
+ * @returns {Object} Network configuration object
236
+ * @throws {Error} If not initialized
237
+ */
238
+ getNetworkConfig() {
239
+ this._requireInitialized();
240
+ return getNetwork(this.networkName);
241
+ }
242
+
243
+ /**
244
+ * Get current chain ID.
245
+ * @returns {number} Chain ID as number
246
+ * @throws {Error} If not initialized
247
+ */
248
+ getChainId() {
249
+ this._requireInitialized();
250
+ return Number(this.network.chainId);
251
+ }
252
+
253
+ /**
254
+ * Check if connected to the expected network.
255
+ * @param {string} expectedNetwork - Expected network name
256
+ * @returns {boolean} True if on expected network
257
+ */
258
+ isOnNetwork(expectedNetwork) {
259
+ if (!this._initialized) return false;
260
+ const expected = getNetwork(expectedNetwork);
261
+ if (!expected) return false;
262
+ return this.getChainId() === expected.chainId;
263
+ }
264
+
265
+ /**
266
+ * Create a contract instance.
267
+ * @param {string} address - Contract address
268
+ * @param {Array} abi - Contract ABI
269
+ * @param {boolean} [useSigner=true] - Use signer for write operations
270
+ * @returns {Promise<Object>} Ethers.js Contract instance
271
+ * @throws {Error} If not initialized
272
+ */
273
+ async getContract(address, abi, useSigner = true) {
274
+ this._requireInitialized();
275
+ const ethers = await this._loadEthers();
276
+ const signerOrProvider = useSigner && this.signer ? this.signer : this.provider;
277
+ return new ethers.Contract(address, abi, signerOrProvider);
278
+ }
279
+
280
+ /**
281
+ * Deploy a contract.
282
+ * @param {Array} abi - Contract ABI
283
+ * @param {string} bytecode - Contract bytecode
284
+ * @param {Array} [constructorArgs=[]] - Constructor arguments
285
+ * @returns {Promise<{contract: Object, address: string, deployTx: Object, txHash: string}>} Deployment details
286
+ * @throws {Error} If not initialized or no signer available
287
+ */
288
+ async deployContract(abi, bytecode, constructorArgs = []) {
289
+ this._requireInitialized();
290
+ if (!this.signer) {
291
+ throw new Error('Signer required for contract deployment');
292
+ }
293
+
294
+ const ethers = await this._loadEthers();
295
+ const factory = new ethers.ContractFactory(abi, bytecode, this.signer);
296
+ const contract = await factory.deploy(...constructorArgs);
297
+
298
+ // Wait for deployment
299
+ await contract.waitForDeployment();
300
+ const address = await contract.getAddress();
301
+ const deployTx = contract.deploymentTransaction();
302
+
303
+ return {
304
+ contract,
305
+ address,
306
+ deployTx,
307
+ txHash: deployTx?.hash
308
+ };
309
+ }
310
+
311
+ /**
312
+ * Wait for a transaction to be mined.
313
+ * @param {string} txHash - Transaction hash
314
+ * @param {number} [confirmations=1] - Number of confirmations to wait for
315
+ * @returns {Promise<Object>} Transaction receipt
316
+ * @throws {Error} If not initialized
317
+ */
318
+ async waitForTransaction(txHash, confirmations = 1) {
319
+ this._requireInitialized();
320
+ return this.provider.waitForTransaction(txHash, confirmations);
321
+ }
322
+
323
+ /**
324
+ * Estimate gas for a transaction.
325
+ * @param {Object} tx - Transaction object
326
+ * @returns {Promise<bigint>} Estimated gas amount
327
+ * @throws {Error} If not initialized
328
+ */
329
+ async estimateGas(tx) {
330
+ this._requireInitialized();
331
+ return this.provider.estimateGas(tx);
332
+ }
333
+
334
+ /**
335
+ * Get current gas price and fee data.
336
+ * @returns {Promise<{gasPrice: string|null, maxFeePerGas: string|null, maxPriorityFeePerGas: string|null}>} Fee data in gwei
337
+ * @throws {Error} If not initialized
338
+ */
339
+ async getGasPrice() {
340
+ this._requireInitialized();
341
+ const ethers = await this._loadEthers();
342
+ const feeData = await this.provider.getFeeData();
343
+ return {
344
+ gasPrice: feeData.gasPrice ? ethers.formatUnits(feeData.gasPrice, 'gwei') : null,
345
+ maxFeePerGas: feeData.maxFeePerGas ? ethers.formatUnits(feeData.maxFeePerGas, 'gwei') : null,
346
+ maxPriorityFeePerGas: feeData.maxPriorityFeePerGas ? ethers.formatUnits(feeData.maxPriorityFeePerGas, 'gwei') : null
347
+ };
348
+ }
349
+
350
+ /**
351
+ * Parse units (e.g., ETH to wei).
352
+ * @param {string|number} value - Value to parse
353
+ * @param {string|number} [unit='ether'] - Unit name or decimals
354
+ * @returns {Promise<bigint>} Parsed value as bigint
355
+ */
356
+ async parseUnits(value, unit = 'ether') {
357
+ const ethers = await this._loadEthers();
358
+ return ethers.parseUnits(value.toString(), unit);
359
+ }
360
+
361
+ /**
362
+ * Format units (e.g., wei to ETH).
363
+ * @param {bigint|string} value - Value to format
364
+ * @param {string|number} [unit='ether'] - Unit name or decimals
365
+ * @returns {Promise<string>} Formatted value as decimal string
366
+ */
367
+ async formatUnits(value, unit = 'ether') {
368
+ const ethers = await this._loadEthers();
369
+ return ethers.formatUnits(value, unit);
370
+ }
371
+
372
+ /**
373
+ * Check if manager is initialized.
374
+ * @private
375
+ * @throws {Error} If not initialized
376
+ */
377
+ _requireInitialized() {
378
+ if (!this._initialized) {
379
+ throw new Error('ChainManager not initialized. Call connect() or connectBrowser() first.');
380
+ }
381
+ }
382
+
383
+ /**
384
+ * Check if connected to a network.
385
+ * @returns {boolean} True if connected
386
+ */
387
+ isConnected() {
388
+ return this._initialized && this.provider !== null;
389
+ }
390
+
391
+ /**
392
+ * Disconnect and clean up resources.
393
+ */
394
+ disconnect() {
395
+ this.provider = null;
396
+ this.signer = null;
397
+ this.network = null;
398
+ this.networkName = null;
399
+ this._initialized = false;
400
+ }
401
+ }
402
+
403
+ export default ChainManager;