holosphere 2.0.0-alpha8 → 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 (321) 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-CKffQDmQ.cjs → index-DDGt_V9o.cjs} +2 -2
  10. package/dist/{index-CKffQDmQ.cjs.map → index-DDGt_V9o.cjs.map} +1 -1
  11. package/dist/{index-4XHHKe6S.js → index-DJXftyvB.js} +1905 -337
  12. package/dist/index-DJXftyvB.js.map +1 -0
  13. package/dist/{index-Dz5kOZMI.cjs → index-DMbdcMtK.cjs} +17 -4
  14. package/dist/index-DMbdcMtK.cjs.map +1 -0
  15. package/dist/{index-BjP1TXGz.js → index-DeZ1xz_s.js} +2 -2
  16. package/dist/{index-BjP1TXGz.js.map → index-DeZ1xz_s.js.map} +1 -1
  17. package/dist/{indexeddb-storage-lExjjFlV.js → indexeddb-storage-BFt6hMeF.js} +48 -4
  18. package/dist/indexeddb-storage-BFt6hMeF.js.map +1 -0
  19. package/dist/{indexeddb-storage-DD7EFBVc.cjs → indexeddb-storage-BK5tv4Sh.cjs} +2 -2
  20. package/dist/indexeddb-storage-BK5tv4Sh.cjs.map +1 -0
  21. package/dist/{memory-storage-C68adso2.js → memory-storage-C9HuoL2E.js} +44 -4
  22. package/dist/memory-storage-C9HuoL2E.js.map +1 -0
  23. package/dist/{memory-storage-DD_6yyXT.cjs → memory-storage-Dao7jfYG.cjs} +2 -2
  24. package/dist/memory-storage-Dao7jfYG.cjs.map +1 -0
  25. package/dist/{secp256k1-DYELiqgx.cjs → secp256k1-BbKzbLtD.cjs} +2 -2
  26. package/dist/{secp256k1-DYELiqgx.cjs.map → secp256k1-BbKzbLtD.cjs.map} +1 -1
  27. package/dist/{secp256k1-OM8siPyy.js → secp256k1-CreY7Pcl.js} +2 -2
  28. package/dist/{secp256k1-OM8siPyy.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/jsdoc.json +26 -0
  247. package/package.json +14 -3
  248. package/src/ai/aggregation.js +13 -2
  249. package/src/ai/breakdown.js +12 -2
  250. package/src/ai/classifier.js +14 -3
  251. package/src/ai/council.js +22 -7
  252. package/src/ai/embeddings.js +37 -15
  253. package/src/ai/federation-ai.js +13 -2
  254. package/src/ai/h3-ai.js +14 -2
  255. package/src/ai/index.js +16 -7
  256. package/src/ai/json-ops.js +18 -5
  257. package/src/ai/llm-service.js +62 -31
  258. package/src/ai/nl-query.js +12 -2
  259. package/src/ai/relationships.js +13 -2
  260. package/src/ai/schema-extractor.js +24 -10
  261. package/src/ai/spatial.js +13 -2
  262. package/src/ai/tts.js +25 -8
  263. package/src/content/social-protocols.js +34 -25
  264. package/src/contracts/chain-manager.js +68 -40
  265. package/src/contracts/deployer.js +70 -42
  266. package/src/contracts/event-listener.js +61 -29
  267. package/src/contracts/holon-contracts.js +46 -31
  268. package/src/contracts/index.js +5 -6
  269. package/src/contracts/networks.js +19 -14
  270. package/src/contracts/operations.js +58 -41
  271. package/src/contracts/queries.js +54 -20
  272. package/src/core/holosphere.js +35 -6
  273. package/src/crypto/nostr-utils.js +82 -76
  274. package/src/crypto/secp256k1.js +7 -2
  275. package/src/federation/handshake.js +7 -7
  276. package/src/federation/hologram.js +9 -1
  277. package/src/hierarchical/upcast.js +34 -20
  278. package/src/index.js +655 -5
  279. package/src/lib/ai-methods.js +352 -3
  280. package/src/lib/contract-methods.js +152 -3
  281. package/src/lib/errors.js +31 -1
  282. package/src/lib/federation-methods.js +110 -3
  283. package/src/lib/index.js +9 -5
  284. package/src/schema/validator.js +22 -3
  285. package/src/spatial/h3-operations.js +17 -1
  286. package/src/storage/backend-factory.js +7 -2
  287. package/src/storage/backend-interface.js +21 -2
  288. package/src/storage/backends/activitypub/server.js +25 -3
  289. package/src/storage/backends/activitypub-backend.js +25 -2
  290. package/src/storage/backends/gundb-backend.js +29 -2
  291. package/src/storage/backends/nostr-backend.js +116 -1
  292. package/src/storage/filesystem-storage-browser.js +42 -2
  293. package/src/storage/filesystem-storage.js +72 -5
  294. package/src/storage/global-tables.js +7 -2
  295. package/src/storage/gun-async.js +20 -11
  296. package/src/storage/gun-auth.js +15 -4
  297. package/src/storage/gun-federation.js +14 -5
  298. package/src/storage/gun-references.js +16 -5
  299. package/src/storage/gun-schema.js +25 -10
  300. package/src/storage/gun-wrapper.js +99 -36
  301. package/src/storage/indexeddb-storage.js +65 -4
  302. package/src/storage/key-storage-simple.js +32 -9
  303. package/src/storage/key-storage.js +45 -13
  304. package/src/storage/memory-storage.js +65 -4
  305. package/src/storage/migration.js +20 -7
  306. package/src/storage/nostr-async.js +157 -67
  307. package/src/storage/nostr-client.js +173 -49
  308. package/src/storage/nostr-wrapper.js +6 -2
  309. package/src/storage/outbox-queue.js +55 -18
  310. package/src/storage/persistent-storage.js +56 -13
  311. package/src/storage/sync-service.js +51 -17
  312. package/src/storage/unified-storage.js +7 -2
  313. package/src/subscriptions/manager.js +33 -16
  314. package/dist/index-4XHHKe6S.js.map +0 -1
  315. package/dist/index-Dz5kOZMI.cjs.map +0 -1
  316. package/dist/indexeddb-storage-DD7EFBVc.cjs.map +0 -1
  317. package/dist/indexeddb-storage-lExjjFlV.js.map +0 -1
  318. package/dist/memory-storage-C68adso2.js.map +0 -1
  319. package/dist/memory-storage-DD_6yyXT.cjs.map +0 -1
  320. /package/{cleanup-test-data.js → scripts/cleanup-test-data.js} +0 -0
  321. /package/{test-ai-real-api.js → scripts/test-ai-real-api.js} +0 -0
@@ -1,11 +1,21 @@
1
1
  /**
2
- * ChainManager - Multi-chain connection management for Holosphere contracts
3
- * Handles provider/signer setup, network switching, and wallet management
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
4
5
  */
5
6
 
6
7
  import { NETWORKS, getNetwork, isNetworkSupported } from './networks.js';
7
8
 
9
+ /**
10
+ * Multi-chain connection manager for Holosphere contracts.
11
+ * Supports both RPC providers and browser wallets (MetaMask, etc.).
12
+ * @class
13
+ */
8
14
  export class ChainManager {
15
+ /**
16
+ * Create a new ChainManager instance.
17
+ * @param {Object} [config={}] - Configuration options
18
+ */
9
19
  constructor(config = {}) {
10
20
  this.config = config;
11
21
  this.provider = null;
@@ -17,8 +27,9 @@ export class ChainManager {
17
27
  }
18
28
 
19
29
  /**
20
- * Initialize ethers.js (lazy load)
30
+ * Initialize ethers.js library (lazy load).
21
31
  * @private
32
+ * @returns {Promise<Object>} Ethers.js module
22
33
  */
23
34
  async _loadEthers() {
24
35
  if (!this.ethers) {
@@ -30,11 +41,12 @@ export class ChainManager {
30
41
  }
31
42
 
32
43
  /**
33
- * Connect to a network
44
+ * Connect to a network using RPC provider.
34
45
  * @param {string} networkName - Network name (e.g., 'sepolia', 'polygon')
35
46
  * @param {string} [privateKey] - Private key for signing transactions
36
47
  * @param {string} [rpcUrl] - Custom RPC URL (overrides default)
37
- * @returns {Promise<{provider, signer, network}>}
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
38
50
  */
39
51
  async connect(networkName, privateKey, rpcUrl) {
40
52
  const ethers = await this._loadEthers();
@@ -78,9 +90,10 @@ export class ChainManager {
78
90
  }
79
91
 
80
92
  /**
81
- * Connect using browser wallet (MetaMask, etc.)
93
+ * Connect using browser wallet (MetaMask, etc.).
82
94
  * @param {string} [networkName] - Optionally switch to this network
83
- * @returns {Promise<{provider, signer, network, address}>}
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
84
97
  */
85
98
  async connectBrowser(networkName) {
86
99
  const ethers = await this._loadEthers();
@@ -117,8 +130,11 @@ export class ChainManager {
117
130
  }
118
131
 
119
132
  /**
120
- * Switch to a different network (browser wallet only)
133
+ * Switch to a different network (browser wallet only).
134
+ * Adds the network to the wallet if it doesn't exist.
121
135
  * @param {string} networkName - Target network name
136
+ * @returns {Promise<void>}
137
+ * @throws {Error} If not using a browser wallet or network is unknown
122
138
  */
123
139
  async switchNetwork(networkName) {
124
140
  if (typeof window === 'undefined' || !window.ethereum) {
@@ -165,8 +181,9 @@ export class ChainManager {
165
181
  }
166
182
 
167
183
  /**
168
- * Get the current provider
169
- * @returns {Provider}
184
+ * Get the current provider.
185
+ * @returns {Object} Ethers.js provider instance
186
+ * @throws {Error} If not initialized
170
187
  */
171
188
  getProvider() {
172
189
  this._requireInitialized();
@@ -174,8 +191,9 @@ export class ChainManager {
174
191
  }
175
192
 
176
193
  /**
177
- * Get the current signer
178
- * @returns {Signer}
194
+ * Get the current signer.
195
+ * @returns {Object} Ethers.js signer instance
196
+ * @throws {Error} If not initialized or no signer available
179
197
  */
180
198
  getSigner() {
181
199
  this._requireInitialized();
@@ -186,8 +204,9 @@ export class ChainManager {
186
204
  }
187
205
 
188
206
  /**
189
- * Get the connected address
190
- * @returns {Promise<string>}
207
+ * Get the connected wallet address.
208
+ * @returns {Promise<string>} Ethereum address
209
+ * @throws {Error} If no signer available
191
210
  */
192
211
  async getAddress() {
193
212
  const signer = this.getSigner();
@@ -195,9 +214,10 @@ export class ChainManager {
195
214
  }
196
215
 
197
216
  /**
198
- * Get ETH balance of an address
217
+ * Get ETH balance of an address.
199
218
  * @param {string} [address] - Address to check (defaults to signer)
200
- * @returns {Promise<string>} Balance in ETH
219
+ * @returns {Promise<string>} Balance in ETH as decimal string
220
+ * @throws {Error} If not initialized or no address/signer available
201
221
  */
202
222
  async getBalance(address) {
203
223
  this._requireInitialized();
@@ -211,8 +231,9 @@ export class ChainManager {
211
231
  }
212
232
 
213
233
  /**
214
- * Get current network configuration
215
- * @returns {Object}
234
+ * Get current network configuration.
235
+ * @returns {Object} Network configuration object
236
+ * @throws {Error} If not initialized
216
237
  */
217
238
  getNetworkConfig() {
218
239
  this._requireInitialized();
@@ -220,8 +241,9 @@ export class ChainManager {
220
241
  }
221
242
 
222
243
  /**
223
- * Get current chain ID
224
- * @returns {number}
244
+ * Get current chain ID.
245
+ * @returns {number} Chain ID as number
246
+ * @throws {Error} If not initialized
225
247
  */
226
248
  getChainId() {
227
249
  this._requireInitialized();
@@ -229,9 +251,9 @@ export class ChainManager {
229
251
  }
230
252
 
231
253
  /**
232
- * Check if connected to the expected network
254
+ * Check if connected to the expected network.
233
255
  * @param {string} expectedNetwork - Expected network name
234
- * @returns {boolean}
256
+ * @returns {boolean} True if on expected network
235
257
  */
236
258
  isOnNetwork(expectedNetwork) {
237
259
  if (!this._initialized) return false;
@@ -241,11 +263,12 @@ export class ChainManager {
241
263
  }
242
264
 
243
265
  /**
244
- * Create a contract instance
266
+ * Create a contract instance.
245
267
  * @param {string} address - Contract address
246
268
  * @param {Array} abi - Contract ABI
247
269
  * @param {boolean} [useSigner=true] - Use signer for write operations
248
- * @returns {Contract}
270
+ * @returns {Promise<Object>} Ethers.js Contract instance
271
+ * @throws {Error} If not initialized
249
272
  */
250
273
  async getContract(address, abi, useSigner = true) {
251
274
  this._requireInitialized();
@@ -255,11 +278,12 @@ export class ChainManager {
255
278
  }
256
279
 
257
280
  /**
258
- * Deploy a contract
281
+ * Deploy a contract.
259
282
  * @param {Array} abi - Contract ABI
260
283
  * @param {string} bytecode - Contract bytecode
261
284
  * @param {Array} [constructorArgs=[]] - Constructor arguments
262
- * @returns {Promise<{contract, address, deployTx}>}
285
+ * @returns {Promise<{contract: Object, address: string, deployTx: Object, txHash: string}>} Deployment details
286
+ * @throws {Error} If not initialized or no signer available
263
287
  */
264
288
  async deployContract(abi, bytecode, constructorArgs = []) {
265
289
  this._requireInitialized();
@@ -285,10 +309,11 @@ export class ChainManager {
285
309
  }
286
310
 
287
311
  /**
288
- * Wait for a transaction to be mined
312
+ * Wait for a transaction to be mined.
289
313
  * @param {string} txHash - Transaction hash
290
314
  * @param {number} [confirmations=1] - Number of confirmations to wait for
291
- * @returns {Promise<TransactionReceipt>}
315
+ * @returns {Promise<Object>} Transaction receipt
316
+ * @throws {Error} If not initialized
292
317
  */
293
318
  async waitForTransaction(txHash, confirmations = 1) {
294
319
  this._requireInitialized();
@@ -296,9 +321,10 @@ export class ChainManager {
296
321
  }
297
322
 
298
323
  /**
299
- * Estimate gas for a transaction
324
+ * Estimate gas for a transaction.
300
325
  * @param {Object} tx - Transaction object
301
- * @returns {Promise<bigint>}
326
+ * @returns {Promise<bigint>} Estimated gas amount
327
+ * @throws {Error} If not initialized
302
328
  */
303
329
  async estimateGas(tx) {
304
330
  this._requireInitialized();
@@ -306,8 +332,9 @@ export class ChainManager {
306
332
  }
307
333
 
308
334
  /**
309
- * Get current gas price
310
- * @returns {Promise<{gasPrice: string, maxFeePerGas: string, maxPriorityFeePerGas: string}>}
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
311
338
  */
312
339
  async getGasPrice() {
313
340
  this._requireInitialized();
@@ -321,10 +348,10 @@ export class ChainManager {
321
348
  }
322
349
 
323
350
  /**
324
- * Parse units (e.g., ETH to wei)
351
+ * Parse units (e.g., ETH to wei).
325
352
  * @param {string|number} value - Value to parse
326
353
  * @param {string|number} [unit='ether'] - Unit name or decimals
327
- * @returns {bigint}
354
+ * @returns {Promise<bigint>} Parsed value as bigint
328
355
  */
329
356
  async parseUnits(value, unit = 'ether') {
330
357
  const ethers = await this._loadEthers();
@@ -332,10 +359,10 @@ export class ChainManager {
332
359
  }
333
360
 
334
361
  /**
335
- * Format units (e.g., wei to ETH)
362
+ * Format units (e.g., wei to ETH).
336
363
  * @param {bigint|string} value - Value to format
337
364
  * @param {string|number} [unit='ether'] - Unit name or decimals
338
- * @returns {string}
365
+ * @returns {Promise<string>} Formatted value as decimal string
339
366
  */
340
367
  async formatUnits(value, unit = 'ether') {
341
368
  const ethers = await this._loadEthers();
@@ -343,8 +370,9 @@ export class ChainManager {
343
370
  }
344
371
 
345
372
  /**
346
- * Check if manager is initialized
373
+ * Check if manager is initialized.
347
374
  * @private
375
+ * @throws {Error} If not initialized
348
376
  */
349
377
  _requireInitialized() {
350
378
  if (!this._initialized) {
@@ -353,15 +381,15 @@ export class ChainManager {
353
381
  }
354
382
 
355
383
  /**
356
- * Check if connected
357
- * @returns {boolean}
384
+ * Check if connected to a network.
385
+ * @returns {boolean} True if connected
358
386
  */
359
387
  isConnected() {
360
388
  return this._initialized && this.provider !== null;
361
389
  }
362
390
 
363
391
  /**
364
- * Disconnect and clean up
392
+ * Disconnect and clean up resources.
365
393
  */
366
394
  disconnect() {
367
395
  this.provider = null;
@@ -1,6 +1,7 @@
1
1
  /**
2
- * ContractDeployer - 1-Click deployment for Holosphere smart contracts
3
- * Deploys all factories, registry, and individual holon contracts
2
+ * @fileoverview Contract deployment utilities for Holosphere smart contracts.
3
+ * Provides 1-click deployment for all factories, registry, and individual holon contracts.
4
+ * @module contracts/deployer
4
5
  */
5
6
 
6
7
  // Import ABIs
@@ -35,7 +36,16 @@ export const ABIs = {
35
36
  TestToken: TestTokenABI
36
37
  };
37
38
 
39
+ /**
40
+ * Contract deployment manager for Holosphere contracts.
41
+ * Handles deployment of all contract types and factory infrastructure.
42
+ * @class
43
+ */
38
44
  export class ContractDeployer {
45
+ /**
46
+ * Create a new ContractDeployer instance.
47
+ * @param {ChainManager} chainManager - Chain manager instance
48
+ */
39
49
  constructor(chainManager) {
40
50
  this.chainManager = chainManager;
41
51
  this.deployedContracts = {};
@@ -43,8 +53,9 @@ export class ContractDeployer {
43
53
  }
44
54
 
45
55
  /**
46
- * Load ethers from chain manager
56
+ * Load ethers.js library.
47
57
  * @private
58
+ * @returns {Promise<Object>} Ethers.js module
48
59
  */
49
60
  async _loadEthers() {
50
61
  if (!this.ethers) {
@@ -54,15 +65,15 @@ export class ContractDeployer {
54
65
  }
55
66
 
56
67
  /**
57
- * 1-CLICK DEPLOY: Deploy entire Holosphere contract infrastructure
58
- * Deploys: All factories + Holons registry + optional TestToken
59
- *
60
- * @param {Object} options - Deployment options
68
+ * 1-CLICK DEPLOY: Deploy entire Holosphere contract infrastructure.
69
+ * Deploys all factories, Holons registry, and optional TestToken.
70
+ * @param {Object} [options={}] - Deployment options
61
71
  * @param {string} [options.botAddress] - Bot address for managed operations (defaults to deployer)
62
72
  * @param {string} [options.testTokenSupply='1000000'] - Initial supply for test token (in whole tokens)
63
73
  * @param {boolean} [options.deployTestToken=true] - Whether to deploy test token
64
- * @param {Function} [options.onProgress] - Callback for deployment progress
65
- * @returns {Promise<Object>} Deployed contract addresses and instances
74
+ * @param {Function} [options.onProgress] - Callback for deployment progress updates
75
+ * @returns {Promise<Object>} Deployment details including contract addresses, explorer URLs, and metadata
76
+ * @throws {Error} If deployment fails
66
77
  */
67
78
  async deployAll(options = {}) {
68
79
  const ethers = await this._loadEthers();
@@ -190,12 +201,16 @@ export class ContractDeployer {
190
201
  }
191
202
 
192
203
  /**
193
- * Deploy a Splitter contract for a holon (fractal ownership)
204
+ * Deploy a Splitter contract for fractal ownership distribution.
194
205
  * @param {string} holonId - Holon identifier
195
206
  * @param {string} name - Contract display name
196
207
  * @param {number} [splitPercentage=70] - Internal/External split (e.g., 70 = 70% internal, 30% external)
197
- * @param {Object} [options] - Additional options
198
- * @returns {Promise<{contract, address, txHash}>}
208
+ * @param {Object} [options={}] - Additional deployment options
209
+ * @param {string} [options.creatorUserId] - Creator user ID (defaults to holonId)
210
+ * @param {string} [options.managedFactory] - Managed factory address
211
+ * @param {string} [options.zonedFactory] - Zoned factory address
212
+ * @returns {Promise<{contract: Object, address: string, txHash: string, holonId: string, type: string, splitPercentage: number}>} Deployment details
213
+ * @throws {Error} If factories not deployed
199
214
  */
200
215
  async deploySplitter(holonId, name, splitPercentage = 70, options = {}) {
201
216
  const signer = this.chainManager.getSigner();
@@ -231,10 +246,11 @@ export class ContractDeployer {
231
246
  }
232
247
 
233
248
  /**
234
- * Deploy a Managed contract (appreciation-based distribution)
249
+ * Deploy a Managed contract for appreciation-based distribution.
235
250
  * @param {string} name - Contract name
236
- * @param {Object} [options] - Additional options
237
- * @returns {Promise<{contract, address, txHash}>}
251
+ * @param {Object} [options={}] - Additional deployment options
252
+ * @param {string} [options.botAddress] - Bot address for managing appreciation (defaults to deployer)
253
+ * @returns {Promise<{contract: Object, address: string, txHash: string, type: string}>} Deployment details
238
254
  */
239
255
  async deployManaged(name, options = {}) {
240
256
  const signer = this.chainManager.getSigner();
@@ -254,11 +270,13 @@ export class ContractDeployer {
254
270
  }
255
271
 
256
272
  /**
257
- * Deploy a Zoned contract (tier-based distribution)
273
+ * Deploy a Zoned contract for tier-based distribution.
258
274
  * @param {string} name - Contract name
259
275
  * @param {number} [nZones=6] - Number of zones
260
- * @param {Object} [options] - Additional options
261
- * @returns {Promise<{contract, address, txHash}>}
276
+ * @param {Object} [options={}] - Additional deployment options
277
+ * @param {string} [options.botAddress] - Bot address for managing zones (defaults to deployer)
278
+ * @param {string} [options.creatorUserId] - Creator user ID (defaults to 'creator')
279
+ * @returns {Promise<{contract: Object, address: string, txHash: string, type: string, nZones: number}>} Deployment details
262
280
  */
263
281
  async deployZoned(name, nZones = 6, options = {}) {
264
282
  const signer = this.chainManager.getSigner();
@@ -280,11 +298,11 @@ export class ContractDeployer {
280
298
  }
281
299
 
282
300
  /**
283
- * Deploy an Appreciative contract (peer-to-peer appreciation)
301
+ * Deploy an Appreciative contract for peer-to-peer appreciation.
284
302
  * @param {string} name - Contract name
285
303
  * @param {string} creatorUserId - Creator's user ID
286
- * @param {Object} [options] - Additional options
287
- * @returns {Promise<{contract, address, txHash}>}
304
+ * @param {Object} [options={}] - Additional deployment options
305
+ * @returns {Promise<{contract: Object, address: string, txHash: string, type: string}>} Deployment details
288
306
  */
289
307
  async deployAppreciative(name, creatorUserId, options = {}) {
290
308
  const signer = this.chainManager.getSigner();
@@ -303,13 +321,15 @@ export class ContractDeployer {
303
321
  }
304
322
 
305
323
  /**
306
- * Deploy a Bundle contract (2-way split with steepness)
307
- * This is the simplest way to deploy a holon - no registry needed!
324
+ * Deploy a Bundle contract for 2-way split with steepness-based zone decay.
325
+ * This is the simplest way to deploy a holon - no registry needed.
308
326
  * @param {string} name - Contract name
309
- * @param {number} [steepness=500000000000000000n] - Steepness factor (0.5e18 = 50% decay)
327
+ * @param {bigint|string} [steepness] - Steepness factor (e.g., 0.5e18 = 50% decay, defaults to 0.5e18)
310
328
  * @param {number} [nZones=6] - Number of zones
311
- * @param {Object} [options] - Additional options
312
- * @returns {Promise<{contract, address, txHash}>}
329
+ * @param {Object} [options={}] - Additional deployment options
330
+ * @param {string} [options.creatorUserId] - Creator user ID (defaults to 'creator')
331
+ * @returns {Promise<{contract: Object, address: string, txHash: string, type: string, steepness: bigint, nZones: number, creatorUserId: string, name: string}>} Deployment details
332
+ * @throws {Error} If bytecode is not available
313
333
  */
314
334
  async deployBundle(name, steepness, nZones = 6, options = {}) {
315
335
  const ethers = await this._loadEthers();
@@ -345,12 +365,14 @@ export class ContractDeployer {
345
365
  }
346
366
 
347
367
  /**
348
- * Deploy a Bundle contract directly (simplified 1-click deployment)
349
- * No registry needed - just deploys and returns the address
368
+ * Deploy a Bundle contract directly (simplified 1-click deployment).
369
+ * No registry needed - just deploys and returns the address.
350
370
  * @param {string} holonId - Unique identifier for the holon
351
371
  * @param {string} name - Display name for the holon
352
- * @param {Object} [options] - Options { steepness, nZones }
353
- * @returns {Promise<{address, txHash, contract}>}
372
+ * @param {Object} [options={}] - Deployment options
373
+ * @param {bigint|string} [options.steepness] - Steepness factor
374
+ * @param {number} [options.nZones=6] - Number of zones
375
+ * @returns {Promise<{contract: Object, address: string, txHash: string, type: string, steepness: bigint, nZones: number, creatorUserId: string, name: string}>} Deployment details
354
376
  */
355
377
  async deployBundleDirect(holonId, name, options = {}) {
356
378
  const steepness = options.steepness;
@@ -363,9 +385,9 @@ export class ContractDeployer {
363
385
  }
364
386
 
365
387
  /**
366
- * Deploy a TestToken (ERC20 for testing)
388
+ * Deploy a TestToken ERC20 for testing.
367
389
  * @param {string} [initialSupply='1000000'] - Initial supply in whole tokens
368
- * @returns {Promise<{contract, address, txHash}>}
390
+ * @returns {Promise<{contract: Object, address: string, txHash: string, type: string, initialSupply: string}>} Deployment details
369
391
  */
370
392
  async deployTestToken(initialSupply = '1000000') {
371
393
  const ethers = await this._loadEthers();
@@ -385,11 +407,12 @@ export class ContractDeployer {
385
407
  }
386
408
 
387
409
  /**
388
- * Create a holon bundle through the Holons registry
410
+ * Create a holon bundle through the Holons registry.
389
411
  * @param {string} creatorUserId - Creator's user ID
390
412
  * @param {string} name - Bundle name
391
413
  * @param {number} [parameter=70] - Split parameter
392
- * @returns {Promise<{address, txHash}>}
414
+ * @returns {Promise<{address: string, txHash: string, name: string, creatorUserId: string}>} Created holon details
415
+ * @throws {Error} If Holons registry not deployed
393
416
  */
394
417
  async createHolonBundle(creatorUserId, name, parameter = 70) {
395
418
  if (!this.deployedContracts.holons) {
@@ -425,10 +448,11 @@ export class ContractDeployer {
425
448
  }
426
449
 
427
450
  /**
428
- * Get contract instance by address
451
+ * Get contract instance by address and type.
429
452
  * @param {string} address - Contract address
430
- * @param {string} type - Contract type (Splitter, Managed, Zoned, etc.)
431
- * @returns {Promise<Contract>}
453
+ * @param {string} type - Contract type (Splitter, Managed, Zoned, Appreciative, Bundle, Holons, TestToken)
454
+ * @returns {Promise<Object>} Ethers.js Contract instance
455
+ * @throws {Error} If unknown contract type
432
456
  */
433
457
  async getContract(address, type) {
434
458
  const abi = ABIs[type];
@@ -439,24 +463,28 @@ export class ContractDeployer {
439
463
  }
440
464
 
441
465
  /**
442
- * Get deployed contract addresses
443
- * @returns {Object}
466
+ * Get deployed contract addresses.
467
+ * @returns {Object} Map of contract names to addresses
444
468
  */
445
469
  getDeployedAddresses() {
446
470
  return { ...this.deployedContracts };
447
471
  }
448
472
 
449
473
  /**
450
- * Load previously deployed contracts
451
- * @param {Object} addresses - Contract addresses
474
+ * Load previously deployed contract addresses.
475
+ * @param {Object} addresses - Map of contract names to addresses
452
476
  */
453
477
  loadDeployedAddresses(addresses) {
454
478
  this.deployedContracts = { ...addresses };
455
479
  }
456
480
 
457
481
  /**
458
- * Internal: Deploy a contract
482
+ * Internal helper to deploy a contract.
459
483
  * @private
484
+ * @param {Array} abi - Contract ABI
485
+ * @param {string} bytecode - Contract bytecode
486
+ * @param {Array} constructorArgs - Constructor arguments
487
+ * @returns {Promise<{contract: Object, address: string, txHash: string, explorerUrl: string|null}>} Deployment result
460
488
  */
461
489
  async _deployContract(abi, bytecode, constructorArgs) {
462
490
  const result = await this.chainManager.deployContract(abi, bytecode, constructorArgs);