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
@@ -0,0 +1,500 @@
1
+ /**
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
5
+ */
6
+
7
+ // Import ABIs
8
+ import SplitterABI from './abis/Splitter.json' with { type: 'json' };
9
+ import ManagedABI from './abis/Managed.json' with { type: 'json' };
10
+ import ZonedABI from './abis/Zoned.json' with { type: 'json' };
11
+ import AppreciativeABI from './abis/Appreciative.json' with { type: 'json' };
12
+ import BundleABI from './abis/Bundle.json' with { type: 'json' };
13
+ import HolonsABI from './abis/Holons.json' with { type: 'json' };
14
+ import SplitterFactoryABI from './abis/SplitterFactory.json' with { type: 'json' };
15
+ import ManagedFactoryABI from './abis/ManagedFactory.json' with { type: 'json' };
16
+ import ZonedFactoryABI from './abis/ZonedFactory.json' with { type: 'json' };
17
+ import AppreciativeFactoryABI from './abis/AppreciativeFactory.json' with { type: 'json' };
18
+ import BundleFactoryABI from './abis/BundleFactory.json' with { type: 'json' };
19
+ import TestTokenABI from './abis/TestToken.json' with { type: 'json' };
20
+
21
+ import { getTxUrl, getAddressUrl } from './networks.js';
22
+
23
+ // Export ABIs for external use
24
+ export const ABIs = {
25
+ Splitter: SplitterABI,
26
+ Managed: ManagedABI,
27
+ Zoned: ZonedABI,
28
+ Appreciative: AppreciativeABI,
29
+ Bundle: BundleABI,
30
+ Holons: HolonsABI,
31
+ SplitterFactory: SplitterFactoryABI,
32
+ ManagedFactory: ManagedFactoryABI,
33
+ ZonedFactory: ZonedFactoryABI,
34
+ AppreciativeFactory: AppreciativeFactoryABI,
35
+ BundleFactory: BundleFactoryABI,
36
+ TestToken: TestTokenABI
37
+ };
38
+
39
+ /**
40
+ * Contract deployment manager for Holosphere contracts.
41
+ * Handles deployment of all contract types and factory infrastructure.
42
+ * @class
43
+ */
44
+ export class ContractDeployer {
45
+ /**
46
+ * Create a new ContractDeployer instance.
47
+ * @param {ChainManager} chainManager - Chain manager instance
48
+ */
49
+ constructor(chainManager) {
50
+ this.chainManager = chainManager;
51
+ this.deployedContracts = {};
52
+ this.ethers = null;
53
+ }
54
+
55
+ /**
56
+ * Load ethers.js library.
57
+ * @private
58
+ * @returns {Promise<Object>} Ethers.js module
59
+ */
60
+ async _loadEthers() {
61
+ if (!this.ethers) {
62
+ this.ethers = await import('ethers');
63
+ }
64
+ return this.ethers;
65
+ }
66
+
67
+ /**
68
+ * 1-CLICK DEPLOY: Deploy entire Holosphere contract infrastructure.
69
+ * Deploys all factories, Holons registry, and optional TestToken.
70
+ * @param {Object} [options={}] - Deployment options
71
+ * @param {string} [options.botAddress] - Bot address for managed operations (defaults to deployer)
72
+ * @param {string} [options.testTokenSupply='1000000'] - Initial supply for test token (in whole tokens)
73
+ * @param {boolean} [options.deployTestToken=true] - Whether to deploy test token
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
77
+ */
78
+ async deployAll(options = {}) {
79
+ const ethers = await this._loadEthers();
80
+ const signer = this.chainManager.getSigner();
81
+ const deployerAddress = await signer.getAddress();
82
+
83
+ const botAddress = options.botAddress || deployerAddress;
84
+ const testTokenSupply = options.testTokenSupply || '1000000';
85
+ const deployTestToken = options.deployTestToken !== false;
86
+ const onProgress = options.onProgress || (() => {});
87
+
88
+ const deployment = {
89
+ network: this.chainManager.networkName,
90
+ chainId: this.chainManager.getChainId(),
91
+ deployer: deployerAddress,
92
+ botAddress,
93
+ timestamp: new Date().toISOString(),
94
+ contracts: {}
95
+ };
96
+
97
+ try {
98
+ // Step 1: Deploy ManagedFactory
99
+ onProgress({ step: 1, total: deployTestToken ? 8 : 7, message: 'Deploying ManagedFactory...' });
100
+ const managedFactory = await this._deployContract(
101
+ ManagedFactoryABI.abi,
102
+ ManagedFactoryABI.bytecode,
103
+ [botAddress]
104
+ );
105
+ deployment.contracts.managedFactory = managedFactory.address;
106
+ onProgress({ step: 1, done: true, address: managedFactory.address });
107
+
108
+ // Step 2: Deploy ZonedFactory
109
+ onProgress({ step: 2, total: deployTestToken ? 8 : 7, message: 'Deploying ZonedFactory...' });
110
+ const zonedFactory = await this._deployContract(
111
+ ZonedFactoryABI.abi,
112
+ ZonedFactoryABI.bytecode,
113
+ [botAddress]
114
+ );
115
+ deployment.contracts.zonedFactory = zonedFactory.address;
116
+ onProgress({ step: 2, done: true, address: zonedFactory.address });
117
+
118
+ // Step 3: Deploy SplitterFactory
119
+ onProgress({ step: 3, total: deployTestToken ? 8 : 7, message: 'Deploying SplitterFactory...' });
120
+ const splitterFactory = await this._deployContract(
121
+ SplitterFactoryABI.abi,
122
+ SplitterFactoryABI.bytecode,
123
+ []
124
+ );
125
+ deployment.contracts.splitterFactory = splitterFactory.address;
126
+ onProgress({ step: 3, done: true, address: splitterFactory.address });
127
+
128
+ // Step 4: Deploy AppreciativeFactory
129
+ onProgress({ step: 4, total: deployTestToken ? 8 : 7, message: 'Deploying AppreciativeFactory...' });
130
+ const appreciativeFactory = await this._deployContract(
131
+ AppreciativeFactoryABI.abi,
132
+ AppreciativeFactoryABI.bytecode,
133
+ []
134
+ );
135
+ deployment.contracts.appreciativeFactory = appreciativeFactory.address;
136
+ onProgress({ step: 4, done: true, address: appreciativeFactory.address });
137
+
138
+ // Step 5: Deploy BundleFactory
139
+ onProgress({ step: 5, total: deployTestToken ? 8 : 7, message: 'Deploying BundleFactory...' });
140
+ const bundleFactory = await this._deployContract(
141
+ BundleFactoryABI.abi,
142
+ BundleFactoryABI.bytecode,
143
+ []
144
+ );
145
+ deployment.contracts.bundleFactory = bundleFactory.address;
146
+ onProgress({ step: 5, done: true, address: bundleFactory.address });
147
+
148
+ // Step 6: Deploy Holons (Central Registry)
149
+ onProgress({ step: 6, total: deployTestToken ? 8 : 7, message: 'Deploying Holons Registry...' });
150
+ const holons = await this._deployContract(
151
+ HolonsABI.abi,
152
+ HolonsABI.bytecode,
153
+ []
154
+ );
155
+ deployment.contracts.holons = holons.address;
156
+ onProgress({ step: 6, done: true, address: holons.address });
157
+
158
+ // Step 7: Configure Holons Registry
159
+ onProgress({ step: 7, total: deployTestToken ? 8 : 7, message: 'Configuring Holons Registry...' });
160
+
161
+ // Set factories
162
+ await holons.contract.setFactories(managedFactory.address, zonedFactory.address);
163
+
164
+ // Register flavors
165
+ await holons.contract.newFlavor('Splitter', splitterFactory.address);
166
+ await holons.contract.newFlavor('Managed', managedFactory.address);
167
+ await holons.contract.newFlavor('Zoned', zonedFactory.address);
168
+ await holons.contract.newFlavor('Appreciative', appreciativeFactory.address);
169
+ await holons.contract.newFlavor('Bundle', bundleFactory.address);
170
+
171
+ onProgress({ step: 7, done: true, message: 'Registry configured' });
172
+
173
+ // Step 8: Deploy TestToken (optional)
174
+ if (deployTestToken) {
175
+ onProgress({ step: 8, total: 8, message: 'Deploying TestToken...' });
176
+ const supply = ethers.parseEther(testTokenSupply);
177
+ const testToken = await this._deployContract(
178
+ TestTokenABI.abi,
179
+ TestTokenABI.bytecode,
180
+ [supply]
181
+ );
182
+ deployment.contracts.testToken = testToken.address;
183
+ onProgress({ step: 8, done: true, address: testToken.address });
184
+ }
185
+
186
+ // Store deployed contracts
187
+ this.deployedContracts = deployment.contracts;
188
+
189
+ // Add explorer URLs
190
+ deployment.explorerUrls = {};
191
+ for (const [name, address] of Object.entries(deployment.contracts)) {
192
+ const url = getAddressUrl(deployment.network, address);
193
+ if (url) deployment.explorerUrls[name] = url;
194
+ }
195
+
196
+ return deployment;
197
+
198
+ } catch (error) {
199
+ throw new Error(`Deployment failed: ${error.message}`);
200
+ }
201
+ }
202
+
203
+ /**
204
+ * Deploy a Splitter contract for fractal ownership distribution.
205
+ * @param {string} holonId - Holon identifier
206
+ * @param {string} name - Contract display name
207
+ * @param {number} [splitPercentage=70] - Internal/External split (e.g., 70 = 70% internal, 30% external)
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
214
+ */
215
+ async deploySplitter(holonId, name, splitPercentage = 70, options = {}) {
216
+ const signer = this.chainManager.getSigner();
217
+ const deployerAddress = await signer.getAddress();
218
+
219
+ const creatorUserId = options.creatorUserId || holonId;
220
+ const managedFactory = options.managedFactory || this.deployedContracts.managedFactory;
221
+ const zonedFactory = options.zonedFactory || this.deployedContracts.zonedFactory;
222
+
223
+ if (!managedFactory || !zonedFactory) {
224
+ throw new Error('Factories not deployed. Run deployAll() first or provide factory addresses.');
225
+ }
226
+
227
+ const result = await this._deployContract(
228
+ SplitterABI.abi,
229
+ SplitterABI.bytecode,
230
+ [deployerAddress, creatorUserId, name, splitPercentage, managedFactory, zonedFactory]
231
+ );
232
+
233
+ // Configure the split
234
+ await result.contract.setContractSplit(splitPercentage, 100 - splitPercentage);
235
+
236
+ // Create child contracts
237
+ await result.contract.createManagedContract(creatorUserId, name, 0);
238
+ await result.contract.createZonedContract(creatorUserId, name, 6); // 6 zones default
239
+
240
+ return {
241
+ ...result,
242
+ holonId,
243
+ type: 'Splitter',
244
+ splitPercentage
245
+ };
246
+ }
247
+
248
+ /**
249
+ * Deploy a Managed contract for appreciation-based distribution.
250
+ * @param {string} name - Contract name
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
254
+ */
255
+ async deployManaged(name, options = {}) {
256
+ const signer = this.chainManager.getSigner();
257
+ const deployerAddress = await signer.getAddress();
258
+ const botAddress = options.botAddress || deployerAddress;
259
+
260
+ const result = await this._deployContract(
261
+ ManagedABI.abi,
262
+ ManagedABI.bytecode,
263
+ [deployerAddress, name, botAddress]
264
+ );
265
+
266
+ return {
267
+ ...result,
268
+ type: 'Managed'
269
+ };
270
+ }
271
+
272
+ /**
273
+ * Deploy a Zoned contract for tier-based distribution.
274
+ * @param {string} name - Contract name
275
+ * @param {number} [nZones=6] - Number of zones
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
280
+ */
281
+ async deployZoned(name, nZones = 6, options = {}) {
282
+ const signer = this.chainManager.getSigner();
283
+ const deployerAddress = await signer.getAddress();
284
+ const botAddress = options.botAddress || deployerAddress;
285
+ const creatorUserId = options.creatorUserId || 'creator';
286
+
287
+ const result = await this._deployContract(
288
+ ZonedABI.abi,
289
+ ZonedABI.bytecode,
290
+ [creatorUserId, deployerAddress, name, nZones, botAddress]
291
+ );
292
+
293
+ return {
294
+ ...result,
295
+ type: 'Zoned',
296
+ nZones
297
+ };
298
+ }
299
+
300
+ /**
301
+ * Deploy an Appreciative contract for peer-to-peer appreciation.
302
+ * @param {string} name - Contract name
303
+ * @param {string} creatorUserId - Creator's user ID
304
+ * @param {Object} [options={}] - Additional deployment options
305
+ * @returns {Promise<{contract: Object, address: string, txHash: string, type: string}>} Deployment details
306
+ */
307
+ async deployAppreciative(name, creatorUserId, options = {}) {
308
+ const signer = this.chainManager.getSigner();
309
+ const deployerAddress = await signer.getAddress();
310
+
311
+ const result = await this._deployContract(
312
+ AppreciativeABI.abi,
313
+ AppreciativeABI.bytecode,
314
+ [name, creatorUserId, deployerAddress]
315
+ );
316
+
317
+ return {
318
+ ...result,
319
+ type: 'Appreciative'
320
+ };
321
+ }
322
+
323
+ /**
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.
326
+ * @param {string} name - Contract name
327
+ * @param {bigint|string} [steepness] - Steepness factor (e.g., 0.5e18 = 50% decay, defaults to 0.5e18)
328
+ * @param {number} [nZones=6] - Number of zones
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
333
+ */
334
+ async deployBundle(name, steepness, nZones = 6, options = {}) {
335
+ const ethers = await this._loadEthers();
336
+ const signer = this.chainManager.getSigner();
337
+ const deployerAddress = await signer.getAddress();
338
+ const creatorUserId = options.creatorUserId || 'creator';
339
+
340
+ // Default steepness: 0.5e18 (50% decay per zone)
341
+ const steepnessValue = steepness || ethers.parseEther('0.5');
342
+
343
+ // BundleABI now has { abi, bytecode } structure
344
+ const abi = BundleABI.abi || BundleABI;
345
+ const bytecode = BundleABI.bytecode;
346
+
347
+ if (!bytecode) {
348
+ throw new Error('Bundle bytecode not available. Please rebuild contracts.');
349
+ }
350
+
351
+ const result = await this._deployContract(
352
+ abi,
353
+ bytecode,
354
+ [deployerAddress, creatorUserId, name, steepnessValue, nZones]
355
+ );
356
+
357
+ return {
358
+ ...result,
359
+ type: 'Bundle',
360
+ steepness: steepnessValue,
361
+ nZones,
362
+ creatorUserId,
363
+ name
364
+ };
365
+ }
366
+
367
+ /**
368
+ * Deploy a Bundle contract directly (simplified 1-click deployment).
369
+ * No registry needed - just deploys and returns the address.
370
+ * @param {string} holonId - Unique identifier for the holon
371
+ * @param {string} name - Display name for the holon
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
376
+ */
377
+ async deployBundleDirect(holonId, name, options = {}) {
378
+ const steepness = options.steepness;
379
+ const nZones = options.nZones || 6;
380
+
381
+ return this.deployBundle(name, steepness, nZones, {
382
+ creatorUserId: holonId,
383
+ ...options
384
+ });
385
+ }
386
+
387
+ /**
388
+ * Deploy a TestToken ERC20 for testing.
389
+ * @param {string} [initialSupply='1000000'] - Initial supply in whole tokens
390
+ * @returns {Promise<{contract: Object, address: string, txHash: string, type: string, initialSupply: string}>} Deployment details
391
+ */
392
+ async deployTestToken(initialSupply = '1000000') {
393
+ const ethers = await this._loadEthers();
394
+ const supply = ethers.parseEther(initialSupply);
395
+
396
+ const result = await this._deployContract(
397
+ TestTokenABI.abi,
398
+ TestTokenABI.bytecode,
399
+ [supply]
400
+ );
401
+
402
+ return {
403
+ ...result,
404
+ type: 'TestToken',
405
+ initialSupply
406
+ };
407
+ }
408
+
409
+ /**
410
+ * Create a holon bundle through the Holons registry.
411
+ * @param {string} creatorUserId - Creator's user ID
412
+ * @param {string} name - Bundle name
413
+ * @param {number} [parameter=70] - Split parameter
414
+ * @returns {Promise<{address: string, txHash: string, name: string, creatorUserId: string}>} Created holon details
415
+ * @throws {Error} If Holons registry not deployed
416
+ */
417
+ async createHolonBundle(creatorUserId, name, parameter = 70) {
418
+ if (!this.deployedContracts.holons) {
419
+ throw new Error('Holons registry not deployed. Run deployAll() first.');
420
+ }
421
+
422
+ const holons = await this.chainManager.getContract(
423
+ this.deployedContracts.holons,
424
+ HolonsABI.abi
425
+ );
426
+
427
+ const tx = await holons.newHolonBundle(creatorUserId, name, parameter);
428
+ const receipt = await tx.wait();
429
+
430
+ // Get the created address from events
431
+ const event = receipt.logs.find(log => {
432
+ try {
433
+ const parsed = holons.interface.parseLog(log);
434
+ return parsed?.name === 'NewHolon';
435
+ } catch {
436
+ return false;
437
+ }
438
+ });
439
+
440
+ const address = event ? holons.interface.parseLog(event).args.addr : await holons.toAddress(name);
441
+
442
+ return {
443
+ address,
444
+ txHash: receipt.hash,
445
+ name,
446
+ creatorUserId
447
+ };
448
+ }
449
+
450
+ /**
451
+ * Get contract instance by address and type.
452
+ * @param {string} address - Contract address
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
456
+ */
457
+ async getContract(address, type) {
458
+ const abi = ABIs[type];
459
+ if (!abi) {
460
+ throw new Error(`Unknown contract type: ${type}`);
461
+ }
462
+ return this.chainManager.getContract(address, abi.abi);
463
+ }
464
+
465
+ /**
466
+ * Get deployed contract addresses.
467
+ * @returns {Object} Map of contract names to addresses
468
+ */
469
+ getDeployedAddresses() {
470
+ return { ...this.deployedContracts };
471
+ }
472
+
473
+ /**
474
+ * Load previously deployed contract addresses.
475
+ * @param {Object} addresses - Map of contract names to addresses
476
+ */
477
+ loadDeployedAddresses(addresses) {
478
+ this.deployedContracts = { ...addresses };
479
+ }
480
+
481
+ /**
482
+ * Internal helper to deploy a contract.
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
488
+ */
489
+ async _deployContract(abi, bytecode, constructorArgs) {
490
+ const result = await this.chainManager.deployContract(abi, bytecode, constructorArgs);
491
+ return {
492
+ contract: result.contract,
493
+ address: result.address,
494
+ txHash: result.txHash,
495
+ explorerUrl: getAddressUrl(this.chainManager.networkName, result.address)
496
+ };
497
+ }
498
+ }
499
+
500
+ export default ContractDeployer;