holosphere 2.0.0-alpha1 → 2.0.0-alpha11

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 (416) 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/cjs/holosphere.cjs +2 -0
  19. package/dist/cjs/holosphere.cjs.map +1 -0
  20. package/dist/esm/holosphere.js +53 -0
  21. package/dist/esm/holosphere.js.map +1 -0
  22. package/dist/index-Bl6rM1NW.js +15104 -0
  23. package/dist/index-Bl6rM1NW.js.map +1 -0
  24. package/dist/index-Bwg3OzRM.cjs +12 -0
  25. package/dist/index-Bwg3OzRM.cjs.map +1 -0
  26. package/dist/index-D-jZhliX.js +40274 -0
  27. package/dist/index-D-jZhliX.js.map +1 -0
  28. package/dist/index-Dc6Z8Aob.cjs +18 -0
  29. package/dist/index-Dc6Z8Aob.cjs.map +1 -0
  30. package/dist/indexeddb-storage-5eiUNsHC.js +176 -0
  31. package/dist/indexeddb-storage-5eiUNsHC.js.map +1 -0
  32. package/dist/indexeddb-storage-FNFUVvTJ.cjs +2 -0
  33. package/dist/indexeddb-storage-FNFUVvTJ.cjs.map +1 -0
  34. package/dist/memory-storage-CI-gfmuG.js +91 -0
  35. package/dist/memory-storage-CI-gfmuG.js.map +1 -0
  36. package/dist/memory-storage-DMt36uZO.cjs +2 -0
  37. package/dist/memory-storage-DMt36uZO.cjs.map +1 -0
  38. package/dist/secp256k1-CEwJNcfV.js +1890 -0
  39. package/dist/secp256k1-CEwJNcfV.js.map +1 -0
  40. package/dist/secp256k1-CiEONUnj.cjs +12 -0
  41. package/dist/secp256k1-CiEONUnj.cjs.map +1 -0
  42. package/docs/CONTRACTS.md +797 -0
  43. package/docs/FOSDEM_PROPOSAL.md +388 -0
  44. package/docs/LOCALFIRST.md +266 -0
  45. package/docs/api/ai_aggregation.js.html +333 -0
  46. package/docs/api/ai_breakdown.js.html +524 -0
  47. package/docs/api/ai_classifier.js.html +231 -0
  48. package/docs/api/ai_council.js.html +246 -0
  49. package/docs/api/ai_embeddings.js.html +304 -0
  50. package/docs/api/ai_federation-ai.js.html +338 -0
  51. package/docs/api/ai_h3-ai.js.html +970 -0
  52. package/docs/api/ai_index.js.html +124 -0
  53. package/docs/api/ai_json-ops.js.html +241 -0
  54. package/docs/api/ai_llm-service.js.html +239 -0
  55. package/docs/api/ai_nl-query.js.html +236 -0
  56. package/docs/api/ai_relationships.js.html +367 -0
  57. package/docs/api/ai_schema-extractor.js.html +235 -0
  58. package/docs/api/ai_spatial.js.html +307 -0
  59. package/docs/api/ai_tts.js.html +214 -0
  60. package/docs/api/content_social-protocols.js.html +180 -0
  61. package/docs/api/core_holosphere.js.html +757 -0
  62. package/docs/api/crypto_nostr-utils.js.html +306 -0
  63. package/docs/api/crypto_secp256k1.js.html +267 -0
  64. package/docs/api/data/search.json +1 -0
  65. package/docs/api/federation_discovery.js.html +337 -0
  66. package/docs/api/federation_handshake.js.html +478 -0
  67. package/docs/api/federation_hologram.js.html +1053 -0
  68. package/docs/api/federation_registry.js.html +389 -0
  69. package/docs/api/fonts/Inconsolata-Regular.ttf +0 -0
  70. package/docs/api/fonts/OpenSans-Regular.ttf +0 -0
  71. package/docs/api/fonts/WorkSans-Bold.ttf +0 -0
  72. package/docs/api/global.html +3 -0
  73. package/docs/api/hierarchical_upcast.js.html +128 -0
  74. package/docs/api/index.html +265 -0
  75. package/docs/api/index.js.html +1868 -0
  76. package/docs/api/lib_ai-methods.js.html +660 -0
  77. package/docs/api/lib_contract-methods.js.html +445 -0
  78. package/docs/api/lib_errors.js.html +56 -0
  79. package/docs/api/lib_federation-methods.js.html +348 -0
  80. package/docs/api/lib_index.js.html +33 -0
  81. package/docs/api/module-ai.html +5 -0
  82. package/docs/api/module-ai_aggregation-SmartAggregation.html +6 -0
  83. package/docs/api/module-ai_aggregation.SmartAggregation.html +3 -0
  84. package/docs/api/module-ai_aggregation.html +3 -0
  85. package/docs/api/module-ai_breakdown-TaskBreakdown.html +5 -0
  86. package/docs/api/module-ai_breakdown.TaskBreakdown.html +3 -0
  87. package/docs/api/module-ai_breakdown.html +3 -0
  88. package/docs/api/module-ai_classifier-Classifier.html +6 -0
  89. package/docs/api/module-ai_classifier.Classifier.html +3 -0
  90. package/docs/api/module-ai_classifier.html +3 -0
  91. package/docs/api/module-ai_council-Council.html +6 -0
  92. package/docs/api/module-ai_council.Council.html +3 -0
  93. package/docs/api/module-ai_council.html +3 -0
  94. package/docs/api/module-ai_embeddings-Embeddings.html +5 -0
  95. package/docs/api/module-ai_embeddings.Embeddings.html +3 -0
  96. package/docs/api/module-ai_embeddings.html +3 -0
  97. package/docs/api/module-ai_federation-ai-FederationAdvisor.html +6 -0
  98. package/docs/api/module-ai_federation-ai.FederationAdvisor.html +3 -0
  99. package/docs/api/module-ai_federation-ai.html +3 -0
  100. package/docs/api/module-ai_h3-ai-H3AI.html +6 -0
  101. package/docs/api/module-ai_h3-ai.H3AI.html +3 -0
  102. package/docs/api/module-ai_h3-ai.html +3 -0
  103. package/docs/api/module-ai_json-ops-JSONOps.html +5 -0
  104. package/docs/api/module-ai_json-ops.JSONOps.html +3 -0
  105. package/docs/api/module-ai_json-ops.html +3 -0
  106. package/docs/api/module-ai_llm-service-LLMService.html +5 -0
  107. package/docs/api/module-ai_llm-service.LLMService.html +3 -0
  108. package/docs/api/module-ai_llm-service.html +3 -0
  109. package/docs/api/module-ai_nl-query-NLQuery.html +5 -0
  110. package/docs/api/module-ai_nl-query.NLQuery.html +3 -0
  111. package/docs/api/module-ai_nl-query.html +3 -0
  112. package/docs/api/module-ai_relationships-RelationshipDiscovery.html +6 -0
  113. package/docs/api/module-ai_relationships.RelationshipDiscovery.html +3 -0
  114. package/docs/api/module-ai_relationships.html +3 -0
  115. package/docs/api/module-ai_schema-extractor-SchemaExtractor.html +5 -0
  116. package/docs/api/module-ai_schema-extractor.SchemaExtractor.html +3 -0
  117. package/docs/api/module-ai_schema-extractor.html +3 -0
  118. package/docs/api/module-ai_spatial-SpatialAnalysis.html +6 -0
  119. package/docs/api/module-ai_spatial.SpatialAnalysis.html +3 -0
  120. package/docs/api/module-ai_spatial.html +3 -0
  121. package/docs/api/module-ai_tts-TTS.html +5 -0
  122. package/docs/api/module-ai_tts.TTS.html +3 -0
  123. package/docs/api/module-ai_tts.html +3 -0
  124. package/docs/api/module-content_social-protocols.html +3 -0
  125. package/docs/api/module-core_holosphere-HoloSphere.html +6 -0
  126. package/docs/api/module-core_holosphere.HoloSphere.html +3 -0
  127. package/docs/api/module-core_holosphere.html +3 -0
  128. package/docs/api/module-crypto_nostr-utils.html +3 -0
  129. package/docs/api/module-crypto_secp256k1.html +3 -0
  130. package/docs/api/module-federation_hologram.html +3 -0
  131. package/docs/api/module-hierarchical_upcast.html +3 -0
  132. package/docs/api/module-holosphere-HoloSphereBase.html +3 -0
  133. package/docs/api/module-holosphere.html +3 -0
  134. package/docs/api/module-lib_ai-methods.html +3 -0
  135. package/docs/api/module-lib_contract-methods.html +3 -0
  136. package/docs/api/module-lib_errors-AuthorizationError.html +3 -0
  137. package/docs/api/module-lib_errors-ValidationError.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.html +3 -0
  141. package/docs/api/module-lib_federation-methods.html +3 -0
  142. package/docs/api/module-lib_index.html +3 -0
  143. package/docs/api/module-schema_validator-ValidationError.html +3 -0
  144. package/docs/api/module-schema_validator.ValidationError.html +3 -0
  145. package/docs/api/module-schema_validator.html +3 -0
  146. package/docs/api/module-spatial_h3-operations.html +4 -0
  147. package/docs/api/module-storage_backend-factory.BackendFactory.html +3 -0
  148. package/docs/api/module-storage_backend-factory.html +3 -0
  149. package/docs/api/module-storage_backend-interface-StorageBackend.html +3 -0
  150. package/docs/api/module-storage_backend-interface.StorageBackend.html +3 -0
  151. package/docs/api/module-storage_backend-interface.html +3 -0
  152. package/docs/api/module-storage_backends_activitypub-backend-ActivityPubBackend.html +7 -0
  153. package/docs/api/module-storage_backends_activitypub-backend.ActivityPubBackend.html +3 -0
  154. package/docs/api/module-storage_backends_activitypub-backend.html +3 -0
  155. package/docs/api/module-storage_backends_activitypub_server-ActivityPubServer.html +8 -0
  156. package/docs/api/module-storage_backends_activitypub_server.ActivityPubServer.html +3 -0
  157. package/docs/api/module-storage_backends_activitypub_server.html +3 -0
  158. package/docs/api/module-storage_backends_gundb-backend-GunDBBackend.html +7 -0
  159. package/docs/api/module-storage_backends_gundb-backend.GunDBBackend.html +3 -0
  160. package/docs/api/module-storage_backends_gundb-backend.html +3 -0
  161. package/docs/api/module-storage_backends_nostr-backend-NostrBackend.html +8 -0
  162. package/docs/api/module-storage_backends_nostr-backend.NostrBackend.html +3 -0
  163. package/docs/api/module-storage_backends_nostr-backend.html +3 -0
  164. package/docs/api/module-storage_filesystem-storage-FileSystemStorage.html +5 -0
  165. package/docs/api/module-storage_filesystem-storage-browser-FileSystemStorage.html +3 -0
  166. package/docs/api/module-storage_filesystem-storage-browser.FileSystemStorage.html +3 -0
  167. package/docs/api/module-storage_filesystem-storage-browser.html +3 -0
  168. package/docs/api/module-storage_filesystem-storage.FileSystemStorage.html +3 -0
  169. package/docs/api/module-storage_filesystem-storage.html +3 -0
  170. package/docs/api/module-storage_global-tables.html +3 -0
  171. package/docs/api/module-storage_gun-async.html +3 -0
  172. package/docs/api/module-storage_gun-auth-GunAuth.html +5 -0
  173. package/docs/api/module-storage_gun-auth.GunAuth.html +3 -0
  174. package/docs/api/module-storage_gun-auth.html +3 -0
  175. package/docs/api/module-storage_gun-federation.html +3 -0
  176. package/docs/api/module-storage_gun-references-GunReferenceHandler.html +5 -0
  177. package/docs/api/module-storage_gun-references.GunReferenceHandler.html +3 -0
  178. package/docs/api/module-storage_gun-references.html +3 -0
  179. package/docs/api/module-storage_gun-schema-GunSchemaValidator.html +5 -0
  180. package/docs/api/module-storage_gun-schema.GunSchemaValidator.html +3 -0
  181. package/docs/api/module-storage_gun-schema.html +3 -0
  182. package/docs/api/module-storage_gun-wrapper.html +11 -0
  183. package/docs/api/module-storage_indexeddb-storage-IndexedDBStorage.html +5 -0
  184. package/docs/api/module-storage_indexeddb-storage.IndexedDBStorage.html +3 -0
  185. package/docs/api/module-storage_indexeddb-storage.html +3 -0
  186. package/docs/api/module-storage_key-storage-simple.html +3 -0
  187. package/docs/api/module-storage_key-storage.html +4 -0
  188. package/docs/api/module-storage_memory-storage-MemoryStorage.html +5 -0
  189. package/docs/api/module-storage_memory-storage.MemoryStorage.html +3 -0
  190. package/docs/api/module-storage_memory-storage.html +3 -0
  191. package/docs/api/module-storage_migration-MigrationTool.html +6 -0
  192. package/docs/api/module-storage_migration.MigrationTool.html +3 -0
  193. package/docs/api/module-storage_migration.html +3 -0
  194. package/docs/api/module-storage_nostr-async.html +18 -0
  195. package/docs/api/module-storage_nostr-client-LRUCache.html +3 -0
  196. package/docs/api/module-storage_nostr-client-NostrClient.html +7 -0
  197. package/docs/api/module-storage_nostr-client.NostrClient.html +15 -0
  198. package/docs/api/module-storage_nostr-client.html +6 -0
  199. package/docs/api/module-storage_nostr-wrapper.html +3 -0
  200. package/docs/api/module-storage_outbox-queue-OutboxQueue.html +4 -0
  201. package/docs/api/module-storage_outbox-queue.OutboxQueue.html +3 -0
  202. package/docs/api/module-storage_outbox-queue.html +3 -0
  203. package/docs/api/module-storage_persistent-storage-PersistentStorage.html +3 -0
  204. package/docs/api/module-storage_persistent-storage.html +4 -0
  205. package/docs/api/module-storage_sync-service-SyncService.html +5 -0
  206. package/docs/api/module-storage_sync-service.SyncService.html +3 -0
  207. package/docs/api/module-storage_sync-service.html +3 -0
  208. package/docs/api/module-storage_unified-storage.html +3 -0
  209. package/docs/api/module-subscriptions_manager.SubscriptionRegistry.html +3 -0
  210. package/docs/api/module-subscriptions_manager.html +3 -0
  211. package/docs/api/schema_validator.js.html +113 -0
  212. package/docs/api/scripts/core.js +726 -0
  213. package/docs/api/scripts/core.min.js +23 -0
  214. package/docs/api/scripts/resize.js +90 -0
  215. package/docs/api/scripts/search.js +265 -0
  216. package/docs/api/scripts/search.min.js +6 -0
  217. package/docs/api/scripts/third-party/Apache-License-2.0.txt +202 -0
  218. package/docs/api/scripts/third-party/fuse.js +9 -0
  219. package/docs/api/scripts/third-party/hljs-line-num-original.js +369 -0
  220. package/docs/api/scripts/third-party/hljs-line-num.js +1 -0
  221. package/docs/api/scripts/third-party/hljs-original.js +5171 -0
  222. package/docs/api/scripts/third-party/hljs.js +1 -0
  223. package/docs/api/scripts/third-party/popper.js +5 -0
  224. package/docs/api/scripts/third-party/tippy.js +1 -0
  225. package/docs/api/scripts/third-party/tocbot.js +672 -0
  226. package/docs/api/scripts/third-party/tocbot.min.js +1 -0
  227. package/docs/api/spatial_h3-operations.js.html +129 -0
  228. package/docs/api/storage_backend-factory.js.html +133 -0
  229. package/docs/api/storage_backend-interface.js.html +164 -0
  230. package/docs/api/storage_backends_activitypub-backend.js.html +298 -0
  231. package/docs/api/storage_backends_activitypub_server.js.html +678 -0
  232. package/docs/api/storage_backends_gundb-backend.js.html +878 -0
  233. package/docs/api/storage_backends_nostr-backend.js.html +254 -0
  234. package/docs/api/storage_filesystem-storage-browser.js.html +83 -0
  235. package/docs/api/storage_filesystem-storage.js.html +207 -0
  236. package/docs/api/storage_global-tables.js.html +116 -0
  237. package/docs/api/storage_gun-async.js.html +344 -0
  238. package/docs/api/storage_gun-auth.js.html +376 -0
  239. package/docs/api/storage_gun-federation.js.html +788 -0
  240. package/docs/api/storage_gun-references.js.html +212 -0
  241. package/docs/api/storage_gun-schema.js.html +309 -0
  242. package/docs/api/storage_gun-wrapper.js.html +645 -0
  243. package/docs/api/storage_indexeddb-storage.js.html +224 -0
  244. package/docs/api/storage_key-storage-simple.js.html +102 -0
  245. package/docs/api/storage_key-storage.js.html +171 -0
  246. package/docs/api/storage_memory-storage.js.html +128 -0
  247. package/docs/api/storage_migration.js.html +354 -0
  248. package/docs/api/storage_nostr-async.js.html +1076 -0
  249. package/docs/api/storage_nostr-client.js.html +1598 -0
  250. package/docs/api/storage_nostr-wrapper.js.html +218 -0
  251. package/docs/api/storage_outbox-queue.js.html +248 -0
  252. package/docs/api/storage_persistent-storage.js.html +160 -0
  253. package/docs/api/storage_sync-service.js.html +201 -0
  254. package/docs/api/storage_unified-storage.js.html +157 -0
  255. package/docs/api/styles/clean-jsdoc-theme-base.css +1159 -0
  256. package/docs/api/styles/clean-jsdoc-theme-dark.css +412 -0
  257. package/docs/api/styles/clean-jsdoc-theme-light.css +482 -0
  258. package/docs/api/styles/clean-jsdoc-theme-scrollbar.css +30 -0
  259. package/docs/api/styles/clean-jsdoc-theme-without-scrollbar.min.css +1 -0
  260. package/docs/api/styles/clean-jsdoc-theme.min.css +1 -0
  261. package/docs/api/subscriptions_manager.js.html +162 -0
  262. package/docs/contracts/api-interface.md +793 -0
  263. package/docs/data-model.md +476 -0
  264. package/docs/gun-async-usage.md +338 -0
  265. package/docs/plan.md +349 -0
  266. package/docs/quickstart.md +674 -0
  267. package/docs/research.md +362 -0
  268. package/docs/spec.md +244 -0
  269. package/docs/storage-backends.md +326 -0
  270. package/docs/tasks.md +947 -0
  271. package/examples/demo.html +47 -0
  272. package/examples/holosphere-widget.js +1242 -0
  273. package/examples/widget-demo.html +274 -0
  274. package/examples/widget.html +703 -0
  275. package/jsdoc.json +26 -0
  276. package/package.json +25 -7
  277. package/src/ai/aggregation.js +13 -2
  278. package/src/ai/breakdown.js +12 -2
  279. package/src/ai/classifier.js +14 -3
  280. package/src/ai/council.js +22 -7
  281. package/src/ai/embeddings.js +37 -15
  282. package/src/ai/federation-ai.js +13 -2
  283. package/src/ai/h3-ai.js +14 -2
  284. package/src/ai/index.js +16 -7
  285. package/src/ai/json-ops.js +18 -5
  286. package/src/ai/llm-service.js +62 -31
  287. package/src/ai/nl-query.js +12 -2
  288. package/src/ai/relationships.js +13 -2
  289. package/src/ai/schema-extractor.js +24 -10
  290. package/src/ai/spatial.js +13 -2
  291. package/src/ai/tts.js +25 -8
  292. package/src/cdn-entry.js +22 -0
  293. package/src/content/social-protocols.js +34 -25
  294. package/src/contracts/abis/Appreciative.json +1280 -0
  295. package/src/contracts/abis/AppreciativeFactory.json +101 -0
  296. package/src/contracts/abis/Bundle.json +1438 -0
  297. package/src/contracts/abis/BundleFactory.json +106 -0
  298. package/src/contracts/abis/Holon.json +881 -0
  299. package/src/contracts/abis/Holons.json +330 -0
  300. package/src/contracts/abis/Managed.json +1262 -0
  301. package/src/contracts/abis/ManagedFactory.json +149 -0
  302. package/src/contracts/abis/Membrane.json +261 -0
  303. package/src/contracts/abis/Splitter.json +1624 -0
  304. package/src/contracts/abis/SplitterFactory.json +220 -0
  305. package/src/contracts/abis/TestToken.json +321 -0
  306. package/src/contracts/abis/Zoned.json +1461 -0
  307. package/src/contracts/abis/ZonedFactory.json +154 -0
  308. package/src/contracts/chain-manager.js +403 -0
  309. package/src/contracts/deployer.js +500 -0
  310. package/src/contracts/event-listener.js +539 -0
  311. package/src/contracts/holon-contracts.js +359 -0
  312. package/src/contracts/index.js +82 -0
  313. package/src/contracts/networks.js +229 -0
  314. package/src/contracts/operations.js +687 -0
  315. package/src/contracts/queries.js +638 -0
  316. package/src/core/holosphere.js +487 -6
  317. package/src/crypto/nostr-utils.js +303 -0
  318. package/src/crypto/secp256k1.js +7 -2
  319. package/src/federation/handshake.js +475 -0
  320. package/src/federation/hologram.js +117 -3
  321. package/src/hierarchical/upcast.js +40 -25
  322. package/src/index.js +1547 -1912
  323. package/src/lib/ai-methods.js +657 -0
  324. package/src/lib/contract-methods.js +442 -0
  325. package/src/lib/errors.js +53 -0
  326. package/src/lib/federation-methods.js +345 -0
  327. package/src/lib/index.js +30 -0
  328. package/src/schema/validator.js +22 -3
  329. package/src/spatial/h3-operations.js +19 -3
  330. package/src/storage/backend-factory.js +7 -2
  331. package/src/storage/backend-interface.js +21 -2
  332. package/src/storage/backends/activitypub/server.js +25 -3
  333. package/src/storage/backends/activitypub-backend.js +25 -2
  334. package/src/storage/backends/gundb-backend.js +692 -50
  335. package/src/storage/backends/nostr-backend.js +116 -1
  336. package/src/storage/filesystem-storage-browser.js +42 -2
  337. package/src/storage/filesystem-storage.js +72 -5
  338. package/src/storage/global-tables.js +35 -3
  339. package/src/storage/gun-async.js +75 -15
  340. package/src/storage/gun-auth.js +373 -0
  341. package/src/storage/gun-federation.js +785 -0
  342. package/src/storage/gun-references.js +209 -0
  343. package/src/storage/gun-schema.js +306 -0
  344. package/src/storage/gun-wrapper.js +475 -54
  345. package/src/storage/indexeddb-storage.js +112 -13
  346. package/src/storage/key-storage-simple.js +32 -9
  347. package/src/storage/key-storage.js +45 -13
  348. package/src/storage/memory-storage.js +68 -2
  349. package/src/storage/migration.js +20 -7
  350. package/src/storage/nostr-async.js +412 -122
  351. package/src/storage/nostr-client.js +749 -76
  352. package/src/storage/nostr-wrapper.js +6 -2
  353. package/src/storage/outbox-queue.js +55 -18
  354. package/src/storage/persistent-storage.js +62 -14
  355. package/src/storage/sync-service.js +51 -17
  356. package/src/storage/unified-storage.js +154 -0
  357. package/src/subscriptions/manager.js +34 -17
  358. package/types/index.d.ts +133 -0
  359. package/vite.config.cdn.js +60 -0
  360. package/tests/unit/ai/aggregation.test.js +0 -295
  361. package/tests/unit/ai/breakdown.test.js +0 -446
  362. package/tests/unit/ai/classifier.test.js +0 -294
  363. package/tests/unit/ai/council.test.js +0 -262
  364. package/tests/unit/ai/embeddings.test.js +0 -384
  365. package/tests/unit/ai/federation-ai.test.js +0 -344
  366. package/tests/unit/ai/h3-ai.test.js +0 -458
  367. package/tests/unit/ai/index.test.js +0 -304
  368. package/tests/unit/ai/json-ops.test.js +0 -307
  369. package/tests/unit/ai/llm-service.test.js +0 -390
  370. package/tests/unit/ai/nl-query.test.js +0 -383
  371. package/tests/unit/ai/relationships.test.js +0 -311
  372. package/tests/unit/ai/schema-extractor.test.js +0 -384
  373. package/tests/unit/ai/spatial.test.js +0 -279
  374. package/tests/unit/ai/tts.test.js +0 -279
  375. package/tests/unit/content.test.js +0 -332
  376. package/tests/unit/contract/core.test.js +0 -88
  377. package/tests/unit/contract/crypto.test.js +0 -198
  378. package/tests/unit/contract/data.test.js +0 -223
  379. package/tests/unit/contract/federation.test.js +0 -181
  380. package/tests/unit/contract/hierarchical.test.js +0 -113
  381. package/tests/unit/contract/schema.test.js +0 -114
  382. package/tests/unit/contract/social.test.js +0 -217
  383. package/tests/unit/contract/spatial.test.js +0 -110
  384. package/tests/unit/contract/subscriptions.test.js +0 -128
  385. package/tests/unit/contract/utils.test.js +0 -159
  386. package/tests/unit/core.test.js +0 -152
  387. package/tests/unit/crypto.test.js +0 -328
  388. package/tests/unit/federation.test.js +0 -234
  389. package/tests/unit/gun-async.test.js +0 -252
  390. package/tests/unit/hierarchical.test.js +0 -399
  391. package/tests/unit/integration/scenario-01-geographic-storage.test.js +0 -74
  392. package/tests/unit/integration/scenario-02-federation.test.js +0 -76
  393. package/tests/unit/integration/scenario-03-subscriptions.test.js +0 -102
  394. package/tests/unit/integration/scenario-04-validation.test.js +0 -129
  395. package/tests/unit/integration/scenario-05-hierarchy.test.js +0 -125
  396. package/tests/unit/integration/scenario-06-social.test.js +0 -135
  397. package/tests/unit/integration/scenario-07-persistence.test.js +0 -130
  398. package/tests/unit/integration/scenario-08-authorization.test.js +0 -161
  399. package/tests/unit/integration/scenario-09-cross-dimensional.test.js +0 -139
  400. package/tests/unit/integration/scenario-10-cross-holosphere-capabilities.test.js +0 -357
  401. package/tests/unit/integration/scenario-11-cross-holosphere-federation.test.js +0 -410
  402. package/tests/unit/integration/scenario-12-capability-federated-read.test.js +0 -719
  403. package/tests/unit/performance/benchmark.test.js +0 -85
  404. package/tests/unit/schema.test.js +0 -213
  405. package/tests/unit/spatial.test.js +0 -158
  406. package/tests/unit/storage.test.js +0 -195
  407. package/tests/unit/subscriptions.test.js +0 -328
  408. package/tests/unit/test-data-permanence-debug.js +0 -197
  409. package/tests/unit/test-data-permanence.js +0 -340
  410. package/tests/unit/test-key-persistence-fixed.js +0 -148
  411. package/tests/unit/test-key-persistence.js +0 -172
  412. package/tests/unit/test-relay-permanence.js +0 -376
  413. package/tests/unit/test-second-node.js +0 -95
  414. package/tests/unit/test-simple-write.js +0 -89
  415. /package/{cleanup-test-data.js → scripts/cleanup-test-data.js} +0 -0
  416. /package/{test-ai-real-api.js → scripts/test-ai-real-api.js} +0 -0
@@ -0,0 +1,638 @@
1
+ /**
2
+ * @fileoverview Contract query utilities for reading contract state.
3
+ * Provides read-only queries for zones, splits, appreciation, members, balances, and more.
4
+ * @module contracts/queries
5
+ */
6
+
7
+ import { ethers } from 'ethers';
8
+ // Import ABIs directly to avoid circular dependency with index.js
9
+ import SplitterABI from './abis/Splitter.json' with { type: 'json' };
10
+ import ManagedABI from './abis/Managed.json' with { type: 'json' };
11
+ import ZonedABI from './abis/Zoned.json' with { type: 'json' };
12
+ import AppreciativeABI from './abis/Appreciative.json' with { type: 'json' };
13
+ import BundleABI from './abis/Bundle.json' with { type: 'json' };
14
+ import HolonsABI from './abis/Holons.json' with { type: 'json' };
15
+
16
+ const ContractABIs = {
17
+ Splitter: SplitterABI,
18
+ Managed: ManagedABI,
19
+ Zoned: ZonedABI,
20
+ Appreciative: AppreciativeABI,
21
+ Bundle: BundleABI,
22
+ Holons: HolonsABI
23
+ };
24
+
25
+ /**
26
+ * Helper to format wei to ETH.
27
+ * @private
28
+ * @param {bigint} wei - Wei amount
29
+ * @returns {string} ETH as decimal string
30
+ */
31
+ function formatEth(wei) {
32
+ return ethers.formatEther(wei);
33
+ }
34
+
35
+ /**
36
+ * Helper to format wei to ETH as number.
37
+ * @private
38
+ * @param {bigint} wei - Wei amount
39
+ * @returns {number} ETH as number
40
+ */
41
+ function formatEthNumber(wei) {
42
+ return Number(ethers.formatEther(wei));
43
+ }
44
+
45
+ /**
46
+ * Query utilities for all Holosphere contract types.
47
+ * Provides read-only access to contract state without requiring a signer.
48
+ * @class
49
+ */
50
+ export class ContractQueries {
51
+ /**
52
+ * Create a new ContractQueries instance.
53
+ * @param {Object} provider - Ethers.js provider instance
54
+ */
55
+ constructor(provider) {
56
+ this.provider = provider;
57
+ }
58
+
59
+ /**
60
+ * Get a contract instance with the appropriate ABI.
61
+ * @param {string} address - Contract address
62
+ * @param {string} flavor - Contract flavor (Splitter, Managed, Zoned, Appreciative, Bundle, Holons)
63
+ * @returns {Object} Ethers.js Contract instance
64
+ * @throws {Error} If unknown contract flavor
65
+ */
66
+ getContract(address, flavor) {
67
+ const abi = ContractABIs[flavor];
68
+ if (!abi) {
69
+ throw new Error(`Unknown contract flavor: ${flavor}`);
70
+ }
71
+ return new ethers.Contract(address, abi, this.provider);
72
+ }
73
+
74
+ /**
75
+ * Auto-detect contract flavor by calling flavor() method.
76
+ * @param {string} address - Contract address
77
+ * @returns {Promise<string>} Contract flavor or 'Unknown'
78
+ */
79
+ async detectFlavor(address) {
80
+ // Try with a minimal ABI that has flavor()
81
+ const minAbi = [
82
+ 'function flavor() view returns (string)',
83
+ 'function version() view returns (string)'
84
+ ];
85
+ const contract = new ethers.Contract(address, minAbi, this.provider);
86
+ try {
87
+ return await contract.flavor();
88
+ } catch {
89
+ return 'Unknown';
90
+ }
91
+ }
92
+
93
+ // ==================== COMMON QUERIES ====================
94
+
95
+ /**
96
+ * Get basic contract information.
97
+ * @param {string} address - Contract address
98
+ * @param {string} flavor - Contract flavor
99
+ * @returns {Promise<{address: string, name: string, flavor: string, version: string, creator: string, memberCount: number}>} Contract info
100
+ */
101
+ async getContractInfo(address, flavor) {
102
+ const contract = this.getContract(address, flavor);
103
+ const [name, contractFlavor, version, creator, size] = await Promise.all([
104
+ contract.name().catch(() => ''),
105
+ contract.flavor().catch(() => flavor),
106
+ contract.version().catch(() => ''),
107
+ contract.creator().catch(() => ethers.ZeroAddress),
108
+ contract.getSize().catch(() => 0n)
109
+ ]);
110
+
111
+ return {
112
+ address,
113
+ name,
114
+ flavor: contractFlavor,
115
+ version,
116
+ creator,
117
+ memberCount: Number(size)
118
+ };
119
+ }
120
+
121
+ /**
122
+ * Get all member user IDs.
123
+ * @param {string} address - Contract address
124
+ * @param {string} flavor - Contract flavor
125
+ * @returns {Promise<string[]>} Array of user IDs
126
+ */
127
+ async getMembers(address, flavor) {
128
+ const contract = this.getContract(address, flavor);
129
+ const size = await contract.getSize();
130
+ const members = [];
131
+ for (let i = 0; i < size; i++) {
132
+ const userId = await contract.userIds(i);
133
+ members.push(userId);
134
+ }
135
+ return members;
136
+ }
137
+
138
+ /**
139
+ * Get user's ETH balance in the contract.
140
+ * @param {string} address - Contract address
141
+ * @param {string} flavor - Contract flavor
142
+ * @param {string} userId - User identifier
143
+ * @returns {Promise<{wei: string, eth: number}>} Balance in wei and ETH
144
+ */
145
+ async getUserEthBalance(address, flavor, userId) {
146
+ const contract = this.getContract(address, flavor);
147
+ const balance = await contract.etherBalance(userId);
148
+ return {
149
+ wei: balance.toString(),
150
+ eth: formatEthNumber(balance)
151
+ };
152
+ }
153
+
154
+ /**
155
+ * Get user's ERC20 token balance in the contract.
156
+ * @param {string} address - Contract address
157
+ * @param {string} flavor - Contract flavor
158
+ * @param {string} userId - User identifier
159
+ * @param {string} tokenAddress - ERC20 token address
160
+ * @returns {Promise<{wei: string, formatted: number}>} Token balance
161
+ */
162
+ async getUserTokenBalance(address, flavor, userId, tokenAddress) {
163
+ const contract = this.getContract(address, flavor);
164
+ const balance = await contract.tokenBalance(userId, tokenAddress);
165
+ return {
166
+ wei: balance.toString(),
167
+ formatted: formatEthNumber(balance)
168
+ };
169
+ }
170
+
171
+ /**
172
+ * Get total deposited amount for a token.
173
+ * @param {string} address - Contract address
174
+ * @param {string} flavor - Contract flavor
175
+ * @param {string} [tokenAddress] - Token address (defaults to ETH/zero address)
176
+ * @returns {Promise<{wei: string, formatted: number}>} Total deposited
177
+ */
178
+ async getTotalDeposited(address, flavor, tokenAddress) {
179
+ const contract = this.getContract(address, flavor);
180
+ // For ETH, use address(0)
181
+ const token = tokenAddress || ethers.ZeroAddress;
182
+ const total = await contract.totalDeposited(token);
183
+ return {
184
+ wei: total.toString(),
185
+ formatted: formatEthNumber(total)
186
+ };
187
+ }
188
+
189
+ /**
190
+ * Check if user has claimed their rewards.
191
+ * @param {string} address - Contract address
192
+ * @param {string} flavor - Contract flavor
193
+ * @param {string} userId - User identifier
194
+ * @returns {Promise<boolean>} True if claimed
195
+ */
196
+ async hasClaimed(address, flavor, userId) {
197
+ const contract = this.getContract(address, flavor);
198
+ return contract.hasClaimed(userId);
199
+ }
200
+
201
+ // ==================== SPLITTER QUERIES ====================
202
+
203
+ /**
204
+ * Get Splitter's internal/external split configuration
205
+ */
206
+ async getSplitterSplit(address) {
207
+ const contract = this.getContract(address, 'Splitter');
208
+ const [internal, external] = await Promise.all([
209
+ contract.internalContractSplitPercentage(),
210
+ contract.externalContractSplitPercentage()
211
+ ]);
212
+ return {
213
+ internalPercentage: Number(internal),
214
+ externalPercentage: Number(external),
215
+ internalPercent: Number(internal) / 100,
216
+ externalPercent: Number(external) / 100
217
+ };
218
+ }
219
+
220
+ /**
221
+ * Get Splitter's child contracts
222
+ */
223
+ async getSplitterChildren(address) {
224
+ const contract = this.getContract(address, 'Splitter');
225
+ const [keys, addresses] = await contract.getContractAddresses();
226
+ const children = [];
227
+ for (let i = 0; i < keys.length; i++) {
228
+ children.push({
229
+ key: keys[i],
230
+ address: addresses[i]
231
+ });
232
+ }
233
+ return children;
234
+ }
235
+
236
+ /**
237
+ * Get user's percentage split in Splitter
238
+ */
239
+ async getSplitterUserPercentage(address, userId) {
240
+ const contract = this.getContract(address, 'Splitter');
241
+ const pct = await contract.percentages(userId);
242
+ return {
243
+ basisPoints: Number(pct),
244
+ percent: Number(pct) / 100
245
+ };
246
+ }
247
+
248
+ /**
249
+ * Get all member percentages in Splitter
250
+ */
251
+ async getSplitterAllPercentages(address) {
252
+ const members = await this.getMembers(address, 'Splitter');
253
+ const contract = this.getContract(address, 'Splitter');
254
+ const results = [];
255
+ for (const userId of members) {
256
+ const pct = await contract.percentages(userId);
257
+ results.push({
258
+ userId,
259
+ basisPoints: Number(pct),
260
+ percent: Number(pct) / 100
261
+ });
262
+ }
263
+ return results;
264
+ }
265
+
266
+ // ==================== ZONED QUERIES ====================
267
+
268
+ /**
269
+ * Get Zoned contract configuration
270
+ */
271
+ async getZonedConfig(address) {
272
+ const contract = this.getContract(address, 'Zoned');
273
+ const [nzones, a, b, c] = await Promise.all([
274
+ contract.nzones(),
275
+ contract.a(),
276
+ contract.b(),
277
+ contract.c()
278
+ ]);
279
+ return {
280
+ numberOfZones: Number(nzones),
281
+ rewardFunction: {
282
+ a: Number(a),
283
+ b: Number(b),
284
+ c: Number(c)
285
+ }
286
+ };
287
+ }
288
+
289
+ /**
290
+ * Get user's zone assignment
291
+ */
292
+ async getUserZone(address, userId) {
293
+ const contract = this.getContract(address, 'Zoned');
294
+ const zone = await contract.zone(userId);
295
+ return Number(zone);
296
+ }
297
+
298
+ /**
299
+ * Get all members in a specific zone
300
+ */
301
+ async getZoneMembers(address, zoneNumber) {
302
+ const contract = this.getContract(address, 'Zoned');
303
+ return contract.getZoneMembers(zoneNumber);
304
+ }
305
+
306
+ /**
307
+ * Get complete zone breakdown
308
+ */
309
+ async getZonedBreakdown(address) {
310
+ const config = await this.getZonedConfig(address);
311
+ const contract = this.getContract(address, 'Zoned');
312
+ const zones = [];
313
+
314
+ for (let z = 1; z <= config.numberOfZones; z++) {
315
+ const members = await contract.getZoneMembers(z);
316
+ zones.push({
317
+ zone: z,
318
+ members,
319
+ memberCount: members.length
320
+ });
321
+ }
322
+
323
+ // Also get calculated rewards
324
+ const rewards = await contract.calculateRewards();
325
+ const rewardsByZone = rewards.map((r, i) => ({
326
+ zone: i + 1,
327
+ weight: Number(r)
328
+ }));
329
+
330
+ return {
331
+ config,
332
+ zones,
333
+ rewardWeights: rewardsByZone
334
+ };
335
+ }
336
+
337
+ // ==================== MANAGED QUERIES ====================
338
+
339
+ /**
340
+ * Get Managed contract appreciation info
341
+ */
342
+ async getManagedAppreciation(address, userId) {
343
+ const contract = this.getContract(address, 'Managed');
344
+ const appreciation = await contract.appreciation(userId);
345
+ const totalAppreciation = await contract.totalappreciation();
346
+ return {
347
+ userAppreciation: Number(appreciation),
348
+ totalAppreciation: Number(totalAppreciation),
349
+ sharePercent: Number(totalAppreciation) > 0
350
+ ? (Number(appreciation) / Number(totalAppreciation)) * 100
351
+ : 0
352
+ };
353
+ }
354
+
355
+ /**
356
+ * Get all member appreciation in Managed contract
357
+ */
358
+ async getManagedAllAppreciation(address) {
359
+ const members = await this.getMembers(address, 'Managed');
360
+ const contract = this.getContract(address, 'Managed');
361
+ const totalAppreciation = await contract.totalappreciation();
362
+ const maxAppreciation = await contract.maxAppreciation().catch(() => 0n);
363
+
364
+ const results = [];
365
+ for (const userId of members) {
366
+ const appreciation = await contract.appreciation(userId);
367
+ results.push({
368
+ userId,
369
+ appreciation: Number(appreciation),
370
+ sharePercent: Number(totalAppreciation) > 0
371
+ ? (Number(appreciation) / Number(totalAppreciation)) * 100
372
+ : 0
373
+ });
374
+ }
375
+
376
+ return {
377
+ members: results,
378
+ totalAppreciation: Number(totalAppreciation),
379
+ maxAppreciation: Number(maxAppreciation)
380
+ };
381
+ }
382
+
383
+ // ==================== APPRECIATIVE QUERIES ====================
384
+
385
+ /**
386
+ * Get Appreciative contract peer appreciation
387
+ */
388
+ async getAppreciativePeer(address, userId) {
389
+ const contract = this.getContract(address, 'Appreciative');
390
+ const [appreciation, remaining, totalAppreciation] = await Promise.all([
391
+ contract.appreciation(userId),
392
+ contract.remainingappreciation(userId),
393
+ contract.totalappreciation()
394
+ ]);
395
+ return {
396
+ received: Number(appreciation),
397
+ remainingToGive: Number(remaining),
398
+ totalPool: Number(totalAppreciation),
399
+ sharePercent: Number(totalAppreciation) > 0
400
+ ? (Number(appreciation) / Number(totalAppreciation)) * 100
401
+ : 0
402
+ };
403
+ }
404
+
405
+ /**
406
+ * Get all peer appreciation in Appreciative contract
407
+ */
408
+ async getAppreciativeAll(address) {
409
+ const members = await this.getMembers(address, 'Appreciative');
410
+ const contract = this.getContract(address, 'Appreciative');
411
+ const totalAppreciation = await contract.totalappreciation();
412
+
413
+ const results = [];
414
+ for (const userId of members) {
415
+ const [appreciation, remaining] = await Promise.all([
416
+ contract.appreciation(userId),
417
+ contract.remainingappreciation(userId)
418
+ ]);
419
+ results.push({
420
+ userId,
421
+ received: Number(appreciation),
422
+ remainingToGive: Number(remaining),
423
+ sharePercent: Number(totalAppreciation) > 0
424
+ ? (Number(appreciation) / Number(totalAppreciation)) * 100
425
+ : 0
426
+ });
427
+ }
428
+
429
+ return {
430
+ members: results,
431
+ totalAppreciation: Number(totalAppreciation)
432
+ };
433
+ }
434
+
435
+ // ==================== BUNDLE QUERIES ====================
436
+
437
+ /**
438
+ * Get Bundle contract configuration
439
+ */
440
+ async getBundleConfig(address) {
441
+ const contract = this.getContract(address, 'Bundle');
442
+ const [steepness, nzones, interiorPct, exteriorPct, electionActive] = await Promise.all([
443
+ contract.steepness(),
444
+ contract.nzones(),
445
+ contract.interiorPercentage(),
446
+ contract.exteriorPercentage(),
447
+ contract.electionActive()
448
+ ]);
449
+
450
+ return {
451
+ steepness: Number(steepness),
452
+ numberOfZones: Number(nzones),
453
+ interiorPercentage: Number(interiorPct) / 100, // Basis points to percent
454
+ exteriorPercentage: Number(exteriorPct) / 100,
455
+ electionActive
456
+ };
457
+ }
458
+
459
+ /**
460
+ * Get Bundle interior/exterior split
461
+ */
462
+ async getBundleSplit(address) {
463
+ const contract = this.getContract(address, 'Bundle');
464
+ const [interior, exterior] = await Promise.all([
465
+ contract.interiorPercentage(),
466
+ contract.exteriorPercentage()
467
+ ]);
468
+ return {
469
+ interiorBasisPoints: Number(interior),
470
+ exteriorBasisPoints: Number(exterior),
471
+ interiorPercent: Number(interior) / 100,
472
+ exteriorPercent: Number(exterior) / 100
473
+ };
474
+ }
475
+
476
+ /**
477
+ * Get Bundle zone weights
478
+ */
479
+ async getBundleZoneWeights(address) {
480
+ const contract = this.getContract(address, 'Bundle');
481
+ const weights = await contract.getZoneWeights();
482
+ return weights.map((w, i) => ({
483
+ zone: i + 1,
484
+ weight: Number(w)
485
+ }));
486
+ }
487
+
488
+ /**
489
+ * Get Bundle user's zone and interior share
490
+ */
491
+ async getBundleUserInfo(address, userId) {
492
+ const contract = this.getContract(address, 'Bundle');
493
+ const [zone, interiorShare, isInterior, isExterior, isMember] = await Promise.all([
494
+ contract.zone(userId),
495
+ contract.interiorShare(userId),
496
+ contract.isInteriorMember(userId),
497
+ contract.isExteriorMember(userId),
498
+ contract.isBundleMember(userId)
499
+ ]);
500
+ return {
501
+ zone: Number(zone),
502
+ interiorShareBasisPoints: Number(interiorShare),
503
+ interiorSharePercent: Number(interiorShare) / 100,
504
+ isInteriorMember: isInterior,
505
+ isExteriorMember: isExterior,
506
+ isMember
507
+ };
508
+ }
509
+
510
+ /**
511
+ * Get Bundle interior members
512
+ */
513
+ async getBundleInteriorMembers(address) {
514
+ const contract = this.getContract(address, 'Bundle');
515
+ return contract.getInteriorMembers();
516
+ }
517
+
518
+ /**
519
+ * Get Bundle zone breakdown (exterior)
520
+ */
521
+ async getBundleZoneBreakdown(address) {
522
+ const config = await this.getBundleConfig(address);
523
+ const contract = this.getContract(address, 'Bundle');
524
+ const zones = [];
525
+
526
+ for (let z = 1; z <= config.numberOfZones; z++) {
527
+ const members = await contract.getZoneMembers(z);
528
+ zones.push({
529
+ zone: z,
530
+ members,
531
+ memberCount: members.length
532
+ });
533
+ }
534
+
535
+ return {
536
+ config,
537
+ zones,
538
+ zoneWeights: await this.getBundleZoneWeights(address)
539
+ };
540
+ }
541
+
542
+ /**
543
+ * Get Bundle election info
544
+ */
545
+ async getBundleElection(address) {
546
+ const contract = this.getContract(address, 'Bundle');
547
+ const [electionActive, candidates] = await Promise.all([
548
+ contract.electionActive(),
549
+ contract.getCandidates()
550
+ ]);
551
+
552
+ if (!electionActive) {
553
+ return { active: false, candidates: [] };
554
+ }
555
+
556
+ const candidateInfo = [];
557
+ for (const candidate of candidates) {
558
+ const votes = await contract.votes(candidate);
559
+ candidateInfo.push({
560
+ userId: candidate,
561
+ votes: Number(votes)
562
+ });
563
+ }
564
+
565
+ return {
566
+ active: true,
567
+ candidates: candidateInfo.sort((a, b) => b.votes - a.votes)
568
+ };
569
+ }
570
+
571
+ // ==================== FULL SNAPSHOT ====================
572
+
573
+ /**
574
+ * Get complete contract state snapshot including all members and configuration.
575
+ * @param {string} address - Contract address
576
+ * @returns {Promise<Object>} Complete contract state
577
+ */
578
+ async getFullSnapshot(address) {
579
+ const flavor = await this.detectFlavor(address);
580
+ const info = await this.getContractInfo(address, flavor);
581
+ const members = await this.getMembers(address, flavor);
582
+
583
+ const snapshot = {
584
+ ...info,
585
+ members,
586
+ memberDetails: []
587
+ };
588
+
589
+ // Get member-specific details
590
+ for (const userId of members) {
591
+ const balance = await this.getUserEthBalance(address, flavor, userId);
592
+ const claimed = await this.hasClaimed(address, flavor, userId);
593
+
594
+ const memberDetail = {
595
+ userId,
596
+ ethBalance: balance,
597
+ hasClaimed: claimed
598
+ };
599
+
600
+ // Flavor-specific details
601
+ if (flavor === 'Splitter') {
602
+ const pct = await this.getSplitterUserPercentage(address, userId);
603
+ memberDetail.percentage = pct;
604
+ } else if (flavor === 'Zoned') {
605
+ memberDetail.zone = await this.getUserZone(address, userId);
606
+ } else if (flavor === 'Managed') {
607
+ memberDetail.appreciation = await this.getManagedAppreciation(address, userId);
608
+ } else if (flavor === 'Appreciative') {
609
+ memberDetail.appreciation = await this.getAppreciativePeer(address, userId);
610
+ } else if (flavor === 'Bundle') {
611
+ memberDetail.bundleInfo = await this.getBundleUserInfo(address, userId);
612
+ }
613
+
614
+ snapshot.memberDetails.push(memberDetail);
615
+ }
616
+
617
+ // Add flavor-specific configuration
618
+ if (flavor === 'Splitter') {
619
+ snapshot.split = await this.getSplitterSplit(address);
620
+ snapshot.children = await this.getSplitterChildren(address);
621
+ } else if (flavor === 'Zoned') {
622
+ snapshot.zoneConfig = await this.getZonedBreakdown(address);
623
+ } else if (flavor === 'Managed') {
624
+ snapshot.appreciationSummary = await this.getManagedAllAppreciation(address);
625
+ } else if (flavor === 'Appreciative') {
626
+ snapshot.appreciationSummary = await this.getAppreciativeAll(address);
627
+ } else if (flavor === 'Bundle') {
628
+ snapshot.bundleConfig = await this.getBundleConfig(address);
629
+ snapshot.bundleSplit = await this.getBundleSplit(address);
630
+ snapshot.bundleZones = await this.getBundleZoneBreakdown(address);
631
+ snapshot.election = await this.getBundleElection(address);
632
+ }
633
+
634
+ return snapshot;
635
+ }
636
+ }
637
+
638
+ export default ContractQueries;