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,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;